/* ===== 通用高端动画库 ===== */

/* 淡入上浮 */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(60px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInLeft {
  from { opacity: 0; transform: translateX(-60px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes fadeInRight {
  from { opacity: 0; transform: translateX(60px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.8); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes blurIn {
  from { opacity: 0; filter: blur(20px); transform: scale(1.1); }
  to   { opacity: 1; filter: blur(0); transform: scale(1); }
}
@keyframes pulseGlow {
  0%,100% { box-shadow: 0 0 20px rgba(0,0,0,0.1); }
  50%     { box-shadow: 0 0 40px rgba(0,0,0,0.2), 0 0 80px rgba(0,0,0,0.05); }
}
@keyframes breathe {
  0%,100% { opacity: 0.6; transform: scale(1); }
  50%     { opacity: 1;   transform: scale(1.05); }
}
@keyframes float {
  0%,100% { transform: translateY(0); }
  50%     { transform: translateY(-20px); }
}
@keyframes spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}
@keyframes gradientFlow {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}
@keyframes neonFlicker {
  0%,18%,22%,55%,100% { opacity: 1; }
  20%  { opacity: 0.4; }
  56%  { opacity: 0.7; }
}
@keyframes glitch {
  0%   { clip-path: inset(20% 0 60% 0); transform: translate(-3px,2px); }
  20%  { clip-path: inset(60% 0 10% 0); transform: translate(3px,-2px); }
  40%  { clip-path: inset(40% 0 30% 0); transform: translate(-2px,3px); }
  60%  { clip-path: inset(80% 0 5% 0);  transform: translate(2px,-3px); }
  80%  { clip-path: inset(10% 0 70% 0); transform: translate(-3px,2px); }
  100% { clip-path: inset(30% 0 40% 0); transform: translate(0); }
}
@keyframes bounce {
  0%,20%,50%,80%,100% { transform: translateY(0); }
  40%  { transform: translateY(-30px); }
  60%  { transform: translateY(-15px); }
}
@keyframes swing {
  0%,100% { transform: rotate(0deg); }
  15% { transform: rotate(5deg); }
  30% { transform: rotate(-5deg); }
  45% { transform: rotate(3deg); }
  60% { transform: rotate(-3deg); }
  75% { transform: rotate(1deg); }
}
@keyframes shake {
  0%,100% { transform: translateX(0); }
  10%,50%,90% { transform: translateX(-2px); }
  30%,70% { transform: translateX(2px); }
}
@keyframes ripple {
  0%   { transform: scale(0); opacity: 1; }
  100% { transform: scale(4); opacity: 0; }
}
