fix(radio): keyboard a11y — skip link, focus-visible, mobile-menu

human-flow P0-P1 fixes for radio.azcomputerguru.com:
- K1: skip-to-content link (first tab stop) + id/tabindex on <main>.
- K2: global :focus-visible ring (accent outline) across links, buttons,
  inputs and player controls; reveal the seek-bar handle on focus.
- K3: mobile menu a11y — aria-expanded/aria-controls, Escape closes and
  restores focus to the toggle, focus moves to first link on open.
All token-based, no emojis. Not built (node_modules absent on this host).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-05 17:42:46 -07:00
parent f98b111193
commit 47496ac432
3 changed files with 84 additions and 6 deletions

View File

@@ -31,6 +31,40 @@ a:hover {
color: var(--color-accent-hover);
}
/* Global keyboard focus styles — strong, consistent ring on the dark theme.
Uses outline so it layers over any existing box-shadow focus rings. */
a:focus-visible,
button:focus-visible,
[tabindex]:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
border-radius: var(--radius-sm);
}
/* Skip to content link — keyboard-reachable first tab stop, hidden until focused */
.skip-link {
position: absolute;
left: -9999px;
top: 0;
z-index: 1001;
padding: var(--space-3) var(--space-6);
background: var(--color-bg-secondary);
color: var(--color-accent);
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
font-size: var(--text-sm);
font-weight: 600;
}
.skip-link:focus {
left: var(--space-4);
top: var(--space-4);
outline: 2px solid var(--color-accent);
outline-offset: 2px;
}
img, video {
max-width: 100%;
height: auto;