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-50text-chili-900) but isn't hard-baked into the library.

50
#fff5f4
100
#ffe5e3
200
#ffc7c2
300
#ff8a73
400
#f04d3f
500use
#cd1c18
600
#ad1212
700
#8a1112
800use
#6a0d0e
900
#4d0a0b

Surface tokens

Every component reads from these CSS variables. Light values live on :root; dark values on the.dark class.

TokenLightDark
--background
#fafafa
#0a0a0b
--foreground
#0a0a0a
#f5f5f6
--surface
#ffffff
#111113
--surface-muted
#f4f4f5
#18181b
--border
rgba(10,10,10,0.08)
rgba(255,255,255,0.08)
--border-strong
rgba(10,10,10,0.16)
rgba(255,255,255,0.14)
--muted-foreground
#52525b
#a1a1aa
--pattern-fg
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.

Success
--color-success
Confirmations, positive deltas
Warning
--color-warning
At-risk states, dirty forms
Danger
--color-danger
Errors, destructive actions
Info
--color-info
Tips, neutral notifications

All of it, in one block

Drop this into globals.css and you have the entire Wensity color system in your project.

globals.css
@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);
}