/* ==========================================================================
   CytheScoreBoard - KEYFRAMES & DYNAMIC ANIMATIONS
   ========================================================================== */

/* Fade in animation */
@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Subtle float animation for parallax badges */
@keyframes floatSlow {
  0%, 100% {
    transform: translateY(0px) rotate(0deg);
  }
  50% {
    transform: translateY(-12px) rotate(1deg);
  }
}

/* Glowing dot pulse */
@keyframes pulseDot {
  0% {
    transform: scale(0.95);
    box-shadow: 0 0 0 0 rgba(0, 240, 144, 0.7);
  }
  70% {
    transform: scale(1.1);
    box-shadow: 0 0 0 8px rgba(0, 240, 144, 0);
  }
  100% {
    transform: scale(0.95);
    box-shadow: 0 0 0 0 rgba(0, 240, 144, 0);
  }
}

/* Neon border glowing pulse */
@keyframes neonBorderPulse {
  0% {
    border-color: rgba(0, 240, 144, 0.3);
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5), inset 0 0 15px rgba(0, 240, 144, 0.1), 0 0 25px rgba(0, 240, 144, 0.2);
  }
  100% {
    border-color: rgba(0, 210, 255, 0.7);
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5), inset 0 0 25px rgba(0, 210, 255, 0.25), 0 0 45px rgba(0, 210, 255, 0.4);
  }
}

/* Score bump animation when +1 or -1 is triggered */
@keyframes scorePunch {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.35) rotate(-3deg);
    color: var(--neon-green);
    text-shadow: 0 0 30px var(--neon-green);
  }
  100% {
    transform: scale(1) rotate(0deg);
  }
}

.score-punch {
  animation: scorePunch 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

/* Substitution pop-in banner */
@keyframes bannerSlideIn {
  0% {
    transform: translateY(100%);
    opacity: 0;
  }
  20% {
    transform: translateY(0);
    opacity: 1;
  }
  80% {
    transform: translateY(0);
    opacity: 1;
  }
  100% {
    transform: translateY(100%);
    opacity: 0;
  }
}

.sub-banner-anim {
  animation: bannerSlideIn 4s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

/* Gradient text shine */
@keyframes textShimmer {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}

.shimmer-text {
  background: linear-gradient(270deg, #ffffff, #00f090, #00d2ff, #ffffff);
  background-size: 300% 300%;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: textShimmer 6s ease infinite;
}

/* Scanline effect for broadcast look */
.scanlines {
  position: relative;
}

.scanlines::after {
  content: " ";
  display: block;
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
  background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.25) 50%), linear-gradient(90deg, rgba(255, 0, 0, 0.03), rgba(0, 255, 0, 0.01), rgba(0, 0, 255, 0.03));
  z-index: 5;
  background-size: 100% 3px, 4px 100%;
  pointer-events: none;
  opacity: 0.7;
}

/* Ambient glow orb breathing */
@keyframes orbBreathe {
  0%, 100% {
    transform: scale(1) translate(0, 0);
    opacity: 0.22;
  }
  50% {
    transform: scale(1.15) translate(20px, -20px);
    opacity: 0.32;
  }
}

.orb-1 {
  animation: orbBreathe 12s ease-in-out infinite;
}

.orb-2 {
  animation: orbBreathe 15s ease-in-out infinite reverse;
}

.orb-3 {
  animation: orbBreathe 18s ease-in-out infinite 2s;
}

/* Interactive Cursor Glow Follower */
.cursor-glow {
  position: fixed;
  width: 450px;
  height: 450px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(0, 240, 144, 0.08) 0%, transparent 65%);
  pointer-events: none;
  z-index: 1;
  transform: translate(-50%, -50%);
  transition: width 0.3s, height 0.3s, opacity 0.3s;
}

/* Green Moving Particle Dots Following Pointer */
.cursor-particles-container {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 9999;
  overflow: hidden;
}

.cursor-particle-dot {
  position: absolute;
  top: 0;
  left: 0;
  border-radius: 50%;
  background: #00f090;
  box-shadow: 0 0 6px #00f090, 0 0 12px rgba(0, 240, 144, 0.85);
  pointer-events: none;
  will-change: transform, opacity;
  transform: translate3d(-100px, -100px, 0);
  transition: opacity 0.2s ease;
}

/* Parallax element smoothing transition */
[data-parallax] {
  will-change: transform;
}
