/* Shared juice styles for the factory games */
.jmute{position:fixed;top:calc(env(safe-area-inset-top,0px) + 10px);right:12px;z-index:40;width:40px;height:40px;border-radius:12px;border:1px solid var(--rule,#2c4043);background:rgba(24,36,39,.9);color:#fff;font-size:18px;cursor:pointer}
@keyframes jfloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@keyframes jpulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
@keyframes jblink{0%,100%{opacity:1}50%{opacity:.35}}
@keyframes jspin{to{transform:rotate(360deg)}}
@keyframes jsweep{0%{transform:translateX(-120%)}100%{transform:translateX(120%)}}
@keyframes jsweepY{0%{transform:translateY(-110%)}100%{transform:translateY(110%)}}
@keyframes jdrive{0%{transform:translateX(-140%)}70%{transform:translateX(4%)}100%{transform:translateX(0)}}
@keyframes jleave{0%{transform:translateX(0)}100%{transform:translateX(160%)}}
@keyframes jdrop{0%{transform:translateY(-80px);opacity:0}60%{transform:translateY(6px);opacity:1}100%{transform:none}}
@keyframes jrise{0%{transform:translateY(24px);opacity:0}100%{transform:none;opacity:1}}
@keyframes jbelt{to{background-position:-40px 0}}
@keyframes jsiren{0%,100%{box-shadow:0 0 0 0 rgba(255,90,78,.0)}50%{box-shadow:0 0 28px 6px rgba(255,90,78,.55)}}
@keyframes jglow{0%,100%{filter:drop-shadow(0 0 0 rgba(61,214,198,0))}50%{filter:drop-shadow(0 0 10px rgba(61,214,198,.8))}}
@keyframes jring{0%{transform:scale(.6);opacity:.9}100%{transform:scale(2.2);opacity:0}}
.j-float{animation:jfloat 2.4s ease-in-out infinite}
.j-pulse{animation:jpulse 1.4s ease-in-out infinite}
.j-blink{animation:jblink 1s steps(2,end) infinite}
.j-siren{animation:jsiren .8s ease-in-out infinite}
.j-glow{animation:jglow 1.6s ease-in-out infinite}
.j-drive{animation:jdrive 1s cubic-bezier(.2,.9,.3,1) both}
.j-leave{animation:jleave .7s ease-in both}
.j-drop{animation:jdrop .5s cubic-bezier(.2,1.3,.4,1) both}
.j-rise{animation:jrise .45s cubic-bezier(.2,1.2,.4,1) both}
.j-belt{background:repeating-linear-gradient(90deg,#2a3b3e 0 18px,#223033 18px 40px);animation:jbelt .6s linear infinite}
.j-scanbeam{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.j-scanbeam i{position:absolute;top:0;bottom:0;width:30%;background:linear-gradient(90deg,transparent,rgba(61,214,198,.55),transparent);animation:jsweep .9s ease-in-out both}
.j-scanbeam.v i{top:0;bottom:auto;left:0;right:0;width:auto;height:30%;background:linear-gradient(180deg,transparent,rgba(61,214,198,.55),transparent);animation:jsweepY .9s ease-in-out both}
@media (prefers-reduced-motion: reduce){
  .j-float,.j-pulse,.j-blink,.j-siren,.j-glow,.j-belt{animation:none}
  .j-drive,.j-leave,.j-drop,.j-rise{animation-duration:.01s}
}

/* hit-stop: freeze every CSS animation for a few frames */
.jfreeze *,.jfreeze{animation-play-state:paused !important}
