Colors
Neutral surfaces with color reserved for status and data.
The palette is shadcn/ui neutral in OKLCH. Each swatch shows the light value on the left and the dark value on the right. Click a swatch to copy its var().
Surfaces
The canvas and the layers that sit on it.
Interactive
Primary actions, secondary actions, and quiet hover states.
Lines
Borders, input outlines, and focus rings. --border-strong is for rules that need to hold up next to a --muted fill.
Status
The only hues in the interface. Use them for meaning, never decoration.
Charts
A five-step neutral ramp, darkest first in light mode and lightest first in dark mode, so the first series always has the most contrast. See Charts.
Sidebar
Pairings
Every surface token has a matching foreground. Use them together.
Aa — The quick brown fox
--background / --foregroundAa — The quick brown fox
--card / --card-foregroundAa — The quick brown fox
--primary / --primary-foregroundAa — The quick brown fox
--secondary / --secondary-foregroundAa — The quick brown fox
--muted / --muted-foregroundAa — The quick brown fox
--accent / --accent-foregroundUsage
<div className="rounded-xl border bg-card text-card-foreground">
<p className="text-muted-foreground">Secondary text</p>
<span className="text-success">Shipped</span>
</div>- Do use the semantic utilities (
bg-card,text-muted-foreground), not raw palette classes likebg-neutral-900. - Do pair every surface with its foreground token.
- Don't use status colors for emphasis or decoration.
- Don't add gradients.