/* ==============================================================
   Iron Ridge — Approved-page section transitions
   ==============================================================
   Subtle in-view fade + slight rise applied to top-level blocks
   inside the reviewer-approved body containers on the four
   production pages: /csbd/, /betrayal-trauma/, /coaching/, and
   /locations/austin/.

   Scoped strictly to *--approved wrappers so it never leaks to
   placeholder pages, spine blocks, or nav/footer chrome.

   Honors prefers-reduced-motion: falls back to no animation,
   full opacity, no transform.
   ============================================================== */

.pillar-intro--approved > *,
.coaching-body--approved > *,
.location-body--approved > * {
  opacity: 0;
  transform: translateY(12px);
  transition:
    opacity 700ms cubic-bezier(0.22, 0.61, 0.36, 1),
    transform 700ms cubic-bezier(0.22, 0.61, 0.36, 1);
  will-change: opacity, transform;
}

.pillar-intro--approved > .ir-in-view,
.coaching-body--approved > .ir-in-view,
.location-body--approved > .ir-in-view {
  opacity: 1;
  transform: translateY(0);
}

/* Section headings get a marginally longer settle so the eye
   catches the H2 before the paragraph below it fades in. */
.pillar-intro--approved > h2.ir-in-view,
.coaching-body--approved > h2.ir-in-view,
.location-body--approved > h2.ir-in-view {
  transition-duration: 820ms;
}

/* Reduced motion: no fade, no transform. */
@media (prefers-reduced-motion: reduce) {
  .pillar-intro--approved > *,
  .coaching-body--approved > *,
  .location-body--approved > * {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* No-JS fallback: if IntersectionObserver never runs, ensure
   content is visible. The observer script adds .ir-js-ready to
   <html> on load; in its absence, everything stays visible. */
html:not(.ir-js-ready) .pillar-intro--approved > *,
html:not(.ir-js-ready) .coaching-body--approved > *,
html:not(.ir-js-ready) .location-body--approved > * {
  opacity: 1;
  transform: none;
}
