[data-aos="fade-up"] { transform: translateY(22px); opacity: 0; transition-property: transform, opacity; }
[data-aos="fade-right"] { transform: translateX(-20px); opacity: 0; transition-property: transform, opacity; }
[data-aos].aos-animate { transform: translate(0, 0); opacity: 1; }

@keyframes borderShift {
  0% { filter: hue-rotate(0deg); }
  100% { filter: hue-rotate(360deg); }
}

@keyframes scrollBounce {
  0%, 100% { transform: translateY(-3px); opacity: .95; }
  50% { transform: translateY(8px); opacity: .35; }
}

@keyframes badgePulse {
  0%,100% { box-shadow: 0 0 10px rgba(0,229,255,.32); }
  50% { box-shadow: 0 0 26px rgba(0,229,255,.56); }
}

@keyframes softPulse {
  0%,100% { transform: scale(1); }
  50% { transform: scale(1.06); }
}

@keyframes kenBurns {
  0% { transform: scale(1); }
  100% { transform: scale(1.08); }
}

@keyframes iconBounce {
  0%, 100% { transform: translateY(0); }
  30% { transform: translateY(-6px); }
  60% { transform: translateY(2px); }
}

@keyframes terminalBlink {
  50% { opacity: 0; }
}

@keyframes titlePulse {
  0% { text-shadow: 0 0 0 rgba(0,229,255,0); }
  50% { text-shadow: 0 0 26px rgba(0,229,255,.5); }
  100% { text-shadow: 0 0 0 rgba(0,229,255,0); }
}

@keyframes floatCode {
  0% { transform: translate3d(0, 0, 0) rotate(-5deg); }
  50% { transform: translate3d(20px, -18px, 0) rotate(3deg); }
  100% { transform: translate3d(-16px, 14px, 0) rotate(-2deg); }
}
