@keyframes pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.5; transform: scale(1.3); }
}

@keyframes glow {
    0%, 100% { box-shadow: 0 0 6px rgba(239,68,68,0.4); }
    50% { box-shadow: 0 0 22px rgba(239,68,68,0.7); }
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes slideIn {
    from { transform: translateX(-100%); }
    to { transform: translateX(0); }
}

/* Pitch player entry - pop in with bounce */
@keyframes pitchPlayerEnter {
    0%   { opacity: 0; transform: translate(-50%, -50%) scale(0.2); }
    70%  { transform: translate(-50%, -50%) scale(1.15); }
    100% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}

/* Formation line draw-in */
@keyframes lineDraw {
    from { stroke-dashoffset: 200; opacity: 0; }
    to   { stroke-dashoffset: 0; opacity: 1; }
}

/* Live match score pulse */
@keyframes scorePulse {
    0%, 100% { text-shadow: none; }
    50% { text-shadow: 0 0 12px rgba(239,68,68,0.6); }
}

/* Card entrance */
@keyframes cardIn {
    from { opacity: 0; transform: translateY(14px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* Respiracion del gradiente del body — pulso muy sutil */
@keyframes bodyBreath {
    from { opacity: 0.5; }
    to   { opacity: 1; }
}

/* Orbes de fondo — movimiento lento GPU-acelerado */
@keyframes orbDrift1 {
    from { transform: translate(0, 0) scale(1); }
    to   { transform: translate(-70px, 80px) scale(1.12); }
}
@keyframes orbDrift2 {
    from { transform: translate(0, 0) scale(1); }
    to   { transform: translate(65px, -75px) scale(1.08); }
}
@keyframes orbDrift3 {
    from { transform: translate(0, 0) scale(1); }
    to   { transform: translate(-55px, 65px) scale(1.15); }
}
