From skillry-frontend-web-design
Use when you need to audit semantic HTML, keyboard navigation, focus, contrast, labels, and screen reader basics.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skillry-frontend-web-design:20-accessibility-auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit a page or component against WCAG 2.2 Level AA. Covers semantic HTML structure, keyboard navigation and focus order, ARIA roles and labels, color contrast ratios, form field labeling, image alt text, and screen reader compatibility signals. Produces specific violation reports with WCAG criterion references and concrete remediation steps.
Audit a page or component against WCAG 2.2 Level AA. Covers semantic HTML structure, keyboard navigation and focus order, ARIA roles and labels, color contrast ratios, form field labeling, image alt text, and screen reader compatibility signals. Produces specific violation reports with WCAG criterion references and concrete remediation steps.
Gather the artifact. Obtain HTML source, a live URL, or a component file. If a URL is available, note whether JavaScript renders the DOM dynamically (React/Vue/Svelte SSR vs. CSR) — dynamic apps require runtime inspection, not just source reading.
Check document structure. Verify one <h1> per page. Confirm heading levels do not skip (no jumping from <h1> to <h3>). Verify <main>, <nav>, <header>, <footer>, and <aside> landmarks are present where appropriate. Flag <div> soup: blocks of interactive content with no landmark wrapping.
Audit keyboard navigation. Trace the expected Tab order through interactive elements. Confirm focus never gets trapped (except intentionally inside an open modal, where it should be trapped). Verify all interactive elements — links, buttons, inputs, custom dropdowns, date pickers — are reachable by Tab and activatable by Enter or Space. Flag any tabindex > 0 values, which create artificial and usually broken tab sequences.
Inspect focus visibility. Confirm focus-visible or equivalent produces a visible outline on every interactive element. A CSS rule like *:focus { outline: none } with no replacement is an immediate WCAG 2.4.7 (Focus Visible) violation.
Evaluate ARIA usage. Flag role attributes that misrepresent the element (e.g., <div role="button"> without tabindex="0" and keyboard handlers). Check that aria-label or aria-labelledby is present on icon-only buttons, dialogs, and landmark regions that need a label. Flag redundant ARIA (e.g., <button role="button">). Verify aria-expanded, aria-haspopup, aria-controls are set and toggled correctly on dropdown triggers.
Check color contrast. For normal text (< 18pt / 14pt bold), the required contrast ratio is 4.5:1 (WCAG 1.4.3). For large text (>= 18pt / 14pt bold), it is 3:1. For UI components and graphical elements, it is 3:1 (WCAG 1.4.11). Check primary text on background, placeholder text, disabled state text (exempt if truly disabled), and button labels. Use exact hex values from the source.
Audit form fields. Every <input>, <select>, and <textarea> must have an associated <label> (via for/id pairing or aria-label). Placeholder text is not a label substitute. Error messages must be programmatically associated with the field via aria-describedby. Required fields must be indicated by more than color alone.
Review images and icons. Every <img> must have alt text. Decorative images must have alt="". Icon fonts or SVGs used as interactive elements must have accessible names. <img> inside a <button> with no other text must have meaningful alt.
Check motion and media. Any animation that runs for more than 5 seconds or auto-starts must be pausable (WCAG 2.2.2). Video content must have captions. Audio must have transcripts.
Simulate screen reader reading order. Read the DOM in source order and confirm it makes sense without CSS. Tables must have <th> with scope attributes. Lists must use <ul>/<ol> + <li>, not styled <div> elements.
<h1> per page; heading levels never skip<main>, <nav>, <header>, <footer> used where appropriatefocus-visible at minimum)tabindex values > 0 in the codebase<input>/<select>/<textarea> has a programmatically associated <label> (not just placeholder)aria-describedbyalt text; decorative images have alt=""aria-label or visually hidden textaria-expanded toggled correctly on accordion/dropdown triggersprefers-reduced-motionoutline: none in a global reset with no replacement — fails WCAG 2.4.7 for every interactive element on the site.<input placeholder="Email"> with no <label> — placeholder disappears on focus, leaving users without context.<div onClick> button: custom clickable <div> without role="button", tabindex="0", or keyboard event handler — invisible to screen readers and keyboard users.<h1> product name, then immediately <h3> section title — assistive technology reads an implied empty <h2>.<a> tags: <a href="/dashboard"><img src="icon.svg"></a> where the image has no alt — screen reader announces "link" with no label.<ul role="navigation"> — <nav> exists for this; the ARIA role on a list creates a conflict.Return a report with:
jest-axe for CI — whichever fits the project.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub fluxonlab/skillry --plugin skillry-frontend-web-design