Public court-forms site; these are WCAG-relevant gaps on the pages a self-represented litigant actually uses. All verified in source.
Note for the refactor: decorative icons already use alt="" correctly and icon-only controls carry aria-label mirroring the visible text (standardformatter.py:186, 569, 937) — preserve that.
Each ships with a fail-first e2e (curl the page, assert the element is absent on the unpatched release and present on the branch).
Public court-forms site; these are WCAG-relevant gaps on the pages a self-represented litigant actually uses. All verified in source.
templates/base_templates/base.html:77-151renders the navbar then#damainwith no bypass anchor, so keyboard and screen-reader users tab through the full nav on every question page. WCAG 2.4.1 (Bypass Blocks). ~20 min.templates/pages/404.htmlhas norole="main"landmark and no link back to a working page, so a mistyped form URL strands the litigant. The question path already setsrole="main"(standardformatter.py:947); match it and add a link home. ~15 min.@media printrules found. Litigants print the question/summary pages directly to bring to court; today they get the full nav, buttons, and wasted ink. ~1-2 hrs.Note for the refactor: decorative icons already use
alt=""correctly and icon-only controls carryaria-labelmirroring the visible text (standardformatter.py:186, 569, 937) — preserve that.Each ships with a fail-first e2e (curl the page, assert the element is absent on the unpatched release and present on the branch).