--- description: Dark theme design token system — enforces consistent color usage across all UI globs: "**/*.tsx,**/*.css" alwaysApply: false --- # Design System: Dark Theme Tokens This project uses a unified dark theme. All colors come from semantic tokens defined in `globals.css` via Tailwind v4 `@theme`. ## Token Map | Token | Tailwind Class | Hex | Usage | |-------|---------------|-----|-------| | background | `bg-background` | #030712 | Page-level backgrounds | | surface | `bg-surface` | #111827 | Cards, modals, inputs, panels | | elevated | `bg-elevated` | #1f2937 | Hover states, secondary buttons, nested containers | | border | `ring-border` / `bg-border` | #1f2937 | Borders, dividers | | subtle | `ring-subtle` / `bg-subtle` | #374151 | Secondary borders, hover-next-level | | foreground | `text-foreground` | #f3f4f6 | Primary text, input text | | muted | `text-muted` | #6b7280 | Secondary text, labels, placeholders emphasis | | dim | `text-dim` | #4b5563 | Tertiary text, timestamps, divider labels | | accent | `bg-accent` | #10b981 | Primary CTA, active indicators | | accent-hover | `bg-accent-hover` | #059669 | Accent hover state | ## Mandatory Rules 1. **NEVER use `bg-white`** for cards, modals, or page backgrounds. Use `bg-surface` or `bg-elevated`. 2. **NEVER use `text-zinc-*` or `text-gray-*` for standard text.** Use `text-foreground`, `text-muted`, or `text-dim`. 3. **NEVER use `bg-gray-950/900/800`** — use `bg-background`, `bg-surface`, `bg-elevated` respectively. 4. **NEVER use `ring-gray-*` / `border-gray-*`** — use `ring-border` or `ring-subtle`. 5. **Light-on-dark badges**: use `bg-{color}-500/10..15` + `text-{color}-400` (e.g. `bg-amber-500/10 text-amber-400`). 6. **Inputs**: `bg-surface ring-1 ring-border text-foreground placeholder:text-dim focus:ring-2 focus:ring-{accent}/50`. ## Button Color Hierarchy Buttons follow a strict 4-tier color system: | Tier | Color | When to use | Example | |------|-------|-------------|---------| | **System CTA** | `bg-accent` | Login, join room, navigate, share, save — any universal primary action | "导航过去", "登录", "加入房间" | | **Mode Accent** | Orange gradient (Panic) / `bg-purple-600` (BlindBox) | The ONE primary CTA of each mode only | "创建新房间", "提交想法" | | **Dramatic** | `from-red-600 to-rose-500` | Irreversible, high-ceremony actions only | "开启周末盲盒(绝不反悔)" | | **Destructive** | `bg-rose-500` or `bg-amber-500` | Leave, kick, end session | "退出房间", "踢出" | | **Secondary** | `bg-surface` or `bg-elevated` + `ring-1 ring-border` | Cancel, close, alternative actions | "继续滑卡", "换一批店" | Rules: - System-level actions ALWAYS use `bg-accent`, never mode-specific colors. - Mode accent colors are ONLY for the core action of that mode, not for navigation or system actions within the mode. - Never invent new CTA colors outside this hierarchy. ## Exceptions - Image overlays and swipe overlays may use `bg-black/*` or `bg-white/*` for translucency on photos. - Filter pills/tags in Panic mode use `bg-orange-500` for active state — these are toggles, not CTA buttons.