Design tokens.
A small palette is a feature. The library reads from a single three-step brand ramp plus eight surface tokens — about a dozen values total. Override what you need; leave the rest as-is.
Wensity Red ramp
Components reference three steps: 300 for tints,500 for the brand,800 for deep accents. The rest of the ramp is available as Tailwind utilities (bg-chili-50…text-chili-900) but isn't hard-baked into the library.
Surface tokens
Every component reads from these CSS variables. Light values live on :root; dark values on the.dark class.
| Token | Role | Light | Dark |
|---|---|---|---|
| --background | Page surface | #fafafa | #0a0a0b |
| --foreground | Primary text | #0a0a0a | #f5f5f6 |
| --surface | Card surface | #ffffff | #111113 |
| --surface-muted | Subtle fill | #f4f4f5 | #18181b |
| --border | 1px hairline | rgba(10,10,10,0.08) | rgba(255,255,255,0.08) |
| --border-strong | Card hover | rgba(10,10,10,0.16) | rgba(255,255,255,0.14) |
| --muted-foreground | Secondary text | #52525b | #a1a1aa |
| --pattern-fg | Grid lines | rgba(10,10,10,0.07) | rgba(255,255,255,0.06) |
Semantic colors
Reserved for state, never decoration. If you find yourself reaching for --color-successas an accent, use a brand shade instead. Semantic colors only carry weight when they're used sparingly.
All of it, in one block
Drop this into globals.css and you have the entire Wensity color system in your project.
@theme inline {/* Surface mappings */--color-background: var(--background);--color-foreground: var(--foreground);--color-surface: var(--surface);--color-surface-muted: var(--surface-muted);--color-border: var(--border);--color-border-strong: var(--border-strong);--color-muted-foreground: var(--muted-foreground);/* Brand ramp */--color-chili-50: #fff5f4;--color-chili-100: #ffe5e3;--color-chili-200: #ffc7c2;--color-chili-300: #ff8a73;--color-chili-400: #f04d3f;--color-chili-500: #cd1c18;--color-chili-600: #ad1212;--color-chili-700: #8a1112;--color-chili-800: #6a0d0e;--color-chili-900: #4d0a0b;/* Semantic */--color-success: #16a34a;--color-warning: #f59e0b;--color-danger: #dc2626;--color-info: #0284c7;}:root {--background: #fafafa;--foreground: #0a0a0a;--surface: #ffffff;--surface-muted: #f4f4f5;--border: rgba(10,10,10,0.08);--border-strong: rgba(10,10,10,0.16);--muted-foreground: #52525b;--pattern-fg: rgba(10,10,10,0.07);}.dark {--background: #0a0a0b;--foreground: #f5f5f6;--surface: #111113;--surface-muted: #18181b;--border: rgba(255,255,255,0.08);--border-strong: rgba(255,255,255,0.14);--muted-foreground: #a1a1aa;--pattern-fg: rgba(255,255,255,0.06);}