--- description: Tailwind + CSS-variable theming, component patterns, and a11y reminders globs: components/**/*.js,pages/**/*.js --- # UI + theming ## Theming model Two systems coexist: 1. **Tailwind utility classes** (`text-gray-700`, `bg-white`, `dark:bg-gray-800`) — used for layout, spacing, and structural styles. 2. **CSS variables** (`var(--bg-primary)`, `var(--text-primary)`, `var(--accent-ember)`, `var(--accent-flame)`, `var(--border)`) — used for colors that need to switch with theme (light/dark). The visual direction is **Liquid Glass** as of 2026-06-03 (see `.convoys/liquid-glass-redesign.md`). The canonical token surface is documented in [`docs/DESIGN_TOKENS.md`](../../docs/DESIGN_TOKENS.md); motion lives in [`docs/MOTION_SYSTEM.md`](../../docs/MOTION_SYSTEM.md). **Always reach for a `components/ui/` primitive first.** The current primitive kit: | Primitive | Use | | --- | --- | | `` | Any composed translucent surface (sidebar, popover, panel) | | `` | Every modal — never roll a `fixed inset-0 bg-black bg-opacity-50` shell. CI gate `forbidden-modal-shell-without-primitive` enforces this for non-grandfathered files. | | `