.game-frame {
  animation: frameCharge 4.8s ease-in-out infinite;
}

.game-frame::before {
  content: "";
  position: absolute;
  z-index: 4;
  pointer-events: none;
  top: -35%;
  bottom: -35%;
  width: 16%;
  left: -25%;
  background: linear-gradient(90deg, transparent, rgba(74, 244, 223, .07), transparent);
  transform: skewX(-10deg);
  animation: labSweep 8s ease-in-out infinite;
}

.game-frame::after {
  content: "";
  position: absolute;
  z-index: 4;
  pointer-events: none;
  inset: 0;
  box-shadow: inset 0 0 70px rgba(0, 0, 0, .48), inset 0 0 18px rgba(185, 255, 57, .05);
  animation: vignettePulse 2.8s ease-in-out infinite;
}

@keyframes frameCharge {
  50% { border-color: rgba(74, 244, 223, .46); box-shadow: 0 0 0 1px #000, 0 22px 80px #0008, 0 0 42px rgba(74, 244, 223, .14); }
}

@keyframes labSweep {
  0%, 18% { left: -25%; opacity: 0; }
  30% { opacity: 1; }
  62% { left: 112%; opacity: .8; }
  72%, 100% { left: 112%; opacity: 0; }
}

@keyframes vignettePulse {
  50% { box-shadow: inset 0 0 86px rgba(0, 0, 0, .58), inset 0 0 26px rgba(185, 255, 57, .09); }
}

@media (prefers-reduced-motion: reduce) {
  .alarm-glow, .pulse-dot, .game-frame, .game-frame::before, .game-frame::after { animation: none !important; }
}
