StellaOps Console Accessibility Guide

Audience: Accessibility Guild, Console Guild, Docs Guild, QA.
Scope: Keyboard interaction model, screen-reader behaviour, colour & focus tokens, testing workflows, offline considerations, and compliance checklist for the StellaOps Console (Sprint 23).

The console targets WCAG 2.2 AA across all supported browsers (Chromium, Firefox ESR) and honours StellaOps’ sovereign/offline constraints. Every build must keep keyboard-only users, screen-reader users, and high-contrast operators productive without relying on third-party services.


1 · Accessibility Principles

  1. Deterministic navigation – Focus order, shortcuts, and announcements remain stable across releases; URLs encode state for deep links.
  2. Keyboard-first design – Every actionable element is reachable via keyboard; shortcuts provide accelerators, and remapping is available via Settings → Accessibility → Keyboard shortcuts.
  3. Assistive technology parity – ARIA roles and live regions mirror visual affordances (status banners, SSE tickers, progress drawers). Screen readers receive polite/atomic updates to avoid chatter.
  4. Colour & contrast tokens – All palettes derive from design tokens that achieve ≥ 4.5:1 contrast (text) and ≥ 3:1 for graphical indicators; tokens pass automated contrast linting.
  5. Offline equivalence – Accessibility features (shortcuts, offline banners, focus restoration) behave the same in sealed environments, with guidance when actions require online authority.

2 · Keyboard Interaction Map

2.1 Global shortcuts

ActionMacsWindows/LinuxNotes
Command palette⌘ KCtrl KFocuses palette search; respects tenant scope.
Tenant picker⌘ TCtrl TOpens modal; Enter confirms, Esc cancels.
Filter tray toggle⇧ FShift FFocus lands on first filter; Tab cycles filters before returning to page.
Saved view presets⌘ 1-9Ctrl 1-9Bound per tenant; missing preset triggers tooltip.
Keyboard reference??Opens overlay listing context-specific shortcuts; Esc closes.
Global search (context)//When the filter tray is closed, focuses inline search field.

2.2 Module-specific shortcuts

ModuleActionMacsWindows/LinuxNotes
FindingsExplain search⌘ /Ctrl /Only when Explain drawer open; announces results via live region.
SBOM ExplorerToggle overlays⌘ GCtrl GPersists per session (see /docs/ui/sbom-explorer.md).
Advisories & VEXProvider filter⌘ ⌥ FCtrl Alt FMoves focus to provider chip row.
RunsRefresh snapshot⌘ RCtrl RSoft refresh of SSE state; no full page reload.
PoliciesSave draft⌘ SCtrl SRequires edit scope; exposes toast + status live update.
DownloadsCopy CLI command⇧ DShift DCopies manifest or export command; toast announces scope hints.

All shortcuts are remappable. Remaps persist in IndexedDB (per tenant) and export as part of profile bundles so operators can restore preferences offline.


3 · Screen Reader & Focus Behaviour

  • Skip navigation – Each route exposes a “Skip to content” link revealed on keyboard focus. Focus order: global header → page breadcrumb → action shelf → data grid/list → drawers/dialogs.
  • Live regions – Status ticker and SSE progress bars use aria-live="polite" with throttling to avoid flooding AT. Error toasts use aria-live="assertive" and auto-focus dismiss buttons.
  • Drawers & modals – Dialog components trap focus, support Esc to close, and restore focus to the launching control. Screen readers announce title + purpose.
  • Tables & grids – Large tables (Findings, SBOM inventory) switch to virtualised rows but retain ARIA grid semantics (aria-rowcount, aria-colindex). Column headers include sorting state via aria-sort.
  • Tenancy context – Tenant badge exposes aria-describedby linking to context summary (environment, offline snapshot). Switching tenant queues a polite announcement summarising new scope.
  • Command palette – Uses role="dialog" with search input labelled. Keyboard navigation within results uses Up/Down; screen readers announce result category + command.
  • Offline banner – When offline, a dismissible banner announces reason and includes instructions for CLI fallback. The banner has role="status" so it announces once without stealing focus.

4 · Colour & Focus Tokens

Console consumes design tokens published by the Console Guild (tracked via CONSOLE-FEAT-23-102). Tokens live in the design system bundle (ui/design/tokens/colors.json, mirrored at build time). Key tokens:

TokenPurposeContrast target
so-color-surface-basePrimary surface/background≥ 4.5:1 against so-color-text-primary.
so-color-surface-raisedCards, drawers, modals≥ 3:1 against surrounding surfaces.
so-color-text-primaryDefault text colour≥ 4.5:1 against base surfaces.
so-color-text-invertedText on accent buttons≥ 4.5:1 against accent fills.
so-color-accent-primaryAction buttons, focus headings≥ 3:1 against surface.
so-color-status-criticalError toasts, violation chips≥ 4.5:1 for text; critical-bg provides >3:1 on neutral surface.
so-color-status-warningWarning bannersMeets 3:1 on surface and 4.5:1 for text overlays.
so-color-status-successSuccess toasts, pass badges≥ 3:1 for iconography; text uses text-primary.
so-focus-ring2 px outline used across focusable elements3:1 against both light/dark surfaces.

Colour tokens undergo automated linting (axe-core contrast checks + custom luminance script) during build. Any new token must include dark/light variants and pass the token contract tests.


5 · Testing Workflow

LayerToolingFrequencyNotes
Component a11yStorybook + axe-core addonOn PR (story CI)Fails when axe detects violations.
Route regressionPlaywright a11y sweep (pnpm test:a11y)Nightly & release pipelineExecutes keyboard navigation, checks focus trap, runs Axe on key routes (Dashboard, Findings, SBOM, Admin).
Colour contrast lintToken validator (src/Tools/a11y/check-contrast.ts)On token changeGuards design token updates.
CI parityPending scripts/check-console-cli-parity.sh (CONSOLE-DOC-23-502)Release CIEnsures CLI commands documented for parity features.
Screen-reader spot checksManual NVDA + VoiceOver scriptsPre-release checklistScenarios: tenant switch, explain drawer, downloads parity copy.
Offline smokestella offline kit import + Playwright sealed-mode runPrior to Offline Kit cutValidates offline banners, disabled actions, keyboard flows without Authority.

Accessibility QA (CONSOLE-QA-23-402) tracks failing scenarios via Playwright snapshots and publishes reports in the Downloads parity channel (kind = "parity.report" placeholder until CLI parity CI lands).


6 · Offline & Internationalisation Considerations

  • Offline mode surfaces staleness badges and disables remote-only palette entries; keyboard focus skips disabled controls.
  • Saved shortcuts, presets, and remaps serialise into Offline Kit bundles so operators can restore preferences post-import.
  • Locale switching (future feature flag) will load translations at runtime; ensure ARIA labels use i18n tokens rather than hard-coded strings.
  • For sealed installs, guidance panels include CLI equivalents (stella auth fresh-auth, stella runs export) to unblock tasks when Authority is unavailable.

7 · Compliance Checklist

  • [ ] Keyboard shortcut matrix validated (default + remapped) and documented.
  • [ ] Screen-reader pass recorded for tenant switch, Explain drawer, Downloads copy-to-clipboard.
  • [ ] Colour tokens audited; contrast reports stored with release artifacts.
  • [ ] Automated a11y pipelines (Storybook axe, Playwright a11y) green; failures feed the #console-qa channel.
  • [ ] Offline kit a11y smoke executed before publishing each bundle.
  • [ ] CLI parity gaps logged in /docs/cli-vs-ui-parity.md; UI callouts reference fallback commands until parity closes.
  • [ ] Accessibility Guild sign-off captured in sprint log and release notes reference this guide.
  • [ ] References cross-checked (/docs/ui/navigation.md, /docs/ui/downloads.md, /docs/security/console-security.md, /docs/observability/ui-telemetry.md).

8 · References

  • /docs/ui/navigation.md – shortcut definitions, URL schema.
  • /docs/ui/downloads.md – CLI parity and offline copy workflows.
  • /docs/ui/console-overview.md – tenant model, filter behaviours.
  • /docs/security/console-security.md – security metrics and DPoP/fresh-auth requirements.
  • /docs/observability/ui-telemetry.md – telemetry metrics mapped to accessibility features.
  • /docs/cli-vs-ui-parity.md – parity status per console feature.
  • CONSOLE-QA-23-402 – Accessibility QA backlog (Playwright + manual checks).
  • CONSOLE-FEAT-23-102 – Design tokens & theming delivery.

Last updated: 2025-10-28 (Sprint 23).