/* Progressive enhancement:
   - By default (no JS / module blocked), content should be visible.
   - When JS runs, we add `html.js` and enable reveal transitions.
   - Fallback animation ensures content is always shown after 1.4s
     even if IntersectionObserver never fires (e.g. file:// protocol). */
.reveal {
  opacity: 1;
  transform: none;
}

html.js .reveal {
  opacity: 0;
  transform: translate3d(0, 22px, 0);
  transition: opacity 700ms ease, transform 700ms ease;
  will-change: opacity, transform;
  animation: _reveal-fallback 0ms ease 1400ms forwards;
}

html.js .reveal.isVisible {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  animation: none;
}

@keyframes _reveal-fallback {
  to {
    opacity: 1;
    transform: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  html.js .reveal {
    opacity: 1;
    transform: none;
    transition: none;
    animation: none;
  }
}

