Colour Contrast Report — every brand pair, measured

Pairs measured

11

file declares 11

Meeting their role

11of 11

as judged by the file

Lowest text ratio

4.72:1

AA needs 4.5:1 for normal text

Every pair, and the arithmetic

11 pairs · generated 2026-10-17 04:39 UTC · WCAG 2.1 relative luminance · CC0-1.0

PairForeground on backgroundRatioRoleVerdict
body text on the dark ground#f2ece4 on #16110f15.96:1textAA at any size
body text on paper#16110f on #f2ece415.96:1textAA at any size
accent text on the dark ground#ef4d67 on #16110f5.29:1textAA at any size
accent text on paper#b2102a on #f2ece45.96:1textAA at any size
gold figures on the dark ground#ffd97a on #16110f13.79:1textAA at any size
gold figures on paper#8a6100 on #f2ece44.72:1textAA at any size
live indicator on the dark ground#37e6d2 on #16110f11.96:1textAA at any size
live indicator on paper#0d6f66 on #f2ece45.14:1textAA at any size
the identity garnet as a FILL on dark#c8122f on #16110f3.20:1fillfill, 3:1 or better
white text on the identity garnet fill#ffffff on #c8122f5.86:1textAA at any size
prose link hover on the dark ground#f05b73 on #16110f5.75:1textAA at any size
Declared, and unpaired

3 tokens in src/app/brand.css that the rows above leave unmeasured

A contrast ratio describes text on a ground. These tokens are declared in the palette but appear only as fills rather than text on any ground, so a single figure would misdescribe what a reader sees. They are listed rather than omitted because the table above invites you to diff it against src/app/brand.css — and a token missing from both lists is how the heading on this page was wrong before. The generator now halts the build when a declared token is absent from both.

TokenValueWhy it is unpaired
--brand-garnet-dark#5e0816Gradient stop only. Its 2 references are a linear-gradient() in scroll.css and the --w-garnet-dark alias; it is never a foreground on a ground, so a single ratio could not describe what a reader sees.
--brand-garnet-deep#880c20Declared but never referenced -- 0 var() uses anywhere in src/**/*.css. It forms no pair with any ground because nothing paints with it.
--brand-gold-warm#ff9a3cAlias only -- 1 reference, --w-gold-warm in warm.css, and that alias is used as an ink property in 0 rules. No text on this site is set in this colour.
Provenance
Dataseta11y-status
Generated2026-10-17 04:39 UTC
Dark ground#16110f
Paper ground#f2ece4
PublisherGarnet Grid Consulting LLC
LicenceCC0-1.0
File/assets/data/a11y-status.json

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.