/* =========================================================
   滚动进场动画（整站通用）
   - 元素进入视口时平滑淡入 + 位移/缩放
   - 初始隐藏态仅在 html.js 下生效：禁用 JS 或脚本出错时内容照常可见
   - 尊重系统“减少动态效果”偏好（prefers-reduced-motion）
   - 仅用 transform/opacity，不引发重排，不影响可访问性
   ========================================================= */

/* 默认：淡入 + 轻微上移 */
html.js .reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .7s cubic-bezier(.22, .61, .36, 1),
              transform .7s cubic-bezier(.22, .61, .36, 1);
  transition-delay: var(--reveal-delay, 0ms);
}

/* 变体：可单独使用，也可由 reveal.js 自动附加 */
html.js .reveal.reveal--left  { transform: translateX(-44px); }
html.js .reveal.reveal--right { transform: translateX(44px); }
html.js .reveal.reveal--scale { transform: scale(.92); }
html.js .reveal.reveal--fade  { transform: none; }   /* 仅淡入，无位移 */

/* 终态：进入视口 */
html.js .reveal.is-visible {
  opacity: 1;
  transform: none;
}

/* 仅在未显示时提示浏览器做合成层，显示后撤掉，节省内存/CPU */
html.js .reveal:not(.is-visible) {
  will-change: opacity, transform;
}

/* 可访问性：系统开启“减少动态效果”时，直接呈现，不做任何过渡 */
@media (prefers-reduced-motion: reduce) {
  html.js .reveal {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
    will-change: auto !important;
  }
}

/* 网格错峰容器：子项由 reveal.js 自动加 .reveal 并设 --reveal-delay */
.reveal-group { /* 仅作为标记钩子，无额外样式 */
}
