Colors

Semantic color tokens, surface steps, and the exact light and dark values exposed by the Basel Standard theme.

LLM handoff

Copy a concise page brief or the full MDX source without digging through the docs shell.

Color is used as signal, not atmosphere. The system is mostly neutral, with the accent reserved for emphasis, selection, and editorial punctuation rather than constant decoration.

How To Read The Tokens

  • Token names map to CSS variables such as --background and --accent.
  • Tailwind utility aliases expose those variables as classes like bg-background, text-muted-foreground, and border-border-strong.
  • Surface steps are derived from the accent with color-mix(), which keeps the neutral field connected to the signal color without flooding the interface.

Token Reference

Base

The main semantic tokens for page, panel, field, and text surfaces.

background

Default page background.

Variable
--background
Utility
bg-background
Light value
oklch(0.98 0 0)
Dark value
oklch(0.1 0 0)

foreground

Default text and primary ink.

Variable
--foreground
Utility
text-foreground
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

card

Raised neutral surfaces and framed specimens.

Variable
--card
Utility
bg-card
Light value
oklch(1 0 0)
Dark value
oklch(0.12 0 0)

card-foreground

Ink on `card` surfaces.

Variable
--card-foreground
Utility
text-card-foreground
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

panel

Subtle neutral containers, docs code rails, and quieter panel fills.

Variable
--panel
Utility
bg-panel
Light value
oklch(0.955 0 0)
Dark value
oklch(0.15 0 0)

panel-foreground

Ink on `panel` surfaces.

Variable
--panel-foreground
Utility
text-panel-foreground
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

field

Inputs and lighter inset controls.

Variable
--field
Utility
bg-field
Light value
oklch(0.985 0 0)
Dark value
oklch(0.11 0 0)

field-foreground

Ink on form fields and inset controls.

Variable
--field-foreground
Utility
text-field-foreground
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

popover

Overlay panels such as menus, popovers, and dialogs.

Variable
--popover
Utility
bg-popover
Light value
oklch(1 0 0)
Dark value
oklch(0.12 0 0)

popover-foreground

Ink on overlay surfaces.

Variable
--popover-foreground
Utility
text-popover-foreground
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

Signal

Hierarchy, emphasis, muted support, and destructive states.

primary

Primary action fill or strongest contrast block.

Variable
--primary
Utility
bg-primary
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

primary-foreground

Ink placed on primary fills.

Variable
--primary-foreground
Utility
text-primary-foreground
Light value
oklch(0.98 0 0)
Dark value
oklch(0.1 0 0)

secondary

Lower-emphasis fills and secondary controls.

Variable
--secondary
Utility
bg-secondary
Light value
oklch(0.93 0 0)
Dark value
oklch(0.18 0 0)

secondary-foreground

Ink placed on secondary fills.

Variable
--secondary-foreground
Utility
text-secondary-foreground
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

muted

Quiet fills and low-contrast utility surfaces.

Variable
--muted
Utility
bg-muted
Light value
oklch(0.94 0 0)
Dark value
oklch(0.16 0 0)

muted-foreground

Secondary text and labels.

Variable
--muted-foreground
Utility
text-muted-foreground
Light value
var(--ink-5)
Dark value
var(--ink-5)

accent

Rare signal color for selection, editorial emphasis, and highlighted actions.

Variable
--accent
Utility
bg-accent
Light value
oklch(0.67 0.2 24)
Dark value
oklch(0.7 0.18 24)

accent-foreground

Ink on accent surfaces.

Variable
--accent-foreground
Utility
text-accent-foreground
Light value
oklch(0.98 0 0)
Dark value
oklch(0.98 0 0)

destructive

Confirmed destructive actions.

Variable
--destructive
Utility
bg-destructive
Light value
oklch(0.58 0.19 14)
Dark value
oklch(0.64 0.17 14)

destructive-foreground

Ink on destructive surfaces.

Variable
--destructive-foreground
Utility
text-destructive-foreground
Light value
oklch(0.98 0 0)
Dark value
oklch(0.98 0 0)

Structure

Rules, overlays, and interaction markers that give the system its architectural feel.

border

Default divider and border color.

Variable
--border
Utility
border-border
Light value
oklch(0.18 0 0)
Dark value
oklch(0.32 0 0)

border-strong

Major separators and high-contrast structural rules.

Variable
--border-strong
Utility
border-border-strong
Light value
oklch(0.1 0 0)
Dark value
oklch(0.92 0 0)

overlay

Backdrop layer behind dialogs, sheets, and transient UI.

Variable
--overlay
Utility
bg-overlay
Light value
oklch(0.12 0 0 / 0.12)
Dark value
oklch(0.02 0 0 / 0.6)

input

Default input border token.

Variable
--input
Utility
border-input
Light value
oklch(0.18 0 0)
Dark value
oklch(0.32 0 0)

ring

Focus treatment and ring-based emphasis.

Variable
--ring
Utility
ring-ring
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

Surface Scale

Numbered neutral surfaces built from the background and ink ramps. Step 1 stays closest to the canvas. Step 11 is the strongest structural neutral.

surface-1

Closest to the page canvas. Useful for the quietest stepped fill.

Variable
--surface-1
Utility
bg-surface-1
Light value
color-mix(in oklch, var(--background) 97%, var(--ink-base) 3%)
Dark value
color-mix(in oklch, var(--background) 96%, var(--ink-base) 4%)

surface-2

Soft wash for broad sections and low-pressure grouping.

Variable
--surface-2
Utility
bg-surface-2
Light value
color-mix(in oklch, var(--background) 95%, var(--ink-base) 5%)
Dark value
color-mix(in oklch, var(--background) 93%, var(--ink-base) 7%)

surface-3

Light grouping surface with more visible separation.

Variable
--surface-3
Utility
bg-surface-3
Light value
color-mix(in oklch, var(--background) 93%, var(--ink-base) 7%)
Dark value
color-mix(in oklch, var(--background) 89%, var(--ink-base) 11%)

surface-4

Low-contrast inset or utility backdrop.

Variable
--surface-4
Utility
bg-surface-4
Light value
color-mix(in oklch, var(--background) 90%, var(--ink-base) 10%)
Dark value
color-mix(in oklch, var(--background) 84%, var(--ink-base) 16%)

surface-5

Muted panel step for denser internal structure.

Variable
--surface-5
Utility
bg-surface-5
Light value
color-mix(in oklch, var(--background) 87%, var(--ink-base) 13%)
Dark value
color-mix(in oklch, var(--background) 79%, var(--ink-base) 21%)

surface-6

Inset field-like fill with clearer presence.

Variable
--surface-6
Utility
bg-surface-6
Light value
color-mix(in oklch, var(--background) 83%, var(--ink-base) 17%)
Dark value
color-mix(in oklch, var(--background) 74%, var(--ink-base) 26%)

surface-7

Standard raised panel step when the layer should read immediately.

Variable
--surface-7
Utility
bg-surface-7
Light value
color-mix(in oklch, var(--background) 79%, var(--ink-base) 21%)
Dark value
color-mix(in oklch, var(--background) 68%, var(--ink-base) 32%)

surface-8

Frame-level separation and stronger neutral bands.

Variable
--surface-8
Utility
bg-surface-8
Light value
color-mix(in oklch, var(--background) 74%, var(--ink-base) 26%)
Dark value
color-mix(in oklch, var(--background) 61%, var(--ink-base) 39%)

surface-9

High-contrast neutral step for badges, chips, and selected regions.

Variable
--surface-9
Utility
bg-surface-9
Light value
color-mix(in oklch, var(--background) 68%, var(--ink-base) 32%)
Dark value
color-mix(in oklch, var(--background) 53%, var(--ink-base) 47%)

surface-10

Strong emphasis fill that still reads inside the neutral family.

Variable
--surface-10
Utility
bg-surface-10
Light value
color-mix(in oklch, var(--background) 61%, var(--ink-base) 39%)
Dark value
color-mix(in oklch, var(--background) 45%, var(--ink-base) 55%)

surface-11

The strongest neutral surface before the system needs direct accent color.

Variable
--surface-11
Utility
bg-surface-11
Light value
color-mix(in oklch, var(--background) 54%, var(--ink-base) 46%)
Dark value
color-mix(in oklch, var(--background) 37%, var(--ink-base) 63%)

Ink Scale

Numbered foreground ramp for quieter labels through to the main ink. Step 11 maps to the default foreground.

ink-1

Faintest readable ink for low-priority chrome and quiet separators.

Variable
--ink-1
Utility
text-ink-1
Light value
color-mix(in oklch, var(--ink-base) 20%, var(--background) 80%)
Dark value
color-mix(in oklch, var(--ink-base) 20%, var(--background) 80%)

ink-2

Very soft support text.

Variable
--ink-2
Utility
text-ink-2
Light value
color-mix(in oklch, var(--ink-base) 28%, var(--background) 72%)
Dark value
color-mix(in oklch, var(--ink-base) 28%, var(--background) 72%)

ink-3

Low-emphasis labels and secondary metadata.

Variable
--ink-3
Utility
text-ink-3
Light value
color-mix(in oklch, var(--ink-base) 36%, var(--background) 64%)
Dark value
color-mix(in oklch, var(--ink-base) 36%, var(--background) 64%)

ink-4

Support copy where contrast should stay restrained.

Variable
--ink-4
Utility
text-ink-4
Light value
color-mix(in oklch, var(--ink-base) 44%, var(--background) 56%)
Dark value
color-mix(in oklch, var(--ink-base) 44%, var(--background) 56%)

ink-5

Muted foreground and default secondary text.

Variable
--ink-5
Utility
text-ink-5
Light value
color-mix(in oklch, var(--ink-base) 52%, var(--background) 48%)
Dark value
color-mix(in oklch, var(--ink-base) 52%, var(--background) 48%)

ink-6

Middle-weight copy and darker metadata.

Variable
--ink-6
Utility
text-ink-6
Light value
color-mix(in oklch, var(--ink-base) 60%, var(--background) 40%)
Dark value
color-mix(in oklch, var(--ink-base) 60%, var(--background) 40%)

ink-7

Compact headings, controls, and stronger copy.

Variable
--ink-7
Utility
text-ink-7
Light value
color-mix(in oklch, var(--ink-base) 68%, var(--background) 32%)
Dark value
color-mix(in oklch, var(--ink-base) 68%, var(--background) 32%)

ink-8

Firm text on stepped surfaces and stronger UI labels.

Variable
--ink-8
Utility
text-ink-8
Light value
color-mix(in oklch, var(--ink-base) 76%, var(--background) 24%)
Dark value
color-mix(in oklch, var(--ink-base) 76%, var(--background) 24%)

ink-9

High-contrast controls and structure-heavy titles.

Variable
--ink-9
Utility
text-ink-9
Light value
color-mix(in oklch, var(--ink-base) 84%, var(--background) 16%)
Dark value
color-mix(in oklch, var(--ink-base) 84%, var(--background) 16%)

ink-10

Near-primary ink for strong emphasis without going all the way to the deepest step.

Variable
--ink-10
Utility
text-ink-10
Light value
color-mix(in oklch, var(--ink-base) 92%, var(--background) 8%)
Dark value
color-mix(in oklch, var(--ink-base) 92%, var(--background) 8%)

ink-11

Primary ink. Maps to the system foreground.

Variable
--ink-11
Utility
text-ink-11
Light value
var(--ink-base)
Dark value
var(--ink-base)

Sidebar

Dedicated navigation tokens so the application rail can diverge from the main canvas when needed.

sidebar

Sidebar background.

Variable
--sidebar
Utility
bg-sidebar
Light value
oklch(0.96 0 0)
Dark value
oklch(0.12 0 0)

sidebar-foreground

Default text inside the sidebar shell.

Variable
--sidebar-foreground
Utility
text-sidebar-foreground
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

sidebar-primary

Primary action or selected emphasis in side navigation.

Variable
--sidebar-primary
Utility
bg-sidebar-primary
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

sidebar-primary-foreground

Ink on sidebar primary fills.

Variable
--sidebar-primary-foreground
Utility
text-sidebar-primary-foreground
Light value
oklch(0.98 0 0)
Dark value
oklch(0.1 0 0)

sidebar-accent

Secondary sidebar fill and hover state.

Variable
--sidebar-accent
Utility
bg-sidebar-accent
Light value
oklch(0.9 0 0)
Dark value
oklch(0.18 0 0)

sidebar-accent-foreground

Ink on sidebar accent fills.

Variable
--sidebar-accent-foreground
Utility
text-sidebar-accent-foreground
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

sidebar-border

Sidebar dividers and edge rules.

Variable
--sidebar-border
Utility
border-sidebar-border
Light value
oklch(0.18 0 0)
Dark value
oklch(0.32 0 0)

sidebar-ring

Focus ring or active emphasis inside sidebar contexts.

Variable
--sidebar-ring
Utility
ring-sidebar-ring
Light value
oklch(0.12 0 0)
Dark value
oklch(0.96 0 0)

Guidance

Start With Semantic Tokens

Use background, foreground, panel, field, border, and muted-foreground first. Those tokens carry most application surfaces without needing custom color choices.

Reserve Accent For Meaning

accent should mark selection, editorial emphasis, or a single highlighted action. If every element takes the accent, hierarchy collapses quickly.

Use Surface Steps Instead Of Shadows

The surface-* tokens are the preferred way to create depth. They preserve the hard-edged, architectural character of the system.

Keep Destructive Meaning Separate

destructive and danger should stay tied to harmful actions or risky state. They should not double as generic feature emphasis.