- Convert theme to SolidJS Context/Provider pattern (ThemeProvider)
- Extract createThemeState() for testability without context
- Add Typewriter component with character-by-character reveal
- Animate ThemeToggle with Typewriter label and hover scale
- Add cursor CSS animations (typewriter-blink, cursor-typing, cursor-block)
- Fix background color transition by using 'all' on :root
- Rename theme.ts -> theme.tsx for JSX support
- All 26 theme tests passing
- Navbar: responsive nav with ShieldAI logo, nav links, auth buttons,
mobile hamburger menu, theme toggle, scroll-aware glass effect
- Footer: multi-column responsive layout with product/company/resources/
legal links, social icons, copyright bar
- PageContainer: centered wrapper with max-w-7xl and responsive padding
- AppShell: root layout composing Navbar + main + Footer with dot-grid
background and MetaProvider
- useAuth stub hook for future auth integration (task 23)
- Wire AppShell into app.tsx as Router root
- Unit tests for PageContainer and useAuth
- Add @property declarations for all 28 animatable color tokens ensuring
smooth 500ms transitions between light/dark modes
- Remove invalid @theme block from inside @media (prefers-color-scheme: dark)
that was causing Tailwind v4 to use dark values as defaults
- Add FOUC-prevention inline script in entry-server.tsx that applies
theme class before first paint
- Integrate useTheme() hook in app.tsx for meta theme-color updates
and system preference change listener