Design System

Token reference

One page listing everything the token layer exposes, plus the architecture that keeps it maintainable. The individual foundation pages explain when and how to use each group.

What is this?

Two layers of CSS custom properties. Primitives (--ds-*) are locked raw values with no meaning attached. Semantic tokens (--color-*, --size-*) assign those primitives to roles, once per theme, and are mapped into Tailwind utilities in theme.css.

When to use it

  • Looking up an exact token name while implementing
  • Adding a new value to the system
  • Auditing a screen for hardcoded values

How to use it

  • Components read semantic tokens only, usually via Tailwind utilities
  • Add a primitive first, then map it to a semantic role in both themes
  • Document the new token on the matching foundation page

What to avoid

  • Reading a --ds-* primitive from a component
  • Adding a semantic token that duplicates an existing role
  • Mapping a semantic token in one theme only

Architecture

Where each layer lives and who is allowed to read it.
LayerFileRead by
Primitives (--ds-*)src/design-system/styles/tokens.cssThe semantic layer only
Semantic (--color-*, --size-*)src/design-system/styles/tokens.cssComponents and screens
Tailwind mapping (@theme inline)src/design-system/styles/theme.cssUtility classes
Theme switch (.dark)src/design-system/styles/tokens.cssRe-points semantic names

Primitive ramps

Locked raw values. Never referenced from a component.

--ds-blue-*

50

100

200

300

400

500

600

700

800

900

950

--ds-yellow-*

50

100

200

300

400

500

600

700

800

900

--ds-neutral-*

0

50

100

200

300

400

500

600

700

800

900

950

Semantic colour

The only colour layer components may read. See Colour for role guidance.

Primary

The single brand action colour. One primary action per view.

--color-primary
--color-primary-hover
--color-primary-active
--color-primary-subtle
--color-primary-muted
--color-primary-foreground

Secondary

Neutral-weighted supporting actions that must not compete with primary.

--color-secondary
--color-secondary-hover
--color-secondary-active
--color-secondary-subtle
--color-secondary-foreground

Accent

Highlight and emphasis only — never a call to action.

--color-accent
--color-accent-hover
--color-accent-active
--color-accent-subtle
--color-accent-foreground

Background

The page canvas and its quiet variations.

--color-background
--color-background-subtle
--color-background-muted
--color-background-inverse

Surface

Anything that sits on the canvas: cards, menus, floating panels.

--color-surface
--color-surface-hover
--color-surface-active
--color-surface-raised
--color-surface-overlay

Text

Three readable weights plus disabled, inverse and link.

--color-text-primary
--color-text-secondary
--color-text-tertiary
--color-text-disabled
--color-text-inverse
--color-text-link

Border

Structure and separation. Focus is its own token, never reused.

--color-border-default
--color-border-subtle
--color-border-strong
--color-border-focus

Status

Meaning only. Each status has a solid, a subtle and a foreground.

--color-success
--color-success-subtle
--color-success-foreground
--color-warning
--color-warning-subtle
--color-warning-foreground
--color-error
--color-error-subtle
--color-error-foreground
--color-info
--color-info-subtle
--color-info-foreground

Spacing

space-0
space-1
space-2
space-3
space-4
space-5
space-6
space-8
space-10
space-12
space-16
space-20
space-24
space-32
space-40
space-48
space-64

Radius

rounded-none

rounded-xs

rounded-sm

rounded-md

rounded-lg

rounded-xl

rounded-full

Elevation

shadow-none

shadow-xs

shadow-sm

shadow-md

shadow-lg

Icon sizes

icon-xs

icon-sm

icon-md

icon-lg

icon-xl

Adding a token

A new token is a four-step change

1. Add the primitive to tokens.css. 2. Map it to a semantic role in both the light and dark blocks. 3. Expose it to Tailwind in theme.css if it needs a utility. 4. Document it on the relevant foundation page.

Why it is designed this way

Keeping meaning out of primitives and values out of components is what makes both rebranding and theming single-file operations. It also makes review mechanical: a component diff that contains a --ds- reference or a raw value is wrong regardless of how it looks.