§1 Palette
Hue is lane. Saturation is maturity.
Every colour in this system is one of two things: a lane hue — blue for The Leader, teal for The Expert, purple for The Builder, fixed and never overloaded — or a neutral. On each hue, a four-step ladder encodes maturity: 01 signal → 02 pilot → 03 receipt → 04 proven. The same ladder renders receipt confidence, engagement stage, concept lineage and funnel position. It is measured, not felt: every ratio below was computed against the theme's ground (WCAG 2.1 relative luminance), and the swatches on this page are the live tokens — switch the theme and watch the ladder invert while the hues hold.
Each step shows light hex | dark hex with its contrast on that theme's ground (paper #FAFAF9 / ink #0C0F14). Text-safety: body ≥ 4.5:1 · UI & large ≥ 3:1 · fill-only below that.
The Leader — blue
executive product leadership · hue ≈ 208°The Expert — teal
productized consulting · hue ≈ 173°The Builder — purple
active venture building · hue ≈ 271°Constants
Neutrals
Grounds adopt the addendum's measured pair — paper #FAFAF9, ink #0C0F14 — so every published ratio is reproducible. Ink steps: --ink and --ink-soft ≥ 7:1 (body), --ink-mute ≥ 4.5:1 (muted body), --ink-faint large-text/labels only. Lines sit in a quiet 1.15–3:1 band: structural dividers, never text.
§1.1 Why light is canonical — in numbers
The ladder inverts on a dark ground.
Maturity means "strongest = deepest". Measured against white, that holds: the deep facets lead at 11.67:1, 9.86:1, 7.33:1 while the tints nearly vanish. On a dark ground the same hexes collapse — 1.62:1, 1.92:1, 2.58:1, all failing every threshold — and the tints become the strongest. Shipping the light ladder on dark would render "most mature" as "least visible", which is semantically backwards. So the dark theme keeps every hue and reverses the direction: step 04 becomes the strongest tint. The three places the reuse failed AA are lifted minimally at fixed hue and disclosed in the table.
| Facet (logo-measured) | on white | on #0D1117 | reading |
|---|---|---|---|
| blue dark #053A65 | 11.67:1 | 1.62:1 | strongest → invisible |
| purple deep #530CBA | 9.86:1 | 1.92:1 | strongest → failing |
| teal dark #01615C | 7.33:1 | 2.58:1 | strongest → failing |
| teal light (mint) #ABDED0 | 1.49:1 | 12.70:1 | nearly invisible → strongest |
| purple light (lavender) #BC92DC | 2.54:1 | 7.46:1 | failing → strong |
| Dark-theme lifts (fixed hue + saturation) | was | now | why |
|---|---|---|---|
| blue 03 #1073CA → #117EDD | 3.96:1 | 4.62:1 | step 03 carries body text |
| purple 02 #690CBA → #870FEF | 2.16:1 | 3.06:1 | step 02 must reach the UI/large band |
| purple 03 #7F27CC → #A25BE0 | 2.80:1 | 4.67:1 | step 03 carries body text |
9 of 12 dark facets are the logo hexes reused exactly; teal's dark ladder is untouched in all four steps. Source: KIMI-K3-ADDENDUM.md §2/§4/§5, ratios recomputed and asserted by gen_tokens.py.
§1.2 Forbidden combinations
Stated, so nobody ships them by hope.
| Combination | Ratio | Rule |
|---|---|---|
| teal 02 as text on paper | 2.46:1 | fill only in light — the one asymmetry the logo forces |
| #019380 as body text anywhere light | 3.83:1 | the exact logo teal is a surface colour, never words |
| any lane's 01 step as text | 1.42–2.60:1 | step 01 is a fill in both themes |
| deep facets as text on dark | 1.45–2.60:1 | they are the dark theme's quiet fills, not type |
| dark-theme 02 steps as body text | 3.06–4.00:1 | UI + large text only; body waits for step 03 |
§2 Typography
A voice, not a fallback stack.
Every prior concept shipped the same three system stacks — no typographic identity between them. This system has exactly three faces, each earning its place: a geometric display that shares the wordmark's skeleton, a serif that carries the editorial weight the structure (kimi-k3's) is built on, and one mono for the ledger. Two weights of display — 300 and 700 — are the whole pairing the wordmark uses; headlines may emphasise a line the same way product/anywhere does.
| face | specimen | why this one |
|---|---|---|
| --font-display Montserrat 300 · 400 · 700 |
Architecture before interface. | The measured wordmark match — near-monoline geometric skeleton with a double-storey a at a 1:2.5 light/bold stroke ratio (addendum §3); the masthead and the headlines cannot fight the mark if they are the mark's family. |
| --font-text Source Serif 4 · 400 · 600 · italic |
Receipts over claims — measurable deltas, stated with their own limits. | The site's skeleton is editorial (numbered sections, fact sheets, a ledger), and a workhorse serif with true italics gives that register at 16–18px without turning precious at small sizes. |
| --font-mono IBM Plex Mono 400 · 500 |
proof/absa-142m-faq-deflection · confidence: medium-high | Proof slugs, eyebrows and ledger metadata want machine-voiced, unambiguous glyphs; Plex reads cleanly at the 12px floor where metadata lives. |
The wordmark, reconstructed from tokens
productanywhere
Montserrat 300 / 700 — the measured closest free match to the logo's lettering. Verify by overlay against the asset before Phase 3 commits it to the masthead.
Scale
| step | rendered | assignment |
|---|---|---|
| --fs-56 / --lh-56 | Scaling products | hero line, display 300 |
| --fs-56 / --lh-56 | Govern the AI. | hero emphasised line, display 700 |
| --fs-32 / --lh-32 | Section headline | display 700 |
| --fs-24 / --lh-24 | Sub-head, lane title | display 700 |
| --fs-20 / --lh-20 | Card title, serif semibold | text 600 |
| --fs-18 / --lh-18 | Lede prose — the register of the receipts. | text 400 |
| --fs-16 / --lh-16 | Body prose, the default reading size. | text 400 |
| --fs-14 / --lh-14 | Table cells, secondary prose. | text 400 |
| --fs-12 / --lh-12 | EYEBROW · TOKEN · PROOF/SLUG | mono 400/500 — the floor |
Measure: prose never exceeds --measure (68ch). Ledger tables and the concept lab may exceed the measure, but they scroll inside their own container — the page body never scrolls sideways at any width. Nothing renders below --fs-12.
Loading: Google Fonts with display=swap and the real fallback stacks in the tokens; Phase 3 self-hosts woff2 with preload (open question 1 in STATE.md).