Hard pages
Each page reproduces something that breaks page-reading guides on real apps. The eval suite evals/cases/hard.json runs goals on them.
- Frames: a same-origin iframe the guide should read into, and a cross-origin payment frame it can only name.
- Web components: buttons in open shadow roots (nested) and in a closed shadow root (needs
data-shadow="capture"). - Controls: icon-only buttons, clickable divs with only a JS handler, a disabled button with a tooltip, tabs, an accordion, a custom select.
- Modal: a dialog over the page, and a dropdown rendered in a portal at the end of the body.
- Menus and banners: a hover-only menu, a sticky header, and a cookie banner covering the form.
- Big table: 600 interactive elements; the one the visitor needs is below the fold.
- Long list: a virtualized list where only the visible rows exist in the DOM.
- Single-page app: routes change with
history.pushState, and data arrives 1.5 s after a skeleton. - Setup: controls that stay on the page after use (clicking again would undo or duplicate), and a wizard whose Next is clicked once per step.