Rule handbook metadata

Rule
AI.MOTION.INTENTIONALITY · lane ai
Page status
stale
page_version
74c3a3b237d7b20f8b0915547e41ac1d3fe3655ef5a2c13112644eec7b36d82b
generated_at
2026-05-19T22:30:00.000Z
registry_fingerprint
6773fda516344e110b5a7b1435e655e1264e773825ca8bbe62194189891c42ba

How this rule is fixed

This is an AI-enabled rule. Pass/fail requires model judgment; there is no deterministic fixer in the pilot registry.

  • Harness: invoke-ai-ruleset-harness.sh runs design-rules/ai/run-design-ai-rule.sh on the Before fixture and expects findings with matching principleId.
  • Remediation: Cursor agent plans from forge-ux-remediation.plan.md after sitewide audit — not handbook After copy.

Detection module: docs/design/ux-audit/ai-enabled-design-principles.md#ai-motion-intentionality. Scroll down for Before / After examples and Evidence and remediation steps.

Purpose

Kitchen Sink ships motion primitives across Ksc (css/forge-theme.css: .pulse, .pulse-amber, .breathe-link, .breathe-static, .ks-tilt-wrap, .ks-parallax-wrap), Forge ambient loops, living background (#ks-living-scene, js/ks-living-motion.js), and script-assembly fly-ins (.ks-sa-fly-chip, .ks-sa-seq-in). Deterministic gates (DET.MOTION.PREFERS_REDUCED, DET.MOTION.NO_AUTO_PLAY_FLASH) prove reduced-motion respect and flash-risk bounds; this AI rule judges intentionality: does motion reinforce hierarchy and the visitor job, or pull eyes away from headlines, body copy, and primary CTAs?

Plan: On first-screen and scroll captures, list every visible loop, entrance, parallax, and hover oscillation; note what each motion is meant to signal. Do: Keep one focal motion per viewport band; move decorative loops behind scrims or to hover-only surfaces; align duration/easing with KS defaults (approx. 0.2–0.45s transitions, slow breathe/pulse cycles). Check: A still screenshot communicates the same story; reduced-motion paths quiet non-essential animation without breaking layout. Adjust: When the same distraction repeats (e.g. multiple .pulse tiles above explanatory copy), propose a DET.* threshold or tighten Mtn / contract forbidden patterns.

Passing signals

  • One primary motion cue per first-screen band (e.g. a single .pulse-amber accent on a stat tile, not on every card in a bento row).
  • Hover-gated emphasis (.breathe-link, card lift) for secondary tiles; static surfaces for decorative blocks until interaction.
  • Entrance motion is short, staggered, and settles (ks-sa-seq-in with modest delay steps)—not perpetual fly-ins across the reading column.
  • Ambient and living layers stay slow and behind content; foreground copy does not sit on competing oscillations (AI.AMBIENT.READABILITY_CONFLICT).
  • Parallax/tilt (.ks-tilt-wrap, .ks-parallax-wrap) responds to pointer or scroll with restrained transform; @media (prefers-reduced-motion: reduce) disables tracking transitions.
  • Modals, offcanvas, and theme dropdown use brief open/close transitions; no auto-open on load or timer without user intent (AI.JS.BEHAVIOR_DISCOVERABILITY overlap).
  • Motion timing and easing feel calm (ease-out / cubic-bezier curves in theme tokens)—not bouncy loops on enterprise explanatory pages.

Failing signals

  • Three or more infinite loops visible at once (pulse + breathe + ambient mesh + living mid-layer) in the same reading band.
  • Always-on .pulse / .pulse-amber on hero copy wrappers, primary CTAs, or full-width .glass panels behind paragraphs.
  • Autoplay entrance chains (script-assembly fly-ins, carousel slides, modal reveal) that restart while the user is still reading above the fold.
  • Competing focal points: stat counters, diagram breathe glow, and CTA pulse all animate at similar frequency—nothing reads as “start here.”
  • Fast or strobing decorative motion on large surfaces (even when below deterministic flash thresholds, still feels hectic).
  • Motion on non-interactive blocks that look clickable (.breathe-static + strong glow on inert figure/div) without discoverability copy.
  • Parallax drift on text columns or nav chrome that makes labels feel unstable during scroll.

Before example

Before (failing example)

Governed agent delivery

Intent, delegation, review gates, and evidence—for teams shipping with human-owned control.

42
Handbook pages
12
Methodologies

Failing KS markup: landing band stacks multiple infinite loops and autoplay fly-ins on explanatory copy and CTAs.

After example

After (passing example)

Governed agent delivery

Intent, delegation, review gates, and evidence—for teams shipping with human-owned control.

Start the methodology tour
42
Handbook pages
12
Methodologies
99%
Coverage

Diagram motion activates on hover—see Breathe patterns.

Passing KS markup: subtle ambient, one hover-gated accent, static stats, and no fly-in loop over the reading column.

Evidence and remediation

Capture: first-screen screenshot (still frame), short screen recording (3–5s) noting loop count, and DOM snapshot listing active animation-name / transition-duration on visible nodes. Test with prefers-reduced-motion: reduce enabled.

Remediate (in order):

  1. Remove always-on .pulse / .pulse-amber from copy wrappers and primary CTAs; reserve one accent loop or hover-gated .breathe-link per band.
  2. Step ambient/living intensity down (forge-ambient--subtle) and add scrim when motion sits behind text (AI.AMBIENT.READABILITY_CONFLICT).
  3. Stop autoplay fly-ins and entrance chains over reading columns; show static labels or a single one-shot reveal on user action.
  4. Verify DET.MOTION.PREFERS_REDUCED and DET.MOTION.NO_AUTO_PLAY_FLASH—fix deterministic failures before re-reviewing intentionality.
  5. Document motion intent in the Mtn contract or page contract (what moves, why, static fallback); if the pattern repeats site-wide, propose a deterministic cap (e.g. max N infinite animations in first viewport).