@keyframes dg-marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes dg-pulse{0%{box-shadow:0 0 0 0 var(--dg-green-glow)}70%{box-shadow:0 0 0 10px rgba(0,255,3,0)}100%{box-shadow:0 0 0 0 rgba(0,255,3,0)}}
@keyframes dg-pulse-red{0%{box-shadow:0 0 0 0 var(--dg-red-glow)}70%{box-shadow:0 0 0 10px rgba(248,0,0,0)}100%{box-shadow:0 0 0 0 rgba(248,0,0,0)}}
@keyframes dg-ring{0%{transform:scale(1);opacity:.9}100%{transform:scale(1.45);opacity:0}}
@keyframes dg-spin{to{transform:rotate(360deg)}}
@keyframes dg-zebra-move{to{background-position:62px 0}}
@keyframes dg-lane-move{to{background-position:-60px 0}}
@keyframes dg-blink{0%,100%{opacity:1}50%{opacity:.25}}
@keyframes dg-siren{0%,100%{transform:scale(1) rotate(0);filter:drop-shadow(0 0 0 rgba(248,0,0,0))}50%{transform:scale(1.14) rotate(-8deg);filter:drop-shadow(0 0 10px rgba(248,0,0,.9))}}
@keyframes dg-skid{0%{transform:translateX(-120%) skewX(-6deg)}100%{transform:translateX(0) skewX(-6deg)}}

.dg-reveal{opacity:0;transform:translateY(32px);transition:opacity .8s var(--dg-ease),transform .8s var(--dg-ease)}
.dg-reveal.is-visible{opacity:1;transform:none}
.dg-reveal-d1{transition-delay:.1s}.dg-reveal-d2{transition-delay:.2s}.dg-reveal-d3{transition-delay:.3s}
.dg-spin{animation:dg-spin 1.2s linear infinite}
.dg-spin-slow{animation:dg-spin 8s linear infinite}
.dg-zebra-anim{background-size:62px 62px;background-image:repeating-linear-gradient(-45deg,var(--dg-yellow) 0 22px,#000 22px 44px);animation:dg-zebra-move 1.4s linear infinite}
.dg-lane-anim{animation:dg-lane-move .8s linear infinite}
.dg-blink{animation:dg-blink 1.2s steps(2,start) infinite}
.dg-skid{animation:dg-skid 1s var(--dg-ease) both}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .dg-reveal{opacity:1;transform:none}
}
