Skip to content

Accessibility and content standards

  • Use one clear h1 per page and preserve heading hierarchy.
  • Every form control must have a visible label or an equivalent accessible name.
  • Interactive controls require keyboard access, visible focus state, and semantic roles.
  • Error messages must be perceivable and tied to fields when applicable.
  • Global setup calls initializeAccessibility() from src/scripts/accessibility.ts in Layout.astro.
  • Authenticated admin menu in layout script uses aria-expanded, aria-haspopup, and keyboard escape handling.
  • Form and interaction patterns should preserve these semantics when extending UI.
  • Prefer concise, task-oriented headings and section intros.
  • Use meaningful link text (avoid “click here”).
  • Keep CTA and navigation labels consistent across pages.
  • Avoid decorative content that carries essential meaning without text alternatives.
  • On validation failure, ensure users can discover the error quickly (inline text and focus management where practical).
  • Avoid trapping focus unless implementing modal/dialog behavior correctly.
  • Keep keyboard order aligned with visual order.
  • Can the page be used end-to-end with keyboard only?
  • Do controls and dynamic UI expose useful names/roles/states?
  • Are heading levels and landmarks coherent for screen-reader navigation?
  • Are validation and failure states announced clearly?