Skip to content

Accessibility statement

Orrery · target conformance: WCAG 2.1 Level AA · last reviewed 2026-07-09 · tracked in RFC-031 / ADR-025

Orrery is a canvas- and WebGL-heavy solar-system explorer, which is historically the hardest kind of web app to make accessible. We treat accessibility as a first-class requirement, not an afterthought, and this statement is an honest account of where we conform, where we don't yet, and how to reach us.

Conformance target

We target WCAG 2.1 Level AA. The app is built to be operated with keyboard alone, by a screen reader, and by a TV D-pad remote — one shared interaction model (a remote is a keyboard: ←→↑↓ + Enter/Back), so a fix for one surface is a fix for all three.

What's supported

Keyboard & remote — everything is reachable without a mouse.

  • Every interactive control is keyboard-operable (WCAG 2.1.1) with no keyboard traps (2.1.2).
  • The top navigation is a roving toolbar — one Tab stop, ← → / D-pad move across it.
  • Long lists and grids (missions, fleet, posters, station modules, surface sites) use roving tabindex so arrows / the D-pad move within the group instead of tabbing through every item (2.4.3 Focus order).
  • Canvas objects are reachable by keyboard — the part ADR-025 originally deferred. Each 3D/2D scene has a DOM index of its selectable objects: the /explore body index (Sun, planets, small bodies), the surface site index (/moon /mars /earth), and the /iss · /tiangong module lists. Selecting a row does exactly what a canvas click does — no pointer required.
  • Visible focus on every control (2.4.7), thickened further under the TV 10-foot layer.

Screen readers.

  • Landmarks (<nav>, <main>, complementary panels), honest aria-labels on every canvas describing what it shows and how to reach details, WAI-ARIA tabs and radiogroup patterns on panels and filters, and aria-live regions announcing dynamic data and load failures (4.1.2, 4.1.3).

Motion & contrast.

  • Reduced motion (2.3.3, 2.2.2): prefers-reduced-motion: reduce stops all unsolicited motion — auto-orbit, auto-play, auto-rotate — while user-initiated motion still works.
  • High-contrast mode toggle in the nav.

Targets & internationalisation.

  • Interactive targets meet the 44 × 44 px minimum (2.5.5); dense diagrams use expanded invisible hit-pads.
  • 14 locales, browser-detected, including a right-to-left language (Arabic).

Known limitations (and how we mitigate them)

  • 3D scenes are pointer-driven for manipulation (orbit / pan / pinch-zoom). We do not claim keyboard camera control yet — instead, every object those scenes contain is selectable from the DOM indexes above, and every fact is available in the panels. So the content is fully reachable; free-flying the camera by keyboard is future work (RFC-031 S4).
  • Screen-reader narration of the live 3D view is limited to the honest canvas label + the object indexes; we don't read every object's changing position aloud (it floods). Focusing an index row announces that object.
  • We have not completed a full third-party audit; conformance is self-assessed against automated (axe-core) + manual keyboard / screen-reader / contrast testing.

Assistive technologies tested

Keyboard-only navigation and VoiceOver (macOS/iOS) on the latest Safari and Chrome; Android TalkBack and a D-pad remote on the Google-TV build.

Feedback

Found a barrier? Please open an issue at github.com/chipi/orrery/issues with the page, what you were trying to do, and your assistive tech + browser. Accessibility regressions are treated as bugs, not enhancements.


This statement is versioned with the code (docs/accessibility.md) and updated as conformance changes. See RFC-031 for the roadmap and ADR-025 for the original tier-1 contract.

Orrery — architecture documentation · MIT · No tracking