/* =============================================================
   Scroll-reveal — cascading fade+rise as sections enter view.
   Driven by scroll-reveal.js which tags elements with .reveal
   (and sets --reveal-delay for staggered children).
   Easing matches the hero entrance for one cohesive language.
   ============================================================= */

/* Pre-hide future reveal targets BEFORE scroll-reveal.js runs, so the
   user never sees content flash to opacity 0. The inline <script> in
   header.php sets html.js-reveal-pre synchronously in <head>. The JS
   then takes over and adds .reveal / .is-in to drive the cascade.
   Selectors here MUST mirror the `groups` array in scroll-reveal.js. */
.js-reveal-pre .at-pitch-inner             > *,
.js-reveal-pre .at-workflow-panel-inner    > *,
.js-reveal-pre .at-dealers-grid            > *,
.js-reveal-pre .at-solutions-content       > *,
.js-reveal-pre .at-twocards-inner          > *,
.js-reveal-pre .at-partners                > *,
.js-reveal-pre .at-faq-inner               > *,
.js-reveal-pre .at-faq-list                > *,
.js-reveal-pre .at-final-cta-inner         > *,
.js-reveal-pre .at-footer-top              > *,
/* ----- News page reveal targets (mirror scroll-reveal.js groups) ----- */
.js-reveal-pre .news-hero-editorial__grid  > *,
.js-reveal-pre .news-hero-editorial__topics .news-filters > *,
.js-reveal-pre .news-row__track            > *,
.js-reveal-pre .news-grid                  > *,
/* ----- About page reveal targets (mirror scroll-reveal.js groups) ----- */
.js-reveal-pre .about-why                  > *,
.js-reveal-pre .about-process__head        > *,
.js-reveal-pre .about-process__steps       > *,
.js-reveal-pre .about-timeline             > *,
/* ----- Careers page reveal targets (mirror scroll-reveal.js groups) ----- */
.js-reveal-pre .careers-hero-inner         > *,
.js-reveal-pre .alttune-page--careers .about-row-1 > *,
.js-reveal-pre .alttune-page--careers .about-row-2 > *,
.js-reveal-pre .openings-head              > *,
.js-reveal-pre .opening-stack              > *,
/* ----- Become a Dealer split rows ----- */
.js-reveal-pre .bad-split__copy            > * {
  opacity: 0;
}
.js-reveal-pre .at-trusted,
.js-reveal-pre .at-workflow-card,
.js-reveal-pre .news-hero-editorial__head,
.js-reveal-pre .news-row__head,
.js-reveal-pre .bad-split__media,
.js-reveal-pre .alttune-page--careers .app-form,
.js-reveal-pre .alttune-page--about .at-section.dark .at-section-head {
  opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
  .js-reveal-pre .at-pitch-inner             > *,
  .js-reveal-pre .at-workflow-panel-inner    > *,
  .js-reveal-pre .at-dealers-grid            > *,
  .js-reveal-pre .at-solutions-content       > *,
  .js-reveal-pre .at-twocards-inner          > *,
  .js-reveal-pre .at-partners                > *,
  .js-reveal-pre .at-faq-inner               > *,
  .js-reveal-pre .at-faq-list                > *,
  .js-reveal-pre .at-final-cta-inner         > *,
  .js-reveal-pre .at-footer-top              > *,
  .js-reveal-pre .news-hero-editorial__grid  > *,
  .js-reveal-pre .news-hero-editorial__topics .news-filters > *,
  .js-reveal-pre .news-row__track            > *,
  .js-reveal-pre .news-grid                  > *,
  .js-reveal-pre .about-why                  > *,
  .js-reveal-pre .about-process__head        > *,
  .js-reveal-pre .about-process__steps       > *,
  .js-reveal-pre .about-timeline             > *,
  .js-reveal-pre .careers-hero-inner         > *,
  .js-reveal-pre .alttune-page--careers .about-row-1 > *,
  .js-reveal-pre .alttune-page--careers .about-row-2 > *,
  .js-reveal-pre .openings-head              > *,
  .js-reveal-pre .opening-stack              > *,
  .js-reveal-pre .bad-split__copy            > *,
  .js-reveal-pre .at-trusted,
  .js-reveal-pre .at-workflow-card,
  .js-reveal-pre .news-hero-editorial__head,
  .js-reveal-pre .news-row__head,
  .js-reveal-pre .bad-split__media,
  .js-reveal-pre .alttune-page--careers .app-form,
  .js-reveal-pre .alttune-page--about .at-section.dark .at-section-head { opacity: 1; }
}
.reveal {
  opacity: 0;
  transform: translate3d(0, 28px, 0);
  transition:
    opacity 900ms cubic-bezier(.22,.61,.36,1),
    transform 1000ms cubic-bezier(.22,.61,.36,1);
  transition-delay: var(--reveal-delay, 0ms);
  will-change: opacity, transform;
}
.reveal.is-in {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}
/* For a subtler "self" reveal (whole section as one unit) */
.reveal-soft {
  opacity: 0;
  transition: opacity 1100ms cubic-bezier(.22,.61,.36,1);
  transition-delay: var(--reveal-delay, 0ms);
}
.reveal-soft.is-in { opacity: 1; }

@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal-soft {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}

/* ---- Specificity overrides ----
   Some element-class rules (e.g. .at-radio-pill, .nh-card) declare
   their own `transition` shorthand, which resets transition-delay to 0
   and wins by cascade order against the base .reveal rule. Re-declare
   the reveal transition with higher specificity so the per-item
   --reveal-delay stagger is honored regardless of element type. */
.at-radio-pill.reveal,
.nh-card.reveal,
.nh-side-row.reveal,
.post-card.reveal,
.news-row__card.reveal {
  transition:
    opacity 900ms cubic-bezier(.22,.61,.36,1),
    transform 1000ms cubic-bezier(.22,.61,.36,1);
  transition-delay: var(--reveal-delay, 0ms);
}
