DESIGN·FORGE
Explore

Motion library

Motion explains change or it is cut. Every pattern declares its purpose, duration, easing, dependencies, licence and — required, never optional — its reduced-motion behaviour.

House rules

  • · Animate transform and opacity only — never layout properties.
  • · Three named easings only: cubic-bezier(0.22, 1, 0.36, 1) (out), in, in-out. Never the browser default.
  • · Focus rings appear instantly. Animating a focus ring is a defect.
  • · At most three motion primitives per page. Cut before adding.
  • · Every effect collapses under prefers-reduced-motion: reduce.

microinteraction

3
PatternPurposeDurationEasingDepsReduced motionLicense
Press SettlePhysical acknowledgment on button press120ms down / 180ms upease-outnone (CSS)no transform; background shift onlyMIT-derived rule
Instant Focus RingKeyboard orientation — ring must never fade in0msnonenoneidentical (already instant)MIT-derived rule
Row Action RevealKeep dense lists quiet; expose actions on intent140msease-outnoneidentical (opacity ≤150ms allowed)concept study

loader

2
PatternPurposeDurationEasingDepsReduced motionLicense
Skeleton ShimmerContent-shaped loading that never shifts layout1.4s looplinearnonestatic muted block, no shimmerMIT
Determinate ProgressReal progress over spinners whenever a total is knownfollows worklinearnoneidentical + percentage textMIT

status

3
PatternPurposeDurationEasingDepsReduced motionLicense
Status PulseLive/recording/listening indicator that encodes real state2s loopease-in-outnonestatic dot + text labelconcept study
Stat Count-UpDraw the eye to a real metric once on entry600ms onceease-outsmall JSrender final value immediatelyMIT
Toast EntranceFailure/invisible-effect notices (silent success is the default)180ms in / 140ms outease-outnoneopacity onlyfirst-party

transition

2
PatternPurposeDurationEasingDepsReduced motionLicense
Panel Slide-InDrawer/inspector entrance that preserves spatial model200msease-outnoneopacity crossfade ≤150msfirst-party
View CrossfadeRoute change continuity without spatial claims150msease-in-outView Transitions API (progressive)instant swapfirst-party

text

2
PatternPurposeDurationEasingDepsReduced motionLicense
Typewriter LineTerminal/AI-output voice for one hero line~40ms/char, oncesteps()nonefull text immediatelyMIT
Split-Flap DepartureEditorial/travel status boards; strong personality, use once500ms per changesteps(4)noneinstant swapMIT

reveal

2
PatternPurposeDurationEasingDepsReduced motionLicense
List StaggerOrient the eye down a fresh list — once, subtle240ms, 30ms stagger, cap 8 itemsease-outnone (CSS delays)no stagger; single fadefirst-party code; Kinetics studied for parameters only (it ships no LICENSE)
Section Fade-UpLanding-page section entrance300ms, threshold 0.2, onceease-outIntersectionObservervisible immediatelyfirst-party

background

2
PatternPurposeDurationEasingDepsReduced motionLicense
Ambient Gradient DriftATMOSPHERIC only: slow radial bloom behind hero20s looplinearnonestatic gradientconcept study
Cursor SpotlightHero depth cue on pointer devices (HP3)continuous, dampedspring(0.15 damp)small JSdisabled entirelyMIT-derived

decorative

2
PatternPurposeDurationEasingDepsReduced motionLicense
Single-Burst ConfettiPLAYFUL/GAMING milestone (game win) — never for routine saves800ms onceease-out gravitycanvas-confetti (MIT) or first-partystatic ✓ bannerconcept study
State-Reactive SpriteAmbient companion whose animation speed encodes real system stategait loop keyed to loadsteps() spritesprite sheetstatic sprite + numeric readoutApache-2.0 concept