/* ===== ORB DRIFTS ===== */
@keyframes orb-drift-1 {
  0%, 100% { transform: translate(0, 0) scale(1); }
  25% { transform: translate(100px, -80px) scale(1.15); }
  50% { transform: translate(-50px, 100px) scale(0.9); }
  75% { transform: translate(80px, 50px) scale(1.05); }
}
@keyframes orb-drift-2 {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(-90px, -70px) scale(1.1); }
  66% { transform: translate(70px, -40px) scale(0.95); }
}
@keyframes orb-drift-3 {
  0%, 100% { transform: translate(-50%, -50%) scale(1); }
  25% { transform: translate(calc(-50% + 60px), calc(-50% - 90px)) scale(1.12); }
  50% { transform: translate(calc(-50% - 80px), calc(-50% + 50px)) scale(0.88); }
  75% { transform: translate(calc(-50% + 40px), calc(-50% + 70px)) scale(1.06); }
}

/* ===== SHIMMER ===== */
@keyframes shimmer-slide {
  0% { transform: translateX(-50%); }
  100% { transform: translateX(50%); }
}

/* ===== CARD ENTRANCE ===== */
@keyframes card-in {
  from { opacity: 0; transform: translateY(50px) scale(0.97); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* ===== FADE UP ===== */
@keyframes fade-up {
  from { opacity: 0; transform: translateY(25px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* ===== RIPPLE ===== */
@keyframes ripple-out {
  0% { width: 0; height: 0; opacity: 1; transform: translate(-50%, -50%) scale(0); }
  100% { width: 150px; height: 150px; opacity: 0; transform: translate(-50%, -50%) scale(1); }
}

/* ===== FLOAT UP (mini hearts) ===== */
@keyframes float-up {
  0% { opacity: 1; transform: translateY(0) scale(1) rotate(0deg); }
  100% { opacity: 0; transform: translateY(-140px) scale(0.2) rotate(25deg); }
}

/* ===== PULSE GLOW ===== */
@keyframes pulse-glow {
  0%, 100% { box-shadow: 0 0 30px rgba(255,107,157,0.25); }
  50% { box-shadow: 0 0 70px rgba(255,107,157,0.5), 0 0 120px rgba(108,92,231,0.2); }
}

/* ===== HEARTBEAT ===== */
@keyframes heartbeat {
  0%, 100% { transform: scale(1); }
  14% { transform: scale(1.18); }
  28% { transform: scale(1); }
  42% { transform: scale(1.12); }
  56% { transform: scale(1); }
}

/* ===== HEART POP ===== */
@keyframes heart-pop {
  0% { transform: scale(1); }
  50% { transform: scale(1.5); }
  100% { transform: scale(1.3); }
}

/* ===== SCALE IN ===== */
@keyframes scale-in {
  from { opacity: 0; transform: scale(0.8); }
  to { opacity: 1; transform: scale(1); }
}

/* ===== SLIDE IN FROM BOTTOM ===== */
@keyframes slide-up-in {
  from { opacity: 0; transform: translateY(80px); }
  to { opacity: 1; transform: translateY(0); }
}

/* ===== TYPEWRITER CURSOR BLINK ===== */
@keyframes blink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

/* ===== STAGGER CHILDREN ===== */
.stagger > * {
  opacity: 0;
  animation: fade-up 0.7s var(--smooth) forwards;
}
.stagger > *:nth-child(1) { animation-delay: 0.1s; }
.stagger > *:nth-child(2) { animation-delay: 0.2s; }
.stagger > *:nth-child(3) { animation-delay: 0.3s; }
.stagger > *:nth-child(4) { animation-delay: 0.4s; }
.stagger > *:nth-child(5) { animation-delay: 0.5s; }
.stagger > *:nth-child(6) { animation-delay: 0.6s; }
.stagger > *:nth-child(7) { animation-delay: 0.7s; }
.stagger > *:nth-child(8) { animation-delay: 0.8s; }

/* ===== SHAKE (validation error) ===== */
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(-8px); }
  40% { transform: translateX(8px); }
  60% { transform: translateX(-5px); }
  80% { transform: translateX(5px); }
}
.shake { animation: shake 0.5s ease; }

/* ===== CONFETTI BURST ===== */
@keyframes confetti-fall {
  0% { opacity: 1; transform: translateY(0) rotate(0deg) scale(1); }
  100% { opacity: 0; transform: translateY(calc(100vh)) rotate(720deg) scale(0.3); }
}

/* ===== GLOW PULSE (for buttons/icons) ===== */
@keyframes glow-pulse {
  0%, 100% { filter: drop-shadow(0 0 8px rgba(255,107,157,0.4)); }
  50% { filter: drop-shadow(0 0 20px rgba(255,107,157,0.7)); }
}

/* ===== BLUR IN ===== */
@keyframes blur-in {
  from { opacity: 0; filter: blur(12px); transform: scale(1.05); }
  to { opacity: 1; filter: blur(0); transform: scale(1); }
}

/* ===== FLOAT (generic) ===== */
@keyframes gentle-float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

/* ===== PROGRESS BAR FILL ===== */
@keyframes fill-bar {
  from { width: 0; }
}

/* ===== SCORE REVEAL ===== */
@keyframes score-reveal {
  0% { opacity: 0; transform: scale(0.5) rotate(-10deg); filter: blur(10px); }
  60% { transform: scale(1.15) rotate(2deg); filter: blur(0); }
  100% { opacity: 1; transform: scale(1) rotate(0deg); filter: blur(0); }
}

/* ===== LOCK ICON WIGGLE ===== */
@keyframes lock-wiggle {
  0%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(-8deg); }
  75% { transform: rotate(8deg); }
}
