Reference
Design system
Every ratio was computed with tools/a11y/contrast.py against all three grounds.
This page is noindex: it documents the template for whoever builds with it.
The hardest divergence in the project so far
The roadmap line for this day is "tour dates, music embeds, merch", which is almost word for word what the singer-songwriter template already is. Two adjacent days with the same brief is the exact clone-pair failure this project keeps documenting. The answer was not a different palette — it was asking what is actually different about a band, which is that a solo artist is one person deciding and a band is four people with a shared bank account and usually nothing in writing.
So the tour section here is six lines and a sentence saying that a full listing is a whole page in its own right. Deliberately refusing to build the good version of a section, because the good version already exists one day earlier, is the only move that actually prevents a re-skin.
Former members stay, and are not emitted
Two people who left are listed with dates and reasons, marked in a word with a glyph before
any colour. The structured data does the opposite: only current members are emitted as
member, because a departed member published as current is the same class of
error as day 113 publishing a sold-out show as an available event. The page is for humans
and the markup is for machines, and they are allowed to say different true things.
The accent is not a status
--member-past is its own token. On a page whose most-read section is a list of
decisions about money, "left the band" must not share a hue with a heading — and it
is not a failure state either, which is why it is a warm brown rather than a red.
Type
Eczar — display
Ubuntu Mono — 2019–2022 · 3 of 4 · equal
Body is Quattrocento. The mono carries years and voting rules, which sit in columns that have to align. None of the three appears in days 1–113.
Tokens
| Swatch | Token | Value | Measured |
|---|---|---|---|
--color-bg | #FAF8F5 | Warm off-white | |
--color-bg-alt | #EDE9E2 | Banding | |
--color-surface | #FFFFFF | Cards | |
--color-text | #191720 | 16.72 / 14.65 / 17.73:1 · AAA | |
--color-text-muted | #6C667A | 5.19 / 4.54 / 5.50:1 · AA | |
--color-border | #898299 | 3.47 / 3.04 / 3.67 — non-text only | |
--color-accent | #6030CF | Hue 258 — 7.02 / 6.15 / 7.44:1 · AAA | |
--member-past | #9A581D | Left the band — 5.23 / 4.58 / 5.54:1 | |
--color-band | #191720 | Inverted band | |
--color-on-band | #FAF8F5 | 16.72:1 on band · AAA | |
--color-on-band-muted | #A6A1B2 | 7.06:1 on band · AAA | |
--color-accent-on-band | #AF95EC | 7.03:1 on band · AAA |
The border token clears 3:1 against all three grounds, which is what WCAG 1.4.11 asks of a non-text boundary. It is never used for text.