/* 动画基础样式 */
.animate-ready {
  opacity: 0;
  transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

.animate-in {
  opacity: 1 !important;
  transform: translate(0) scale(1) !important;
}

/* 淡入动画 */
.animate-fade-in {
  opacity: 0;
}

/* 上移淡入 */
.animate-slide-up {
  opacity: 0;
  transform: translateY(30px);
}

/* 下移淡入 */
.animate-slide-down {
  opacity: 0;
  transform: translateY(-30px);
}

/* 左移淡入 */
.animate-slide-left {
  opacity: 0;
  transform: translateX(30px);
}

/* 右移淡入 */
.animate-slide-right {
  opacity: 0;
  transform: translateX(-30px);
}

/* 缩放淡入 */
.animate-zoom-in {
  opacity: 0;
  transform: scale(0.9);
}

/* 弹跳进入 */
.animate-bounce-in {
  opacity: 0;
  transform: scale(0.8);
  transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

.animate-bounce-in.animate-in {
  animation: bounce-in 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

@keyframes bounce-in {
  0% {
    opacity: 0;
    transform: scale(0.8);
  }
  70% {
    transform: scale(1.05);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}
