Accessibility statement
Parity aims for usable, keyboard-friendly chrome in this demo. This statement summarizes what we have shipped, what we have not fully audited, and how to report barriers — in WCAG-oriented language without claiming formal conformance.
Engineering notes live in A11Y.md. Prefer a barrier report? /contact.
What we’ve done
Landmarks & skip link
Root layout exposes a skip link to #main-content, a primary content landmark, and header/footer/nav structure so assistive tech can jump past chrome. Site and app nav use clear link text; active routes use aria-current where applicable.
Focus management
Interactive controls carry visible focus rings. Modals and overlays (welcome, command palette, and similar) use focus traps with Escape to dismiss. Form labels are associated in Settings and other polished surfaces. Theme controls use radiogroup / radio semantics.
Automated axe smoke
npm run a11y:smoke runs axe-core inside vitest + happy-dom against landmark/skip-link fixtures and lightweight chrome components (for example VerdictBadge, EmptyState). This catches common markup issues early — it is not a full product audit.
Dialog & palette wiring
The global command palette (⌘K / Ctrl+K) uses role="dialog", aria-modal, a labelled title, combobox/listbox wiring, and keyboard selection. See A11Y.md for Wave 22+ notes.
Known limits
No full screen-reader audit
We have not completed a formal VoiceOver / NVDA / JAWS pass across all routes. Individual flows may still have unlabeled controls, live-region gaps, or order quirks. Treat this demo as WCAG-oriented, not certified.
Color contrast not in smoke
Axe color-contrast rules are disabled in the happy-dom smoke because there is no real layout/paint. Light and dark theme contrast is a manual check. Report any hard-to-read text via /contact.
No full route crawl
Automated a11y does not visit every App Router page. Prefer manual keyboard review or future e2e for deep marketplace and health surfaces. Health lib paths remain out of scope for wave edits that do not touch product a11y there.
English-first chrome
UI chrome strings are English. An Español locale stub exists as “coming soon” — we do not ship a fake translation that would harm bilingual users.
Statement deepen checklist
SAMPLE Accessibility hub ladder deepen · 5 rungs · Wave 734
SAMPLE deepen — hub · statement · audit · keyboard · deeper ladder on /accessibility.
Wave 734 · Accessibility hub ladder deepen on /accessibility (≠ accessibilityLadderDeepen / accessibilityDeepen).
Rungs
5
≠ accessibilityLadderDeepen
Kinds
5
Ladder variety
Wave
734
Post-v33.00 deepen
- Rung 1hubHub · SAMPLE
SAMPLE hub ladder stub.
- Rung 2statementStatement · SAMPLE
SAMPLE statement ladder stub.
- Rung 3auditAudit · SAMPLE
SAMPLE audit ladder stub.
- Rung 4keyboardKeyboard · SAMPLE
SAMPLE keyboard ladder stub.
- Rung 5deeperDeeper · SAMPLE
SAMPLE deeper ladder stub.
SAMPLE Accessibility hub ladder deepen — ladder on /accessibility. Distinct from related packs (accessibilityLadderDeepen / accessibilityDeepen). Not live payments, production CRM, claims filing, or licensed advice.
SAMPLE Accessibility page hub ladder deepen · 5 rungs · Wave 915
SAMPLE deepen — hub · assess · share · tradeoff · deeper ladder on /accessibility.
Wave 915 · Accessibility page hub ladder deepen on /accessibility (≠ accessibilityHubLadderDeepen / accessibilityLadderDeepen / accessibilityDeepen).
Rungs
5
≠ accessibilityHubLadderDeepen
Kinds
5
Ladder variety
Wave
915
Package 42.1.0 tip
- Rung 1hubHub · SAMPLE
SAMPLE hub ladder stub.
- Rung 2assessAssess · SAMPLE
SAMPLE assess ladder stub.
- Rung 3shareShare · SAMPLE
SAMPLE share ladder stub.
- Rung 4tradeoffTradeoff · SAMPLE
SAMPLE tradeoff ladder stub.
- Rung 5deeperDeeper · SAMPLE
SAMPLE deeper ladder stub.
SAMPLE Accessibility page hub ladder deepen — ladder on /accessibility. Distinct from related packs (accessibilityHubLadderDeepen / accessibilityLadderDeepen / accessibilityDeepen). Not live payments, production CRM, claims filing, or licensed advice.
SAMPLE accessibility ladder deepen · 5 rungs · Wave 607
SAMPLE deepen — principles · landmarks · contrast · keyboard · audit ladder on /accessibility.
Wave 607 · accessibility ladder deepen on /accessibility (≠ accessibilityDeepen / accessibilityAuditDeepen).
Rungs
5
≠ audit deepen
Kinds
5
Ladder variety
Wave
607
Toward v27.00
- Rung 1principlesPrinciples · SAMPLE
POUR principles stub.
- Rung 2landmarksLandmarks · SAMPLE
Landmark regions stub.
- Rung 3contrastContrast · SAMPLE
Contrast checklist stub.
- Rung 4keyboardKeyboard · SAMPLE
Keyboard path stub.
- Rung 5auditAudit · SAMPLE
a11y:smoke bridge.
SAMPLE accessibility ladder deepen — ladder on /accessibility. Distinct from accessibilityDeepen / accessibilityAuditDeepen. Not live payments, production CRM, claims filing, or licensed advice.
SAMPLE a11y deepen · 3 done · 2 partial · 2 planned
SAMPLE deepen — statement pillars plus a keyboard / landmark / axe checklist with owners.
Wave 364 deepen — 7 checklist items on top of 4 done pillars + 4 known limits (Wave 47 · demo product).
- Skip link to #main-contentdoneLayoutSAMPLE
Root layout skip link present; verify focus order on marketing + app shells.
- Header / main / footer landmarksdoneLayoutSAMPLE
Primary landmarks documented; spot-check new portal routes for missing <main>.
- npm run a11y:smokedoneQASAMPLE
axe-core + happy-dom smoke stays green in CI-ish verify.
- Visible focus rings on controlspartialUISAMPLE
Button/input focus styles present; re-check custom chips on carrier portal.
- VoiceOver / NVDA passplannedA11ySAMPLE
No formal SR audit yet — planned before production hardening.
- Manual contrast reviewpartialDesignSAMPLE
Light/dark theme contrast is manual; axe contrast disabled in happy-dom.
- Full route a11y crawlplannedQASAMPLE
Automated crawl of every App Router page is planned; smoke covers fixtures only.
If you hit a barrier — keyboard trap, missing label, contrast issue, or screen-reader failure — tell us on /contact (topic: product). Messages stay in this browser’s local support inbox in the demo; production will publish a durable channel.
SAMPLE accessibility statement deepen — checklist + ownership chips on /accessibility. Not a formal WCAG conformance claim, VPAT, or certified audit. Demo posture only.
SAMPLE accessibility audit · 4 checks
SAMPLE deepen — axe smoke · keyboard · SR · contrast audit ladder on /accessibility.
Wave 524 · audit checklist / severity ladder on /accessibility (≠ accessibilityDeepen). Demo posture only.
Audit checks
4
Wave 47 · demo product
Done pillars
4
≠ accessibilityDeepen
Known limits
4
If you hit a barrier — keybo…
- Check 1Axe smoke · SAMPLEpass
npm run a11y:smoke — landmark / skip-link fixtures.
- Check 2Keyboard pass · SAMPLEpass
Focus management
- Check 3Screen-reader gap · SAMPLEgap
No full screen-reader audit
- Check 4Contrast manual · SAMPLEmanual
Color contrast not in smoke
SAMPLE accessibility audit deepen — audit checklist / severity ladder and CTAs on /accessibility. Distinct from accessibilityDeepen WCAG posture pillars. Not a formal WCAG conformance claim, VPAT, or certified audit.
SAMPLE accessibility deepen · WCAG posture ladder
SAMPLE deepen — done / limit pillars · axe smoke · barrier report ladder.
4 done · 4 limits · axe smoke · barrier report (Wave 451).
Done pillars
4
Wave 47 · demo product
Known limits
4
Honest gaps · no full SR audit
Axe smoke
vitest
npm run a11y:smoke
SAMPLE accessibility deepen — WCAG posture metrics, pillar ladder, and CTAs on /accessibility. Distinct from a11yStatementDeepen checklist. Not a formal WCAG conformance claim, VPAT, or certified audit. If you hit a barrier — keyboard trap, missing label, contrast issue, or screen-reader failure — tell us on /contact (topic: product). Messages stay in this browser’s local support inbox in the demo; production will publish a durable channel.