@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } }
@keyframes slideUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
@keyframes slideDown { from { transform: translateY(-20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
@keyframes slideLeft { from { transform: translateX(20px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
@keyframes slideRight { from { transform: translateX(-20px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
@keyframes scaleIn { from { transform: scale(0.9); opacity: 0; } to { transform: scale(1); opacity: 1; } }

@keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
@keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } }
@keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); } }
@keyframes wiggle { 0%, 100% { transform: rotate(0deg); } 25% { transform: rotate(-5deg); } 75% { transform: rotate(5deg); } }
@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-15px); } }

@keyframes glow { 0%, 100% { box-shadow: 0 0 10px rgba(255,105,180,0.5); } 50% { box-shadow: 0 0 25px rgba(255,105,180,0.8); } }
@keyframes heartbeat { 0%, 100% { transform: scale(1); } 15% { transform: scale(1.1); } 30% { transform: scale(1); } 45% { transform: scale(1.1); } }
@keyframes flipCard { from { transform: rotateY(0deg); } to { transform: rotateY(180deg); } }
@keyframes growUp { from { transform: scaleY(0); transform-origin: bottom; } to { transform: scaleY(1); transform-origin: bottom; } }
@keyframes twinkle { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } }

@keyframes bloomOpen { from { transform: scale(0) rotate(-45deg); opacity: 0; } to { transform: scale(1) rotate(0deg); opacity: 1; } }
@keyframes tailWag { 0%, 100% { transform: rotate(0deg); transform-origin: bottom center; } 50% { transform: rotate(15deg); } }
@keyframes eyeBlink { 0%, 90%, 100% { transform: scaleY(1); } 95% { transform: scaleY(0.1); } }
@keyframes sway { 0%, 100% { transform: rotate(-2deg); transform-origin: bottom center; } 50% { transform: rotate(2deg); transform-origin: bottom center; } }

.animate-fadeIn { animation: fadeIn var(--duration-normal) forwards; }
.animate-fadeOut { animation: fadeOut var(--duration-normal) forwards; }
.animate-bounce { animation: bounce 2s infinite; }
.animate-pulse { animation: pulse 2s infinite; }
.animate-shake { animation: shake 0.5s; }
.animate-float { animation: float 3s ease-in-out infinite; }
.animate-sway { animation: sway 4s ease-in-out infinite; }

.animate-delay-1 { animation-delay: 200ms; }
.animate-delay-2 { animation-delay: 400ms; }
.animate-delay-3 { animation-delay: 600ms; }
.animate-delay-4 { animation-delay: 800ms; }
.animate-delay-5 { animation-delay: 1000ms; }
