···644644645645 let activeStates = terminalManager.activeWorktreeStates
646646647647+ // Mark all states as canvas-managed so that tree updates (e.g. split
648648+ // creation) don't trigger applySurfaceActivity with stale normal-mode
649649+ // window visibility, which would occlude every surface.
650650+ for state in activeStates {
651651+ state.isCanvasManaged = true
652652+ }
653653+647654 // Auto-focus the card that was active before entering canvas.
648655 if let selectedID = terminalManager.selectedWorktreeID,
649656 let state = activeStates.first(where: { $0.worktreeID == selectedID }),
···670677 }
671678672679 private func deactivateCanvas() {
673673- clearBroadcastCallbacks(states: terminalManager.activeWorktreeStates)
680680+ let activeStates = terminalManager.activeWorktreeStates
681681+ for state in activeStates {
682682+ state.isCanvasManaged = false
683683+ }
684684+ clearBroadcastCallbacks(states: activeStates)
674685 selectionState.clear()
675686 // Don't occlude surfaces here. In SwiftUI's if/else view swap,
676687 // onAppear fires before onDisappear, so occluding here would undo