/* スクロール・リビール（昨年度アーカイブと同方式: opacity:0 → .is-visible でふわっと）。
   reveal.js（IntersectionObserver）が交差時に .is-visible を付与する。 */
[data-reveal] {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.9s ease, transform 0.9s ease;
  transition-delay: var(--reveal-delay, 0ms);
  will-change: opacity, transform;
}

[data-reveal].is-visible {
  opacity: 1;
  transform: none;
}

/* reduced-motion では移動（transform）はやめ、フェード（opacity）は残す */
@media (prefers-reduced-motion: reduce) {
  [data-reveal] {
    transform: none;
    transition: opacity 0.9s ease;
    transition-delay: var(--reveal-delay, 0ms);
  }
  [data-reveal].is-visible {
    transform: none;
  }
}

/* fail-open: reveal.js が動かなかった場合（実行エラー・実行前）は無条件表示。
   archive 由来 CSS の [data-reveal]（opacity:0）と同詳細度だが、
   :not() 分だけ詳細度が高く常に勝つ。 */
html:not(.js-reveal) [data-reveal] {
  opacity: 1;
  transform: none;
}
