
/* ============================================
   UNIVERSAL ANIMATIONS BUNDLE - v1.0
   Author: ChatGPT (2025)
   Description: Reusable CSS animations for Tailwind-based projects
   ============================================ */

/* === FADE ANIMATIONS === */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
.animate-fade-in { animation: fadeIn 0.8s ease-out forwards; }

@keyframes fadeInUp { 0% { opacity: 0; transform: translateY(30px); } 100% { opacity: 1; transform: translateY(0); } }
.animate-fade-in-up { animation: fadeInUp 0.9s ease-out forwards; }

@keyframes fadeInDown { 0% { opacity: 0; transform: translateY(-30px); } 100% { opacity: 1; transform: translateY(0); } }
.animate-fade-in-down { animation: fadeInDown 0.9s ease-out forwards; }

/* === SLIDE ANIMATIONS === */
@keyframes slideInLeft { 0% { opacity: 0; transform: translateX(-50px); } 100% { opacity: 1; transform: translateX(0); } }
.animate-slide-in-left { animation: slideInLeft 0.8s ease-out forwards; }

@keyframes slideInRight { 0% { opacity: 0; transform: translateX(50px); } 100% { opacity: 1; transform: translateX(0); } }
.animate-slide-in-right { animation: slideInRight 0.8s ease-out forwards; }

/* === SCALE / ZOOM === */
@keyframes zoomIn { 0% { opacity: 0; transform: scale(0.8); } 100% { opacity: 1; transform: scale(1); } }
.animate-zoom-in { animation: zoomIn 0.7s ease-out forwards; }

@keyframes zoomOut { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(0.8); } }
.animate-zoom-out { animation: zoomOut 0.7s ease-in forwards; }

/* === FLOATING / BOUNCING === */
@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
.animate-float { animation: float 3s ease-in-out infinite; }

@keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
.animate-bounce { animation: bounce 1.6s ease-in-out infinite; }

/* === ROTATE / SPIN === */
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
.animate-spin-slow { animation: spin 6s linear infinite; }
.animate-spin-fast { animation: spin 1s linear infinite; }

/* === PULSE / BLINK === */
@keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.7; transform: scale(1.05); } }
.animate-pulse { animation: pulse 1.8s ease-in-out infinite; }

@keyframes blink { 0%, 50%, 100% { opacity: 1; } 25%, 75% { opacity: 0; } }
.animate-blink { animation: blink 1.5s step-start infinite; }

/* === SWING / SHAKE === */
@keyframes swing { 20% { transform: rotate(10deg); } 40% { transform: rotate(-10deg); } 60% { transform: rotate(5deg); } 80% { transform: rotate(-5deg); } 100% { transform: rotate(0deg); } }
.animate-swing { transform-origin: top center; animation: swing 1s ease-in-out; }

@keyframes shake { 0%, 100% { transform: translateX(0); } 20%, 60% { transform: translateX(-10px); } 40%, 80% { transform: translateX(10px); } }
.animate-shake { animation: shake 0.6s ease-in-out; }

/* === PAGE LOAD === */
@keyframes pageLoad { from { opacity: 0; } to { opacity: 1; } }
body { animation: pageLoad 0.8s ease-out; }


@keyframes wave {
  0%, 60%, 100% {
    transform: translateY(0);
  }
  30% {
    transform: translateY(-10px);
  }
}
.animate-wave {
  animation: wave 0.8s ease-in-out infinite;
}