Design Tokens

Three layers of CSS custom properties plus two adjustment axes. Every component consumes the top semantic layer; lower layers cascade through attribute selectors on the document root.

Architecture

Three layers feed each other, then two axes (spacing, curves) adjust component-level density and corner sharpness independently of theme and mode.

Layer 1

Primitives

Raw values — colors, radius, sizing, spacing, fonts.

--color-blazeorange-500: #ff5100--radius-radius-12: 0.75rem--spacing-space-16: 1rem
Layer 2

Modes

data-mode={light, dim, dark}. Sets backgrounds, foregrounds, and per-palette aliases.

--backgrounds-primary: var(--color-mono-0)--foregrounds-primary: var(--color-mono-950)--blazeorange-main: var(--color-blazeorange-500)
Layer 3

Themes

data-theme={industrial-retro, minimal, …}. Component-level semantic tokens — what components actually use.

--action-primary-bg: var(--blazeorange-main)--container-bg: var(--backgrounds-primary)--font-heading: "Geist", sans-serif
Axis

Spacing

data-spacing={compact, standard, wide}. Adjusts every --spacing-*, --size-*, and --font-size-* token.

--spacing-md: var(--spacing-space-12)
Axis

Curves

data-curves={sharp, slight, sweeping}. Adjusts every --curves-* token.

--curves-md: var(--radius-radius-12)

Primitives

Layer 1 lives in :root and never changes. Every other layer ultimately resolves to a primitive.

Color palettes

20 palettes. 19 of them have 11 shades (50 through 950); mono adds a 0 for pure white.

mono
blazeorange
bluechill
blueribbon
bostonblue
cerise
crimson
electriclime
electricviolet
forestgreen
gossamer
lochmara
maitai
purpleheart
redviolet
rockspray
seagreen
teak
torchred
violeteggplant

Radius / sizing / spacing

Modes

Layer 2 reads data-modeand remaps backgrounds, foregrounds, and every palette's contextual alias. The Modes page has the full rundown — the visualisations below show the active mode for each surface tier.

Backgrounds

--backgrounds-primary

primary

--backgrounds-secondary

secondary

--backgrounds-tertiary

tertiary

--backgrounds-quaternary

quaternary

--backgrounds-quinary

quinary

Foregrounds

Aa
--foregrounds-primary

primary

Aa
--foregrounds-secondary

secondary

Aa
--foregrounds-tertiary

tertiary

Aa
--foregrounds-quaternary

quaternary

Aa
--foregrounds-quinary

quinary

Themes

Layer 3 reads data-theme and defines the semantic tokens components actually consume. Below: every group, every variant, rendered in the active theme + mode.

Container

--container-bg

Surface (cards, popovers, page bg)

--container-bg-alt

Alt surface (subtle stripe)

--container-bg-inverse

Inverted surface

--container-border

Hairline border

--container-border-alt

Stronger border

--container-border-inverse

Inverted border

Aa
--container-fg

Body text

Aa
--container-fg-alt

Muted text

Aa
--container-fg-inverse

Inverted text

Interactive

Inputs, selectable rows, hoverable items — anything the user targets with pointer or keyboard. --interactive-border is the system-wide focus-ring colour.

--interactive-bg

Resting

--interactive-bg-hover

Hover

--interactive-bg-active

Active

--interactive-bg-selected

Selected

--interactive-bg-disabled

Disabled

--interactive-bg-alt

Alt resting

--interactive-bg-alt2

Alt 2

--interactive-border

Focus / default border

--interactive-border-alt

Alt border

Aa
--interactive-fg

Foreground

Aa
--interactive-fg-alt

Muted / icon

Aa
--interactive-fg-active

Active fg

Aa
--interactive-fg-selected

Selected fg

Aa
--interactive-fg-disabled

Disabled fg

Action

Three tiers — primary (CTA), secondary (outline), tertiary (ghost) — each with the same shape: bg, fg, and border across default / hover / active / selected / disabled / inverse states.

Action primary

Filled CTA — the most prominent action.

--action-primary-bg

Background

--action-primary-bg-hover

Hover

--action-primary-bg-active

Active

--action-primary-bg-selected

Selected

--action-primary-bg-disabled

Disabled

--action-primary-bg-inverse

Inverse

Aa
--action-primary-fg

Foreground

Aa
--action-primary-fg-active

Active fg

Aa
--action-primary-fg-disabled

Disabled fg

Aa
--action-primary-fg-inverse

Inverse fg

Action secondary

Outline button — secondary actions.

--action-secondary-border

Border

--action-secondary-bg-hover

Hover bg

--action-secondary-bg-active

Active bg

--action-secondary-bg-selected

Selected bg

--action-secondary-bg-disabled

Disabled bg

Aa
--action-secondary-fg

Foreground

Aa
--action-secondary-fg-alt

Alt fg

Aa
--action-secondary-fg-active

Active fg

Aa
--action-secondary-fg-inverse

Inverse fg

Action tertiary

Ghost button — tertiary / passive actions.

--action-tertiary-bg

Background

--action-tertiary-bg-hover

Hover

--action-tertiary-bg-active

Active

--action-tertiary-bg-selected

Selected

--action-tertiary-bg-alt

Alt bg

--action-tertiary-border

Border

Aa
--action-tertiary-fg

Foreground

Aa
--action-tertiary-fg-alt

Alt fg

Aa
--action-tertiary-fg-active

Active fg

Status

Five intent families — each with the same six-variant shape. Hover any swatch to see the full token name.

--destructive-* Errors, dangerous actions

--destructive-bg

bg

--destructive-bg-alt

bg-alt

--destructive-bg-inverse

bg-inv

--destructive-border

border

Aa
--destructive-fg

fg

Aa
--destructive-fg-alt

fg-alt

--cautionary-* Warnings, attention needed

--cautionary-bg

bg

--cautionary-bg-alt

bg-alt

--cautionary-bg-inverse

bg-inv

--cautionary-border

border

Aa
--cautionary-fg

fg

Aa
--cautionary-fg-alt

fg-alt

--important-* High-emphasis flags

--important-bg

bg

--important-bg-alt

bg-alt

--important-bg-inverse

bg-inv

--important-border

border

Aa
--important-fg

fg

Aa
--important-fg-alt

fg-alt

--informative-* Neutral information

--informative-bg

bg

--informative-bg-alt

bg-alt

--informative-bg-inverse

bg-inv

--informative-border

border

Aa
--informative-fg

fg

Aa
--informative-fg-alt

fg-alt

--positive-* Success, confirmation

--positive-bg

bg

--positive-bg-alt

bg-alt

--positive-bg-inverse

bg-inv

--positive-border

border

Aa
--positive-fg

fg

Aa
--positive-fg-alt

fg-alt

Data viz

Eight series, each with main / tint / shade. Distinct hues at distinct lightness levels — readable in light, dim, and dark.

dataviz-1
dataviz-2
dataviz-3
dataviz-4
dataviz-5
dataviz-6
dataviz-7
dataviz-8

Spacing scale

data-spacing drives three families — --spacing-* (gaps / padding), --size-* (component heights), --font-size-* (text). Bars below show the spacing family at the active data-spacing setting.

--spacing-xxs
0.125rem
--spacing-xs
0.25rem
--spacing-sm
0.5rem
--spacing-md
0.75rem
--spacing-lg
1rem
--spacing-xl
1.25rem
--spacing-2xl
1.5rem
--spacing-3xl
2.5rem
--spacing-4xl
5rem

Curves scale

data-curves drives --curves-*. Six levels, backed by radius primitives.

--curves-xxs2px
--curves-xs4px
--curves-sm8px
--curves-md12px
--curves-lg16px
--curves-xl24px

Usage

Tokens are plain CSS custom properties — reference them anywhere a CSS value is accepted. In Tailwind v4 use arbitrary-value syntax with the appropriate type hint.

The color: and length: hints are required in Tailwind v4 — without them, the var resolves to a generic value and the utility silently falls back. For one-off scoped overrides, set CSS variables inline:

For runtime mode / theme switching with persistence and font preloading, use the RagnarProvider — see the Theming guide.