# description
Top-level shape of a demo.yaml. The 'steps' array is executed in order; each step targets DOM elements by accessibility name, not CSS selectors.

# properties.viewport.description
CSS dimensions the page renders into. The recorded video is scaled from here to render.quality.

# properties.render.properties.preset.description
Brand preset bundling background gradient + cursor color

# properties.render.properties.quality.description
Output resolution. 4k is ~3-5× slower per render.

# properties.render.properties.fidelity.description
Capture-fidelity dial. 'standard' captures at the output resolution (fast, small files). 'max' oversamples capture so zooms stay sharp and lowers the encode CRF for crisper output. ~30-50% slower, ~1.5-2× larger MP4s.

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.superZoom.description
When true, the runner captures a 4× DPR PNG of the element at action time and the renderer overlays it during the zoom — element stays sharp at any zoom level. ~50-200ms extra capture time. Best for buttons with crisp text or SVG icons.

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.from.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.from.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.from.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.from.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.from.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.to.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.to.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.to.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.to.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.to.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.superZoom.description
Capture a 4× DPR PNG of the element so the highlight stays crisp under camera zoom.

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.superZoom.description
Capture a 4× DPR PNG of the element so the pan target stays crisp at any zoom.

# properties.steps.items.oneOf[].properties.description.description
One-line human description, surfaces in error messages

# properties.steps.items.oneOf[].properties.waitAfterMs.description
Pause after this step before the next one starts

# properties.steps.items.oneOf[].properties.caption.description
Optional caption overlay during this step

# properties.steps.items.oneOf[].properties.target.description
An accessibility-tree target. Either a free-text string (matches text content) or a structured selector. Prefer structured.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.role.description
ARIA role: button, link, textbox, checkbox, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.name.description
Accessible name — the visible text on a button, the label of an input, etc.

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.testId.description
data-testid attribute (preferred when stable)

# properties.steps.items.oneOf[].properties.target.oneOf[].properties.exact.description
When true and `text` is set, match the visible text exactly. Use for short words that would otherwise substring-match unintended elements (e.g. "record" matching "RECORDER").

# properties.steps.items.oneOf[].properties.color.description
CSS color for the underline. Defaults to the brand accent.