vlmkit demo · judgment log

Sprintboard

How this interactive app — kanban board with drag and drop was judged, in the order it happened: every gate run with its whole output, every screenshot that was looked at with what was seen in it, and where each defect came from. Each finished round keeps the pictures of one full-page walk per width; the other shots keep what was seen in them. Open the site.

The brief the builder was given
# Brief: task board app — "Sprintboard"

- **Directory**: `examples/sites/kanban/`
- **Pattern**: interactive app — kanban board with drag and drop
- **Language**: English

## What it is

**Sprintboard**, a fictional team task board, showing the board "Website relaunch". One page,
`index.html`. The board state lives in memory and a reload resets it to the seeded board, so every
gate run sees the same page.

## Layout and behaviour

- **Header**: the board name, the team as avatar initials, filter chips (All / Design / Frontend /
  Backend / Bug), a search field over card titles, and a "New task" button.
- **Columns**: Backlog, In progress, Review, Done — each header shows its card count and an add
  button; In progress has a work-in-progress limit of 3, shown as "3 / 3", and says so in text when
  the limit is exceeded.
- **Cards**: title, label chips (colour and text), assignee initials, due date (fixed dates; an
  overdue card says "Overdue" in text), checklist progress (for example "2/5"), and priority in text.
  Seed about 14 cards.
- **Drag and drop**: HTML5 drag and drop between columns and within one, with a visible drop
  position. **Keyboard alternative**: focus a card, Space picks it up, the arrow keys move it between
  columns and positions, Space drops it, Escape cancels. Each move is announced in a live region
  ("Moved 'Hero copy' to Review, position 2 of 3"). A card menu (⋯) offers "Move to…" as well.
- **Card detail**: clicking a card or pressing Enter opens a dialog with its description, labels,
  assignee, due date and checklist; ticking an item updates the card's progress. Focus is trapped and
  returned.
- **Add a card**: an inline form at the bottom of a column (title, Add, Cancel).
- **Motion**: a dropped card settles with a short transition (200ms at most); reduced motion
  removes it. `?animate=0` removes it too.
- **Phones**: the columns become a horizontal row that scrolls one column at a time (scroll snap).

## Visual direction

Playful but tidy: a light grey canvas, white cards with soft shadows, colourful labels that stay
legible, clear column boundaries, and a board that still reads when it is full.

## Required copy

```
Sprintboard
Website relaunch
Backlog
In progress
Review
Done
New task
Overdue
Add a card
```

## States to show (final round)

Desktop and mobile full board; a card picked up with the keyboard mid-move; the In progress limit
exceeded; the card detail dialog open; a filter applied; the add-card form open; a phone snapped to
the third column.

## Gates this brief leans on

`scan handlers --probe-drag` (drag and drop that is really wired), `check interactions` (keyboard
moves, menu, dialog), `check a11y focus`, `check animation` / `check motion` (the drop transition,
reduced motion), `check scroll` and `scan scroll` (snap columns on phones), `check design` (one card
component), `check grounding` (can a pixel-driven agent act on the board?).

Defects

DefectFound byWhatFixChecked by
D1eye L5 on S5

.team .avatar

Team avatars overlap by 6px (8px on phones) so the initials collide with the next circle: at 1x the header reads as one run 'AKMRPNJWLO', and on the phone (L3) the first four are cut to 'AI', 'MI', 'PN', 'JV'.

Team avatars no longer overlap: side by side with a 4px gap and no canvas ring (styles.css .team / .avatar); phones keep 28px circles with the same gap.

L7
D2eye L1 on S1

.card-meta .avatar

Cards whose due chip is wide ('Due today', 'Overdue') wrap the assignee avatar onto a second meta line by itself (Navigation keyboard support, Search API pagination at 1280; again at 768 and 375 in L2/L6), so those cards are taller and ragged next to their neighbours.

Moved the assignee avatar out of the meta row into a new .card-top row beside the labels (margin-left:auto, left of the ⋯ corner button, which moved to top:8px to centre on that row). The meta row now holds only priority · checklist · due. 'Assigned to …' stays as sr-only text in the described meta (app.js renderCard).

L7
D3eye L4 on S4

.prio svg .bar

The priority icon draws every bar at 25% opacity whatever the level: High shows three pale peach bars, the same as Low and Medium, so the icon carries no information (the rule meant to fill the bars loses on specificity to '.prio svg .bar').

Priority bars: unlit bars use a neutral --bar-off grey, lit bars currentColor; the lit-bar selectors now carry the same specificity as the base rule (.prio--high svg .bar) and come after it, so Low/Medium/High show 1/2/3 coloured bars.

L7
D4eye L3 on S3

.appbar .search @375

On phones 'New task' drops to its own third row under a full-width search field instead of sharing the search row — the field's intrinsic width plus the button exceed the 343px row.

Phone search field is flex: 1 1 0 with min-width 0, so it takes whatever the New task button leaves on the second app-bar row instead of pushing the button to a third row.

L8
D5eye L3 on S3

header.app-header @375

Phone header is ~480px of chrome: brand, search, New task, title, avatars on their own row, two rows of chips, a 'Showing all 14 cards' line and the switcher — the first card starts at y≈490 of 812, so the board is below the fold's midpoint.

Phone header compacted: New task shares the search row (D4), board-head/filter paddings 16/12px, and the unchanging 'Showing all 14 cards' line is visually hidden on phones while no filter is active (.filter-summary.is-idle, still in the accessibility tree as the live status; it reappears when a filter or search is applied).

L8
D6gate G1

.card-meta > .meta

Meta-row items are three different box heights (plain text ~17px, due chip 22px, avatar 24px), which G1 measures as 2–3.5px top-edge near-misalignment on 8 cards and which makes a wrapped second line sit unevenly.

Every .meta item is a 22px-high inline-flex box (chips and plain items alike), so the row shares one top edge; the 24px avatar left the row in D2.

G21
D7gate G3

.board-head, .filter-bar

Two spacing values sit just off the page's own scale: board-head padding-top 22px next to the 24px used 9x, filter-bar padding-bottom 18px next to 16px.

Snapped board-head padding-top 22→24px and filter-bar padding-bottom 18→16px onto the page's scale.

G22
D8gate G13

.card-item.is-dragging .card

While a card is dragged its source copy is faded to opacity .45 and becomes illegible — G13 measures 15.7:1 at rest dropping to ~3.0:1 mid-drag on SB-101..104. The source position should be shown as a placeholder, not as washed-out text.

The dragged card's slot is now a placeholder — accent-soft fill with a 2px dashed indigo outline and its contents visibility:hidden — instead of the card at opacity .45. The browser's drag image (taken before the class is added, one frame later) is what travels with the pointer.

Second pass after G23: the blank dashed slot still measured 15.6:1 → 1.8:1 'at opacity 1' — a slot with no text at all has nothing legible to measure. The placeholder now keeps the card's title visible in --ink-2 (≈6.9:1 on the accent-soft fill) while labels, meta, avatar and ⋯ are hidden, so the slot says what is leaving and stays readable.

G28
D9gate G13

.card (dragend)

A drag cancelled with Escape does not leave the card as it was: G13 finds 15–27% of the card's box still different after dragend (SB-101..104). Likely the 180ms opacity transition on .card still easing back when the drag ends.

Removed opacity from .card's transition list (it now transitions transform and box-shadow only, the settle), so removing .is-dragging in dragend restores the card in the same frame whether the drag dropped or was cancelled.

G26
D10gate G14

.card[role=button]

Cards open a modal dialog on Enter/click but do not say so (no aria-haspopup=dialog), so a screen reader hears a plain button — and G14 logs only 'Enter: focus moves within' for every card, never probing the dialog's focus trap and return that the brief requires.

Cards carry aria-haspopup="dialog" (app.js buildItem): a screen reader announces that Enter opens a dialog, and check interactions can recognise the card as a popup trigger and probe the trap and focus return.

G27
D11gate G16

.card settle / check animation

The brief's drop settle (≤200ms, removed by reduced motion and ?animate=0) is unmeasured: check animation found 'animations: 0' because the settle only runs after a drop and the page is still on load, and the settle was a transition trick that leaves nothing in document.getAnimations() once it ends — so no gate can say it has a visible effect, how long it takes, or that reduced motion removes it.

The settle is now a 180ms @keyframes animation (sb-settle, transform from translateY(-6px) rotate(-1.5deg) scale(1.03) to none, fill both) restarted on every pointer drop, menu move and added card; the keyboard lift moved to the individual rotate/scale properties so a finished settle cannot pin it. Reduced motion and .no-motion set animation:none. New documented parameter ?replay=drop runs one real drop on load (Hero copy → Review, position 2 of 3) through place → afterMove → settle, so check animation has something to sample; without it nothing moves on load.

G29
D12eye L9 on S9

#kb-hint

The keyboard hint bar is squeezed to ~640px on a 1280px screen (a fixed box at left:50% shrink-fits to the half of the viewport right of its left edge), so its status and key list each break onto two lines.

#kb-hint gets width: max-content (still capped at 100vw − 32px), so on desktop the status and the four key groups sit on one line; the phone layout keeps its full-width two-row bar (width:auto there).

L11
D13eye L10 on S10

.card-item (scrollIntoView while lifted)

While moving by keyboard, the carried card is scrolled only until it touches the viewport edge: at the bottom of a column its tilted corner is cut off by the screen, and in the middle columns it would land under the fixed hint bar.

Card items carry scroll-margin 12px 12px 112px, which scrollIntoView honours: a card carried to the bottom of a column is revealed with 112px below it — clear of the screen edge and of the ~62px hint bar at bottom:20px.

L11
D14eye L15 on S15

.wip-alert

The over-limit alert is a single three-line red paragraph at one weight: the status ('over by 1 card') and the advice read the same, and the block feels heavy under the header.

The alert is now two lines of different weight: 'Over the WIP limit by 1 card' in bold red leads, and 'Finish something before starting more.' follows on its own line in --ink-2 at weight 500 (app.js updateColumns, styles.css .wip-alert strong / .wip-advice).

Second pass after L16: .wip-advice gets text-wrap: pretty so the two-line advice never ends on a lone word.

L17
D15eye L22 on S22

.column-note

Column notes always blame 'the filter' ('No cards match the filter', '2 cards hidden by the filter') even when only a search is active and every chip is off, so the note points the reader at the wrong control.

updateColumns names the cause: 'the search' when only a query is set, 'the filter' when only a chip is on, 'the filter and search' for both — in both the empty box ('No cards match the search') and the hidden count ('2 cards hidden by the search').

L24
D16eye L28 on S28

#kb-hint @375

On phones the hint bar's status orphans the position count ('…Review, position 1 of' / '3') and the whole bar runs four lines, covering the card below the carried one.

Hint status joins 'position N of M' with no-break spaces and uses text-wrap: balance; on phones the bar drops to 12.5px with tighter key gaps (app.js showHint, styles.css .kb-hint-status and the ≤640px .kb-hint rules).

Second pass after L29: while moving, the phone hint lays its four key groups on a 2×2 grid (← → column | ↑ ↓ position / Space drop | Esc cancel); the idle three-group hint stays a wrapping row.

L30
D17eye L33 on S33

#board scroll → closeMenu

On phones a tap on ⋯ in a column that is not snapped into place opens the menu and closes it in the same moment: the tap scrolls the board to bring the button into view (or a snap is still settling after a swipe), and every board scroll event closes the menu. S34 shows the menu working once the board is at rest.

Board scroll no longer closes the menu unconditionally: positionMenu() (split out of openMenu) re-anchors it under its ⋯ on every board scroll, and it closes only when the button has left the board's visible width (triggerInBoard).

L35
D18eye L31 on S31

.dlg-facts @375

On phones the dialog's facts panel wraps its values raggedly (name under the avatar, 'Fri, Sep 25, / 2026', Priority alone on a second grid row) instead of reading as a clean list.

At ≤640px the dialog facts are a one-column list: each fact a flex row with the small-caps label at the left and the value right-aligned.

Second pass after L36: the fact labels are flex: none + nowrap, so 'DUE DATE' stays one line and the value takes the remaining width.

L37
D19eye L38 on S38

.add-form (reveal)

Opening a column's add form (New task, or a header +) scrolls it only until it touches the viewport's bottom edge, so the form's panel sits flush with the screen edge and reads as clipped.

The add form carries scroll-margin 16px 12px 32px, so the reveal after New task / + / Add a card leaves 32px of column below it instead of stopping at the edge.

L40
D20gate G58

.column-head .count

Under 1.4x text inflation (G58's after-image) the In progress header wraps its title to two lines and breaks the WIP pill inside itself — 'WIPXX 3X /X' over '3X' — so the count spills out of its pill. A longer translated column name ('In Bearbeitung') in a 250px column would do the same: the pill has no nowrap and the header gives the title no room to wrap on its own.

Count pills and the + button are flex: none with white-space: nowrap, so 'WIP 3 / 3' never breaks; the h2 title gets min-width: 0 and overflow-wrap: break-word, so a long column name wraps inside the title instead of squeezing the pill.

Second pass after G59's after-image: with break-word the unbreakable 'progressXXXX' kept its min-content width inside the flex h2 and ran under the pill; overflow-wrap: anywhere lets the title's text shrink with the h2 (words still wrap at spaces first, and only a word longer than the whole line is broken).

G60
D21gate G61

.avatar

Avatars are fixed circles (24px on cards, 32px in the header), so any initials longer than two letters spill out: G61 measures 'MRX' at 26px inside the 24px circle on SB-105, SB-109 and SB-114, pushing each card's top row 2px past its box. Three-letter initials are ordinary (e.g. M. R. Díaz).

Avatars are min-width circles with inline padding and border-radius 999px (header 32px, phone 28px, cards and dialog 24px): two initials still render as a circle, longer ones widen into a pill.

G62

Rounds

R1 · first draft

builder
N1decision

Gate set, fixed up front. Base set from PROTOCOL + markup-assist done condition: check integrity, check copy --manifest copy.txt, check design, check composition, check color, check a11y contrast (light only: the brief defines no dark theme or theme parameter), check a11y focus, check a11y touch, scan scroll, scan handlers, check interactions. Added for this brief's behaviour (dynamic-markup routing): scan handlers --probe-drag (HTML5 DnD must really be wired: dragover preventDefault, dragstart filling the DataTransfer); check interactions --max-elements 60 (the board has ~50 controls and the default cap of 30 would stop before the Review/Done cards); check motion + check animation (the 180ms drop settle and its prefers-reduced-motion / ?animate=0 removal); check scroll and scan scroll at 375x812 (the snap row only exists on phones, so the default 1280 viewport would measure nothing); check breakpoints --sweep (three layouts: 4-up grid >=1180, sideways board 641-1179, snapped phone row <=640 — overflow must stay inside the board at every width); check grounding (can a pixel-driven agent tell 14 identical-looking card menus and 4 'Add a card' buttons apart).

G1exit 0vlmkit check integrity index.html

verdict: NO DEFECTS, 8 WARN (0 fail, 8 warn, 300 exempted)

verdict clean · findings 8 · fails 0 · warns 8 · exempted 300 · viewports 3

output, 36 line(s), 4.3s
vlmkit check integrity
source: index.html

verdict: NO DEFECTS, 8 WARN (0 fail, 8 warn, 300 exempted)
  exits 0 — 8 warn(s) did not fail this command. To gate on one: --rule near-misalignment=suspect
  1280x800: 8 component(s), ink 64.4%, 182 text block(s)
  768x900: 8 component(s), ink 63.0%, 182 text block(s)
  375x700: 8 component(s), ink 54.8%, 186 text block(s)

Findings:
  ! [near-misalignment] #meta-SB-101 > span:nth-of-type(4) @1280,768,375: #meta-SB-101 > span:nth-of-type(4) is off its siblings' shared top edge by 3.5px inside #meta-SB-101 — siblings align exactly; a 2-8px deviation is almost always an accident (stray margin/padding), not a design choice.
  ! [near-misalignment] #meta-SB-102 > span:nth-of-type(3) @1280,768,375: #meta-SB-102 > span:nth-of-type(3) is off its siblings' shared top edge by 2px inside #meta-SB-102 — siblings align exactly; a 2-8px deviation is almost always an accident (stray margin/padding), not a design choice.
  ! [near-misalignment] #meta-SB-102 > span:nth-of-type(4) @1280,768,375: #meta-SB-102 > span:nth-of-type(4) is off its siblings' shared top edge by 3px inside #meta-SB-102 — siblings align exactly; a 2-8px deviation is almost always an accident (stray margin/padding), not a design choice.
  ! [near-misalignment] #meta-SB-103 > span:nth-of-type(4) @1280,768,375: #meta-SB-103 > span:nth-of-type(4) is off its siblings' shared top edge by 3.5px inside #meta-SB-103 — siblings align exactly; a 2-8px deviation is almost always an accident (stray margin/padding), not a design choice.
  ! [near-misalignment] #meta-SB-104 > span:nth-of-type(4) @1280,768,375: #meta-SB-104 > span:nth-of-type(4) is off its siblings' shared top edge by 3.5px inside #meta-SB-104 — siblings align exactly; a 2-8px deviation is almost always an accident (stray margin/padding), not a design choice.
  ! [near-misalignment] #meta-SB-105 > span:nth-of-type(3) @1280,768,375: #meta-SB-105 > span:nth-of-type(3) is off its siblings' shared top edge by 3.5px inside #meta-SB-105 — siblings align exactly; a 2-8px deviation is almost always an accident (stray margin/padding), not a design choice.
  ! [near-misalignment] #meta-SB-106 > span:nth-of-type(4) @1280,768,375: #meta-SB-106 > span:nth-of-type(4) is off its siblings' shared top edge by 3.5px inside #meta-SB-106 — siblings align exactly; a 2-8px deviation is almost always an accident (stray margin/padding), not a design choice.
  ! [near-misalignment] #meta-SB-107 > span:nth-of-type(4) @1280,768,375: #meta-SB-107 > span:nth-of-type(4) is off its siblings' shared top edge by 3px inside #meta-SB-107 — siblings align exactly; a 2-8px deviation is almost always an accident (stray margin/padding), not a design choice.

Exempted candidates (the tool's call — audit the rule, not the page):
  - [text-collision] ul.team > li:nth-of-type(1) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(1) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(2) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(2) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(3) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(3) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(4) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(4) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] legend.sr-only @1280: clipped away by legend.sr-only (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] span.count.count--wip > span:nth-of-type(2) @1280: clipped away by span.count.count--wip > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(5) @1280: clipped away by #meta-SB-102 > span:nth-of-type(5) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(5) @1280: clipped away by #meta-SB-107 > span:nth-of-type(5) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  … 285 more
D6 defect .card-meta > .meta

Meta-row items are three different box heights (plain text ~17px, due chip 22px, avatar 24px), which G1 measures as 2–3.5px top-edge near-misalignment on 8 cards and which makes a wrapped second line sit unevenly.

S1

index.html · 1280×800 · full page, 2 screen(s)

S1 screen 1S1 screen 2
L1 saw

Desktop 1280, two screens (page is 932px tall). Reads in the right order: white app bar with the indigo logo mark + "Sprintboard", search field and the indigo "New task" button at the right; then "Website relaunch" as the largest text, caption "Sprint 14 · Sep 14 – 25 · 14 cards", filter chips (All filled dark, Design/Frontend/Backend/Bug with colour dots) and "Showing all 14 cards" flush right. Four equal columns on a light grey canvas, each a tinted panel with a border — boundaries are clear. Headers: status dot, name, count pill ("5", "WIP 3 / 3", "2", "4"), + at the right. Cards are white with soft shadows, label chips legible (purple Design, blue Frontend, green Backend, red Bug), bold 14px titles, meta row of priority / checklist / due / avatar. Problems I can see: (1) the team avatars top-right overlap so tightly that the initials run together — "AK MR PN JW LO" reads as one string and the letters touch the next circle; (2) two cards grow an extra row just for the avatar: "Navigation keyboard support" (Medium · 5/5 · Due today, then MR alone on a second line) and "Search API pagination" (Urgent · 4/5 · Overdue, JW alone below) — the wide due chips push the avatar off the row, so those cards are taller and ragged next to their neighbours; (3) the priority bar icons are washed out — Low, Medium and High all look like the same three pale orange bars at this size, so the icon adds nothing to the word. Short columns (Review, Done) stretch to the Backlog's height; the empty panel below "Add a card" reads as room to drop, not as a gap. No clipping, no overlap between cards, no orphaned words.

D2 defect .card-meta .avatar

Cards whose due chip is wide ('Due today', 'Overdue') wrap the assignee avatar onto a second meta line by itself (Navigation keyboard support, Search API pagination at 1280; again at 768 and 375 in L2/L6), so those cards are taller and ragged next to their neighbours.

S2

index.html · 768×1024 · full page, 1 screen(s)

S2 screen 1
L2 saw

Tablet 768x1024, one screen. The header keeps the desktop arrangement (search narrowed to 220px next to "New task"), and the board has switched to the sideways row: Backlog and In progress at 288px each, Review cut by the right edge at "Navigation key…" / "Broken logo o…" — the peek is the only sign the row scrolls, there is no scrollbar or arrow in the picture. Cards and chips are identical to desktop. Same avatar crowding as desktop: five 32px circles overlapping so the initials touch ("AK MR PN JW LO" as one run). "Search API pagination" again drops JW onto its own row below "Urgent · 4/5 · Overdue". The board ends at y≈890; the rest of the screen is empty canvas, which is fine for a board this size. Nothing overflows the page horizontally; the only cut content is inside the board's own scroller.

S3

index.html · 375×812 · full page, 2 screen(s)

S3 screen 1S3 screen 2
L3 saw

Mobile 375x812, two screens (1149px). The phone layout is the weak spot. The app bar stacks into three rows: "Sprintboard", then the search field at full width, then "New task" alone on a third row at the left — the search field was meant to share its row with the button and pushed it down instead. The avatars under the title overlap so much that the initials are cut: I read "AI", "MI", "PN", "JV", "LO" — only the last circle shows its letters whole. The chips wrap to two lines (All · Design · Frontend / Backend · Bug), then "Showing all 14 cards", then the segmented column switcher (Backlog current in white, In progress, Review, Done — neat). Added up, the header is ~480px of chrome: the first card starts at y≈490 on an 812px screen, so a first-time visitor sees more controls than board. The board itself works: the Backlog column is ~315px wide with a 16px sliver of In progress peeking at the right edge (blue dot visible), cards fit their meta on one line at this width, and screen 2 shows the full Backlog column ending with "Add a card". No horizontal page overflow visible.

D4 defect .appbar .search @375

On phones 'New task' drops to its own third row under a full-width search field instead of sharing the search row — the field's intrinsic width plus the button exceed the 343px row.

D5 defect header.app-header @375

Phone header is ~480px of chrome: brand, search, New task, title, avatars on their own row, two rows of chips, a 'Showing all 14 cards' line and the switcher — the first card starts at y≈490 of 812, so the board is below the fold's midpoint.

S4

card close-up: meta row

index.html · 1280×800 · element #card-SB-102 · @2x

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L4 saw

2x close-up of "Footer links 404 on /press". Top row: red "Bug" and blue "Frontend" chips, ⋯ at the top-right corner with clear space from the chips. Title in bold near-black. Meta row: "High" with a bar icon, "1/3" with a checkbox icon, a pink "Overdue" chip with a clock icon, and the orange "PN" avatar pushed to the right edge. At 2x the priority icon is clearly wrong: all three bars are the same pale peach, although this card is High and should show three solid orange bars — so every priority level renders the same icon. Alignment: the text baselines of High / 1/3 / Overdue line up and the avatar is centred on the row, so the row looks centred-aligned as intended; but the boxes are three different heights (plain text ~17px, the Overdue chip 22px, the avatar 24px), which is the 2–3.5px top-edge spread integrity G1 measured. Visible consequence: when the row wraps (S1, Navigation keyboard support) the second line sits at an uneven distance.

D3 defect .prio svg .bar

The priority icon draws every bar at 25% opacity whatever the level: High shows three pale peach bars, the same as Low and Medium, so the icon carries no information (the rule meant to fill the bars loses on specificity to '.prio svg .bar').

S5

team avatars close-up

index.html · 1280×800 · element .team · @2x

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L5 saw

2x close-up of the header's team list. Five 32px circles — violet AK, teal MR, orange PN, green JW, pink LO — each with a 2px canvas-coloured ring, overlapping by 6px. Even at 2x the letters crowd the next circle: the K of AK touches MR's ring, the W of JW touches LO's, and the gaps between the pairs are ~1px, so at 1x the initials read as one run of ten letters. Colours are distinct and white-on-colour contrast looks strong; it is purely the overlap that makes the names hard to read.

D1 defect .team .avatar

Team avatars overlap by 6px (8px on phones) so the initials collide with the next circle: at 1x the header reads as one run 'AKMRPNJWLO', and on the phone (L3) the first four are cut to 'AI', 'MI', 'PN', 'JV'.

G2exit 0vlmkit check copy index.html --manifest copy.txt

missing 0 · placeholders 0 · manifestLines 9 · statesExplored 14 · revealedOnly 0

output, 9 line(s), 2.0s
vlmkit check copy
source: index.html

status: ok
rendered text: 1971 chars
disclosure states: 14 explored (details / tabs / aria-expanded)
manifest: 9 line(s), missing 0

No copy issues detected.
G3exit 0vlmkit check design index.html

verdict: COHERENT (1 finding(s))

verdict coherent · drifting 0 · roles 6

output, 25 line(s), 1.6s
vlmkit check design
source: index.html

verdict: COHERENT (1 finding(s))
  roles judged: 2 of 6 seen, spacing values: 17
  coverage: 45 of 453 visible element(s) carried an inferable role
    no role: span x95, rect x68, svg x66, circle x46, div x42, path x34, +11 more tag(s)
    A role comes from role="..." or from button/input/select/textarea/h1-h6. Layout elements
    (div, span, p, a) have none, so a large skip count is normal — this gate judges components,
    not every box. Add role="..." where an element IS a component to widen the coverage.
  text-free: 18 (0 judged on box alone — font-size/weight is not observable without painted text)

Role reuse (instances / distinct styles; drift below 3x from 3 instances)
  button          37 inst    5 styles  reuse   7.4x  1 one-off  ok
  h2               4 inst    1 styles  reuse     4x  0 one-off  ok
  search           1 inst    1 styles  reuse     1x  1 one-off  not judged
  input:search     1 inst    1 styles  reuse     1x  1 one-off  not judged
  h1               1 inst    1 styles  reuse     1x  1 one-off  not judged
  status           1 inst    1 styles  reuse     1x  1 one-off  not judged
  not judged: search (1), input:search (1), h1 (1), status (1) — under --min-instances 3, so no finding can come from them.
  To keep judging them: --min-instances 2 --min-reuse 2 (both — a 2-instance role cannot reach 3x however many instances the floor allows).

Informational (true, but does not carry the verdict)
  i [scale-outlier]: 2 spacing value(s) sit just off the page's own scale: 22px (1x) next to 24px (9x) — header.app-header>div.board-head paddingTop; 18px (1x) next to 16px (5x) — header.app-header>div.filter-bar paddingBottom. Snap them to the established value or add them deliberately.
D7 defect .board-head, .filter-bar

Two spacing values sit just off the page's own scale: board-head padding-top 22px next to the 24px used 9x, filter-bar padding-bottom 18px next to 16px.

G4exit 0vlmkit check composition index.html

verdict: COMPOSED (0 finding(s))

verdict composed · proximity 0 · flatSteps 0 · railNearMisses 0

output, 16 line(s), 1.6s
vlmkit check composition
source: index.html

verdict: COMPOSED (0 finding(s))
  measured: 0 label(s), 2 heading level(s), 6 wide block(s) on 1 left / 1 right rail(s) — from 239 visible box(es)
  5 label(s) not judged: they open a box that paints its own group edge, so nothing above them could be mis-grouped with

Type hierarchy (largest instance of each declared level)
  h1     26px / 700   h1#board-title
  h2   14.5px / 700   h2#col-backlog-title
  body 12px, largest 26px (2.17x), heaviest +100 weight

Group gaps: 0px between heading-led groups vs 8px inside them (0x, 1 sample(s)). Context only — intact pages measure 0.86-3.00x, so this cannot carry a verdict.

Proximity, alignment and type hierarchy all read consistently.
G5exit 0vlmkit check color index.html

verdict: CONSISTENT (0 finding(s))

verdict consistent · base #eef1f5 · bodyInk #4b5567 · linkInk #172033 · invisibleControls 0 · colorOnlyLinks 0 · unreadableColors 0

output, 27 line(s), 1.6s
vlmkit check color
source: index.html

verdict: CONSISTENT (0 finding(s))
  measured: 1 control(s), 1 link(s) in a text flow — from 373 visible box(es)

Palette (by painted area; reported, never judged — see the rejected candidates in the module docs)
  surfaces  3 distinct
    #eef1f5   47.0%     1 el  
    #e2e7ee   32.2%     4 el  section#col-backlog
    #ffffff   20.8%    20 el  header.app-header>div.appbar
  ink       10 distinct
    #4b5567   38.6%    98 el  div.board-head>div.board-title>p.board-meta
    #172033   36.7%    27 el  div.appbar>div.brand>span.brand-name
    #ffffff   10.3%    22 el  a.skip-link
    #065f46    3.5%     6 el  div#labels-SB-101>span.label
    #1e40af    3.1%     5 el  div#labels-SB-102>span.label
    …and 5 more
  marks     6 distinct
    #101828   49.5%    56 el  div#card-SB-101
    #d3d9e3   36.2%    16 el  section#col-backlog
    #d9dee7    5.9%     1 el  header.app-header>div.appbar
    #c3cad6    4.6%    16 el  fieldset.chips>label.chip>span
    #6b7588    3.1%     4 el  input#search
    …and 1 more
  base #eef1f5, body ink #4b5567, link ink #172033 on 15 element(s)
G6exit 0vlmkit check a11y contrast index.html

inspected 183 · failures 0

output, 5 line(s), 1.6s
  vlmkit check a11y contrast
  html: examples/sites/kanban/index.html
  inspected 183 text-bearing element(s)
  ✓ 0 contrast failure(s)
  report: examples/sites/kanban/test-results/a11y-contrast/index-a303bea1/report.md
G7exit 1vlmkit check a11y focus index.html

steps 40 · findings 1

output, 6 line(s), 1.7s
  vlmkit check a11y focus
  source: index.html
  captured 40 focus step(s)
  ✗ 1 finding(s)
    [reverse] Focus moved left within the same row (from `main#board>section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn` at x=275 to `main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-105` at x=35). Visual order is L-to-R; check `tabindex` or DOM order.
  report: examples/sites/kanban/test-results/a11y-focus-order/index-a303bea1/report.md
G8exit 0vlmkit check a11y touch index.html

level AA · inspected 39 · failures 0 · wcagExempt 0

output, 5 line(s), 1.5s
  vlmkit check a11y touch
  source: index.html  level: WCAG AA (24×24 min)
  inspected 39 interactive element(s)
  ✓ 0 undersized target(s)
  report: examples/sites/kanban/test-results/a11y-touch/index-a303bea1/report.md
G9exit 0vlmkit check a11y focus index.html --viewport 1280x1100

steps 40 · findings 0

output, 5 line(s), 1.5s
  vlmkit check a11y focus
  source: index.html
  captured 40 focus step(s)
  ✓ 0 finding(s)
  report: examples/sites/kanban/test-results/a11y-focus-order/index-a303bea1/report.md
G10exit 1vlmkit check a11y focus index.html --output-dir test-results/focus-720

steps 40 · findings 1

output, 6 line(s), 1.6s
  vlmkit check a11y focus
  source: index.html
  captured 40 focus step(s)
  ✗ 1 finding(s)
    [reverse] Focus moved left within the same row (from `main#board>section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn` at x=275 to `main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-105` at x=35). Visual order is L-to-R; check `tabindex` or DOM order.
  report: examples/sites/kanban/test-results/focus-720/report.md
G11exit 0vlmkit scan scroll index.html

containers 0 · overflowX 0 · issues 20

output, 36 line(s), 1.3s
vlmkit scan scroll
source: index.html (1280x720)

status: warn
  exits 0 — 20 warn(s) did not fail this command. To gate on one: --rule clipped-content=suspect
page: 1280x932 — horizontal overflow 0px, vertical scroll 212px
scroll containers: 0 (dead scrollports 5, clipped 20)

Dead scrollports (declared scrollable, content fits):
  - #new-backlog (overflow: auto auto)
  - #new-progress (overflow: auto auto)
  - #new-review (overflow: auto auto)
  - #new-done (overflow: auto auto)
  - #card-dialog (overflow: auto auto)

Issues:
  ! clipped-content #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) clips 194px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1) clips 188px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(5): #meta-SB-103 > span:nth-of-type(5) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-106 > span:nth-of-type(5): #meta-SB-106 > span:nth-of-type(5) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-111 > span:nth-of-type(5): #meta-SB-111 > span:nth-of-type(5) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-105 > span:nth-of-type(4): #meta-SB-105 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-109 > span:nth-of-type(5): #meta-SB-109 > span:nth-of-type(5) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-114 > span:nth-of-type(5): #meta-SB-114 > span:nth-of-type(5) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(5): #meta-SB-101 > span:nth-of-type(5) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(5): #meta-SB-108 > span:nth-of-type(5) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-112 > span:nth-of-type(5): #meta-SB-112 > span:nth-of-type(5) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-104 > span:nth-of-type(5): #meta-SB-104 > span:nth-of-type(5) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-113 > span:nth-of-type(5): #meta-SB-113 > span:nth-of-type(5) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(5): #meta-SB-102 > span:nth-of-type(5) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-107 > span:nth-of-type(5): #meta-SB-107 > span:nth-of-type(5) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-110 > span:nth-of-type(5): #meta-SB-110 > span:nth-of-type(5) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content legend.sr-only: legend.sr-only clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
G12exit 0vlmkit scan scroll index.html --viewport 375x812

containers 1 · overflowX 0 · issues 20

output, 41 line(s), 1.4s
vlmkit scan scroll
source: index.html (375x812)

status: warn
  exits 0 — 20 warn(s) did not fail this command. To gate on one: --rule clipped-content=suspect
page: 375x1149 — horizontal overflow 0px, vertical scroll 337px
scroll containers: 1 (dead scrollports 5, clipped 20)

Scroll containers:
  - #board: axis=x overflow=953px box=(0,434) 375x715

Dead scrollports (declared scrollable, content fits):
  - #new-backlog (overflow: auto auto)
  - #new-progress (overflow: auto auto)
  - #new-review (overflow: auto auto)
  - #new-done (overflow: auto auto)
  - #card-dialog (overflow: auto auto)

Issues:
  ! clipped-content #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) clips 194px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1) clips 188px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(5): #meta-SB-103 > span:nth-of-type(5) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-106 > span:nth-of-type(5): #meta-SB-106 > span:nth-of-type(5) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-111 > span:nth-of-type(5): #meta-SB-111 > span:nth-of-type(5) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-105 > span:nth-of-type(4): #meta-SB-105 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-109 > span:nth-of-type(5): #meta-SB-109 > span:nth-of-type(5) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-114 > span:nth-of-type(5): #meta-SB-114 > span:nth-of-type(5) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(5): #meta-SB-101 > span:nth-of-type(5) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(5): #meta-SB-108 > span:nth-of-type(5) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-112 > span:nth-of-type(5): #meta-SB-112 > span:nth-of-type(5) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-104 > span:nth-of-type(5): #meta-SB-104 > span:nth-of-type(5) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-113 > span:nth-of-type(5): #meta-SB-113 > span:nth-of-type(5) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(5): #meta-SB-102 > span:nth-of-type(5) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-107 > span:nth-of-type(5): #meta-SB-107 > span:nth-of-type(5) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-110 > span:nth-of-type(5): #meta-SB-110 > span:nth-of-type(5) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content legend.sr-only: legend.sr-only clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.

Contract hint: --json emits 1 expectedScrollports entry ready for a UI Contract.
G13exit 1vlmkit scan handlers index.html --probe-drag

registrations 175 · elements 69 · suspects 8

output, 103 line(s), 9.6s
vlmkit scan handlers
source: index.html

status: 8 suspect issue(s), 1 warn
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendAudit legacy URL ": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendNavigation keyboa": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignBrand colour tokensMe": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendAudit legacy URL ": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendAudit legacy URL redirectsMedium ": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendFooter links 404 on /pressHig": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignCookie banner copy reviewLow prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendNewsletter signup endpointMedium ": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendResponsive images for cas": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignHero copyHigh priority2/5 checklis": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPricing page layoutHigh pr": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendSearch API paginationUrgent prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendNavigation keyboard supportMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendBroken logo on older SafariHi": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignBrand colour tokensMedium priority": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendStaging environmentMedium priorit": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignContent inventoryLow priority6/6 c": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendLogin form double submitHigh p": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape cancelled it and 15% of it stayed changed) (mid-drag contrast 15.7:1 → 3.0:1 at opacity 0.45)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape cancelled it and 27% of it stayed changed) (mid-drag contrast 14.9:1 → 2.9:1 at opacity 0.45)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (highlighted 15% while hovering) (Escape cancelled it and 16% of it stayed changed) (mid-drag contrast 15.5:1 → 3.0:1 at opacity 0.45)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (highlighted 77% while hovering) (Escape cancelled it and 25% of it stayed changed) (mid-drag contrast 15.8:1 → 3.0:1 at opacity 0.45)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (highlighted 2% while hovering) (mid-drag contrast 15.8:1 → 5.5:1 at opacity 0.45)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  suspect [drag-ghost-illegible] The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 loses 81% of its own contrast while the drag is in the air: 15.69:1 at rest, 2.97:1 mid-flight at `opacity: 0.45`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendAudit legacy URL redirectsMedium " was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 15% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-ghost-illegible] The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 loses 80% of its own contrast while the drag is in the air: 14.88:1 at rest, 2.94:1 mid-flight at `opacity: 0.45`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendFooter links 404 on /pressHig" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 27% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-ghost-illegible] The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 loses 81% of its own contrast while the drag is in the air: 15.48:1 at rest, 2.96:1 mid-flight at `opacity: 0.45`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignCookie banner copy reviewLow prior" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 16% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-ghost-illegible] The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 loses 81% of its own contrast while the drag is in the air: 15.79:1 at rest, 2.98:1 mid-flight at `opacity: 0.45`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendNewsletter signup endpointMedium " was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 25% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
D8 defect .card-item.is-dragging .card

While a card is dragged its source copy is faded to opacity .45 and becomes illegible — G13 measures 15.7:1 at rest dropping to ~3.0:1 mid-drag on SB-101..104. The source position should be shown as a placeholder, not as washed-out text.

D9 defect .card (dragend)

A drag cancelled with Escape does not leave the card as it was: G13 finds 15–27% of the card's box still different after dragend (SB-101..104). Likely the 180ms opacity transition on .card still easing back when the drag ends.

G14exit 0vlmkit check interactions index.html --max-elements 60

elements 44 · suspects 0 · warns 0

output, 50 line(s), 42.6s
vlmkit check interactions
source: index.html

status: ok
interactive elements: 44

  - [link] "Skip to board" focus✓
  - [searchbox] "Search card titles" focus✓
  - [button] "New task" focus✓ | Enter: focus moves within
  - [radio] "all" focus✓ | ArrowDown: layout change | announces
  - [radio] "design" unreachable | ArrowDown: layout change | announces
  - [radio] "frontend" unreachable | ArrowDown: layout change | announces
  - [radio] "backend" unreachable | ArrowDown: layout change | announces
  - [radio] "bug" unreachable | ArrowDown: focus moves
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Audit legacy URL redirects" focus✓ | Enter: focus moves within
  - [button] "Actions for Audit legacy URL redirects" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Footer links 404 on /press" focus✓ | Enter: focus moves within
  - [button] "Actions for Footer links 404 on /press" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Cookie banner copy review" focus✓ | Enter: focus moves within
  - [button] "Actions for Cookie banner copy review" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Newsletter signup endpoint" focus✓ | Enter: focus moves within
  - [button] "Actions for Newsletter signup endpoint" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Responsive images for case studies" focus✓ | Enter: focus moves within
  - [button] "Actions for Responsive images for case studies" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Hero copy" focus✓ | Enter: focus moves within
  - [button] "Actions for Hero copy" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Pricing page layout" focus✓ | Enter: focus moves within
  - [button] "Actions for Pricing page layout" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Search API pagination" focus✓ | Enter: focus moves within
  - [button] "Actions for Search API pagination" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Navigation keyboard support" focus✓ | Enter: focus moves within
  - [button] "Actions for Navigation keyboard support" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Broken logo on older Safari" focus✓ | Enter: focus moves within
  - [button] "Actions for Broken logo on older Safari" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
  - [button] "Brand colour tokens" focus✓ | Enter: focus moves within
  - [button] "Actions for Brand colour tokens" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Staging environment" focus✓ | Enter: focus moves within
  - [button] "Actions for Staging environment" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Content inventory" focus✓ | Enter: focus moves within
  - [button] "Actions for Content inventory" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Login form double submit" focus✓ | Enter: focus moves within
  - [button] "Actions for Login form double submit" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
D10 defect .card[role=button]

Cards open a modal dialog on Enter/click but do not say so (no aria-haspopup=dialog), so a screen reader hears a plain button — and G14 logs only 'Enter: focus moves within' for every card, never probing the dialog's focus trap and return that the brief requires.

G15exit 0vlmkit check motion index.html

activeAnimations 0 · running 0 · issues 0

output, 33 line(s), 1.4s
vlmkit check motion
source: index.html

status: ok
samples: 19
active animations: 0
active transitions: 19
running animations: 0
paused animations: 0
reduced-motion rule: yes

Motion samples:
  - #col-backlog: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-101: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-102: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-103: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-104: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-105: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #col-progress: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-106: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-107: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-108: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #col-review: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-109: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-110: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #col-done: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-111: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-112: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-113: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #card-SB-114: animation=none 0s running; transition=transform, box-shadow, opacity 0.18s, 0.18s, 0.18s
  - #dlg-progress-bar: animation=none 0s running; transition=width 0.18s

No motion issues detected.
G16exit 0vlmkit check animation index.html

animations 0 · settleMs 0 · issues 0

output, 8 line(s), 1.6s
vlmkit check animation
source: index.html (1280x720)

status: ok
animations: 0 (evaluated 0, infinite 0)
settle: 0ms

No animation issues detected.
D11 defect .card settle / check animation

The brief's drop settle (≤200ms, removed by reduced motion and ?animate=0) is unmeasured: check animation found 'animations: 0' because the settle only runs after a drop and the page is still on load, and the settle was a transition trick that leaves nothing in document.getAnimations() once it ends — so no gate can say it has a visible effect, how long it takes, or that reduced motion removes it.

G17exit 0vlmkit check scroll index.html --viewport 375x812

pageScrolled 337 · stickyFixed 0 · engagedSticky 0 · snaps 1 · issues 1

output, 14 line(s), 1.5s
vlmkit check scroll
source: index.html

status: warn
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule snap-not-snapping=suspect
page scrolled: 337px
sticky/fixed elements: 0 (sticky engaged by the scroll: 0)
snap containers driven: 1

Snap containers:
  - #board: x mandatory, settled at 0px (4 snap-aligned children)

Issues:
  ! snap-not-snapping #board: #board declares scroll-snap-type x mandatory but settled at offset 0px, aligned to no child snap edge (nearest candidates: 16, 343, 670, 997px) — children may be missing scroll-snap-align.
G18exit 0vlmkit check breakpoints index.html --sweep

breakpoints 3 · issues 0 · sweepRanges 0

output, 12 line(s), 3.4s
vlmkit check breakpoints
source: index.html

status: ok
width sweep: 320-1280px step 25 (39 widths) — clean
breakpoints checked: 640, 860, 1179px (each at B-1 / B / B+1)

  640px: clean (max-width: 640px)
  860px: clean (max-width: 860px)
  1179px: clean (max-width: 1179px)

All boundaries consistent.
G19exit 0vlmkit check grounding index.html

targets 37 · scale 0.5 · issues 4

output, 36 line(s), 1.4s
vlmkit check grounding
source: index.html (1280x720)

status: warn
  exits 0 — 4 warn(s) did not fail this command. To gate on one: --rule imprecise-target=suspect (also: ambiguous-target)
frame: 640x360 screenshot px — medium, cap 640x480, scale 0.50 (every coordinate below is in these 640x360 pixels)
targets: 37 actionable in frame (2 disabled or out of the frame)

Action map (click point in screenshot px):
  t2 searchbox "Search card titles" @ (483,15) 150x19 #search
  t3 button "New task" @ (596,15) 64x19 #new-task
  t4 button "Add a card to Backlog" @ (147,114) 14x14 #col-backlog > div:nth-of-type(1) > button:nth-of-type(1)
  t5 button "Backend Audit legacy URL redirects Medium prior…" @ (86,153) 137x53 #card-SB-101
  t6 button "Actions for Audit legacy URL redirects" @ (145,137) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t7 button "Bug Frontend Footer links 404 on /press High pr…" @ (86,211) 137x53 #card-SB-102
  t8 button "Actions for Footer links 404 on /press" @ (145,194) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t9 button "Design Cookie banner copy review Low priority 0…" @ (86,268) 137x53 #card-SB-103
  t10 button "Actions for Cookie banner copy review" @ (145,251) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)
  t11 button "Backend Newsletter signup endpoint Medium prior…" @ (86,325) 137x53 #card-SB-104
  t12 button "Actions for Newsletter signup endpoint" @ (145,308) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(4) > button:nth-of-type(1)
  t13 button "Frontend Backend Responsive images for case stu…" @ (86,358) 137x63 #card-SB-105 [imprecise-target]
  t14 button "Actions for Responsive images for case studies" @ (145,359) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1) [imprecise-target]
  t16 button "Add a card to In progress" @ (303,114) 14x14 #col-progress > div:nth-of-type(1) > button:nth-of-type(1)
  t17 button "Design Hero copy High priority 2/5 checklist it…" @ (242,153) 137x53 #card-SB-106
  t18 button "Actions for Hero copy" @ (301,137) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t19 button "Design Frontend Pricing page layout High priori…" @ (242,211) 137x53 #card-SB-107
  t20 button "Actions for Pricing page layout" @ (301,194) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t21 button "Backend Search API pagination Urgent priority 4…" @ (242,275) 137x67 #card-SB-108
  t22 button "Actions for Search API pagination" @ (301,251) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)
  … 17 more — --json emits the full map

Issues:
  ! imprecise-target: #card-SB-105 (button "Frontend Backend Responsive images for case stu…") shows 137x5 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x63); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.
  ! imprecise-target: #col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1) (button "Actions for Responsive images for case studies") shows 14x2 screenshot px in the 640x360 frame — the frame cuts it (the element is 14x14); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.
  ! imprecise-target: #col-done > div:nth-of-type(2) > button:nth-of-type(1) (button "Add a card") shows 137x5 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x18); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.
  ! ambiguous-target: 3 buttons in the frame all read "Add a card" (t23 at 242,321, t29 at 398,264, t39 at 554,358) — distinguishable only by their surrounding text (In progress WIP 3 / 3 cards, li… / Review 2 cards Frontend Navigat… / Done 4 cards Design Brand colou…), so an accessible name carrying it would let an agent name one.
G20exit 0vlmkit check grounding index.html --json

targets 37 · scale 0.5 · issues 4

output, 1396 line(s), 1.4s
{
  "gate": "check.grounding",
  "command": "check grounding",
  "verdict": "pass",
  "counts": {
    "suspect": 0,
    "warn": 4,
    "info": 0
  },
  "findings": [
    {
      "rule": "imprecise-target",
      "severity": "warn",
      "message": "#card-SB-105 (button \"Frontend Backend Responsive images for case stu…\") shows 137x5 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x63); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.",
      "selector": "#card-SB-105"
    },
    {
      "rule": "imprecise-target",
      "severity": "warn",
      "message": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1) (button \"Actions for Responsive images for case studies\") shows 14x2 screenshot px in the 640x360 frame — the frame cuts it (the element is 14x14); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.",
      "selector": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1)"
    },
    {
      "rule": "imprecise-target",
      "severity": "warn",
      "message": "#col-done > div:nth-of-type(2) > button:nth-of-type(1) (button \"Add a card\") shows 137x5 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x18); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.",
      "selector": "#col-done > div:nth-of-type(2) > button:nth-of-type(1)"
    },
    {
      "rule": "ambiguous-target",
      "severity": "warn",
      "message": "3 buttons in the frame all read \"Add a card\" (t23 at 242,321, t29 at 398,264, t39 at 554,358) — distinguishable only by their surrounding text (In progress WIP 3 / 3 cards, li… / Review 2 cards Frontend Navigat… / Done 4 cards Design Brand colou…), so an accessible name carrying it would let an agent name one.",
      "selector": "#col-progress > div:nth-of-type(2) > button:nth-of-type(1)"
    }
  ],
  "suppressed": [],
  "retuned": [],
  "report": {
    "source": "index.html",
    "frame": {
      "resolution": "medium, cap 640x480",
      "width": 640,
      "height": 360,
      "scale": 0.5,
      "viewportWidth": 1280,
      "viewportHeight": 720
    },
    "targets": [
      {
        "id": "t1",
        "selector": "a.skip-link",
        "role": "link",
        "label": "Skip to board",
        "point": {
          "x": 42,
          "y": -22
        },
        "cssPoint": {
          "x": 83,
          "y": -44
        },
        "box": {
          "x": 8,
          "y": -32,
          "width": 67,
          "height": 20
        },
        "visibleBox": {
          "x": 8,
          "y": -32,
          "width": 67,
          "height": 20
        },
        "minSide": 20,
        "disabled": false,
        "inFrame": false,
        "clipped": true,
        "risks": []
      },
      {
        "id": "t2",
        "selector": "#search",
        "role": "searchbox",
        "label": "Search card titles",
        "point": {
          "x": 483,
          "y": 15
        },
        "cssPoint": {
          "x": 965,
          "y": 30
        },
        "box": {
          "x": 408,
          "y": 5,
          "width": 150,
          "height": 19
        },
        "visibleBox": {
          "x": 408,
          "y": 5,
          "width": 150,
          "height": 19
        },
        "minSide": 19,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t3",
        "aimMargin": 81
      },
      {
        "id": "t3",
        "selector": "#new-task",
        "role": "button",
        "label": "New task",
        "point": {
          "x": 596,
          "y": 15
        },
        "cssPoint": {
          "x": 1192,
          "y": 30
        },
        "box": {
          "x": 564,
          "y": 5,
          "width": 64,
          "height": 19
        },
        "visibleBox": {
          "x": 564,
          "y": 5,
          "width": 64,
          "height": 19
        },
        "minSide": 19,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t2",
        "aimMargin": 38
      },
      {
        "id": "t4",
        "selector": "#col-backlog > div:nth-of-type(1) > button:nth-of-type(1)",
        "role": "button",
        "label": "Add a card to Backlog",
        "point": {
          "x": 147,
          "y": 114
        },
        "cssPoint": {
          "x": 293,
          "y": 229
        },
        "box": {
          "x": 140,
          "y": 107,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 140,
          "y": 107,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t5",
        "aimMargin": 13
      },
      {
        "id": "t5",
        "selector": "#card-SB-101",
        "role": "button",
        "label": "Backend Audit legacy URL redirects Medium prior…",
        "point": {
          "x": 86,
          "y": 153
        },
        "cssPoint": {
          "x": 172,
          "y": 307
        },
        "box": {
          "x": 18,
          "y": 127,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 18,
          "y": 127,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t7",
        "aimMargin": 31
      },
      {
        "id": "t6",
        "selector": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Audit legacy URL redirects",
        "point": {
          "x": 145,
          "y": 137
        },
        "cssPoint": {
          "x": 289,
          "y": 274
        },
        "box": {
          "x": 138,
          "y": 130,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 138,
          "y": 130,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t4",
        "aimMargin": 16
      },
      {
        "id": "t7",
        "selector": "#card-SB-102",
        "role": "button",
        "label": "Bug Frontend Footer links 404 on /press High pr…",
        "point": {
          "x": 86,
          "y": 211
        },
        "cssPoint": {
          "x": 172,
          "y": 421
        },
        "box": {
          "x": 18,
          "y": 184,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 18,
          "y": 184,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t9",
        "aimMargin": 30
      },
      {
        "id": "t8",
        "selector": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Footer links 404 on /press",
        "point": {
          "x": 145,
          "y": 194
        },
        "cssPoint": {
          "x": 289,
          "y": 388
        },
        "box": {
          "x": 138,
          "y": 187,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 138,
          "y": 187,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t5",
        "aimMargin": 14
      },
      {
        "id": "t9",
        "selector": "#card-SB-103",
        "role": "button",
        "label": "Design Cookie banner copy review Low priority 0…",
        "point": {
          "x": 86,
          "y": 268
        },
        "cssPoint": {
          "x": 172,
          "y": 536
        },
        "box": {
          "x": 18,
          "y": 241,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 18,
          "y": 241,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t11",
        "aimMargin": 30
      },
      {
        "id": "t10",
        "selector": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Cookie banner copy review",
        "point": {
          "x": 145,
          "y": 251
        },
        "cssPoint": {
          "x": 289,
          "y": 502
        },
        "box": {
          "x": 138,
          "y": 244,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 138,
          "y": 244,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t7",
        "aimMargin": 14
      },
      {
        "id": "t11",
        "selector": "#card-SB-104",
        "role": "button",
        "label": "Backend Newsletter signup endpoint Medium prior…",
        "point": {
          "x": 86,
          "y": 325
        },
        "cssPoint": {
          "x": 172,
          "y": 650
        },
        "box": {
          "x": 18,
          "y": 298,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 18,
          "y": 298,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t13",
        "aimMargin": 30
      },
      {
        "id": "t12",
        "selector": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(4) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Newsletter signup endpoint",
        "point": {
          "x": 145,
          "y": 308
        },
        "cssPoint": {
          "x": 289,
          "y": 617
        },
        "box": {
          "x": 138,
          "y": 301,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 138,
          "y": 301,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t9",
        "aimMargin": 14
      },
      {
        "id": "t13",
        "selector": "#card-SB-105",
        "role": "button",
        "label": "Frontend Backend Responsive images for case stu…",
        "point": {
          "x": 86,
          "y": 358
        },
        "cssPoint": {
          "x": 172,
          "y": 715
        },
        "box": {
          "x": 18,
          "y": 355,
          "width": 137,
          "height": 63
        },
        "visibleBox": {
          "x": 18,
          "y": 355,
          "width": 137,
          "height": 5
        },
        "minSide": 5,
        "disabled": false,
        "inFrame": true,
        "clipped": true,
        "risks": [
          "imprecise-target"
        ],
        "aimedOffCentre": {
          "reason": "clipped",
          "centre": {
            "x": 87,
            "y": 387
          },
          "room": 2
        },
        "nearest": "t11",
        "aimMargin": 7
      },
      {
        "id": "t14",
        "selector": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Responsive images for case studies",
        "point": {
          "x": 145,
          "y": 359
        },
        "cssPoint": {
          "x": 289,
          "y": 718
        },
        "box": {
          "x": 138,
          "y": 358,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 138,
          "y": 358,
          "width": 14,
          "height": 2
        },
        "minSide": 2,
        "disabled": false,
        "inFrame": true,
        "clipped": true,
        "risks": [
          "imprecise-target"
        ],
        "aimedOffCentre": {
          "reason": "clipped",
          "centre": {
            "x": 145,
            "y": 365
          },
          "room": 1
        },
        "nearest": "t11",
        "aimMargin": 8
      },
      {
        "id": "t15",
        "selector": "#col-backlog > div:nth-of-type(2) > button:nth-of-type(1)",
        "role": "button",
        "label": "Add a card",
        "point": {
          "x": 86,
          "y": 431
        },
        "cssPoint": {
          "x": 172,
          "y": 863
        },
        "box": {
          "x": 18,
          "y": 422,
          "width": 137,
          "height": 18
        },
        "visibleBox": {
          "x": 18,
          "y": 422,
          "width": 137,
          "height": 18
        },
        "minSide": 18,
        "disabled": false,
        "inFrame": false,
        "clipped": true,
        "risks": []
      },
      {
        "id": "t16",
        "selector": "#col-progress > div:nth-of-type(1) > button:nth-of-type(1)",
        "role": "button",
        "label": "Add a card to In progress",
        "point": {
          "x": 303,
          "y": 114
        },
        "cssPoint": {
          "x": 605,
          "y": 229
        },
        "box": {
          "x": 296,
          "y": 107,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 296,
          "y": 107,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t17",
        "aimMargin": 13
      },
      {
        "id": "t17",
        "selector": "#card-SB-106",
        "role": "button",
        "label": "Design Hero copy High priority 2/5 checklist it…",
        "point": {
          "x": 242,
          "y": 153
        },
        "cssPoint": {
          "x": 484,
          "y": 307
        },
        "box": {
          "x": 174,
          "y": 127,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 174,
          "y": 127,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t19",
        "aimMargin": 31
      },
      {
        "id": "t18",
        "selector": "#col-progress > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Hero copy",
        "point": {
          "x": 301,
          "y": 137
        },
        "cssPoint": {
          "x": 601,
          "y": 274
        },
        "box": {
          "x": 294,
          "y": 130,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 294,
          "y": 130,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t16",
        "aimMargin": 16
      },
      {
        "id": "t19",
        "selector": "#card-SB-107",
        "role": "button",
        "label": "Design Frontend Pricing page layout High priori…",
        "point": {
          "x": 242,
          "y": 211
        },
        "cssPoint": {
          "x": 484,
          "y": 421
        },
        "box": {
          "x": 174,
          "y": 184,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 174,
          "y": 184,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t21",
        "aimMargin": 30
      },
      {
        "id": "t20",
        "selector": "#col-progress > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Pricing page layout",
        "point": {
          "x": 301,
          "y": 194
        },
        "cssPoint": {
          "x": 601,
          "y": 388
        },
        "box": {
          "x": 294,
          "y": 187,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 294,
          "y": 187,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t17",
        "aimMargin": 14
      },
      {
        "id": "t21",
        "selector": "#card-SB-108",
        "role": "button",
        "label": "Backend Search API pagination Urgent priority 4…",
        "point": {
          "x": 242,
          "y": 275
        },
        "cssPoint": {
          "x": 484,
          "y": 550
        },
        "box": {
          "x": 174,
          "y": 241,
          "width": 137,
          "height": 67
        },
        "visibleBox": {
          "x": 174,
          "y": 241,
          "width": 137,
          "height": 67
        },
        "minSide": 67,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t23",
        "aimMargin": 37
      },
      {
        "id": "t22",
        "selector": "#col-progress > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Search API pagination",
        "point": {
          "x": 301,
          "y": 251
        },
        "cssPoint": {
          "x": 601,
          "y": 502
        },
        "box": {
          "x": 294,
          "y": 244,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 294,
          "y": 244,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t19",
        "aimMargin": 14
      },
      {
        "id": "t23",
        "selector": "#col-progress > div:nth-of-type(2) > button:nth-of-type(1)",
        "role": "button",
        "label": "Add a card",
        "point": {
          "x": 242,
          "y": 321
        },
        "cssPoint": {
          "x": 484,
          "y": 643
        },
        "box": {
          "x": 174,
          "y": 312,
          "width": 137,
          "height": 18
        },
        "visibleBox": {
          "x": 174,
          "y": 312,
          "width": 137,
          "height": 18
        },
        "minSide": 18,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [
          "ambiguous-target"
        ],
        "nearest": "t21",
        "aimMargin": 13
      },
      {
        "id": "t24",
        "selector": "#col-review > div:nth-of-type(1) > button:nth-of-type(1)",
        "role": "button",
        "label": "Add a card to Review",
        "point": {
          "x": 459,
          "y": 114
        },
        "cssPoint": {
          "x": 917,
          "y": 229
        },
        "box": {
          "x": 452,
          "y": 107,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 452,
          "y": 107,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t25",
        "aimMargin": 13
      },
      {
        "id": "t25",
        "selector": "#card-SB-109",
        "role": "button",
        "label": "Frontend Navigation keyboard support Medium pri…",
        "point": {
          "x": 398,
          "y": 160
        },
        "cssPoint": {
          "x": 796,
          "y": 321
        },
        "box": {
          "x": 330,
          "y": 127,
          "width": 137,
          "height": 67
        },
        "visibleBox": {
          "x": 330,
          "y": 127,
          "width": 137,
          "height": 67
        },
        "minSide": 67,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t27",
        "aimMargin": 38
      },
      {
        "id": "t26",
        "selector": "#col-review > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Navigation keyboard support",
        "point": {
          "x": 457,
          "y": 137
        },
        "cssPoint": {
          "x": 913,
          "y": 274
        },
        "box": {
          "x": 450,
          "y": 130,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 450,
          "y": 130,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t24",
        "aimMargin": 16
      },
      {
        "id": "t27",
        "selector": "#card-SB-110",
        "role": "button",
        "label": "Bug Frontend Broken logo on older Safari High p…",
        "point": {
          "x": 398,
          "y": 225
        },
        "cssPoint": {
          "x": 796,
          "y": 449
        },
        "box": {
          "x": 330,
          "y": 198,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 330,
          "y": 198,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t29",
        "aimMargin": 30
      },
      {
        "id": "t28",
        "selector": "#col-review > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Broken logo on older Safari",
        "point": {
          "x": 457,
          "y": 208
        },
        "cssPoint": {
          "x": 913,
          "y": 416
        },
        "box": {
          "x": 450,
          "y": 201,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 450,
          "y": 201,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t25",
        "aimMargin": 14
      },
      {
        "id": "t29",
        "selector": "#col-review > div:nth-of-type(2) > button:nth-of-type(1)",
        "role": "button",
        "label": "Add a card",
        "point": {
          "x": 398,
          "y": 264
        },
        "cssPoint": {
          "x": 796,
          "y": 528
        },
        "box": {
          "x": 330,
          "y": 255,
          "width": 137,
          "height": 18
        },
        "visibleBox": {
          "x": 330,
          "y": 255,
          "width": 137,
          "height": 18
        },
        "minSide": 18,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [
          "ambiguous-target"
        ],
        "nearest": "t27",
        "aimMargin": 13
      },
      {
        "id": "t30",
        "selector": "#col-done > div:nth-of-type(1) > button:nth-of-type(1)",
        "role": "button",
        "label": "Add a card to Done",
        "point": {
          "x": 615,
          "y": 114
        },
        "cssPoint": {
          "x": 1229,
          "y": 229
        },
        "box": {
          "x": 608,
          "y": 107,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 608,
          "y": 107,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t31",
        "aimMargin": 13
      },
      {
        "id": "t31",
        "selector": "#card-SB-111",
        "role": "button",
        "label": "Design Brand colour tokens Medium priority 4/4 …",
        "point": {
          "x": 554,
          "y": 153
        },
        "cssPoint": {
          "x": 1108,
          "y": 307
        },
        "box": {
          "x": 486,
          "y": 127,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 486,
          "y": 127,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t33",
        "aimMargin": 31
      },
      {
        "id": "t32",
        "selector": "#col-done > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Brand colour tokens",
        "point": {
          "x": 613,
          "y": 137
        },
        "cssPoint": {
          "x": 1225,
          "y": 274
        },
        "box": {
          "x": 606,
          "y": 130,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 606,
          "y": 130,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t30",
        "aimMargin": 16
      },
      {
        "id": "t33",
        "selector": "#card-SB-112",
        "role": "button",
        "label": "Backend Staging environment Medium priority 3/3…",
        "point": {
          "x": 554,
          "y": 211
        },
        "cssPoint": {
          "x": 1108,
          "y": 421
        },
        "box": {
          "x": 486,
          "y": 184,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 486,
          "y": 184,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t35",
        "aimMargin": 30
      },
      {
        "id": "t34",
        "selector": "#col-done > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Staging environment",
        "point": {
          "x": 613,
          "y": 194
        },
        "cssPoint": {
          "x": 1225,
          "y": 388
        },
        "box": {
          "x": 606,
          "y": 187,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 606,
          "y": 187,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t31",
        "aimMargin": 14
      },
      {
        "id": "t35",
        "selector": "#card-SB-113",
        "role": "button",
        "label": "Design Content inventory Low priority 6/6 check…",
        "point": {
          "x": 554,
          "y": 268
        },
        "cssPoint": {
          "x": 1108,
          "y": 536
        },
        "box": {
          "x": 486,
          "y": 241,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 486,
          "y": 241,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t37",
        "aimMargin": 30
      },
      {
        "id": "t36",
        "selector": "#col-done > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Content inventory",
        "point": {
          "x": 613,
          "y": 251
        },
        "cssPoint": {
          "x": 1225,
          "y": 502
        },
        "box": {
          "x": 606,
          "y": 244,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 606,
          "y": 244,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t33",
        "aimMargin": 14
      },
      {
        "id": "t37",
        "selector": "#card-SB-114",
        "role": "button",
        "label": "Bug Backend Login form double submit High prior…",
        "point": {
          "x": 554,
          "y": 325
        },
        "cssPoint": {
          "x": 1108,
          "y": 650
        },
        "box": {
          "x": 486,
          "y": 298,
          "width": 137,
          "height": 53
        },
        "visibleBox": {
          "x": 486,
          "y": 298,
          "width": 137,
          "height": 53
        },
        "minSide": 53,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t39",
        "aimMargin": 30
      },
      {
        "id": "t38",
        "selector": "#col-done > ol:nth-of-type(1) > li:nth-of-type(4) > button:nth-of-type(1)",
        "role": "button",
        "label": "Actions for Login form double submit",
        "point": {
          "x": 613,
          "y": 308
        },
        "cssPoint": {
          "x": 1225,
          "y": 617
        },
        "box": {
          "x": 606,
          "y": 301,
          "width": 14,
          "height": 14
        },
        "visibleBox": {
          "x": 606,
          "y": 301,
          "width": 14,
          "height": 14
        },
        "minSide": 14,
        "disabled": false,
        "inFrame": true,
        "clipped": false,
        "risks": [],
        "nearest": "t35",
        "aimMargin": 14
      },
      {
        "id": "t39",
        "selector": "#col-done > div:nth-of-type(2) > button:nth-of-type(1)",
        "role": "button",
        "label": "Add a card",
        "point": {
          "x": 554,
          "y": 358
        },
        "cssPoint": {
          "x": 1108,
          "y": 715
        },
        "box": {
          "x": 486,
          "y": 355,
          "width": 137,
          "height": 18
        },
        "visibleBox": {
          "x": 486,
          "y": 355,
          "width": 137,
          "height": 5
        },
        "minSide": 5,
        "disabled": false,
        "inFrame": true,
        "clipped": true,
        "risks": [
          "imprecise-target",
          "ambiguous-target"
        ],
        "aimedOffCentre": {
          "reason": "clipped",
          "centre": {
            "x": 555,
            "y": 364
          },
          "room": 2
        },
        "nearest": "t37",
        "aimMargin": 7
      }
    ],
    "capped": 0,
    "issues": [
      {
        "kind": "imprecise-target",
        "severity": "warn",
        "selector": "#card-SB-105",
        "message": "#card-SB-105 (button \"Frontend Backend Responsive images for case stu…\") shows 137x5 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x63); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at."
      },
      {
        "kind": "imprecise-target",
        "severity": "warn",
        "selector": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1)",
        "message": "#col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1) (button \"Actions for Responsive images for case studies\") shows 14x2 screenshot px in the 640x360 frame — the frame cuts it (the element is 14x14); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at."
      },
      {
        "kind": "imprecise-target",
        "severity": "warn",
        "selector": "#col-done > div:nth-of-type(2) > button:nth-of-type(1)",
        "message": "#col-done > div:nth-of-type(2) > button:nth-of-type(1) (button \"Add a card\") shows 137x5 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x18); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at."
      },
      {
        "kind": "ambiguous-target",
        "severity": "warn",
        "selector": "#col-progress > div:nth-of-type(2) > button:nth-of-type(1)",
        "message": "3 buttons in the frame all read \"Add a card\" (t23 at 242,321, t29 at 398,264, t39 at 554,358) — distinguishable only by their surrounding text (In progress WIP 3 / 3 cards, li… / Review 2 cards Frontend Navigat… / Done 4 cards Design Brand colou…), so an accessible name carrying it would let an agent name one."
      }
    ]
  }
}
S6

phone snapped to the third column (Review)

index.html · 375×812 · scroll-to #col-review · wait 300

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L6 saw

Phone 375x812 after scrolling the board to the third column (window scrolled down to the board top). Snapping works: the Review column's left edge sits exactly on the 16px gutter, a 4px sliver of In progress shows at the left edge and the Done column peeks ~30px on the right, so there is always a hint of the neighbours. The segmented switcher above has moved its white "current" pill to "Review" on its own, following the scroll. Review shows its "2" count, the two cards and "Add a card". Same meta-row wrap as desktop: "Navigation keyboard support" puts MR alone on a second line under "Medium · 5/5 · Due today". The Review panel runs on empty to the bottom of the screen because every column is stretched to the Backlog's height — acceptable, it reads as the column's drop area. This picture is the evidence against G17's snap-not-snapping: the browser lands columns on their snap edge measured with the board's 16px scroll-padding.

N2false-positiveabout G7

The one [reverse] step (SB-104's ⋯ at x=275 → card SB-105 at x=35, 'within the same row') is an artifact of scrolling, not a focus-order problem. G10's step table shows SB-104 at y=597, its ⋯ at y=603, then SB-105 at y=594 — but SB-105 is the NEXT card DOWN in the Backlog column, ~115px lower on the page (S1). Focusing it scrolled the 720px viewport, so the gate compared a pre-scroll y with a post-scroll y. G9 re-ran the same walk at 1280x1100, where nothing needs to scroll: 0 findings. The order card → its ⋯ → next card is the page's reading order.

N3false-positiveabout G10

Re-run of G7 into its own output dir to read the step coordinates; same scroll artifact, see the note on G7.

N4toolabout G7

check a11y focus compares focus-stop positions in viewport coordinates across a focus-induced scroll. Verbatim: '[reverse] Focus moved left within the same row (from main#board>section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn at x=275 to main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 at x=35)'. Report rows: '| 11 | …div#card-SB-104 | … | 35, 597 |', '| 12 | …button.card-menu-btn | … | 275, 603 |', '| 13 | …div#card-SB-105 | … | 35, 594 |'. SB-105 is 115px below SB-104 in document coordinates; adding scrollY to each step (or comparing document positions) would remove the finding. At 1280x1100 (G9) the same page has 0 findings.

N5false-positiveabout G11

All 20 clipped-content warns (and the identical 20 at 375 in G12) are the page's .sr-only spans — ' priority', ' checklist items done', ', was due Mon, Sep 21, 2026', 'Assigned to Priya Nair', 'Due ', the chips' legend — 1px boxes with overflow hidden + clip by design, so the card's accessible description reads 'High priority, 1/3 checklist items done, Assigned to Priya Nair' while the visible row stays compact. Integrity (G1) lists the very same selectors under 'exempted … clipped away (overflow is not visible)'. The 5 'dead scrollports' are the four hidden add-card textareas (overflow:auto is the UA default for textarea) and the closed dialog, whose overflow:auto is a guard for content taller than a short screen — both listed, not counted as warns.

N6false-positiveabout G12

Same 20 .sr-only spans as G11 at 375x812; see the note on G11. The part of G12 that matters is right: page overflow-x 0 and exactly one scroll container, #board axis=x overflow=953px — the snapped phone row.

N7toolabout G11

scan scroll reports the standard visually-hidden pattern as cut-off content while check integrity on the same page exempts it. Verbatim: '! clipped-content #meta-SB-103 > span:nth-of-type(5): #meta-SB-103 > span:nth-of-type(5) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.' (that span is class sr-only, text 'Assigned to Ana Kowalski'). G1 for the same element family: '[text-collision] #meta-SB-102 > span:nth-of-type(5) @1280: clipped away by … (overflow is not visible)' under Exempted. The two gates disagree about one element.

N8false-positiveabout G17

snap-not-snapping is wrong about this page. The board has padding-inline 16px and scroll-padding-inline 16px, so each column's snap position is its offset minus 16: 0, 327, 654, 981 (the last clamps to the 953px maximum). The gate's 'nearest candidates: 16, 343, 670, 997px' are the raw column offsets without scroll-padding, and 'settled at 0px' is precisely the first column's snap position. S6/L6 shows the browser landing the Review column exactly on the 16px gutter after a scroll, with the switcher following.

N9toolabout G17

check scroll ignores scroll-padding when it judges where a mandatory snap container settled. Verbatim: '! snap-not-snapping #board: #board declares scroll-snap-type x mandatory but settled at offset 0px, aligned to no child snap edge (nearest candidates: 16, 343, 670, 997px) — children may be missing scroll-snap-align.' The same line also reports '4 snap-aligned children', so the closing hint contradicts its own count. #board has scroll-padding-inline: 16px; 16 − 16 = 0.

N10acceptedabout G19

The three imprecise-target warns are the bottom edge of the gate's 1280x720 frame, not small targets: SB-105's card and ⋯ and Done's 'Add a card' are cut to 5px and 2px because the board runs past 720px — the gate says itself it 'measures the initial frame and never scrolls'. Their real sizes (card 137x63, ⋯ 14x14, add button 137x18 screenshot px) clear the 10px floor. ambiguous-target (three 'Add a card' at the foot of In progress, Review, Done) is accepted: each sits directly under its own column header, the accessible names are already unique ('Add a card to Review', etc. via aria-label), and 'Add a card' is required copy that must stay verbatim; lengthening the visible text would crowd 250px columns.

N11toolabout G19

check grounding's ambiguous-target advice asks for an accessible name the page already has. Verbatim: '! ambiguous-target: 3 buttons in the frame all read "Add a card" (t23 at 242,321, t29 at 398,264, t39 at 554,358) — distinguishable only by their surrounding text (…), so an accessible name carrying it would let an agent name one.' Each of those buttons has aria-label="Add a card to In progress" / "… to Review" / "… to Done"; the --json map labels them 'Add a card' (visible text), while the icon-only + buttons in the same columns are labelled by their aria-label ('Add a card to Review'). The label source differs by whether visible text exists, and the advice does not check the name it recommends.

N12acceptedabout G13

unprobed-handler-types (warn) is this gate's own disclaimer that it presses nothing: blur/change/click/close/focus/focusout/input/keydown/scroll/search/submit are exercised by check interactions (G14: every card, menu and radio probed) and by the state shots in the interactions round.

F1fix for D1

Team avatars no longer overlap: side by side with a 4px gap and no canvas ring (styles.css .team / .avatar); phones keep 28px circles with the same gap.

F2fix for D2

Moved the assignee avatar out of the meta row into a new .card-top row beside the labels (margin-left:auto, left of the ⋯ corner button, which moved to top:8px to centre on that row). The meta row now holds only priority · checklist · due. 'Assigned to …' stays as sr-only text in the described meta (app.js renderCard).

F3fix for D3

Priority bars: unlit bars use a neutral --bar-off grey, lit bars currentColor; the lit-bar selectors now carry the same specificity as the base rule (.prio--high svg .bar) and come after it, so Low/Medium/High show 1/2/3 coloured bars.

F4fix for D4

Phone search field is flex: 1 1 0 with min-width 0, so it takes whatever the New task button leaves on the second app-bar row instead of pushing the button to a third row.

F5fix for D5

Phone header compacted: New task shares the search row (D4), board-head/filter paddings 16/12px, and the unchanging 'Showing all 14 cards' line is visually hidden on phones while no filter is active (.filter-summary.is-idle, still in the accessibility tree as the live status; it reappears when a filter or search is applied).

F6fix for D6

Every .meta item is a 22px-high inline-flex box (chips and plain items alike), so the row shares one top edge; the 24px avatar left the row in D2.

F7fix for D7

Snapped board-head padding-top 22→24px and filter-bar padding-bottom 18→16px onto the page's scale.

F8fix for D8

The dragged card's slot is now a placeholder — accent-soft fill with a 2px dashed indigo outline and its contents visibility:hidden — instead of the card at opacity .45. The browser's drag image (taken before the class is added, one frame later) is what travels with the pointer.

F9fix for D9

Removed opacity from .card's transition list (it now transitions transform and box-shadow only, the settle), so removing .is-dragging in dragend restores the card in the same frame whether the drag dropped or was cancelled.

F10fix for D10

Cards carry aria-haspopup="dialog" (app.js buildItem): a screen reader announces that Enter opens a dialog, and check interactions can recognise the card as a popup trigger and probe the trap and focus return.

R2 · fix pass

builder
S7

index.html · 1280×800 · full page, 2 screen(s)

S7 screen 1S7 screen 2
L7 saw

Desktop 1280 after the fix pass, two screens (942px). Team list top-right is now five separate circles — AK, MR, PN, JW, LO each fully readable, 4px apart, no letters touching. Every card has the same three-row anatomy: labels at the left of the top row with the assignee avatar at its right end beside the ⋯, the bold title, then one meta line of priority · checklist · due. "Navigation keyboard support" (Medium · 5/5 · Due today) and "Search API pagination" (Urgent · 4/5 · Overdue) now fit on one line and are the same height as their neighbours, so the columns read as even stacks. The priority icon finally encodes the level: Low shows one slate bar and two light grey ones, Medium two amber-orange, High three orange, Urgent the red square with "!". Chips, due pills and plain items share one vertical centre and top edge. The avatar sits ~8px left of the ⋯; both are clearly separate targets. Header, filter bar and columns are otherwise unchanged; no overlap, clipping or wrap problems anywhere.

S8

index.html · 375×812 · full page, 2 screen(s)

S8 screen 1S8 screen 2
L8 saw

Mobile 375 after the fix pass, two screens (1074px, was 1149). The app bar is two rows: "Sprintboard", then the search field and the indigo "New task" button side by side. Below: "Website relaunch", the caption, and the five avatars in a row with every initial whole. The chips still take two lines (All · Design · Frontend / Backend · Bug); the "Showing all 14 cards" line is gone from the idle phone view. The column switcher follows, and the Backlog column header now starts at y≈365 with the first card at y≈402 (was ≈490) — the board begins well above the fold's midpoint. Cards show the new top row (labels, avatar, ⋯) and a single meta line. The In progress column still peeks at the right edge. Remaining nit: the second chip row holds only two chips, a little lopsided but honest — nothing is hidden or scrolled away.

G21exit 0vlmkit check integrity index.html

verdict: CLEAN (0 fail, 0 warn, 294 exempted)

verdict clean · findings 0 · fails 0 · warns 0 · exempted 294 · viewports 3

output, 27 line(s), 4.3s
vlmkit check integrity
source: index.html

verdict: CLEAN (0 fail, 0 warn, 294 exempted)
  1280x800: 8 component(s), ink 65.5%, 182 text block(s)
  768x900: 8 component(s), ink 64.3%, 182 text block(s)
  375x700: 8 component(s), ink 55.3%, 186 text block(s)

No integrity defects detected.

Exempted candidates (the tool's call — audit the rule, not the page):
  - [text-collision] ul.team > li:nth-of-type(1) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(1) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(2) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(2) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(3) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(3) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(4) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(4) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] legend.sr-only @1280: clipped away by legend.sr-only (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] span.count.count--wip > span:nth-of-type(2) @1280: clipped away by span.count.count--wip > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(4) @1280: clipped away by #meta-SB-102 > span:nth-of-type(4) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(4) @1280: clipped away by #meta-SB-107 > span:nth-of-type(4) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  … 279 more
G22exit 0vlmkit check design index.html

verdict: COHERENT (0 finding(s))

verdict coherent · drifting 0 · roles 6

output, 24 line(s), 1.6s
vlmkit check design
source: index.html

verdict: COHERENT (0 finding(s))
  roles judged: 2 of 6 seen, spacing values: 15
  coverage: 45 of 467 visible element(s) carried an inferable role
    no role: span x95, rect x68, svg x66, div x56, circle x46, path x34, +11 more tag(s)
    A role comes from role="..." or from button/input/select/textarea/h1-h6. Layout elements
    (div, span, p, a) have none, so a large skip count is normal — this gate judges components,
    not every box. Add role="..." where an element IS a component to widen the coverage.
  text-free: 18 (0 judged on box alone — font-size/weight is not observable without painted text)

Role reuse (instances / distinct styles; drift below 3x from 3 instances)
  button          37 inst    5 styles  reuse   7.4x  1 one-off  ok
  h2               4 inst    1 styles  reuse     4x  0 one-off  ok
  search           1 inst    1 styles  reuse     1x  1 one-off  not judged
  input:search     1 inst    1 styles  reuse     1x  1 one-off  not judged
  h1               1 inst    1 styles  reuse     1x  1 one-off  not judged
  status           1 inst    1 styles  reuse     1x  1 one-off  not judged
  not judged: search (1), input:search (1), h1 (1), status (1) — under --min-instances 3, so no finding can come from them.
  To keep judging them: --min-instances 2 --min-reuse 2 (both — a 2-instance role cannot reach 3x however many instances the floor allows).

No design drift detected.
G23exit 1vlmkit scan handlers index.html --probe-drag

registrations 175 · elements 69 · suspects 8

output, 103 line(s), 10.3s
vlmkit scan handlers
source: index.html

status: 8 suspect issue(s), 1 warn
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendJWAudit legacy UR": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendMRNavigation keyb": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignAKBrand colour tokens": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendJWAudit legacy UR": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendMRResponsive images for c": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignAKHero copyHigh priority2/5 checkl": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPNPricing page layoutHigh ": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendJWSearch API paginationUrgent pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendMRNavigation keyboard supportMed": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendPNBroken logo on older Safari": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignAKBrand colour tokensMedium priori": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendJWStaging environmentMedium prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignLOContent inventoryLow priority6/6": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendMRLogin form double submitHigh": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape cancelled it and 21% of it stayed changed) (mid-drag contrast 15.6:1 → 1.8:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape cancelled it and 25% of it stayed changed) (mid-drag contrast 14.8:1 → 1.8:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (highlighted 3% while hovering) (Escape cancelled it and 23% of it stayed changed) (mid-drag contrast 15.4:1 → 1.8:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (no visible change while hovering) (Escape cancelled it and 21% of it stayed changed) (mid-drag contrast 15.7:1 → 1.8:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (no visible change while hovering) (mid-drag contrast 15.8:1 → 5.6:1 at opacity 1)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  suspect [drag-ghost-illegible] The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 loses 89% of its own contrast while the drag is in the air: 15.62:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 21% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-ghost-illegible] The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 loses 88% of its own contrast while the drag is in the air: 14.77:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 25% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-ghost-illegible] The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 loses 88% of its own contrast while the drag is in the air: 15.41:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 23% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-ghost-illegible] The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 loses 89% of its own contrast while the drag is in the air: 15.74:1 at rest, 1.76:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 21% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
G24exit 1vlmkit scan handlers index.html --probe-drag --json

registrations 175 · elements 69 · suspects 8

output, 4762 line(s), 9.8s
{
  "gate": "scan.handlers",
  "command": "scan handlers",
  "verdict": "fail",
  "counts": {
    "suspect": 8,
    "warn": 1,
    "info": 0
  },
  "findings": [
    {
      "rule": "drag-ghost-illegible",
      "severity": "suspect",
      "message": "The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 loses 89% of its own contrast while the drag is in the air: 15.62:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.",
      "evidence": {
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 \"BackendJWAudit legacy URL redirectsMediu\""
      }
    },
    {
      "rule": "drag-cancel-not-reverted",
      "severity": "suspect",
      "message": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 \"BackendJWAudit legacy URL redirectsMediu\" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect \"none\" and no drop ran — but 21% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is \"leaving\") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.",
      "evidence": {
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 \"BackendJWAudit legacy URL redirectsMediu\""
      }
    },
    {
      "rule": "drag-ghost-illegible",
      "severity": "suspect",
      "message": "The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 loses 88% of its own contrast while the drag is in the air: 14.77:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.",
      "evidence": {
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 \"BugFrontendPNFooter links 404 on /pressH\""
      }
    },
    {
      "rule": "drag-cancel-not-reverted",
      "severity": "suspect",
      "message": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 \"BugFrontendPNFooter links 404 on /pressH\" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect \"none\" and no drop ran — but 24% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is \"leaving\") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.",
      "evidence": {
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 \"BugFrontendPNFooter links 404 on /pressH\""
      }
    },
    {
      "rule": "drag-ghost-illegible",
      "severity": "suspect",
      "message": "The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 loses 88% of its own contrast while the drag is in the air: 15.41:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.",
      "evidence": {
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 \"DesignAKCookie banner copy reviewLow pri\""
      }
    },
    {
      "rule": "drag-cancel-not-reverted",
      "severity": "suspect",
      "message": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 \"DesignAKCookie banner copy reviewLow pri\" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect \"none\" and no drop ran — but 19% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is \"leaving\") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.",
      "evidence": {
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 \"DesignAKCookie banner copy reviewLow pri\""
      }
    },
    {
      "rule": "drag-ghost-illegible",
      "severity": "suspect",
      "message": "The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 loses 89% of its own contrast while the drag is in the air: 15.74:1 at rest, 1.76:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading.",
      "evidence": {
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 \"BackendLONewsletter signup endpointMediu\""
      }
    },
    {
      "rule": "drag-cancel-not-reverted",
      "severity": "suspect",
      "message": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 \"BackendLONewsletter signup endpointMediu\" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect \"none\" and no drop ran — but 22% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is \"leaving\") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.",
      "evidence": {
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 \"BackendLONewsletter signup endpointMediu\""
      }
    },
    {
      "rule": "unprobed-handler-types",
      "severity": "warn",
      "message": "11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.",
      "evidence": {
        "element": "(page)"
      }
    }
  ],
  "suppressed": [],
  "retuned": [],
  "report": {
    "surface": {
      "source": "index.html",
      "elements": [
        {
          "ancestorTypes": [],
          "ix": null,
          "path": "div#card-menu",
          "text": "",
          "types": {
            "keydown": 1,
            "click": 1,
            "focusout": 1
          },
          "samples": [
            "function (e) { var its = menuItems(); var i = its.indexOf(document.activ",
            "function (e) { var it = e.target.closest ? e.target.closest('.menu-item') : ",
            "function (e) { if (menuFor && e.relatedTarget && !menu.contains(e.relatedTar"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [],
          "ix": null,
          "path": "dialog#card-dialog",
          "text": "Backlog·SB-101 Card Assignee— Due date— ",
          "types": {
            "close": 1,
            "click": 1
          },
          "samples": [
            "function () { var r = dlgReturn; dlgFor = null; dlgReturn = null; ",
            "function (e) { if (e.target === dialog) dialog.close(); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "close",
            "click"
          ],
          "ix": null,
          "path": "dialog#card-dialog>div.dlg-head>button#dlg-close",
          "text": "Close",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { dialog.close(); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "close",
            "click"
          ],
          "ix": null,
          "path": "dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist",
          "text": "",
          "types": {
            "change": 1
          },
          "samples": [
            "function (e) { var box = e.target; if (!dlgFor || !box.matches('input[ty"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 8,
          "path": "main#board>section#col-backlog>div.column-head>button.icon-btn",
          "text": "Add a card to Backlog",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(ci); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 19,
          "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
          "text": "Add a card",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(ci); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "main#board>section#col-backlog>div.column-foot>form.add-form",
          "text": "Card title Give the card a title first. ",
          "types": {
            "submit": 1
          },
          "samples": [
            "function (e) { e.preventDefault(); submitForm(ci); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "submit",
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "div.column-foot>form.add-form>div.add-actions>button.btn",
          "text": "Cancel",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { closeForm(ci, true); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "submit",
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog",
          "text": "What needs doing?",
          "types": {
            "keydown": 1,
            "input": 1
          },
          "samples": [
            "function (e) { if (e.key === 'Enter' && !e.shiftKey && !e.isComposing) { e",
            "function () { if (!f.error.hidden && f.input.value.trim()) { f.err"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "scroll"
          ],
          "ix": null,
          "path": "main#board>section#col-backlog",
          "text": "Backlog 5 cards BackendJWAudit legacy UR",
          "types": {
            "dragenter": 1,
            "dragover": 1,
            "dragleave": 1,
            "drop": 1
          },
          "samples": [
            "function onDragEnter(e) { e.preventDefault(); }",
            "function onDragOver(e) { // Always accept: a stray file dropped on the board",
            "function onDragLeave(e) { var col = e.currentTarget; if (e.relatedTarget"
          ],
          "visible": true,
          "containsInteractive": true,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 5,
          "nativeActivation": false,
          "dragoverMs": 0.5
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 20,
          "path": "main#board>section#col-progress>div.column-head>button.icon-btn",
          "text": "Add a card to In progress",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(ci); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 27,
          "path": "main#board>section#col-progress>div.column-foot>button.add-card-btn",
          "text": "Add a card",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(ci); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "main#board>section#col-progress>div.column-foot>form.add-form",
          "text": "Card title Give the card a title first. ",
          "types": {
            "submit": 1
          },
          "samples": [
            "function (e) { e.preventDefault(); submitForm(ci); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "submit",
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "div.column-foot>form.add-form>div.add-actions>button.btn",
          "text": "Cancel",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { closeForm(ci, true); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "submit",
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "section#col-progress>div.column-foot>form.add-form>textarea#new-progress",
          "text": "What needs doing?",
          "types": {
            "keydown": 1,
            "input": 1
          },
          "samples": [
            "function (e) { if (e.key === 'Enter' && !e.shiftKey && !e.isComposing) { e",
            "function () { if (!f.error.hidden && f.input.value.trim()) { f.err"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "scroll"
          ],
          "ix": null,
          "path": "main#board>section#col-progress",
          "text": "In progress WIP3 / 3 cards, limit 3 Desi",
          "types": {
            "dragenter": 1,
            "dragover": 1,
            "dragleave": 1,
            "drop": 1
          },
          "samples": [
            "function onDragEnter(e) { e.preventDefault(); }",
            "function onDragOver(e) { // Always accept: a stray file dropped on the board",
            "function onDragLeave(e) { var col = e.currentTarget; if (e.relatedTarget"
          ],
          "visible": true,
          "containsInteractive": true,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 3,
          "nativeActivation": false,
          "dragoverMs": 0.5
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 28,
          "path": "main#board>section#col-review>div.column-head>button.icon-btn",
          "text": "Add a card to Review",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(ci); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 33,
          "path": "main#board>section#col-review>div.column-foot>button.add-card-btn",
          "text": "Add a card",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(ci); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "main#board>section#col-review>div.column-foot>form.add-form",
          "text": "Card title Give the card a title first. ",
          "types": {
            "submit": 1
          },
          "samples": [
            "function (e) { e.preventDefault(); submitForm(ci); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "submit",
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "div.column-foot>form.add-form>div.add-actions>button.btn",
          "text": "Cancel",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { closeForm(ci, true); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "submit",
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "section#col-review>div.column-foot>form.add-form>textarea#new-review",
          "text": "What needs doing?",
          "types": {
            "keydown": 1,
            "input": 1
          },
          "samples": [
            "function (e) { if (e.key === 'Enter' && !e.shiftKey && !e.isComposing) { e",
            "function () { if (!f.error.hidden && f.input.value.trim()) { f.err"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "scroll"
          ],
          "ix": null,
          "path": "main#board>section#col-review",
          "text": "Review 2 cards FrontendMRNavigation keyb",
          "types": {
            "dragenter": 1,
            "dragover": 1,
            "dragleave": 1,
            "drop": 1
          },
          "samples": [
            "function onDragEnter(e) { e.preventDefault(); }",
            "function onDragOver(e) { // Always accept: a stray file dropped on the board",
            "function onDragLeave(e) { var col = e.currentTarget; if (e.relatedTarget"
          ],
          "visible": true,
          "containsInteractive": true,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 2,
          "nativeActivation": false,
          "dragoverMs": 0.599999999627471
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 34,
          "path": "main#board>section#col-done>div.column-head>button.icon-btn",
          "text": "Add a card to Done",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(ci); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 43,
          "path": "main#board>section#col-done>div.column-foot>button.add-card-btn",
          "text": "Add a card",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(ci); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "main#board>section#col-done>div.column-foot>form.add-form",
          "text": "Card title Give the card a title first. ",
          "types": {
            "submit": 1
          },
          "samples": [
            "function (e) { e.preventDefault(); submitForm(ci); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "submit",
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "div.column-foot>form.add-form>div.add-actions>button.btn",
          "text": "Cancel",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { closeForm(ci, true); }"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "submit",
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": null,
          "path": "section#col-done>div.column-foot>form.add-form>textarea#new-done",
          "text": "What needs doing?",
          "types": {
            "keydown": 1,
            "input": 1
          },
          "samples": [
            "function (e) { if (e.key === 'Enter' && !e.shiftKey && !e.isComposing) { e",
            "function () { if (!f.error.hidden && f.input.value.trim()) { f.err"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "scroll"
          ],
          "ix": null,
          "path": "main#board>section#col-done",
          "text": "Done 4 cards DesignAKBrand colour tokens",
          "types": {
            "dragenter": 1,
            "dragover": 1,
            "dragleave": 1,
            "drop": 1
          },
          "samples": [
            "function onDragEnter(e) { e.preventDefault(); }",
            "function onDragOver(e) { // Always accept: a stray file dropped on the board",
            "function onDragLeave(e) { var col = e.currentTarget; if (e.relatedTarget"
          ],
          "visible": true,
          "containsInteractive": true,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 4,
          "nativeActivation": false,
          "dragoverMs": 0.40000000037252903
        },
        {
          "ancestorTypes": [],
          "ix": 2,
          "path": "header.app-header>div.appbar>button#new-task",
          "text": "New task",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { openForm(0); }"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": 3,
          "path": "div.filter-bar>fieldset.chips>label.chip>input",
          "text": "all",
          "types": {
            "change": 1
          },
          "samples": [
            "function () { if (!r.checked) return; filter = r.value; applyF"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": 4,
          "path": "div.filter-bar>fieldset.chips>label.chip>input",
          "text": "design",
          "types": {
            "change": 1
          },
          "samples": [
            "function () { if (!r.checked) return; filter = r.value; applyF"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": 5,
          "path": "div.filter-bar>fieldset.chips>label.chip>input",
          "text": "frontend",
          "types": {
            "change": 1
          },
          "samples": [
            "function () { if (!r.checked) return; filter = r.value; applyF"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": 6,
          "path": "div.filter-bar>fieldset.chips>label.chip>input",
          "text": "backend",
          "types": {
            "change": 1
          },
          "samples": [
            "function () { if (!r.checked) return; filter = r.value; applyF"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": 7,
          "path": "div.filter-bar>fieldset.chips>label.chip>input",
          "text": "bug",
          "types": {
            "change": 1
          },
          "samples": [
            "function () { if (!r.checked) return; filter = r.value; applyF"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": 1,
          "path": "header.app-header>div.appbar>div.search>input#search",
          "text": "Search card titles",
          "types": {
            "input": 1,
            "search": 1
          },
          "samples": [
            "function onSearch() { query = search.value.trim().toLowerCase(); applyFi",
            "function onSearch() { query = search.value.trim().toLowerCase(); applyFi"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [],
          "ix": null,
          "path": "header.app-header>div.filter-bar>p.filter-summary>button#clear-filters",
          "text": "Clear filters",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { var all = document.querySelector('input[name=\"label-filter\"][v"
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": null,
          "path": "main#board",
          "text": "Backlog 5 cards BackendJWAudit legacy UR",
          "types": {
            "scroll": 1
          },
          "samples": [
            "function () { if (menuFor) closeMenu(false); if (!syncQueued) { syncQueu"
          ],
          "visible": true,
          "containsInteractive": true,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 14,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [],
          "ix": null,
          "path": "nav.col-switch>button",
          "text": "Backlog",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { var ci = +b.getAttribute('data-jump'); board.scrollTo("
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": null,
          "path": "nav.col-switch>button",
          "text": "In progress",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { var ci = +b.getAttribute('data-jump'); board.scrollTo("
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": null,
          "path": "nav.col-switch>button",
          "text": "Review",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { var ci = +b.getAttribute('data-jump'); board.scrollTo("
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [],
          "ix": null,
          "path": "nav.col-switch>button",
          "text": "Done",
          "types": {
            "click": 1
          },
          "samples": [
            "function () { var ci = +b.getAttribute('data-jump'); board.scrollTo("
          ],
          "visible": false,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 9,
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
          "text": "BackendJWAudit legacy URL redirectsMediu",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 10,
          "path": "section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Audit legacy URL redirects",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 11,
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
          "text": "BugFrontendPNFooter links 404 on /pressH",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 12,
          "path": "section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Footer links 404 on /press",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 13,
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
          "text": "DesignAKCookie banner copy reviewLow pri",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 14,
          "path": "section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Cookie banner copy review",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 15,
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
          "text": "BackendLONewsletter signup endpointMediu",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 16,
          "path": "section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Newsletter signup endpoint",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 17,
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
          "text": "FrontendBackendMRResponsive images for c",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 18,
          "path": "section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Responsive images for case s",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 21,
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-106",
          "text": "DesignAKHero copyHigh priority2/5 checkl",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 22,
          "path": "section#col-progress>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Hero copy",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 23,
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-107",
          "text": "DesignFrontendPNPricing page layoutHigh ",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 24,
          "path": "section#col-progress>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Pricing page layout",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 25,
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
          "text": "BackendJWSearch API paginationUrgent pri",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 26,
          "path": "section#col-progress>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Search API pagination",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 29,
          "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109",
          "text": "FrontendMRNavigation keyboard supportMed",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 30,
          "path": "section#col-review>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Navigation keyboard support",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 31,
          "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-110",
          "text": "BugFrontendPNBroken logo on older Safari",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 32,
          "path": "section#col-review>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Broken logo on older Safari",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 35,
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-111",
          "text": "DesignAKBrand colour tokensMedium priori",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 36,
          "path": "section#col-done>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Brand colour tokens",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 37,
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112",
          "text": "BackendJWStaging environmentMedium prior",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 38,
          "path": "section#col-done>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Staging environment",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 39,
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-113",
          "text": "DesignLOContent inventoryLow priority6/6",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 40,
          "path": "section#col-done>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Content inventory",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 41,
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114",
          "text": "BugBackendMRLogin form double submitHigh",
          "types": {
            "click": 1,
            "keydown": 1,
            "focus": 1,
            "blur": 1,
            "dragstart": 1,
            "dragend": 1
          },
          "samples": [
            "function onCardClick(e) { var li = e.currentTarget.parentElement; if (li",
            "function onCardKeydown(e) { var li = e.currentTarget.parentElement; var ",
            "function onCardFocus(e) { var el = e.currentTarget; var visible = false;"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": true,
          "draggableDescendants": 0,
          "nativeActivation": false
        },
        {
          "ancestorTypes": [
            "dragenter",
            "dragover",
            "dragleave",
            "drop",
            "scroll"
          ],
          "ix": 42,
          "path": "section#col-done>ol.card-list>li.card-item>button.card-menu-btn",
          "text": "Actions for Login form double submit",
          "types": {
            "click": 1,
            "keydown": 1
          },
          "samples": [
            "function onMenuButtonClick(e) { var btn = e.currentTarget; if (menuFor &",
            "function onMenuButtonKeydown(e) { if (e.key === 'ArrowDown' || e.key === 'Ar"
          ],
          "visible": true,
          "containsInteractive": false,
          "insideInteractive": false,
          "draggable": false,
          "draggableDescendants": 0,
          "nativeActivation": true
        }
      ],
      "globals": {
        "document:pointerdown": 1,
        "window:resize": 1
      },
      "totalRegistrations": 175,
      "visibleControls": 44,
      "dragProbe": [
        {
          "path": "main#board>section#col-backlog",
          "ran": [
            "dragover",
            "drop"
          ],
          "dragoverUnprevented": false,
          "dragoverPairsTried": 1,
          "dragoverTargetsTried": [
            "main#board>section#col-backlog -> section#col-backlog>div.column-head>h2#col-backlog-title>span.status-dot"
          ],
          "dragoverPreventedOn": "main#board>section#col-backlog -> section#col-backlog>div.column-head>h2#col-backlog-title>span.status-dot"
        },
        {
          "path": "main#board>section#col-progress",
          "ran": [
            "dragover",
            "drop"
          ],
          "dispatchedFrom": "section#col-progress>ol.card-list>li.card-item>div#card-SB-106",
          "dragoverUnprevented": false,
          "dragoverPairsTried": 1,
          "dragoverTargetsTried": [
            "section#col-progress>ol.card-list>li.card-item>div#card-SB-106 -> main#board>section#col-progress>ol.card-list>li.card-item"
          ],
          "dragoverPreventedOn": "section#col-progress>ol.card-list>li.card-item>div#card-SB-106 -> main#board>section#col-progress>ol.card-list>li.card-item"
        },
        {
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-106",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-107",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "main#board>section#col-review",
          "ran": [
            "dragover",
            "drop"
          ],
          "dispatchedFrom": "section#col-review>ol.card-list>li.card-item>div#card-SB-109",
          "dragoverUnprevented": false,
          "dragoverPairsTried": 1,
          "dragoverTargetsTried": [
            "section#col-review>ol.card-list>li.card-item>div#card-SB-109 -> main#board>section#col-review>ol.card-list>li.card-item"
          ],
          "dragoverPreventedOn": "section#col-review>ol.card-list>li.card-item>div#card-SB-109 -> main#board>section#col-review>ol.card-list>li.card-item"
        },
        {
          "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-110",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "main#board>section#col-done",
          "ran": [
            "dragover",
            "drop"
          ],
          "dispatchedFrom": "section#col-done>ol.card-list>li.card-item>div#card-SB-111",
          "dragoverUnprevented": false,
          "dragoverPairsTried": 1,
          "dragoverTargetsTried": [
            "section#col-done>ol.card-list>li.card-item>div#card-SB-111 -> main#board>section#col-done>ol.card-list>li.card-item"
          ],
          "dragoverPreventedOn": "section#col-done>ol.card-list>li.card-item>div#card-SB-111 -> main#board>section#col-done>ol.card-list>li.card-item"
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-111",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-101",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-103",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-105",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-104",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-102",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-113",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114",
          "ran": [
            "dragstart"
          ],
          "transferredTypes": [
            "text/plain",
            "application/x-sprintboard-card"
          ]
        }
      ],
      "realDragProbe": [
        {
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
          "dragstartFired": true,
          "targetsTried": [
            "main#board>section#col-backlog",
            "main#board>section#col-progress",
            "main#board>section#col-review",
            "main#board>section#col-done"
          ],
          "gestures": 5,
          "dragLegibility": {
            "rest": 15.619555982697474,
            "dragging": 1.7749739050994664,
            "opacity": 1
          },
          "droppedOn": "ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
          "cancel": {
            "started": true,
            "cancelled": true,
            "ratio": 0.21290474231650702
          },
          "hoverFeedback": [
            {
              "target": "main#board>section#col-backlog",
              "ratio": 0.028528528528528527
            },
            {
              "target": "main#board>section#col-progress",
              "ratio": 0.5537412412412412
            },
            {
              "target": "main#board>section#col-review",
              "ratio": 0.6776827371695179
            },
            {
              "target": "main#board>section#col-done",
              "ratio": 0.000017295452449036068
            }
          ],
          "timeline": [
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-103>div.card-top",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "ol.card-list>li.card-item>div#card-SB-103>div.card-top",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Audit legacy URL redirects"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-101"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Audit legacy URL redirects"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-101"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-review",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-review>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-review",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review>div.column-foot>button.add-card-btn",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-review>div.column-foot>button.add-card-btn",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Audit legacy URL redirects"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-101"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "div#card-SB-113>div.card-top>div#labels-SB-113>span.label",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-113>div.card-top",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "div#card-SB-113>div.card-top>div#labels-SB-113>span.label",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-113",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "ol.card-list>li.card-item>div#card-SB-113>div.card-top",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-113",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-113",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Audit legacy URL redirects"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-101"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            }
          ],
          "observedTypes": [
            "drag",
            "dragend",
            "dragenter",
            "dragleave",
            "dragover",
            "dragstart",
            "drop"
          ]
        },
        {
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
          "dragstartFired": true,
          "targetsTried": [
            "main#board>section#col-backlog",
            "main#board>section#col-progress",
            "main#board>section#col-review",
            "main#board>section#col-done"
          ],
          "gestures": 5,
          "dragLegibility": {
            "rest": 14.770065057978156,
            "dragging": 1.7742151985915777,
            "opacity": 1
          },
          "droppedOn": "ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
          "cancel": {
            "started": true,
            "cancelled": true,
            "ratio": 0.23976481510134612
          },
          "hoverFeedback": [
            {
              "target": "main#board>section#col-backlog",
              "ratio": 0.014151596691860235
            },
            {
              "target": "main#board>section#col-progress",
              "ratio": 0.5412280875311622
            },
            {
              "target": "main#board>section#col-review",
              "ratio": 0.6964603695936054
            },
            {
              "target": "main#board>section#col-done",
              "ratio": 0.2535811800087056
            }
          ],
          "timeline": [
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-103>div.card-top",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "ol.card-list>li.card-item>div#card-SB-103>div.card-top",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Footer links 404 on /press"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-102"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Footer links 404 on /press"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-102"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-review",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Footer links 404 on /press"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-102"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Footer links 404 on /press"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-102"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-102",
              "count": 1
            }
          ],
          "observedTypes": [
            "drag",
            "dragend",
            "dragenter",
            "dragleave",
            "dragover",
            "dragstart",
            "drop"
          ]
        },
        {
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
          "dragstartFired": true,
          "targetsTried": [
            "main#board>section#col-backlog",
            "main#board>section#col-progress",
            "main#board>section#col-review",
            "main#board>section#col-done"
          ],
          "gestures": 5,
          "dragLegibility": {
            "rest": 15.413250514172317,
            "dragging": 1.7749739050994664,
            "opacity": 1
          },
          "droppedOn": "main#board>section#col-backlog",
          "cancel": {
            "started": true,
            "cancelled": true,
            "ratio": 0.19298348710113417
          },
          "hoverFeedback": [
            {
              "target": "main#board>section#col-backlog",
              "ratio": 0.02588539728714948
            },
            {
              "target": "main#board>section#col-progress",
              "ratio": 0.6079178364847951
            },
            {
              "target": "main#board>section#col-review",
              "ratio": 0.740613266583229
            },
            {
              "target": "main#board>section#col-done",
              "ratio": 0.00001268477488752833
            }
          ],
          "timeline": [
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-105>div#meta-SB-105",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "ol.card-list>li.card-item>div#card-SB-105>div#meta-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Cookie banner copy review"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-103"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-progress",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-progress",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-progress",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Cookie banner copy review"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-103"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-review",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Cookie banner copy review"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-103"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "div#meta-SB-101>span.meta>svg>rect",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "div#meta-SB-101>span.meta>svg>rect",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-done>ol.card-list",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-101",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-done>ol.card-list",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-done>ol.card-list",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Cookie banner copy review"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-103"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            }
          ],
          "observedTypes": [
            "drag",
            "dragend",
            "dragenter",
            "dragleave",
            "dragover",
            "dragstart",
            "drop"
          ]
        },
        {
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
          "dragstartFired": true,
          "targetsTried": [
            "main#board>section#col-backlog",
            "main#board>section#col-progress",
            "main#board>section#col-review",
            "main#board>section#col-done"
          ],
          "gestures": 5,
          "dragLegibility": {
            "rest": 15.74303627407919,
            "dragging": 1.760339865943166,
            "opacity": 1
          },
          "droppedOn": "main#board>section#col-backlog",
          "cancel": {
            "started": true,
            "cancelled": true,
            "ratio": 0.22224972922791272
          },
          "hoverFeedback": [
            {
              "target": "main#board>section#col-backlog",
              "ratio": 0.017021119480135873
            },
            {
              "target": "main#board>section#col-progress",
              "ratio": 0.000011076650420912716
            },
            {
              "target": "main#board>section#col-review",
              "ratio": 0.7734972677595628
            },
            {
              "target": "main#board>section#col-done",
              "ratio": 0.000011076650420912716
            }
          ],
          "timeline": [
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-done>ol.card-list",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "div#card-SB-105>div.card-top>div#labels-SB-105>span.label",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "div#card-SB-105>div.card-top>div#labels-SB-105>span.label",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Newsletter signup endpoint"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-104"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "div#meta-SB-108>span.meta>svg>rect",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-progress>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "div#meta-SB-108>span.meta>svg>rect",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-progress",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-progress>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-progress",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-progress",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Newsletter signup endpoint"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-104"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-review",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Newsletter signup endpoint"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-104"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-103>div.card-top",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "ol.card-list>li.card-item>div#card-SB-103>div.card-top",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Newsletter signup endpoint"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-104"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-104",
              "count": 1
            }
          ],
          "observedTypes": [
            "drag",
            "dragend",
            "dragenter",
            "dragleave",
            "dragover",
            "dragstart",
            "drop"
          ]
        },
        {
          "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
          "dragstartFired": true,
          "targetsTried": [
            "main#board>section#col-backlog",
            "main#board>section#col-progress",
            "main#board>section#col-review",
            "main#board>section#col-done"
          ],
          "gestures": 4,
          "dragLegibility": {
            "rest": 15.766028611733718,
            "dragging": 5.55690471872442,
            "opacity": 1
          },
          "droppedOn": "main#board>section#col-backlog",
          "hoverFeedback": [
            {
              "target": "main#board>section#col-backlog",
              "ratio": 0.011755578252671275
            },
            {
              "target": "main#board>section#col-progress",
              "ratio": 0.000009820867379006914
            },
            {
              "target": "main#board>section#col-review",
              "ratio": 0.8028395401215168
            },
            {
              "target": "main#board>section#col-done",
              "ratio": 0.000009820867379006914
            }
          ],
          "timeline": [
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-backlog",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Responsive images for case studies"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-105"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-backlog",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-backlog>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-backlog",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-progress>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-progress",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-progress>div.column-foot>button.add-card-btn",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-progress",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-progress",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Responsive images for case studies"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-105"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-review",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-review",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Responsive images for case studies"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-105"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragstart",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-review",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "main#board>section#col-review",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "div#meta-SB-103>span.meta>svg>rect",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
              "count": 1
            },
            {
              "type": "drag",
              "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            },
            {
              "type": "dragenter",
              "path": "main#board>section#col-done>ol.card-list",
              "count": 1
            },
            {
              "type": "dragleave",
              "path": "div#meta-SB-103>span.meta>svg>rect",
              "count": 1
            },
            {
              "type": "dragover",
              "path": "main#board>section#col-done>ol.card-list",
              "count": 1,
              "prevented": true
            },
            {
              "type": "drop",
              "path": "main#board>section#col-done>ol.card-list",
              "count": 1,
              "prevented": true,
              "received": [
                {
                  "type": "text/plain",
                  "value": "Responsive images for case studies"
                },
                {
                  "type": "application/x-sprintboard-card",
                  "value": "SB-105"
                }
              ]
            },
            {
              "type": "dragend",
              "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-105",
              "count": 1
            }
          ],
          "observedTypes": [
            "drag",
            "dragend",
            "dragenter",
            "dragleave",
            "dragover",
            "dragstart",
            "drop"
          ]
        },
        {
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-106",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        },
        {
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-107",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        },
        {
          "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        },
        {
          "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        },
        {
          "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-110",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-111",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-113",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        },
        {
          "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114",
          "dragstartFired": false,
          "targetsTried": [],
          "gestures": 0,
          "capped": true
        }
      ],
      "cancelAttempts": [
        {
          "path": "main#board>section#col-backlog",
          "type": "dragenter",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-backlog",
          "type": "dragover",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-backlog",
          "type": "drop",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-progress",
          "type": "dragenter",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-progress",
          "type": "dragover",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-progress",
          "type": "drop",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-review",
          "type": "dragenter",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-review",
          "type": "dragover",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-review",
          "type": "drop",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-done",
          "type": "dragenter",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-done",
          "type": "dragover",
          "passive": false,
          "effective": true
        },
        {
          "path": "main#board>section#col-done",
          "type": "drop",
          "passive": false,
          "effective": true
        }
      ]
    },
    "issues": [
      {
        "kind": "drag-ghost-illegible",
        "severity": "suspect",
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 \"BackendJWAudit legacy URL redirectsMediu\"",
        "message": "The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 loses 89% of its own contrast while the drag is in the air: 15.62:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading."
      },
      {
        "kind": "drag-cancel-not-reverted",
        "severity": "suspect",
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 \"BackendJWAudit legacy URL redirectsMediu\"",
        "message": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 \"BackendJWAudit legacy URL redirectsMediu\" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect \"none\" and no drop ran — but 21% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is \"leaving\") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not."
      },
      {
        "kind": "drag-ghost-illegible",
        "severity": "suspect",
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 \"BugFrontendPNFooter links 404 on /pressH\"",
        "message": "The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 loses 88% of its own contrast while the drag is in the air: 14.77:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading."
      },
      {
        "kind": "drag-cancel-not-reverted",
        "severity": "suspect",
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 \"BugFrontendPNFooter links 404 on /pressH\"",
        "message": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 \"BugFrontendPNFooter links 404 on /pressH\" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect \"none\" and no drop ran — but 24% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is \"leaving\") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not."
      },
      {
        "kind": "drag-ghost-illegible",
        "severity": "suspect",
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 \"DesignAKCookie banner copy reviewLow pri\"",
        "message": "The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 loses 88% of its own contrast while the drag is in the air: 15.41:1 at rest, 1.77:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading."
      },
      {
        "kind": "drag-cancel-not-reverted",
        "severity": "suspect",
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 \"DesignAKCookie banner copy reviewLow pri\"",
        "message": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 \"DesignAKCookie banner copy reviewLow pri\" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect \"none\" and no drop ran — but 19% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is \"leaving\") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not."
      },
      {
        "kind": "drag-ghost-illegible",
        "severity": "suspect",
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 \"BackendLONewsletter signup endpointMediu\"",
        "message": "The element being dragged from section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 loses 89% of its own contrast while the drag is in the air: 15.74:1 at rest, 1.76:1 mid-flight at `opacity: 1`, below the 4.5:1 the rest of this project gates text on. Whatever is behind the surface is now showing through the thing being carried. Ghost the SOURCE'S POSITION rather than the source — a dashed outline, a gap, a placeholder — or raise the opacity until the face survives the composite. Measured from the element's own pixels (darkest 2% against lightest 10%), so it is a legibility proxy and not a text-contrast reading."
      },
      {
        "kind": "drag-cancel-not-reverted",
        "severity": "suspect",
        "element": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 \"BackendLONewsletter signup endpointMediu\"",
        "message": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 \"BackendLONewsletter signup endpointMediu\" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect \"none\" and no drop ran — but 22% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is \"leaving\") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not."
      },
      {
        "kind": "unprobed-handler-types",
        "severity": "warn",
        "element": "(page)",
        "message": "11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.",
        "types": [
          "blur",
          "change",
          "click",
          "close",
          "focus",
          "focusout",
          "input",
          "keydown",
          "scroll",
          "search",
          "submit"
        ]
      }
    ]
  }
}
G25exit 1vlmkit scan handlers index.html --probe-drag

registrations 175 · elements 69 · suspects 4

output, 99 line(s), 9.8s
vlmkit scan handlers
source: index.html

status: 4 suspect issue(s), 1 warn
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendJWAudit legacy UR": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendMRNavigation keyb": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignAKBrand colour tokens": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendJWAudit legacy UR": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendMRResponsive images for c": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignAKHero copyHigh priority2/5 checkl": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPNPricing page layoutHigh ": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendJWSearch API paginationUrgent pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendMRNavigation keyboard supportMed": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendPNBroken logo on older Safari": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignAKBrand colour tokensMedium priori": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendJWStaging environmentMedium prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignLOContent inventoryLow priority6/6": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendMRLogin form double submitHigh": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape cancelled it and 25% of it stayed changed) (mid-drag contrast 15.6:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape cancelled it and 27% of it stayed changed) (mid-drag contrast 14.8:1 → 6.2:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (highlighted 3% while hovering) (Escape cancelled it and 14% of it stayed changed) (mid-drag contrast 15.4:1 → 6.4:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (no visible change while hovering) (Escape cancelled it and 24% of it stayed changed) (mid-drag contrast 15.7:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (no visible change while hovering) (mid-drag contrast 15.8:1 → 6.5:1 at opacity 1)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 25% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 27% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 14% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 24% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
G26exit 0vlmkit scan handlers 'file://$PWD/examples/sites/kanban/index.html?animate=0' --probe-drag

registrations 175 · elements 69 · suspects 0

output, 96 line(s), 9.3s
vlmkit scan handlers
source: file://examples/sites/kanban/index.html?animate=0

status: 1 warn(s)
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule unprobed-handler-types=suspect
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendJWAudit legacy UR": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendMRNavigation keyb": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignAKBrand colour tokens": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendJWAudit legacy UR": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendMRResponsive images for c": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignAKHero copyHigh priority2/5 checkl": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPNPricing page layoutHigh ": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendJWSearch API paginationUrgent pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendMRNavigation keyboard supportMed": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendPNBroken logo on older Safari": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignAKBrand colour tokensMedium priori": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendJWStaging environmentMedium prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignLOContent inventoryLow priority6/6": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendMRLogin form double submitHigh": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape reverted it cleanly) (mid-drag contrast 15.6:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape reverted it cleanly) (mid-drag contrast 14.8:1 → 6.2:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (no visible change while hovering) (Escape reverted it cleanly) (mid-drag contrast 15.4:1 → 6.4:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (no visible change while hovering) (Escape reverted it cleanly) (mid-drag contrast 15.7:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (no visible change while hovering) (mid-drag contrast 15.8:1 → 6.5:1 at opacity 1)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
G27exit 0vlmkit check interactions index.html --max-elements 60

elements 44 · suspects 0 · warns 0

output, 50 line(s), 45.2s
vlmkit check interactions
source: index.html

status: ok
interactive elements: 44

  - [link] "Skip to board" focus✓
  - [searchbox] "Search card titles" focus✓
  - [button] "New task" focus✓ | Enter: focus moves within
  - [radio] "all" focus✓ | ArrowDown: layout change | announces
  - [radio] "design" unreachable | ArrowDown: layout change | announces
  - [radio] "frontend" unreachable | ArrowDown: layout change | announces
  - [radio] "backend" unreachable | ArrowDown: layout change | announces
  - [radio] "bug" unreachable | ArrowDown: focus moves
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Audit legacy URL redirects" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Audit legacy URL redirects" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Footer links 404 on /press" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Footer links 404 on /press" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Cookie banner copy review" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Cookie banner copy review" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Newsletter signup endpoint" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Newsletter signup endpoint" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Responsive images for case studies" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Responsive images for case studies" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Hero copy" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Hero copy" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Pricing page layout" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Pricing page layout" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Search API pagination" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Search API pagination" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Navigation keyboard support" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Navigation keyboard support" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Broken logo on older Safari" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Broken logo on older Safari" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
  - [button] "Brand colour tokens" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Brand colour tokens" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Staging environment" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Staging environment" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Content inventory" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Content inventory" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Login form double submit" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Login form double submit" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
V1verified D1 by L7

Desktop: five separate, fully readable circles 4px apart; L8 shows the same on the phone.

V2verified D2 by L7

Navigation keyboard support and Search API pagination now keep priority · checklist · due on one line; avatar in the top row; card heights even.

V3verified D3 by L7

Low = 1 slate bar, Medium = 2 amber bars, High = 3 orange bars, Urgent = red square — the icon now encodes the level.

V4verified D4 by L8

Phone app bar is two rows: brand, then search + New task side by side.

V5verified D5 by L8

First card at y≈402 on the phone (was ≈490); page 1074px (was 1149).

V6verified D6 by G21

check integrity: CLEAN, 0 warn — the 8 meta-row near-misalignments are gone.

V7verified D7 by G22

check design: COHERENT, 0 findings; no scale-outlier line.

V8verified D10 by G27

Every card now reads 'Enter: … | opens dialog (focus enters), traps | Esc closes+returns focus' — the dialog's trap and focus return are probed and pass.

F11fix for D8

Second pass after G23: the blank dashed slot still measured 15.6:1 → 1.8:1 'at opacity 1' — a slot with no text at all has nothing legible to measure. The placeholder now keeps the card's title visible in --ink-2 (≈6.9:1 on the accent-soft fill) while labels, meta, avatar and ⋯ are hidden, so the slot says what is leaving and stays readable.

N13supersededabout D9

D9 was misdiagnosed. F9 (dropping opacity from .card's transition) is harmless but did not change the finding: G23 and G25 still report 21–25% after Escape. G26 ran the same probe on index.html?animate=0 — the page's switch that removes the drop settle — and reports 0 suspects: after a cancelled drag the card is exactly as it was. The probe drives real drops first (G24's JSON timeline shows SB-101 dropped into Review before the cancel gesture), each drop starts the 180ms settle, and the cancel gesture's 'before' picture is taken while that settle is still easing. The cancel path (dragend removes .is-dragging and the drop UI) was never the problem, so there is no page defect left under D9.

N14false-positiveabout G25

The 4 drag-cancel-not-reverted suspects here are the probe's timing, not the page: G26 is the identical probe with the drop settle switched off (?animate=0) and has 0 suspects, and the brief requires that settle (≤200ms). The probe drops each card for real, then starts its Escape-cancel gesture within the 180ms settle of that drop, so its baseline is a mid-transition frame and the at-rest card afterwards 'differs'. A user cancels seconds after a drop, never inside 180ms.

N15toolabout G25

scan handlers --probe-drag takes the cancel gesture's baseline without waiting for the page's own transitions from the PREVIOUS gesture (a real drop) to finish. Verbatim: 'suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 21% of the element's own box still differs from before the gesture.' Same probe on ?animate=0 (G26): no issue. Waiting for document.getAnimations() to settle before each baseline would separate a stranded optimistic change from a transition still in flight. Also noted: after F8's first pass the rule read a deliberate blank placeholder (no text, opacity 1) as '15.62:1 at rest, 1.77:1 mid-flight at opacity: 1' — the placeholder it recommends ('a dashed outline, a gap, a placeholder') still fails it unless the slot keeps legible text.

N16supersededabout G24

JSON re-run of the probe to read its timeline (it showed the real drops before the cancel gesture); taken before F8's second pass, superseded by G25/G26.

N17supersededabout G23

Probe after F8/F9 first pass; its ghost finding drove F8's second pass and its cancel finding is explained in the D9 note. Superseded by G25/G26.

G28exit 1vlmkit scan handlers index.html --probe-drag

registrations 175 · elements 69 · suspects 4

output, 99 line(s), 9.8s
vlmkit scan handlers
source: index.html

status: 4 suspect issue(s), 1 warn
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendJWAudit legacy UR": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendMRNavigation keyb": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignAKBrand colour tokens": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendJWAudit legacy UR": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendMRResponsive images for c": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignAKHero copyHigh priority2/5 checkl": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPNPricing page layoutHigh ": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendJWSearch API paginationUrgent pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendMRNavigation keyboard supportMed": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendPNBroken logo on older Safari": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignAKBrand colour tokensMedium priori": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendJWStaging environmentMedium prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignLOContent inventoryLow priority6/6": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendMRLogin form double submitHigh": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape cancelled it and 25% of it stayed changed) (mid-drag contrast 15.6:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape cancelled it and 27% of it stayed changed) (mid-drag contrast 14.8:1 → 6.2:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (highlighted 3% while hovering) (Escape cancelled it and 19% of it stayed changed) (mid-drag contrast 15.4:1 → 6.4:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (no visible change while hovering) (Escape cancelled it and 22% of it stayed changed) (mid-drag contrast 15.7:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (no visible change while hovering) (mid-drag contrast 15.8:1 → 6.5:1 at opacity 1)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 25% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 27% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 19% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 22% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
V9verified D8 by G28

G28 (after F11): no drag-ghost-illegible on any of the five driven cards and no mid-drag legibility drop in the gesture lines — the titled placeholder keeps the slot readable.

N18false-positiveabout G28

Same 4 drag-cancel-not-reverted suspects as G25, same cause: the probe's cancel baseline lands inside the 180ms settle of the real drop it just made. The identical probe with the settle off (G26, ?animate=0) has 0 suspects. See the D9 and G25 notes.

N19supersededabout G25

Taken between the placeholder change and its fix record (F11); G28 is the same probe after F11.

V10verified D9 by G26

With the drop settle switched off (?animate=0) a cancelled drag leaves the card exactly as it was: 0 suspects. This verifies the cancel path, not F9 — F9 was not the cause; the remaining G25/G28 suspects are the probe baselining inside the previous drop's 180ms settle (N13, N14).

R3 · interactions and motion

builder
F12fix for D11

The settle is now a 180ms @keyframes animation (sb-settle, transform from translateY(-6px) rotate(-1.5deg) scale(1.03) to none, fill both) restarted on every pointer drop, menu move and added card; the keyboard lift moved to the individual rotate/scale properties so a finished settle cannot pin it. Reduced motion and .no-motion set animation:none. New documented parameter ?replay=drop runs one real drop on load (Hero copy → Review, position 2 of 3) through place → afterMove → settle, so check animation has something to sample; without it nothing moves on load.

G29exit 0vlmkit check animation 'file://$PWD/examples/sites/kanban/index.html?replay=drop'

animations 2 · settleMs 180 · issues 0

output, 13 line(s), 3.1s
vlmkit check animation
source: file://examples/sites/kanban/index.html?replay=drop (1280x720)

status: ok
animations: 2 (evaluated 2, infinite 0)
settle: 180ms
reduced-motion: honored

Evaluated animations:
  - #card-SB-106 `sb-settle` 180ms x1: visible, motion region (658,367) 276x113, peak frame delta 0.50%
  - #card-SB-106 `sb-settle-shadow` 180ms x1: visible, motion region (652,377) 288x112, peak frame delta 0.39%

No animation issues detected.
G30exit 0vlmkit check animation 'file://$PWD/examples/sites/kanban/index.html?replay=drop&animate=0'

animations 0 · settleMs 0 · issues 0

output, 8 line(s), 1.6s
vlmkit check animation
source: file://examples/sites/kanban/index.html?replay=drop&animate=0 (1280x720)

status: ok
animations: 0 (evaluated 0, infinite 0)
settle: 0ms

No animation issues detected.
G31exit 0vlmkit check animation 'file://$PWD/examples/sites/kanban/index.html?replay=drop' --samples 6 --strip /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/settle-strip.png

animations 2 · settleMs 180 · issues 0

output, 16 line(s), 3.9s
vlmkit check animation
source: file://examples/sites/kanban/index.html?replay=drop (1280x720)

status: ok
animations: 2 (evaluated 2, infinite 0)
settle: 180ms
reduced-motion: honored

Evaluated animations:
  - #card-SB-106 `sb-settle` 180ms x1: visible, motion region (656,366) 281x114, peak frame delta 0.64%
  - #card-SB-106 `sb-settle-shadow` 180ms x1: visible, motion region (649,376) 294x117, peak frame delta 0.47%

No animation issues detected.

Strip: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/settle-strip.png (1544x287, 2 animation(s) x 6 sample(s))
  caption: columns are 30ms / 60ms / 90ms / 120ms / 150ms / 180ms on the page timeline (window 180ms, one shared clock); rows top to bottom are #card-SB-106, #card-SB-106
V11verified D11 by G29

check animation on ?replay=drop: 2 animations on #card-SB-106 (sb-settle, sb-settle-shadow), both 'visible', settle 180ms (≤200ms), 'reduced-motion: honored'. G30 (?replay=drop&animate=0): animations 0 — the switch removes it.

N20decisionabout G31

Filmstrip of the settle, 6 samples over 180ms (written to the scratchpad, read by eye): at 30ms Hero copy is raised ~5px and tilted with the deep lift shadow, at 60–90ms it is nearly flat, at 120–180ms it rests flush in Review with the normal card shadow. The motion is small and quick — a landing, not a bounce. check animation is run on ?replay=drop from here on, because the plain page has no motion on load by design.

S9

keyboard: Hero copy picked up, moved right then down

index.html · 1280×800 · focus #card-SB-106 · press Space · press ArrowRight · press ArrowDown · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L9 saw

Desktop, keyboard move in progress: Space on Hero copy, → then ↓. Hero copy now sits in Review between "Navigation keyboard support" and "Broken logo on older Safari", visibly picked up — tilted ~1.5°, scaled up a touch, deep shadow, 2px indigo outline. The Review column is tinted indigo with an indigo border as the target, its count already reads 3, and In progress reads "WIP 2 / 3" — counts follow the move live. Nothing else on the board shifted. At the bottom a dark hint bar says "Moving ‘Hero copy’ · Review, position 2 of 3" with key caps ← → column, ↑ ↓ position, Space drop, Esc cancel — the right content, but the bar is only ~640px wide on a 1280 screen, so the status breaks after "Review," and "Esc cancel" falls to a second line: it reads as cramped rather than as one calm instruction strip. It also sits over the lower part of the Backlog/In progress/Review columns while visible.

D12 defect #kb-hint

The keyboard hint bar is squeezed to ~640px on a 1280px screen (a fixed box at left:50% shrink-fits to the half of the viewport right of its left edge), so its status and key list each break onto two lines.

S10

keyboard: Newsletter signup moved to the bottom of Backlog

index.html · 1280×800 · focus #card-SB-104 · press Space · press ArrowDown · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L10 saw

Desktop, Space then ↓ on Newsletter signup endpoint: it is now Backlog position 5 of 5, lifted with the indigo outline, and the page scrolled 47px to follow it — but only just: the card's bottom edge sits on the viewport's bottom edge and its tilted lower corner is cut off by the screen, so the card being carried is the one thing not fully in view. The hint bar ("Moving ‘Newsletter signup endpoint’ · Backlog, position 5 of 5", keys on two lines again) occupies x≈320–960 at the same height; here the Backlog card is left of it, but a card taken to the bottom of In progress or Review would be scrolled to exactly the band the bar covers.

D13 defect .card-item (scrollIntoView while lifted)

While moving by keyboard, the carried card is scrolled only until it touches the viewport edge: at the bottom of a column its tilted corner is cut off by the screen, and in the middle columns it would land under the fixed hint bar.

F13fix for D12

#kb-hint gets width: max-content (still capped at 100vw − 32px), so on desktop the status and the four key groups sit on one line; the phone layout keeps its full-width two-row bar (width:auto there).

F14fix for D13

Card items carry scroll-margin 12px 12px 112px, which scrollIntoView honours: a card carried to the bottom of a column is revealed with 112px below it — clear of the screen edge and of the ~62px hint bar at bottom:20px.

S11

keyboard: Newsletter signup to the bottom of Backlog (after D12/D13)

index.html · 1280×800 · focus #card-SB-104 · press Space · press ArrowDown · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L11 saw

Desktop, same move as S10 after D12/D13. The page now scrolls further (the header is off-screen, the filter chips at the top) so Newsletter signup endpoint — lifted, tilted, indigo outline, Backlog tinted as the target — sits fully in view with the Backlog's "Add a card" and ~30px of column below it and the hint bar below that. The hint bar is a single line centred at the bottom: "Moving ‘Newsletter signup endpoint’ · Backlog, position 5 of 5" followed by ← → column, ↑ ↓ position, Space drop, Esc cancel, all with key caps; nothing wraps and nothing on the carried card is covered.

S12

keyboard: Pricing page layout to the bottom of Review

index.html · 1280×800 · focus #card-SB-107 · press Space · press ArrowRight · press ArrowDown · press ArrowDown · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L12 saw

Desktop, Pricing page layout carried → and ↓↓ into Review: it is Review position 3 of 3, below Broken logo on older Safari, lifted with the indigo outline, Review tinted and counting 3, In progress now "WIP 2 / 3". The second ↓ at the bottom did nothing visible (the live region says it is already at the bottom), which is the right behaviour. The card sits wholly above the one-line hint bar ("Moving ‘Pricing page layout’ · Review, position 3 of 3 …"); the bar only overlaps the Done column's "Add a card" and the lower edge of the Backlog's last card while the move is in progress.

V12verified D12 by L11

One-line hint bar at 1280, centred; no wrap in status or keys (also L12).

V13verified D13 by L11

Carried card at the bottom of Backlog is fully visible above the hint bar with room to spare; L12 shows the same in the middle column (Review).

S13

keyboard: Hero copy dropped in Review, position 2

index.html · 1280×800 · focus #card-SB-106 · press Space · press ArrowRight · press ArrowDown · press Space · wait 400

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L13 saw

Desktop after Space, →, ↓, Space on Hero copy. The card has settled flat into Review position 2 — no tilt or lift shadow left, just the 2px indigo keyboard focus ring — between Navigation keyboard support and Broken logo on older Safari. Review counts 3, In progress "WIP 2 / 3", and the Review column's target tint is gone. The hint bar at the bottom switched to its idle form: "Keyboard · Space pick up · Enter open · Shift F10 menu", one line with key caps. The announcement is in the (invisible) live region; on screen nothing else changed, which is what a drop should look like.

S14

card menu open on Footer links 404

index.html · 1280×800 · click li[data-id='SB-102'] .card-menu-btn · wait 150

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L14 saw

Desktop, ⋯ clicked on Footer links 404 on /press. A white popover with a soft shadow opens under the button, right-aligned to it: "Open card" (first item, highlighted in pale indigo), a divider, the small caps label "MOVE TO…", then Backlog (grey dot, greyed text, "Current" at the right), In progress (blue dot), Review (amber dot), Done (green dot). The ⋯ button shows its pressed grey background. The popover covers the next two Backlog cards, as a menu should; its left edge leaves the start of the underlying title ("Foot…") visible, which reads as layering, not as a collision. Type sizes and spacing match the rest of the app.

S15

In progress over its WIP limit (moved via Move to…)

index.html · 1280×800 · click li[data-id='SB-109'] .card-menu-btn · click .menu-item[data-to='progress'] · wait 400

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L15 saw

Desktop after ⋯ → Move to… In progress on Navigation keyboard support. In progress turns light red with a red border, its pill reads "WIP 4 / 3" in red, and a white alert with a red border and warning triangle sits under the header: "Over the WIP limit by 1 card. Finish something before starting more." The moved card is last (position 4) with its "Due today" chip intact; Review now shows 1. The state is unmistakable and stated in words, as the brief asks. Weakness: the alert is one undifferentiated red paragraph broken over three lines ("…1 card. / Finish something before / starting more.") — the fact and the advice have the same weight, so the column header area feels heavy; the fact should lead and the advice sit quieter.

D14 defect .wip-alert

The over-limit alert is a single three-line red paragraph at one weight: the status ('over by 1 card') and the advice read the same, and the block feels heavy under the header.

F15fix for D14

The alert is now two lines of different weight: 'Over the WIP limit by 1 card' in bold red leads, and 'Finish something before starting more.' follows on its own line in --ink-2 at weight 500 (app.js updateColumns, styles.css .wip-alert strong / .wip-advice).

S16

In progress over its limit, alert close-up (after D14)

index.html · 1280×800 · element #col-progress · click li[data-id='SB-109'] .card-menu-btn · click .menu-item[data-to='progress'] · wait 400

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L16 saw

Close-up of In progress after the same over-limit move, with F15 in. The alert now leads with "Over the WIP limit by 1 card" in bold red beside the triangle, and the advice sits under it in grey at normal weight — the hierarchy is right and the block is lighter. New flaw from the change: the advice wraps as "Finish something before starting" / "more." — a one-word orphan on the last line of a two-line note. Header pill "WIP 4 / 3" in red, the red column tint and the four cards (Navigation keyboard support last, "Due today" kept) are as before.

F16fix for D14

Second pass after L16: .wip-advice gets text-wrap: pretty so the two-line advice never ends on a lone word.

S17

In progress over its limit, alert close-up (D14 second pass)

index.html · 1280×800 · element #col-progress · click li[data-id='SB-109'] .card-menu-btn · click .menu-item[data-to='progress'] · wait 400

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L17 saw

Same close-up after text-wrap: pretty. The advice now breaks as "Finish something before" / "starting more." — two balanced lines, no orphan — under the bold red "Over the WIP limit by 1 card". The alert reads fact first, advice second; the block is compact and sits evenly between the header pill "WIP 4 / 3" and the first card.

V14verified D14 by L17

Bold fact line, quiet grey advice on two balanced lines, no orphan.

S18

card detail dialog: Hero copy

index.html · 1280×800 · click #card-SB-106 · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L18 saw

Desktop, Hero copy clicked: a 600px white dialog, 16px radius, centred on a half-dimmed board. Reads top-down cleanly: kicker "● In progress · SB-106" in small grey, the title "Hero copy" at 21px bold, the purple Design chip, then a light grey facts panel in three columns — ASSIGNEE (violet AK circle + "Ana Kowalski"), DUE DATE "Fri, Sep 25, 2026", PRIORITY (three orange bars + "High"). Then DESCRIPTION with two lines of body text, and CHECKLIST with "2 of 5 done" right-aligned over an indigo progress bar at 40%, and five checkbox rows: the first two ticked and struck through in grey, the other three open. The × close sits top-right with generous space. Section labels share one small-caps style; spacing between sections is even. Nothing is clipped; the dialog ends 30px below the last row.

S19

dialog: third checklist item ticked

index.html · 1280×800 · click #card-SB-106 · click #dlg-checklist li:nth-child(3) input · wait 300

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L19 saw

Same dialog after clicking the third checkbox. "Legal review of product claims" is now ticked and struck through (its row still shows the pale hover band because the pointer is on it), the count reads "3 of 5 done" and the bar has grown to 60%. The other rows and the facts panel are unchanged, so the update is local and obvious. The card behind is covered by the dialog here; S20 shows the board side.

S20

keyboard: Enter opens Hero copy, tick an item, Escape closes

index.html · 1280×800 · focus #card-SB-106 · press Enter · wait 150 · press Tab · press Tab · press Space · press Escape · wait 300

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L20 saw

Keyboard round trip on the board: Enter on Hero copy opened the dialog, two Tabs moved from the close button to the second checklist row, Space unticked it, Escape closed. Back on the board Hero copy's meta now reads "1/5" (was 2/5), and focus is back on the Hero copy card — indigo ring around it and the idle hint bar "Keyboard · Space pick up · Enter open · Shift F10 menu" at the bottom. So the dialog's checklist writes through to the card, Escape closes, and focus returns to the card that opened it, as the brief asks.

S21

filter: Design

index.html · 1280×800 · click input[name='label-filter'][value='design'] · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L21 saw

Desktop, Design chip clicked. The Design chip turns dark with its purple dot ringed in white, All goes back to outline — the selected filter is obvious. Right of the chips: "Showing 5 of 14 cards" and an underlined "Clear filters". The board keeps its four columns and their total counts (5, WIP 3 / 3, 2, 4) and shows only Design cards: Cookie banner copy review in Backlog with "4 cards hidden by the filter" under it, Hero copy and Pricing page layout in In progress with "1 card hidden by the filter", Brand colour tokens and Content inventory in Done with "2 cards hidden by the filter". Review, with no Design card, shows a dashed empty box "No cards match the filter" above its "Add a card". The board shrinks to its content and nothing jumps sideways; the notes explain why the counts are larger than what is shown.

S22

search: page

index.html · 1280×800 · fill #search "page" · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L22 saw

Desktop, "page" typed into the search field (indigo focus ring, native × to clear). "Showing 1 of 14 cards · Clear filters"; only Pricing page layout remains, in In progress, with "2 cards hidden by the filter" under it; Backlog, Review and Done each show the dashed "No cards match the filter" box. The filtering is right but the words are not: no label filter is on (All is still selected) — it is the search that hid these cards, and "the filter" sends the reader to the chips to look for what they turned on.

D15 defect .column-note

Column notes always blame 'the filter' ('No cards match the filter', '2 cards hidden by the filter') even when only a search is active and every chip is off, so the note points the reader at the wrong control.

S23

add-card form open in Review

index.html · 1280×800 · click #col-review .add-card-btn · type Launch-day checklist · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L23 saw

Desktop, "Add a card" clicked in Review and "Launch-day checklist" typed. The button gives way to an inline form styled like a card: white panel, soft shadow, a small bold "Card title" label, a two-line textarea with the indigo focus ring holding the typed title, then an indigo "Add" and a ghost "Cancel" side by side. It sits right under Broken logo on older Safari in the same column width, so it is clear where the card will land. Label, field border and buttons are all legible on white; nothing else on the board moved.

F17fix for D15

updateColumns names the cause: 'the search' when only a query is set, 'the filter' when only a chip is on, 'the filter and search' for both — in both the empty box ('No cards match the search') and the hidden count ('2 cards hidden by the search').

S24

search: page (after D15)

index.html · 1280×800 · fill #search "page" · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L24 saw

Desktop, "page" in the search field after D15, chips on All. The notes now name the search: Backlog, Review and Done show the dashed box "No cards match the search", and under Pricing page layout In progress says "2 cards hidden by the search". Summary "Showing 1 of 14 cards · Clear filters" unchanged. The empty boxes are centred in their dashed frames and all four columns keep the same header row, so the board still reads as a board while nearly empty.

S25

filter Bug + search logo

index.html · 1280×800 · click input[name='label-filter'][value='bug'] · fill #search "logo" · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L25 saw

Desktop, Bug chip on plus "logo" in the search. Bug chip is dark with its red dot ringed white; the summary says "Showing 1 of 14 cards". Review shows Broken logo on older Safari with "1 card hidden by the filter and search" beneath; the other three columns show "No cards match the filter and search" — the longest version of the note still fits one line inside the 250px dashed box. The combined cause is stated, so either control can be the one to undo.

V15verified D15 by L24

Search-only states say 'the search'; L25 shows the combined wording for chip + search.

S26

add a card: submitted in Review

index.html · 1280×800 · click #col-review .add-card-btn · type Launch-day checklist · press Enter · wait 400

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L26 saw

Desktop, "Launch-day checklist" typed into Review's form and Enter pressed. The new card lands at Review position 3 — a bare card with just its title and "Medium", no label row, the ⋯ aligned with the title — and the form stays open under it with an empty field ("What needs doing?" placeholder) still focused, ready for the next one. Review counts 3 and the caption and summary say 15 cards. The bare card looks thinner than its neighbours, which is honest for a card nobody has filled in yet.

S27

add a card: empty submit shows the error

index.html · 1280×800 · element #col-backlog · click #col-backlog .add-card-btn · press Enter · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L27 saw

Backlog close-up after opening its form and pressing Enter with nothing typed. The field keeps focus with a red border inside the indigo ring, and "Give the card a title first." appears in bold red under it, above Add and Cancel. No empty card was created (count still 5). The message is specific and sits exactly where the eye already is.

S28

phone: Hero copy picked up and moved to Review

index.html · 375×812 · focus #card-SB-106 · press Space · press ArrowRight · wait 500

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L28 saw

Phone 375x812: Space on Hero copy, then →. The board scrolled sideways to Review on its own and snapped, the switcher's white pill moved to "Review", and Hero copy sits lifted at the top of the tinted Review column (count 3) above Navigation keyboard support — the phone keyboard path works. The hint bar spans the bottom as a dark block, but its status breaks as "Moving ‘Hero copy’ · Review, position 1 of" / "3" — the number that matters is orphaned on its own line — and the four key groups take two more lines, so the bar is four lines tall and covers the next card (Broken logo on older Safari) up to its title.

D16 defect #kb-hint @375

On phones the hint bar's status orphans the position count ('…Review, position 1 of' / '3') and the whole bar runs four lines, covering the card below the carried one.

F18fix for D16

Hint status joins 'position N of M' with no-break spaces and uses text-wrap: balance; on phones the bar drops to 12.5px with tighter key gaps (app.js showHint, styles.css .kb-hint-status and the ≤640px .kb-hint rules).

S29

phone: Hero copy moved to Review (after D16)

index.html · 375×812 · focus #card-SB-106 · press Space · press ArrowRight · wait 500

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L29 saw

Phone, same move after F18. The status is one line now — "Moving ‘Hero copy’ · Review, position 1 of 3" — and the bar is three lines instead of four, so Broken logo on older Safari keeps its title visible above it. Remaining unevenness: the key row fits three groups on the first line (← → column, ↑ ↓ position, Space drop) and leaves "Esc cancel" alone on the second, so the bar ends on a stray fragment rather than a tidy block.

F19fix for D16

Second pass after L29: while moving, the phone hint lays its four key groups on a 2×2 grid (← → column | ↑ ↓ position / Space drop | Esc cancel); the idle three-group hint stays a wrapping row.

S30

phone: Hero copy moved to Review (D16 second pass)

index.html · 375×812 · focus #card-SB-106 · press Space · press ArrowRight · wait 500

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L30 saw

Phone, same move after the second pass. The hint bar is a tidy three-line block: the one-line status "Moving ‘Hero copy’ · Review, position 1 of 3", then the keys as a 2×2 grid — "← → column" beside "↑ ↓ position", "Space drop" beside "Esc cancel" — columns aligned, no stray fragment. It stops below Broken logo on older Safari's title. The carried Hero copy at the top of the tinted Review column, the snapped board and the switcher pill on "Review" are unchanged.

V16verified D16 by L30

One-line status with the count intact, keys in an even 2×2 grid; the bar no longer covers the next card's title.

S31

phone: card dialog

index.html · 375×812 · click #card-SB-106 · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L31 saw

Phone, Hero copy tapped: the dialog fills the width minus 16px margins and ends at y≈740, so it fits one screen. Kicker, title, Design chip, description and the five checklist rows are all comfortable at this width. The facts panel is the weak part: its 2-column grid wraps the values unevenly — "Ana Kowalski" drops below the AK circle, "Fri, Sep 25, / 2026" breaks after the comma, and PRIORITY sits alone on a second grid row under ASSIGNEE — so the three facts read as a ragged block rather than a list.

D18 defect .dlg-facts @375

On phones the dialog's facts panel wraps its values raggedly (name under the avatar, 'Fri, Sep 25, / 2026', Priority alone on a second grid row) instead of reading as a clean list.

S32

phone: Design filter

index.html · 375×812 · full page, 1 screen(s) · click input[name='label-filter'][value='design'] · wait 200

S32 screen 1
L32 saw

Phone, Design chip tapped, full page (one screen, 812px). Design is the dark chip with its ringed dot; "Showing 5 of 14 cards · Clear filters" now appears under the chips because a filter is on (it was hidden while idle). The Backlog column shows only Cookie banner copy review and "4 cards hidden by the filter", then Add a card; In progress peeks at the right edge with its two Design cards. The page shortens to one screen and nothing overflows.

S33

phone: menu on an off-screen column's card

index.html · 375×812 · click li[data-id='SB-109'] .card-menu-btn · wait 400

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L33 saw

Phone, ⋯ tapped on Navigation keyboard support while the board was still on Backlog (the judge's second click, on "Move to… In progress", timed out twice). The picture shows why: the board has scrolled and snapped to Review to bring the button into view, the ⋯ has its pressed grey background — and there is no menu at all. The menu opened and was dismissed straight away by the scroll the tap itself caused.

D17 defect #board scroll → closeMenu

On phones a tap on ⋯ in a column that is not snapped into place opens the menu and closes it in the same moment: the tap scrolls the board to bring the button into view (or a snap is still settling after a swipe), and every board scroll event closes the menu. S34 shows the menu working once the board is at rest.

S34

phone: board already on Review, then ⋯ tapped

index.html · 375×812 · scroll-to #col-review · wait 600 · click li[data-id='SB-109'] .card-menu-btn · wait 400

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L34 saw

Phone, board first scrolled to Review, then ⋯ tapped on Navigation keyboard support. The menu opens and stays: a white popover right-aligned under the ⋯ with "Open card", the MOVE TO… label and Backlog / In progress / Review (greyed, "Current") / Done, each with its column dot, all within the 375px width. So the menu itself works on a phone; S33's failure is the dismiss-on-board-scroll rule firing on a scroll that the tap started.

F20fix for D17

Board scroll no longer closes the menu unconditionally: positionMenu() (split out of openMenu) re-anchors it under its ⋯ on every board scroll, and it closes only when the button has left the board's visible width (triggerInBoard).

F21fix for D18

At ≤640px the dialog facts are a one-column list: each fact a flex row with the small-caps label at the left and the value right-aligned.

S35

phone: In progress over the limit via Move to… (after D17)

index.html · 375×812 · click li[data-id='SB-109'] .card-menu-btn · click .menu-item[data-to='progress'] · wait 500

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L35 saw

Phone, ⋯ tapped on Navigation keyboard support from the Backlog view, then Move to… In progress — the same two clicks that timed out in S33 now go through. The board has followed the move to In progress (switcher pill on "In progress"), the column is red with "WIP 4 / 3", and the alert reads "Over the WIP limit by 1 card" in bold red over the grey "Finish something before starting more." (one line at this width). Navigation keyboard support is last, with its Due today chip; the Review column peeks at the right.

S36

phone: dialog for an overdue card (after D18)

index.html · 375×812 · click #card-SB-108 · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L36 saw

Phone dialog for Search API pagination (overdue, urgent) after D18. The facts are now a list: ASSIGNEE — green JW circle and "Jonas Weber" right-aligned on one line; PRIORITY — red square "Urgent" on one line; DUE DATE — "Tue, Sep 22, 2026" with the red "Overdue by 1 day" chip right-aligned beneath it. Better than the ragged grid, but the label itself now breaks: "DUE" / "DATE" stacks into two lines beside the two-line value, the only label on the panel that wraps. Description and the 4-of-5 checklist below are fine; the dialog fits the screen.

V17verified D17 by L35

The ⋯ tap that scrolls the board no longer loses the menu: Move to… In progress completes from the Backlog view.

F22fix for D18

Second pass after L36: the fact labels are flex: none + nowrap, so 'DUE DATE' stays one line and the value takes the remaining width.

S37

phone: dialog for an overdue card (D18 second pass)

index.html · 375×812 · click #card-SB-108 · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L37 saw

Phone dialog for Search API pagination after the second pass. All three labels — ASSIGNEE, DUE DATE, PRIORITY — sit on one line each at the left of the facts panel, vertically centred on their values: "JW Jonas Weber", "Tue, Sep 22, 2026" with the red "Overdue by 1 day" chip right-aligned under it, and "Urgent" with the red square. The panel now reads as a three-row list; the rest of the dialog is unchanged and fits the screen.

V18verified D18 by L37

Facts read as a clean label/value list on phones; no label wraps.

S38

New task opens the Backlog form

index.html · 1280×800 · click #new-task · wait 300

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L38 saw

Desktop, "New task" clicked. The page scrolls down to the Backlog's foot, where the inline form is open under Responsive images for case studies: "Card title" label, the focused textarea with its indigo ring and "What needs doing?" placeholder, then Add and Cancel. Right destination and focus — typing goes straight in. But the reveal stops with the form flush against the bottom of the screen: the white panel's lower edge touches the viewport edge, so the Add/Cancel row looks like it is about to be cut off. The header (and the button that was clicked) has scrolled out of view, which is acceptable for a jump to the form.

D19 defect .add-form (reveal)

Opening a column's add form (New task, or a header +) scrolls it only until it touches the viewport's bottom edge, so the form's panel sits flush with the screen edge and reads as clipped.

S39

keyboard: move cancelled with Escape

index.html · 1280×800 · focus #card-SB-102 · press Space · press ArrowRight · press ArrowRight · press Escape · wait 300

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L39 saw

Desktop: Space on Footer links 404 on /press, → twice (it travelled to Review), then Escape. It is back exactly where it started — Backlog position 2, between Audit legacy URL redirects and Cookie banner copy review — flat, with only the keyboard focus ring; In progress is back to "WIP 3 / 3", Review to 2, and no column is tinted. The idle hint bar is showing again. The cancel restores the board precisely.

F23fix for D19

The add form carries scroll-margin 16px 12px 32px, so the reveal after New task / + / Add a card leaves 32px of column below it instead of stopping at the edge.

S40

New task opens the Backlog form (after D19)

index.html · 1280×800 · click #new-task · wait 300

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L40 saw

Desktop, "New task" after D19. The page now scrolls to its end: the Backlog form is fully in view with its Add/Cancel row, the Backlog panel's rounded bottom edge and a strip of canvas below it, so nothing reads as clipped. The textarea is focused (indigo ring). The column headers have scrolled just off the top — the jump puts the thing you are about to type into in the middle of attention, which is the point of the button.

V19verified D19 by L40

Form revealed with the column's bottom edge and canvas below it, not flush with the screen edge.

G32exit 0vlmkit check interactions index.html --max-elements 60

elements 44 · suspects 0 · warns 0

output, 50 line(s), 45.1s
vlmkit check interactions
source: index.html

status: ok
interactive elements: 44

  - [link] "Skip to board" focus✓
  - [searchbox] "Search card titles" focus✓
  - [button] "New task" focus✓ | Enter: focus moves within
  - [radio] "all" focus✓ | ArrowDown: layout change | announces
  - [radio] "design" unreachable | ArrowDown: layout change | announces
  - [radio] "frontend" unreachable | ArrowDown: layout change | announces
  - [radio] "backend" unreachable | ArrowDown: layout change | announces
  - [radio] "bug" unreachable | ArrowDown: focus moves
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Audit legacy URL redirects" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Audit legacy URL redirects" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Footer links 404 on /press" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Footer links 404 on /press" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Cookie banner copy review" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Cookie banner copy review" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Newsletter signup endpoint" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Newsletter signup endpoint" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Responsive images for case studies" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Responsive images for case studies" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Hero copy" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Hero copy" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Pricing page layout" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Pricing page layout" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Search API pagination" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Search API pagination" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Navigation keyboard support" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Navigation keyboard support" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Broken logo on older Safari" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Broken logo on older Safari" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
  - [button] "Brand colour tokens" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Brand colour tokens" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Staging environment" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Staging environment" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Content inventory" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Content inventory" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Login form double submit" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Login form double submit" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
G33exit 0vlmkit check motion index.html

activeAnimations 0 · running 0 · issues 0

output, 33 line(s), 1.4s
vlmkit check motion
source: index.html

status: ok
samples: 19
active animations: 0
active transitions: 19
running animations: 0
paused animations: 0
reduced-motion rule: yes

Motion samples:
  - #col-backlog: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-101: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-102: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-103: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-104: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-105: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-progress: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-106: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-107: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-108: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-review: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-109: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-110: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-done: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-111: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-112: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-113: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-114: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #dlg-progress-bar: animation=none 0s running; transition=width 0.18s

No motion issues detected.
S41

first Tab: skip link

index.html · 1280×800 · element .appbar · press Tab · wait 100

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L41 saw

App bar close-up after the first Tab. "Skip to board" appears top-left as a dark pill with the indigo focus ring, laid over the brand — the "ard" of "Sprintboard" peeks out to its right. It is the conventional transient skip link (it disappears on the next Tab), readable and first in the order; the partial overlap of the wordmark is only visible while it has focus, so I leave it.

S42

Tab to the chips, ArrowRight selects Design

index.html · 1280×800 · element .app-header · press Tab · press Tab · press Tab · press Tab · press ArrowRight · wait 200

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L42 saw

Header close-up after four Tabs (skip link, search, New task, chip group) and ArrowRight. The radio group moved its selection to Design: the Design chip is dark with its purple dot ringed white and carries a clear 2px indigo focus ring offset from the pill, while All returns to outline. The summary switched to "Showing 5 of 14 cards · Clear filters". So the invisible radio inputs still give a visible keyboard focus on the chip itself.

R4 · final check

builder
G34exit 0vlmkit check integrity index.html

verdict: CLEAN (0 fail, 0 warn, 294 exempted)

verdict clean · findings 0 · fails 0 · warns 0 · exempted 294 · viewports 3

output, 27 line(s), 4.4s
vlmkit check integrity
source: index.html

verdict: CLEAN (0 fail, 0 warn, 294 exempted)
  1280x800: 8 component(s), ink 65.5%, 182 text block(s)
  768x900: 8 component(s), ink 64.3%, 182 text block(s)
  375x700: 8 component(s), ink 55.3%, 186 text block(s)

No integrity defects detected.

Exempted candidates (the tool's call — audit the rule, not the page):
  - [text-collision] ul.team > li:nth-of-type(1) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(1) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(2) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(2) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(3) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(3) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(4) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(4) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] legend.sr-only @1280: clipped away by legend.sr-only (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] span.count.count--wip > span:nth-of-type(2) @1280: clipped away by span.count.count--wip > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(4) @1280: clipped away by #meta-SB-102 > span:nth-of-type(4) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(4) @1280: clipped away by #meta-SB-107 > span:nth-of-type(4) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  … 279 more
G35exit 0vlmkit check copy index.html --manifest copy.txt

missing 0 · placeholders 0 · manifestLines 9 · statesExplored 14 · revealedOnly 0

output, 9 line(s), 2.0s
vlmkit check copy
source: index.html

status: ok
rendered text: 1971 chars
disclosure states: 14 explored (details / tabs / aria-expanded)
manifest: 9 line(s), missing 0

No copy issues detected.
G36exit 0vlmkit check design index.html

verdict: COHERENT (0 finding(s))

verdict coherent · drifting 0 · roles 6

output, 24 line(s), 1.6s
vlmkit check design
source: index.html

verdict: COHERENT (0 finding(s))
  roles judged: 2 of 6 seen, spacing values: 15
  coverage: 45 of 467 visible element(s) carried an inferable role
    no role: span x95, rect x68, svg x66, div x56, circle x46, path x34, +11 more tag(s)
    A role comes from role="..." or from button/input/select/textarea/h1-h6. Layout elements
    (div, span, p, a) have none, so a large skip count is normal — this gate judges components,
    not every box. Add role="..." where an element IS a component to widen the coverage.
  text-free: 18 (0 judged on box alone — font-size/weight is not observable without painted text)

Role reuse (instances / distinct styles; drift below 3x from 3 instances)
  button          37 inst    5 styles  reuse   7.4x  1 one-off  ok
  h2               4 inst    1 styles  reuse     4x  0 one-off  ok
  search           1 inst    1 styles  reuse     1x  1 one-off  not judged
  input:search     1 inst    1 styles  reuse     1x  1 one-off  not judged
  h1               1 inst    1 styles  reuse     1x  1 one-off  not judged
  status           1 inst    1 styles  reuse     1x  1 one-off  not judged
  not judged: search (1), input:search (1), h1 (1), status (1) — under --min-instances 3, so no finding can come from them.
  To keep judging them: --min-instances 2 --min-reuse 2 (both — a 2-instance role cannot reach 3x however many instances the floor allows).

No design drift detected.
G37exit 0vlmkit check composition index.html

verdict: COMPOSED (0 finding(s))

verdict composed · proximity 0 · flatSteps 0 · railNearMisses 0

output, 16 line(s), 1.6s
vlmkit check composition
source: index.html

verdict: COMPOSED (0 finding(s))
  measured: 0 label(s), 2 heading level(s), 6 wide block(s) on 1 left / 1 right rail(s) — from 253 visible box(es)
  5 label(s) not judged: they open a box that paints its own group edge, so nothing above them could be mis-grouped with

Type hierarchy (largest instance of each declared level)
  h1     26px / 700   h1#board-title
  h2   14.5px / 700   h2#col-backlog-title
  body 12px, largest 26px (2.17x), heaviest +100 weight

Group gaps: 0px between heading-led groups vs 8px inside them (0x, 1 sample(s)). Context only — intact pages measure 0.86-3.00x, so this cannot carry a verdict.

Proximity, alignment and type hierarchy all read consistently.
G38exit 0vlmkit check color index.html

verdict: CONSISTENT (0 finding(s))

verdict consistent · base #eef1f5 · bodyInk #4b5567 · linkInk #172033 · invisibleControls 0 · colorOnlyLinks 0 · unreadableColors 0

output, 27 line(s), 1.6s
vlmkit check color
source: index.html

verdict: CONSISTENT (0 finding(s))
  measured: 1 control(s), 1 link(s) in a text flow — from 387 visible box(es)

Palette (by painted area; reported, never judged — see the rejected candidates in the module docs)
  surfaces  3 distinct
    #eef1f5   47.2%     1 el  
    #e2e7ee   32.5%     4 el  section#col-backlog
    #ffffff   20.4%    20 el  header.app-header>div.appbar
  ink       10 distinct
    #4b5567   40.4%    98 el  div.board-head>div.board-title>p.board-meta
    #172033   35.3%    27 el  div.appbar>div.brand>span.brand-name
    #ffffff    9.9%    22 el  a.skip-link
    #065f46    3.4%     6 el  div#labels-SB-101>span.label
    #1e40af    3.0%     5 el  div#labels-SB-102>span.label
    …and 5 more
  marks     6 distinct
    #101828   49.2%    56 el  div#card-SB-101
    #d3d9e3   36.5%    16 el  section#col-backlog
    #d9dee7    5.9%     1 el  header.app-header>div.appbar
    #c3cad6    4.6%    16 el  fieldset.chips>label.chip>span
    #6b7588    3.1%     4 el  input#search
    …and 1 more
  base #eef1f5, body ink #4b5567, link ink #172033 on 15 element(s)
G39exit 0vlmkit check a11y contrast index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-contrast

inspected 183 · failures 0

output, 5 line(s), 1.5s
  vlmkit check a11y contrast
  html: examples/sites/kanban/index.html
  inspected 183 text-bearing element(s)
  ✓ 0 contrast failure(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-contrast/report.md
G40exit 0vlmkit check a11y contrast 'file://$PWD/examples/sites/kanban/index.html?replay=drop' --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-contrast-2

inspected 184 · failures 0

output, 5 line(s), 1.5s
  vlmkit check a11y contrast
  html: file://examples/sites/kanban/index.html?replay=drop
  inspected 184 text-bearing element(s)
  ✓ 0 contrast failure(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-contrast-2/report.md
G41exit 0vlmkit check a11y focus index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-focus

steps 40 · findings 0

output, 5 line(s), 1.6s
  vlmkit check a11y focus
  source: index.html
  captured 40 focus step(s)
  ✓ 0 finding(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-focus/report.md
G42exit 0vlmkit check a11y focus index.html --viewport 1280x1100 --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-focus-tall

steps 40 · findings 0

output, 5 line(s), 1.5s
  vlmkit check a11y focus
  source: index.html
  captured 40 focus step(s)
  ✓ 0 finding(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-focus-tall/report.md
G43exit 0vlmkit check a11y touch index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-touch

level AA · inspected 39 · failures 0 · wcagExempt 0

output, 5 line(s), 1.5s
  vlmkit check a11y touch
  source: index.html  level: WCAG AA (24×24 min)
  inspected 39 interactive element(s)
  ✓ 0 undersized target(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-touch/report.md
G44exit 0vlmkit check a11y touch index.html --viewport 375x812 --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-touch-m

level AA · inspected 39 · failures 0 · wcagExempt 0

output, 5 line(s), 1.4s
  vlmkit check a11y touch
  source: index.html  level: WCAG AA (24×24 min)
  inspected 39 interactive element(s)
  ✓ 0 undersized target(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/a11y-touch-m/report.md
G45exit 0vlmkit scan scroll index.html

containers 0 · overflowX 0 · issues 20

output, 36 line(s), 1.4s
vlmkit scan scroll
source: index.html (1280x720)

status: warn
  exits 0 — 20 warn(s) did not fail this command. To gate on one: --rule clipped-content=suspect
page: 1280x942 — horizontal overflow 0px, vertical scroll 222px
scroll containers: 0 (dead scrollports 5, clipped 20)

Dead scrollports (declared scrollable, content fits):
  - #new-backlog (overflow: auto auto)
  - #new-progress (overflow: auto auto)
  - #new-review (overflow: auto auto)
  - #new-done (overflow: auto auto)
  - #card-dialog (overflow: auto auto)

Issues:
  ! clipped-content #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) clips 194px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1) clips 188px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(4): #meta-SB-103 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-106 > span:nth-of-type(4): #meta-SB-106 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-111 > span:nth-of-type(4): #meta-SB-111 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-105 > span:nth-of-type(3): #meta-SB-105 > span:nth-of-type(3) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-109 > span:nth-of-type(4): #meta-SB-109 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-114 > span:nth-of-type(4): #meta-SB-114 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(4): #meta-SB-101 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(4): #meta-SB-108 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-112 > span:nth-of-type(4): #meta-SB-112 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-104 > span:nth-of-type(4): #meta-SB-104 > span:nth-of-type(4) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-113 > span:nth-of-type(4): #meta-SB-113 > span:nth-of-type(4) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(4): #meta-SB-102 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-107 > span:nth-of-type(4): #meta-SB-107 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-110 > span:nth-of-type(4): #meta-SB-110 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content legend.sr-only: legend.sr-only clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
G46exit 0vlmkit scan scroll index.html --viewport 375x812

containers 1 · overflowX 0 · issues 20

output, 41 line(s), 1.3s
vlmkit scan scroll
source: index.html (375x812)

status: warn
  exits 0 — 20 warn(s) did not fail this command. To gate on one: --rule clipped-content=suspect
page: 375x1074 — horizontal overflow 0px, vertical scroll 262px
scroll containers: 1 (dead scrollports 5, clipped 20)

Scroll containers:
  - #board: axis=x overflow=953px box=(0,349) 375x725

Dead scrollports (declared scrollable, content fits):
  - #new-backlog (overflow: auto auto)
  - #new-progress (overflow: auto auto)
  - #new-review (overflow: auto auto)
  - #new-done (overflow: auto auto)
  - #card-dialog (overflow: auto auto)

Issues:
  ! clipped-content #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) clips 194px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1) clips 188px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(4): #meta-SB-103 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-106 > span:nth-of-type(4): #meta-SB-106 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-111 > span:nth-of-type(4): #meta-SB-111 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-105 > span:nth-of-type(3): #meta-SB-105 > span:nth-of-type(3) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-109 > span:nth-of-type(4): #meta-SB-109 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-114 > span:nth-of-type(4): #meta-SB-114 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(4): #meta-SB-101 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(4): #meta-SB-108 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-112 > span:nth-of-type(4): #meta-SB-112 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-104 > span:nth-of-type(4): #meta-SB-104 > span:nth-of-type(4) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-113 > span:nth-of-type(4): #meta-SB-113 > span:nth-of-type(4) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(4): #meta-SB-102 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-107 > span:nth-of-type(4): #meta-SB-107 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-110 > span:nth-of-type(4): #meta-SB-110 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content legend.sr-only: legend.sr-only clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.

Contract hint: --json emits 1 expectedScrollports entry ready for a UI Contract.
G47exit 1vlmkit scan handlers index.html --probe-drag

registrations 175 · elements 69 · suspects 4

output, 99 line(s), 9.5s
vlmkit scan handlers
source: index.html

status: 4 suspect issue(s), 1 warn
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendJWAudit legacy UR": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendMRNavigation keyb": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignAKBrand colour tokens": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendJWAudit legacy UR": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendMRResponsive images for c": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignAKHero copyHigh priority2/5 checkl": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPNPricing page layoutHigh ": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendJWSearch API paginationUrgent pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendMRNavigation keyboard supportMed": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendPNBroken logo on older Safari": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignAKBrand colour tokensMedium priori": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendJWStaging environmentMedium prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignLOContent inventoryLow priority6/6": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendMRLogin form double submitHigh": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape cancelled it and 20% of it stayed changed) (mid-drag contrast 15.6:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape cancelled it and 27% of it stayed changed) (mid-drag contrast 14.8:1 → 6.2:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (highlighted 2% while hovering) (Escape cancelled it and 19% of it stayed changed) (mid-drag contrast 15.4:1 → 6.4:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (no visible change while hovering) (Escape cancelled it and 23% of it stayed changed) (mid-drag contrast 15.7:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (no visible change while hovering) (mid-drag contrast 15.8:1 → 6.5:1 at opacity 1)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 20% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 27% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 19% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 23% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
G48exit 0vlmkit scan handlers 'file://$PWD/examples/sites/kanban/index.html?animate=0' --probe-drag

registrations 175 · elements 69 · suspects 0

output, 96 line(s), 9.7s
vlmkit scan handlers
source: file://examples/sites/kanban/index.html?animate=0

status: 1 warn(s)
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule unprobed-handler-types=suspect
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendJWAudit legacy UR": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendMRNavigation keyb": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignAKBrand colour tokens": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendJWAudit legacy UR": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendMRResponsive images for c": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignAKHero copyHigh priority2/5 checkl": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPNPricing page layoutHigh ": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendJWSearch API paginationUrgent pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendMRNavigation keyboard supportMed": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendPNBroken logo on older Safari": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignAKBrand colour tokensMedium priori": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendJWStaging environmentMedium prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignLOContent inventoryLow priority6/6": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendMRLogin form double submitHigh": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape reverted it cleanly) (mid-drag contrast 15.6:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape reverted it cleanly) (mid-drag contrast 14.8:1 → 6.2:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (no visible change while hovering) (Escape reverted it cleanly) (mid-drag contrast 15.4:1 → 6.4:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (no visible change while hovering) (Escape reverted it cleanly) (mid-drag contrast 15.7:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (no visible change while hovering) (mid-drag contrast 15.8:1 → 6.5:1 at opacity 1)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
G49exit 0vlmkit check interactions index.html --max-elements 60

elements 44 · suspects 0 · warns 0

output, 50 line(s), 45.2s
vlmkit check interactions
source: index.html

status: ok
interactive elements: 44

  - [link] "Skip to board" focus✓
  - [searchbox] "Search card titles" focus✓
  - [button] "New task" focus✓ | Enter: focus moves within
  - [radio] "all" focus✓ | ArrowDown: layout change | announces
  - [radio] "design" unreachable | ArrowDown: layout change | announces
  - [radio] "frontend" unreachable | ArrowDown: layout change | announces
  - [radio] "backend" unreachable | ArrowDown: layout change | announces
  - [radio] "bug" unreachable | ArrowDown: focus moves
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Audit legacy URL redirects" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Audit legacy URL redirects" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Footer links 404 on /press" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Footer links 404 on /press" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Cookie banner copy review" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Cookie banner copy review" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Newsletter signup endpoint" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Newsletter signup endpoint" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Responsive images for case studies" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Responsive images for case studies" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Hero copy" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Hero copy" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Pricing page layout" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Pricing page layout" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Search API pagination" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Search API pagination" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Navigation keyboard support" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Navigation keyboard support" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Broken logo on older Safari" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Broken logo on older Safari" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
  - [button] "Brand colour tokens" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Brand colour tokens" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Staging environment" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Staging environment" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Content inventory" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Content inventory" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Login form double submit" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Login form double submit" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
G50exit 0vlmkit check motion index.html

activeAnimations 0 · running 0 · issues 0

output, 33 line(s), 1.3s
vlmkit check motion
source: index.html

status: ok
samples: 19
active animations: 0
active transitions: 19
running animations: 0
paused animations: 0
reduced-motion rule: yes

Motion samples:
  - #col-backlog: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-101: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-102: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-103: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-104: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-105: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-progress: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-106: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-107: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-108: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-review: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-109: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-110: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-done: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-111: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-112: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-113: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-114: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #dlg-progress-bar: animation=none 0s running; transition=width 0.18s

No motion issues detected.
G51exit 0vlmkit check animation 'file://$PWD/examples/sites/kanban/index.html?replay=drop'

animations 2 · settleMs 180 · issues 0

output, 13 line(s), 3.0s
vlmkit check animation
source: file://examples/sites/kanban/index.html?replay=drop (1280x720)

status: ok
animations: 2 (evaluated 2, infinite 0)
settle: 180ms
reduced-motion: honored

Evaluated animations:
  - #card-SB-106 `sb-settle` 180ms x1: visible, motion region (658,367) 276x113, peak frame delta 0.50%
  - #card-SB-106 `sb-settle-shadow` 180ms x1: visible, motion region (652,377) 288x112, peak frame delta 0.39%

No animation issues detected.
G52exit 0vlmkit check animation 'file://$PWD/examples/sites/kanban/index.html?replay=drop&animate=0'

animations 0 · settleMs 0 · issues 0

output, 8 line(s), 1.5s
vlmkit check animation
source: file://examples/sites/kanban/index.html?replay=drop&animate=0 (1280x720)

status: ok
animations: 0 (evaluated 0, infinite 0)
settle: 0ms

No animation issues detected.
G53exit 0vlmkit check animation index.html

animations 0 · settleMs 0 · issues 0

output, 8 line(s), 1.5s
vlmkit check animation
source: index.html (1280x720)

status: ok
animations: 0 (evaluated 0, infinite 0)
settle: 0ms

No animation issues detected.
G54exit 0vlmkit check scroll index.html --viewport 375x812

pageScrolled 262 · stickyFixed 0 · engagedSticky 0 · snaps 1 · issues 1

output, 14 line(s), 1.4s
vlmkit check scroll
source: index.html

status: warn
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule snap-not-snapping=suspect
page scrolled: 262px
sticky/fixed elements: 0 (sticky engaged by the scroll: 0)
snap containers driven: 1

Snap containers:
  - #board: x mandatory, settled at 0px (4 snap-aligned children)

Issues:
  ! snap-not-snapping #board: #board declares scroll-snap-type x mandatory but settled at offset 0px, aligned to no child snap edge (nearest candidates: 16, 343, 670, 997px) — children may be missing scroll-snap-align.
G55exit 0vlmkit check breakpoints index.html --sweep

breakpoints 3 · issues 0 · sweepRanges 0

output, 12 line(s), 3.5s
vlmkit check breakpoints
source: index.html

status: ok
width sweep: 320-1280px step 25 (39 widths) — clean
breakpoints checked: 640, 860, 1179px (each at B-1 / B / B+1)

  640px: clean (max-width: 640px)
  860px: clean (max-width: 860px)
  1179px: clean (max-width: 1179px)

All boundaries consistent.
G56exit 0vlmkit check grounding index.html

targets 36 · scale 0.5 · issues 5

output, 37 line(s), 1.4s
vlmkit check grounding
source: index.html (1280x720)

status: warn
  exits 0 — 5 warn(s) did not fail this command. To gate on one: --rule imprecise-target=suspect (also: crowded-target, ambiguous-target)
frame: 640x360 screenshot px — medium, cap 640x480, scale 0.50 (every coordinate below is in these 640x360 pixels)
targets: 36 actionable in frame (3 disabled or out of the frame)

Action map (click point in screenshot px):
  t2 searchbox "Search card titles" @ (483,15) 150x19 #search
  t3 button "New task" @ (596,15) 64x19 #new-task
  t4 button "Add a card to Backlog" @ (147,114) 14x14 #col-backlog > div:nth-of-type(1) > button:nth-of-type(1)
  t5 button "Backend JW Audit legacy URL redirects Medium pr…" @ (86,154) 137x54 #card-SB-101
  t6 button "Actions for Audit legacy URL redirects" @ (145,138) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t7 button "Bug Frontend PN Footer links 404 on /press High…" @ (86,212) 137x54 #card-SB-102
  t8 button "Actions for Footer links 404 on /press" @ (145,196) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t9 button "Design AK Cookie banner copy review Low priorit…" @ (86,270) 137x54 #card-SB-103
  t10 button "Actions for Cookie banner copy review" @ (145,254) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)
  t11 button "Backend LO Newsletter signup endpoint Medium pr…" @ (86,328) 137x54 #card-SB-104
  t12 button "Actions for Newsletter signup endpoint" @ (145,312) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(4) > button:nth-of-type(1)
  t13 button "Frontend Backend MR Responsive images for case …" @ (86,360) 137x64 #card-SB-105 [imprecise-target,crowded-target]
  t16 button "Add a card to In progress" @ (303,114) 14x14 #col-progress > div:nth-of-type(1) > button:nth-of-type(1)
  t17 button "Design AK Hero copy High priority 2/5 checklist…" @ (242,154) 137x54 #card-SB-106
  t18 button "Actions for Hero copy" @ (301,138) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t19 button "Design Frontend PN Pricing page layout High pri…" @ (242,212) 137x54 #card-SB-107
  t20 button "Actions for Pricing page layout" @ (301,196) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t21 button "Backend JW Search API pagination Urgent priorit…" @ (242,270) 137x54 #card-SB-108
  t22 button "Actions for Search API pagination" @ (301,254) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)
  t23 button "Add a card" @ (242,310) 137x18 #col-progress > div:nth-of-type(2) > button:nth-of-type(1) [ambiguous-target]
  … 16 more — --json emits the full map

Issues:
  ! imprecise-target: #card-SB-105 (button "Frontend Backend MR Responsive images for case …") shows 137x1 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x64); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.
  ! crowded-target: #card-SB-105's click point is 5px from #card-SB-104 (button "Backend LO Newsletter signup endpoint Medium pr…") — a coordinate off by 6px activates the neighbour instead.
  ! imprecise-target: #col-done > div:nth-of-type(2) > button:nth-of-type(1) (button "Add a card") shows 137x1 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x18); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.
  ! crowded-target: #col-done > div:nth-of-type(2) > button:nth-of-type(1)'s click point is 5px from #card-SB-114 (button "Bug Backend MR Login form double submit High pr…") — a coordinate off by 6px activates the neighbour instead.
  ! ambiguous-target: 3 buttons in the frame all read "Add a card" (t23 at 242,310, t29 at 398,252, t39 at 554,360) — distinguishable only by their surrounding text (In progress WIP 3 / 3 cards, li… / Review 2 cards Frontend MR Navi… / Done 4 cards Design AK Brand co…), so an accessible name carrying it would let an agent name one.
G57exit 0vlmkit check grounding index.html --viewport 1280x1000

targets 38 · scale 0.48 · issues 1

output, 33 line(s), 1.4s
vlmkit check grounding
source: index.html (1280x1000)

status: warn
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule ambiguous-target=suspect
frame: 614x480 screenshot px — medium, cap 640x480, scale 0.48 (every coordinate below is in these 614x480 pixels)
targets: 38 actionable in frame (1 disabled or out of the frame)

Action map (click point in screenshot px):
  t2 searchbox "Search card titles" @ (463,14) 144x18 #search
  t3 button "New task" @ (572,14) 62x18 #new-task
  t4 button "Add a card to Backlog" @ (141,110) 13x13 #col-backlog > div:nth-of-type(1) > button:nth-of-type(1)
  t5 button "Backend JW Audit legacy URL redirects Medium pr…" @ (83,148) 132x52 #card-SB-101
  t6 button "Actions for Audit legacy URL redirects" @ (139,132) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t7 button "Bug Frontend PN Footer links 404 on /press High…" @ (83,204) 132x52 #card-SB-102
  t8 button "Actions for Footer links 404 on /press" @ (139,188) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t9 button "Design AK Cookie banner copy review Low priorit…" @ (83,259) 132x52 #card-SB-103
  t10 button "Actions for Cookie banner copy review" @ (139,244) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)
  t11 button "Backend LO Newsletter signup endpoint Medium pr…" @ (83,315) 132x52 #card-SB-104
  t12 button "Actions for Newsletter signup endpoint" @ (139,300) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(4) > button:nth-of-type(1)
  t13 button "Frontend Backend MR Responsive images for case …" @ (83,376) 132x61 #card-SB-105
  t14 button "Actions for Responsive images for case studies" @ (139,356) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1)
  t15 button "Add a card" @ (83,419) 132x17 #col-backlog > div:nth-of-type(2) > button:nth-of-type(1) [ambiguous-target]
  t16 button "Add a card to In progress" @ (290,110) 13x13 #col-progress > div:nth-of-type(1) > button:nth-of-type(1)
  t17 button "Design AK Hero copy High priority 2/5 checklist…" @ (232,148) 132x52 #card-SB-106
  t18 button "Actions for Hero copy" @ (288,132) 13x13 #col-progress > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t19 button "Design Frontend PN Pricing page layout High pri…" @ (232,204) 132x52 #card-SB-107
  t20 button "Actions for Pricing page layout" @ (288,188) 13x13 #col-progress > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t21 button "Backend JW Search API pagination Urgent priorit…" @ (232,259) 132x52 #card-SB-108
  … 18 more — --json emits the full map

Issues:
  ! ambiguous-target: 4 buttons in the frame all read "Add a card" (t15 at 83,419, t23 at 232,298, t29 at 382,242, t39 at 532,354) — distinguishable only by their surrounding text (Backlog 5 cards Backend JW Audi… / In progress WIP 3 / 3 cards, li… / Review 2 cards Frontend MR Navi… / Done 4 cards Design AK Brand co…), so an accessible name carrying it would let an agent name one.
G58exit 1vlmkit stress i18n index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n

inflate 1.4 · inspected 291 · overflowing 103

output, 11 line(s), 1.6s
  vlmkit stress i18n
  html: examples/sites/kanban/index.html  inflate: 1.4x
  ✗ 103 overflow / wrap issue(s) across 291 inspected element(s)
    [horizontal-overflow] main#board>section#col-progress>div.column-head>span.count.count--wip>span.sr-only — scrollW 144 > clientW 1
    [horizontal-overflow] section#col-backlog>ol.card-list>li.card-item>div#card-SB-105>div.card-top — scrollW 220 > clientW 218
    [horizontal-overflow] li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    … 97 more (see the report, or --json for all)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n/report.md
D20 defect .column-head .count

Under 1.4x text inflation (G58's after-image) the In progress header wraps its title to two lines and breaks the WIP pill inside itself — 'WIPXX 3X /X' over '3X' — so the count spills out of its pill. A longer translated column name ('In Bearbeitung') in a 250px column would do the same: the pill has no nowrap and the header gives the title no room to wrap on its own.

F24fix for D20

Count pills and the + button are flex: none with white-space: nowrap, so 'WIP 3 / 3' never breaks; the h2 title gets min-width: 0 and overflow-wrap: break-word, so a long column name wraps inside the title instead of squeezing the pill.

G59exit 1vlmkit stress i18n index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-2

inflate 1.4 · inspected 291 · overflowing 103

output, 11 line(s), 1.6s
  vlmkit stress i18n
  html: examples/sites/kanban/index.html  inflate: 1.4x
  ✗ 103 overflow / wrap issue(s) across 291 inspected element(s)
    [horizontal-overflow] main#board>section#col-progress>div.column-head>span.count.count--wip>span.sr-only — scrollW 144 > clientW 1
    [horizontal-overflow] section#col-backlog>ol.card-list>li.card-item>div#card-SB-105>div.card-top — scrollW 220 > clientW 218
    [horizontal-overflow] li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    … 97 more (see the report, or --json for all)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-2/report.md
F25fix for D20

Second pass after G59's after-image: with break-word the unbreakable 'progressXXXX' kept its min-content width inside the flex h2 and ran under the pill; overflow-wrap: anywhere lets the title's text shrink with the h2 (words still wrap at spaces first, and only a word longer than the whole line is broken).

G60exit 1vlmkit stress i18n index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-3

inflate 1.4 · inspected 291 · overflowing 103

output, 11 line(s), 1.7s
  vlmkit stress i18n
  html: examples/sites/kanban/index.html  inflate: 1.4x
  ✗ 103 overflow / wrap issue(s) across 291 inspected element(s)
    [horizontal-overflow] main#board>section#col-progress>div.column-head>span.count.count--wip>span.sr-only — scrollW 144 > clientW 1
    [horizontal-overflow] section#col-backlog>ol.card-list>li.card-item>div#card-SB-105>div.card-top — scrollW 220 > clientW 218
    [horizontal-overflow] li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    [horizontal-overflow] li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.check>span.sr-only — scrollW 214 > clientW 1
    … 97 more (see the report, or --json for all)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-3/report.md
G61exit 1vlmkit stress i18n index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-4 --json

inflate 1.4 · inspected 291 · overflowing 103

output, 4041 line(s), 1.6s
{
  "gate": "stress.i18n",
  "command": "stress i18n",
  "verdict": "fail",
  "counts": {
    "suspect": 71,
    "warn": 32,
    "info": 0
  },
  "findings": [
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 144px) — \"cards,XXX limitXX 3X\"",
      "evidence": {
        "path": "main#board>section#col-progress>div.column-head>span.count.count--wip>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 89
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 144
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 218px -> 218px (scroll 220px) — \"FrontendXXXXBackendXXXMRX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105>div.card-top",
        "tag": "div",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 44,
          "clientWidth": 218,
          "scrollWidth": 220
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-109>div#meta-SB-109>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 218px -> 218px (scroll 220px) — \"FrontendXXXXMRX\"",
      "evidence": {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>div.card-top",
        "tag": "div",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 220
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-105>div#meta-SB-105>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-109>div#meta-SB-109>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-105>div#meta-SB-105>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 218px -> 218px (scroll 220px) — \"BugXXBackendXXXMRX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114>div.card-top",
        "tag": "div",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 220
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 310px) — \",X wasXX dueXX Tue,XX SepXX 22,XX 2026XX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 189
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 310
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 315px) — \",X wasXX dueXX Mon,XX SepXX 21,XX 2026XX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 195
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 315
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 253px) — \"AssignedXXXX toX MarcoXX ReyesXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-114>div#meta-SB-114>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 250px) — \"AssignedXXXX toX LeaXX OkaforXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-113>div#meta-SB-113>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 158
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 250
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 251px) — \"AssignedXXXX toX JonasXX WeberXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-112>div#meta-SB-112>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 276px) — \"AssignedXXXX toX AnaXX KowalskiXXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-111>div#meta-SB-111>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 234px) — \"AssignedXXXX toX PriyaXX NairXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-110>div#meta-SB-110>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 253px) — \"AssignedXXXX toX MarcoXX ReyesXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-109>div#meta-SB-109>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 251px) — \"AssignedXXXX toX JonasXX WeberXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-108>div#meta-SB-108>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 234px) — \"AssignedXXXX toX PriyaXX NairXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-107>div#meta-SB-107>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 276px) — \"AssignedXXXX toX AnaXX KowalskiXXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-106>div#meta-SB-106>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 253px) — \"AssignedXXXX toX MarcoXX ReyesXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div#meta-SB-105>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 250px) — \"AssignedXXXX toX LeaXX OkaforXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-104>div#meta-SB-104>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 158
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 250
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 276px) — \"AssignedXXXX toX AnaXX KowalskiXXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-103>div#meta-SB-103>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 234px) — \"AssignedXXXX toX PriyaXX NairXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-102>div#meta-SB-102>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 251px) — \"AssignedXXXX toX JonasXX WeberXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-101>div#meta-SB-101>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 55px) — \"cardsXX\"",
      "evidence": {
        "path": "main#board>section#col-backlog>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 55px) — \"cardsXX\"",
      "evidence": {
        "path": "main#board>section#col-review>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 55px) — \"cardsXX\"",
      "evidence": {
        "path": "main#board>section#col-done>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 24px -> 24px (scroll 26px) — \"MRX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-114>div.card-top>span.avatar",
        "tag": "span",
        "before": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 24
        },
        "after": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 26
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 24px -> 24px (scroll 26px) — \"MRX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-109>div.card-top>span.avatar",
        "tag": "span",
        "before": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 24
        },
        "after": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 26
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 24px -> 24px (scroll 26px) — \"MRX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div.card-top>span.avatar",
        "tag": "span",
        "before": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 24
        },
        "after": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 26
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 217px) — \"ShowXX cardsXX labelledXXXX\"",
      "evidence": {
        "path": "header.app-header>div.filter-bar>fieldset.chips>legend.sr-only",
        "tag": "legend",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 217
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 199px) — \"SearchXXX cardXX titlesXXX\"",
      "evidence": {
        "path": "header.app-header>div.appbar>div.search>label.sr-only",
        "tag": "label",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 122
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 199
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 124px) — \"LeaXX OkaforXXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 124
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 125px) — \"JonasXX WeberXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 125
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 106px) — \"PriyaXX NairXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 106
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 127px) — \"MarcoXX ReyesXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 127
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 149px) — \"AnaXX KowalskiXXXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 149
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"UrgentXXX priorityXXXX4/5XX checklistXXXX itemsXX doneXXOver\"",
      "evidence": {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108>div#meta-SB-108",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"SearchXXX APIXX paginationXXXX\"",
      "evidence": {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX1/3XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104>div#meta-SB-104",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"HighXX priorityXXXX1/3XX checklistXXXX itemsXX doneXXOverdue\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102>div#meta-SB-102",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX1/4XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101>div#meta-SB-101",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX5/5XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>div#meta-SB-109",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"NewsletterXXXX signupXXX endpointXXXX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"CookieXXX bannerXXX copyXX reviewXXX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"FooterXXX linksXX 404XX onX /pressXXX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102>p#title-SB-102",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"AuditXX legacyXXX URLXX redirectsXXXX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"BrokenXXX logoXX onX olderXX SafariXXX\"",
      "evidence": {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-110>p#title-SB-110",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"NavigationXXXX keyboardXXXX supportXXX\"",
      "evidence": {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>p#title-SB-109",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 218px -> 218px (scroll 218px) — \"DesignXXXFrontendXXXXPNX\"",
      "evidence": {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-107>div.card-top",
        "tag": "div",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 44,
          "clientWidth": 218,
          "scrollWidth": 218
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX3/3XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112>div#meta-SB-112",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX4/4XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-111>div#meta-SB-111",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"LoginXX formXX doubleXXX submitXXX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114>p#title-SB-114",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"StagingXXX environmentXXXXX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112>p#title-SB-112",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BackendXXXJWXSearchXXX APIXX paginationXXXXUrgentXXX priorit\"",
      "evidence": {
        "path": "main#board>section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"DesignXXXFrontendXXXXPNXPricingXXX pageXX layoutXXXHighXX pr\"",
      "evidence": {
        "path": "main#board>section#col-progress>ol.card-list>li.card-item>div#card-SB-107",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 128.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 141px -> 186px (scroll 186px) — \"DesignXXXFrontendXXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-107>div.card-top>div#labels-SB-107",
        "tag": "div",
        "before": {
          "width": 140.765625,
          "height": 20,
          "clientWidth": 141,
          "scrollWidth": 141
        },
        "after": {
          "width": 186,
          "height": 44,
          "clientWidth": 186,
          "scrollWidth": 186
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 151px -> 186px (scroll 186px) — \"FrontendXXXXBackendXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div.card-top>div#labels-SB-105",
        "tag": "div",
        "before": {
          "width": 151.234375,
          "height": 20,
          "clientWidth": 151,
          "scrollWidth": 151
        },
        "after": {
          "width": 186,
          "height": 44,
          "clientWidth": 186,
          "scrollWidth": 186
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"FrontendXXXXBackendXXXMRXResponsiveXXXX imagesXXX forXX case\"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 147.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BackendXXXLOXNewsletterXXXX signupXXX endpointXXXXMediumXXX \"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"DesignXXXAKXCookieXXX bannerXXX copyXX reviewXXXLowXX priori\"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BugXXFrontendXXXXPNXFooterXXX linksXX 404XX onX /pressXXXHig\"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BackendXXXJWXAuditXX legacyXXX URLXX redirectsXXXXMediumXXX \"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BugXXFrontendXXXXPNXBrokenXXX logoXX onX olderXX SafariXXXHi\"",
      "evidence": {
        "path": "main#board>section#col-review>ol.card-list>li.card-item>div#card-SB-110",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"FrontendXXXXMRXNavigationXXXX keyboardXXXX supportXXXMediumX\"",
      "evidence": {
        "path": "main#board>section#col-review>ol.card-list>li.card-item>div#card-SB-109",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BugXXBackendXXXMRXLoginXX formXX doubleXXX submitXXXHighXX p\"",
      "evidence": {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-114",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BackendXXXJWXStagingXXX environmentXXXXXMediumXXX priorityXX\"",
      "evidence": {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-112",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"DesignXXXAKXBrandXX colourXXX tokensXXXMediumXXX priorityXXX\"",
      "evidence": {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-111",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 136.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 111px -> 101px (scroll 101px) — \"InX progressXXXX\"",
      "evidence": {
        "path": "main#board>section#col-progress>div.column-head>h2#col-progress-title",
        "tag": "h2",
        "before": {
          "width": 110.890625,
          "height": 21.015625,
          "clientWidth": 111,
          "scrollWidth": 111
        },
        "after": {
          "width": 101.265625,
          "height": 63.046875,
          "clientWidth": 101,
          "scrollWidth": 101
        }
      }
    }
  ],
  "suppressed": [],
  "retuned": [],
  "report": {
    "html": "examples/sites/kanban/index.html",
    "inflateFactor": 1.4,
    "beforeScreenshot": "/tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-4/before.png",
    "afterScreenshot": "/tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-4/after.png",
    "overflowing": [
      {
        "path": "main#board>section#col-progress>div.column-head>span.count.count--wip>span.sr-only",
        "tag": "span",
        "text": "cards,XXX limitXX 3X",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 89
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 144
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105>div.card-top",
        "tag": "div",
        "text": "FrontendXXXXBackendXXXMRX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 44,
          "clientWidth": 218,
          "scrollWidth": 220
        }
      },
      {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-109>div#meta-SB-109>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>div.card-top",
        "tag": "div",
        "text": "FrontendXXXXMRX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 220
        }
      },
      {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-105>div#meta-SB-105>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-109>div#meta-SB-109>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-105>div#meta-SB-105>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114>div.card-top",
        "tag": "div",
        "text": "BugXXBackendXXXMRX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 220
        }
      },
      {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.due>span.sr-only",
        "tag": "span",
        "text": ",X wasXX dueXX Tue,XX SepXX 22,XX 2026XX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 189
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 310
        }
      },
      {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.due>span.sr-only",
        "tag": "span",
        "text": ",X wasXX dueXX Mon,XX SepXX 21,XX 2026XX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 195
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 315
        }
      },
      {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-114>div#meta-SB-114>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX MarcoXX ReyesXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-113>div#meta-SB-113>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX LeaXX OkaforXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 158
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 250
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-112>div#meta-SB-112>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX JonasXX WeberXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-111>div#meta-SB-111>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX AnaXX KowalskiXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-110>div#meta-SB-110>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX PriyaXX NairXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-109>div#meta-SB-109>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX MarcoXX ReyesXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-108>div#meta-SB-108>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX JonasXX WeberXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-107>div#meta-SB-107>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX PriyaXX NairXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-106>div#meta-SB-106>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX AnaXX KowalskiXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div#meta-SB-105>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX MarcoXX ReyesXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-104>div#meta-SB-104>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX LeaXX OkaforXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 158
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 250
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-103>div#meta-SB-103>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX AnaXX KowalskiXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-102>div#meta-SB-102>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX PriyaXX NairXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-101>div#meta-SB-101>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX JonasXX WeberXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      },
      {
        "path": "main#board>section#col-backlog>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "text": "cardsXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      },
      {
        "path": "main#board>section#col-review>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "text": "cardsXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      },
      {
        "path": "main#board>section#col-done>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "text": "cardsXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-114>div.card-top>span.avatar",
        "tag": "span",
        "text": "MRX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 24
        },
        "after": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 26
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-109>div.card-top>span.avatar",
        "tag": "span",
        "text": "MRX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 24
        },
        "after": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 26
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div.card-top>span.avatar",
        "tag": "span",
        "text": "MRX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 24
        },
        "after": {
          "width": 24,
          "height": 24,
          "clientWidth": 24,
          "scrollWidth": 26
        }
      },
      {
        "path": "header.app-header>div.filter-bar>fieldset.chips>legend.sr-only",
        "tag": "legend",
        "text": "ShowXX cardsXX labelledXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 217
        }
      },
      {
        "path": "header.app-header>div.appbar>div.search>label.sr-only",
        "tag": "label",
        "text": "SearchXXX cardXX titlesXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 122
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 199
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "LeaXX OkaforXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 124
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "JonasXX WeberXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 125
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "PriyaXX NairXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 106
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "MarcoXX ReyesXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 127
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "AnaXX KowalskiXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 149
        }
      },
      {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108>div#meta-SB-108",
        "tag": "div",
        "text": "UrgentXXX priorityXXXX4/5XX checklistXXXX itemsXX doneXXOver",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
        "tag": "p",
        "text": "SearchXXX APIXX paginationXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104>div#meta-SB-104",
        "tag": "div",
        "text": "MediumXXX priorityXXXX1/3XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102>div#meta-SB-102",
        "tag": "div",
        "text": "HighXX priorityXXXX1/3XX checklistXXXX itemsXX doneXXOverdue",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101>div#meta-SB-101",
        "tag": "div",
        "text": "MediumXXX priorityXXXX1/4XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>div#meta-SB-109",
        "tag": "div",
        "text": "MediumXXX priorityXXXX5/5XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
        "tag": "p",
        "text": "NewsletterXXXX signupXXX endpointXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
        "tag": "p",
        "text": "CookieXXX bannerXXX copyXX reviewXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102>p#title-SB-102",
        "tag": "p",
        "text": "FooterXXX linksXX 404XX onX /pressXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
        "tag": "p",
        "text": "AuditXX legacyXXX URLXX redirectsXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-110>p#title-SB-110",
        "tag": "p",
        "text": "BrokenXXX logoXX onX olderXX SafariXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>p#title-SB-109",
        "tag": "p",
        "text": "NavigationXXXX keyboardXXXX supportXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-107>div.card-top",
        "tag": "div",
        "text": "DesignXXXFrontendXXXXPNX",
        "kind": "vertical-wrap",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 44,
          "clientWidth": 218,
          "scrollWidth": 218
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112>div#meta-SB-112",
        "tag": "div",
        "text": "MediumXXX priorityXXXX3/3XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-111>div#meta-SB-111",
        "tag": "div",
        "text": "MediumXXX priorityXXXX4/4XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114>p#title-SB-114",
        "tag": "p",
        "text": "LoginXX formXX doubleXXX submitXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112>p#title-SB-112",
        "tag": "p",
        "text": "StagingXXX environmentXXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "main#board>section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
        "tag": "div",
        "text": "BackendXXXJWXSearchXXX APIXX paginationXXXXUrgentXXX priorit",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-progress>ol.card-list>li.card-item>div#card-SB-107",
        "tag": "div",
        "text": "DesignXXXFrontendXXXXPNXPricingXXX pageXX layoutXXXHighXX pr",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 128.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-107>div.card-top>div#labels-SB-107",
        "tag": "div",
        "text": "DesignXXXFrontendXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 140.765625,
          "height": 20,
          "clientWidth": 141,
          "scrollWidth": 141
        },
        "after": {
          "width": 186,
          "height": 44,
          "clientWidth": 186,
          "scrollWidth": 186
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div.card-top>div#labels-SB-105",
        "tag": "div",
        "text": "FrontendXXXXBackendXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 151.234375,
          "height": 20,
          "clientWidth": 151,
          "scrollWidth": 151
        },
        "after": {
          "width": 186,
          "height": 44,
          "clientWidth": 186,
          "scrollWidth": 186
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
        "tag": "div",
        "text": "FrontendXXXXBackendXXXMRXResponsiveXXXX imagesXXX forXX case",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 147.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
        "tag": "div",
        "text": "BackendXXXLOXNewsletterXXXX signupXXX endpointXXXXMediumXXX ",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
        "tag": "div",
        "text": "DesignXXXAKXCookieXXX bannerXXX copyXX reviewXXXLowXX priori",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
        "tag": "div",
        "text": "BugXXFrontendXXXXPNXFooterXXX linksXX 404XX onX /pressXXXHig",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
        "tag": "div",
        "text": "BackendXXXJWXAuditXX legacyXXX URLXX redirectsXXXXMediumXXX ",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-review>ol.card-list>li.card-item>div#card-SB-110",
        "tag": "div",
        "text": "BugXXFrontendXXXXPNXBrokenXXX logoXX onX olderXX SafariXXXHi",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-review>ol.card-list>li.card-item>div#card-SB-109",
        "tag": "div",
        "text": "FrontendXXXXMRXNavigationXXXX keyboardXXXX supportXXXMediumX",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-114",
        "tag": "div",
        "text": "BugXXBackendXXXMRXLoginXX formXX doubleXXX submitXXXHighXX p",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-112",
        "tag": "div",
        "text": "BackendXXXJWXStagingXXX environmentXXXXXMediumXXX priorityXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-111",
        "tag": "div",
        "text": "DesignXXXAKXBrandXX colourXXX tokensXXXMediumXXX priorityXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 136.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-progress>div.column-head>h2#col-progress-title",
        "tag": "h2",
        "text": "InX progressXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 110.890625,
          "height": 21.015625,
          "clientWidth": 111,
          "scrollWidth": 111
        },
        "after": {
          "width": 101.265625,
          "height": 63.046875,
          "clientWidth": 101,
          "scrollWidth": 101
        }
      }
    ],
    "totalInspected": 291,
    "reportPath": "/tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-4/report.md"
  }
}
D21 defect .avatar

Avatars are fixed circles (24px on cards, 32px in the header), so any initials longer than two letters spill out: G61 measures 'MRX' at 26px inside the 24px circle on SB-105, SB-109 and SB-114, pushing each card's top row 2px past its box. Three-letter initials are ordinary (e.g. M. R. Díaz).

V20verified D20 by G60

G60's after-image: the In progress header wraps its title to 'InX / progress / XXXX' inside the h2 while 'WIPXX 3X /X 3X' stays one line in its pill beside it; no overlap, + still at the right.

F26fix for D21

Avatars are min-width circles with inline padding and border-radius 999px (header 32px, phone 28px, cards and dialog 24px): two initials still render as a circle, longer ones widen into a pill.

G62exit 1vlmkit stress i18n index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-5 --json

inflate 1.4 · inspected 291 · overflowing 98

output, 3846 line(s), 1.6s
{
  "gate": "stress.i18n",
  "command": "stress i18n",
  "verdict": "fail",
  "counts": {
    "suspect": 65,
    "warn": 33,
    "info": 0
  },
  "findings": [
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 144px) — \"cards,XXX limitXX 3X\"",
      "evidence": {
        "path": "main#board>section#col-progress>div.column-head>span.count.count--wip>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 89
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 144
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-109>div#meta-SB-109>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-105>div#meta-SB-105>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 214px) — \"checklistXXXX itemsXX doneXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.check>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-109>div#meta-SB-109>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-105>div#meta-SB-105>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 87px) — \"priorityXXXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.prio>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 310px) — \",X wasXX dueXX Tue,XX SepXX 22,XX 2026XX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 189
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 310
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 315px) — \",X wasXX dueXX Mon,XX SepXX 21,XX 2026XX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 195
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 315
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 45px) — \"DueXX\"",
      "evidence": {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.due>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 253px) — \"AssignedXXXX toX MarcoXX ReyesXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-114>div#meta-SB-114>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 250px) — \"AssignedXXXX toX LeaXX OkaforXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-113>div#meta-SB-113>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 158
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 250
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 251px) — \"AssignedXXXX toX JonasXX WeberXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-112>div#meta-SB-112>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 276px) — \"AssignedXXXX toX AnaXX KowalskiXXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-111>div#meta-SB-111>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 234px) — \"AssignedXXXX toX PriyaXX NairXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-110>div#meta-SB-110>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 253px) — \"AssignedXXXX toX MarcoXX ReyesXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-109>div#meta-SB-109>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 251px) — \"AssignedXXXX toX JonasXX WeberXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-108>div#meta-SB-108>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 234px) — \"AssignedXXXX toX PriyaXX NairXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-107>div#meta-SB-107>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 276px) — \"AssignedXXXX toX AnaXX KowalskiXXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-106>div#meta-SB-106>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 253px) — \"AssignedXXXX toX MarcoXX ReyesXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div#meta-SB-105>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 250px) — \"AssignedXXXX toX LeaXX OkaforXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-104>div#meta-SB-104>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 158
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 250
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 276px) — \"AssignedXXXX toX AnaXX KowalskiXXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-103>div#meta-SB-103>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 234px) — \"AssignedXXXX toX PriyaXX NairXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-102>div#meta-SB-102>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 251px) — \"AssignedXXXX toX JonasXX WeberXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-101>div#meta-SB-101>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 55px) — \"cardsXX\"",
      "evidence": {
        "path": "main#board>section#col-backlog>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 55px) — \"cardsXX\"",
      "evidence": {
        "path": "main#board>section#col-review>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 55px) — \"cardsXX\"",
      "evidence": {
        "path": "main#board>section#col-done>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 217px) — \"ShowXX cardsXX labelledXXXX\"",
      "evidence": {
        "path": "header.app-header>div.filter-bar>fieldset.chips>legend.sr-only",
        "tag": "legend",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 217
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 199px) — \"SearchXXX cardXX titlesXXX\"",
      "evidence": {
        "path": "header.app-header>div.appbar>div.search>label.sr-only",
        "tag": "label",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 122
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 199
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 124px) — \"LeaXX OkaforXXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 124
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 125px) — \"JonasXX WeberXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 125
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 106px) — \"PriyaXX NairXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 106
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 127px) — \"MarcoXX ReyesXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 127
        }
      }
    },
    {
      "rule": "horizontal-overflow",
      "severity": "suspect",
      "message": "horizontal-overflow at 1.4x text — 1px -> 1px (scroll 149px) — \"AnaXX KowalskiXXXX\"",
      "evidence": {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 149
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"UrgentXXX priorityXXXX4/5XX checklistXXXX itemsXX doneXXOver\"",
      "evidence": {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108>div#meta-SB-108",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"SearchXXX APIXX paginationXXXX\"",
      "evidence": {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX1/3XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104>div#meta-SB-104",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"HighXX priorityXXXX1/3XX checklistXXXX itemsXX doneXXOverdue\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102>div#meta-SB-102",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX1/4XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101>div#meta-SB-101",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX5/5XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>div#meta-SB-109",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"NewsletterXXXX signupXXX endpointXXXX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"CookieXXX bannerXXX copyXX reviewXXX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"FooterXXX linksXX 404XX onX /pressXXX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102>p#title-SB-102",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"AuditXX legacyXXX URLXX redirectsXXXX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"BrokenXXX logoXX onX olderXX SafariXXX\"",
      "evidence": {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-110>p#title-SB-110",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"NavigationXXXX keyboardXXXX supportXXX\"",
      "evidence": {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>p#title-SB-109",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 218px -> 218px (scroll 218px) — \"DesignXXXFrontendXXXXPNX\"",
      "evidence": {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-107>div.card-top",
        "tag": "div",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 44,
          "clientWidth": 218,
          "scrollWidth": 218
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX3/3XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112>div#meta-SB-112",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"MediumXXX priorityXXXX4/4XX checklistXXXX itemsXX doneXXDueX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-111>div#meta-SB-111",
        "tag": "div",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 218px -> 218px (scroll 218px) — \"FrontendXXXXBackendXXXMRX\"",
      "evidence": {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105>div.card-top",
        "tag": "div",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 44,
          "clientWidth": 218,
          "scrollWidth": 218
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"LoginXX formXX doubleXXX submitXXX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114>p#title-SB-114",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 248px -> 248px (scroll 248px) — \"StagingXXX environmentXXXXX\"",
      "evidence": {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112>p#title-SB-112",
        "tag": "p",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BackendXXXJWXSearchXXX APIXX paginationXXXXUrgentXXX priorit\"",
      "evidence": {
        "path": "main#board>section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"DesignXXXFrontendXXXXPNXPricingXXX pageXX layoutXXXHighXX pr\"",
      "evidence": {
        "path": "main#board>section#col-progress>ol.card-list>li.card-item>div#card-SB-107",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 128.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 141px -> 178px (scroll 178px) — \"DesignXXXFrontendXXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-107>div.card-top>div#labels-SB-107",
        "tag": "div",
        "before": {
          "width": 140.765625,
          "height": 20,
          "clientWidth": 141,
          "scrollWidth": 141
        },
        "after": {
          "width": 177.984375,
          "height": 44,
          "clientWidth": 178,
          "scrollWidth": 178
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 151px -> 176px (scroll 176px) — \"FrontendXXXXBackendXXX\"",
      "evidence": {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div.card-top>div#labels-SB-105",
        "tag": "div",
        "before": {
          "width": 151.234375,
          "height": 20,
          "clientWidth": 151,
          "scrollWidth": 151
        },
        "after": {
          "width": 176.03125,
          "height": 44,
          "clientWidth": 176,
          "scrollWidth": 176
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"FrontendXXXXBackendXXXMRXResponsiveXXXX imagesXXX forXX case\"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 147.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BackendXXXLOXNewsletterXXXX signupXXX endpointXXXXMediumXXX \"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"DesignXXXAKXCookieXXX bannerXXX copyXX reviewXXXLowXX priori\"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BugXXFrontendXXXXPNXFooterXXX linksXX 404XX onX /pressXXXHig\"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BackendXXXJWXAuditXX legacyXXX URLXX redirectsXXXXMediumXXX \"",
      "evidence": {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BugXXFrontendXXXXPNXBrokenXXX logoXX onX olderXX SafariXXXHi\"",
      "evidence": {
        "path": "main#board>section#col-review>ol.card-list>li.card-item>div#card-SB-110",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"FrontendXXXXMRXNavigationXXXX keyboardXXXX supportXXXMediumX\"",
      "evidence": {
        "path": "main#board>section#col-review>ol.card-list>li.card-item>div#card-SB-109",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BugXXBackendXXXMRXLoginXX formXX doubleXXX submitXXXHighXX p\"",
      "evidence": {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-114",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"BackendXXXJWXStagingXXX environmentXXXXXMediumXXX priorityXX\"",
      "evidence": {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-112",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 274px -> 274px (scroll 272px) — \"DesignXXXAKXBrandXX colourXXX tokensXXXMediumXXX priorityXXX\"",
      "evidence": {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-111",
        "tag": "div",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 136.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      }
    },
    {
      "rule": "vertical-wrap",
      "severity": "warn",
      "message": "vertical-wrap at 1.4x text — 111px -> 101px (scroll 101px) — \"InX progressXXXX\"",
      "evidence": {
        "path": "main#board>section#col-progress>div.column-head>h2#col-progress-title",
        "tag": "h2",
        "before": {
          "width": 110.890625,
          "height": 21.015625,
          "clientWidth": 111,
          "scrollWidth": 111
        },
        "after": {
          "width": 101.265625,
          "height": 63.046875,
          "clientWidth": 101,
          "scrollWidth": 101
        }
      }
    }
  ],
  "suppressed": [],
  "retuned": [],
  "report": {
    "html": "examples/sites/kanban/index.html",
    "inflateFactor": 1.4,
    "beforeScreenshot": "/tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-5/before.png",
    "afterScreenshot": "/tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-5/after.png",
    "overflowing": [
      {
        "path": "main#board>section#col-progress>div.column-head>span.count.count--wip>span.sr-only",
        "tag": "span",
        "text": "cards,XXX limitXX 3X",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 89
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 144
        }
      },
      {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-109>div#meta-SB-109>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-105>div#meta-SB-105>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.check>span.sr-only",
        "tag": "span",
        "text": "checklistXXXX itemsXX doneXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 214
        }
      },
      {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-109>div#meta-SB-109>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-105>div#meta-SB-105>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.prio>span.sr-only",
        "tag": "span",
        "text": "priorityXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 50
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 87
        }
      },
      {
        "path": "li.card-item>div#card-SB-114>div#meta-SB-114>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-113>div#meta-SB-113>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-112>div#meta-SB-112>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-111>div#meta-SB-111>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-110>div#meta-SB-110>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-108>div#meta-SB-108>span.meta.due>span.sr-only",
        "tag": "span",
        "text": ",X wasXX dueXX Tue,XX SepXX 22,XX 2026XX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 189
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 310
        }
      },
      {
        "path": "li.card-item>div#card-SB-107>div#meta-SB-107>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-106>div#meta-SB-106>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-104>div#meta-SB-104>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-103>div#meta-SB-103>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "li.card-item>div#card-SB-102>div#meta-SB-102>span.meta.due>span.sr-only",
        "tag": "span",
        "text": ",X wasXX dueXX Mon,XX SepXX 21,XX 2026XX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 195
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 315
        }
      },
      {
        "path": "li.card-item>div#card-SB-101>div#meta-SB-101>span.meta.due>span.sr-only",
        "tag": "span",
        "text": "DueXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 27
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 45
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-114>div#meta-SB-114>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX MarcoXX ReyesXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-113>div#meta-SB-113>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX LeaXX OkaforXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 158
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 250
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-112>div#meta-SB-112>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX JonasXX WeberXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-111>div#meta-SB-111>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX AnaXX KowalskiXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-110>div#meta-SB-110>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX PriyaXX NairXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-109>div#meta-SB-109>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX MarcoXX ReyesXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-108>div#meta-SB-108>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX JonasXX WeberXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-107>div#meta-SB-107>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX PriyaXX NairXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-106>div#meta-SB-106>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX AnaXX KowalskiXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div#meta-SB-105>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX MarcoXX ReyesXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 170
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 253
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-104>div#meta-SB-104>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX LeaXX OkaforXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 158
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 250
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-103>div#meta-SB-103>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX AnaXX KowalskiXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 174
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 276
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-102>div#meta-SB-102>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX PriyaXX NairXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 151
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 234
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-101>div#meta-SB-101>span.sr-only",
        "tag": "span",
        "text": "AssignedXXXX toX JonasXX WeberXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 168
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 251
        }
      },
      {
        "path": "main#board>section#col-backlog>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "text": "cardsXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      },
      {
        "path": "main#board>section#col-review>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "text": "cardsXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      },
      {
        "path": "main#board>section#col-done>div.column-head>span.count>span.sr-only",
        "tag": "span",
        "text": "cardsXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 37
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 55
        }
      },
      {
        "path": "header.app-header>div.filter-bar>fieldset.chips>legend.sr-only",
        "tag": "legend",
        "text": "ShowXX cardsXX labelledXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 140
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 217
        }
      },
      {
        "path": "header.app-header>div.appbar>div.search>label.sr-only",
        "tag": "label",
        "text": "SearchXXX cardXX titlesXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 122
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 199
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "LeaXX OkaforXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 124
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "JonasXX WeberXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 125
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "PriyaXX NairXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 106
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "MarcoXX ReyesXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 127
        }
      },
      {
        "path": "div.board-head>div.team-wrap>ul.team>li>span.sr-only",
        "tag": "span",
        "text": "AnaXX KowalskiXXXX",
        "kind": "horizontal-overflow",
        "before": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 76
        },
        "after": {
          "width": 1,
          "height": 1,
          "clientWidth": 1,
          "scrollWidth": 149
        }
      },
      {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108>div#meta-SB-108",
        "tag": "div",
        "text": "UrgentXXX priorityXXXX4/5XX checklistXXXX itemsXX doneXXOver",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-108>p#title-SB-108",
        "tag": "p",
        "text": "SearchXXX APIXX paginationXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104>div#meta-SB-104",
        "tag": "div",
        "text": "MediumXXX priorityXXXX1/3XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102>div#meta-SB-102",
        "tag": "div",
        "text": "HighXX priorityXXXX1/3XX checklistXXXX itemsXX doneXXOverdue",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101>div#meta-SB-101",
        "tag": "div",
        "text": "MediumXXX priorityXXXX1/4XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>div#meta-SB-109",
        "tag": "div",
        "text": "MediumXXX priorityXXXX5/5XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104",
        "tag": "p",
        "text": "NewsletterXXXX signupXXX endpointXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-103>p#title-SB-103",
        "tag": "p",
        "text": "CookieXXX bannerXXX copyXX reviewXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-102>p#title-SB-102",
        "tag": "p",
        "text": "FooterXXX linksXX 404XX onX /pressXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-101>p#title-SB-101",
        "tag": "p",
        "text": "AuditXX legacyXXX URLXX redirectsXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-110>p#title-SB-110",
        "tag": "p",
        "text": "BrokenXXX logoXX onX olderXX SafariXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-review>ol.card-list>li.card-item>div#card-SB-109>p#title-SB-109",
        "tag": "p",
        "text": "NavigationXXXX keyboardXXXX supportXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-progress>ol.card-list>li.card-item>div#card-SB-107>div.card-top",
        "tag": "div",
        "text": "DesignXXXFrontendXXXXPNX",
        "kind": "vertical-wrap",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 44,
          "clientWidth": 218,
          "scrollWidth": 218
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112>div#meta-SB-112",
        "tag": "div",
        "text": "MediumXXX priorityXXXX3/3XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-111>div#meta-SB-111",
        "tag": "div",
        "text": "MediumXXX priorityXXXX4/4XX checklistXXXX itemsXX doneXXDueX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 22,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 50,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-backlog>ol.card-list>li.card-item>div#card-SB-105>div.card-top",
        "tag": "div",
        "text": "FrontendXXXXBackendXXXMRX",
        "kind": "vertical-wrap",
        "before": {
          "width": 218,
          "height": 24,
          "clientWidth": 218,
          "scrollWidth": 218
        },
        "after": {
          "width": 218,
          "height": 44,
          "clientWidth": 218,
          "scrollWidth": 218
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-114>p#title-SB-114",
        "tag": "p",
        "text": "LoginXX formXX doubleXXX submitXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "section#col-done>ol.card-list>li.card-item>div#card-SB-112>p#title-SB-112",
        "tag": "p",
        "text": "StagingXXX environmentXXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 248,
          "height": 19.3125,
          "clientWidth": 248,
          "scrollWidth": 248
        },
        "after": {
          "width": 248,
          "height": 38.625,
          "clientWidth": 248,
          "scrollWidth": 248
        }
      },
      {
        "path": "main#board>section#col-progress>ol.card-list>li.card-item>div#card-SB-108",
        "tag": "div",
        "text": "BackendXXXJWXSearchXXX APIXX paginationXXXXUrgentXXX priorit",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-progress>ol.card-list>li.card-item>div#card-SB-107",
        "tag": "div",
        "text": "DesignXXXFrontendXXXXPNXPricingXXX pageXX layoutXXXHighXX pr",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 128.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-107>div.card-top>div#labels-SB-107",
        "tag": "div",
        "text": "DesignXXXFrontendXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 140.765625,
          "height": 20,
          "clientWidth": 141,
          "scrollWidth": 141
        },
        "after": {
          "width": 177.984375,
          "height": 44,
          "clientWidth": 178,
          "scrollWidth": 178
        }
      },
      {
        "path": "ol.card-list>li.card-item>div#card-SB-105>div.card-top>div#labels-SB-105",
        "tag": "div",
        "text": "FrontendXXXXBackendXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 151.234375,
          "height": 20,
          "clientWidth": 151,
          "scrollWidth": 151
        },
        "after": {
          "width": 176.03125,
          "height": 44,
          "clientWidth": 176,
          "scrollWidth": 176
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-105",
        "tag": "div",
        "text": "FrontendXXXXBackendXXXMRXResponsiveXXXX imagesXXX forXX case",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 147.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-104",
        "tag": "div",
        "text": "BackendXXXLOXNewsletterXXXX signupXXX endpointXXXXMediumXXX ",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-103",
        "tag": "div",
        "text": "DesignXXXAKXCookieXXX bannerXXX copyXX reviewXXXLowXX priori",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-102",
        "tag": "div",
        "text": "BugXXFrontendXXXXPNXFooterXXX linksXX 404XX onX /pressXXXHig",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-backlog>ol.card-list>li.card-item>div#card-SB-101",
        "tag": "div",
        "text": "BackendXXXJWXAuditXX legacyXXX URLXX redirectsXXXXMediumXXX ",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-review>ol.card-list>li.card-item>div#card-SB-110",
        "tag": "div",
        "text": "BugXXFrontendXXXXPNXBrokenXXX logoXX onX olderXX SafariXXXHi",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-review>ol.card-list>li.card-item>div#card-SB-109",
        "tag": "div",
        "text": "FrontendXXXXMRXNavigationXXXX keyboardXXXX supportXXXMediumX",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-114",
        "tag": "div",
        "text": "BugXXBackendXXXMRXLoginXX formXX doubleXXX submitXXXHighXX p",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 127.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-112",
        "tag": "div",
        "text": "BackendXXXJWXStagingXXX environmentXXXXXMediumXXX priorityXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 155.625,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-done>ol.card-list>li.card-item>div#card-SB-111",
        "tag": "div",
        "text": "DesignXXXAKXBrandXX colourXXX tokensXXXMediumXXX priorityXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 274,
          "height": 108.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        },
        "after": {
          "width": 274,
          "height": 136.3125,
          "clientWidth": 272,
          "scrollWidth": 272
        }
      },
      {
        "path": "main#board>section#col-progress>div.column-head>h2#col-progress-title",
        "tag": "h2",
        "text": "InX progressXXXX",
        "kind": "vertical-wrap",
        "before": {
          "width": 110.890625,
          "height": 21.015625,
          "clientWidth": 111,
          "scrollWidth": 111
        },
        "after": {
          "width": 101.265625,
          "height": 63.046875,
          "clientWidth": 101,
          "scrollWidth": 101
        }
      }
    ],
    "totalInspected": 291,
    "reportPath": "/tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/i18n-5/report.md"
  }
}
V21verified D21 by G62

G62: the six visible horizontal-overflow rows (3 avatars + the 3 top rows holding them) are gone; its after-image shows 'MRX', 'JWX', 'PNX' as pills that fit their text, in the header and on every card.

N21false-positiveabout G62

What remains in G62 is not an overflow a reader can see. 65 horizontal-overflow rows are the page's .sr-only spans (scrollW > clientW 1 is how a 1px visually-hidden box looks — the same elements check integrity exempts). The 33 vertical-wrap rows are warns that text wrapped to more lines under 1.4x inflation (card titles to two lines, meta rows to a second line, the In progress title to three) — the gate's own report calls these 'usually fine'; its after-image shows every card and header growing to fit with nothing clipped or overlapping.

N22supersededabout G58

Earlier stress i18n run in the D20/D21 loop; superseded by G62.

N23supersededabout G59

Earlier stress i18n run in the D20/D21 loop; superseded by G62.

N24supersededabout G60

Earlier stress i18n run in the D20/D21 loop; superseded by G62.

N25supersededabout G61

Earlier stress i18n run in the D20/D21 loop; superseded by G62.

N26decision

Added stress i18n to the final gate set: the brief asks for 'a board that still reads when it is full', and a kanban's density problem is text length — long titles, translated column names, long labels. At 1.4x inflation it found two real layout faults no screenshot of the English page could show (D20 the WIP pill breaking and the title running under it; D21 fixed-width avatar circles), both fixed in this round. Because this round changed layout CSS after the first final-round gate runs (G34–G57), the whole gate set is run once more after the last change; the notes attach to those last runs.

S43

final: full board

index.html · 1280×800 · full page, 2 screen(s)

S43 screen 1S43 screen 2
L43 saw

Final desktop 1280, two screens (942px). What reads first is right: "Sprintboard" and its indigo mark, the indigo New task button, then "Website relaunch" as the page's largest text with "Sprint 14 · Sep 14 – 25 · 14 cards" under it and the five readable team circles (AK MR PN JW LO) at the right. Chips All (dark) / Design / Frontend / Backend / Bug with colour dots, "Showing all 14 cards" flush right. Four tinted columns with clear borders, headers "Backlog 5", "In progress WIP 3 / 3", "Review 2", "Done 4", each with its +. Fourteen white cards share one anatomy — labels + avatar + ⋯, bold title, one meta line — and the priority bars, checklist counts, dates, the two red "Overdue" pills and the amber "Due today" pill are all legible. Short columns stretch to the Backlog's height and end with "Add a card". No crowding, clipping or ragged rows; avatars are still circles after D21.

S44

final: full board

index.html · 768×1024 · full page, 1 screen(s)

S44 screen 1
L44 saw

Final tablet 768x1024, one screen. Header as on desktop with a 220px search; team circles readable. The board is the sideways row at 288px columns: Backlog and In progress whole, Review cut at the right edge ("Navigation key…", "Broken logo o…"), which signals that it scrolls. Cards identical to desktop; every meta row fits one line at this width. The board ends at y≈900 and the canvas below is empty, as expected for 14 cards.

S45

final: full board

index.html · 375×812 · full page, 2 screen(s)

S45 screen 1S45 screen 2
L45 saw

Final phone 375x812, two screens (1074px). Two-row app bar (brand; search + New task), the title and caption, five readable 28px circles, chips on two lines, the segmented switcher with "Backlog" current, then the Backlog column (first card at y≈402) with the In progress column peeking 16px at the right. Screen 2 shows the rest of the Backlog down to "Add a card". Cards keep the desktop anatomy and fit their meta on one line at 315px. No horizontal page overflow; the only sideways movement is the board's own snapped row.

S46

STATE: card picked up with the keyboard, mid-move (desktop)

index.html · 1280×800 · focus #card-SB-106 · press Space · press ArrowRight · press ArrowDown · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L46 saw

STATE, desktop: card picked up with the keyboard mid-move (Space, →, ↓ on Hero copy). Hero copy hangs in Review at position 2, tilted with a deep shadow and the indigo outline; Review is tinted as the target and counts 3, In progress reads "WIP 2 / 3". The one-line hint bar says "Moving ‘Hero copy’ · Review, position 2 of 3" with the four key groups. The carried card and both its neighbours are fully in view; the bar only overlaps the Backlog's last card and Done's "Add a card" while the move lasts.

S47

STATE: card picked up with the keyboard, mid-move (phone)

index.html · 375×812 · focus #card-SB-106 · press Space · press ArrowRight · press ArrowDown · wait 500

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L47 saw

STATE, phone: the same move. The board has scrolled and snapped to Review (switcher pill on "Review"); Hero copy is lifted at position 2 between Navigation keyboard support and Broken logo on older Safari, tinted column, count 3. The hint block at the bottom: "Moving ‘Hero copy’ · Review, position 2 of 3" on one line and the keys in a 2×2 grid; it covers only the lower part of the third card, whose title stays readable.

S48

STATE: In progress limit exceeded (desktop)

index.html · 1280×800 · click li[data-id='SB-109'] .card-menu-btn · click .menu-item[data-to='progress'] · wait 400

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L48 saw

STATE, desktop: In progress over its limit after ⋯ → Move to… In progress on Navigation keyboard support. Red-tinted column with red border, red "WIP 4 / 3" pill, and under the header the alert "Over the WIP limit by 1 card" (bold red) / "Finish something before starting more." (grey, two balanced lines). The moved card is fourth and keeps its "Due today" chip; Review drops to 1. The over-limit state is explicit in text and colour both.

S49

STATE: In progress limit exceeded (phone)

index.html · 375×812 · click li[data-id='SB-109'] .card-menu-btn · click .menu-item[data-to='progress'] · wait 500

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L49 saw

STATE, phone: the same over-limit move. The board followed the card to In progress (switcher pill "In progress"); the column is red-tinted with "WIP 4 / 3" and the alert reads "Over the WIP limit by 1 card" / "Finish something before starting more." on one line each at this width. Four cards, Navigation keyboard support last; nothing clipped.

S50

STATE: card detail dialog open (desktop, opened with Enter)

index.html · 1280×800 · focus #card-SB-102 · press Enter · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L50 saw

STATE, desktop: card detail dialog opened from the keyboard (focus Footer links 404 on /press, Enter). The dialog is centred over the dimmed board and focus landed on its × close, which now shows the indigo keyboard ring. Kicker "● Backlog · SB-102", title, red Bug and blue Frontend chips, the facts panel (PN Priya Nair; Mon, Sep 21, 2026 with a red "Overdue by 2 days" pill; High), the description, and CHECKLIST "1 of 3 done" with the bar at a third and one struck-through item. Everything the brief lists for the detail is there and legible.

S51

STATE: card detail dialog open (phone)

index.html · 375×812 · click #card-SB-106 · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L51 saw

STATE, phone: the dialog for Hero copy. Full-width sheet with 16px margins, facts as a three-row list (Ana Kowalski / Fri, Sep 25, 2026 / High, all on one line each), description in four short lines, and the five checklist rows with 18px boxes and roomy rows for thumbs. It ends at y≈720 so it needs no scrolling; the board is dimmed behind it.

S52

STATE: filter applied — Frontend (desktop)

index.html · 1280×800 · click input[name='label-filter'][value='frontend'] · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L52 saw

STATE, desktop: filter applied — Frontend. The Frontend chip is the dark one; "Showing 5 of 14 cards · Clear filters". Backlog shows its two Frontend cards and "3 cards hidden by the filter", In progress one card and "2 cards hidden by the filter", Review both of its cards (both Frontend, so no note), Done the dashed "No cards match the filter". Counts stay the column totals, and every column explains the difference. The board shrinks to content; nothing shifts sideways.

S53

STATE: filter applied — Bug (phone)

index.html · 375×812 · full page, 1 screen(s) · click input[name='label-filter'][value='bug'] · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L53 saw

STATE, phone: filter applied — Bug, full page (one screen). Bug chip dark with its red dot; "Showing 3 of 14 cards · Clear filters" appears under the chips; the Backlog column shows Footer links 404 on /press (Bug · Frontend, Overdue) and "4 cards hidden by the filter", and the peeking In progress column shows the dashed empty box. The switcher still points at Backlog.

S54

STATE: add-card form open (desktop, Review)

index.html · 1280×800 · click #col-review .add-card-btn · wait 250

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L54 saw

STATE, desktop: the add-card form open in Review (its "Add a card" clicked). The button is replaced by a card-like white form under Broken logo on older Safari: bold "Card title", an empty two-line field with the indigo focus ring and the "What needs doing?" placeholder, indigo Add and ghost Cancel. Title, Add, Cancel — exactly the three parts the brief names — and the rest of the board is untouched.

S55

STATE: phone snapped to the third column

index.html · 375×812 · scroll-to #col-review · wait 600

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L55 saw

STATE, phone snapped to the third column. After scrolling the board to Review the row settled with Review's left edge on the 16px gutter, a sliver of In progress at the left and Done peeking at the right; the switcher's white pill is on "Review". Review shows its "2" count, Navigation keyboard support (Due today), Broken logo on older Safari and "Add a card". One column fills the screen, as the brief asks for phones.

S56

STATE: phone, switcher 'Review' tapped

index.html · 375×812 · full page, 2 screen(s) · click [data-jump='2'] · wait 700

2 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L56 saw

Phone, full page after tapping "Review" in the switcher. The board jumped to the Review column and snapped the same way as S55 (left edge on the gutter, neighbours peeking), and the pill moved to "Review" — the switcher is a working shortcut, not a decoration. Screen 2 shows the rest of the Review panel running empty to the board's end, since every column takes the Backlog's height.

G63exit 0vlmkit check integrity index.html

verdict: CLEAN (0 fail, 0 warn, 294 exempted)

verdict clean · findings 0 · fails 0 · warns 0 · exempted 294 · viewports 3

output, 27 line(s), 4.4s
vlmkit check integrity
source: index.html

verdict: CLEAN (0 fail, 0 warn, 294 exempted)
  1280x800: 8 component(s), ink 65.5%, 182 text block(s)
  768x900: 8 component(s), ink 64.3%, 182 text block(s)
  375x700: 8 component(s), ink 55.3%, 186 text block(s)

No integrity defects detected.

Exempted candidates (the tool's call — audit the rule, not the page):
  - [text-collision] ul.team > li:nth-of-type(1) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(1) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(2) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(2) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(3) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(3) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(4) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(4) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] legend.sr-only @1280: clipped away by legend.sr-only (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] span.count.count--wip > span:nth-of-type(2) @1280: clipped away by span.count.count--wip > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(4) @1280: clipped away by #meta-SB-102 > span:nth-of-type(4) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(4) @1280: clipped away by #meta-SB-107 > span:nth-of-type(4) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  … 279 more
G64exit 0vlmkit check copy index.html --manifest copy.txt

missing 0 · placeholders 0 · manifestLines 9 · statesExplored 14 · revealedOnly 0

output, 9 line(s), 1.9s
vlmkit check copy
source: index.html

status: ok
rendered text: 1971 chars
disclosure states: 14 explored (details / tabs / aria-expanded)
manifest: 9 line(s), missing 0

No copy issues detected.
G65exit 0vlmkit check design index.html

verdict: COHERENT (0 finding(s))

verdict coherent · drifting 0 · roles 6

output, 24 line(s), 1.6s
vlmkit check design
source: index.html

verdict: COHERENT (0 finding(s))
  roles judged: 2 of 6 seen, spacing values: 15
  coverage: 45 of 467 visible element(s) carried an inferable role
    no role: span x95, rect x68, svg x66, div x56, circle x46, path x34, +11 more tag(s)
    A role comes from role="..." or from button/input/select/textarea/h1-h6. Layout elements
    (div, span, p, a) have none, so a large skip count is normal — this gate judges components,
    not every box. Add role="..." where an element IS a component to widen the coverage.
  text-free: 18 (0 judged on box alone — font-size/weight is not observable without painted text)

Role reuse (instances / distinct styles; drift below 3x from 3 instances)
  button          37 inst    5 styles  reuse   7.4x  1 one-off  ok
  h2               4 inst    1 styles  reuse     4x  0 one-off  ok
  search           1 inst    1 styles  reuse     1x  1 one-off  not judged
  input:search     1 inst    1 styles  reuse     1x  1 one-off  not judged
  h1               1 inst    1 styles  reuse     1x  1 one-off  not judged
  status           1 inst    1 styles  reuse     1x  1 one-off  not judged
  not judged: search (1), input:search (1), h1 (1), status (1) — under --min-instances 3, so no finding can come from them.
  To keep judging them: --min-instances 2 --min-reuse 2 (both — a 2-instance role cannot reach 3x however many instances the floor allows).

No design drift detected.
G66exit 0vlmkit check composition index.html

verdict: COMPOSED (0 finding(s))

verdict composed · proximity 0 · flatSteps 0 · railNearMisses 0

output, 16 line(s), 1.7s
vlmkit check composition
source: index.html

verdict: COMPOSED (0 finding(s))
  measured: 0 label(s), 2 heading level(s), 6 wide block(s) on 1 left / 1 right rail(s) — from 253 visible box(es)
  5 label(s) not judged: they open a box that paints its own group edge, so nothing above them could be mis-grouped with

Type hierarchy (largest instance of each declared level)
  h1     26px / 700   h1#board-title
  h2   14.5px / 700   h2#col-backlog-title
  body 12px, largest 26px (2.17x), heaviest +100 weight

Group gaps: 0px between heading-led groups vs 8px inside them (0x, 1 sample(s)). Context only — intact pages measure 0.86-3.00x, so this cannot carry a verdict.

Proximity, alignment and type hierarchy all read consistently.
G67exit 0vlmkit check color index.html

verdict: CONSISTENT (0 finding(s))

verdict consistent · base #eef1f5 · bodyInk #4b5567 · linkInk #172033 · invisibleControls 0 · colorOnlyLinks 0 · unreadableColors 0

output, 27 line(s), 1.6s
vlmkit check color
source: index.html

verdict: CONSISTENT (0 finding(s))
  measured: 1 control(s), 1 link(s) in a text flow — from 387 visible box(es)

Palette (by painted area; reported, never judged — see the rejected candidates in the module docs)
  surfaces  3 distinct
    #eef1f5   47.2%     1 el  
    #e2e7ee   32.5%     4 el  section#col-backlog
    #ffffff   20.4%    20 el  header.app-header>div.appbar
  ink       10 distinct
    #4b5567   40.4%    98 el  div.board-head>div.board-title>p.board-meta
    #172033   35.3%    27 el  div.appbar>div.brand>span.brand-name
    #ffffff   10.0%    22 el  a.skip-link
    #065f46    3.4%     6 el  div#labels-SB-101>span.label
    #1e40af    3.0%     5 el  div#labels-SB-102>span.label
    …and 5 more
  marks     6 distinct
    #101828   49.2%    56 el  div#card-SB-101
    #d3d9e3   36.5%    16 el  section#col-backlog
    #d9dee7    5.9%     1 el  header.app-header>div.appbar
    #c3cad6    4.6%    16 el  fieldset.chips>label.chip>span
    #6b7588    3.1%     4 el  input#search
    …and 1 more
  base #eef1f5, body ink #4b5567, link ink #172033 on 15 element(s)
G68exit 0vlmkit check a11y contrast index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/f-contrast

inspected 183 · failures 0

output, 5 line(s), 1.5s
  vlmkit check a11y contrast
  html: examples/sites/kanban/index.html
  inspected 183 text-bearing element(s)
  ✓ 0 contrast failure(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/f-contrast/report.md
G69exit 0vlmkit check a11y focus index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/f-focus

steps 40 · findings 0

output, 5 line(s), 1.6s
  vlmkit check a11y focus
  source: index.html
  captured 40 focus step(s)
  ✓ 0 finding(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/f-focus/report.md
G70exit 0vlmkit check a11y touch index.html --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/f-touch

level AA · inspected 39 · failures 0 · wcagExempt 0

output, 5 line(s), 1.4s
  vlmkit check a11y touch
  source: index.html  level: WCAG AA (24×24 min)
  inspected 39 interactive element(s)
  ✓ 0 undersized target(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/f-touch/report.md
G71exit 0vlmkit check a11y touch index.html --viewport 375x812 --output-dir /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/f-touch-m

level AA · inspected 39 · failures 0 · wcagExempt 0

output, 5 line(s), 1.5s
  vlmkit check a11y touch
  source: index.html  level: WCAG AA (24×24 min)
  inspected 39 interactive element(s)
  ✓ 0 undersized target(s)
  report: /tmp/claude-0/-home-user-vlmkit/663fea0b-e0f8-5798-a548-7572e9f0176c/scratchpad/f-touch-m/report.md
G72exit 0vlmkit scan scroll index.html

containers 0 · overflowX 0 · issues 20

output, 36 line(s), 1.4s
vlmkit scan scroll
source: index.html (1280x720)

status: warn
  exits 0 — 20 warn(s) did not fail this command. To gate on one: --rule clipped-content=suspect
page: 1280x942 — horizontal overflow 0px, vertical scroll 222px
scroll containers: 0 (dead scrollports 5, clipped 20)

Dead scrollports (declared scrollable, content fits):
  - #new-backlog (overflow: auto auto)
  - #new-progress (overflow: auto auto)
  - #new-review (overflow: auto auto)
  - #new-done (overflow: auto auto)
  - #card-dialog (overflow: auto auto)

Issues:
  ! clipped-content #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) clips 194px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1) clips 188px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(4): #meta-SB-103 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-106 > span:nth-of-type(4): #meta-SB-106 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-111 > span:nth-of-type(4): #meta-SB-111 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-105 > span:nth-of-type(3): #meta-SB-105 > span:nth-of-type(3) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-109 > span:nth-of-type(4): #meta-SB-109 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-114 > span:nth-of-type(4): #meta-SB-114 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(4): #meta-SB-101 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(4): #meta-SB-108 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-112 > span:nth-of-type(4): #meta-SB-112 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-104 > span:nth-of-type(4): #meta-SB-104 > span:nth-of-type(4) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-113 > span:nth-of-type(4): #meta-SB-113 > span:nth-of-type(4) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(4): #meta-SB-102 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-107 > span:nth-of-type(4): #meta-SB-107 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-110 > span:nth-of-type(4): #meta-SB-110 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content legend.sr-only: legend.sr-only clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
G73exit 0vlmkit scan scroll index.html --viewport 375x812

containers 1 · overflowX 0 · issues 20

output, 41 line(s), 1.4s
vlmkit scan scroll
source: index.html (375x812)

status: warn
  exits 0 — 20 warn(s) did not fail this command. To gate on one: --rule clipped-content=suspect
page: 375x1074 — horizontal overflow 0px, vertical scroll 262px
scroll containers: 1 (dead scrollports 5, clipped 20)

Scroll containers:
  - #board: axis=x overflow=953px box=(0,349) 375x725

Dead scrollports (declared scrollable, content fits):
  - #new-backlog (overflow: auto auto)
  - #new-progress (overflow: auto auto)
  - #new-review (overflow: auto auto)
  - #new-done (overflow: auto auto)
  - #card-dialog (overflow: auto auto)

Issues:
  ! clipped-content #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) clips 194px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1): #meta-SB-108 > span:nth-of-type(3) > span:nth-of-type(1) clips 188px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(4): #meta-SB-103 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-106 > span:nth-of-type(4): #meta-SB-106 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-111 > span:nth-of-type(4): #meta-SB-111 > span:nth-of-type(4) clips 173px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-105 > span:nth-of-type(3): #meta-SB-105 > span:nth-of-type(3) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-109 > span:nth-of-type(4): #meta-SB-109 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-114 > span:nth-of-type(4): #meta-SB-114 > span:nth-of-type(4) clips 169px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(4): #meta-SB-101 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-108 > span:nth-of-type(4): #meta-SB-108 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-112 > span:nth-of-type(4): #meta-SB-112 > span:nth-of-type(4) clips 167px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-104 > span:nth-of-type(4): #meta-SB-104 > span:nth-of-type(4) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-113 > span:nth-of-type(4): #meta-SB-113 > span:nth-of-type(4) clips 157px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(4): #meta-SB-102 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-107 > span:nth-of-type(4): #meta-SB-107 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-110 > span:nth-of-type(4): #meta-SB-110 > span:nth-of-type(4) clips 150px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content legend.sr-only: legend.sr-only clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-101 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.
  ! clipped-content #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1): #meta-SB-103 > span:nth-of-type(2) > span:nth-of-type(1) clips 139px of its content behind overflow: hidden — cut-off content unless the oversize is decorative.

Contract hint: --json emits 1 expectedScrollports entry ready for a UI Contract.
G74exit 1vlmkit scan handlers index.html --probe-drag

registrations 175 · elements 69 · suspects 4

output, 99 line(s), 9.6s
vlmkit scan handlers
source: index.html

status: 4 suspect issue(s), 1 warn
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendJWAudit legacy UR": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendMRNavigation keyb": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignAKBrand colour tokens": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendJWAudit legacy UR": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendMRResponsive images for c": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignAKHero copyHigh priority2/5 checkl": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPNPricing page layoutHigh ": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendJWSearch API paginationUrgent pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendMRNavigation keyboard supportMed": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendPNBroken logo on older Safari": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignAKBrand colour tokensMedium priori": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendJWStaging environmentMedium prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignLOContent inventoryLow priority6/6": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendMRLogin form double submitHigh": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape cancelled it and 20% of it stayed changed) (mid-drag contrast 15.6:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape cancelled it and 27% of it stayed changed) (mid-drag contrast 14.8:1 → 6.2:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (highlighted 3% while hovering) (Escape cancelled it and 18% of it stayed changed) (mid-drag contrast 15.4:1 → 6.4:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (no visible change while hovering) (Escape cancelled it and 23% of it stayed changed) (mid-drag contrast 15.7:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (no visible change while hovering) (mid-drag contrast 15.8:1 → 6.5:1 at opacity 1)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 20% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 27% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 18% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  suspect [drag-cancel-not-reverted] section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu" was dragged, Escape was pressed, and the browser cancelled the drag — dragend reported dropEffect "none" and no drop ran — but 23% of the element's own box still differs from before the gesture. A cancelled drag has to leave the page as it was. The usual cause is an optimistic change made in dragstart (hiding or moving the item because it is "leaving") that is only undone in drop, so pressing Escape strands it: undo it in dragend instead, which fires whether the drag succeeded or not.
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
G75exit 0vlmkit scan handlers 'file://$PWD/examples/sites/kanban/index.html?animate=0' --probe-drag

registrations 175 · elements 69 · suspects 0

output, 96 line(s), 9.1s
vlmkit scan handlers
source: file://examples/sites/kanban/index.html?animate=0

status: 1 warn(s)
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule unprobed-handler-types=suspect
registrations: 175 across 69 element(s) + globals, on a page presenting 44 control(s)

  - div#card-menu "": keydown, click, focusout (no role)
  - dialog#card-dialog "Backlog·SB-101 Card Assignee— Due date— ": close, click (no role)
  - dialog#card-dialog>div.dlg-head>button#dlg-close "Close": click (no role)
  - dialog#card-dialog>div.dlg-body>section.dlg-section>ul#dlg-checklist "": change (no role)
  - main#board>section#col-backlog>div.column-head>button.icon-btn "Add a card to Backlog": click
  - main#board>section#col-backlog>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-backlog>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-backlog>div.column-foot>form.add-form>textarea#new-backlog "What needs doing?": keydown, input (no role)
  - main#board>section#col-backlog "Backlog 5 cards BackendJWAudit legacy UR": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-progress>div.column-head>button.icon-btn "Add a card to In progress": click
  - main#board>section#col-progress>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-progress>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-progress>div.column-foot>form.add-form>textarea#new-progress "What needs doing?": keydown, input (no role)
  - main#board>section#col-progress "In progress WIP3 / 3 cards, limit 3 Desi": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-review>div.column-head>button.icon-btn "Add a card to Review": click
  - main#board>section#col-review>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-review>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-review>div.column-foot>form.add-form>textarea#new-review "What needs doing?": keydown, input (no role)
  - main#board>section#col-review "Review 2 cards FrontendMRNavigation keyb": dragenter, dragover, dragleave, drop (delegation container)
  - main#board>section#col-done>div.column-head>button.icon-btn "Add a card to Done": click
  - main#board>section#col-done>div.column-foot>button.add-card-btn "Add a card": click
  - main#board>section#col-done>div.column-foot>form.add-form "Card title Give the card a title first. ": submit (no role)
  - div.column-foot>form.add-form>div.add-actions>button.btn "Cancel": click (no role)
  - section#col-done>div.column-foot>form.add-form>textarea#new-done "What needs doing?": keydown, input (no role)
  - main#board>section#col-done "Done 4 cards DesignAKBrand colour tokens": dragenter, dragover, dragleave, drop (delegation container)
  - header.app-header>div.appbar>button#new-task "New task": click
  - div.filter-bar>fieldset.chips>label.chip>input "all": change
  - div.filter-bar>fieldset.chips>label.chip>input "design": change
  - div.filter-bar>fieldset.chips>label.chip>input "frontend": change
  - div.filter-bar>fieldset.chips>label.chip>input "backend": change
  - div.filter-bar>fieldset.chips>label.chip>input "bug": change
  - header.app-header>div.appbar>div.search>input#search "Search card titles": input, search
  - header.app-header>div.filter-bar>p.filter-summary>button#clear-filters "Clear filters": click (no role)
  - main#board "Backlog 5 cards BackendJWAudit legacy UR": scroll (delegation container)
  - nav.col-switch>button "Backlog": click (no role)
  - nav.col-switch>button "In progress": click (no role)
  - nav.col-switch>button "Review": click (no role)
  - nav.col-switch>button "Done": click (no role)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101 "BackendJWAudit legacy URL redirectsMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Audit legacy URL redirects": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102 "BugFrontendPNFooter links 404 on /pressH": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Footer links 404 on /press": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103 "DesignAKCookie banner copy reviewLow pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Cookie banner copy review": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104 "BackendLONewsletter signup endpointMediu": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Newsletter signup endpoint": click, keydown
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105 "FrontendBackendMRResponsive images for c": click, keydown, focus, blur, dragstart, dragend
  - section#col-backlog>ol.card-list>li.card-item>button.card-menu-btn "Actions for Responsive images for case s": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106 "DesignAKHero copyHigh priority2/5 checkl": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Hero copy": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107 "DesignFrontendPNPricing page layoutHigh ": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Pricing page layout": click, keydown
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108 "BackendJWSearch API paginationUrgent pri": click, keydown, focus, blur, dragstart, dragend
  - section#col-progress>ol.card-list>li.card-item>button.card-menu-btn "Actions for Search API pagination": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109 "FrontendMRNavigation keyboard supportMed": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Navigation keyboard support": click, keydown
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110 "BugFrontendPNBroken logo on older Safari": click, keydown, focus, blur, dragstart, dragend
  - section#col-review>ol.card-list>li.card-item>button.card-menu-btn "Actions for Broken logo on older Safari": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111 "DesignAKBrand colour tokensMedium priori": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Brand colour tokens": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112 "BackendJWStaging environmentMedium prior": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Staging environment": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113 "DesignLOContent inventoryLow priority6/6": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Content inventory": click, keydown
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114 "BugBackendMRLogin form double submitHigh": click, keydown, focus, blur, dragstart, dragend
  - section#col-done>ol.card-list>li.card-item>button.card-menu-btn "Actions for Login form double submit": click, keydown
  - globals: document:pointerdown, window:resize

HTML5 drag gesture (real mouse input):
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-101: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Audit legacy URL redirects", application/x-sprintboard-card="SB-101"] (Escape reverted it cleanly) (mid-drag contrast 15.6:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-102: dragstart fired, tried 4 target(s) — dropped on ol.card-list>li.card-item>div#card-SB-104>p#title-SB-104 [got text/plain="Footer links 404 on /press", application/x-sprintboard-card="SB-102"] (Escape reverted it cleanly) (mid-drag contrast 14.8:1 → 6.2:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-103: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Cookie banner copy review", application/x-sprintboard-card="SB-103"] (no visible change while hovering) (Escape reverted it cleanly) (mid-drag contrast 15.4:1 → 6.4:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-104: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Newsletter signup endpoint", application/x-sprintboard-card="SB-104"] (no visible change while hovering) (Escape reverted it cleanly) (mid-drag contrast 15.7:1 → 6.5:1 at opacity 1)
  - section#col-backlog>ol.card-list>li.card-item>div#card-SB-105: dragstart fired, tried 4 target(s) — dropped on main#board>section#col-backlog [got text/plain="Responsive images for case studies", application/x-sprintboard-card="SB-105"] (no visible change while hovering) (mid-drag contrast 15.8:1 → 6.5:1 at opacity 1)
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-106: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-107: not driven — gesture budget spent on earlier sources
  - section#col-progress>ol.card-list>li.card-item>div#card-SB-108: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-109: not driven — gesture budget spent on earlier sources
  - section#col-review>ol.card-list>li.card-item>div#card-SB-110: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-111: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-112: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-113: not driven — gesture budget spent on earlier sources
  - section#col-done>ol.card-list>li.card-item>div#card-SB-114: not driven — gesture budget spent on earlier sources

Issues:
  warn [unprobed-handler-types] 11 handler type(s) registered and NONE exercised: blur, change, click, close, focus, focusout, input, keydown, scroll, search, submit — this gate is an inventory and presses nothing. A clean result here says the wiring exists, not that it works. Run 'check interactions --handlers' to focus and activate the controls, add '--probe-drag' for the drag surfaces, or drive the rest with a 'verify flow' script.
G76exit 0vlmkit check interactions index.html --max-elements 60

elements 44 · suspects 0 · warns 0

output, 50 line(s), 45.2s
vlmkit check interactions
source: index.html

status: ok
interactive elements: 44

  - [link] "Skip to board" focus✓
  - [searchbox] "Search card titles" focus✓
  - [button] "New task" focus✓ | Enter: focus moves within
  - [radio] "all" focus✓ | ArrowDown: layout change | announces
  - [radio] "design" unreachable | ArrowDown: layout change | announces
  - [radio] "frontend" unreachable | ArrowDown: layout change | announces
  - [radio] "backend" unreachable | ArrowDown: layout change | announces
  - [radio] "bug" unreachable | ArrowDown: focus moves
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Audit legacy URL redirects" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Audit legacy URL redirects" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Footer links 404 on /press" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Footer links 404 on /press" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Cookie banner copy review" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Cookie banner copy review" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Newsletter signup endpoint" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Newsletter signup endpoint" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Responsive images for case studies" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Responsive images for case studies" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Backlog" focus✓ | Enter: focus moves within
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Hero copy" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Hero copy" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Pricing page layout" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Pricing page layout" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Search API pagination" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Search API pagination" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to In progress" focus✓ | Enter: focus moves within
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Navigation keyboard support" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Navigation keyboard support" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Broken logo on older Safari" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Broken logo on older Safari" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Review" focus✓ | Enter: focus moves within
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
  - [button] "Brand colour tokens" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Brand colour tokens" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Staging environment" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Staging environment" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Content inventory" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Content inventory" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Login form double submit" focus✓ | Enter: focus moves within | opens dialog (focus enters), traps | Esc closes+returns focus
  - [button] "Actions for Login form double submit" focus✓ | Enter: expanded false -> true | opens menu (focus enters), arrows cycle | Esc closes+returns focus
  - [button] "Add a card to Done" focus✓ | Enter: focus moves within
G77exit 0vlmkit check motion index.html

activeAnimations 0 · running 0 · issues 0

output, 33 line(s), 1.4s
vlmkit check motion
source: index.html

status: ok
samples: 19
active animations: 0
active transitions: 19
running animations: 0
paused animations: 0
reduced-motion rule: yes

Motion samples:
  - #col-backlog: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-101: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-102: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-103: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-104: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-105: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-progress: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-106: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-107: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-108: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-review: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-109: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-110: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #col-done: animation=none 0s running; transition=background-color, border-color, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-111: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-112: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-113: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #card-SB-114: animation=none 0s running; transition=rotate, scale, box-shadow 0.18s, 0.18s, 0.18s
  - #dlg-progress-bar: animation=none 0s running; transition=width 0.18s

No motion issues detected.
G78exit 0vlmkit check animation 'file://$PWD/examples/sites/kanban/index.html?replay=drop'

animations 2 · settleMs 180 · issues 0

output, 13 line(s), 2.8s
vlmkit check animation
source: file://examples/sites/kanban/index.html?replay=drop (1280x720)

status: ok
animations: 2 (evaluated 2, infinite 0)
settle: 180ms
reduced-motion: honored

Evaluated animations:
  - #card-SB-106 `sb-settle` 180ms x1: visible, motion region (658,367) 276x113, peak frame delta 0.50%
  - #card-SB-106 `sb-settle-shadow` 180ms x1: visible, motion region (652,377) 288x112, peak frame delta 0.39%

No animation issues detected.
G79exit 0vlmkit check animation 'file://$PWD/examples/sites/kanban/index.html?replay=drop&animate=0'

animations 0 · settleMs 0 · issues 0

output, 8 line(s), 1.5s
vlmkit check animation
source: file://examples/sites/kanban/index.html?replay=drop&animate=0 (1280x720)

status: ok
animations: 0 (evaluated 0, infinite 0)
settle: 0ms

No animation issues detected.
G80exit 0vlmkit check animation index.html

animations 0 · settleMs 0 · issues 0

output, 8 line(s), 1.5s
vlmkit check animation
source: index.html (1280x720)

status: ok
animations: 0 (evaluated 0, infinite 0)
settle: 0ms

No animation issues detected.
G81exit 0vlmkit check scroll index.html --viewport 375x812

pageScrolled 262 · stickyFixed 0 · engagedSticky 0 · snaps 1 · issues 1

output, 14 line(s), 1.4s
vlmkit check scroll
source: index.html

status: warn
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule snap-not-snapping=suspect
page scrolled: 262px
sticky/fixed elements: 0 (sticky engaged by the scroll: 0)
snap containers driven: 1

Snap containers:
  - #board: x mandatory, settled at 0px (4 snap-aligned children)

Issues:
  ! snap-not-snapping #board: #board declares scroll-snap-type x mandatory but settled at offset 0px, aligned to no child snap edge (nearest candidates: 16, 343, 670, 997px) — children may be missing scroll-snap-align.
G82exit 0vlmkit check breakpoints index.html --sweep

breakpoints 3 · issues 0 · sweepRanges 0

output, 12 line(s), 3.4s
vlmkit check breakpoints
source: index.html

status: ok
width sweep: 320-1280px step 25 (39 widths) — clean
breakpoints checked: 640, 860, 1179px (each at B-1 / B / B+1)

  640px: clean (max-width: 640px)
  860px: clean (max-width: 860px)
  1179px: clean (max-width: 1179px)

All boundaries consistent.
G83exit 0vlmkit check grounding index.html

targets 36 · scale 0.5 · issues 5

output, 37 line(s), 1.4s
vlmkit check grounding
source: index.html (1280x720)

status: warn
  exits 0 — 5 warn(s) did not fail this command. To gate on one: --rule imprecise-target=suspect (also: crowded-target, ambiguous-target)
frame: 640x360 screenshot px — medium, cap 640x480, scale 0.50 (every coordinate below is in these 640x360 pixels)
targets: 36 actionable in frame (3 disabled or out of the frame)

Action map (click point in screenshot px):
  t2 searchbox "Search card titles" @ (483,15) 150x19 #search
  t3 button "New task" @ (596,15) 64x19 #new-task
  t4 button "Add a card to Backlog" @ (147,114) 14x14 #col-backlog > div:nth-of-type(1) > button:nth-of-type(1)
  t5 button "Backend JW Audit legacy URL redirects Medium pr…" @ (86,154) 137x54 #card-SB-101
  t6 button "Actions for Audit legacy URL redirects" @ (145,138) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t7 button "Bug Frontend PN Footer links 404 on /press High…" @ (86,212) 137x54 #card-SB-102
  t8 button "Actions for Footer links 404 on /press" @ (145,196) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t9 button "Design AK Cookie banner copy review Low priorit…" @ (86,270) 137x54 #card-SB-103
  t10 button "Actions for Cookie banner copy review" @ (145,254) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)
  t11 button "Backend LO Newsletter signup endpoint Medium pr…" @ (86,328) 137x54 #card-SB-104
  t12 button "Actions for Newsletter signup endpoint" @ (145,312) 14x14 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(4) > button:nth-of-type(1)
  t13 button "Frontend Backend MR Responsive images for case …" @ (86,360) 137x64 #card-SB-105 [imprecise-target,crowded-target]
  t16 button "Add a card to In progress" @ (303,114) 14x14 #col-progress > div:nth-of-type(1) > button:nth-of-type(1)
  t17 button "Design AK Hero copy High priority 2/5 checklist…" @ (242,154) 137x54 #card-SB-106
  t18 button "Actions for Hero copy" @ (301,138) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t19 button "Design Frontend PN Pricing page layout High pri…" @ (242,212) 137x54 #card-SB-107
  t20 button "Actions for Pricing page layout" @ (301,196) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t21 button "Backend JW Search API pagination Urgent priorit…" @ (242,270) 137x54 #card-SB-108
  t22 button "Actions for Search API pagination" @ (301,254) 14x14 #col-progress > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)
  t23 button "Add a card" @ (242,310) 137x18 #col-progress > div:nth-of-type(2) > button:nth-of-type(1) [ambiguous-target]
  … 16 more — --json emits the full map

Issues:
  ! imprecise-target: #card-SB-105 (button "Frontend Backend MR Responsive images for case …") shows 137x1 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x64); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.
  ! crowded-target: #card-SB-105's click point is 5px from #card-SB-104 (button "Backend LO Newsletter signup endpoint Medium pr…") — a coordinate off by 6px activates the neighbour instead.
  ! imprecise-target: #col-done > div:nth-of-type(2) > button:nth-of-type(1) (button "Add a card") shows 137x1 screenshot px in the 640x360 frame — the frame cuts it (the element is 137x18); this gate measures the initial frame and never scrolls, so scroll it into view and re-run before aiming, under the 10px floor either way: a few pixels for the model to aim at.
  ! crowded-target: #col-done > div:nth-of-type(2) > button:nth-of-type(1)'s click point is 5px from #card-SB-114 (button "Bug Backend MR Login form double submit High pr…") — a coordinate off by 6px activates the neighbour instead.
  ! ambiguous-target: 3 buttons in the frame all read "Add a card" (t23 at 242,310, t29 at 398,252, t39 at 554,360) — distinguishable only by their surrounding text (In progress WIP 3 / 3 cards, li… / Review 2 cards Frontend MR Navi… / Done 4 cards Design AK Brand co…), so an accessible name carrying it would let an agent name one.
G84exit 0vlmkit check grounding index.html --viewport 1280x1000

targets 38 · scale 0.48 · issues 1

output, 33 line(s), 1.3s
vlmkit check grounding
source: index.html (1280x1000)

status: warn
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule ambiguous-target=suspect
frame: 614x480 screenshot px — medium, cap 640x480, scale 0.48 (every coordinate below is in these 614x480 pixels)
targets: 38 actionable in frame (1 disabled or out of the frame)

Action map (click point in screenshot px):
  t2 searchbox "Search card titles" @ (463,14) 144x18 #search
  t3 button "New task" @ (572,14) 62x18 #new-task
  t4 button "Add a card to Backlog" @ (141,110) 13x13 #col-backlog > div:nth-of-type(1) > button:nth-of-type(1)
  t5 button "Backend JW Audit legacy URL redirects Medium pr…" @ (83,148) 132x52 #card-SB-101
  t6 button "Actions for Audit legacy URL redirects" @ (139,132) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t7 button "Bug Frontend PN Footer links 404 on /press High…" @ (83,204) 132x52 #card-SB-102
  t8 button "Actions for Footer links 404 on /press" @ (139,188) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t9 button "Design AK Cookie banner copy review Low priorit…" @ (83,259) 132x52 #card-SB-103
  t10 button "Actions for Cookie banner copy review" @ (139,244) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(3) > button:nth-of-type(1)
  t11 button "Backend LO Newsletter signup endpoint Medium pr…" @ (83,315) 132x52 #card-SB-104
  t12 button "Actions for Newsletter signup endpoint" @ (139,300) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(4) > button:nth-of-type(1)
  t13 button "Frontend Backend MR Responsive images for case …" @ (83,376) 132x61 #card-SB-105
  t14 button "Actions for Responsive images for case studies" @ (139,356) 13x13 #col-backlog > ol:nth-of-type(1) > li:nth-of-type(5) > button:nth-of-type(1)
  t15 button "Add a card" @ (83,419) 132x17 #col-backlog > div:nth-of-type(2) > button:nth-of-type(1) [ambiguous-target]
  t16 button "Add a card to In progress" @ (290,110) 13x13 #col-progress > div:nth-of-type(1) > button:nth-of-type(1)
  t17 button "Design AK Hero copy High priority 2/5 checklist…" @ (232,148) 132x52 #card-SB-106
  t18 button "Actions for Hero copy" @ (288,132) 13x13 #col-progress > ol:nth-of-type(1) > li:nth-of-type(1) > button:nth-of-type(1)
  t19 button "Design Frontend PN Pricing page layout High pri…" @ (232,204) 132x52 #card-SB-107
  t20 button "Actions for Pricing page layout" @ (288,188) 13x13 #col-progress > ol:nth-of-type(1) > li:nth-of-type(2) > button:nth-of-type(1)
  t21 button "Backend JW Search API pagination Urgent priorit…" @ (232,259) 132x52 #card-SB-108
  … 18 more — --json emits the full map

Issues:
  ! ambiguous-target: 4 buttons in the frame all read "Add a card" (t15 at 83,419, t23 at 232,298, t29 at 382,242, t39 at 532,354) — distinguishable only by their surrounding text (Backlog 5 cards Backend JW Audi… / In progress WIP 3 / 3 cards, li… / Review 2 cards Frontend MR Navi… / Done 4 cards Design AK Brand co…), so an accessible name carrying it would let an agent name one.
N27false-positiveabout G74

Final-pass drag probe: the only suspects are the 4 drag-cancel-not-reverted rows, which come from the probe baselining its Escape gesture inside the 180ms settle of the real drop it made just before. The control run G75 — identical probe on ?animate=0, which removes only that settle — has 0 suspects, so a cancelled drag leaves the card exactly as it was (see N13/N14/N15). drag-ghost-illegible no longer appears (the titled placeholder, D8).

N28acceptedabout G74

unprobed-handler-types (warn) is the gate's standing disclaimer that it presses nothing; G76 (check interactions) exercises the click/keydown/focus/change/close paths and the state shots S46–S56 exercise the rest.

N29acceptedabout G75

Control run for G74 (?animate=0): 0 suspects. Its only line is the same unprobed-handler-types disclaimer, covered by G76 and the state shots.

N30false-positiveabout G72

All 20 clipped-content warns are .sr-only spans (screen-reader text for priority, checklist, due, assignee, and the chips' legend), the pattern check integrity G63 exempts; page overflow-x is 0 and no scroll container is declared at 1280, which is correct for the 4-up grid. The 5 dead scrollports are the four hidden textareas (UA overflow:auto) and the closed dialog's overflow guard. Same analysis as N5.

N31false-positiveabout G73

Same 20 .sr-only clipped-content warns at 375x812 (see G72/N5). The substantive result is right: page overflow-x 0 and one scroll container, #board axis=x overflow=953px — the snapped phone row.

N32false-positiveabout G81

snap-not-snapping again ignores the board's scroll-padding-inline: 16px — the first column's snap position is 16 − 16 = 0, exactly where it 'settled'. S55/L55 and S56/L56 (final round) show Review landing on the 16px gutter both after a scroll and after the switcher tap. Same as N8/N9.

N33acceptedabout G83

Frame-edge warns: SB-105 and Done's 'Add a card' are cut to 1px by the bottom of the 720px frame, so their click points sit in that sliver — hence imprecise-target and crowded-target (5px from the card above). G84 measures the same page at 1280x1000 with the whole board in frame: both imprecise and both crowded warns disappear. The remaining ambiguous-target ('Add a card' ×3) is accepted as in N10: each sits under its own column header, the accessible names are unique via aria-label, and the text is required copy.

N34acceptedabout G84

With the whole board in frame, the one remaining warn is ambiguous-target for the four 'Add a card' buttons — accepted for the reasons in N10 (column context on screen, unique aria-label names, required verbatim copy); the tool note N11 covers the gate's advice asking for a name the buttons already have.

done

Sprintboard's 'Website relaunch' board: a static, deterministic kanban (14 seeded cards, fixed 'today' of Sep 23 2026) with HTML5 drag and drop, a full keyboard path (Space lift, arrows, Space drop, Escape cancel, live-region announcements and a visible hint bar), a ⋯ menu with Move to…, a modal card dialog whose checklist writes through to the card, inline add forms, label filters and search, a WIP limit that turns the column red and says so, and a snapped one-column row on phones with a switcher. Four rounds, 21 defects: 15 found by eye in the shots (avatar overlap, avatar-induced meta wraps, dead priority bars, the phone header and New task row, the squeezed and orphaning hint bar, a carried card jammed at the screen edge, an alert without hierarchy, notes blaming 'the filter' for a search, the phone menu dismissed by its own scroll, ragged phone dialog facts, the add form revealed flush) and 6 by gates (meta near-misalignment, two off-scale paddings, an illegible drag ghost, the unmeasured settle, the WIP pill breaking under longer text, fixed-width avatars) plus one gate suspicion (cancel not reverted) that turned out to be the probe's own timing. Final gate set clean except documented false positives: sr-only spans read as clipped content (scan scroll, stress i18n), snap judged without scroll-padding (check scroll), the drag probe baselining inside its own drop's settle, and the frame-edge grounding warns; 'Add a card' ×4 ambiguity accepted.

done

Correction to the summary above, whose defect counts were miscounted: 21 defects — 13 found by eye in the shots (D1 avatar overlap, D2 avatar-induced meta wraps, D3 dead priority bars, D4 New task pushed to its own phone row, D5 480px phone header, D12 squeezed hint bar, D13 carried card jammed at the screen edge, D14 over-limit alert without hierarchy, D15 notes blaming 'the filter' for a search, D16 phone hint orphaning its count, D17 phone menu dismissed by its own scroll, D18 ragged phone dialog facts, D19 add form revealed flush) and 8 found by gates (D6 meta near-misalignment, D7 off-scale paddings, D8 illegible drag ghost, D9 cancel-not-reverted — which proved to be the probe's own timing, D10 cards not announcing their dialog, D11 unmeasured settle, D20 WIP pill breaking under longer text, D21 fixed-width avatars). Final gate set clean except documented false positives (sr-only spans read as clipped content by scan scroll and stress i18n; snap judged without scroll-padding by check scroll; the drag probe baselining inside its own drop's settle; frame-edge grounding warns) and the accepted 'Add a card' ×4 ambiguity.

R5 · independent review

reviewer
G85exit 1vlmkit check integrity 'index.html?animate=0'
output, 1 line(s), 0.8s
error: file not found: examples/sites/kanban/index.html?animate=0
G86exit 0vlmkit check color index.html

verdict: CONSISTENT (0 finding(s))

verdict consistent · base #eef1f5 · bodyInk #4b5567 · linkInk #172033 · invisibleControls 0 · colorOnlyLinks 0 · unreadableColors 0

output, 27 line(s), 1.8s
vlmkit check color
source: index.html

verdict: CONSISTENT (0 finding(s))
  measured: 1 control(s), 1 link(s) in a text flow — from 387 visible box(es)

Palette (by painted area; reported, never judged — see the rejected candidates in the module docs)
  surfaces  3 distinct
    #eef1f5   47.2%     1 el  
    #e2e7ee   32.5%     4 el  section#col-backlog
    #ffffff   20.4%    20 el  header.app-header>div.appbar
  ink       10 distinct
    #4b5567   40.4%    98 el  div.board-head>div.board-title>p.board-meta
    #172033   35.3%    27 el  div.appbar>div.brand>span.brand-name
    #ffffff   10.0%    22 el  a.skip-link
    #065f46    3.4%     6 el  div#labels-SB-101>span.label
    #1e40af    3.0%     5 el  div#labels-SB-102>span.label
    …and 5 more
  marks     6 distinct
    #101828   49.2%    56 el  div#card-SB-101
    #d3d9e3   36.5%    16 el  section#col-backlog
    #d9dee7    5.9%     1 el  header.app-header>div.appbar
    #c3cad6    4.6%    16 el  fieldset.chips>label.chip>span
    #6b7588    3.1%     4 el  input#search
    …and 1 more
  base #eef1f5, body ink #4b5567, link ink #172033 on 15 element(s)
G87exit 0vlmkit check a11y contrast index.html

inspected 183 · failures 0

output, 5 line(s), 1.5s
  vlmkit check a11y contrast
  html: examples/sites/kanban/index.html
  inspected 183 text-bearing element(s)
  ✓ 0 contrast failure(s)
  report: examples/sites/kanban/test-results/a11y-contrast/index-a303bea1/report.md
G88exit 0vlmkit check design index.html

verdict: COHERENT (0 finding(s))

verdict coherent · drifting 0 · roles 6

output, 24 line(s), 1.7s
vlmkit check design
source: index.html

verdict: COHERENT (0 finding(s))
  roles judged: 2 of 6 seen, spacing values: 15
  coverage: 45 of 467 visible element(s) carried an inferable role
    no role: span x95, rect x68, svg x66, div x56, circle x46, path x34, +11 more tag(s)
    A role comes from role="..." or from button/input/select/textarea/h1-h6. Layout elements
    (div, span, p, a) have none, so a large skip count is normal — this gate judges components,
    not every box. Add role="..." where an element IS a component to widen the coverage.
  text-free: 18 (0 judged on box alone — font-size/weight is not observable without painted text)

Role reuse (instances / distinct styles; drift below 3x from 3 instances)
  button          37 inst    5 styles  reuse   7.4x  1 one-off  ok
  h2               4 inst    1 styles  reuse     4x  0 one-off  ok
  search           1 inst    1 styles  reuse     1x  1 one-off  not judged
  input:search     1 inst    1 styles  reuse     1x  1 one-off  not judged
  h1               1 inst    1 styles  reuse     1x  1 one-off  not judged
  status           1 inst    1 styles  reuse     1x  1 one-off  not judged
  not judged: search (1), input:search (1), h1 (1), status (1) — under --min-instances 3, so no finding can come from them.
  To keep judging them: --min-instances 2 --min-reuse 2 (both — a 2-instance role cannot reach 3x however many instances the floor allows).

No design drift detected.
N35supersededabout G85

The reviewer hit the same defect three builders reported: a relative path with a query string is read as a filename ('error: file not found: examples/sites/kanban/index.html?animate=0'). Fixed in vlmkit's source (sourceToUrl keeps a local page's ?query / #fragment) in this change, but dist/ is rebuilt only after the last agent finishes, so G89 re-runs it with an absolute file:// URL.

G89exit 0vlmkit check integrity 'file://$PWD/examples/sites/kanban/index.html?animate=0'

verdict: CLEAN (0 fail, 0 warn, 294 exempted)

verdict clean · findings 0 · fails 0 · warns 0 · exempted 294 · viewports 3

output, 27 line(s), 4.3s
vlmkit check integrity
source: file://examples/sites/kanban/index.html?animate=0

verdict: CLEAN (0 fail, 0 warn, 294 exempted)
  1280x800: 8 component(s), ink 65.5%, 182 text block(s)
  768x900: 8 component(s), ink 64.3%, 182 text block(s)
  375x700: 8 component(s), ink 55.3%, 186 text block(s)

No integrity defects detected.

Exempted candidates (the tool's call — audit the rule, not the page):
  - [text-collision] ul.team > li:nth-of-type(1) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(1) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(2) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(2) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(3) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(3) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] ul.team > li:nth-of-type(4) > span:nth-of-type(2) @1280: clipped away by ul.team > li:nth-of-type(4) > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] legend.sr-only @1280: clipped away by legend.sr-only (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-backlog > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] span.count.count--wip > span:nth-of-type(2) @1280: clipped away by span.count.count--wip > span:nth-of-type(2) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-review > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #col-done > div:nth-of-type(1) > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(4) @1280: clipped away by #meta-SB-102 > span:nth-of-type(4) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(2) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) @1280: clipped away by #meta-SB-102 > span:nth-of-type(3) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) @1280: clipped away by #meta-SB-107 > span:nth-of-type(1) > span:nth-of-type(1) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  - [text-collision] #meta-SB-107 > span:nth-of-type(4) @1280: clipped away by #meta-SB-107 > span:nth-of-type(4) (overflow is not visible) — its box still overlaps text below the clip, but no glyph is painted there
  … 279 more
S57

the board as a team member opens it

index.html?animate=0 · 1280×800 · full page, 2 screen(s)

S57 screen 1S57 screen 2
L57 saw

Desktop (2 screens). A light grey canvas under a white header (the Sprintboard mark, a search field, a violet "New task"), then the board title with its sprint caption and card count, five avatar initials on the right, and filter chips with coloured dots (All selected, dark) beside "Showing all 14 cards". Four columns on pale panels, each header with a status dot, name, count badge and +; In progress shows "WIP 3 / 3". Cards share one construction: label chips in colour AND text, an avatar, the title, then priority bars with a word, checklist progress with an icon, a due date — and "Overdue" (red) or "Due today" (amber) as worded chips. Screen 2 shows every column ending in an "Add a card" row; nothing is cut off and the columns share one top edge.

S58

the board as a team member opens it

index.html?animate=0 · 375×812 · full page, 2 screen(s)

S58 screen 1S58 screen 2
L58 saw

Phone (2 screens). The header wraps to the brand and then search with New task; the title, avatars and the filter chips (on two rows) come next, then a segmented switcher — Backlog / In progress / Review / Done — above a row of snapped columns: Backlog fills the screen and the next column peeks in at the right edge, which says the row scrolls sideways. Cards keep every field at this width; the long title "Responsive images for case studies" wraps to two lines without pushing anything out.

S59

a card's detail dialog, opened with Enter

index.html?animate=0 · 1280×800 · focus #card-SB-101 · press Enter · wait 300

1 screen(s), looked at when taken; not kept once the round was done — a round keeps one full-page walk per width.

L59 saw

Desktop, Enter on card SB-101: a modal dialog over a dimmed board — column and id as a breadcrumb, the title, the Backend label, an info strip (assignee with avatar, "Fri, Oct 2, 2026", priority), the description, and a checklist with a progress bar reading "1 of 4 done", the done item struck through. Focus is on the close button, drawn with a clear violet ring. Balanced, readable, nothing clipped.

N36decision

Independent review: integrity (after the superseded G85), color, contrast and design re-run green; desktop, phone and the card dialog show nothing the builder's log missed. No defects raised.

done

Reviewer round: gates green on re-run; board, phone layout and the card dialog hold up.