/* 动画关键帧定义 */

/* === 淡入上移 === */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(24px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* === 淡出下移 === */
@keyframes fadeOutDown {
  from {
    opacity: 1;
    transform: translateY(0);
  }
  to {
    opacity: 0;
    transform: translateY(-24px);
  }
}

/* === 淡入缩放 === */
@keyframes fadeInScale {
  from {
    opacity: 0;
    transform: scale(0.92);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* === 水墨扩散 === */
@keyframes inkSpread {
  0% {
    transform: scale(0.3);
    opacity: 0.6;
  }
  60% {
    transform: scale(1.05);
    opacity: 0.1;
  }
  100% {
    transform: scale(1.5);
    opacity: 0;
  }
}

/* === 墨滴落下 === */
@keyframes inkDrop {
  0% {
    transform: translateY(-20px) scale(0.5);
    opacity: 0;
  }
  60% {
    transform: translateY(2px) scale(1.02);
    opacity: 1;
  }
  80% {
    transform: translateY(-1px) scale(0.99);
  }
  100% {
    transform: translateY(0) scale(1);
    opacity: 1;
  }
}

/* === 笔画书写（用于文字揭示） === */
@keyframes brushStroke {
  from {
    clip-path: inset(0 100% 0 0);
  }
  to {
    clip-path: inset(0 0 0 0);
  }
}

/* === 旋转（用于装饰元素） === */
@keyframes slowRotate {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* === 印章落下 === */
@keyframes stampDown {
  0% {
    transform: scale(1.8) rotate(-8deg);
    opacity: 0;
  }
  70% {
    transform: scale(0.95) rotate(2deg);
    opacity: 0.9;
  }
  85% {
    transform: scale(1.02) rotate(-1deg);
  }
  100% {
    transform: scale(1) rotate(0deg);
    opacity: 0.85;
  }
}

/* === 环形绘制（匹配度圆环） === */
@keyframes drawCircle {
  from {
    stroke-dashoffset: 283; /* 2*PI*45 ≈ 283 */
  }
  to {
    stroke-dashoffset: var(--circle-offset, 50);
  }
}

/* === 脉冲呼吸 === */
@keyframes breathe {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}

/* === 应用类 === */
.anim-fade-in-up {
  animation: fadeInUp 0.5s ease forwards;
}

.anim-fade-out-down {
  animation: fadeOutDown 0.35s ease forwards;
}

.anim-fade-in-scale {
  animation: fadeInScale 0.5s ease forwards;
}

.anim-ink-drop {
  animation: inkDrop 0.6s ease forwards;
}

.anim-stamp {
  animation: stampDown 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

.anim-brush {
  animation: brushStroke 1s ease forwards;
}

/* 动画延迟工具类 */
.delay-100 { animation-delay: 100ms; }
.delay-200 { animation-delay: 200ms; }
.delay-300 { animation-delay: 300ms; }
.delay-400 { animation-delay: 400ms; }
.delay-500 { animation-delay: 500ms; }
.delay-600 { animation-delay: 600ms; }
.delay-800 { animation-delay: 800ms; }
.delay-1000 { animation-delay: 1000ms; }
.delay-1200 { animation-delay: 1200ms; }

/* 初始隐藏（等待动画触发） */
.anim-init-hidden {
  opacity: 0;
}
