Harden cabinet frontend: discriminated unions, a11y, auth guard, design tokens
Structural improvements from adversarial code review:
- Rewrite Panel type as discriminated union (folder vs section) with panelKey() helper
- Add keyboard navigation and ARIA attributes to FileListRow and FileGridCard
- Add error boundary with retry to root route
- Add loading skeleton state to PanelStack
- Replace hardcoded API URLs with VITE_PDS_URL / VITE_APPVIEW_URL env vars
- Extract file-icon colors into theme tokens, add text scale tokens (text-ui, text-caption, text-label, text-micro)
- Add beforeLoad auth guard on cabinet route, build out login page
- Make starredIds a single source of truth (Set) instead of pre-filtered array
- Delete unused documents store, gitignore generated routeTree
- Add vite/client types to tsconfig