Soft grey typography can be an intentional brand choice, but the acceptance rule should be stated before judging screenshots. Agree the text category and actual foreground/background pairing, then evaluate the relevant ratio without rounding a near miss upward. Visual taste and a measured threshold are different pieces of evidence.
Who should use this acceptance brief
Brands commissioning restrained low-contrast typography. Use this as a scoped website handover task. Where real system evidence is required, teaching examples are not a substitute.
Source-bound platform fact
WCAG contrast minimum specifies4.5:1 for ordinary text and3:1 for qualifying large text, subject to stated exceptions. Ratios are threshold values and are not rounded up. W3C: contrast minimum · Checked 16 October 2026.
Filled teaching example
Synthetic example, not a client case. Finite inputs, expected decisions and counterexamples follow; no live integration is claimed.
On narrow screens, scroll to read the complete table.
| Input / case | Check basis | Expected decision |
|---|---|---|
| ordinary text ratio4.499 | threshold4.5 | below |
| ordinary text ratio4.5 | threshold4.5 | meets ratio |
| large qualifying text ratio3 | threshold3 | meets ratio |
Run the acceptance exercise
- Approve the actual text size/weight category and paired colours.
- Measure the rendered combination, including overlays and the relevant states.
- Retain the unrounded result and test readability on the intended devices.
Interpret the result and retain evidence
The checker compares a supplied ratio with an explicitly chosen threshold. It does not calculate colour luminance or decide whether text qualifies as large. An overlay or background image may require more sampling than one hexadecimal pair. Keep those limits explicit instead of turning a single numeric pass into a whole-site accessibility claim.
Limits before implementation
No existing colours, fonts or layout are changed. Excludes logo exceptions, complete WCAG assessment and a guarantee of comfortable reading for everyone.
Replay the finite example
Save both files in one folder and run with Node22.13 or newer. The example sends no network requests and changes no account or site. Filled inputs and expected outputs · Inspectable functions
node decision-check.mjs text-contrast-acceptance-threshold.json