a11y: WCAG/mobile fixes and deterministic visual gates (Closes #14)
Quality gates / quality (pull_request) Failing after 2m25s

Strict RED-GREEN per defect, verified in a real browser:

- Nav buttons expose accessible names ('Today navigation item') and
  the active view carries aria-current=page
- Urgent red-flag box is an assertive role=alert live region so screen
  readers announce 'Pause and get medical help' the moment a red-flag
  symptom is checked
- Log sheet dismisses on Escape (keyboard path out of the modal)
- --muted darkened #756e68 -> #6a635c: muted text now meets WCAG AA
  4.5:1 on paper, surface, and soft backgrounds
- New npm run test:a11y gates (Playwright, mobile viewport):
  landmarks/labels/focus-ring/touch-targets/reduced-motion,
  urgent-alert announcement + dialog semantics, token contrast math
  and 200% text-zoom resilience; each writes a synthetic screenshot
  to artifacts/a11y-*.png for human inspection
- CI runs test:a11y and uploads the screenshots as artifacts
- sleek-chat selector updated to the new accessible nav name

Privacy/safety paths unchanged: local-first storage, consent-gated AI,
deterministic urgent override all still pass existing suites.
This commit is contained in:
timmy committed 2026-08-22 23:18:04 +00:00
1 parent 47294a98aa
commit ae9fe0173c
12 files changed
+217 -4

No files matched your search

+12
View File
@@ -49,8 +49,20 @@ jobs:
sleep 1
done
npm run test:ui
npm run test:a11y
npm run test:photo
npm run test:sleek
- name: Upload accessibility screenshots
uses: actions/upload-artifact@v4
if: always()
with:
name: a11y-screenshots
path: |
artifacts/a11y-journal-mobile.png
artifacts/a11y-privacy-mobile.png
artifacts/a11y-redflag-alert.png
artifacts/a11y-zoom-home.png
if-no-files-found: ignore
- name: Dependency audit
run: npm audit --audit-level=high
- name: Syntax checks