# Theming The app theme is driven by shared CSS custom properties. ## Source Of Truth - Theme presets live in `frontend/src/theme/themes.ts`. - The selected theme is persisted in local storage under `nanobot.theme`. - The active theme is applied to `document.documentElement` before the app renders. ## How To Change The App Theme Edit or add a preset in `frontend/src/theme/themes.ts`: - `label` - `swatch` - `tokens` The picker in the conversation drawer reads directly from that file, so new presets appear automatically. ## Card Theming Cards inherit the same variables as the app shell. Prefer these semantic token families: - `--theme-card-neutral-*` - `--theme-card-warm-*` - `--theme-card-success-*` - `--card-*` - `--helper-card-*` - `--theme-text*` - `--theme-border*` - `--theme-accent*` - `--theme-status-*` Do not hardcode generic shell colors like `#ffffff`, `#111827`, or app-background gradients in new cards. ## Runtime Access Dynamic cards can read theme values through the runtime host: - `host.getThemeName()` - `host.getThemeValue("--theme-accent")` For values that should live-update when the theme changes, prefer CSS variables directly: ```html
```