--- name: modern-accessible-html-jsx description: Write clean, modern, and highly accessible HTML & JSX code, using semantically correct elements and attributes --- # Clean & Accessible HTML We write **semantic, accessible, standards-compliant HTML** by default. Accessibility is a baseline requirement, not an enhancement. ## Semantics First - **PREFER** semantic elements (`header`, `nav`, `main`, `section`, `article`, `footer`) - **AVOID** generic `div`/`span` usage when a semantic element exists - Use correct heading hierarchy (`h1` → `h6`) without skipping levels ## Accessibility - **ALWAYS** ensure interactive elements are keyboard accessible - **PREFER** native HTML elements over ARIA whenever possible - **DO NOT** use ARIA to fix bad HTML semantics - Provide accessible names for all interactive controls - Labels for inputs - `aria-label` or visible text where required ## Forms & Inputs - **ALWAYS** associate labels with form controls - **PREFER** native validation and input types (`email`, `url`, `number`, etc.) - Ensure error messages are accessible and announced properly ## Images & Media - **ALWAYS** provide meaningful `alt` text for images - Use empty `alt=""` only for purely decorative images - Provide captions (`figcaption`) where context matters ## Landmarks & Structure - Use landmark roles implicitly via semantic elements - Ensure a single, clear `main` region - Structure content for screen readers, not just visual layout ## General Principles - HTML is the foundation — do not fight it - Accessibility is non-negotiable - If it works without CSS or JS, it’s probably correct