/* effects.css — extracted from style.css for modular structure */

  }
}


/* Polished v2 */
.menu-card,
.story-panel,
.tutorial-card,
.result-card,
.hud-card,
.overlay-card {
  position: relative;
  overflow: hidden;
}
.menu-card::before,
.story-panel::before,
.tutorial-card::before,
.result-card::before,
.hud-card::before,
.overlay-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(120deg, transparent 0 20%, rgba(255,255,255,0.035) 28%, transparent 36% 100%);
  transform: translateX(-120%);
  animation: cardShine 10s ease-in-out infinite;
  pointer-events: none;
}
@keyframes cardShine {
  0%, 82%, 100% { transform: translateX(-120%); }
  92% { transform: translateX(120%); }
}
.stage-frame::after {
  content: "";
  position: absolute;
  inset: auto -5% 16px;
  height: 160px;
  background:
    radial-gradient(circle at 6% 60%, rgba(255,255,255,0.10) 0 2px, transparent 3px),
    radial-gradient(circle at 18% 30%, rgba(255,255,255,0.07) 0 3px, transparent 4px),
    radial-gradient(circle at 38% 72%, rgba(255,255,255,0.09) 0 2px, transparent 3px),
    radial-gradient(circle at 63% 24%, rgba(255,255,255,0.08) 0 3px, transparent 4px),
    radial-gradient(circle at 81% 66%, rgba(255,255,255,0.08) 0 2px, transparent 3px),
    radial-gradient(circle at 92% 40%, rgba(255,255,255,0.1) 0 2px, transparent 3px);
  animation: bubblesRise 12s linear infinite;
  opacity: .55;
  pointer-events: none;
}
@keyframes bubblesRise {
  from { transform: translateY(40px); }
  to { transform: translateY(-520px); }
}
.rear-window::after,
.rhythm-bg-window::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(110deg, transparent 0 36%, rgba(255,255,255,0.12) 48%, transparent 60% 100%);
  mix-blend-mode: screen;
  transform: translateX(-150%);
  animation: sonarSweep 7s linear infinite;
  pointer-events: none;
}
@keyframes sonarSweep {
  from { transform: translateX(-150%); }
  to { transform: translateX(150%); }
}
.speaker,
.rhythm-speakers .speaker {
  animation: speakerHum 3.4s ease-in-out infinite;
}
.speaker:nth-child(2),
.rhythm-speakers .speaker:nth-child(2) {
  animation-delay: .35s;
}
@keyframes speakerHum {
  0%, 100% { transform: translateY(0) scale(1); box-shadow: 0 0 0 rgba(117,198,255,0); }
  50% { transform: translateY(-2px) scale(1.02); box-shadow: 0 0 22px rgba(117,198,255,0.16); }
}
.rear-event.shark::before {
  animation: sharkBounce .75s ease-in-out infinite alternate;
}
.rear-event.submarine::before {
  animation: subFloat 2.6s ease-in-out infinite;
}
@keyframes sharkBounce {
  from { transform: translateY(0) scale(1); }
  to { transform: translateY(-10px) scale(1.04); }
}
@keyframes subFloat {
  0%, 100% { transform: rotate(-10deg) translateY(0); }
  50% { transform: rotate(-7deg) translateY(-8px); }
}
.player-head,
.player-body,
.player-guitar {
  animation: crewIdle 2.8s ease-in-out infinite;
}
.player-guitar { animation-delay: .16s; }
.stage-frame.turning .player-head,
.stage-frame.turning .player-body,
.stage-frame.turning .player-guitar,
.stage-frame.death-sub .player-head,
.stage-frame.death-sub .player-body,
.stage-frame.death-sub .player-guitar,
.stage-frame.death-shark .player-head,
.stage-frame.death-shark .player-body,
.stage-frame.death-shark .player-guitar,
.stage-frame.death-oxygen0 .player-head,
.stage-frame.death-oxygen0 .player-body,
.stage-frame.death-oxygen0 .player-guitar,
.stage-frame.death-lamp .player-head,
.stage-frame.death-lamp .player-body,
.stage-frame.death-lamp .player-guitar,
.stage-frame.death-oxygen100 .player-head,
.stage-frame.death-oxygen100 .player-body,
.stage-frame.death-oxygen100 .player-guitar,
.stage-frame.death-default .player-head,
.stage-frame.death-default .player-body,
.stage-frame.death-default .player-guitar {
  animation: none;
}
@keyframes crewIdle {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-3px); }
}
.oxygen-fill {
  transition: width .12s linear;
}
.message-tape {
  text-shadow: 0 0 18px rgba(117,198,255,0.12);
}
