Colors
A semantic palette in three tiers. Components consume tier-2 roles; those resolve to tier-1 primitives. Light and dark are variants of every role.
How it works
Pick a role , never a raw value — color-ink-strong, not palette.neutral-950. Each role references one palette primitive (shown as → palette.*) and may shift between schemes. Surface fills live on the Backgrounds & Surfaces page.
Ink
Text and foreground.
Active theme Token · palette ref Components Usage for
--color-ink-strongL oklch(0.145 0 0) D oklch(0.985 0 0) → palette.ink
Primary text on canvas.
--color-ink-regularL oklch(0.340 0 0) D oklch(0.840 0 0) → palette.neutral-700
Secondary text.
--color-ink-subtleL oklch(0.580 0 0) D oklch(0.580 0 0) → palette.neutral-500
Tertiary text, captions, placeholders.
--color-ink-inverseL oklch(0.985 0 0) D oklch(0.145 0 0) → palette.canvas
Text on accent or dark surfaces.
Accent
One red — emphatic. In the suprematist canvas, red is a single role. Each tier-2 accent role anchors to a step on the tier-1 accent ramp.
Active theme Token · palette ref Components Usage for
--color-accentL oklch(0.585 0.210 28) D oklch(0.585 0.210 28) → palette.accent-500
Primary actions, focus, emphasis.
--color-accent-strongL oklch(0.420 0.170 28) D oklch(0.420 0.170 28) → palette.accent-700
Active / pressed accent state.
--color-accent-mutedL oklch(0.920 0.050 28) D oklch(0.240 0.100 28) → palette.accent-100
Subtle accent backgrounds.
Status
Feedback hues. Danger intentionally aliases accent.
Active theme Token · palette ref Components Usage for
--color-dangerL oklch(0.566 0.202 30.2) D oklch(0.720 0.180 28) → palette.danger
Errors, destructive actions.
--color-warningL oklch(0.800 0.137 83.3) D oklch(0.800 0.137 83.3) → palette.warning
Caution, pending states.
--color-successL oklch(0.475 0.125 146.2) D oklch(0.750 0.150 145) → palette.success
Confirmation, success.
--color-infoL oklch(0.458 0.171 261.8) D oklch(0.680 0.170 260) → palette.info
Neutral information.
Border
Three thicknesses of edge.
Active theme Token · palette ref Components Usage for
--color-border-defaultL oklch(0.218 0 0) D oklch(0.985 0 0) → palette.border-default
Default 1px edges.
--color-border-strongL oklch(0.145 0 0) D oklch(0.995 0 0) → palette.border-strong
Emphasised edges, active rails.
--color-border-mutedL oklch(0.808 0.016 90.3) D oklch(0.340 0 0) → palette.border-muted
Hairline, low-contrast edges.
Palette — neutral
Thirteen perceptually-uniform achromatic stops (tier 1). Brand seeds anchor at neutral-50 (canvas) and neutral-950 (ink); intermediate stops feed ink & border roles.
0
canvas 50
100
200
300
400
500
600
700
800
900
ink 950
1000
neutral-500 → ink-subtle · neutral-700 → ink-regular · neutral-950 → ink-strong
Palette — accent
OKLCH-interpolated red, hue locked at 28°. Seed accent (#D32F1E) anchors near 500.
50
100
200
300
400
accent 500
600
700
800
900
950
accent-500 → accent · accent-700 → accent-strong · accent-200 → accent-muted
Palette — seeds & status
Named brand seeds and status hues, taken verbatim from canvas.md.
Style
Default Clean Industrial Prototype Van Schneider