feat(web): responsive design, accessibility, and UI polish (ATB-32) (#49)
* docs: add design doc for responsive, accessibility, and UI polish (ATB-32)
Covers CSS completion for ~20 unstyled classes, mobile-first responsive
breakpoints, WCAG AA accessibility baseline, error/loading/empty state
audit, and visual polish. Deferred axe-core testing to ATB-34.
* docs: add implementation plan for responsive/a11y/polish (ATB-32)
16-task plan covering CSS completion, responsive breakpoints, accessibility
(skip link, ARIA, semantic HTML), 404 page, and visual polish. TDD for
JSX changes, CSS-only for styling tasks.
* style(web): add CSS for forms, login form, char counter, and success banner (ATB-32)
* style(web): add CSS for post cards, breadcrumbs, topic rows, and locked banner (ATB-32)
* style(web): enhance error, empty, and loading state CSS with error page styles (ATB-32)
* style(web): add mobile-first responsive breakpoints with token overrides (ATB-32)
* feat(web): add skip link, favicon, focus styles, and mobile hamburger nav (ATB-32)
- Add skip-to-content link as first body element with off-screen positioning
- Add main landmark id="main-content" for skip link target
- Add :focus-visible outline styles for keyboard navigation
- Create SVG favicon with atBB branding
- Extract NavContent helper component for DRY desktop/mobile nav
- Add CSS-only hamburger menu using details/summary for mobile
- Add desktop-nav / mobile-nav with responsive show/hide
- Add tests for all new accessibility and mobile nav features
* feat(web): add ARIA attributes to forms, dialog, and live regions (ATB-32)
* feat(web): convert breadcrumbs to nav/ol, post cards to article elements (ATB-32)
* feat(web): add 404 page with neobrutal styling and catch-all route (ATB-32)
* style(web): add smooth transitions and hover polish to interactive elements (ATB-32)
* docs: mark Phase 4 complete and update ATB-32 design status
All Phase 4 web UI items now tracked with completion notes:
- Compose (ATB-30), Login (ATB-30), Admin panel (ATB-24)
- Responsive design (ATB-32) — final done gate for Phase 4
- Category view deferred (boards hierarchy replaced it)
* fix(web): address code review feedback on ATB-32 PR
- Add production-path tests for 404 page (auth, unauth, AppView down)
- Replace aria-live on reply-list with sr-only status element using
hx-swap-oob to announce reply count instead of full card content
- Re-throw programming errors in getSession/getSessionWithPermissions
catch blocks (import isProgrammingError from errors.ts)
- Differentiate nav aria-labels (Main navigation vs Mobile navigation)
- Harden test assertions: skip link position check, nav aria-label
coverage, exact count assertions for duplication detection