04 — Colour
Every colour in the system comes off one of three ramps, built in
OKLCH. Each ramp holds a single
hue at a near-constant chroma, so its steps differ only in lightness — which is what
lets both themes walk the same ladders from opposite ends. Two of the three are the
brand’s neutrals: there is no grey here, only a cool family and a warm one, and that
is where the palette’s temperature comes from.
-
600
#2a4a6c
L 40.0
-
700
#163454
L 32.0
-
800
#0c253f
L 26.0
-
900
#091d31
L 22.5
-
950
#051222
L 18.0
The cool family. Display ink, reading copy, and all three dark grounds.
-
50
#fff9ed
L 98.4
-
100
#f4ebdb
L 94.2
-
200
#d9d1c2
L 86.3
-
300
#c2b9aa
L 79.0
-
400
#a69d8e
L 70.0
-
500
#8b8272
L 61.0
-
600
#766d5d
L 53.8
-
700
#665e4e
L 48.4
-
800
#4f4738
L 40.0
The warm family. Page grounds and every muted text tier. The system has no grey.
-
300
#e3ccb8
L 86.0
-
400
#d4b89f
L 80.0
-
500
#c9ad94
L 76.6
-
600
#b6987d
L 70.0
-
700
#9e8064
L 62.0
The accent — the only ramp with real chroma. Draws lines; never sets type.
The colours the brand says out loud. Each is an alias pinned to a ramp step — it
introduces no new value, it just keeps the vocabulary sayable.
Components reference role tokens — never a ramp step, never a named colour.
Each theme points those roles at different rungs: Light descends the navy ramp for type
and sits on sand‑50; Dark inverts it, standing the type on the sand ramp over navy
grounds. Dark is a re‑point, not a second palette — every value below already
exists above. It follows the operating system by default, with a masthead toggle to
override that is remembered across visits.
-
Role
Light
Dark
-
--surface
sand-50
navy-950
-
--surface-recessed
sand-100
navy-900
-
--surface-contrast
navy-800
navy-800
-
--text
navy-900
sand-200
-
--text-strong
navy-800
sand-100
-
--text-muted
sand-600
sand-400
-
--text-muted-strong
sand-700
sand-300
-
--text-on-contrast
sand-50
sand-100
-
--accent
tan-500
tan-400
Measured ratios for every text-on-ground pairing the system ships, in both themes. AA
needs 4.5:1 for body text; AAA, 7:1. The tan accent clears neither on ivory — which
is exactly why it only ever draws a line, never sets type. The rule holds in Dark even
though the ratio there is comfortable.
-
Body
Ink on ivory
Light
16.3 : 1
AAA
-
Display
Navy on ivory
Light
14.8 : 1
AAA
-
Labels
Taupe strong on ivory
Light
6.1 : 1
AA
-
Indices
Taupe quiet on ivory
Light
4.9 : 1
AA
-
Approach
Ink on cream
Light
14.4 : 1
AAA
-
Close
Ivory on navy
Light
14.8 : 1
AAA
-
Accent
Tan on ivory
Light
2.0 : 1
Decorative
-
Body
Body on the dark ground
Dark
12.4 : 1
AAA
-
Display
Display on the dark ground
Dark
15.9 : 1
AAA
-
Labels
Labels on the dark ground
Dark
9.7 : 1
AAA
-
Indices
Indices on the dark ground
Dark
7.0 : 1
AAA
-
Approach
Body on the recessed band
Dark
11.2 : 1
AAA
-
Close
Display on the close
Dark
13.1 : 1
AAA
-
Accent
Tan on the dark ground
Dark
10.0 : 1
Decorative