Inspector: disabling a scene object doesn't mark the scene dirty

Bug

Toggling a scene object's "active" checkbox in the Inspector does not mark the scene as dirty (unsaved) — found while testing #135 (closed) (image-based lighting), where a disabled EnvironmentComponent-holding object silently persisted its disabled state across a session with no unsaved-changes indicator ever appearing.

Root cause

studio/inspector/Inspector.zig:90:

_ = gui.checkbox(@src(), &obj.active, null, .{ .gravity_y = 0.5 });

The checkbox's return value (whether it changed) is discarded. Every other field in this same file follows the pattern if (gui.checkbox(...)) EditorState.scene_dirty = true; (see lines 119, 200, 211, 229, 254, 275, 505) — the active toggle is the one outlier that doesn't set scene_dirty.

Fix

Mirror the existing pattern:

if (gui.checkbox(@src(), &obj.active, null, .{ .gravity_y = 0.5 })) {
    EditorState.scene_dirty = true;
}

Enhancement: visual hint for disabled nodes in the Hierarchy

Right now a disabled node looks identical to an enabled one in studio/scene-hierarchy/SceneTree.zig's tree — easy to lose track of which objects are off. TreeView.zig already has a per-row tint: ?gui.Color hook (used for the prefab-instance blue tint, prefab_tint in SceneTree.zig) — the same mechanism could greyscale/dim the label for !obj.active nodes, giving an at-a-glance visual cue matching Unity/Godot's convention of dimming disabled hierarchy entries.

Acceptance

  • Toggling active in the Inspector marks the scene dirty (tab shows unsaved indicator, prompts on close).
  • Disabled nodes are visually distinguished (dimmed/greyed) in the Hierarchy panel.