/* ============================================
   Motion — 动画与微交互
   ============================================ */

/* ===== 关键帧 ===== */
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.6; transform: scale(1.3); }
}

@keyframes bump {
  0% { transform: scale(1); }
  40% { transform: scale(1.4); }
  100% { transform: scale(1); }
}

@keyframes rise {
  from {
    opacity: 0;
    transform: translateY(40px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes drift-1 {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(10vw, 5vh) scale(1.1); }
  66% { transform: translate(-5vw, 10vh) scale(0.9); }
}

@keyframes drift-2 {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(-8vw, 8vh) scale(1.15); }
  66% { transform: translate(5vw, -5vh) scale(0.95); }
}

@keyframes drift-3 {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(8vw, -8vh) scale(0.95); }
  66% { transform: translate(-6vw, -4vh) scale(1.1); }
}

@keyframes drift-4 {
  0%, 100% { transform: translate(0, 0) scale(1) rotate(0); }
  50% { transform: translate(-10vw, 10vh) scale(1.2) rotate(45deg); }
}

@keyframes float {
  0%, 100% { transform: translateY(0) rotate(-1deg); }
  50% { transform: translateY(-20px) rotate(1deg); }
}

@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

/* ===== 入场动画工具类 ===== */
.reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out);
}

.reveal.in-view {
  opacity: 1;
  transform: translateY(0);
}

/* 错开延迟 */
.reveal[data-delay="1"] { transition-delay: 0.08s; }
.reveal[data-delay="2"] { transition-delay: 0.16s; }
.reveal[data-delay="3"] { transition-delay: 0.24s; }
.reveal[data-delay="4"] { transition-delay: 0.32s; }
.reveal[data-delay="5"] { transition-delay: 0.4s; }
.reveal[data-delay="6"] { transition-delay: 0.48s; }
.reveal[data-delay="7"] { transition-delay: 0.56s; }
.reveal[data-delay="8"] { transition-delay: 0.64s; }

/* 卡片入场 — 网格项目 */
.book-card.reveal {
  transform: translateY(50px) scale(0.96);
}

.book-card.reveal.in-view {
  transform: translateY(0) scale(1);
}

/* ===== 减少动画偏好 ===== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }

  .reveal { opacity: 1; transform: none; }
  .aurora-orb { animation: none !important; }
}
