Observation from the #166 sweep, recorded so the next sweep does not re-derive it. No action implied — this is a palette question about the site's secondary text colours, and it is much larger than any one card.
What was measured
Full sweep of content/blog/**/*.svg at head c9e76a7 (i.e. with #166's fixes applied): 102 files, 1,942 measurable text nodes. Method is #140/#167's — Chromium at native viewBox, getComputedStyle().fill per text leaf, ground sampled as the median of nine pixels across the glyph box in a second raster with text{visibility:hidden}.
Applying the floor #166's ruling states — 4.5:1 for text rendered under 18px (or under 14px bold), 3:1 at or above — the corpus is:
The 217 are not scattered mistakes; they are a handful of house colours used consistently, landing just under AA at small sizes:
| fill |
nodes |
files |
ratio range |
rendered sizes |
#647872 |
102 |
18 |
4.092–4.478 |
11–15px |
#657872 |
23 |
4 |
4.174–4.463 |
13–14px |
#b85c4d |
18 |
2 |
4.021–4.453 |
14–15px |
#c8ece2 |
14 |
3 |
4.318 |
14–16px |
#7d8f88 |
10 |
1 |
3.128–3.202 |
12.5–13px |
#8a9691 |
8 |
1 |
3.037 |
12px |
#5d736b |
7 |
5 |
4.352–4.491 |
14–16px |
#9a6b8a |
6 |
2 |
3.088 |
13px |
| (12 more fills) |
29 |
— |
3.218–4.491 |
11–15px |
88 of the 217 are within 0.2 of the floor — #5d736b at 4.352–4.491 and #647872 at 4.09–4.48 are the site's ordinary secondary-text greys, missing AA by a hair rather than by a category.
Why this was not swept with #166
#166's population was the 19 nodes below 3:1, and its ruling was explicitly scoped so that "nobody is re-designing anything". This band is a different animal:
If it is taken up
Recording only; unassigned.
Generated by Claude Code
Observation from the #166 sweep, recorded so the next sweep does not re-derive it. No action implied — this is a palette question about the site's secondary text colours, and it is much larger than any one card.
What was measured
Full sweep of
content/blog/**/*.svgat headc9e76a7(i.e. with #166's fixes applied): 102 files, 1,942 measurable text nodes. Method is #140/#167's — Chromium at nativeviewBox,getComputedStyle().fillper text leaf, ground sampled as the median of nine pixels across the glyph box in a second raster withtext{visibility:hidden}.Applying the floor #166's ruling states — 4.5:1 for text rendered under 18px (or under 14px bold), 3:1 at or above — the corpus is:
?pair, filed separately as The accent-gold?onenterprise-ontology-race-open-vs-closed/cover{,-en}.svgreads at 1.79:1 — but the mechanical darkening rule cannot be applied to it #181.The 217 are not scattered mistakes; they are a handful of house colours used consistently, landing just under AA at small sizes:
#647872#657872#b85c4d#c8ece2#7d8f88#8a9691#5d736b#9a6b8a88 of the 217 are within 0.2 of the floor —
#5d736bat 4.352–4.491 and#647872at 4.09–4.48 are the site's ordinary secondary-text greys, missing AA by a hair rather than by a category.Why this was not swept with #166
#166's population was the 19 nodes below 3:1, and its ruling was explicitly scoped so that "nobody is re-designing anything". This band is a different animal:
If it is taken up
#647872→ about#5d6f68clears 4.5:1 on the#eef7f3-family grounds, and#5d736bis already within one or two 8-bit steps.content-lint— it needs Chromium — and suggested a scheduled or pre-release job. A gate is only worth building once the floor it enforces is settled.Recording only; unassigned.
Generated by Claude Code