/* ===== 滚动揭示动画 (scroll reveal) =====
   元素进入视口时从下方向上淡入。
   只有在 <html> 带 .js 类时才隐藏（JS 正常加载）；
   若 JS 失败，内容照常显示，不会空白。 */
html.js [data-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(--rd, 0s);
  will-change: opacity, transform;
}
html.js [data-reveal].is-visible {
  opacity: 1;
  transform: none;
}
/* 离场（离开视口）立即收起，不带交错延迟，回滚更跟手 */
html.js [data-reveal]:not(.is-visible) {
  transition-delay: 0s;
}

/* 尊重系统“减少动态效果”偏好：直接显示，不做动画 */
@media (prefers-reduced-motion: reduce) {
  html.js [data-reveal] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}
