--- phase: 10-ux-interaction plan: 09 type: execute wave: 2 depends_on: [10-04, 10-06, 10-05] files_modified: - frontend/src/App.vue - frontend/src/views/FileManagerView.vue - frontend/src/components/storage/StorageBrowser.vue - frontend/src/components/upload/DropZone.vue - frontend/src/components/documents/SearchBar.vue - frontend/src/__tests__/keyboard.test.js autonomous: true requirements: [UX-05, UX-06, UX-07, UX-08] must_haves: truths: - "Pressing `/` (when no input focused) calls focus() on the SearchBar input via App.vue routeViewRef chain" - "Pressing Escape (when no input focused) clears the active search query" - "Pressing U (when no input focused) triggers DropZone.triggerInput via the ref chain" - "Pressing N (when no input focused) starts the new-folder inline input in StorageBrowser" - "The global keydown handler guards against active INPUT/TEXTAREA/SELECT/contenteditable elements and returns early" - "DropZone.triggerInput is exposed via defineExpose" - "SearchBar.focus is exposed via defineExpose" - "StorageBrowser exposes triggerUpload, focusSearch, clearSearch alongside its existing startNewFolder" - "FileManagerView exposes focusSearch, triggerUpload, startNewFolder, clearSearch via defineExpose" artifacts: - path: "frontend/src/App.vue" provides: "Global keydown handler + routeViewRef" - path: "frontend/src/views/FileManagerView.vue" provides: "defineExpose of focusSearch/triggerUpload/startNewFolder/clearSearch" - path: "frontend/src/components/storage/StorageBrowser.vue" provides: "Updated defineExpose with triggerUpload + focusSearch + clearSearch" - path: "frontend/src/components/upload/DropZone.vue" provides: "defineExpose of triggerInput" - path: "frontend/src/components/documents/SearchBar.vue" provides: "defineExpose of focus()" key_links: - from: "App.vue keydown handler" to: "routeViewRef.value methods" via: "optional chaining (?.)" pattern: "routeViewRef\\.value\\?\\." - from: "StorageBrowser.vue" to: "DropZone.vue" via: "dropZoneRef.value?.triggerInput()" pattern: "dropZoneRef\\.value" - from: "StorageBrowser.vue" to: "SearchBar.vue" via: "searchBarRef.value?.focus()" pattern: "searchBarRef\\.value" --- Implement the four global keyboard shortcuts (`/`, `Escape`, `U`, `N`) per D-14, D-15. The handler lives in `App.vue` (already `