designesy
Score a site

Sibling contract

Motion

Motion is structural communication. If motion files are malformed or violate the non-negotiable standards, they degrade trust, clarity, and usability.

Version 0.1.1 · provisional · machine export

Source authority

Primary standard
Lottie Animation Community Specification v1.0.1 (2025-06-26)
JSON Schema
https://lottie.github.io/lottie-spec/1.0.1/specs/schema/
Reference validator
ajv 8.20.0 (draft 2020-12 via ajv/dist/2020) + ajv-formats 3.0.1

Ten non-negotiable motion standards

01 Easing is deliberate Use contract cubicBezier tokens instead of bare CSS keywords
02 Properties are explicit Never transition:all. Name exact properties.
03 Entrances have opacity Animate from scale(0.9-0.97) + opacity, never scale(0)
04 Keyboard is still No motion on keyboard-initiated or high-frequency interactions
05 Layout is not animated Never animate width/height/margin/padding/top/left. Use transform/opacity.
06 Touch is gated :hover motion on touch surfaces requires explicit gating
07 Duration is bounded UI animation ≤ 300ms unless justified
08 Reduced-motion is handled Every animation has prefers-reduced-motion path
09 Press is asymmetric Press and release use asymmetric timing
10 Easing is never ease-in No ease-in. Deceleration (ease-out) or custom curves only.

Verification

10 checks. PASS=1, WARN=0.5, FAIL=0. Score = (points/10) × 100. A≥90, B≥80, C≥70, D≥60, F<60.

01 m01 · Lottie file validates against LAC v1.0.1 JSON Schema Pass Schema valid Fail Schema violation
02 m02 · Required fields present (v, fr, ip, op, w, h, layers) Pass All present Fail Any missing
03 m03 · No deprecated Bodymovin version (v: "4.x") Pass v >= "5.x" Fail v: "4.x"
04 m04 · markers array present (reduced-motion support) Pass Present Fail Missing
05 m05 · meta object present (attribution, author, description) Pass Present Warn Missing (attribution gap)
06 m06 · prefers-reduced-motion path documented (§3.4) Pass Documented Warn External wrapper noted Fail Not handled
07 m07 · Easing uses deliberate curves (§16.1, §16.10) Pass Custom curves Fail ease/linear/ease-in
08 m08 · Duration ≤ 300ms for UI motion (§16.7) Pass <= 300ms Fail > 300ms without justification
09 m09 · No layout-property animation (§16.5) Pass transform/opacity only Fail width/height/margin/padding/top/left
10 m10 · No motion on keyboard-initiated actions (§16.4) Pass Still Fail Motion on keyboard

Open questions

Sibling contract to the design system v0.4.6. Machine export at /contracts/motion.json.