/* Motion — instruments settle, they do not bounce.
   One easing curve for reveals, one for state. No parallax gimmicks, no springs, no overshoot. */
:root{
  --ease-reveal:cubic-bezier(.2,.7,.2,1); /* @kind other */
  --ease-state:cubic-bezier(.4,0,.2,1); /* @kind other */

  --dur-instant:120ms; /* @kind other */
  --dur-state:300ms; /* @kind other */      /* hover, active, selection */
  --dur-panel:500ms; /* @kind other */
  --dur-scene:850ms; /* @kind other */      /* a beat inside a scene */

  --beat-stagger:130ms; /* @kind other */   /* delay between sibling reveals */
  --beat-rise:14px;       /* translateY start for a revealed child */

  --transition-state:var(--dur-state) var(--ease-state);
  --transition-reveal:var(--dur-scene) var(--ease-reveal);
}

@keyframes ob-beat{from{opacity:0;transform:translateY(var(--beat-rise))}to{opacity:1;transform:none}}
@keyframes ob-hairline{from{transform:scaleX(0)}to{transform:scaleX(1)}}
/* The star's slow drift — the only looping motion in the system. Seal only, never UI. */
@keyframes ob-drift{0%,100%{transform:translate(0,0)}50%{transform:translate(0,-1.5%)}}

@media (prefers-reduced-motion:reduce){
  :root{--dur-state:1ms; /* @kind other */ --dur-panel:1ms; /* @kind other */ --dur-scene:1ms; /* @kind other */ --beat-stagger:0ms; /* @kind other */ --beat-rise:0px}
  *,*::before,*::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}
}
