@keyframes slideUp { 
    from { transform: translateY(100%); } 
    to { transform: translateY(0); } 
}

.modal-enter { 
    animation: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards; 
}

@keyframes popIn { 
    0% { transform: scale(0.8); opacity: 0; } 
    100% { transform: scale(1); opacity: 1; } 
}

.animate-pop { 
    animation: popIn 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; 
}

@keyframes riseAndShine { 
    0% { transform: translateY(100px) scale(0.8); opacity: 0; } 
    100% { transform: translateY(0) scale(1); opacity: 1; } 
}

.animate-rise { 
    animation: riseAndShine 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; 
}

@keyframes expandWidth { 
    from { flex: 1; } 
    to { flex: 1.5; } 
}

.animate-expand { 
    animation: expandWidth 0.4s cubic-bezier(0.25, 1, 0.5, 1) forwards; 
}

@keyframes float { 
    0% { transform: translateY(0px); } 
    50% { transform: translateY(-10px); } 
    100% { transform: translateY(0px); } 
}

.animate-float { 
    animation: float 3s ease-in-out infinite; 
}

@keyframes spin-slow { 
    to { transform: rotate(360deg); } 
}

@keyframes pulse-soft { 
    0%, 100% { opacity: 1; } 
    50% { opacity: 0.6; } 
}

@keyframes flash-red {
    0%, 100% { opacity: 0.2; }
    50% { opacity: 1; }
}

@keyframes flash-blue {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.2; }
}

/* Fireworks animation */
@keyframes firework {
    0% { transform: translate(-50%, 60vh); width: 4px; opacity: 1; }
    50% { width: 4px; opacity: 1; }
    100% { width: 400px; opacity: 0; }
}
