The browser suite never applies WCAG's text-spacing overrides or 200% zoom (SC 1.4.12) #278

Closed
opened 2026-09-18 20:34:56 +00:00 by tiagoagueda · 0 comments
Owner

From an accessibility read of the tests on 2026-09-18. The suite is strong where it looks: axe in both themes with heading order on, measured 24px targets, reflow at 320 pixels in three languages, focus after every swap, right-to-left, the forced-colours outline on fields. There is one AA criterion it never exercises.

SC 1.4.12 (text spacing, AA) says a page must lose nothing when a reader overrides line height to 1.5, paragraph spacing to twice the font size, letter spacing to 0.12em and word spacing to 0.16em, which is the standard override low-vision and dyslexic readers apply. Nothing tests it, and the stylesheet has the shapes that break under it: forty uses of truncate, whitespace-nowrap on labels, fixed heights on controls, tracking-wide on 12px headers, .chip-text. The 320-pixel reflow pass approximates 400% zoom, but a zoom pass at 200% on a 1280 window is not the same as spacing overrides, and neither is run.

Proposal: one browser test over signed_in_paths that injects the override

* { line-height: 1.5 !important; letter-spacing: 0.12em !important; word-spacing: 0.16em !important; }
p { margin-bottom: 2em !important; }

and asserts, for every text-bearing element, that scrollWidth and scrollHeight do not exceed the client box where overflow is hidden or clipped, and that no two text boxes overlap: the same measure-in-the-browser shape as tests/e2e/test_target_size.py. A second case at 200% zoom on a 1280 window (a 640-pixel viewport at device scale 2). The list of truncate uses that fail is the list of places to wrap or clamp instead; some are named in the companion issue on tooltips and truncation.

Cheap to add beside it: page.emulate_media(reduced_motion="reduce") asserting the global rule at assets/css/app.css:784-793 really zeroes the two transitions, so the accessibility page's "the little animation there is respects prefers-reduced-motion" stays a tested sentence.

From an accessibility read of the tests on 2026-09-18. The suite is strong where it looks: axe in both themes with heading order on, measured 24px targets, reflow at 320 pixels in three languages, focus after every swap, right-to-left, the forced-colours outline on fields. There is one AA criterion it never exercises. SC 1.4.12 (text spacing, AA) says a page must lose nothing when a reader overrides line height to 1.5, paragraph spacing to twice the font size, letter spacing to 0.12em and word spacing to 0.16em, which is the standard override low-vision and dyslexic readers apply. Nothing tests it, and the stylesheet has the shapes that break under it: forty uses of `truncate`, `whitespace-nowrap` on labels, fixed heights on controls, `tracking-wide` on 12px headers, `.chip-text`. The 320-pixel reflow pass approximates 400% zoom, but a zoom pass at 200% on a 1280 window is not the same as spacing overrides, and neither is run. **Proposal:** one browser test over `signed_in_paths` that injects the override ```css * { line-height: 1.5 !important; letter-spacing: 0.12em !important; word-spacing: 0.16em !important; } p { margin-bottom: 2em !important; } ``` and asserts, for every text-bearing element, that `scrollWidth` and `scrollHeight` do not exceed the client box where `overflow` is hidden or clipped, and that no two text boxes overlap: the same measure-in-the-browser shape as `tests/e2e/test_target_size.py`. A second case at 200% zoom on a 1280 window (a 640-pixel viewport at device scale 2). The list of `truncate` uses that fail is the list of places to wrap or clamp instead; some are named in the companion issue on tooltips and truncation. Cheap to add beside it: `page.emulate_media(reduced_motion="reduce")` asserting the global rule at `assets/css/app.css:784-793` really zeroes the two transitions, so the accessibility page's "the little animation there is respects prefers-reduced-motion" stays a tested sentence.
tiagoagueda added this to the 0.5.0 milestone 2026-09-18 20:34:56 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Postulo/postulo#278
No description provided.