/* 动画与过渡：仅首页所需的关键帧；被 pages.css / components.css 引用 */

/* ink-breathe 见 main.css（背景呼吸已随 .ink-bg 一并定义，此处不重复声明以免层叠覆盖） */

/* 暖金呼吸：只有"有光/无光"两态，中间态交给插值，
   避免在关键帧里写第二种阴影色值（会破坏令牌唯一出处） */
@keyframes gold-pulse {
  0%,
  100% {
    box-shadow: none;
  }
  50% {
    box-shadow: var(--shadow-gold);
  }
}

/* ========== 阶段5前置：入场与氛围关键帧 ========== */

/* 通用入场：淡入 + 轻微上滑，供导航条/操作区/装饰区共用 */
@keyframes fade-up {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* 逐字浮现：主标题每个字一帧，位移比 fade-up 更小，避免整行抖动 */
@keyframes char-appear {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* 浮动粒子：位移与透明度同时缓动，首尾回到原点以便无缝循环 */
@keyframes float-gentle {
  0%,
  100% {
    transform: translateY(0);
    opacity: 0.3;
  }
  50% {
    transform: translateY(-12px);
    opacity: 0.6;
  }
}

/* slide-down：顶部导航栏从上方滑入，用于 .topbar 入场 */
@keyframes slide-down {
  from {
    opacity: 0;
    transform: translateY(-100%);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* ink-pulse：分析页"观/图/中"逐字呼吸，位移量交给 .page-analyze 的 --ink-lift，
   关键帧里不写字面像素，保持令牌与页面几何变量各自的唯一出处 */
@keyframes ink-pulse {
  0%,
  100% {
    opacity: 0.4;
    transform: translateY(0);
  }
  50% {
    opacity: 1;
    transform: translateY(calc(var(--ink-lift) * -1));
  }
}
