Accessibility

Voluntary Product Accessibility Template

A VPAT® 2.5 (WCAG Edition) conformance report for Stadium Sound, evaluated against WCAG 2.1 Level A and Level AA success criteria.

Product / Version
Stadium Sound, v0.7.0 (Windows x64/arm64, macOS x64/arm64)
Report Date
July 27, 2026
Applicable Standards
WCAG 2.1, Level A and Level AA
Evaluation Methods
Source-code audit of the application UI, web remote, and Electron window configuration
Contact
Open an issue on GitHub ↗
This report was produced from a source-code audit, not from testing with assistive technology (NVDA, JAWS, VoiceOver, TalkBack) or a calibrated contrast-measurement tool. Criteria that require that kind of testing to answer with confidence are marked Not Evaluated below rather than guessed.

Summary

Stadium Sound does not currently conform to WCAG 2.1 Level AA. The most significant, highest-impact gaps — and the order we intend to address them — are:

  1. Make the track grid keyboard-operable (2.1.1, 4.1.2, 2.5.3) — give each track cell a real button element with an accessible name, independent of whether a hotkey is assigned.
  2. Add visible focus styles (2.4.7) — a global focus-visible outline.
  3. Add live-region announcements for state changes (4.1.3) — now-playing state, remote connection status, level/LUFS updates.
  4. Pair color with an icon or text label for state (1.4.1) — playing / monitoring / already-played / clip-warning.
  5. Measure and fix contrast (1.4.3, 1.4.11) across the fixed dark theme.
  6. Provide a keyboard alternative for drag-to-reorder (2.5.1).

Terms Used in This Report

Table 1: Success Criteria, Level A

CriteriaConformanceRemarks
1.1.1 Non-text ContentDoes Not SupportIcon-only controls (e.g., modal close “×”) have no accessible name; only one alt attribute exists in the entire renderer (the logo). Status glyphs (▶, ⚠, ✂, ⠿) carry meaning with no text alternative in most instances.
1.2.1 Audio-only and Video-only (Prerecorded)Not ApplicableThe app plays user-supplied audio clips it does not produce or narrate.
1.2.2 Captions (Prerecorded)Not ApplicableNo vendor-authored synchronized media.
1.2.3 Audio Description or Media Alternative (Prerecorded)Not ApplicableSame as above.
1.3.1 Info and RelationshipsPartially SupportsSome form fields use a <label>, but several inputs associate a label visually only. The primary track grid conveys state through div structure and color, not markup relationships.
1.3.2 Meaningful SequenceNot EvaluatedRequires AT-based verification of read order.
1.3.3 Sensory CharacteristicsNot EvaluatedRequires content-level review beyond this audit's scope.
1.4.1 Use of ColorDoes Not SupportTrack state (playing / monitoring / already played) and level-meter warning zones are conveyed by color alone in most cases, with no consistent icon or text redundancy.
1.4.2 Audio ControlNot ApplicableThe app's entire purpose is user-initiated audio playback; there is no unexpected autoplaying audio outside user action.
2.1.1 KeyboardDoes Not SupportThe primary track-trigger grid is built from unlabeled clickable elements with no tab stop or key handler — a track without a manually assigned hotkey cannot be triggered from the keyboard. Drag-to-reorder has no keyboard equivalent.
2.1.2 No Keyboard TrapNot EvaluatedRequires interactive keyboard-only testing.
2.1.4 Character Key ShortcutsPartially SupportsPer-track hotkeys are user-assigned and user-removable, satisfying the "can be turned off / remapped" allowance, but this has not been verified for every global shortcut.
2.2.1 Timing AdjustableNot ApplicableNo session or content time limits are imposed.
2.2.2 Pause, Stop, HideNot ApplicableThe only continuously updating content (level meters) is essential to the app's core function, an allowed exception.
2.3.1 Three Flashes or Below ThresholdNot ApplicableNo flashing content identified.
2.4.1 Bypass BlocksNot ApplicableSingle-view desktop application; not a multi-block web page with repeated navigation regions.
2.4.2 Page TitledNot EvaluatedWindow/document title not audited.
2.4.3 Focus OrderNot EvaluatedRequires interactive keyboard testing.
2.4.4 Link Purpose (In Context)Not ApplicableNo hyperlink-style content in the application UI.
2.5.1 Pointer GesturesDoes Not SupportReordering tracks relies on drag-and-drop with no single-pointer, non-path-based alternative.
2.5.2 Pointer CancellationNot EvaluatedRequires interactive pointer testing.
2.5.3 Label in NameDoes Not SupportFollows from 1.1.1/4.1.2: many interactive elements have no accessible name at all.
2.5.4 Motion ActuationNot ApplicableNo motion-actuated features.
3.1.1 Language of PageNot Evaluatedlang attribute on the root document not audited.
3.2.1 On FocusNot EvaluatedRequires interactive testing.
3.2.2 On InputNot EvaluatedRequires interactive testing.
3.3.1 Error IdentificationNot EvaluatedForm-validation error presentation not audited.
3.3.2 Labels or InstructionsPartially SupportsMost form fields have adjacent text labels; programmatic association is inconsistent.
4.1.1 ParsingNot EvaluatedNot verified with a markup validator.
4.1.2 Name, Role, ValueDoes Not SupportThe core track grid and several icon-only controls are custom widgets with no ARIA role, accessible name, or state — they are not identifiable as controls to assistive technology.

Table 2: Success Criteria, Level AA

CriteriaConformanceRemarks
1.2.4 Captions (Live)Not ApplicableNo live synchronized media produced by the application.
1.2.5 Audio Description (Prerecorded)Not ApplicableSame rationale as 1.2.1–1.2.3.
1.3.4 OrientationNot ApplicableDesktop application window; not orientation-locked.
1.3.5 Identify Input PurposeNot ApplicableNo common-purpose input fields (name, address, etc.) requiring autofill semantics.
1.4.3 Contrast (Minimum)Not EvaluatedColors are hardcoded (no design-token layer) and have not been measured against the 4.5:1 / 3:1 thresholds. Flagged as a priority for follow-up testing.
1.4.4 Resize TextPartially SupportsA UI Zoom setting (80%–200%) is available and persisted, but most text uses fixed pixel sizing, and behavior at 200% has not been confirmed for clipping/overlap.
1.4.5 Images of TextNot EvaluatedUI text appears to be real text, not raster images, but not specifically audited.
1.4.10 ReflowNot EvaluatedThe track grid and web-remote layouts use fixed-width columns; reflow at 400% zoom / 320px width is a likely risk area and has not been tested.
1.4.11 Non-text ContrastNot EvaluatedNot measured.
1.4.12 Text SpacingNot EvaluatedNot tested against user style-sheet overrides.
1.4.13 Content on Hover or FocusNot EvaluatedTooltip/hover-content behavior not audited.
2.4.5 Multiple WaysNot ApplicableSingle-view desktop application.
2.4.6 Headings and LabelsNot EvaluatedHeading structure not audited.
2.4.7 Focus VisibleDoes Not SupportNo focus-visible styling exists anywhere in the renderer's CSS; keyboard focus relies entirely on whatever unstyled default Chromium applies.
3.1.2 Language of PartsNot ApplicableSingle-language UI.
3.2.3 Consistent NavigationNot ApplicableSingle-view desktop application; no repeated navigation structure across pages.
3.2.4 Consistent IdentificationNot EvaluatedNot specifically audited.
3.3.3 Error SuggestionNot EvaluatedForm-validation messaging not audited.
3.3.4 Error Prevention (Legal, Financial, Data)Not ApplicableNo legal, financial, or data-deletion transactions in the application.
4.1.3 Status MessagesDoes Not SupportNo live regions exist anywhere in the app. Track start/stop, remote connection status, and level/LUFS updates change visually with nothing announced to assistive technology.

This report was drafted from an internal code audit and has not been validated with assistive technology. It will be updated as remediation work lands — check back for the latest version, or open a GitHub issue with questions.