- Replace GridContainer-based puzzle with drag-and-drop wire system
- Add draw_wires() and on_canvas_input() driven by WireCanvas node
- Shuffle right-side endpoints for varied puzzle layout
- Fix type inference errors (Dictionary values cast to Array/Color)
- Fix WireCanvas size_flags_vertical to SIZE_SHRINK_CENTER
- Set Panel custom_minimum_size and VBox to prevent layout overflow
- Title and StatusLabel now always visible
- Add AudioManager autoload with music and sfx players
- Add ambiance tracks for entrepot, atelier and cour zones
- Add SFX for footstep, item_pickup, interact, door_unlock, repair_success, vrac_talking, iris_talking
- Add crossfade transition between ambiance zones
- Add loop via finished signal on music_player
- Set ambiance volume to -12dB to balance with SFX
- Set PROCESS_MODE_ALWAYS to prevent audio cut during dialogues
- Add stop_ambiance() call on main_menu to reset music after credits
- Add atelier tilemap (14x14 tiles) with dark atmosphere
- Add Journal D-891 interactable with Matteo Corda narrative
- Add pushable frozen robot (reuses PushableBox logic)
- Add PassageTrigger to reveal hidden path via TileMapLayer
- Add RepairStation for SCRAP-09 self-repair mini-game
- Add scrap09 puzzle in RepairMinigame with valid connections
- Add door to cour unlocked by scrap09_repaired flag