/* ============================================================
   Shared motion + visual-interest layer for interior pages.
   Linked alongside styles.css. All hiding is gated behind
   .motion-ready (added by enhance.js), so if JS fails to load
   every element stays fully visible. Honors reduced-motion.
   ============================================================ */

/* Sticky header condense on scroll */
.site-header { transition: background .3s ease, box-shadow .3s ease; }
.site-header .header-inner { transition: min-height .3s ease; }
.site-header.scrolled { box-shadow: 0 6px 24px rgba(15,36,56,.10); background: rgba(255,255,255,.99); }
.site-header.scrolled .header-inner { min-height: 64px; }

/* ---------- Interior page hero ---------- */
.page-hero { position: relative; overflow: hidden; }
.page-hero > * { position: relative; z-index: 1; }
/* slow-floating gold ring accents, mirroring the homepage */
.page-hero::after {
  content: "";
  position: absolute;
  right: -120px; top: -130px;
  width: 380px; height: 380px;
  border: 1px solid rgba(181,137,74,.22);
  border-radius: 50%;
  z-index: 0;
}
.motion-ready .page-hero::after { animation: ph-drift 20s ease-in-out infinite alternate; }
@keyframes ph-drift { from { transform: translate3d(0,0,0); } to { transform: translate3d(24px,28px,0); } }

/* Hero copy entrance (runs on load, only when motion-ready) */
.motion-ready .page-hero .crumb,
.motion-ready .page-hero h1,
.motion-ready .page-hero p {
  opacity: 0; transform: translateY(16px);
  animation: ph-rise .8s cubic-bezier(.2,.7,.2,1) forwards;
}
.motion-ready .page-hero .crumb { animation-delay: .08s; }
.motion-ready .page-hero h1 { animation-delay: .18s; }
.motion-ready .page-hero p { animation-delay: .30s; }
@keyframes ph-rise { to { opacity: 1; transform: translateY(0); } }

/* ---------- Scroll reveal (gated) ---------- */
.motion-ready [data-reveal] {
  opacity: 0; transform: translateY(26px);
  transition: opacity .7s ease, transform .7s cubic-bezier(.2,.7,.2,1);
}
.motion-ready [data-reveal].in { opacity: 1; transform: translateY(0); }

/* ---------- Card polish ---------- */
.svc-card { position: relative; overflow: hidden; }
.svc-card::before { content:""; position:absolute; left:0; top:0; height:3px; width:0; background: var(--gold); transition: width .35s ease; }
.svc-card:hover::before { width: 100%; }
.svc-card .svc-icon, .svc-card .svc-icon svg { transition: all .3s ease; }
.svc-card:hover .svc-icon { background: var(--gold); transform: rotate(-6deg) scale(1.06); }
.svc-card:hover .svc-icon svg { stroke: #fff; }

.video-thumb img { transition: transform .5s ease; }
.video-card:hover .video-thumb img { transform: scale(1.07); }

.post-card { position: relative; overflow: hidden; }
.post-card::before { content:""; position:absolute; left:0; top:0; height:3px; width:0; background: var(--gold); transition: width .35s ease; }
.post-card:hover::before { width: 100%; }

/* Step number gets a soft fill on hover of its parent step */
.step .step-num { transition: background .3s ease, color .3s ease, border-color .3s ease; }
.step:hover .step-num { background: var(--gold); border-color: var(--gold); color: #fff; }

/* Reviews on interior pages: gentle lift */
.review { transition: transform .18s ease, box-shadow .18s ease; }
.review:hover { transform: translateY(-4px); box-shadow: var(--shadow); }
.section-navy .review:hover { box-shadow: 0 16px 40px rgba(0,0,0,.28); }

/* Fact tiles: accent sweep */
.fact { transition: background .25s ease; }
.fact:hover { background: var(--sand); }

/* CTA band cursor-follow sheen */
.cta-band { position: relative; overflow: hidden; }
.cta-band::before {
  content:""; position:absolute; inset:0;
  background: radial-gradient(600px circle at var(--mx,50%) var(--my,40%), rgba(181,137,74,.16), transparent 60%);
  transition: background .2s ease;
}
.cta-band .container { position: relative; z-index: 1; }

/* Form focus lift */
.form { transition: box-shadow .3s ease, transform .3s ease; }
.form:focus-within { box-shadow: 0 18px 44px rgba(15,36,56,.14); }

/* Stat underline sweep (if a stats band exists on a page) */
.stat { position: relative; overflow: hidden; }
.stat::before { content:""; position:absolute; left:0; bottom:0; height:3px; width:100%; background:var(--gold); transform: scaleX(0); transform-origin:left; transition: transform .6s ease; }
.stat.lit::before { transform: scaleX(1); }

@media (prefers-reduced-motion: reduce) {
  .page-hero::after { animation: none; }
  .motion-ready .page-hero .crumb,
  .motion-ready .page-hero h1,
  .motion-ready .page-hero p { opacity: 1; transform: none; animation: none; }
  .motion-ready [data-reveal] { opacity: 1; transform: none; transition: none; }
}
