···180180| rose-400 | `#fb7185` | Links and buttons both | Could conflict with error red |
181181| teal-400 | `#2dd4bf` | Warmer cyan alternative | Still cool-toned |
182182183183+## Automated Accessibility Testing
184184+185185+Run `npm run test:a11y` to check for WCAG 2.1 AA violations in both light and dark mode.
186186+187187+Tests cover: home page, card search, card detail pages. Uses axe-core via Playwright.
188188+189189+**Playwright version must match nix flake browsers.** The flake provides `playwright-driver.browsers` and sets `PLAYWRIGHT_BROWSERS_PATH`. If you see "Executable doesn't exist" errors, the npm `playwright` version doesn't match the nix browser version. Check browser versions:
190190+- Nix: `ls $PLAYWRIGHT_BROWSERS_PATH` (e.g., `chromium_headless_shell-1200`)
191191+- NPM: error message shows expected version (e.g., `chromium_headless_shell-1181`)
192192+193193+Update npm playwright to match: `npm install playwright@<version> --save-dev`
194194+183195## References
184196185197- [Discord Color Palette](https://www.color-hex.com/color-palette/114089)
+2-1
.claude/settings.local.json
···6666 "Bash(npm run build:lexicons:*)",
6767 "Bash(npm run lexicons:lint:*)",
6868 "Bash(npm run lexicons:all:*)",
6969- "Bash(goat lex:*)"
6969+ "Bash(goat lex:*)",
7070+ "Bash(npm run test:a11y:*)"
7071 ],
7172 "deny": [],
7273 "ask": []
+4
.gitignore
···1919.cache/
20202121tsconfig.tsbuildinfo
2222+2323+# Playwright test outputs
2424+test-results/
2525+playwright-report/
···142142### Integration tests for worker
143143- Worker code tested via mocked Comlink
144144- Would benefit from actual worker instantiation tests
145145+146146+---
147147+148148+## Accessibility (a11y)
149149+150150+Run `npm run test:a11y` to check. Currently failing on Card Search, Profile, Deck pages.
151151+152152+### color-contrast: cyan links on gray backgrounds
153153+- **Location**: Search primer (`src/components/SearchPrimer.tsx`)
154154+- **Issue**: cyan-600 (#007595) on gray-200 (#e5e7eb) = 4.26:1, need 4.5:1 for AA
155155+- **Fix**: Either darken cyan to ~cyan-700 or lighten background
156156+157157+### link-in-text-block: links not distinguishable
158158+- **Location**: Inline links in search primer, profile bio, etc.
159159+- **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
161161+162162+### select-name: dropdowns missing accessible names
163163+- **Location**: Sort dropdowns on card search, deck page
164164+- **Issue**: `<select>` elements have no `aria-label` or associated `<label>`
165165+- **Fix**: Add `aria-label="Sort by"` or wrap with `<label>`