You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of VforVitorio#889 (Fable-5 a11y audit 2026-07-05, WCAG 2.2 AA). Sprint 1 — Keyboard reachability (the P0 core). The primary data surfaces are mouse-only.
S1.1a11y(explorer): browse table rows keyboard-operable[M][P0] — the desktop browse table over 12k laws is clickable <tr onClick={navigate}> with no tabIndex/role/key handler (ExplorerPage.tsx:571-576) → a keyboard user cannot open a single law from it; search-mode rows already do it right (role="button" tabIndex=0+Enter, :444-449). AC: make the law name a real <a href="/laws/{id}"> (row click stays convenience) or give the row role="link" tabIndex=0 + Enter/Space. WCAG 2.1.1. (P0-1)
S1.2a11y(ui): Card renders a button/anchor when clickable[S] — Home "Recent laws" are clickable <div>s (Card hoverable onClick → plain div, HomePage.tsx:180, ui/Card.tsx:8-21). AC: Card renders <button>/<a> when onClick/href passed. WCAG 2.1.1. (P1-13)
S1.3a11y(explorer): keyboard path for #tag autocomplete[S] — suggestions bind onMouseDown only, no Arrow/Enter, list disappears on blur (ExplorerPage.tsx:305-325). AC: Arrow-select + Enter in the input onKeyDown, role="listbox"/aria-activedescendant. WCAG 2.1.1/4.1.2. (P1-4)
S1.4a11y(chat): thread drawer inert when closed (mobile)[S] — hidden via -translate-x-full only (ChatPage.tsx:266-272) → off-screen but focusable, keyboard users tab through dozens of invisible thread buttons. AC: inert/aria-hidden+invisible when closed below md. WCAG 2.4.3/2.1.1. (P1-2)
S1.5a11y(shell): single-key "g x" shortcut disable setting + Space on role=button rows[S] — single-char go-to shortcuts have no off/remap (lib/hotkeys.ts:49-70; WCAG 2.1.4 requires disable/remap/focus-only); role=button search rows miss Space (ExplorerPage.tsx:449). AC: Settings toggle "atajos de una tecla" gating useGoToHotkey; add ' ' to the handler. WCAG 2.1.4/2.1.1. (P2-5, P3)
Full detail: memory/fable_a11y_audit_2026-07-05.md.
Part of VforVitorio#889 (Fable-5 a11y audit 2026-07-05, WCAG 2.2 AA). Sprint 1 — Keyboard reachability (the P0 core). The primary data surfaces are mouse-only.
a11y(explorer): browse table rows keyboard-operable[M] [P0] — the desktop browse table over 12k laws is clickable<tr onClick={navigate}>with notabIndex/role/key handler (ExplorerPage.tsx:571-576) → a keyboard user cannot open a single law from it; search-mode rows already do it right (role="button" tabIndex=0+Enter,:444-449). AC: make the law name a real<a href="/laws/{id}">(row click stays convenience) or give the rowrole="link" tabIndex=0+ Enter/Space. WCAG 2.1.1. (P0-1)a11y(ui): Card renders a button/anchor when clickable[S] — Home "Recent laws" are clickable<div>s (Card hoverable onClick→ plain div,HomePage.tsx:180,ui/Card.tsx:8-21). AC:Cardrenders<button>/<a>whenonClick/hrefpassed. WCAG 2.1.1. (P1-13)a11y(explorer): keyboard path for #tag autocomplete[S] — suggestions bindonMouseDownonly, no Arrow/Enter, list disappears on blur (ExplorerPage.tsx:305-325). AC: Arrow-select + Enter in the inputonKeyDown,role="listbox"/aria-activedescendant. WCAG 2.1.1/4.1.2. (P1-4)a11y(chat): thread drawer inert when closed (mobile)[S] — hidden via-translate-x-fullonly (ChatPage.tsx:266-272) → off-screen but focusable, keyboard users tab through dozens of invisible thread buttons. AC:inert/aria-hidden+invisiblewhen closed belowmd. WCAG 2.4.3/2.1.1. (P1-2)a11y(shell): single-key "g x" shortcut disable setting + Space on role=button rows[S] — single-char go-to shortcuts have no off/remap (lib/hotkeys.ts:49-70; WCAG 2.1.4 requires disable/remap/focus-only); role=button search rows miss Space (ExplorerPage.tsx:449). AC: Settings toggle "atajos de una tecla" gatinguseGoToHotkey; add' 'to the handler. WCAG 2.1.4/2.1.1. (P2-5, P3)Full detail:
memory/fable_a11y_audit_2026-07-05.md.Upstream: VforVitorio#890