feat: add search UI layer — SearchTable, SearchFilters, SaveSearchForm, route, and styles
web: shell, theme, keyboard, stub routes, palette skeleton - lib/theme.ts: bootstrapTheme() + setTheme() with OS/localStorage sync - lib/keyboard.ts: g-prefix nav, j/k cursor, ⌘K palette, Esc, Enter - lib/theme.test.ts + lib/keyboard.test.ts: 26 vitest tests (TDD) - shell/TopBar.tsx: brand crumb, search trigger, tab nav using router pathname - shell/SubBar.tsx: slot component with optional right section - shell/Palette.tsx: modal overlay, JUMP items, synthetic SEARCH row - styles/shell.css + styles/palette.css: ported verbatim from prototype.css - routes/__root.tsx: wires TopBar, Outlet, Palette, keyboard controller, bootstrapTheme - routes/index.tsx + projects/stats/health/settings/search.tsx: EmptyState stubs - main.tsx: replace scaffold div with RouterProvider - vitest.config.ts: add jsdom url for localStorage support (Node 25 compat)