/**
 * Scroll reveal for the 1/2/3-column sections (the `animation` prop).
 *
 * The hidden state is only applied once js/reveal.js has added
 * .jarvis-reveal--armed, so a JS failure leaves the section plainly visible
 * rather than blank. The transform sits on the inner container, not the
 * section, so a full-width band never pushes the page sideways — and
 * overflow-x: clip catches the rest without creating a scroll container
 * (unlike overflow: hidden, which would break position: sticky inside).
 */
.jarvis-reveal {
  overflow-x: clip;
}

.jarvis-reveal > .container,
.jarvis-reveal > .container-fluid {
  transition: opacity 0.7s ease-out, transform 0.7s ease-out;
}

.jarvis-reveal--armed > .container,
.jarvis-reveal--armed > .container-fluid {
  opacity: 0;
}

.jarvis-reveal--right.jarvis-reveal--armed > .container,
.jarvis-reveal--right.jarvis-reveal--armed > .container-fluid {
  transform: translateX(40px);
}

.jarvis-reveal--left.jarvis-reveal--armed > .container,
.jarvis-reveal--left.jarvis-reveal--armed > .container-fluid {
  transform: translateX(-40px);
}

/* ADA (WCAG 2.3.3). js/reveal.js already skips arming under reduced motion;
   this is the belt-and-braces half, in case a section was armed before the
   preference changed. */
@media (prefers-reduced-motion: reduce) {
  .jarvis-reveal--armed > .container,
  .jarvis-reveal--armed > .container-fluid {
    opacity: 1;
    transform: none;
  }
}
