Dara Okonkwo

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.

Zero photographs, deliberately

There is no photograph of motion design. Days 101–103 each earned their images by having something a photograph could prove; this one does not, and a grid of stock laptops-and-coffee would be the page arguing against its own copy on the way past. The FAQ says so out loud rather than leaving the absence to be noticed. Everything visual here is drawn: the curve, the frame ruler, the favicon and the OG image.

This one IS a table

Day 103's ledger was a list because nobody compares festivals — you read down one column and count. This is a table because comparing rows is the entire point: the same sentence, six times, at six prices. The shape of the data decides the element, and answering that question fresh each day is the only thing keeping these templates apart.

The curve is drawn from the table

The step chart reads the same array the table renders, on a log scale — linear would flatten the first four stages against 48 and hide the only part of the curve a client can still act on. It is aria-hidden because the table beside it is the complete text equivalent, and the caption states the scale so nobody reads a log chart as a linear one.

Cost state is never only a colour

Every stage carries its hour count as a number and the words “Still open”, “Closing” or “Already paid for” in a bordered chip. The two cost tokens are the third signal and neither of them is the accent, because on a page about what a change costs, “expensive” must not be the same colour as a link.

Type

Schibsted Grotesk — display and body

Chivo Mono — 48 h · 00:04:12 · 1.5 h/sec

Hours, frame counts and timecode all have to align in columns, so the mono face is load-bearing rather than decorative. Neither appears in days 1–103.

Tokens

Colour tokens with measured contrast ratios
SwatchTokenValueMeasured
--color-bg #121016 Violet-black viewport
--color-bg-alt #1A1720 Banding
--color-surface #221E2A Cards, the chart plate
--color-text #EDEAF2 15.88 / 14.87 / 13.71:1 · AAA
--color-text-muted #90839D 5.33 / 4.99 / 4.60:1 · AA
--color-border #71667D 3.51 / 3.28 / 3.03 — non-text only
--color-accent #B063F2 Hue 272 — 5.32 / 4.98 / 4.59:1 · AA
--cost-cheap #5FD08A Still open — 9.79 / 9.16 / 8.45:1
--cost-dear #F4855F Already paid for — 7.53 / 7.05 / 6.50:1
--color-band #EDEAF2 The band inverts: light on a dark site
--color-on-band #121016 15.88:1 on band · AAA
--color-on-band-muted #5E536A 6.04:1 on band · AA
--color-accent-on-band #8B29E0 5.06: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.