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 verification is a disclosure
Each check is an <article> and its thirty-second how-to is a
<details> inside it. The check is the argument; the how-to is reference
material, and open by default it would triple the length of a section people came to skim.
Seven disclosures in the spine plus six in the FAQ is also the clearest structural
difference between this template and the four before it.
The only picture is drawn
Two SVG wireframes of the same panel — quads with loops where it bends, and the same
silhouette triangulated evenly with a fan through the deforming area. It is the one
argument on the page a table cannot make, and there is no photograph of a mesh, so it is
vector. Both are aria-hidden; the caption states the whole point in text, and
the two labels are words before they are colours.
Pass and fail are not the accent
--check-ok and --check-bad are separate tokens from
--color-accent, because on a page whose content is a checklist
“passes” must not be the same colour as a heading. Every state is also a word
in a bordered chip, so the colour is the third signal and carries nothing alone.
The list cuts both ways
The seven checks are asserted against this studio's own deliveries, not offered as a critique of other people's. That is a content decision rather than a design one, but it is the reason the section is worth having: a checklist a portfolio does not submit itself to is marketing wearing a lab coat.
Type
Anybody — display
Kode Mono — 40,000 tris · 10.24 px/cm · 2K
Counts, densities and map sizes have to align in columns, so the mono face is load-bearing. Body is Onest. None of the three appears in days 1–104.
Tokens
| Swatch | Token | Value | Measured |
|---|---|---|---|
--color-bg | #F4F5F8 | Cool viewport grey | |
--color-bg-alt | #E5E7EC | Banding | |
--color-surface | #FFFFFF | Check cards, the figure plate | |
--color-text | #14161C | 16.59 / 14.62 / 18.08:1 · AAA | |
--color-text-muted | #636779 | 5.14 / 4.53 / 5.60:1 · AA | |
--color-border | #7F8497 | 3.41 / 3.00 / 3.72 — non-text only | |
--color-accent | #263ED9 | Hue 232 — 6.95 / 6.12 / 7.57:1 · AA | |
--check-ok | #157746 | Passes — 5.12 / 4.52 / 5.59:1 | |
--check-bad | #BA352C | Breaks without it — 5.30 / 4.67 / 5.78:1 | |
--color-band | #14161C | Inverted band | |
--color-on-band | #F4F5F8 | 16.59:1 on band · AAA | |
--color-on-band-muted | #9EA2B0 | 7.10:1 on band · AAA | |
--color-accent-on-band | #8F9CF3 | 7.08: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.