/* Converted from src/components/site/ui/Reveal.module.css (CSS Module): local classes are prefixed "ui-reveal__". */
/* Reveal-on-scroll (Elementor entrance animations as remapped by the Ohio theme, and AOS).
   Content stays visible without JS and with prefers-reduced-motion; html[data-js] is set by the
   inline theme script.

   Ohio replaces Elementor's fades with its "Short" keyframes (ohio.css):
     .elementor .fadeInUp { animation-name: fadeInUpShort }   from translate3d(0, 2rem, 0)
     fadeInDownShort -2rem, fadeInLeftShort +2rem (moves left), fadeInRightShort -2rem (moves right)
     .elementor .fadeIn{Up,Down,Left,Right} { animation-duration: var(--clb-transition-duration) } = .35s
   Elementor's .animated-slow (2s) / .animated-fast (.75s) still win (loaded later, same specificity).
   slideInUp and fadeIn are not remapped: Elementor's own keyframes (100%) and .animated 1.25s. */

.ui-reveal__reveal {
  --reveal-duration: 1.25s;
  --reveal-delay: 0ms;
  --reveal-distance: 100%;
}

/* Ohio fadeIn*Short: 2rem travel, .35s (before .slow / .fast so the speed classes win) */
.ui-reveal__fadeUp,
.ui-reveal__fadeDown,
.ui-reveal__fadeLeft,
.ui-reveal__fadeRight {
  --reveal-duration: 0.35s;
  --reveal-distance: 2rem;
}

.ui-reveal__slow {
  --reveal-duration: 2s;
}

.ui-reveal__fast {
  --reveal-duration: 0.75s;
}

html[data-js] .ui-reveal__reveal:not([data-reveal="in"]) {
  opacity: 0;
}

/* Failsafe: if the page never hydrates, show the content after 3s. */
html[data-js] .ui-reveal__reveal:not([data-reveal]) {
  animation: ui-reveal__reveal-failsafe 0s linear 3s forwards;
}

.ui-reveal__reveal[data-reveal="in"] {
  animation-duration: var(--reveal-duration);
  animation-delay: var(--reveal-delay);
  animation-fill-mode: both;
  animation-timing-function: ease;
}

.ui-reveal__fadeUp[data-reveal="in"] {
  animation-name: ui-reveal__reveal-fade-up;
}

.ui-reveal__fadeDown[data-reveal="in"] {
  animation-name: ui-reveal__reveal-fade-down;
}

.ui-reveal__fadeLeft[data-reveal="in"] {
  animation-name: ui-reveal__reveal-fade-left;
}

.ui-reveal__fadeRight[data-reveal="in"] {
  animation-name: ui-reveal__reveal-fade-right;
}

.ui-reveal__fade[data-reveal="in"] {
  animation-name: ui-reveal__reveal-fade;
}

/* slideInUp: no fade. Hidden during the delay (like .elementor-invisible), then slides in. */
.ui-reveal__slideUp[data-reveal="in"] {
  opacity: 0;
  animation-name: ui-reveal__reveal-slide-up;
  animation-fill-mode: forwards;
}

/* AOS with once: false — scrolled back above the trigger line: the element goes back to its
   resting state (AOS removes .aos-animate: 400ms reverse transition, no delay). */
.ui-reveal__fadeUp {
  --reveal-out: translate3d(0, var(--reveal-distance), 0);
}

.ui-reveal__fadeDown {
  --reveal-out: translate3d(0, calc(var(--reveal-distance) * -1), 0);
}

.ui-reveal__fadeLeft {
  --reveal-out: translate3d(var(--reveal-distance), 0, 0);
}

.ui-reveal__fadeRight {
  --reveal-out: translate3d(calc(var(--reveal-distance) * -1), 0, 0);
}

.ui-reveal__reveal[data-reveal="out"] {
  animation: ui-reveal__reveal-out var(--reveal-duration) ease forwards;
}

@keyframes ui-reveal__reveal-failsafe {
  to {
    opacity: 1;
  }
}

@keyframes ui-reveal__reveal-fade {
  from {
    opacity: 0;
  }
}

@keyframes ui-reveal__reveal-fade-up {
  from {
    opacity: 0;
    transform: translate3d(0, var(--reveal-distance), 0);
  }
}

@keyframes ui-reveal__reveal-fade-down {
  from {
    opacity: 0;
    transform: translate3d(0, calc(var(--reveal-distance) * -1), 0);
  }
}

@keyframes ui-reveal__reveal-slide-up {
  from {
    opacity: 1;
    transform: translate3d(0, var(--reveal-distance), 0);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* fadeInLeft (Ohio fadeInLeftShort): starts on the right, moves left */
@keyframes ui-reveal__reveal-fade-left {
  from {
    opacity: 0;
    transform: translate3d(var(--reveal-distance), 0, 0);
  }
}

/* fadeInRight (Ohio fadeInRightShort): starts on the left, moves right */
@keyframes ui-reveal__reveal-fade-right {
  from {
    opacity: 0;
    transform: translate3d(calc(var(--reveal-distance) * -1), 0, 0);
  }
}

/* Ends untransformed (still hidden) so the next trigger is measured on the element's layout box. */
@keyframes ui-reveal__reveal-out {
  from {
    opacity: 1;
    transform: none;
  }
  99.9% {
    opacity: 0;
    transform: var(--reveal-out, none);
  }
  to {
    opacity: 0;
    transform: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  html[data-js] .ui-reveal__reveal:not([data-reveal="in"]),
  .ui-reveal__reveal[data-reveal="in"] {
    opacity: 1;
    animation: none;
  }
}
