/* ── ANIMATIONS ── */
@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes bounce {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(4px);
  }
}

@keyframes certReveal {
  from {
    opacity: 0;
    transform: scale(0.92) translateY(20px);
  }
  to {
    opacity: 1;
    transform: scale(1) translateY(0);
  }
}

@keyframes certHoloDrift {
  0%,
  100% {
    background-position: 0% 40%;
  }
  50% {
    background-position: 100% 60%;
  }
}

@keyframes certWaxFloat {
  0%,
  100% {
    transform: translateY(-50%) rotate(-1.25deg) scale(1);
  }
  50% {
    transform: translateY(calc(-50% - 2px)) rotate(1.25deg) scale(1.03);
  }
}

@keyframes starPop {
  0% {
    transform: scale(0);
    opacity: 0;
  }
  60% {
    transform: scale(1.3);
  }
  100% {
    transform: scale(1);
    opacity: 1;
  }
}

@keyframes startBlink {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.72;
  }
}

#cert-disp-stars .cert-star {
  opacity: 0;
  animation: starPop 0.4s ease forwards;
}

#cert-disp-stars .cert-star:nth-child(1) {
  animation-delay: 0.6s;
}

#cert-disp-stars .cert-star:nth-child(2) {
  animation-delay: 0.75s;
}

#cert-disp-stars .cert-star:nth-child(3) {
  animation-delay: 0.9s;
}

#cert-disp-stars .cert-star:nth-child(4) {
  animation-delay: 1.05s;
}

@keyframes worldClearedPulse {
  0% { box-shadow: 0 0 0 0 rgba(252, 224, 0, 0.5); }
  70% { box-shadow: 0 0 0 12px rgba(252, 224, 0, 0); }
  100% { box-shadow: 0 0 0 0 rgba(252, 224, 0, 0); }
}

.stamp-slot.earned {
  animation: worldClearedPulse 0.6s ease-out;
}

@keyframes coinBounce {
  0%, 100% { transform: translateY(0) scale(1); }
  40% { transform: translateY(-6px) scale(1.08); }
  60% { transform: translateY(-3px) scale(1.04); }
}
