/* ============================================================
   02-hero — scoped under .sec-02-hero
   ============================================================ */

.sec-02-hero {
  position: relative;
  min-height: 100svh;
  display: flex;
  align-items: flex-start;
  /* Mobile/tablet: copy starts below the photo band (photo height = nav + min(80vw, 560px)) */
  padding-top: calc(var(--nav-h) + min(80vw, 560px) - 1.5rem);
  padding-bottom: clamp(4rem, 10vw, 7rem);
  overflow: clip;
}

/* --- Layered background --- */
.sec-02-hero__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  isolation: isolate; /* contain mix-blend-mode to this layer only */
}

/* --- Real photo: natural color, no duotone. Mobile/tablet: a band above the copy.
   Desktop: the right-hand ~56% of the hero, faded into the ink on its left edge so the
   headline sits on solid ink and never over a face. --- */
.sec-02-hero__photo {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: calc(var(--nav-h) + min(80vw, 560px));
  -webkit-mask-image: linear-gradient(180deg, #000 0%, #000 72%, transparent 100%);
  mask-image: linear-gradient(180deg, #000 0%, #000 72%, transparent 100%);
}
.sec-02-hero__photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 30%;
  filter: saturate(1.05) contrast(1.02);
}

/* Soft bottom/left shading only where the copy needs it */
.sec-02-hero__scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, hsl(267 40% 5% / 0.55) 0%, transparent calc(var(--nav-h) + 40px));
}

.sec-02-hero__glow {
  position: absolute;
  top: 10%;
  left: 55%;
  width: min(60vw, 900px);
  height: min(60vw, 900px);
  border-radius: 50%;
  background: radial-gradient(circle, var(--accent-glow) 0%, transparent 70%);
  filter: blur(10px);
  opacity: 0.45;
  animation: sec-02-hero-drift 16s var(--ease-out) infinite alternate;
}
@keyframes sec-02-hero-drift {
  from { transform: translate(-3%, -2%) scale(1); }
  to   { transform: translate(4%, 5%) scale(1.12); }
}
html.reduced-motion .sec-02-hero__glow { animation: none; }

/* --- Content row (left copy column + right figure column) --- */
.sec-02-hero__inner {
  position: relative;
  z-index: 1;
}

@media (min-width: 1280px) {
  .sec-02-hero { align-items: center; padding-top: calc(var(--nav-h) + clamp(1.5rem, 4vw, 3.5rem)); }

  /* FULL-BLEED photo (>=1280px; below that the whole photo shows as a band above the copy,
     because at narrower widths the zoom would crop the patient's face off-screen). The picture is zoomed from its left edge (--hero-zoom) so the two
     people sit in the right ~60% of the screen and the copy column on the left sits on
     the quiet part of the photo (curtain, pillow, wall) under a left-to-right scrim.
     Neither face is ever under text: see the overlap check in the commit notes. */
  .sec-02-hero__photo {
    --hero-zoom: 1.28;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    -webkit-mask-image: none;
    mask-image: none;
  }
  .sec-02-hero__photo img {
    object-position: 0% 28%;
    transform: scale(var(--hero-zoom));
    transform-origin: 0% 30%;
  }
  /* Overlay only as strong as the text needs: solid where the copy is, gone by ~62% */
  .sec-02-hero__scrim {
    background:
      linear-gradient(90deg, hsl(267 40% 5% / 0.94) 0%, hsl(267 38% 6% / 0.9) 26%, hsl(267 35% 7% / 0.62) 40%, hsl(267 30% 8% / 0.18) 54%, transparent 64%),
      linear-gradient(180deg, hsl(267 40% 5% / 0.5) 0%, transparent 18%),
      linear-gradient(0deg, hsl(267 40% 5% / 0.55) 0%, transparent 22%);
  }

  /* Copy hugs the left edge (not the centred container) and stops before the faces */
  .sec-02-hero__inner {
    display: block;
    width: 100%;
    margin-inline: 0;
    padding-left: clamp(1.5rem, 5vw, 9rem);
    padding-right: 0;
  }
  .sec-02-hero__content { max-width: calc(39vw - clamp(1.5rem, 5vw, 9rem)); }
  .sec-02-hero__cta { gap: 0.75rem; }
  .sec-02-hero__cta .btn { padding: 0.85rem 1.4rem; }
  .sec-02-hero__headline { font-size: clamp(2.5rem, 0.6rem + 4.6vw, 5.5rem); max-width: none; }
  .sec-02-hero__subhead { max-width: none; color: #e4def0; }
}

.sec-02-hero__content {
  min-width: 0;
}

.sec-02-hero__eyebrow {
  margin-bottom: 1.4rem;
}

.sec-02-hero__headline {
  margin: 0 0 1.4rem;
  max-width: 18ch;
}

.sec-02-hero__line {
  display: block;
}

.sec-02-hero__line--rotator {
  color: var(--accent-soft);
}

/* Rotating word: sizer establishes intrinsic width from the widest option */
.sec-02-hero__rotator {
  position: relative;
  display: inline-block;
  vertical-align: top;
  overflow: hidden;
  color: var(--gold);
}
.sec-02-hero__rotator-sizer {
  visibility: hidden;
  display: grid;
}
.sec-02-hero__rotator-sizer span {
  grid-area: 1 / 1;
}
.sec-02-hero__rotator-word {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: flex-start;
  opacity: 1;
  transform: translateY(0);
  will-change: transform, opacity;
}
.sec-02-hero__rotator-word.is-leaving {
  transition: opacity 300ms var(--ease-out), transform 300ms var(--ease-out);
  opacity: 0;
  transform: translateY(0.35em);
}
.sec-02-hero__rotator-word.is-entering {
  transition: opacity 650ms cubic-bezier(0.22, 1, 0.36, 1), transform 650ms cubic-bezier(0.22, 1, 0.36, 1);
  opacity: 1;
  transform: translateY(0);
}
html.reduced-motion .sec-02-hero__rotator-word {
  transition: none;
}

.sec-02-hero__line--static {
  color: var(--white);
}

.sec-02-hero__word-wrap {
  display: inline-block;
  overflow: hidden;
  vertical-align: top;
  margin-right: 0.28em;
}
.sec-02-hero__word {
  display: inline-block;
  transform: translateY(100%);
  transition: transform 700ms var(--ease-out);
}
html.is-loaded .sec-02-hero__word-wrap:nth-of-type(1) .sec-02-hero__word { transition-delay: 260ms; }
html.is-loaded .sec-02-hero__word-wrap:nth-of-type(2) .sec-02-hero__word { transition-delay: 340ms; }
html.is-loaded .sec-02-hero__word { transform: translateY(0); }
html.reduced-motion .sec-02-hero__word { transform: none; transition: none; }

.sec-02-hero__subhead {
  max-width: 46ch;
  font-size: clamp(1.05rem, 0.95rem + 0.4vw, 1.25rem);
  color: var(--text-on-ink-dim);
  margin-bottom: clamp(1.8rem, 3vw, 2.4rem);
}

.sec-02-hero__cta {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-bottom: clamp(2.2rem, 4vw, 3rem);
}

/* --- Google rating chip --- */
.sec-02-hero__rating {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 0.65rem;
  background: var(--white);
  color: var(--text-on-bone);
  border-radius: var(--radius-pill);
  padding: 0.7rem 1.25rem 0.7rem 0.75rem;
  box-shadow: var(--shadow-lift);
  animation: sec-02-hero-float 6s ease-in-out infinite;
  will-change: transform;
}
@keyframes sec-02-hero-float {
  0%, 100% { transform: translateY(-4px); }
  50% { transform: translateY(4px); }
}
html.reduced-motion .sec-02-hero__rating { animation: none; }

.sec-02-hero__rating-badge {
  display: inline-flex;
  width: 30px;
  height: 30px;
  align-items: center;
  justify-content: center;
  background: var(--bone);
  border-radius: 50%;
  flex-shrink: 0;
}

.sec-02-hero__rating-text {
  font-size: 0.9rem;
  font-weight: 500;
  white-space: nowrap;
}
.sec-02-hero__rating-text strong {
  color: var(--text-on-bone);
  font-family: var(--font-display);
  font-weight: 700;
}
.sec-02-hero__rating-dot {
  margin: 0 0.15rem;
  color: var(--text-on-bone-dim);
}

/* --- "No referral needed" badge docked on the photo (desktop only) --- */
.sec-02-hero__chip { display: none; }
@media (min-width: 1280px) {
  .sec-02-hero__chip {
    position: absolute;
    z-index: 3;
    right: clamp(1.5rem, 4vw, 4rem);
    bottom: clamp(5rem, 11vw, 9rem);
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    background: var(--gold);
    color: var(--on-gold);
    border-radius: var(--radius-pill);
    padding: 0.6rem 1rem 0.6rem 0.75rem;
    font-size: 0.82rem;
    font-weight: 700;
    white-space: nowrap;
    box-shadow: var(--shadow-lift);
    animation: sec-02-hero-float-b 7s ease-in-out infinite;
  }
  @keyframes sec-02-hero-float-b {
    0%, 100% { transform: translateY(3px); }
    50% { transform: translateY(-5px); }
  }
  html.reduced-motion .sec-02-hero__chip { animation: none; }
}

/* --- Curved bottom divider --- */
.sec-02-hero__divider {
  position: absolute;
  left: 0;
  bottom: -1px;
  width: 100%;
  height: clamp(50px, 8vw, 110px);
  z-index: 1;
  pointer-events: none;
  /* gold rim: an upward-offset gold copy of the curve shows as a 3px edge */
  filter: drop-shadow(0 -3px 0 var(--gold));
}

@media (max-width: 640px) {
  .sec-02-hero__headline { max-width: 100%; }
  .sec-02-hero__cta { flex-direction: column; align-items: stretch; }
  .sec-02-hero__cta .btn { width: 100%; }
  .sec-02-hero__rating { margin-top: 0.5rem; }
}
