Using LynqHow each observation is measured

How each observation is measured

Every observation on the Accessibility screen is read from the page in the browser, through shadow roots (web components are seen, closed shadow roots and iframes are not). A page sends at most twenty observation rows, deduplicated by element, then stops until the next page. Strings are cut at 80 characters before they leave the page. An error inside the measurement is swallowed and never reaches your page.

Each rule says what counts and what it cannot see. Criteria are WCAG 2.2 (W3C Recommendation, 5 October 2023); a row relates to a criterion and is not a conformance judgement.

Keyboard traps · 2.1.2 No Keyboard Trap

Understanding 2.1.2

ObservationCounted whenNot seen, or not counted
Tab stayed inside one containerTab or Shift+Tab, in one direction, landed on the same element a third time with every element between inside one container that is not the page, and either Escape was pressed inside the loop or the loop ran twelve or more moves; then the visitor left it without activating anything in it (a click elsewhere, closing the tab, leaving the page). Inside a dialog the loop counts only after Escape was pressed and three more Tabs stayed inside.A dialog that holds focus and closes on Escape is the intended pattern. One that ignores Escape but is left by a Close button in the loop is a cycle with Escape tried; 2.1.2 allows a standard exit, and whether the exit was explained cannot be seen. A loop over every Tab stop on the page (a kiosk browser) is the page wrapping round. Embedded documents and editors that use Tab are excluded.
Tab went round a loop, then outThe same loop, without Escape and under twelve moves, or left by activating something in it. Reported once the visitor leaves it.Weaker than a trap: the visitor may have been re-reading a small widget. A loop that becomes a trap gives one trap row.
Tab did not move focusFour consecutive Tabs with the page focused and focus not moving, on an element that is not an editor and not the last Tab stop in that direction.Editors, text areas, editable regions, and widgets with role textbox, grid, treegrid or application use Tab themselves and are excluded; a custom editor that declares none of that is reported. A page with nothing to Tab to is not reported.

Focus dropped · 2.4.3 Focus Order

Understanding 2.4.3

ObservationCounted whenNot seen, or not counted
Focus lost after a key pressOne second after Tab, Enter, Space or Escape, focus is on the page itself with no navigation: the element that had it was removed, hidden, disabled (the disable-on-submit pattern), or, after a Tab, blurred by a script. The detail says which.Read from keyboard use only: a mouse click focuses a button in Chrome and not in Safari, so clicks are not counted, and a click or focus move within the second cancels the check. In a browser where a click leaves the button unfocused (measured on the visit), a dialog a pointer opened and Escape closed is not counted, since the browser has nowhere to return focus to.
In-page navigation left focus on the pageThe URL changed without a page load, and one second later focus is on the page itself.No Level A or AA criterion requires focus management on client-side routing; this is best practice under 2.4.3 and the row says so. A site that resets focus on purpose and announces the new page another way is reported all the same.
Focus left an open modalA modal is open (aria-modal or an open dialog element, drawn and on screen; the topmost when they stack), focus moved outside it to an element that is not in a listbox, menu, dialog, tooltip or popover, and 300 ms later the modal is still open and focus still outside.A modal that is hidden or off screen is ignored; so is one still sliding shut when focus returned to its trigger, and a trap that lets a move land outside and pulls it straight back. A date picker or select menu rendered outside the modal is exempt when it carries its role.

No keyboard route · 2.1.1 Keyboard

Understanding 2.1.1

ObservationCounted whenNot seen, or not counted
Clickable, no keyboard route foundA click or tap on an element drawn as clickable (cursor: pointer, unless the whole body is) when nothing on its path can take keyboard focus: no focusable element above or inside it, no tabindex, no label, no editable region, no shadow root that delegates focus, no composite widget with aria-activedescendant. The detail says what the click did within half a second: the page changed, it navigated, focus moved, a click followed, or nothing visible.Ranked by real clicks. A clickable element without cursor: pointer is not seen. A route that exists only through a shortcut or an equivalent control elsewhere, which 2.1.1 accepts, cannot be checked from a visit. “No visible effect” may be a dead cursor rather than a missing route.
Focusable, Enter and Space did nothingEnter or Space on a focused element that is not a native control and not an item in a composite widget, after which nothing happened within half a second (no click, no change to the page, no navigation, no focus move) and the page did not cancel the key. The key is the one the role answers to: Space for a checkbox or switch, Enter for a link, either for a button.A widget that acts on keyup or after a longer delay is reported; so is one that acts on keydown but changes nothing visible in the DOM (a canvas, a sound), unless it cancelled the key.

Hidden or invisible focus · 4.1.2, 2.4.7, 2.4.11

Understanding 4.1.2 · Understanding 2.4.7 · Understanding 2.4.11

ObservationCounted whenNot seen, or not counted
Focus inside an aria-hidden regionTab landed inside a region marked aria-hidden=true, still hidden 300 ms later.The 300 ms lets an animation pass; a slower transition is reported. A pointer click on a tabindex=-1 control inside such a region is not counted. A modal that hid the rest of the page and let focus out is one defect, reported as the leak.
Focus on an element that cannot be seenAfter a Tab, the focused element has no box (1 px counts as none), is entirely outside the viewport, or has opacity 0. A link whose only content is a floated image is measured by the image. A native checkbox, radio or file input with a label is exempt, as is an editor’s hidden field; a hidden input inside a wrapper is judged by its four nearest ancestors, and if one of them changes its outline, shadow, border or background on focus (a react-select control), the wrapper showed it.A skip link that appears only on focus is reported if it appears after the check, 50 ms after the move. Whether a visible element’s focus ring can be seen, which is 2.4.7’s real question, is not judged.
Focus fully hidden under a fixed barAfter a Tab, all five sample points on the focused element (centre and corners) lie under a fixed or sticky element that is visible and opaque.Only fully covered elements are reported, which is 2.4.11’s minimum. The browser’s own scroll-into-view usually leaves the element under a sticky header, so the row names the element, not the bar.

Change on input · 3.2.2 On Input

Understanding 3.2.2

ObservationCounted whenNot seen, or not counted
Changing a field submitted or navigatedA select, radio or checkbox changed and within 300 ms the form was submitted or the page navigated, with no Enter and no click between.A change that opens a dialog or moves focus is not seen. A form that explains beforehand that changing the field submits it is 3.2.2’s own exception and cannot be seen from a visit.

Reflow · 1.4.10

Understanding 1.4.10

ObservationCounted whenNot seen, or not counted
Horizontal overflowThe page is wider than its viewport with horizontal overflow not hidden, read a second after load and after a resize. The element past the edge is named (the table, image or frame, not a cell in it), with the width and how far past the edge the page runs. Above 400 CSS px the row relates to no criterion and says so.1.4.10 is judged at 320 CSS px (1280 px at 400% zoom); sideways scrolling at a wider viewport is a defect at that width, not a 1.4.10 finding. An overrun of 20 px or less is usually a scrollbar’s width. Data tables, maps and toolbars are the criterion’s own exceptions.
Scrolled sidewaysThe visitor scrolled sideways at some point on the page. Folded into the page’s overflow row as “scrolled sideways: n”.The only rule that watches the visitor rather than the page. A page that scrolls sideways by design counts too, and the row does not say why.

Motion · 2.3.3 (AAA) and 2.2.2 Pause, Stop, Hide

Understanding 2.3.3 · Understanding 2.2.2

ObservationCounted whenNot seen, or not counted
Animation ran with reduced motion onOn a visit that requested reduced motion: an animation running at one and six seconds after load, looping or over five seconds long, moving something (transform, position, size), on a visible element in the viewport that is not a progress indicator; or a video autoplaying without controls.Opacity and colour fades are not motion; they are the recommended replacement. No Level A or AA criterion requires honouring the request: this is C39, a technique for 2.3.3 (AAA), and the row says so. Canvas, GIFs and script-driven animation are not seen.
Animation ran on its own for over five secondsOn one visit in ten, whatever the motion setting: the same test at six seconds.Whether a pause, stop or hide control exists, which 2.2.2 asks for, is not checked. Sampled, so its counts are a tenth of the pages that show it.

Target size · 2.5.8 Target Size (Minimum)

Understanding 2.5.8

ObservationCounted whenNot seen, or not counted
Target under 24 pxA click or tap inside the box of a control under 24 × 24 CSS px (the nearest control, with its label for a native checkbox or radio) when another control lies on a 24 px circle around its centre.Inline links in running text, unstyled native controls, options and cells inside their listbox, grid or menu, and controls whose own ::before or ::after enlarges the hit area are excluded. A hit area enlarged by a wrapper is not seen. The criterion’s “essential” exception and an equivalent larger target elsewhere cannot be judged from a visit.

Page properties · 1.4.4 Resize Text and 2.2.1 Timing Adjustable

Two rows about the page rather than a visit; every session on the page meets them. Understanding 1.4.4 · Understanding 2.2.1

ObservationCounted whenNot seen, or not counted
Pinch zoom disabled by the viewport tagThe viewport meta tag sets user-scalable=no or a maximum-scale under 2.Safari on iOS has ignored the setting since iOS 10; the tag is still the page’s intent. One row per page.
Page refreshes itself on a timerA meta refresh with a delay between one second and twenty hours.A refresh with no delay is a redirect. Whether the visitor can turn it off, which 2.2.1 asks for, is not seen.