# Deliberate scroll motion (contract v1 runtime, v2 authoring)

Motion is a normal responsibility for the whole experience on every new/reauthored content route. Compose a usable opening, meaningful development, connected still intervals and a supporting closing moment. Adapt the site's motion character to each route's task. Two effects in one location do not establish a composed page. Neither do repeated fade-ups or a fixed effect count. Read [page choreography](motion-page.md) for the compact v2 plan, complete examples and review contract.

New scaffolds intentionally enable `scrollMotion:{version:1,policy:"enabled"}` and declare `motionComposition:{version:2,routes:"all-authored"}`. Explicit operator off disables all effects. Historical absent policy remains legacy-only and historical plans remain readable; upgrade never silently migrates them. Reauthor a historical route through the normal prepared workflow and record its v2 responsibility. Existing legacy `motion.strength:"off"` is a component default with instance precedence; explicit new policy off overrides both. Legacy zero-child staggers animate the wrapper; marked groups animate only marked children. New empty staggers are errors.

Native HTML, components and composition-v1 share stable `id` and `data-motion`: entrance, stagger, count, text, sequence, draw, drift, progress, story. Stagger/sequence use `[data-motion-child]`; semantic text uses authored `[data-motion-word]`; decorative SVG uses `[data-motion-path]`. Do not wrap pages or target nested content twice. Hero/page shells, fixed/sticky/very large targets stay static. Initially visible text/sequence entrances stay readable and static; a supporting draw accent can run in the opening. Planned active scenes must actually change during full-route traversal.

Load selected recipes: [counts](motion-count.md), [formats](motion-numeric.md), [phrases](motion-text.md), [images/captions](motion-image.md), [process](motion-process.md), [rhythm](motion-sequence.md). Runtime count defaults to 900ms; other effects 550ms; bounded duration 120-1200ms, delay 0-300ms, stagger 0-120ms with total delay capped 300ms, distance 0-32px. Counts start at 35% visibility, preserve canonical accessible final text and need supplied facts. No counting phones/dates/identifiers or inventing proof. Reduced/no-JS/failure states are immediately complete. Keep primary messages, LCP content, actions, paragraphs and form fields usable throughout. No scroll hijacking, perpetual loops or replay on reversal.

Watch normal desktop/mobile full journeys and reduced/static readability; keep target behavioral checks, focus/anchors/restoration/fonts/resize/teardown and factual/media/navigation/mock-form checks. Recordings stay separate from performance. Critique located whole-route rhythm and cross-route differences, not API counts. Agent assessment, measured performance and human preference are separate; human labels remain unset. Explicit off plus rebuild is the local rollback.
