···147147148148## Accessibility (a11y)
149149150150-Run `npm run test:a11y` to check. Currently failing on Card Search, Profile, Deck pages.
150150+Run `npm run test:a11y` to check. Currently 12/13 tests failing.
151151+152152+### Structural / Landmarks
153153+154154+#### landmark-one-main: Missing main landmark
155155+- **Location**: Card pages, Profile, Deck pages
156156+- **Issue**: Document should have exactly one `<main>` landmark
157157+- **Fix**: Wrap primary content in `<main>` element in route layouts
158158+- **Pages affected**: Card detail, Profile, Deck
151159152152-### color-contrast: cyan links on gray backgrounds
153153-- **Location**: Search primer (`src/components/SearchPrimer.tsx`)
160160+#### region: Content outside landmarks
161161+- **Location**: All pages
162162+- **Issue**: Page content not contained by landmarks (`<header>`, `<main>`, `<nav>`, `<footer>`, etc.)
163163+- **Fix**: Ensure all visible content is inside semantic landmark elements
164164+- **Selectors flagged**: `.text-red-900`, `p`, various buttons
165165+166166+### Contrast / Visual
167167+168168+#### color-contrast: cyan links on gray backgrounds
169169+- **Location**: Search primer (`src/components/SearchPrimer.tsx`), Home page
154170- **Issue**: cyan-600 (#007595) on gray-200 (#e5e7eb) = 4.26:1, need 4.5:1 for AA
155171- **Fix**: Either darken cyan to ~cyan-700 or lighten background
156172157157-### link-in-text-block: links not distinguishable
173173+#### link-in-text-block: links not distinguishable
158174- **Location**: Inline links in search primer, profile bio, etc.
159175- **Issue**: Links only distinguished by color, need underline or 3:1 contrast vs surrounding text
160160-- **Fix**: Add `hover:underline` โ `underline hover:no-underline` or ensure sufficient contrast
176176+- **Fix**: Add `underline` class to inline links (not just `hover:underline`)
177177+178178+### Form Controls
161179162162-### select-name: dropdowns missing accessible names
180180+#### select-name: dropdowns missing accessible names
163181- **Location**: Sort dropdowns on card search, deck page
164182- **Issue**: `<select>` elements have no `aria-label` or associated `<label>`
165165-- **Fix**: Add `aria-label="Sort by"` or wrap with `<label>`
183183+- **Fix**: Add `aria-label="Sort by"` or wrap with visible `<label>`
184184+185185+### Keyboard / Focus
186186+187187+#### scrollable-region-focusable: Scrollable areas not keyboard accessible
188188+- **Location**: Profile page, Deck page (horizontal scroll areas)
189189+- **Issue**: Scrollable regions without focusable content can't be scrolled via keyboard
190190+- **Fix**: Add `tabIndex={0}` to scrollable containers, or ensure they contain focusable elements