:root{
  /* Sprite animation, not easing curves: steps() so motion lands on frames. */
  --ease-step-2:steps(2,end); /* @kind other */
  --ease-step-4:steps(4,end); /* @kind other */
  --ease-step-8:steps(8,end); /* @kind other */
  --ease-out:cubic-bezier(.2,.8,.2,1); /* @kind other */   /* only for scroll/parallax, not UI states */
  --dur-instant:80ms; /* @kind other */
  --dur-fast:140ms; /* @kind other */
  --dur-frame:240ms; /* @kind other */      /* one sprite cycle */
  --dur-slow:480ms; /* @kind other */
  --dur-idle:1600ms; /* @kind other */      /* looping idle bob / glow pulse */
  --press-offset:3px; /* @kind spacing */     /* pressed elements move down-right into their shadow */
}
@keyframes navi-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes navi-glow{0%,100%{box-shadow:var(--glow-ready)}50%{box-shadow:var(--glow-ready-strong)}}
@keyframes navi-blink{0%,49%{opacity:1}50%,100%{opacity:0}}
@keyframes navi-shimmer{0%,100%{filter:brightness(1)}50%{filter:brightness(1.25)}}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:0.001ms!important;animation-iteration-count:1!important}
}
