/* ============================================
   ANIMATIONS & KEYFRAMES
   ============================================ */

/* FADE IN UP */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(80px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* FADE IN DOWN */
@keyframes fadeInDown {
  from {
    opacity: 0;
    transform: translateY(-50px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* SLIDE IN LEFT */
@keyframes slideInLeft {
  from {
    opacity: 0;
    transform: translateX(-100px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* SLIDE IN RIGHT */
@keyframes slideInRight {
  from {
    opacity: 0;
    transform: translateX(100px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* GLOW EFFECT */
@keyframes glow {
  0%, 100% {
    box-shadow: 0 0 0 0 rgba(139, 0, 0, 0.4);
  }
  50% {
    box-shadow: 0 0 0 20px rgba(139, 0, 0, 0);
  }
}

/* FLOAT UP */
@keyframes floatUp {
  0%, 100% {
    transform: translateY(0px);
  }
  50% {
    transform: translateY(-20px);
  }
}

/* GRADIENT SHIFT */
@keyframes gradientShift {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}

/* SHIMMER EFFECT */
@keyframes shimmer {
  0% {
    background-position: -1000px 0;
  }
  100% {
    background-position: 1000px 0;
  }
}

/* TICKER ANIMATION */
@keyframes ticker {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-50%);
  }
}

/* COUNT UP */
@keyframes countup {
  from {
    opacity: 0;
    transform: scale(0.5);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* TICKER PULSE */
@keyframes tickerPulse {
  0%, 100% {
    opacity: 1;
  }
  50% {
    opacity: 0.6;
  }
}

/* BLINK */
@keyframes blink {
  0%, 100% {
    opacity: 1;
  }
  50% {
    opacity: 0.3;
  }
}

/* PULSE GLOW */
@keyframes pulse-glow {
  0% {
    box-shadow: 0 0 20px rgba(56, 217, 169, 0.3);
  }
  100% {
    box-shadow: 0 0 45px rgba(56, 217, 169, 0.6);
  }
}

/* SWEEP ANIMATION (for portfolio) */
@keyframes sweep {
  0% {
    opacity: 0.5;
    transform: translateX(-5%) translateY(-5%);
  }
  100% {
    opacity: 1;
    transform: translateX(5%) translateY(5%);
  }
}

/* GLOW PULSE (for portfolio) */
@keyframes glow-pulse {
  0% {
    opacity: 0.6;
    transform: scale(1);
  }
  100% {
    opacity: 1;
    transform: scale(1.15);
  }
}

/* ITEM IN (for portfolio) */
@keyframes item-in {
  from {
    opacity: 0;
    transform: translateX(-16px) scale(0.97);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* FADE IN (for calculator) */
@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* SPIN (for loading) */
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

/* FLOAT (for calculator) */
@keyframes float {
  0%, 100% {
    transform: translateY(0) rotate(0deg);
  }
  50% {
    transform: translateY(-20px) rotate(180deg);
  }
}