I built a static demo for three placeholder website animations, one of each kind: a one-shot intro that settles into an idle loop, an interactive button whose state machine reports the form's real result (ready, sending, sent, failed), and a scene scrubbed by one scroll-driven number input. For each, the designer's spec (milliseconds, 2x export pixels, CSS easing) is converted by the build into a Rive plan: named artboard, 7 timelines in total at 60 fps, 3 state machines, 5 inputs and 11 states, emitted as JSON. All 42 keys are converted back and asserted against the spec: 0 px position drift, worst timing drift 6.67 ms, easing identical on every key. Each animation is held to a web budget (0 raster images across all three, capped vertices and paths), and the documentation covers inputs, events, fit, poster fallback, off-screen pause and reduced motion. The previews run from the same JSON; the Rive files themselves are made in the Rive editor from the real designs. The build exits non-zero, writing nothing, on any failed check.