Qeetrix

Motion

Duration and easing roles, and how Qeetrix honours reduced motion.

Motion has two layers: a primitive scale of durations and easings, and the semantic roles that components use. A role names its purpose, normal rather than 200ms or enter rather than a curve, and the roles are Tailwind utilities too.

Durations

RoleValueCSS variableTailwind
instant0ms--qx-motion-duration-instantduration-instant
fast150ms--qx-motion-duration-fastduration-fast
normal200ms--qx-motion-duration-normalduration-normal
slow300ms--qx-motion-duration-slowduration-slow
deliberate400ms--qx-motion-duration-deliberateduration-deliberate

Easings

RoleCurveValueCSS variableTailwind
standardcubic-bezier(0.4, 0, 0.2, 1)--qx-motion-easing-standardease-standard
emphasizedcubic-bezier(0.4, 0, 0.6, 1)--qx-motion-easing-emphasizedease-sharpease-emphasized
entercubic-bezier(0, 0, 0.2, 1)--qx-motion-easing-enterease-decelerateease-enter
exitcubic-bezier(0.4, 0, 1, 1)--qx-motion-easing-exitease-accelerateease-exit
linearlinear--qx-motion-easing-linear—

Reduced motion

When the user asks for reduced motion, styles.css collapses every transition and animation in one place, to --qx-motion-reduced-duration. Transitions keep a duration just above zero so transitionend still fires for components that wait on it. A component only needs its own handling when it drives motion from JavaScript.