Context. surface customer · domain onboarding-public · route /legal/accessibility · auth anon · source apps/oshun/web/src/app/legal/accessibility/page.tsx
Last walked. 2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data (2xx), console/page-errors, expected content, screenshot verified; manual screen-reader and real telemetry-delivery checks pending. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md; 2026-06-28 public-legal-pages Playwright pass covered anonymous routing, exact section inventory, legal nav matrix/active states, TOC/back-to-top/print shell controls, 390 px no-overflow, 44 px touch targets, offline-after-load stability, no telemetry hooks, and axe. Manual AT pass and real telemetry delivery remain pending.
Purpose#
OSHUN's WCAG 2.1 AA conformance statement, per-domain accessibility notes, known
limitations, testing methodology, and feedback contact. Rendered through
LegalPageShell.
Entry points#
- Footer link "Accessibility" on
/welcomeand/landing - Sidebar nav from other
/legal/*pages - Inline references from in-product accessibility panel (e.g., reduced motion / high contrast toggles)
- Direct URL / bookmark — yes (anon)
Layout regions#
page.tsx defines SECTIONS: commitment, conformance, features,
domain-accessibility, limitations, testing, feedback.
- Header (shell): minimal brand + back link
- Sticky sidebar: cross-legal nav + 7-entry TOC
- Main article: h1 "Accessibility Statement",
data-legal-date"Last updated: February 21, 2026", seven sections:- Commitment (one paragraph)
- Conformance Status — names WCAG 2.1 Level AA
- Accessibility Features — eight-item list (keyboard nav, screen reader, reduced motion, high contrast, adjustable text size, focus indicators, color independence, touch targets ≥ 44×44)
- Domain-Specific — per-domain notes for Tara, Veritas, Nyx, Arete, Nisaba, Metis
- Known Limitations
- Testing methodology
- Feedback contact:
accessibility@oshun.app, 5-day response SLA
- Floating control: back-to-top button
States#
- Loading — N/A; static
- Default — all seven sections render
- TOC click / active section — clicking a TOC button scrolls to that
section and marks it
data-active="true"; passive scroll-spy remainsIntersectionObserver-driven - Back-to-top visible — the shared 44 px control appears after scrolling and returns the user near the document start
- Narrow viewport (≤ 768px) — sidebar collapses; TOC hidden
- Print — shell strips chrome, appends anchor hrefs after links
- Offline after load — once loaded, the URL, heading, section inventory, and active legal nav state remain stable when the browser context goes offline
- Gated — N/A; anonymous-readable
Interactions#
Cross-legal sidebar nav#
- Each
LEGAL_NAVlink — sibling legal page navigation, active state, and at least 44 px mobile target
On-this-page TOC#
- Each TOC button (7) —
scrollIntoViewto that section id and immediate active state after click
Back-to-top#
- "↑" (button) — smooth-scroll to top when visible
Body content#
The Feedback section lists accessibility@oshun.app as plain text, not a
mailto: link. Verify intent.
Data & contracts#
- Reads: none — static text
- Writes: none
- Caching: SSR static; loaded-route offline stability is asserted. Cold
offline navigation / per-legal SW path caching is not asserted, and current
sw.jsdoes not path-cache/legal/*. - Auth: anon (in middleware
PUBLIC_PREFIXES) - Metadata:
title: 'Accessibility Statement',description: 'Our commitment to making OSHUN accessible to everyone.'
Cross-references#
- Shell a11y:
shell/06-keyboard-a11y.md - Sibling legal pages:
legal-privacy.md,legal-terms.md,legal-cookies.md,legal-ccpa.md,legal-dpa.md - Component sources:
apps/oshun/web/src/components/legal/LegalPageShell.tsx
E2E coverage#
- Backed by
apps/oshun/web/e2e/public-legal-pages.spec.ts— covers anonymous access, exact seven-section inventory, legal nav inventory/active state, shared TOC/back-to-top/print shell behavior, 390 px no-overflow, 44 px touch targets, offline-after-load stability, no telemetry hooks, and axe.
Open questions / known gaps#
- Cold offline navigation / per-legal SW cache is not asserted and current
sw.jsdoes not path-cache/legal/*; PWA shell cache coverage remains in the offline-first / PWA walkthroughs. -
accessibility@oshun.apprendered as plain text — confirm whether it should be a mailto link - No structured "Report an accessibility issue" form — only an email contact; confirm whether a form route should exist
- Per-domain notes call out Metis "mastery-state changes are announced via a
live region" — verify against
/metis/*walkthroughs once they exist