One prompt per screen. A: the prompt alone. B: the same prompt plus one sentence that points at the KATA registry. Every number below comes from comparison/results.json.
| Screen | Tab stops with no visible focus A / B | Controls with no accessible name A / B | Text below 4.5:1, dark A / B | Elements past a 390px viewport, dark + RTL A / B | Console errors on load A / B | Distinct colors A / B | Distinct spacing values A / B |
|---|---|---|---|---|---|---|---|
| 01 Sign in | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 8 / 10 | 15 / 7 |
| 02 Sign up form | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 0 / 0 | 8 / 8 | 11 / 7 |
| 03 Settings | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 8 / 9 | 15 / 13 |
| 04 Pricing | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 7 / 8 | 15 / 7 |
| 05 Dashboard | 0 / 0 | 0 / 0 | 0 / 0 | 43 / 0 | 0 / 0 | 14 / 14 | 11 / 11 |
| 06 Data table | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 0 / 0 | 16 / 12 | 14 / 8 |
| 07 Checkout | 0 / 0 | 0 / 0 | 3 / 0 | 0 / 0 | 0 / 0 | 9 / 7 | 13 / 8 |
| 08 Inbox | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 0 / 0 | 9 / 16 | 10 / 19 |
| 09 Empty state | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 9 / 9 | 17 / 11 |
| 10 Delete with confirmation | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 11 / 8 | 9 / 7 |




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 0 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 8 / 10 | computed CSS |
| Distinct spacing values | 15 / 7 | computed CSS |
| File size (bytes) | 7247 / 20032 | file size |
## Prompt A (direct) A sign-in page for a project-management web app called "Tallyboard". Email and password fields, a "Remember me" checkbox, a "Forgot password?" link, a primary "Sign in" button, and a link to create an account. Show an inline error under the password field reading "Incorrect password." Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) A sign-in page for a project-management web app called "Tallyboard". Email and password fields, a "Remember me" checkbox, a "Forgot password?" link, a primary "Sign in" button, and a link to create an account. Show an inline error under the password field reading "Incorrect password." Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 1 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 8 / 8 | computed CSS |
| Distinct spacing values | 11 / 7 | computed CSS |
| File size (bytes) | 7916 / 30257 | file size |
## Prompt A (direct) A sign-up form for "Tallyboard". Fields: full name, work email, password (with its rules shown as a hint), company size (select: 1–10, 11–50, 51–200, 201+), and a required checkbox to accept the terms. A primary "Create account" button. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) A sign-up form for "Tallyboard". Fields: full name, work email, password (with its rules shown as a hint), company size (select: 1–10, 11–50, 51–200, 201+), and a required checkbox to accept the terms. A primary "Create account" button. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 0 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 8 / 9 | computed CSS |
| Distinct spacing values | 15 / 13 | computed CSS |
| File size (bytes) | 9441 / 33358 | file size |
## Prompt A (direct) An account settings page for "Tallyboard" with three groups: Profile (display name, email), Notifications (three on/off switches: email digests, mentions, weekly report), and Appearance (theme select: system, light, dark). A "Save changes" button that shows a confirmation message after it is pressed. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) An account settings page for "Tallyboard" with three groups: Profile (display name, email), Notifications (three on/off switches: email digests, mentions, weekly report), and Appearance (theme select: system, light, dark). A "Save changes" button that shows a confirmation message after it is pressed. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 0 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 7 / 8 | computed CSS |
| Distinct spacing values | 15 / 7 | computed CSS |
| File size (bytes) | 8176 / 21415 | file size |
## Prompt A (direct) A pricing section for "Tallyboard" with three plans: Free ($0), Team ($12 per user per month, marked "Most popular"), and Business ($24 per user per month). Each plan lists four features and has a call-to-action button. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) A pricing section for "Tallyboard" with three plans: Free ($0), Team ($12 per user per month, marked "Most popular"), and Business ($24 per user per month). Each plan lists four features and has a call-to-action button. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 0 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 43 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 14 / 14 | computed CSS |
| Distinct spacing values | 11 / 11 | computed CSS |
| File size (bytes) | 12852 / 31775 | file size |
## Prompt A (direct) A dashboard for "Tallyboard": four stat cards (open tasks 128, completed this week 342, overdue 7, active members 24, each with a change versus last week), a line chart of tasks completed over the last 7 days, and a table of the five most recent tasks with name, assignee, status and due date. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) A dashboard for "Tallyboard": four stat cards (open tasks 128, completed this week 342, overdue 7, active members 24, each with a change versus last week), a line chart of tasks completed over the last 7 days, and a table of the five most recent tasks with name, assignee, status and due date. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 1 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 16 / 12 | computed CSS |
| Distinct spacing values | 14 / 8 | computed CSS |
| File size (bytes) | 13773 / 30496 | file size |
## Prompt A (direct) A tasks table for "Tallyboard" with 12 rows and columns: task, assignee, status, priority, due date. Columns sort when their header is clicked. A text filter above the table narrows the rows, a count shows how many rows match, and pagination shows 5 rows per page. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) A tasks table for "Tallyboard" with 12 rows and columns: task, assignee, status, priority, due date. Columns sort when their header is clicked. A text filter above the table narrows the rows, a count shows how many rows match, and pagination shows 5 rows per page. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 3 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 9 / 7 | computed CSS |
| Distinct spacing values | 13 / 8 | computed CSS |
| File size (bytes) | 15631 / 28504 | file size |
## Prompt A (direct) A checkout page for an online stationery shop called "Inkwell Supply": contact email, shipping address fields, a choice of shipping method (standard $4, express $12) as radio buttons, a payment section with card number, expiry and CVC, and an order summary showing two items, shipping and the total. A "Place order" button. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) A checkout page for an online stationery shop called "Inkwell Supply": contact email, shipping address fields, a choice of shipping method (standard $4, express $12) as radio buttons, a payment section with card number, expiry and CVC, and an order summary showing two items, shipping and the total. A "Place order" button. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 1 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 9 / 16 | computed CSS |
| Distinct spacing values | 10 / 19 | computed CSS |
| File size (bytes) | 14744 / 41285 | file size |
## Prompt A (direct) An inbox screen for a support tool called "Helpline": a left column listing eight conversations (sender, subject, one-line preview, time, unread state), and a right pane showing the selected conversation with its messages and a reply box with a "Send" button. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) An inbox screen for a support tool called "Helpline": a left column listing eight conversations (sender, subject, one-line preview, time, unread state), and a right pane showing the selected conversation with its messages and a reply box with a "Send" button. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 0 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 9 / 9 | computed CSS |
| Distinct spacing values | 17 / 11 | computed CSS |
| File size (bytes) | 8727 / 20867 | file size |
## Prompt A (direct) The first screen a new "Tallyboard" user sees when they have no projects yet: an empty state with an illustration area, a heading, one sentence of explanation, a primary "Create project" button, a secondary "Import from CSV" button, and a three-step getting-started checklist. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) The first screen a new "Tallyboard" user sees when they have no projects yet: an empty state with an illustration area, a heading, one sentence of explanation, a primary "Create project" button, a secondary "Import from CSV" button, and a three-step getting-started checklist. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.




| Measure | A / B | How |
|---|---|---|
| Tab stops with no visible focus | 0 / 0 | verify_focus_ring rule |
| Controls with no accessible name | 0 / 0 | Chromium accessibility tree |
| Text below 4.5:1, light | 0 / 0 | capture_text_contrast metric |
| Text below 4.5:1, dark | 0 / 0 | capture_text_contrast metric |
| Elements past a 390px viewport, dark + RTL | 0 / 0 | bounding boxes |
| Console errors on load | 0 / 0 | Chromium console |
| <button> without type | 0 / 0 | source |
| Distinct colors | 11 / 8 | computed CSS |
| Distinct spacing values | 9 / 7 | computed CSS |
| File size (bytes) | 10204 / 28616 | file size |
## Prompt A (direct) A project list for "Tallyboard" with four projects, each with a "Delete" button. Pressing Delete opens a confirmation dialog that names the project and offers "Cancel" and "Delete project". Confirming removes the row and shows a short notification that the project was deleted. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. ## Prompt B (KATA) A project list for "Tallyboard" with four projects, each with a "Delete" button. Pressing Delete opens a confirmation dialog that names the project and offers "Cancel" and "Delete project". Confirming removes the row and shows a short notification that the project was deleted. Write one complete, self-contained HTML file (inline all CSS and JavaScript; no external requests except where stated). It should work in a current desktop and mobile browser, in light and dark mode, and for keyboard users. Fetch each part from kata-ui.dev/registry.json and use it unmodified.
One run, one agent, one date: another agent or day gives other numbers. Not verified: screen readers, Safari, Firefox, real devices.