Skip to content

Accessibility: labels, ARIA tab roles, modal keyboard operability, contrast (#402)#414

Merged
maboa merged 2 commits into
mainfrom
402-accessibility
Jul 22, 2026
Merged

Accessibility: labels, ARIA tab roles, modal keyboard operability, contrast (#402)#414
maboa merged 2 commits into
mainfrom
402-accessibility

Conversation

@maboa

@maboa maboa commented Jul 22, 2026

Copy link
Copy Markdown
Member

Addresses the Lighthouse findings in #402 (items 1–4; item 5, the manual screen-reader pass, stays open).

Form labels

  • All five engines' media file inputs: aria-label (replacing a useless title="").
  • Recents load select: aria-label. Model/Language headings converted from bare spans to real <label for> (Deepgram, AssemblyAI, Parakeet-HF).
  • Import dialogs (export.js): all six field captions converted to <label for>.

ARIA tab roles

  • Removed role="tablist|tab|tabpanel" from the Local/Cloud switch and engine tabs — label/input don't allow role="tab", and DaisyUI's interleaved panels can't satisfy tablist's required structure. Styling is class-based (.tab:checked+.tab-content), so nothing visual changes; the radios' native semantics + aria-labels announce correctly.
  • Bonus fix: the mobile tab-shrink CSS still targeted the old my_tabs_2 group (dead since the Local/Cloud split) — now targets local_tabs/cloud_tabs.

Modal toggles + keyboard operability

  • All 13 modal-toggle checkboxes: aria-hidden + tabindex="-1" (they're opacity-0 CSS mechanisms that were focusable-but-invisible, flagged as unlabeled/multiply-labelled). Every ✕ gets aria-label="Close".
  • New js/a11y.js: the visible label-buttons become the keyboard surface — tabindex="0", Enter/Space activation, :focus-visible ring, MutationObserver for late-injected dialogs. Modals are now genuinely keyboard-operable (previously only via the invisible checkbox).

Contrast

  • Recents "No files saved." placeholder: opacity .55 (≈2.9:1) → .75 (≈5.7:1). Measured live; the file items themselves already passed.

Verification

maboa added 2 commits July 11, 2026 18:47
Belongs with 9d8867e — the spec change was left unstaged when that commit
staged only editor-core.js.
…ntrast (#402)

Form labels:
- media file inputs (all five engines): drop title="", add aria-label
- Recents load select: aria-label; Model/Language span headings become real
  <label for> associations (deepgram, assemblyai, parakeet-hf)
- import dialogs (export.js): the six span captions become <label for>

ARIA tab roles:
- remove role="tablist|tab|tabpanel" from the Local/Cloud switch and engine
  tabs — label/input don't allow role="tab" and the interleaved panels can't
  satisfy tablist's required structure; DaisyUI pairs by class so styling is
  unaffected, and the radios' native semantics (with aria-labels) announce
  correctly
- fix the mobile tab-shrink CSS still targeting the old my_tabs_2 group name
  (dead since the Local/Cloud split) and the [role="tablist"] selector

Modal toggles:
- all thirteen modal-toggle checkboxes get aria-hidden + tabindex=-1 (they are
  opacity-0 CSS mechanisms that were focusable-but-invisible and flagged as
  unlabeled / multiply-labelled form fields); every ✕ gets aria-label="Close"
- new js/a11y.js makes the visible label-buttons the keyboard surface instead:
  tabindex=0 + Enter/Space activation (MutationObserver covers late-injected
  dialogs), with a :focus-visible ring — modals are now keyboard-operable,
  which they previously weren't except via the invisible checkbox

Contrast:
- the Recents "No files saved." placeholder was opacity .55 (≈2.9:1 composited);
  raised to .75 (≈5.7:1). The file items themselves already passed.

Verification: __TEST__/e2e/a11y.spec.mjs runs axe-core against the #402 rule
set on the default view and transcribe modal, plus a keyboard-operability
check; axe-core added as a devDependency.
@maboa maboa added enhancement New feature or request ux Improves the user experience labels Jul 22, 2026
@maboa
maboa merged commit 3c9345a into main Jul 22, 2026
1 check passed
@maboa
maboa deleted the 402-accessibility branch July 22, 2026 17:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request ux Improves the user experience

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant