/**
 * Champs Live — Result & Leaderboard CSS
 * Additional overrides and animation utilities
 */

/* Animated number counter */
@keyframes res-count-up {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

.res-score-val, .res-stat-val {
  animation: res-count-up 0.6s ease forwards;
}

/* Rank hero shimmer for 1st place */
.lb-p1 .lb-podium-name {
  background: linear-gradient(90deg, var(--champs-gold), #fff8c0, var(--champs-gold));
  background-size: 200% auto;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  animation: champs-shimmer 3s linear infinite;
}

/* Confetti animation for top ranks */
@keyframes confetti-fall {
  0%   { transform: translateY(-10px) rotate(0deg);   opacity: 1; }
  100% { transform: translateY(60px)  rotate(360deg); opacity: 0; }
}

.res-confetti-dot {
  position: absolute;
  width: 6px; height: 6px;
  border-radius: 50%;
  animation: confetti-fall 1.5s ease forwards;
  pointer-events: none;
}

/* Exam complete checkmark */
@keyframes check-draw {
  from { stroke-dashoffset: 100; }
  to   { stroke-dashoffset: 0; }
}

.exam-done-check {
  stroke-dasharray: 100;
  stroke-dashoffset: 100;
  animation: check-draw 0.6s ease 0.3s forwards;
}
