/* MOTION — duration comes from DISTANCE, not from taste.

     120ms  the thing does not travel   (color, opacity, a wash)
     200ms  it moves in place          (a mark growing, an icon rotating)
     300ms  it moves part of a screen  (a panel, a details disclosure)
     400ms  it moves a whole screen    (a page reveal, a full-height menu)
      80ms  it leaves                  (exits are faster than entrances)

   FIVE EASINGS, ONE JOB EACH. No sixth curve.
     enter    things arriving — the default for anything appearing
     exit     things leaving
     move     things travelling a measured distance and stopping
     linear   anything that ONLY changes opacity or color
     dismiss  things being sent away by the user

   ONE ANIMATION PER EVENT. If two things would animate on one interaction,
   one of them is decoration.

   NO IDLE OR LOOPING MOTION — with exactly one declared exception, below.
   Skeletons are static shapes with no shimmer. Nothing breathes, spins,
   drifts, or pulses to signal that the page is alive.

   THE ONE EXCEPTION: the live-status ring (.status-line .dot::after) loops
   at 2400ms. It is granted because it reports a fact that is continuously
   true — this thing is live right now — and a static dot cannot say "now".
   One element, one purpose, declared here. Nothing else may loop, and a
   second looping element is an adherence failure, not a precedent. */
:root{
  --ease-enter:  cubic-bezier(.22,1,.36,1);
  --ease-exit:   cubic-bezier(.64,0,.78,0);
  --ease-move:   cubic-bezier(.83,0,.17,1);
  --ease-linear: cubic-bezier(0,0,1,1);
  --ease-dismiss:cubic-bezier(.11,0,.5,0);

  --dur-out:80ms;
  --dur-fast:120ms;
  --dur-inplace:200ms;
  --dur-part:300ms;
  --dur-screen:400ms;

  --dur-status-loop:2400ms;   /* the one declared exception */

  /* ---- deprecated · the single flat easing. Alias only. ---- */
  --ease:var(--ease-enter);
}

@media (prefers-reduced-motion:reduce){
  :root{
    --dur-fast:100ms; --dur-inplace:100ms; --dur-part:100ms; --dur-screen:100ms;
    --dur-status-loop:0ms;   /* I10 · the one declared loop stops too */
  }
  /* I10 · enforced, not described. Anything animated outside the tokens
     still runs once and stops. */
  *,*::before,*::after{ animation-iteration-count:1 !important; }
}
