How this site supports keyboard users, screen readers, and WCAG-oriented practices.
- Skip-to-main link (visible on focus)
- Global focus-visible styles (yellow outline)
- Semantic landmarks:
<main>,<nav>,<footer> .sr-onlyutility for screen-reader-only text
aria-labelon each outbound link- Decorative SVGs marked
aria-hidden="true" - Navigation region with
aria-label="Social media links"
- Honeypot field with
aria-hidden="true"andtabindex="-1" - Associated
<label>for the message field
- Loading state:
role="status",aria-live="polite" - Grid items: keyboard activation (Enter/Space), descriptive
aria-label - Modal:
role="dialog",aria-modal="true", Escape to close - Arrow keys navigate between images in the modal
- Focus restored to the triggering element on close
- Close button with
aria-label
- Text selection enabled on readable content; disabled on buttons where appropriate
- Touch devices: cursor follower hidden (no misleading pointer UI)
- Keyboard — Tab through nav, gallery, modal, and form; confirm focus rings and skip link.
- Screen reader — NVDA, JAWS, or VoiceOver; verify link names and loading announcements.
- Automated — axe DevTools, WAVE, or Lighthouse accessibility audit.
prefers-reduced-motionfor rain, splash, and gallery animations- Verify color contrast meets WCAG AA (4.5:1 for body text)
- Ensure touch targets are at least 44×44 px
- Accessible error messaging if client-side validation is added