--- name: theme-system description: Use when creating or modifying UI components, styling, or visual elements in OpenChamber. All UI colors must use theme tokens - never hardcoded values or Tailwind color classes. license: MIT compatibility: opencode --- ## Overview OpenChamber uses a JSON-based theme system. Themes are defined in `packages/ui/src/lib/theme/themes/`. Users can also add custom themes via `~/.config/openchamber/themes/`. **Core principle:** UI colors must use theme tokens - never hardcoded hex colors or Tailwind color classes. ## When to Use - Creating or modifying UI components - Working with colors, backgrounds, borders, or text ## Quick Decision Tree 1. **Code display?** → `syntax.*` 2. **Feedback/status?** → `status.*` 3. **Primary CTA?** → `primary.*` 4. **Interactive/clickable?** → `interactive.*` 5. **Background layer?** → `surface.*` 6. **Text?** → `surface.foreground` or `surface.mutedForeground` ## Critical Rules - `surface.elevated` = inputs, cards, panels - `interactive.hover` = **ONLY on clickable elements** - `interactive.selection` = active/selected states (not primary!) - Status colors = **ONLY for actual feedback** (errors, warnings, success) - Input footers = `bg-transparent` on elevated background ### Never Use - Hardcoded hex colors (`#FF0000`) - Tailwind colors (`bg-white`, `text-blue-500`, `bg-gray-*`) - Deprecated: `bg-secondary`, `bg-muted` ## Usage ### Via Hook ```tsx import { useThemeSystem } from '@/contexts/useThemeSystem'; const { currentTheme } = useThemeSystem();