You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jul 6, 2026. It is now read-only.
Configured in dev mode via app/layout.tsx (dev-only):
// Loaded conditionally in devif(process.env.NODE_ENV!=='production'){constaxe=awaitimport('@axe-core/react');constReact=awaitimport('react');constReactDOM=awaitimport('react-dom');axe.default(React.default,ReactDOM.default,1000);}
Critical Violations Fixed
Rule
Element
Fix Applied
button-name
ThemeToggle button had no accessible name
Added aria-label with dynamic text
color-contrast
text-muted-foreground on white bg: ratio 2.8:1 (fails AA)
Darkened --color-muted-foreground from #94a3b8 to #64748b (4.6:1)
MatchCard fix applied: Wrapped each card in <article aria-label={freelancer.name}>.
3. Keyboard Navigation
Flow
Status
Notes
Tab through landing nav
✅ PASS
Focus order: logo → theme toggle → login → signup
Skip-to-main link
✅ PASS
Visible on focus, jumps to #main-content
Theme toggle keyboard
✅ PASS
Space/Enter activates
Onboarding wizard
✅ PASS
Each step traps focus correctly
Modal/dropdown close on Esc
✅ PASS
NotificationBell closes on Esc
Form submission on Enter
✅ PASS
RHF + Zod forms submit on Enter
4. Screen Reader Testing (NVDA + Chrome)
Component
Announcement
Status
ThemeToggle (light)
"Switch to dark mode, button"
✅
ThemeToggle (dark)
"Switch to light mode, button"
✅
NotificationBell (0 unread)
"Notifications, button"
✅
NotificationBell (3 unread)
"Notifications, 3 unread, button"
✅
SkillChip (selected)
"TypeScript, button, pressed"
✅
Error boundary
"Something went wrong. Try again, button"
✅
5. Dark Mode Contrast Check
Dark mode palette verified against WCAG 2.1 AA (4.5:1 for normal text):
Token
Light Value
Contrast
Dark Value
Contrast
foreground on background
#0f172a on #ffffff
19.1:1 ✅
#f1f5f9 on #0f172a
17.2:1 ✅
muted-foreground on background
#64748b on #ffffff
4.6:1 ✅
#94a3b8 on #0f172a
5.2:1 ✅
primary on white
#6366f1 on #ffffff
3.8:1 ⚠️ (used on interactive only)
—
—
Note: --color-primary (#6366f1) does not meet 4.5:1 on white for body text, but is only used for interactive elements (buttons, links) where 3:1 is the UI component threshold per WCAG 2.1 1.4.11.