···147147148148## Accessibility (a11y)
149149150150-Run `npm run test:a11y` to check. Currently 12/13 tests failing.
150150+Run `npm run test:a11y` to check. Currently 11/13 tests passing.
151151152152-### Structural / Landmarks
152152+### Known Exception: Deck page muted mana stats
153153154154-#### 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
154154+The deck page intentionally uses low-contrast text (gray-500 on zinc-900) for mana colors not present in the deck. This fails color-contrast checks but is a deliberate design choice to de-emphasize irrelevant colors. The `target-size` rule is also disabled for deck stats (compact layout is intentional).
159155160160-#### 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
156156+### Fixed Issues (January 2025)
165157166166-### Contrast / Visual
167167-168168-#### color-contrast: cyan links on gray backgrounds
169169-- **Location**: Search primer (`src/components/SearchPrimer.tsx`), Home page
170170-- **Issue**: cyan-600 (#007595) on gray-200 (#e5e7eb) = 4.26:1, need 4.5:1 for AA
171171-- **Fix**: Either darken cyan to ~cyan-700 or lighten background
172172-173173-#### link-in-text-block: links not distinguishable
174174-- **Location**: Inline links in search primer, profile bio, etc.
175175-- **Issue**: Links only distinguished by color, need underline or 3:1 contrast vs surrounding text
176176-- **Fix**: Add `underline` class to inline links (not just `hover:underline`)
177177-178178-### Form Controls
179179-180180-#### select-name: dropdowns missing accessible names
181181-- **Location**: Sort dropdowns on card search, deck page
182182-- **Issue**: `<select>` elements have no `aria-label` or associated `<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
158158+- **landmark-one-main**: Added `<main>` wrapper in root layout
159159+- **region**: Content now inside proper landmarks
160160+- **color-contrast (cyan links)**: Darkened to cyan-800 in SearchPrimer, cyan-700 for active states
161161+- **link-in-text-block**: Added underlines to inline links
162162+- **select-name**: Added aria-labels to all dropdowns
163163+- **heading-order**: Fixed SearchPrimer to use h2/h3 instead of h3/h4
164164+- **landmark-unique**: Added aria-label to Profile page nav
165165+- **scrollable-region-focusable**: Added tabIndex to GoldfishView scroll area