Skip to content

02 — Color, contrast, and ink (`PRINT-COLOR`)

Status: NORMATIVE reference. Internal print-safe guardrail. Scope: Color, contrast, and ink behavior on paper. The central fact of this section: WCAG contrast is defined on on-screen sRGB light emission; paper is reflectance, not emission. A ratio computed for a glowing screen pixel does not transfer, unchanged, to ink on a sheet under room light. This section says where the screen model breaks and what a defensible print target is. Related: Issue #2852 · INVENTORY.md · 01-typography.md


Framing note — emission vs reflectance

WCAG 2.x contrast (SC 1.4.3 / 1.4.6 / 1.4.11) is a ratio of relative luminance derived from sRGB channel values — a model of a display emitting light directly into the eye at a known gamma and (nominally) known viewing conditions. Paper emits nothing. A printed page’s apparent lightness is reflected ambient light, governed by the ink’s absorption, the paper’s reflectance (brightness/whiteness), the light source, and viewing geometry — none of which are in the sRGB number. Therefore a WCAG “pass” for a color pair on screen is evidence, not proof of adequate contrast in print, and a WCAG “fail” may still be legible on bright white stock, or an on-screen pass may fail on cream stock under warm light. Print contrast must be reasoned about in reflectance terms (PRINT-COLOR-001, -002), and every color decision must additionally survive being reduced to grayscale (PRINT-COLOR-003).


Level: SHOULD Applies to: all documents Source: WCAG 2.2 §1.4.3 + Understanding Relative Luminance (definition is sRGB-emission-based); reflectance/LRV contrast per BS 8300-2:2018 and RNIB colour-and-contrast guidance Source strength: agency guidance / analytical Machine-checkable: partial Validation: A tool MAY compute the WCAG sRGB ratio as a screen-domain proxy, but SHOULD NOT report it as the print contrast value. Flag any workflow that asserts WCAG-ratio compliance for a printed artifact without a reflectance conversion or grayscale check. Units: dimensionless WCAG ratio (proxy only).

Teams SHOULD NOT treat a WCAG sRGB contrast ratio as a valid measure of on-paper contrast. The sRGB relative-luminance formula models emitted light on a display; paper contrast is a function of reflected light and depends on ink density, paper reflectance, illuminant, and viewing geometry that the sRGB number does not capture. The WCAG ratio MAY be retained as a screen-domain proxy but MUST be paired with the print target in PRINT-COLOR-002 and the grayscale survival check in PRINT-COLOR-003.

Rationale: Asserting a printed page is “AA compliant” from an on-screen ratio gives false assurance — especially on non-white stock or under warm/low light — and the reader excluded (low vision) is exactly the one the ratio was meant to protect. Implementation notes: Audit/ACR tooling: label any WCAG contrast figure on a print report as “screen sRGB proxy,” not “print contrast.” Do not emit a print-conformance claim solely from the sRGB ratio. This note is the reason PRINT-COLOR-002 exists.


Level: SHOULD Applies to: all documents Source: Light Reflectance Value (LRV) contrast per BS 8300-2:2018 (≥30 LRV-point difference); typographic 70% luminance-contrast practice (CMHR/exhibition-design; formula (B1−B2)/B1 × 100); RNIB colour and contrast guidance Source strength: consensus standard / analytical Machine-checkable: partial Validation: Convert foreground and background to an estimated Light Reflectance Value (0 = black, 100 = white) and compute LRV-point difference and %-contrast (B1−B2)/B1 × 100, where B1 is the lighter LRV. Flag body text below the stated target. “Partial” — LRV is estimated from color for a nominal white stock; true LRV needs a reflectance measurement of the printed sheet. Units: LRV points (0–100) and % luminance contrast.

Printed body text SHOULD target maximum practical contrast — near-black ink on white/near-white stock — and, when a target must be stated numerically, SHOULD meet ≥70% luminance contrast by (B1−B2)/B1 × 100 and ≥30 LRV points of separation between text and its local background. State the target in reflectance terms (LRV / % luminance contrast), never as a bare WCAG ratio, and evaluate it against the actual stock, not an idealized white. Both thresholds must pass; where the LRV-point and %-contrast metrics disagree near the boundary, the stricter governs. Both figures are borrowed from architectural / environmental-graphics guidance (BS 8300-2 building surfaces; CMHR exhibition signage), not body-text-on-paper research — treat them as a conservative floor, not a validated optimum.

Rationale: A reflectance-grounded target degrades gracefully with real paper and lighting, where the sRGB ratio does not. Under-contrasted body text is the most common and most excluding low-vision print defect. Implementation notes: Adopt this as the single print-contrast metric across audit/ACR, preserve-flyer flags, and the reflow profile. Preserve pipeline: sample the composited raster under each text run (worst-case local patch, per PRINT-TYPO-014) and evaluate LRV %-contrast. WeasyPrint/large-print: default to near-black (#111/#000) body on white; never spec brand mid-tones (e.g. Gevell blue #003DA5 is fine on white but many brand tints are not) for body copy. Report both the % and the LRV-point figure so the number survives a change of stock.


Level: MUST Applies to: all documents Source: WCAG 2.2 §1.4.1 Use of Color intent, applied to the monochrome-print channel Source strength: our-implementation rule Machine-checkable: partial Validation: Render the page (or evaluate every color pair) through a grayscale/luminance transform and re-run: (a) the contrast target of PRINT-COLOR-002, and (b) the sole-color-carrier check of PRINT-COLOR-004. Flag any pair or distinction that passes in color but fails in grayscale. Units: same as PRINT-COLOR-002, computed on the desaturated render. Partial, not fully automatable: the pure equiluminant-collapse test (two colors mapping to the same gray) is deterministic, but the contrast-on-desaturated-render step is only as exact as PRINT-COLOR-002’s estimated reflectance.

Every color-dependent legibility or information decision MUST survive conversion to grayscale, because a large share of documents are printed on monochrome office printers and photocopiers. Any distinction or contrast that exists only in hue (equiluminant colors that collapse to the same gray) MUST be reinforced by a luminance and/or non-color difference so it survives B&W printing.

Rationale: Two colors with adequate hue difference but near-equal luminance (e.g. mid-red vs mid-green) collapse to indistinguishable grays on a B&W printer — invisible to everyone, not just color-blind readers, once monochrome. This is the print channel most likely to be used and least likely to be tested. Implementation notes: This is the load-bearing rule of §02 and the reason it is a MUST. Every other COLOR rule inherits it: audit/ACR MUST run its contrast and color-carrier checks on a desaturated render as well as the color render, and report the worse of the two. Preserve pipeline: desaturate the composited page and re-flag. Give the user an explicit “will this survive a black-and-white printer?” verdict per document.


Level: SHOULD Applies to: all documents Source: WCAG 2.2 §1.4.1 Use of Color, applied to print Source strength: consensus standard (WCAG-derived) Machine-checkable: partial Validation: Identify semantics conveyed by color (status/required/legend/“items in red”, chart series, map keys) and check for a redundant non-color cue (text label, pattern, symbol, position, weight). “Partial” — detecting that color carries meaning needs content understanding; flag candidates (colored runs, legend keys, “see the ___ items”) for human confirmation. Units: boolean per encoding.

Information conveyed by color SHOULD also be conveyed by a non-color cue — text, symbol, pattern, position, or weight — so it survives both color-blind reading and monochrome printing (PRINT-COLOR-003). References like “fields in red are required” or color-only chart/map legends SHOULD NOT be used without a redundant encoding.

Rationale: ~1 in 12 men have color-vision deficiency, and everyone loses hue on a B&W print. Color-only encoding excludes both groups; on paper there is no hover, no toggle, no accessible-name fallback. Implementation notes: Preserve pipeline: flag color-only legends and “red = required” phrasing. Charts/maps: require patterns/labels in addition to color (ties to PRINT-FORM-014 for required fields and to figure handling in PRINT-LAYOUT-008). Reflow: emit patterns + direct labels, not color-only series.


Level: SHOULD Applies to: all documents Source: UKAAF clear/large print guidance; RNIB colour and contrast; APH (2022) — high paper reflectance Source strength: consensus standard Machine-checkable: partial Validation: Where stock color is declared/known, compute text-to-stock contrast per PRINT-COLOR-002 using the stock’s LRV (not white). Flag dark, saturated, or low-reflectance stocks for body documents. “Partial” — stock is often a production choice outside the file. Units: LRV of stock + resulting %-contrast.

Body documents SHOULD be printed on high-reflectance white or near-white stock (or a pale, low-saturation tint at most). Dark, saturated, or strongly colored stock SHOULD NOT be used behind body text, and contrast SHOULD always be computed against the actual stock LRV, never assumed white. (Note: a pale non-white tint such as soft cream or pale yellow can reduce glare for some low-vision readers — a deliberate large-print choice — but that is a controlled exception, not license for saturated stock.)

Rationale: Colored stock lowers background LRV and shifts hue, collapsing text contrast — a direct low-vision barrier that an on-screen sRGB check never sees (the file looks white on the monitor). Implementation notes: Our pipelines emit files, not paper, so this is guidance surfaced to the user/print-buyer, plus a warning if stock is specified in a print profile. Large-print alternates MAY specify a pale glare-reducing tint (#FFFFF0-class), but must still pass PRINT-COLOR-002 against that tint.


Level: SHOULD Applies to: all documents Source: WCAG 1.4.3 intent applied to reflectance (PRINT-COLOR-002); UKAAF clear-print Source strength: consensus standard Machine-checkable: partial Validation: Detect watermark/tint layers behind body text; composite and evaluate the text against the darkest tinted region it crosses per PRINT-COLOR-002. Flag tints that pull local text contrast below target. As a rough guardrail, flag background tints heavier than ~10% ink coverage behind body text. Units: % ink coverage / composited %-contrast.

Watermarks and background tints behind body text SHOULD be light enough that text still meets PRINT-COLOR-002 over the worst-case tinted region, and SHOULD generally not exceed ~10% density behind running text. “DRAFT/CONFIDENTIAL” watermarks SHOULD sit in margins or be pale enough not to erode text contrast.

Rationale: Even a faint tint that looks harmless on a bright screen can drop text below the print target once ink density and dot gain (PRINT-COLOR-008) are added, and worsens further in monochrome (PRINT-COLOR-003). Implementation notes: Preserve pipeline: composite the watermark/tint layer with the text and evaluate locally, not globally. This is the same worst-case-local-patch machinery as PRINT-TYPO-014 — share the sampler.


Level: SHOULD Applies to: all documents Source: WCAG 1.4.3/1.4.1 intent applied to print; consensus table/form practice Source strength: consensus standard Machine-checkable: partial Validation: Detect shaded/highlighted table cells and form fields; evaluate cell text against the shade per PRINT-COLOR-002 and in grayscale per PRINT-COLOR-003; confirm any meaning carried by the shade (e.g. “shaded rows = office use only”) also has a non-color cue per PRINT-COLOR-004. Units: composited %-contrast + boolean redundancy.

Shading and highlighting in tables and form fields SHOULD keep the cell/field text at or above the PRINT-COLOR-002 target after printing (including in grayscale), and any meaning carried by shading SHOULD be labeled, not color-only. Reversed (light-on-dark) header cells SHOULD follow the reverse-out constraints of PRINT-TYPO-013. Form fields intended for hand-completion SHOULD NOT be shaded so darkly that pen/pencil ink is illegible against the fill.

Rationale: Shading that reads as “subtle” on screen becomes a solid contrast-killing block once ink density and monochrome conversion apply; dark form fills also defeat the reader’s own handwriting. Implementation notes: docx→AcroForm and preserve pipelines: flag dark field fills and low-contrast shaded cells. Ties to PRINT-FORM (hand-fill legibility) and PRINT-LAYOUT (table header association). Prefer thin rules or bold text over heavy fills to distinguish header rows.


Level: SHOULD Applies to: all documents Source: print-production practice (dot gain, toner scatter, tone-value increase); ISO 12647 tone-reproduction context Source strength: industry practice Machine-checkable: no Validation: Not automatable from the file — it is a design-margin rule. Verify by physical proof on the target device class (see PRINT-VALID physical-print procedure): print on toner and inkjet and confirm fine strokes, hairline rules, and tint text still meet PRINT-COLOR-002. Units: none (procedural).

Designs SHOULD carry a safety margin above the minimum contrast and stroke thresholds to survive real output variability — dot gain / tone-value increase darkens tints and can clog fine reverse-out type; toner scatter and inkjet spread thicken and blur strokes; offset, laser, and inkjet each reproduce tints and thin strokes differently. Do not design to the exact floor of PRINT-COLOR-002/PRINT-TYPO-006 — leave headroom.

Rationale: A layout that just meets contrast/stroke minimums on a calibrated screen or proof can fail on the cheap office toner printer the reader actually uses, re-excluding low-vision readers at the last mile. Implementation notes: Not a file check — encode it as defaults with headroom: our reflow/large-print profiles use near-black-on-white (well above the PRINT-COLOR-002 floor) and ≥Regular weight (PRINT-TYPO-006) precisely to absorb dot gain and toner scatter. Surface it in the PRINT-VALID physical-print checklist as “proof on the cheapest likely device, not just the design monitor.”