/**
 * 仅保留站点实际用到的 animate.css 子集，避免拉取完整 CDN 包。
 * 覆盖：案例卡片 hover + 首页 logo 墙换组动效。
 */
.animate__animated {
  animation-duration: 0.6s;
  animation-fill-mode: both;
}

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translate3d(0, 24px, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

@keyframes fadeOutDown {
  from { opacity: 1; }
  to {
    opacity: 0;
    transform: translate3d(0, 24px, 0);
  }
}

@keyframes fadeInLeft {
  from {
    opacity: 0;
    transform: translate3d(-24px, 0, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

@keyframes fadeOutLeft {
  from { opacity: 1; }
  to {
    opacity: 0;
    transform: translate3d(-24px, 0, 0);
  }
}

@keyframes fadeInRight {
  from {
    opacity: 0;
    transform: translate3d(24px, 0, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

@keyframes fadeOutRight {
  from { opacity: 1; }
  to {
    opacity: 0;
    transform: translate3d(24px, 0, 0);
  }
}

@keyframes fadeInBottomLeft {
  from {
    opacity: 0;
    transform: translate3d(-24px, 24px, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

@keyframes fadeOutBottomLeft {
  from { opacity: 1; }
  to {
    opacity: 0;
    transform: translate3d(-24px, 24px, 0);
  }
}

@keyframes fadeInBottomRight {
  from {
    opacity: 0;
    transform: translate3d(24px, 24px, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

@keyframes fadeOutBottomRight {
  from { opacity: 1; }
  to {
    opacity: 0;
    transform: translate3d(24px, 24px, 0);
  }
}

@keyframes slideInLeft {
  from {
    transform: translate3d(-40%, 0, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}

@keyframes slideInRight {
  from {
    transform: translate3d(40%, 0, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}

@keyframes slideOutLeft {
  from {
    transform: translate3d(0, 0, 0);
  }
  to {
    visibility: hidden;
    transform: translate3d(-40%, 0, 0);
  }
}

@keyframes slideOutRight {
  from {
    transform: translate3d(0, 0, 0);
  }
  to {
    visibility: hidden;
    transform: translate3d(40%, 0, 0);
  }
}

.animate__fadeIn { animation-name: fadeIn; }
.animate__fadeOut { animation-name: fadeOut; }
.animate__fadeInUp { animation-name: fadeInUp; }
.animate__fadeOutDown { animation-name: fadeOutDown; }
.animate__fadeInLeft { animation-name: fadeInLeft; }
.animate__fadeOutLeft { animation-name: fadeOutLeft; }
.animate__fadeInRight { animation-name: fadeInRight; }
.animate__fadeOutRight { animation-name: fadeOutRight; }
.animate__fadeInBottomLeft { animation-name: fadeInBottomLeft; }
.animate__fadeOutBottomLeft { animation-name: fadeOutBottomLeft; }
.animate__fadeInBottomRight { animation-name: fadeInBottomRight; }
.animate__fadeOutBottomRight { animation-name: fadeOutBottomRight; }
.animate__slideInLeft { animation-name: slideInLeft; }
.animate__slideInRight { animation-name: slideInRight; }
.animate__slideOutLeft { animation-name: slideOutLeft; }
.animate__slideOutRight { animation-name: slideOutRight; }
