/* css/23-motion-policy.css — two-element rule while driving (animation kills).
   Split from the index.html <style> block (REFACTOR-PLAN Phase 2). Load order = cascade order; do not reorder. */
/* ---------- the two-element rule while driving (wave3-motion §5) ----------
   Only two things may animate on Drive: the speed arc / its pip, and an
   incoming detection card's one-shot `cardin`. Everything else inside the
   Drive view is pinned static by name, so a future third loop is inert the
   moment it lands rather than shipping. Only `animation-name` is nulled —
   :active press transitions still fire. The live camera tiles are never part
   of #view-drive's DOM any more (the wall only ever mounts into #camhost on
   the Cameras screen), so this rule no longer needs a camera carve-out. */
body[data-view="drive"] #view-drive *:not(.card){animation-name:none!important}
body[data-view="drive"] #view-drive *::before,
body[data-view="drive"] #view-drive *::after{animation-name:none!important}
body[data-view="drive"] #view-drive .card *{animation-name:none!important}
/* perf audit P4: the GPS/NET status dot (.hpill.st-bad .dot, `hdotpulse`)
   loops forever whenever a signal is bad, and it lives in the header rail —
   outside #view-drive — so none of the rule above ever reached it. The rail
   (clock/GPS/NET) stays on screen for the whole drive, so it's covered by
   the same policy the three rules above enforce, just scoped by view instead
   of by container. */
body[data-view="drive"] .hpill.st-bad .dot{animation-name:none!important}
/* transitions that would fire on a data tick are pinned too: the coverage bar,
   the sparkline and the SCI rows all repaint every 1.2 s while driving. */
body[data-view="drive"] #view-drive .ring .arc:not(#spdArc):not(#bandArc),
body[data-view="drive"] .hudstats .hbar i,
body[data-view="drive"] .hring .arc{transition:none!important}


/* ---------- the sanctioned exceptions (revamp task 2) ---------------------
   The rule above is a blanket `animation-name:none` BY CONTAINER, so it also
   pinned the two things the client asked to see move:

     · the ARRIVAL (revamp 5) — the evidence plate's one-shot scan sweep and
       the severity chip's pop. With the panel invisible until a detection
       lands, this entrance is the only thing that ever happens on the left
       half of the screen; the card's own slide is already exempt (the blanket
       is `*:not(.card)`), but its ::after and its children are not. Both are
       one-shots on the single live arrival, never loops.
     · the ESP assignment beat — a 3.8 s one-shot the inspector starts with
       their own thumb and watches to completion, not a background loop.

   Each is unpinned BY NAME, which keeps the policy's real guarantee intact: a
   future fourth loop still lands inert. Both are re-pinned under
   prefers-reduced-motion below (the JS skips the loader beat outright there,
   see decide()). */
body[data-view="drive"] #view-drive #cardSlot .card.arrive button.thumb::after{animation-name:evscan!important}
body[data-view="drive"] #view-drive .card.arrive .sev{animation-name:sevpop!important}
body[data-view="drive"] #view-drive .card .esp-ring>i:first-child{animation-name:espPulse!important}
body[data-view="drive"] #view-drive .card .esp-ring>i:last-child{animation-name:espSpin!important}
body[data-view="drive"] #view-drive .card .esp-ring.done{animation-name:espPop!important}
body[data-view="drive"] #view-drive .card .esp-ring.done svg path{animation-name:espDraw!important}
body[data-view="drive"] #view-drive .card .statusbar.lc.assigned{animation-name:espGlow!important}
/* revamp 10 — the same beat, now at full card size (the process pane). The
   blanket above is `.card *`, so every part of the 72 px ring was pinned dead
   the moment it moved from the foot bar into the card body: the outer ring sat
   still and the check never drew, which is exactly what the policy is meant to
   do to an unsanctioned loop and exactly wrong for the one 3.8 s sequence the
   inspector starts with their own thumb. Unpinned BY NAME, like the rest. */
body[data-view="drive"] #view-drive .card .procring>i:first-child{animation-name:procPulse!important}
body[data-view="drive"] #view-drive .card .procring>i:last-child{animation-name:procSpin!important}
body[data-view="drive"] #view-drive .card .procring.done{animation-name:procPop,procGlow!important}
body[data-view="drive"] #view-drive .card .procring.done svg path{animation-name:procDraw!important}
@media (prefers-reduced-motion: reduce){
  body[data-view="drive"] #view-drive #cardSlot .card.arrive button.thumb::after,
  body[data-view="drive"] #view-drive .card.arrive .sev,
  body[data-view="drive"] #view-drive .card .esp-ring>i,
  body[data-view="drive"] #view-drive .card .esp-ring.done,
  body[data-view="drive"] #view-drive .card .esp-ring.done svg path,
  body[data-view="drive"] #view-drive .card .statusbar.lc.assigned,
  body[data-view="drive"] #view-drive .card .procring>i,
  body[data-view="drive"] #view-drive .card .procring.done,
  body[data-view="drive"] #view-drive .card .procring.done svg path{animation-name:none!important}
}
