/* Motion. Calm by default, joy on purpose. Every animation reads --motion-distance
   (translate/scale multiplier) so reduced motion collapses movement to fades. */
:root{
  --duration-instant:80ms; /* @kind other */
  --duration-fast:140ms; /* @kind other */
  --duration-base:220ms; /* @kind other */
  --duration-slow:360ms; /* @kind other */
  --duration-page:420ms; /* @kind other */
  --duration-celebrate:900ms; /* @kind other */
  --ease-standard:cubic-bezier(0.2,0,0,1); /* @kind other */
  --ease-enter:cubic-bezier(0,0,0.2,1); /* @kind other */
  --ease-exit:cubic-bezier(0.4,0,1,1); /* @kind other */
  --ease-gentle-spring:cubic-bezier(0.34,1.36,0.64,1); /* @kind other */
  --motion-distance:1; /* @kind other */
}
@media (prefers-reduced-motion:reduce){
  :root{--duration-page:160ms; /* @kind other */--duration-celebrate:240ms; /* @kind other */--ease-gentle-spring:cubic-bezier(0.2,0,0,1); /* @kind other */--motion-distance:0; /* @kind other */}
}
[data-motion="reduced"]{--duration-page:160ms; /* @kind other */--duration-celebrate:240ms; /* @kind other */--ease-gentle-spring:cubic-bezier(0.2,0,0,1); /* @kind other */--motion-distance:0; /* @kind other */}
@keyframes ob-pulse{0%,100%{transform:scale(1)}50%{transform:scale(calc(1 + 0.08 * var(--motion-distance)))}}
@keyframes ob-bar{0%,100%{transform:scaleY(0.35)}50%{transform:scaleY(1)}}
@keyframes ob-dot{0%,80%,100%{opacity:.25}40%{opacity:1}}
@keyframes ob-rise{from{opacity:0;transform:translateY(calc(8px * var(--motion-distance)))}to{opacity:1;transform:none}}
@keyframes ob-pop{0%{transform:scale(calc(1 - 0.2 * var(--motion-distance)))}60%{transform:scale(calc(1 + 0.06 * var(--motion-distance)))}100%{transform:scale(1)}}
@keyframes ob-spin{to{transform:rotate(360deg)}}
@keyframes ob-ring{0%{box-shadow:0 0 0 0 currentColor;opacity:.5}100%{box-shadow:0 0 0 calc(14px * var(--motion-distance)) currentColor;opacity:0}}
