{"id":"l-a11y-1-3","courseId":"web-accessibility","lang":"en","kind":"lesson","summary":"Read WCAG 2.2 the way auditors do, apply the six success criteria new at levels A and AA, and know which laws point to it in 2026.","html":"<p>“Is it accessible?” is a question with no answer until you agree on what accessible means. For web content, the agreed answer is the <strong>Web Content Accessibility Guidelines (WCAG)</strong>, published by the W3C. Laws in Europe, the US and many other countries point to it, and audit reports are written in its language. You don’t need to memorise it, but you do need to read it fluently.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">How WCAG is organised</h2>\n<p>WCAG has four layers, from broad to testable:</p>\n<ol>\n<li><strong>Four principles</strong>, remembered as <strong>POUR</strong>. Content must be <strong>Perceivable</strong> (users can sense it), <strong>Operable</strong> (users can work the controls), <strong>Understandable</strong> (users can make sense of it and predict it), and <strong>Robust</strong> (it works with current and future assistive technology).</li>\n<li><strong>13 guidelines</strong> under those principles, such as 1.1 Text Alternatives or 2.1 Keyboard Accessible.</li>\n<li><strong>Success criteria</strong> under each guideline: the testable rules. Each has a number, a name and a level: <strong>A</strong>, <strong>AA</strong> or <strong>AAA</strong>. For example, “1.4.3 Contrast (Minimum), AA”.</li>\n<li><strong>Understanding documents and techniques</strong> that explain intent and show known ways to pass or fail.</li>\n</ol>\n<p>Conformance is claimed at a level, and each level includes the ones below it. <strong>Level AA</strong> is the target used by nearly every law and company policy, and it is the target for Ticketly. W3C itself advises against requiring AAA for whole sites, because some AAA criteria can’t be met for all kinds of content.</p>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">Tip</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Read the Understanding pages</span></p>\n<p>The success criterion text is legal-style and terse. Each criterion links to an “Understanding” page that explains who it helps, with examples. When you are unsure whether something fails, that page usually settles it.</p>\n</aside>\n<h2 id=\"sec-2\" tabindex=\"-1\">What changed in 2.2</h2>\n<p>WCAG 2.0 came out in 2008, 2.1 in 2018 and <strong>2.2 in October 2023</strong>. Each version is backwards compatible: a page that meets 2.2 also meets 2.1 and 2.0. Version 2.2 removed one criterion, 4.1.1 Parsing, because modern browsers handle broken markup consistently. It added nine. Six are at level A or AA, and every one of them catches a real Ticketly bug:</p>\n<div class=\"table-wrap\" role=\"region\" aria-label=\"Scrollable table\" tabindex=\"0\"><table><thead>\n<tr>\n<th>Criterion</th>\n<th>Level</th>\n<th>Ticketly today</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>2.4.11 Focus Not Obscured (Minimum)</td>\n<td>AA</td>\n<td>The sticky cookie banner hides focused links at the bottom of the screen.</td>\n</tr>\n<tr>\n<td>2.5.7 Dragging Movements</td>\n<td>AA</td>\n<td>The price-range slider only works by dragging.</td>\n</tr>\n<tr>\n<td>2.5.8 Target Size (Minimum)</td>\n<td>AA</td>\n<td>The ticket quantity “−” and “+” buttons are 16 px squares, side by side.</td>\n</tr>\n<tr>\n<td>3.2.6 Consistent Help</td>\n<td>A</td>\n<td>The “Contact us” link moves between pages.</td>\n</tr>\n<tr>\n<td>3.3.7 Redundant Entry</td>\n<td>A</td>\n<td>Checkout asks for the email address again on step 3.</td>\n</tr>\n<tr>\n<td>3.3.8 Accessible Authentication (Minimum)</td>\n<td>AA</td>\n<td>The account password field blocks paste.</td>\n</tr>\n</tbody>\n</table></div><p><strong>Target size</strong> deserves a closer look because it is easy to measure. A pointer target must be at least <strong>24 by 24 CSS pixels</strong>, unless it has enough spacing (a 24 px circle centred on it doesn’t overlap another target), an equivalent control elsewhere meets the size, it sits inline in a sentence, its size is set by the browser, or that exact presentation is essential (a legally required form, say). Making Ticketly’s quantity buttons 24 px squares, or spacing them apart, fixes it:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"css\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">ticketly/styles.css</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">.qty</span><span style=\"color:#116329;--shiki-dark:#7EE787\"> button</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> {</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  min-inline-size</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">24</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">px</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">;</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  min-block-size</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">24</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">px</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">;</span></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p><strong>Accessible authentication</strong> is the one that surprises teams. It says login can’t depend on a “cognitive function test”, such as remembering a password or transcribing a code, unless there is an alternative or a mechanism to help. Allowing paste and autofill so password managers work is usually enough. Blocking paste on a password field fails it.</p>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">Common mistake</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Treating WCAG as a checklist you run once</span></p>\n<p>Teams often audit before launch, fix the report and move on. Six months later new components have reintroduced every problem. WCAG describes the state of a page at a moment in time; keeping that state requires the habits you will build in <a href=\"/lesson/web-accessibility/l-a11y-5-3\">Auditing a Page and Building an Accessible Team</a>.</p>\n</aside>\n<h2 id=\"sec-3\" tabindex=\"-1\">The law, briefly</h2>\n<p>This is the landscape in 2026, not legal advice; check with your own counsel for specifics.</p>\n<ul>\n<li><strong>European Union.</strong> The <strong>European Accessibility Act</strong> (Directive 2019/882) has applied since <strong>28 June 2025</strong>. It covers products and services such as e-commerce, banking, e-books, transport ticketing and electronic communications, so a site like Ticketly selling to EU customers is in scope. Microenterprises providing services (fewer than 10 staff and no more than 2 million euros turnover) are exempt. The reference standard, EN 301 549 v3.2.1, maps to WCAG 2.1 AA for web content; version 4.1.1, published in September 2026, moves to WCAG 2.2 AA and becomes the reference once the EU cites it in its Official Journal. The older Web Accessibility Directive already required the same of public-sector sites.</li>\n<li><strong>United States.</strong> Title III of the <strong>ADA</strong> covers businesses open to the public; it names no technical standard, but courts and settlements use WCAG AA, and thousands of web accessibility lawsuits are filed each year. A 2024 Department of Justice rule requires state and local governments to meet <strong>WCAG 2.1 AA</strong>; an April 2026 interim rule moved the deadlines to April 2027 for entities serving 50,000 people or more and April 2028 for smaller ones. Federal agencies follow <strong>Section 508</strong>, which references WCAG 2.0 AA.</li>\n<li><strong>Elsewhere.</strong> Canada, the UK, Israel, Australia and others reference WCAG 2.0, 2.1 or 2.2 at level AA.</li>\n</ul>\n<p>The practical conclusion is simple: build to <strong>WCAG 2.2 AA</strong> and you meet every one of these, because 2.2 includes everything in 2.1 and 2.0. WCAG 3.0 is in development as a W3C working draft with a different scoring model; it isn’t a standard yet, and nothing in law requires it.</p>\n<p>Now that you can read the rulebook, Section 2 starts the actual repair work on Ticketly, beginning with the skeleton of the page: landmarks and headings.</p>\n","toc":[{"id":"sec-1","text":"How WCAG is organised","level":2},{"id":"sec-2","text":"What changed in 2.2","level":2},{"id":"sec-3","text":"The law, briefly","level":2}],"takeaways":["WCAG is organised as four principles (perceivable, operable, understandable, robust), then guidelines, then testable success criteria at levels A, AA and AAA.","Level AA is the target almost every law and policy uses; AAA is aspirational and not required for whole sites.","WCAG 2.2 added focus not obscured, dragging alternatives, a 24 by 24 pixel minimum target size, consistent help, redundant entry and accessible authentication.","The European Accessibility Act has applied since 28 June 2025, and US rules under the ADA point to WCAG 2.1 AA, so WCAG 2.2 AA covers both."],"further":[{"title":"W3C: What's New in WCAG 2.2","url":"https://www.w3.org/WAI/standards-guidelines/wcag/new-in-22/"},{"title":"W3C: How to Meet WCAG 2.2 (Quick Reference)","url":"https://www.w3.org/WAI/WCAG22/quickref/"},{"title":"W3C: Understanding Success Criterion 2.5.8 Target Size (Minimum)","url":"https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html"}],"quiz":[{"q":"<p>Ticketly’s sticky “Your basket” footer covers the whole of a focused “Add to calendar” link when you Tab to it near the bottom of the screen. Which WCAG 2.2 criterion does this fail?</p>","options":[{"text":"2.4.7 Focus Visible","why":"The link does have a focus indicator; it is hidden behind other content. Focus Visible is about whether an indicator exists at all."},{"text":"2.5.8 Target Size (Minimum)","why":"Target size is about how big the pointer target is, not whether it is covered while it has keyboard focus."},{"text":"1.4.10 Reflow","why":"Reflow is about content fitting a 320 CSS pixel wide viewport without two-dimensional scrolling, not about overlapping sticky elements."},{"text":"2.4.11 Focus Not Obscured (Minimum)","why":"Correct. At level AA, a focused component must not be entirely hidden by author-created content such as sticky headers, footers or banners."}],"answer":3},{"q":"<p>Which change satisfies 2.5.7 Dragging Movements for Ticketly’s price-range slider, which currently only works by dragging its handle?</p>","options":[{"text":"Make the handle larger so it is easier to grab","why":"A bigger handle still requires a drag. People with tremor or using a head pointer may not be able to hold a press while moving at all."},{"text":"Add a tooltip that says “drag to adjust”","why":"Instructions don’t remove the need to drag. The criterion asks for a way to do the same thing with single clicks or taps."},{"text":"Let users click points on the track or use plus and minus buttons to set the value","why":"Correct. A single-pointer alternative, such as clicking a point on the track or pressing buttons, meets the criterion."}],"answer":2},{"q":"<p>A product manager asks, “Do we have to meet every AAA criterion to be compliant?” What is the accurate answer?</p>","options":[{"text":"No; the usual target is Level AA, and W3C itself says AAA is not recommended as a general policy for entire sites","why":"Correct. Some AAA criteria can’t be met for all content, so they are used selectively where they matter most."},{"text":"Yes, because WCAG conformance means meeting every success criterion at every level","why":"Conformance is claimed at a level. Laws and policies almost always require Level AA, which means all A and AA criteria."},{"text":"No, Level A is enough for EU and US law","why":"The EU harmonised standard and US rules reference Level AA, which includes every A and AA criterion."}],"answer":0},{"q":"<p>Which Ticketly login flow meets 3.3.8 Accessible Authentication (Minimum)?</p>","options":[{"text":"The password field blocks paste, so the password must be typed from memory","why":"Blocking paste stops password managers, which forces a memory test. That fails the criterion."},{"text":"The password field allows paste and autofill, and there is a “email me a sign-in link” option","why":"Correct. Password managers and email links mean nobody has to memorise or transcribe anything."},{"text":"Users must retype a six-character code shown as a distorted image, with no alternative","why":"Transcribing a distorted code is a cognitive function test, and without an alternative it fails the criterion."}],"answer":1}],"exercise":{"kind":"choice","multiple":true,"options":["seat-drag","focus-hidden","tiny-qty","focus-thin","reverse-code","inline-link"],"correct":["seat-drag","focus-hidden","tiny-qty","reverse-code"],"title":"Triage Ticketly against WCAG 2.2 AA","prompt":"<p>A tester sent you six findings from Ticketly’s checkout. Your team targets <strong>WCAG 2.2 Level AA</strong>. Select every finding that is a real AA (or A) failure and belongs in the bug tracker. Leave out anything that passes, or that only fails a AAA criterion.</p>\n","hints":["For each finding, name the success criterion first, then check its level in the quick reference.","Focus Appearance (2.4.13) is AAA. Target Size (Minimum) has an exception for links inside a sentence.","Four of the six are AA or A failures."],"explanation":"<p>Four findings fail Level AA: the drag-only seat range (2.5.7 Dragging Movements), the banner that fully covers a focused button (2.4.11 Focus Not Obscured), the 16 px adjacent quantity buttons (2.5.8 Target Size), and the reverse-the-letters login challenge, a cognitive function test with no alternative (3.3.8 Accessible Authentication). The thin dotted focus ring is visible, so it passes 2.4.7 Focus Visible; the stricter 2.4.13 Focus Appearance is AAA. The small link inside the terms paragraph is covered by the inline exception in 2.5.8. Triage matters: a report that mixes AAA nice-to-haves with AA failures gets ignored.</p>\n","checkLabels":{},"optionText":{"seat-drag":{"text":"Choosing a block of seats only works by dragging a selection rectangle across the seat map.","why":"Fails 2.5.7 Dragging Movements (AA). Users need a single-pointer way, such as clicking seats one at a time."},"focus-hidden":{"text":"When you Tab to the “Checkout” button, the sticky cookie banner covers it completely.","why":"Fails 2.4.11 Focus Not Obscured (Minimum) (AA): the focused component is entirely hidden by author content."},"tiny-qty":{"text":"The ticket quantity “−” and “+” icon buttons are 16 × 16 px and touch each other.","why":"Fails 2.5.8 Target Size (Minimum) (AA). They are under 24 × 24 px and have no spacing to compensate."},"focus-thin":{"text":"The focus ring is a 1 px dotted outline with good contrast against the background.","why":"Passes AA. Focus is visible (2.4.7). Only 2.4.13 Focus Appearance, a AAA criterion, asks for a thicker indicator."},"reverse-code":{"text":"To sign in, users must type the letters of a displayed word in reverse order, with no other option.","why":"Fails 3.3.8 Accessible Authentication (Minimum) (AA): it is a cognitive function test with no alternative or helper."},"inline-link":{"text":"A “refund policy” link inside a paragraph of terms is only 14 px tall.","why":"Passes. Targets inside a sentence or block of text are exempt from 2.5.8 under the inline exception."}}},"words":931,"readMinutes":4}