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.
⚠
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:
- 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.
- Add visible focus styles (2.4.7) — a global focus-visible outline.
- Add live-region announcements for state changes (4.1.3) — now-playing state, remote connection status, level/LUFS updates.
- Pair color with an icon or text label for state (1.4.1) — playing / monitoring / already-played / clip-warning.
- Measure and fix contrast (1.4.3, 1.4.11) across the fixed dark theme.
- Provide a keyboard alternative for drag-to-reorder (2.5.1).
Terms Used in This Report
- ● Supports — meets the criterion without known defects
- ● Partially Supports — some functionality does not meet it
- ● Does Not Support — the majority of functionality does not meet it
- ● Not Applicable — the criterion is not relevant to this product
- ● Not Evaluated — requires AT or measurement-based testing we haven't run yet
Table 1: Success Criteria, Level A
| Criteria | Conformance | Remarks |
|---|---|---|
| 1.1.1 Non-text Content | Does Not Support | Icon-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 Applicable | The app plays user-supplied audio clips it does not produce or narrate. |
| 1.2.2 Captions (Prerecorded) | Not Applicable | No vendor-authored synchronized media. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) | Not Applicable | Same as above. |
| 1.3.1 Info and Relationships | Partially Supports | Some 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 Sequence | Not Evaluated | Requires AT-based verification of read order. |
| 1.3.3 Sensory Characteristics | Not Evaluated | Requires content-level review beyond this audit's scope. |
| 1.4.1 Use of Color | Does Not Support | Track 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 Control | Not Applicable | The app's entire purpose is user-initiated audio playback; there is no unexpected autoplaying audio outside user action. |
| 2.1.1 Keyboard | Does Not Support | The 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 Trap | Not Evaluated | Requires interactive keyboard-only testing. |
| 2.1.4 Character Key Shortcuts | Partially Supports | Per-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 Adjustable | Not Applicable | No session or content time limits are imposed. |
| 2.2.2 Pause, Stop, Hide | Not Applicable | The only continuously updating content (level meters) is essential to the app's core function, an allowed exception. |
| 2.3.1 Three Flashes or Below Threshold | Not Applicable | No flashing content identified. |
| 2.4.1 Bypass Blocks | Not Applicable | Single-view desktop application; not a multi-block web page with repeated navigation regions. |
| 2.4.2 Page Titled | Not Evaluated | Window/document title not audited. |
| 2.4.3 Focus Order | Not Evaluated | Requires interactive keyboard testing. |
| 2.4.4 Link Purpose (In Context) | Not Applicable | No hyperlink-style content in the application UI. |
| 2.5.1 Pointer Gestures | Does Not Support | Reordering tracks relies on drag-and-drop with no single-pointer, non-path-based alternative. |
| 2.5.2 Pointer Cancellation | Not Evaluated | Requires interactive pointer testing. |
| 2.5.3 Label in Name | Does Not Support | Follows from 1.1.1/4.1.2: many interactive elements have no accessible name at all. |
| 2.5.4 Motion Actuation | Not Applicable | No motion-actuated features. |
| 3.1.1 Language of Page | Not Evaluated | lang attribute on the root document not audited. |
| 3.2.1 On Focus | Not Evaluated | Requires interactive testing. |
| 3.2.2 On Input | Not Evaluated | Requires interactive testing. |
| 3.3.1 Error Identification | Not Evaluated | Form-validation error presentation not audited. |
| 3.3.2 Labels or Instructions | Partially Supports | Most form fields have adjacent text labels; programmatic association is inconsistent. |
| 4.1.1 Parsing | Not Evaluated | Not verified with a markup validator. |
| 4.1.2 Name, Role, Value | Does Not Support | The 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
| Criteria | Conformance | Remarks |
|---|---|---|
| 1.2.4 Captions (Live) | Not Applicable | No live synchronized media produced by the application. |
| 1.2.5 Audio Description (Prerecorded) | Not Applicable | Same rationale as 1.2.1–1.2.3. |
| 1.3.4 Orientation | Not Applicable | Desktop application window; not orientation-locked. |
| 1.3.5 Identify Input Purpose | Not Applicable | No common-purpose input fields (name, address, etc.) requiring autofill semantics. |
| 1.4.3 Contrast (Minimum) | Not Evaluated | Colors 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 Text | Partially Supports | A 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 Text | Not Evaluated | UI text appears to be real text, not raster images, but not specifically audited. |
| 1.4.10 Reflow | Not Evaluated | The 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 Contrast | Not Evaluated | Not measured. |
| 1.4.12 Text Spacing | Not Evaluated | Not tested against user style-sheet overrides. |
| 1.4.13 Content on Hover or Focus | Not Evaluated | Tooltip/hover-content behavior not audited. |
| 2.4.5 Multiple Ways | Not Applicable | Single-view desktop application. |
| 2.4.6 Headings and Labels | Not Evaluated | Heading structure not audited. |
| 2.4.7 Focus Visible | Does Not Support | No 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 Parts | Not Applicable | Single-language UI. |
| 3.2.3 Consistent Navigation | Not Applicable | Single-view desktop application; no repeated navigation structure across pages. |
| 3.2.4 Consistent Identification | Not Evaluated | Not specifically audited. |
| 3.3.3 Error Suggestion | Not Evaluated | Form-validation messaging not audited. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | Not Applicable | No legal, financial, or data-deletion transactions in the application. |
| 4.1.3 Status Messages | Does Not Support | No 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.