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.
Twelve disclosures, closed
The summary of each date carries the four facts a listing normally omits — room, format, when the headline is on, and whether it is gone — and the body carries the sentence about what the night is actually like. Closed by default, because twelve open dates is a wall nobody reads, and a page whose whole argument is that listings withhold information cannot then bury it.
Sold out stays on the list
Two dates are gone and both remain, marked in a word with a glyph before any colour is
applied. Deleting them would make the run look smaller than it is and tell the person who
missed one nothing. The structured data does the opposite, deliberately: only on-sale
dates are emitted as MusicEvent, because publishing a sold-out show as an
available event is the kind of markup that makes a rich result actively wrong.
Schema.org, sixth shape in five days
MusicGroup, which covers a solo artist as well as a band and is the only type
reached for so far with first-class album and event properties.
Days 109–112 were VideoGame, Organization,
Person + occupation and Person + offers. The type is chosen from
what the page is, every time, rather than inherited from the scaffold.
Photographs of things, not of a person
The artist is fictional, so there is no portrait — the same objection day 110 made about headshots. A seated room and a guitar case are real places and real objects standing in for the user's own, which is what days 101 and 111 did with frames and a desk. The guitar-case photograph was cropped to remove a framed drawing of a face: somebody else's artwork, and a portrait, on a page that deliberately has none.
Type
Lustria — display
Source Serif 4 carries the body, and the body is most of this page.
The only template in this sprint with no custom mono: the figures here are prices and times inside prose, not columns that have to align, so a system monospace is enough. Neither face appears in days 1–112.
Tokens
| Swatch | Token | Value | Measured |
|---|---|---|---|
--color-bg | #141613 | Warm green-black | |
--color-bg-alt | #1B1E19 | Banding | |
--color-surface | #252924 | Cards | |
--color-text | #EEF1EB | 15.96 / 14.78 / 12.96:1 · AAA | |
--color-text-muted | #83937B | 5.57 / 5.15 / 4.52:1 · AA | |
--color-border | #687561 | 3.73 / 3.45 / 3.03 — non-text only | |
--color-accent | #5BA343 | Hue 105, 42% sat — 5.86 / 5.43 / 4.76:1 · AA | |
--ticket-gone | #DB714D | Sold out — 5.62 / 5.20 / 4.56:1 | |
--color-band | #EEF1EB | The band inverts: light on a dark site | |
--color-on-band | #141613 | 15.96:1 on band · AAA | |
--color-on-band-muted | #515D4C | 6.10:1 on band · AA | |
--color-accent-on-band | #437932 | 4.58:1 on band · AA |
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.