/* Science Arcade — keyframes & juice. */

@keyframes blink {
  50% { opacity: 0; }
}

/* stays readable at the low phase — for text that must never fully vanish */
@keyframes blink-soft {
  50% { opacity: 0.35; }
}

@keyframes pulse-fast {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}

@keyframes cab-glow {
  0%, 100% { filter: drop-shadow(0 0 1vmin rgba(255, 173, 10, 0.25)); }
  50% { filter: drop-shadow(0 0 2.6vmin rgba(255, 173, 10, 0.6)); }
}

@keyframes attract-pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.07); }
}

@keyframes rocket-bob {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-1.6vmin); }
}

@keyframes streak-pop {
  0% { transform: scale(0.2); }
  60% { transform: scale(1.25); }
  100% { transform: scale(1); }
}

@keyframes slam-in {
  0% { transform: scale(2.6); opacity: 0; }
  55% { transform: scale(0.92); opacity: 1; }
  100% { transform: scale(1); }
}

@keyframes banner-slam {
  0% { transform: scale(3); opacity: 0; }
  12% { transform: scale(0.95); opacity: 1; }
  18% { transform: scale(1); }
  82% { transform: scale(1); opacity: 1; }
  100% { transform: scale(1.05); opacity: 0; }
}

@keyframes verdict-flash {
  0%, 40%, 80% { filter: brightness(1.9); }
  20%, 60%, 100% { filter: brightness(1); }
}

@keyframes shake-x {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(-1.2vmin); }
  40% { transform: translateX(1.2vmin); }
  60% { transform: translateX(-0.8vmin); }
  80% { transform: translateX(0.8vmin); }
}

@keyframes shake-hard {
  0%, 100% { transform: translate(0, 0); }
  20% { transform: translate(-1vmin, 0.6vmin); }
  40% { transform: translate(0.9vmin, -0.5vmin); }
  60% { transform: translate(-0.7vmin, -0.6vmin); }
  80% { transform: translate(0.6vmin, 0.5vmin); }
}

@keyframes orbit {
  from { transform: rotate(0deg) translateX(6.5vmin); }
  to { transform: rotate(360deg) translateX(6.5vmin); }
}

@keyframes pop-in {
  0% { transform: scale(0.6); opacity: 0; }
  70% { transform: scale(1.06); opacity: 1; }
  100% { transform: scale(1); }
}

.answer.pop { animation: pop-in 0.22s ease backwards; }

/* ============================================= game-wide motion pass */

/* every screen eases in (MAYDAY keeps its own violent shake) */
@keyframes screen-in {
  from { opacity: 0; transform: scale(1.015); }
  to { opacity: 1; transform: none; }
}
.screen.active:not(#screen-mayday) { animation: screen-in 0.28s ease backwards; }

/* shared entrance for panels/buttons */
@keyframes rise-in {
  from { opacity: 0; transform: translateY(3vmin); }
  to { opacity: 1; transform: none; }
}

/* modal choreography: backdrop fades, card slams */
@keyframes fade-in { from { opacity: 0; } }
.modal { animation: fade-in 0.18s ease backwards; }
.modal-card { animation: slam-in 0.32s ease backwards; }

/* home: title floats, UI rises in sequence, leaderboard rows stagger */
@keyframes title-float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-0.8vmin); }
}
.game-title { animation: title-float 3.6s ease-in-out infinite; }
.mode-eq { animation: rise-in 0.45s ease 0.15s backwards; }
.top10-panel { animation: rise-in 0.45s ease 0.28s backwards; }
.board-eq { animation-delay: 0.38s; }
.top10-list li { animation: rise-in 0.3s ease backwards; } /* delay set per-row in JS */
.home-foot { animation: fade-in 0.6s ease 0.4s backwards; }

/* pilot select: cards drop in staggered, sprites idle-bob, picked card pops */
@keyframes sprite-bob {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-1.3vmin); }
}
.pilot-card:nth-child(1) { animation: rise-in 0.4s ease 0.05s backwards; }
.pilot-card:nth-child(2) { animation: rise-in 0.4s ease 0.14s backwards; }
.pilot-card:nth-child(3) { animation: rise-in 0.4s ease 0.23s backwards; }
.pilot-card img { animation: sprite-bob 3.2s ease-in-out infinite; }
.pilot-card:nth-child(2) img { animation-delay: -1.1s; }
.pilot-card:nth-child(3) img { animation-delay: -2.2s; }
@keyframes picked-pop {
  0% { transform: scale(1); }
  45% { transform: scale(1.12); }
  100% { transform: scale(1.05); }
}
.pilot-card.picked-pop {
  animation: picked-pop 0.3s ease forwards;
  border-color: var(--gold);
  box-shadow: 0 0 4vmin rgba(255, 173, 10, 0.75);
}

/* quiz: question slides in, tier chip pops, pilot bobs in the porthole */
@keyframes q-slide {
  from { opacity: 0; transform: translateX(-2vmin); }
  to { opacity: 1; transform: none; }
}
.q-text.q-in { animation: q-slide 0.28s ease backwards; }
.q-chip.chip-pop { animation: streak-pop 0.4s ease; }
@keyframes porthole-bob {
  0%, 100% { transform: translateY(6%); }
  50% { transform: translateY(2%); }
}
.porthole img { animation: porthole-bob 3.4s ease-in-out infinite; }

/* slow ambient cloud drift behind the quiz (very long cycle) */
@keyframes drift-x { to { background-position-x: -200vmax; } }
#plx-2 { animation: drift-x 220s linear infinite; }
#plx-3 { animation: drift-x 340s linear infinite reverse; }

/* ceremony: title slams, badge and board rise in sequence */
.cer-title { animation: slam-in 0.4s ease backwards; }
.cer-rank { animation: rise-in 0.45s ease 0.55s backwards; }
.cer-top10 { animation: rise-in 0.45s ease 0.3s backwards; }
.cer-actions .big-btn:nth-child(1) { animation: rise-in 0.4s ease 0.45s backwards; }
.cer-actions .big-btn:nth-child(2) { animation: rise-in 0.4s ease 0.55s backwards; }

/* equations: board and controls rise, prompt slides per level */
.eq-canvas-wrap { animation: rise-in 0.4s ease 0.1s backwards; }
.eq-status { animation: rise-in 0.4s ease 0.2s backwards; }
.eq-controls .big-btn:nth-child(1) { animation: rise-in 0.4s ease 0.26s backwards; }
.eq-controls .big-btn:nth-child(2) { animation: rise-in 0.4s ease 0.34s backwards; }
.eq-prompt.q-in { animation: q-slide 0.3s ease backwards; }

/* wall: result and panel rise */
.wall-result { animation: slam-in 0.35s ease backwards; }
.wall-panel { animation: rise-in 0.45s ease 0.25s backwards; }

@keyframes heart-crack {
  0% { transform: scale(1); filter: none; }
  30% { transform: scale(1.5) rotate(-10deg); filter: brightness(2); }
  60% { transform: scale(0.8) rotate(8deg); }
  100% { transform: scale(1); filter: grayscale(1) brightness(0.6); }
}
.hearts img.cracking { animation: heart-crack 0.6s ease forwards; }

@keyframes float-up {
  0% { transform: translateY(0); opacity: 0; }
  15% { opacity: 1; }
  100% { transform: translateY(-9vmin); opacity: 0; }
}
.score-float {
  position: absolute;
  font-family: var(--font-pixel);
  font-size: clamp(16px, 3.6vmin, 46px);
  color: var(--gold);
  text-shadow: 0.4vmin 0.4vmin 0 rgba(0, 0, 0, 0.6);
  pointer-events: none;
  animation: float-up 1.3s ease forwards;
  z-index: 45;
}

@keyframes boost {
  0% { transform: translateY(0); }
  35% { transform: translateY(-4.5vmin) scale(1.04); }
  100% { transform: translateY(0); }
}
#rocket-rig.boosting { animation: boost 0.7s cubic-bezier(0.2, 0.8, 0.3, 1); }

@keyframes damage-jolt {
  0% { transform: translate(0, 0) rotate(0deg); }
  25% { transform: translate(-1.6vmin, 0.8vmin) rotate(-4deg); }
  55% { transform: translate(1.3vmin, -0.5vmin) rotate(3deg); }
  100% { transform: translate(0, 0) rotate(0deg); }
}
#rocket-rig.damaged { animation: damage-jolt 0.55s ease; }
