/* Lightweight continuous traffic, independent from the product interface. */
.ct-gantry-scene { overflow: hidden; isolation: isolate; }
.ct-truck { animation: ct-truck-pass 18s linear infinite; will-change: transform; }
.ct-truck-one { animation-delay: -9.2s; }
.ct-truck-two { animation-delay: -3.2s; }
.ct-truck-three { animation-delay: -15.2s; }
.ct-wheel-spokes { transform-box: fill-box; transform-origin: center; animation: ct-wheel-roll .8s linear infinite; }
.ct-scan-curtain { animation: ct-scan-read 6s ease-in-out infinite; }
.ct-sensor-led { animation: ct-sensor-read 6s ease-in-out infinite; }
.ct-scan-wave { opacity: .16; animation: ct-scan-wave 6s ease-in-out infinite; }
.ct-wave-two { animation-delay: .12s; }
.ct-confirm-ring { transform-box: fill-box; transform-origin: center; animation: ct-confirm-read 6s ease-out infinite; }
/* 490 px of longitudinal motion / 3 trucks leaves a safe and constant gap. */
@keyframes ct-truck-pass {
  from { transform: translate(250px, -187.5px); }
  to { transform: translate(-240px, 180px); }
}
@keyframes ct-wheel-roll { to { transform: rotate(-360deg); } }
/* The first cab straddles the reader initially; following readings repeat every 6 s. */
@keyframes ct-scan-read {
  0%, 18%, 100% { opacity: .15; }
  3%, 11% { opacity: .85; }
}
@keyframes ct-sensor-read {
  0%, 18%, 100% { opacity: .65; }
  3%, 11% { opacity: 1; }
}
@keyframes ct-scan-wave {
  0%, 19%, 100% { opacity: .14; }
  5%, 11% { opacity: .7; }
}
@keyframes ct-confirm-read {
  0%, 4% { opacity: .6; transform: scale(.94); }
  28%, 100% { opacity: 0; transform: scale(1.22); }
}
.hero-visual.is-paused .ct-gantry-scene *,
.hero-visual.is-paused .ct-gantry-scene *::before,
.hero-visual.is-paused .ct-gantry-scene *::after { animation-play-state: paused !important; }
@media (prefers-reduced-motion: reduce) {
  .ct-gantry-scene * { animation: none !important; }
  .ct-truck-one { transform: translate(-25px, 18.75px); }
  .ct-truck-two { transform: translate(155px, -116.25px); opacity: .55; }
  .ct-truck-three { display: none; }
  .ct-scan-curtain { opacity: .25; }
  .ct-scan-wave { opacity: .25; }
  .ct-confirm-ring { opacity: .4; }
}
