Parity
Accessibility · Wave 47 · demo product

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.

Report an issue

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.

Statement deepen checklist

Wave 734 · Accessibility hub ladder deepen · SAMPLE
5 rungs

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

  1. Rung 1
    hub
    Hub · SAMPLE

    SAMPLE hub ladder stub.

  2. Rung 2
    statement
    Statement · SAMPLE

    SAMPLE statement ladder stub.

  3. Rung 3
    audit
    Audit · SAMPLE

    SAMPLE audit ladder stub.

  4. Rung 4
    keyboard
    Keyboard · SAMPLE

    SAMPLE keyboard ladder stub.

  5. Rung 5
    deeper
    Deeper · 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.

Wave 915 · Accessibility page hub ladder · SAMPLE
5 rungs

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

  1. Rung 1
    hub
    Hub · SAMPLE

    SAMPLE hub ladder stub.

  2. Rung 2
    assess
    Assess · SAMPLE

    SAMPLE assess ladder stub.

  3. Rung 3
    share
    Share · SAMPLE

    SAMPLE share ladder stub.

  4. Rung 4
    tradeoff
    Tradeoff · SAMPLE

    SAMPLE tradeoff ladder stub.

  5. Rung 5
    deeper
    Deeper · 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.

Wave 607 · Accessibility ladder deepen · SAMPLE
5 rungs

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

  1. Rung 1
    principles
    Principles · SAMPLE

    POUR principles stub.

  2. Rung 2
    landmarks
    Landmarks · SAMPLE

    Landmark regions stub.

  3. Rung 3
    contrast
    Contrast · SAMPLE

    Contrast checklist stub.

  4. Rung 4
    keyboard
    Keyboard · SAMPLE

    Keyboard path stub.

  5. Rung 5
    audit
    Audit · 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.

Wave 364 · A11y deepen · SAMPLE
3 done
2 partial
2 planned

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-content
    done
    Layout
    SAMPLE

    Root layout skip link present; verify focus order on marketing + app shells.

  • Header / main / footer landmarks
    done
    Layout
    SAMPLE

    Primary landmarks documented; spot-check new portal routes for missing <main>.

  • npm run a11y:smoke
    done
    QA
    SAMPLE

    axe-core + happy-dom smoke stays green in CI-ish verify.

  • Visible focus rings on controls
    partial
    UI
    SAMPLE

    Button/input focus styles present; re-check custom chips on carrier portal.

  • VoiceOver / NVDA pass
    planned
    A11y
    SAMPLE

    No formal SR audit yet — planned before production hardening.

  • Manual contrast review
    partial
    Design
    SAMPLE

    Light/dark theme contrast is manual; axe contrast disabled in happy-dom.

  • Full route a11y crawl
    planned
    QA
    SAMPLE

    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.

Wave 524 · A11y audit · SAMPLE
4 checks

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…

  1. Check 1
    Axe smoke · SAMPLE
    pass

    npm run a11y:smoke — landmark / skip-link fixtures.

  2. Check 2
    Keyboard pass · SAMPLE
    pass

    Focus management

  3. Check 3
    Screen-reader gap · SAMPLE
    gap

    No full screen-reader audit

  4. Check 4
    Contrast manual · SAMPLE
    manual

    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.

Wave 451 · Accessibility · SAMPLE
4 done

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

Landmarks & skip link
Focus management
Automated axe smoke
Limit · No full screen-reader audit

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.

Related

Privacy and security describe local-first data and headers; trust covers opt-in agents. Run npm run a11y:smoke for the automated check.