# UX-003 Kanban theme-state verification Updated: 2026-08-10 ## Confirmed execution path - The board previously used `theme.palette.grey[100]` and `[300]`. Under the CSS-variable theme these resolved to the static light palette, producing white destination columns in dark mode. - The initial mocked dark-browser regression failed with the computed column background `rgb(245, 242, 250)`. Evidence: `docs/audits/evidence/ux-003-kanban-dark-before.png`. - Native drag updated only after a successful owner-scoped status API call, but had no visible target state, keyboard pickup/drop model or failure feedback. ## Implemented behavior - Columns, counters, status tones and pills now use live shared theme variables with fallback only for isolated unit-test themes. - Empty, filled, valid, active and invalid columns have explicit state; invalid custom-status columns cannot accept a drop. - Cards expose selected/picked-up state, visible hover/focus, a named status button, Space pickup/cancel, Escape cancel and Enter/Space drop on focused valid columns. - A polite live region announces pickup, cancel, success, invalid target and failure. Failed API moves retain the card and show a visible error. - The board owns horizontal mobile scrolling; the application main flex child can shrink. The live region uses literal one-pixel dimensions and no longer adds eight pixels of document overflow. - The invalid kebab-case `-webkit-overflow-scrolling` style was corrected to React's `WebkitOverflowScrolling` property. - Normal E2E runs no longer rewrite committed audit screenshots; evidence refresh requires `UPDATE_AUDIT_EVIDENCE=1`. ## Verification - Focused component tests: 7/7 for grouped/empty/filled, pointer target, invalid target, keyboard move, load/error/retry, move failure and named menu behavior. - Full frontend: 50 suites, 204/204 tests. - Production frontend build and TypeScript: pass. - Complete Playwright: 6/6. Kanban browser journey covers 1440 dark, 768 light, 375 mobile, visible hover, native pointer drag, keyboard move, invalid target and page-level containment with mocked data/API. - After evidence: `docs/audits/evidence/ux-003-kanban-dark-after.png`. - Commits: `fb6f17e`, `4e5ce0c`. ## Remaining gates - Production board smoke is not authorized/available. - Browser data and status updates were synthetic/mocked. Authorization remains covered by existing API tests, not this UI package. - No native screen-reader/device laboratory was available; semantics and live announcements were inspected/tested in Chromium and component DOM.