Colour Contrast Report — every brand pair, measured
What this covers, and what lies outside it
The rows above are the colour system, and only the colour system. The dataset’s own scope field says so: keyboard order, focus visibility, landmark structure, alt text and motion preferences are checked separately, in files of their own. A table where every pair meets its role is therefore a claim about the pairs listed above and those alone, rather than a claim that the site is accessible — which is as far as arithmetic can honestly take you.
Each pair is judged against the role the palette gives it. A token meant for text has to clear 4.5:1 at normal sizes; a token meant as a FILL — a button, a rule, a section marker — is measured against the ground it sits on, which says how visible the block is rather than whether copy could be set on it. Both readings are in the table and both are labelled, because collapsing them into one “pass” column is how a palette ends up with unreadable red text.
How the figures are produced
WCAG 2.1 relative luminance, computed from the sRGB hex values declared in src/app/brand.css. Arithmetic rather than sampling: these are the declared token values, so each figure is exact rather than estimated from a screenshot of a rendered page. The ratio and the two booleans beside it are read from the file as published, exactly as they were computed.
Every row prints the two hex values it was computed from, and that is deliberate. A figure is only as current as the token it was read from, so if a token moves after the file is generated, that row is stale until the next run. Printing the hex instead of the token name is what makes such a drift visible rather than silent: compare any row against brand.css and you can settle it yourself.
Why publish this
Most consulting firms claim “WCAG-compliant” and leave the measurement unshown. We have been on both sides of that — auditing sites that passed an accessibility review and still had keyboard traps. So this page publishes the part that can be computed exactly, names the part that lies outside it, and leaves the file open so anyone can recompute it.
Open data. /assets/data/a11y-status.json — CC0-1.0, open and unmetered.
