Skip to content
GroundworkGroundwork
Esc
↑↓navigate↵open⌘Jpreview
On this page

Colour

The colour roles every theme fills, how they're solved in OKLCH, and the contrast targets they meet.

Every theme fills the same roles. Components only ever read roles, so they never branch on a theme.

Group Roles
Surfaces surface-lower, surface-low, surface-default, surface-raised, surface-overlay
Borders border-quiet, border-normal, border-loud, border-accent
Text text-strong, text-primary, text-secondary, text-disabled, link
Neutral fills fill-neutral-resting, -hovered, -pressed, -selected, -disabled
Primary fills fill-primary-resting, -hovered, -pressed, on-primary
Accent accent, fill-accent-resting, -hovered, -pressed, fill-accent-quiet, on-accent, focus
Status info, success, important, warning, danger, each with fill-*-quiet and border-*

Each is a CSS variable named --gw-color-<role>.

Solved, not hand-set

A core theme has two inputs: a dark background and an accent. Everything else is solved in OKLCH, with derived colours mixed in OKLab:

  • Surfaces keep the background’s hue and chroma, stepping lightness. Light mode carries the same tint at lower chroma.
  • Text is solved along the surface hue until it reaches its contrast target.
  • The accent keeps its hue and chroma and moves in lightness until it reaches 5:1.
  • Status colours start from GitHub’s Markdown alert colours and are solved the same way.

Contrast targets

All measured on the raised surface, the lowest-contrast surface text sits on:

Role Target
Strong text 11:1
Body text 9:1
Muted text 4.6:1
Accent 5:1
Status colours 4.8:1
Text on the accent fill 4.5:1

mise run check fails when a core theme misses one. The contrast report lists every ratio.

Status colours

GitHub’s Markdown alert set, so each has its own colour, mapped onto the feedback roles and onto ANSI colours in terminals:

Alert Role ANSI
Note info Blue
Tip success Green
Important important Magenta
Warning warning Yellow
Caution danger Red
BaseLight

Overview

Machine controls

Next boot is set to Arch Linux, with the VM test bed on standby.

Updated 4 minutes ago

LinuxWindowsInstaller

Note Sync runs every hour.

Tip All 12 checks passed.

Important Two decisions wait on you.

Warning The token expires in 2 days.

Caution This removes the backup.

dotfiles14Passing
system-bridge3Waiting
triage1Failing
BaseDark

Overview

Machine controls

Next boot is set to Arch Linux, with the VM test bed on standby.

Updated 4 minutes ago

LinuxWindowsInstaller

Note Sync runs every hour.

Tip All 12 checks passed.

Important Two decisions wait on you.

Warning The token expires in 2 days.

Caution This removes the backup.

dotfiles14Passing
system-bridge3Waiting
triage1Failing
BaseDarker

Overview

Machine controls

Next boot is set to Arch Linux, with the VM test bed on standby.

Updated 4 minutes ago

LinuxWindowsInstaller

Note Sync runs every hour.

Tip All 12 checks passed.

Important Two decisions wait on you.

Warning The token expires in 2 days.

Caution This removes the backup.

dotfiles14Passing
system-bridge3Waiting
triage1Failing

Last updated on