Pin the a11y baseline given the host organisation context (APF France
Handicap, where accessibility is the core mission, not a compliance
checkbox):
- Conformance: WCAG 2.2 AA universal + AAA on criteria with high
impact for the user base (1.4.6 Enhanced Contrast 7:1, 2.2.3 No
Timing, 2.3.3 Animation from Interactions, 3.1.5 Reading Level,
1.4.8 Visual Presentation, 2.4.9 Link Purpose, 3.3.5 Help). RGAA 4.1
alignment for French audit context.
- User-preferences panel as a first-class feature: contrast (3 tiers),
text size (up to 200%), motion, text spacing, cognitive
simplification, reading focus. Persisted in session (ADR-0010).
- UI stack: Angular CDK + spartan-ng + TailwindCSS (not Angular
Material; not React libs). Components copy-pasted into
libs/shared/ui under our control. Design tokens with
contrast-verified colour pairs in libs/shared/tokens.
- Tooling and CI gates: @angular-eslint/template/* a11y rules
(blocking), @axe-core/playwright e2e blocking on critical/serious
violations, design-token contrast verifier (blocking), touch-target
size check (blocking on 44x44 min, default 48x48). Wires into the
a11y gate slot from ADR-0015.
- Manual testing: keyboard and screen reader required on every UI PR
via PR-template checklist; APF user-panel session before every major
release covering visual / motor / cognitive / hearing categories.
- Documentation: public accessibility statement at /accessibility (EN)
and /accessibilite (FR) - EAA legal requirement, generated from
source-of-truth in the repo. Internal patterns library in
docs/accessibility/.
decisions/README.md index updated. CLAUDE.md gains an explicit
'Accessibility' line pointing to ADR-0016 and the CI/CD line is
adjusted to mark the a11y gate as locked-in (no longer 'future').