Color tokens define the shared, reusable color values that power both design and code. This page shows what each color looks like. For the full token list with values, see the Tokens page.

Colors are organised into two layers: primitive tokens (raw values) and semantic tokens (intent-based aliases). Always use semantic tokens in production code — primitives are the building blocks that semantic tokens reference.


Brand Palette

The core brand colors that define the project identity. These are set per-project in the Brand Tokens section of design-system.css.

off-white
warm-white
warm-black
off-black

Accent Colors

red-lighter
red-light
red
red-dark
blue-lighter
blue-light
blue
blue-dark
yellow-lighter
yellow-light
yellow
yellow-dark
green-lighter
green-light
green
green-dark
purple-lighter
purple-light
purple
purple-dark

Primitive Scales

Neutral

Warm grey ramp from lightest to near-black, used for backgrounds, borders, and secondary text.

neutral-50
neutral-100
neutral-150
neutral-200
neutral-300
neutral-400
neutral-500
neutral-600
neutral-700
neutral-800
neutral-900
neutral-950
neutral-990

Black Alpha

Semi-transparent black values for overlays, shadows, borders, and tints.

black
black-alpha-95
black-alpha-90
black-alpha-80
black-alpha-70
black-alpha-60
black-alpha-50
black-alpha-40
black-alpha-30
black-alpha-20
black-alpha-15
black-alpha-10
black-alpha-5
black-alpha-3

White Alpha

Semi-transparent white values for highlights and light overlays. Shown on a dark background for visibility.

white
white-alpha-95
white-alpha-90
white-alpha-80
white-alpha-70
white-alpha-60
white-alpha-50
white-alpha-40
white-alpha-30
white-alpha-20
white-alpha-15
white-alpha-10
white-alpha-5

Semantic Colors

Semantic colors map primitive tokens to meaning and intent. Use these in layouts and components — never use primitives directly.

Text

text-primary
text-secondary
text-plain
text-faded
text-accent
text-link
text-inverted

Background

background-primary
background-secondary
background-plain
background-faded
background-darker

Solid colour backgrounds

Solid colour blocks for hero sections, callouts, ad units, and any marketing surface that needs to lean on a brand colour. Each token resolves to the brand primitive when overridden in a client theme — otherwise the design system default applies.

background-accent
background-black
background-white
background-blue
background-red
background-green

Border

border-primary
border-secondary
border-faded

Button

button-primary
button-text
button-secondary
button-faded

Status

Status tokens now reference the dark shade of each accent colour family. maps to (previously ), aligning with the conventional use of blue for informational states. In dark mode, status tokens flip to the light shades for readability.

status-info
status-success
status-warning
status-danger
status-accent

Dark Mode

The design system uses a data-theme attribute to switch between light and dark modes. Light mode is the default — dark mode is an opt-in override, not a baseline. Activate it by setting data-theme="dark" on any element; tokens inherit through the cascade.

Dark mode values (e.g. , ) are overrides applied via [data-theme="dark"] — never use them as primary values, and never hardcode them. If you're working from a dark-looking screenshot, confirm the intended theme before writing code.

How It Works

  • :root — light mode tokens (always present)
  • [data-theme="dark"] — overrides semantic tokens with dark values
  • @media (prefers-color-scheme: dark) — no-JS fallback for users with a dark OS preference

The toggle button in the site header sets data-theme="dark" on <html> and persists the choice in localStorage.

Scoped Usage

You can apply dark mode to any element, not just the page:

Light mode

Primary text Faded text Accent text

Dark mode

Primary text

Faded text

Accent text

<!-- Dark card on a light page -->
<div data-theme="dark" class="card">
  <p>This section uses dark mode tokens</p>
</div>

All semantic tokens inside that element resolve to their dark values via CSS custom property inheritance.

Customizing Dark Mode

Edit the [data-theme="dark"] block in design-system.css (section 2b). When changing a value, also update the @media (prefers-color-scheme: dark) fallback (section 2c) to keep them in sync.

Was this page helpful?

We use this feedback to improve our documentation.

Thanks for your feedback