/* =============================================================
   ENDOMETRIOSIS RESET METHOD · stylesheet
   Editorial, warm, neutral. Built for slow looking.
   ============================================================= */

/* -----------------------------------------------------------
   1. TOKENS
   ----------------------------------------------------------- */
:root {
  /* Palette */
  --bone:        #F4ECDD;
  --bone-deep:   #EDE2CD;
  --warm-white:  #FAF5EB;
  --cream:       #F8EFE0;
  --clay:        #C18B72;
  --clay-deep:   #A26F58;
  --blush:       #ECD3C6;
  --blush-deep:  #DDB8A6;
  --sage:        #8FA088;
  --cocoa:       #2C201A;
  --cocoa-soft:  #3E2E25;
  --taupe:       #857263;
  --taupe-soft:  #A99784;
  --line:        rgba(44, 32, 26, 0.18);
  --line-soft:   rgba(44, 32, 26, 0.08);

  /* Type */
  --font-display: "Cormorant Garamond", "EB Garamond", Georgia, serif;
  --font-body:    "Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;
  --font-accent:  "Italiana", "Cormorant Garamond", serif;

  /* Scale */
  --step--2: clamp(0.69rem, 0.66rem + 0.13vw, 0.76rem);
  --step--1: clamp(0.83rem, 0.79rem + 0.21vw, 0.95rem);
  --step-0:  clamp(1rem, 0.95rem + 0.27vw, 1.15rem);
  --step-1:  clamp(1.20rem, 1.13rem + 0.36vw, 1.39rem);
  --step-2:  clamp(1.44rem, 1.34rem + 0.48vw, 1.69rem);
  --step-3:  clamp(1.73rem, 1.59rem + 0.65vw, 2.06rem);
  --step-4:  clamp(2.07rem, 1.88rem + 0.87vw, 2.50rem);
  --step-5:  clamp(2.49rem, 2.22rem + 1.16vw, 3.04rem);
  --step-6:  clamp(2.99rem, 2.62rem + 1.55vw, 3.69rem);
  --step-7:  clamp(3.58rem, 3.08rem + 2.07vw, 4.49rem);
  --step-8:  clamp(4.30rem, 3.62rem + 2.76vw, 5.45rem);
  --step-9:  clamp(5.16rem, 4.24rem + 3.69vw, 6.62rem);

  /* Layout */
  --gutter: clamp(1.25rem, 4vw, 3rem);
  --content: 78rem;
  --reading: 38rem;

  /* Motion · three speed tiers + intentional easings */
  --ease-out:        cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in-out:     cubic-bezier(0.65, 0, 0.35, 1);
  --ease-snap:       cubic-bezier(0.4, 0, 0.2, 1);
  --ease-breath:     cubic-bezier(0.45, 0, 0.55, 1);   /* sinusoidal */
  --ease-overshoot:  cubic-bezier(0.34, 1.56, 0.64, 1);
  --speed-snap:      0.25s;
  --speed-patient:   1.0s;
  --speed-ambient:   4.5s;
  --slow: 1.2s;
  --med: 0.6s;
  --fast: 0.3s;

  /* Live state · written by main.js */
  --breath:        0.5;   /* 0..1 sine wave, 4s period */
  --title-scale-y: 1;     /* hero title compresses on fast scroll */
}

/* ----- Time-of-day palette nudges ----- */
/* Subtle bone-tone shifts so the site is never exactly the same twice.
   JS sets [data-warmth] on <html> based on Europe/Lisbon hour. */
[data-warmth="dawn"]      { --bone: #F4EAD8; --bone-deep: #EDDFC6; }
[data-warmth="midday"]    { --bone: #F4ECDD; --bone-deep: #EDE2CD; }
[data-warmth="afternoon"] { --bone: #F2E7D2; --bone-deep: #EAD9BE; }
[data-warmth="evening"]   { --bone: #EDE3D2; --bone-deep: #E0D3BC; }
html { transition: background-color 4s var(--ease-breath); }

/* -----------------------------------------------------------
   SKIP-TO-CONTENT  ·  visible only on keyboard focus
   ----------------------------------------------------------- */
.skip-link {
  position: absolute;
  top: -100px;
  left: 1rem;
  z-index: 200;
  background: var(--cocoa);
  color: var(--cream);
  padding: 0.6rem 1rem;
  border-radius: 6px;
  font-size: var(--step--1);
  letter-spacing: 0.04em;
  text-decoration: none;
  box-shadow: 0 6px 18px -8px rgba(44, 32, 26, 0.5);
  transition: top 0.18s ease;
}
.skip-link:focus,
.skip-link:focus-visible {
  top: 1rem;
  outline: none;
}

/* -----------------------------------------------------------
   2. RESET / BASE
   ----------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; padding: 0; }
html, body { height: 100%; }
html {
  scroll-behavior: auto;          /* Lenis handles this */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  background: var(--bone);
  color: var(--cocoa);
}
body {
  font-family: var(--font-body);
  font-size: var(--step-0);
  line-height: 1.55;
  font-weight: 400;
  background: var(--bone);
  color: var(--cocoa);
  overflow-x: hidden;
  cursor: none;                   /* using custom cursor */
}
body.no-cursor { cursor: auto; }

img, svg, picture, video { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
button { background: none; border: 0; color: inherit; font: inherit; cursor: none; }
input, textarea, select { font: inherit; color: inherit; }

::selection { background: var(--clay); color: var(--warm-white); }

/* Subtle paper grain over everything */
body::before {
  content: "";
  position: fixed; inset: 0;
  pointer-events: none;
  z-index: 1;
  opacity: 0.06;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.17  0 0 0 0 0.13  0 0 0 0 0.10  0 0 0 0.6 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}

/* -----------------------------------------------------------
   3. TYPOGRAPHY
   ----------------------------------------------------------- */
.display, h1, h2, h3, h4 {
  font-family: var(--font-display);
  font-weight: 300;
  line-height: 1.05;
  letter-spacing: -0.01em;
  color: var(--cocoa);
}
h1 { font-size: var(--step-8); }
h2 { font-size: var(--step-6); }
h3 { font-size: var(--step-4); }
h4 { font-size: var(--step-2); }

.italic, em { font-style: italic; }
.serif-italic {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
}
.accent-display {
  font-family: var(--font-accent);
  font-weight: 400;
  letter-spacing: 0.02em;
}

.eyebrow {
  font-family: var(--font-body);
  font-size: var(--step--1);
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--taupe);
}
.eyebrow::before {
  content: "";
  display: inline-block;
  width: 28px; height: 1px;
  background: var(--taupe);
  vertical-align: middle;
  margin-right: 14px;
  transform: translateY(-2px);
}

.lede {
  font-family: var(--font-display);
  font-size: var(--step-3);
  font-weight: 300;
  line-height: 1.3;
  color: var(--cocoa-soft);
  font-style: italic;
}

p { color: var(--cocoa-soft); }
p + p { margin-top: 1em; }

a.link-underline {
  position: relative;
  display: inline-block;
  padding-bottom: 0;
  transition: color var(--med) var(--ease-out);
}
a.link-underline::after { display: none; }
a.link-underline:hover { color: var(--clay-deep); }

/* -----------------------------------------------------------
   4. LAYOUT
   ----------------------------------------------------------- */
.wrap {
  width: 100%;
  max-width: var(--content);
  margin-inline: auto;
  padding-inline: var(--gutter);
  position: relative;
}
.wrap--narrow { max-width: 56rem; }
.wrap--reading { max-width: var(--reading); }

section { position: relative; }

.section-pad   { padding-block: clamp(5rem, 10vw, 9rem); }
.section-pad-l { padding-block: clamp(7rem, 14vw, 12rem); }
.section-pad-s { padding-block: clamp(3rem, 6vw, 5rem); }

.divider-line {
  width: 100%;
  height: 1px;
  background: var(--line-soft);
}

/* -----------------------------------------------------------
   5. CUSTOM CURSOR
   ----------------------------------------------------------- */
.cursor-dot,
.cursor-halo {
  position: fixed;
  top: 0; left: 0;
  pointer-events: none;
  z-index: 9999;
  border-radius: 999px;
  will-change: transform;
  mix-blend-mode: multiply;
}
.cursor-dot {
  width: 6px; height: 6px;
  background: var(--cocoa);
  transform: translate3d(-50%, -50%, 0);
}
.cursor-halo {
  width: 38px; height: 38px;
  border: 1px solid var(--cocoa);
  transform: translate3d(-50%, -50%, 0);
  transition: width 0.35s var(--ease-out),
              height 0.35s var(--ease-out),
              background-color 0.35s var(--ease-out),
              border-color 0.35s var(--ease-out),
              opacity 0.35s var(--ease-out);
}
.cursor-halo.is-hover {
  width: 72px; height: 72px;
  background: rgba(193, 139, 114, 0.25);
  border-color: var(--clay);
}
/* Over portrait images: the cursor stays in its default soft state
   (no dark VIEW badge over her face). Class is still toggled by JS
   in case we want a subtle treatment later, but it's a visual no-op. */
.cursor-halo.is-image { /* intentionally empty */ }
.cursor-halo.is-text { opacity: 0; }
.cursor-hidden { opacity: 0 !important; }

@media (hover: none) {
  body { cursor: auto; }
  .cursor-dot, .cursor-halo { display: none; }
}

/* -----------------------------------------------------------
   6. NAVIGATION
   ----------------------------------------------------------- */
.nav {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 100;
  padding: 1.25rem var(--gutter);
  display: flex;
  align-items: center;
  justify-content: space-between;
  /* Subtle initial backdrop so the nav stays readable on any section,
     not just before-scroll over the cream hero. */
  background: rgba(248, 239, 224, 0.55);
  backdrop-filter: blur(8px) saturate(115%);
  -webkit-backdrop-filter: blur(8px) saturate(115%);
  transition: background-color var(--med) var(--ease-out),
              backdrop-filter var(--med) var(--ease-out),
              padding var(--med) var(--ease-out),
              border-color var(--med) var(--ease-out),
              box-shadow var(--med) var(--ease-out);
  border-bottom: 1px solid rgba(99, 79, 68, 0.06);
}
.nav.is-scrolled {
  background: rgba(244, 236, 221, 0.94);
  backdrop-filter: blur(16px) saturate(120%);
  -webkit-backdrop-filter: blur(16px) saturate(120%);
  padding: 0.85rem var(--gutter);
  border-bottom-color: rgba(99, 79, 68, 0.16);
  box-shadow: 0 6px 22px -16px rgba(44, 32, 26, 0.18);
}
.nav-brand {
  display: inline-flex;
  align-items: center;
  gap: 0.7rem;
  color: var(--cocoa);
}
.nav-brand-mark {
  width: 32px; height: 32px;
  color: var(--cocoa);
  transition: transform var(--slow) var(--ease-out);
}
.nav-brand:hover .nav-brand-mark { transform: rotate(180deg); }
.nav-brand-text {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  font-size: 1.25rem;
  letter-spacing: 0.04em;
  line-height: 1;
}
.nav-links {
  display: flex;
  align-items: center;
  gap: 2.2rem;
  list-style: none;
}
.nav-links a {
  font-size: var(--step--1);
  letter-spacing: 0.04em;
  color: var(--cocoa-soft);
  position: relative;
  transition: color var(--fast) var(--ease-out);
}
.nav-links a:hover { color: var(--clay-deep); }
.nav-cta {
  margin-left: 0.6rem;
}

/* ===== Mobile nav drawer ============================================
   Hamburger button (hidden on desktop, shown ≤880px) toggles a drawer
   that slides in from the right with all nav links. Replaces the
   previous 'hide links on mobile' approach which left phone users
   unable to navigate the site. */

.nav-toggle {
  display: none;
  background: transparent;
  border: 0;
  padding: 0.6rem;
  margin: -0.6rem -0.4rem -0.6rem 0;
  cursor: none;
  z-index: 102;
  position: relative;
}
.nav-toggle__line {
  display: block;
  width: 24px;
  height: 1.6px;
  background: var(--cocoa);
  margin: 5px 0;
  border-radius: 1px;
  transition: transform 0.32s var(--ease-out),
              opacity 0.2s var(--ease-out);
}
.nav-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(44, 32, 26, 0.35);
  backdrop-filter: blur(2px);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.32s var(--ease-out), visibility 0s linear 0.32s;
  z-index: 99;
  cursor: none;
}

@media (max-width: 880px) {
  .nav-toggle { display: block; }

  /* The <nav> wrapper becomes the drawer container, slid off-screen by
     default and revealed when body.nav-open is set. */
  header.nav > nav {
    position: fixed;
    top: 0;
    right: 0;
    width: min(82vw, 340px);
    height: 100dvh;
    background: var(--bone);
    box-shadow: -24px 0 60px rgba(44, 32, 26, 0.18);
    transform: translateX(100%);
    transition: transform 0.4s var(--ease-out);
    z-index: 101;
    overflow-y: auto;
    /* Notch-safe padding for iPhones in landscape + standard portrait */
    padding-top: max(5.5rem, env(safe-area-inset-top, 0) + 4.5rem);
    padding-right: max(1.8rem, env(safe-area-inset-right, 0) + 1.4rem);
    padding-bottom: max(2rem, env(safe-area-inset-bottom, 0) + 1.5rem);
    padding-left: 1.8rem;
  }
  body.nav-open header.nav > nav { transform: translateX(0); }
  body.nav-open .nav-backdrop {
    opacity: 1;
    visibility: visible;
    transition: opacity 0.32s var(--ease-out), visibility 0s linear 0s;
  }
  body.nav-open { overflow: hidden; }

  /* Stack the links vertically in the drawer, big tap targets */
  .nav-links {
    flex-direction: column;
    align-items: flex-start;
    gap: 1.4rem;
  }
  .nav-links li:not(.nav-cta) { display: block; }   /* unhide */
  .nav-links a {
    font-size: var(--step-0);
    letter-spacing: 0.05em;
    padding: 0.45rem 0;
    display: inline-block;
  }
  .nav-cta {
    margin-left: 0;
    margin-top: 0.6rem;
    width: 100%;
  }
  .nav-cta .btn { width: 100%; justify-content: center; }

  /* Hamburger morphs to X when open */
  body.nav-open .nav-toggle__line:nth-child(1) {
    transform: translateY(7px) rotate(45deg);
  }
  body.nav-open .nav-toggle__line:nth-child(2) { opacity: 0; }
  body.nav-open .nav-toggle__line:nth-child(3) {
    transform: translateY(-7px) rotate(-45deg);
  }
}

@media (max-width: 600px) {
  .nav { padding-inline: 1rem; gap: 0.6rem; }
  .nav.is-scrolled { padding-inline: 1rem; }
  .nav-brand-mark { width: 28px; height: 28px; }
  .nav-brand-text { font-size: 1.05rem; }
  /* Nav-CTA padding inside the drawer (no longer collapsed inline) */
  header.nav > nav .nav-cta .btn {
    padding: 0.85rem 1.2rem;
    font-size: var(--step--1);
    letter-spacing: 0.16em;
  }
}

/* ===== Touch-target sizing for coarse pointers ======================
   On touch devices, ensure interactive elements have at least 44×44px
   tap area regardless of viewport width (Apple HIG / Google a11y). */
@media (pointer: coarse) {
  a.link-underline,
  .nav-links a,
  .faq-q,
  .btn-arrow,
  button {
    min-height: 44px;
  }
  .nav-links a { padding-block: 0.6rem; }
  .faq-q { padding-block: 1rem; }
}

/* Account for iPhone notch on the footer + fixed nav */
.foot { padding-bottom: max(2.4rem, env(safe-area-inset-bottom)); }

/* -----------------------------------------------------------
   7. BUTTONS
   ----------------------------------------------------------- */
.btn {
  /* Per-variant theming via CSS variables */
  --btn-fg:        var(--cocoa);
  --btn-bg:        transparent;
  --btn-border:    var(--cocoa);
  --btn-fill-a:    var(--clay);
  --btn-fill-b:    var(--cocoa);
  --btn-fg-hover:  var(--bone);
  --btn-glow:      rgba(193, 139, 114, 0.45);
  --btn-shimmer:   rgba(255, 245, 235, 0.32);

  display: inline-flex;
  align-items: center;
  gap: 0.85rem;
  padding: 1rem 1.7rem;
  font-family: var(--font-body);
  font-size: var(--step--1);
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border-radius: 999px;
  border: 1px solid var(--btn-border);
  color: var(--btn-fg);
  background: var(--btn-bg);
  position: relative;
  overflow: hidden;
  isolation: isolate;
  cursor: none;
  will-change: transform;
  transition:
    color 0.5s var(--ease-out),
    border-color 0.5s var(--ease-out),
    letter-spacing 0.5s var(--ease-out),
    box-shadow 0.5s var(--ease-out),
    transform 0.45s var(--ease-out);
}

/* Layer 1 · diagonal gradient that slides up on hover */
.btn::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, var(--btn-fill-a) 0%, var(--btn-fill-b) 100%);
  transform: translateY(102%);
  transition: transform 0.6s var(--ease-out);
  z-index: -2;
}

/* Layer 2 · glossy shimmer that sweeps across after the fill arrives */
.btn::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(110deg,
    transparent 38%,
    var(--btn-shimmer) 50%,
    transparent 62%);
  transform: translateX(-130%);
  transition: transform 1s var(--ease-out) 0.18s;
  z-index: -1;
  pointer-events: none;
}

.btn:hover {
  color: var(--btn-fg-hover);
  border-color: var(--btn-fill-a);
  letter-spacing: 0.2em;
  box-shadow: 0 22px 40px -22px var(--btn-glow);
  transform: translateY(-2px);
}
.btn:hover::before { transform: translateY(0); }
.btn:hover::after  { transform: translateX(130%); }

.btn:active { transform: translateY(0) scale(0.98); transition-duration: 0.12s; }

.btn:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 4px;
}

/* ---- Variants ---- */
.btn--primary {
  --btn-bg:        var(--cocoa);
  --btn-fg:        var(--bone);
  --btn-border:    var(--cocoa);
  --btn-fill-a:    var(--clay);
  --btn-fill-b:    var(--clay-deep);
  --btn-fg-hover:  var(--bone);
  --btn-glow:      rgba(193, 139, 114, 0.55);
  animation: btnBreathe 4.5s var(--ease-in-out) infinite;
}
@keyframes btnBreathe {
  0%, 100% { box-shadow: 0 0 0 0 rgba(193, 139, 114, 0); }
  50%      { box-shadow: 0 14px 32px -18px rgba(193, 139, 114, 0.55); }
}
.btn--primary:hover { animation-play-state: paused; }

.btn--ghost {
  --btn-fg:        var(--cocoa);
  --btn-border:    var(--line);
  --btn-fill-a:    var(--cocoa);
  --btn-fill-b:    var(--clay-deep);
  --btn-glow:      rgba(44, 32, 26, 0.35);
}

/* On the dark final-CTA section, flip the palette */
.cta-final .btn {
  --btn-bg:        transparent;
  --btn-fg:        var(--bone);
  --btn-border:    var(--bone);
  --btn-fill-a:    var(--blush);
  --btn-fill-b:    var(--bone);
  --btn-fg-hover:  var(--cocoa);
  --btn-glow:      rgba(236, 211, 198, 0.6);
  animation: none;
}

/* ---- Animated arrow · two arrows swap on hover ---- */
.btn-arrow {
  display: inline-block;
  position: relative;
  width: 18px;
  height: 1em;
  overflow: hidden;
  line-height: 1;
  font-size: 0;          /* hide the literal "→" inside the span */
  vertical-align: middle;
}
.btn-arrow::before,
.btn-arrow::after {
  content: "→";
  position: absolute;
  left: 0; top: 50%;
  font-size: 1.05rem;
  line-height: 1;
  color: inherit;
  transition: transform 0.55s var(--ease-out);
}
.btn-arrow::before { transform: translate(0, -50%); }
.btn-arrow::after  { transform: translate(-180%, -50%); }
.btn:hover .btn-arrow::before { transform: translate(180%, -50%); }
.btn:hover .btn-arrow::after  { transform: translate(0, -50%); }

/* ----- Text-only CTAs in the nav · no box, no border, no fill (the
        nav-cta pill below re-enables the box for the booking CTA only) ----- */
.nav .btn {
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0.45rem 0 !important;
  color: var(--cocoa) !important;
  box-shadow: none !important;
  animation: none !important;
  letter-spacing: 0.18em !important;
  transform: none !important;
}
.nav .btn::before,
.nav .btn::after {
  display: none !important;
}
.nav .btn:hover {
  color: var(--clay-deep) !important;
  background: transparent !important;
  box-shadow: none !important;
  transform: none !important;
  letter-spacing: 0.18em !important;
}

/* ----- Nav CTA · solid pill (overrides the flat-text nav .btn rule above
        for the booking CTA specifically, so it reads as a clear action).
        The arrow is pinned absolutely on the right so the text label sits
        at the optical center of the pill instead of being pushed left by
        the arrow's width. ----- */
.nav .nav-cta .btn {
  background: var(--cocoa) !important;
  color: var(--bone) !important;
  border: 1px solid var(--cocoa) !important;
  border-radius: 999px !important;
  padding: 0.65rem 2.5rem 0.65rem 2.5rem !important;
  letter-spacing: 0.14em !important;
  justify-content: center !important;
  text-align: center !important;
  gap: 0 !important;
  position: relative !important;
}
.nav .nav-cta .btn .btn-arrow {
  position: absolute;
  right: 1.1rem;
  top: 50%;
  transform: translateY(-50%);
}
.nav .nav-cta .btn:hover {
  background: var(--clay-deep) !important;
  color: var(--bone) !important;
  border-color: var(--clay-deep) !important;
  letter-spacing: 0.16em !important;
  transform: translateY(-1px) !important;
}

/* ----- Compact mobile/tablet header CTA · always-visible book pill that
        sits beside the hamburger, so users don't have to open the drawer
        to find a booking action. Hidden on desktop (≥881px). ----- */
.nav-cta-mobile {
  display: none;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  font-family: var(--font-body);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-align: center;
  text-decoration: none;
  padding: 0.6rem 1rem;
  border-radius: 999px;
  background: var(--cocoa);
  color: var(--bone);
  border: 1px solid var(--cocoa);
  margin-left: auto;
  margin-right: 0.6rem;
  white-space: nowrap;
  cursor: none;
  transition:
    background-color 0.35s var(--ease-out),
    border-color 0.35s var(--ease-out),
    transform 0.25s var(--ease-out),
    letter-spacing 0.35s var(--ease-out);
}
.nav-cta-mobile:hover,
.nav-cta-mobile:focus-visible {
  background: var(--clay-deep);
  border-color: var(--clay-deep);
  color: var(--bone);
  transform: translateY(-1px);
  letter-spacing: 0.16em;
}
.nav-cta-mobile:active { transform: translateY(0) scale(0.98); }
.nav-cta-mobile:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 3px;
}

@media (max-width: 880px) {
  .nav-cta-mobile { display: inline-flex; }
}
@media (max-width: 380px) {
  .nav-cta-mobile {
    padding: 0.5rem 0.8rem;
    font-size: 0.66rem;
    letter-spacing: 0.1em;
    margin-right: 0.45rem;
  }
}

/* -----------------------------------------------------------
   8. SCROLL ANIMATIONS · base hidden states
   ----------------------------------------------------------- */
[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 1s var(--ease-out), transform 1s var(--ease-out);
  transition-delay: var(--reveal-delay, 0s);
}
[data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}
[data-reveal="fade"] { transform: none; }
[data-reveal="rise-soft"] { transform: translateY(14px); }

/* Word-by-word reveal */
.split-word {
  display: inline-block;
  overflow: hidden;
  vertical-align: bottom;
  padding-bottom: 0.08em;
}
.split-word > span {
  display: inline-block;
  transform: translateY(110%);
  transition: transform 1s var(--ease-out);
  transition-delay: calc(var(--word-i, 0) * 0.06s + var(--reveal-delay, 0s));
}
.is-visible .split-word > span,
[data-split].is-visible .split-word > span {
  transform: translateY(0);
}

/* Image reveal · clip-path mask */
.img-reveal {
  position: relative;
  overflow: hidden;
}
.img-reveal::after {
  content: "";
  position: absolute; inset: 0;
  background: var(--bone);
  transform-origin: bottom;
  transform: scaleY(1);
  transition: transform 1.2s var(--ease-out);
  z-index: 2;
}
.img-reveal.is-visible::after { transform: scaleY(0); }
.img-reveal img,
.img-reveal .img-fill {
  transform: scale(1.15);
  transition: transform 1.6s var(--ease-out);
}
.img-reveal.is-visible img,
.img-reveal.is-visible .img-fill {
  transform: scale(1);
}

/* Drawn line on scroll */
.draw-on-scroll path,
.draw-on-scroll circle,
.draw-on-scroll ellipse {
  stroke-dasharray: var(--draw-len, 1000);
  stroke-dashoffset: var(--draw-len, 1000);
  transition: stroke-dashoffset 2.4s var(--ease-out);
}
.draw-on-scroll.is-visible path,
.draw-on-scroll.is-visible circle,
.draw-on-scroll.is-visible ellipse {
  stroke-dashoffset: 0;
}

/* -----------------------------------------------------------
   9. HERO
   ----------------------------------------------------------- */
.hero {
  min-height: 100vh;
  /* Use small-viewport-height where supported so the hero doesn't reflow
     (and the canvas behind it stretch/re-render) every time the mobile
     URL bar collapses or expands. */
  min-height: 100svh;
  padding-top: 8rem;
  padding-bottom: 4rem;
  display: flex;
  flex-direction: column;
  justify-content: center;
  position: relative;
  overflow: hidden;
}
.hero-eyebrow { margin-bottom: 2rem; }

/* Ambient background canvas · drift + cursor repulsion + warm halo.
   JS in main.js drives the per-frame draw. */
.hero .amb-canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 0;
}
.hero .wrap { position: relative; z-index: 1; }
.hero-bloom,
.hero-blob,
.hero-meta { z-index: 1; }
.hero-title {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--step-9);
  line-height: 0.97;
  letter-spacing: -0.02em;
  color: var(--cocoa);
  max-width: 16ch;
}
.hero-title em {
  font-style: italic;
  color: var(--clay-deep);
}
.hero-sub {
  margin-top: 2.2rem;
  max-width: 36rem;
  font-size: var(--step-1);
  color: var(--cocoa-soft);
  line-height: 1.55;
}
.hero-actions {
  margin-top: 2.6rem;
  display: flex;
  gap: 1rem;
  flex-wrap: wrap;
  align-items: center;
}
.hero-meta {
  position: absolute;
  bottom: 2.5rem;
  left: var(--gutter);
  right: var(--gutter);
  display: flex;
  justify-content: space-between;
  align-items: end;
  font-size: var(--step--2);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--taupe);
}
.hero-meta .meta-line {
  display: inline-block;
  width: 60px; height: 1px;
  background: var(--taupe);
  vertical-align: middle;
  margin-right: 14px;
}
.scroll-cue {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: var(--step--2);
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--taupe);
}
.scroll-cue-line {
  display: inline-block;
  width: 1px; height: 36px;
  background: var(--taupe);
  position: relative;
  overflow: hidden;
}
.scroll-cue-line::after {
  content: "";
  position: absolute;
  top: -36px; left: 0; right: 0;
  height: 36px;
  background: var(--cocoa);
  animation: scrollPulse 2.4s var(--ease-in-out) infinite;
}
@keyframes scrollPulse {
  0%   { transform: translateY(0); }
  60%  { transform: translateY(72px); }
  100% { transform: translateY(72px); }
}

/* Hero ornament · small star/bloom in the bottom-right corner of the hero.
   Gentle rotation in place · no longer a dominant background element. */
.hero-bloom {
  position: absolute;
  top: auto;
  right: 2.5rem;
  bottom: 2.5rem;
  width: min(14vh, 130px);
  height: min(14vh, 130px);
  /* Lock the shape to its viewBox aspect so it can never render stretched
     even if one dimension is computed before layout settles. */
  aspect-ratio: 1 / 1;
  display: block;
  color: var(--clay-deep);
  opacity: 0.62;
  pointer-events: none;
  animation: bloomDrift 16s ease-in-out infinite;
  transform-origin: center center;
}

/* PETALS draw themselves in and out · 14s cycle, staggered cascade so
   the bloom appears as a wave-front rather than a single fade. The
   stroke-dasharray is set long enough to cover the full ellipse perimeter
   (~250); 600 gives margin and looks identical visually. */
.hero-bloom ellipse {
  stroke-width: 0.9 !important;
  stroke-dasharray: 600;
  animation: bloomRedraw 14s ease-in-out infinite;
}
.hero-bloom ellipse:nth-of-type(1) { animation-delay:    0s; }
.hero-bloom ellipse:nth-of-type(2) { animation-delay: -0.5s; }
.hero-bloom ellipse:nth-of-type(3) { animation-delay: -1.0s; }
.hero-bloom ellipse:nth-of-type(4) { animation-delay: -1.5s; }
.hero-bloom ellipse:nth-of-type(5) { animation-delay: -2.0s; }
.hero-bloom ellipse:nth-of-type(6) { animation-delay: -2.5s; }

/* OUTER RING · the 'frame' stays drawn and gently breathes in opacity
   so the bloom never fully vanishes; it just dims and returns. */
.hero-bloom > circle:first-of-type {
  stroke-width: 0.9 !important;
  animation: bloomRingBreath 8s ease-in-out infinite;
}
/* Center dot · static anchor */
@media (max-width: 900px) {
  .hero-bloom {
    right: 1.8rem;
    bottom: 1.8rem;
    width: min(12vh, 96px);
    height: min(12vh, 96px);
    opacity: 0.55;
  }
}
@media (max-width: 600px) {
  .hero-bloom {
    right: 1.2rem;
    bottom: 1.2rem;
    width: min(10vh, 72px);
    height: min(10vh, 72px);
    opacity: 0.5;
  }
  .hero-bloom ellipse,
  .hero-bloom circle,
  .hero-bloom path {
    stroke-width: 1.05 !important;
  }
}
@keyframes bloomDrift {
  /* Asymmetric wobble · feels alive, never pendulum-perfect.
     Bottom-anchored: pure rotation + tiny scale breath, no translate. */
  0%   { transform: rotate(0deg)   scale(1);    }
  22%  { transform: rotate(7deg)   scale(1.025);}
  45%  { transform: rotate(15deg)  scale(1.05); }
  68%  { transform: rotate(4deg)   scale(1.02); }
  82%  { transform: rotate(-3deg)  scale(1.01); }
  100% { transform: rotate(0deg)   scale(1);    }
}

/* Each petal draws in (offset 600 → 0) and back out (0 → 600) over 14s.
   With the per-petal stagger this becomes a slow spirograph that appears
   and disappears, never landing in the same configuration twice within
   one drift cycle. */
@keyframes bloomRedraw {
  0%   { stroke-dashoffset: 0;   }   /* fully drawn */
  50%  { stroke-dashoffset: 600; }   /* fully retracted */
  100% { stroke-dashoffset: 0;   }   /* fully drawn again */
}

/* Outer ring · independent opacity glow so the frame is always there,
   even at the moment all petals retract. */
@keyframes bloomRingBreath {
  0%, 100% { opacity: 0.5; }
  50%      { opacity: 1;   }
}
.hero-blob {
  position: absolute;
  bottom: -10vh; left: -8vw;
  width: 60vw;
  max-width: 800px;
  /* viewBox is 600×600 — force a square aspect so the path can never get
     squashed or stretched in odd flex/grid contexts. */
  aspect-ratio: 1 / 1;
  height: auto;
  display: block;
  color: var(--blush-deep);
  opacity: 0.35;
  pointer-events: none;
  animation: blobDrift 28s ease-in-out infinite;
}
@keyframes blobDrift {
  0%, 100% { transform: translate(0, 0) rotate(0deg); }
  50%      { transform: translate(20px, -10px) rotate(-6deg); }
}

/* Drifting italic words · dust in afternoon light, sitting behind the title */
.hero-drifts {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 0;
}
.drift {
  position: absolute;
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  color: var(--cocoa);
  opacity: 0.085;
  font-size: clamp(1.1rem, 2.2vw, 1.6rem);
  letter-spacing: 0.02em;
  white-space: nowrap;
  animation: drift 100s linear infinite;
  will-change: transform;
}
.drift:nth-child(1) { top: 14%; left:  4%; animation-duration:  95s; }
.drift:nth-child(2) { top: 78%; left:  8%; animation-duration: 110s; animation-direction: reverse; }
.drift:nth-child(3) { top: 22%; left: 62%; animation-duration:  88s; }
.drift:nth-child(4) { top: 58%; left: 36%; animation-duration: 130s; animation-direction: reverse; }
.drift:nth-child(5) { top: 86%; left: 56%; animation-duration: 105s; }
.drift:nth-child(6) { top: 44%; left: 18%; animation-duration: 120s; animation-direction: reverse; }
@keyframes drift {
  0%   { transform: translate3d(0, 0, 0); }
  20%  { transform: translate3d(36px, -22px, 0); }
  40%  { transform: translate3d(54px,  18px, 0); }
  60%  { transform: translate3d(20px,  38px, 0); }
  80%  { transform: translate3d(-28px, 12px, 0); }
  100% { transform: translate3d(0, 0, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .drift { animation: none; opacity: 0.10; }
  /* Bloom · keep it visible but stop all the cycling motion */
  .hero-bloom { animation: none; }
  .hero-bloom ellipse,
  .hero-bloom > circle:first-of-type {
    animation: none;
    stroke-dashoffset: 0;
    opacity: 1;
  }
}

/* Make sure the hero content sits above the drift layer */
.hero .wrap { position: relative; z-index: 1; }

/* -----------------------------------------------------------
   10. MARQUEE
   ----------------------------------------------------------- */
.marquee {
  position: relative;
  overflow: hidden;
  padding-block: 2.4rem;
  border-top: 1px solid var(--line-soft);
  border-bottom: 1px solid var(--line-soft);
  background: var(--cream);
}
.marquee-track {
  display: flex;
  width: max-content;
  gap: 4rem;
  animation: marquee 38s linear infinite;
  align-items: center;
}
.marquee-item {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(2rem, 6vw, 4rem);
  color: var(--cocoa);
  display: inline-flex;
  align-items: center;
  gap: 4rem;
  white-space: nowrap;
}
.marquee-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--clay);
  display: inline-block;
}
@keyframes marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

/* -----------------------------------------------------------
   11. STORY (Editorial split layout)
   ----------------------------------------------------------- */
.story {
  background: var(--bone);
}
.story-grid {
  display: grid;
  grid-template-columns: 1fr 1.1fr;
  gap: clamp(2rem, 6vw, 6rem);
  /* Top-align so the portrait's top edge sits flush with "The honest part"
     eyebrow on the right — the text column is taller, so centering made the
     portrait float mid-column with empty space above it. */
  align-items: start;
}
@media (max-width: 880px) {
  .story-grid { grid-template-columns: 1fr; }
}
.story-visual {
  position: relative;
  aspect-ratio: 4 / 5;
  background: var(--blush);
  border-radius: 4px;
  overflow: hidden;
}
.story-visual img,
.story-visual__photo {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Pull skin tones warmer to match the bone/clay palette */
  filter: saturate(0.92) contrast(1.02) brightness(1.02) sepia(0.04);
  transition: transform 1.6s var(--ease-out), filter 0.8s var(--ease-out);
}
.story-visual:hover img {
  transform: scale(1.04);
  filter: saturate(1) contrast(1.04) brightness(1.03) sepia(0);
}
.story-visual .visual-overlay {
  position: absolute; inset: 0;
  /* Soft warm vignette + subtle blush tint to harmonize with the page */
  background:
    radial-gradient(circle at 30% 25%, rgba(255, 235, 215, 0.22), transparent 55%),
    linear-gradient(180deg, transparent 50%, rgba(44, 32, 26, 0.18) 100%);
  mix-blend-mode: multiply;
  pointer-events: none;
  z-index: 2;
}

/* ----- Cursor-rubbed photo treatment -----
   A scrim sits over the photo. The cursor "rubs" a soft circle clear of the
   scrim using a radial-gradient mask centered on --mx/--my. JS updates the
   mask center as the cursor moves. */
.story-visual--rub {
  --mx: 50%;
  --my: 50%;
  --rub-r: 0px;
  cursor: none;
}
.story-visual--rub .story-visual__photo {
  /* Photo starts slightly desaturated/cool; rubbed area shows it warmer */
  filter: saturate(0.88) brightness(0.96) sepia(0.06);
}
.story-visual--rub:hover .story-visual__photo,
.story-visual--rub.is-rubbing .story-visual__photo {
  filter: saturate(1.0) brightness(1.02) sepia(0);
}
.story-visual__scrim {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 1;
  /* The scrim · warm-tinted veil over the photo */
  background:
    linear-gradient(180deg, rgba(244, 236, 221, 0.42), rgba(193, 139, 114, 0.34) 60%, rgba(44, 32, 26, 0.40)),
    radial-gradient(140% 100% at 20% 15%, rgba(236, 211, 198, 0.45), transparent 60%);
  /* Subtle grain to make the obscure feel like fogged glass */
  background-blend-mode: multiply;
  /* Mask: opaque everywhere except a soft circle at the cursor */
  -webkit-mask-image: radial-gradient(
    circle var(--rub-r, 0px) at var(--mx) var(--my),
    transparent 0%,
    rgba(0, 0, 0, 0.4) 60%,
    #000 100%
  );
          mask-image: radial-gradient(
    circle var(--rub-r, 0px) at var(--mx) var(--my),
    transparent 0%,
    rgba(0, 0, 0, 0.4) 60%,
    #000 100%
  );
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: 100% 100%;
          mask-size: 100% 100%;
  transition: -webkit-mask-image 0.18s var(--ease-out);
  transition:           mask-image 0.18s var(--ease-out);
}

/* Hint text · "move to look closer" */
.rub-hint {
  position: absolute;
  bottom: 1.2rem;
  right: 1.2rem;
  z-index: 3;
  font-family: var(--font-display);
  font-style: italic;
  font-size: 0.82rem;
  letter-spacing: 0.04em;
  color: rgba(244, 236, 221, 0.85);
  background: rgba(44, 32, 26, 0.28);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  padding: 0.35rem 0.7rem;
  border-radius: 999px;
  opacity: 1;
  transition: opacity 0.4s var(--ease-out);
  pointer-events: none;
}
.story-visual--rub.is-rubbing .rub-hint { opacity: 0; }

@media (hover: none) {
  /* Touch devices · no cursor; just show the unobscured photo */
  .story-visual--rub { --rub-r: 9999px; }
  .rub-hint { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .story-visual__scrim { transition: none; }
  .story-visual--rub { --rub-r: 9999px; } /* show the full photo */
}
.story-visual figcaption {
  position: absolute;
  left: 1.2rem; bottom: 1.2rem;
  color: var(--bone);
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-0);
  letter-spacing: 0.02em;
  background: rgba(44, 32, 26, 0.45);
  padding: 0.4rem 0.9rem;
  border-radius: 999px;
  backdrop-filter: blur(6px);
}
.story-content { position: relative; }
.story-content .eyebrow { margin-bottom: 1.4rem; }
.story-content h2 {
  font-size: var(--step-6);
  margin-bottom: 1.6rem;
}
.story-content .signature {
  margin-top: 2rem;
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-1);
  color: var(--cocoa);
}

/* Pull quote */
.pullquote {
  margin: 4rem 0;
  padding-left: 1.4rem;
  border-left: 1px solid var(--clay);
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  font-size: var(--step-3);
  line-height: 1.35;
  color: var(--cocoa);
  max-width: 32rem;
}

/* -----------------------------------------------------------
   11b. PRACTICE & TRAINING · credentials with hand-drawn marks
   ----------------------------------------------------------- */
.practice {
  background: var(--bone-deep);
  position: relative;
}
.practice::before {
  /* a single hairline divider at the top, separates it from STORY without a hard rule */
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: clamp(60px, 12vw, 140px);
  height: 1px;
  background: var(--clay);
  opacity: 0.55;
}
.practice-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
  column-gap: clamp(2.5rem, 6vw, 6rem);
  row-gap: clamp(2.5rem, 5vw, 4rem);
  align-items: start;
}
@media (max-width: 880px) {
  .practice-grid { grid-template-columns: 1fr; row-gap: 2.5rem; }
}
.practice-header { position: sticky; top: 6rem; align-self: start; }
@media (max-width: 880px) { .practice-header { position: static; } }
.practice-header .eyebrow { margin-bottom: 1.4rem; display: inline-block; }
.practice-header h2 {
  font-size: var(--step-5);
  margin-bottom: 1.4rem;
}
.practice-header h2 em {
  font-style: italic;
  color: var(--clay-deep);
}
.practice-lede {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  font-size: var(--step-1);
  line-height: 1.5;
  color: var(--cocoa-soft);
  max-width: 28rem;
}

.creds {
  list-style: none;
  margin: 0;
  padding: 0;
  border-top: 1px solid var(--line-soft);
}
.cred {
  display: grid;
  grid-template-columns: 56px 1fr;
  column-gap: clamp(1rem, 2.5vw, 1.6rem);
  align-items: start;
  padding: 1.4rem 0;
  border-bottom: 1px solid var(--line-soft);
  transition: padding-left 0.5s var(--ease-out), background-color 0.5s var(--ease-out);
}
.cred:hover {
  padding-left: 0.6rem;
  background-color: rgba(193, 139, 114, 0.04); /* subtle clay tint */
}
.cred-mark {
  width: 44px;
  height: 44px;
  color: var(--cocoa);
  opacity: 0.78;
  transition: color 0.5s var(--ease-out), opacity 0.5s var(--ease-out), transform 0.6s var(--ease-out);
  transform-origin: center;
}
.cred:hover .cred-mark {
  color: var(--clay-deep);
  opacity: 1;
  transform: rotate(-3deg);
}
.cred-body {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  padding-top: 0.15rem;
}
.cred-name {
  font-family: var(--font-display);
  font-weight: 300;
  font-style: italic;
  font-size: var(--step-2);
  line-height: 1.15;
  color: var(--cocoa);
  letter-spacing: -0.005em;
  transition: color 0.5s var(--ease-out);
}
.cred:hover .cred-name { color: var(--clay-deep); }
.cred-context {
  font-family: var(--font-body);
  font-size: var(--step--1);
  line-height: 1.5;
  color: var(--taupe);
  letter-spacing: 0.01em;
  max-width: 32rem;
  transition: color 0.5s var(--ease-out);
}
.cred:hover .cred-context { color: var(--cocoa-soft); }

/* The closing meta-line · echoes the hero meta */
.practice-coda {
  margin-top: clamp(2rem, 4vw, 3rem);
  display: flex;
  align-items: center;
  gap: 0.8rem;
  font-family: var(--font-body);
  font-size: var(--step--1);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--taupe);
}
.practice-coda::before {
  content: "";
  width: 28px;
  height: 1px;
  background: var(--taupe);
  display: inline-block;
}

/* -----------------------------------------------------------
   12. METHOD (3-pillar cards)
   ----------------------------------------------------------- */
.method {
  background: var(--warm-white);
}
.method-header {
  display: grid;
  grid-template-columns: 1fr 1.2fr;
  gap: clamp(2rem, 6vw, 6rem);
  margin-bottom: 5rem;
  align-items: end;
}
.method-header h2 { font-size: var(--step-7); }
.method-header p { font-size: var(--step-1); color: var(--cocoa-soft); }
@media (max-width: 880px) { .method-header { grid-template-columns: 1fr; } }

/* Drawn-diagram replacement for the old 3-card pillars · NOT a SaaS template.
   Layout: three labelled legs stacked on the LEFT (one per row), with the
   diagram on the right spanning all three rows so it sits vertically centred. */
.method-header h2 em { font-style: italic; color: var(--clay-deep); }
.method-diagram-wrap {
  position: relative;
  display: grid;
  grid-template-columns: 1fr clamp(320px, 38%, 460px);
  grid-template-rows: repeat(3, auto);
  column-gap: clamp(2rem, 5vw, 5rem);
  row-gap: 0;
  align-items: center;
  margin-top: 3rem;
}
.method-leg { grid-column: 1; }
.method-leg--nourish  { grid-row: 1; }
.method-leg--regulate { grid-row: 2; }
.method-leg--return   { grid-row: 3; }

/* The SVG diagram · concentric arcs that draw themselves on scroll */
.method-diagram {
  width: 100%;
  max-width: 460px;
  aspect-ratio: 1;
  color: var(--cocoa);
  grid-column: 2;
  grid-row: 1 / -1;       /* span all three legs vertically */
  justify-self: center;
  align-self: center;
}
.method-arc {
  stroke: var(--cocoa);
  fill: none;
}
.method-arc--inner   { stroke: var(--cocoa);      stroke-width: 1.8; }
.method-arc--middle  { stroke: var(--clay-deep);  stroke-width: 1.5; opacity: 0.9; }
.method-arc--outer   { stroke: var(--taupe);      stroke-width: 1.2; opacity: 0.75; }
.method-seed {
  color: var(--clay-deep);
  /* Subscribe to the global breath wave · the center pulses */
  opacity: calc(0.7 + var(--breath, 0.5) * 0.3);
  transform-box: fill-box;
  transform-origin: center;
  transform: scale(calc(0.96 + var(--breath, 0.5) * 0.08));
}
.method-seed path { stroke: currentColor; stroke-width: 1.6; fill: none; }
.arc-pearl { fill: var(--clay-deep); opacity: 0; transition: opacity 1s var(--ease-out); }
.draw-on-scroll.is-visible .arc-pearl { opacity: 1; transition-delay: 2.2s; }
/* Stagger the draw-on-scroll · use longer durations than the global default */
.method-diagram .method-arc--inner { transition-duration: 2.0s; transition-delay: 0.0s; }
.method-diagram .method-arc--middle { transition-duration: 2.4s; transition-delay: 0.4s; }
.method-diagram .method-arc--outer { transition-duration: 2.8s; transition-delay: 0.9s; }

/* Three labeled "legs" stacked on the right · italic editorial */
.method-diagram-wrap > .method-leg {
  position: relative;
  padding: 1.4rem 0 1.4rem 0;
  border-top: 1px solid var(--line-soft);
  transition: padding-left 0.5s var(--ease-out);
}
.method-leg:last-child { border-bottom: 1px solid var(--line-soft); }
.method-leg:hover { padding-left: 1rem; }
.method-leg__num {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-1);
  color: var(--clay);
  letter-spacing: 0.04em;
  margin-right: 0.6rem;
}
.method-leg h3 {
  display: inline;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--step-3);
  line-height: 1.1;
  color: var(--cocoa);
  transition: color 0.5s var(--ease-out), text-shadow 0.5s var(--ease-out);
  text-shadow: 0 0 0 transparent, 0 0 0 transparent;
}
.method-leg:hover h3 {
  color: var(--clay-deep);
  text-shadow: 0.018em 0 0 currentColor, -0.018em 0 0 currentColor;
}
.method-leg p {
  margin-top: 0.8rem;
  color: var(--taupe);
  font-size: var(--step-0);
  line-height: 1.6;
  max-width: 32rem;
  transition: color 0.5s var(--ease-out);
}
.method-leg:hover p { color: var(--cocoa); }

@media (max-width: 880px) {
  .method-diagram-wrap {
    grid-template-columns: 1fr;
    grid-template-rows: auto;
  }
  .method-leg, .method-diagram {
    grid-column: 1;
    grid-row: auto;
  }
  .method-diagram {
    max-width: 360px;
    margin-top: 1.5rem;
  }
}

/* -----------------------------------------------------------
   13. EXPERIENCE LIST
   ----------------------------------------------------------- */
.experience {
  background: var(--bone);
}
.exp-grid {
  display: grid;
  grid-template-columns: 1fr 1.4fr;
  gap: clamp(2rem, 6vw, 6rem);
}
.exp-list { list-style: none; }
.exp-item {
  display: grid;
  grid-template-columns: 70px 1fr;
  gap: 1.5rem;
  padding-block: 1.6rem;
  border-bottom: 1px solid var(--line-soft);
  align-items: baseline;
}
.exp-item:last-child { border-bottom: 0; }
.exp-num {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-1);
  color: var(--clay);
  letter-spacing: 0.06em;
}
.exp-content h4 {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--step-2);
  margin-bottom: 0.4rem;
  color: var(--cocoa);
}
.exp-content p { color: var(--taupe); font-size: var(--step-0); }
@media (max-width: 880px) { .exp-grid { grid-template-columns: 1fr; } }

/* -----------------------------------------------------------
   14. WHO IT'S FOR
   ----------------------------------------------------------- */
.audience {
  background: var(--cream);
}
.audience-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
  border: 1px solid var(--line);
  border-radius: 4px;
  overflow: hidden;
}
.audience-col {
  padding: 3rem;
  background: var(--warm-white);
  position: relative;
  transition:
    background-color 0.55s var(--ease-out),
    box-shadow 0.55s var(--ease-out);
}
.audience-col + .audience-col { border-left: 1px solid var(--line); background: var(--cream); }

/* Column hover · subtle warm bg + a clay (or taupe) accent line drawn via inset shadow.
   Inset stays clipped inside the parent's overflow:hidden so the corner-radius is preserved. */
.audience-col:hover {
  background: var(--bone-deep);
  box-shadow:
    inset 0 3px 0 0 var(--clay-deep),
    inset 0 0 60px -20px rgba(193, 139, 114, 0.25);
}
.audience-col + .audience-col:hover {
  background: var(--cream);
  box-shadow:
    inset 0 3px 0 0 var(--taupe),
    inset 0 0 60px -20px rgba(133, 114, 99, 0.20);
}

.audience-col h3 {
  font-size: var(--step-3);
  margin-bottom: 1.6rem;
  transition: color 0.5s var(--ease-out), text-shadow 0.5s var(--ease-out);
  text-shadow: 0 0 0 transparent, 0 0 0 transparent;
}
.audience-col:hover h3 {
  color: var(--clay-deep);
  text-shadow: 0.014em 0 0 currentColor, -0.014em 0 0 currentColor;
}
.audience-col + .audience-col:hover h3 {
  color: var(--cocoa);
  text-shadow: 0.014em 0 0 currentColor, -0.014em 0 0 currentColor;
}
.audience-col h3 .mark {
  display: inline-block;
  width: 12px; height: 12px;
  border-radius: 50%;
  background: var(--clay);
  margin-right: 14px;
  transform: translateY(-2px);
  transition: transform 0.5s var(--ease-out), background-color 0.5s var(--ease-out);
}
.audience-col:hover h3 .mark {
  transform: translateY(-2px) scale(1.25);
  background: var(--clay-deep);
}
.audience-col h3 .mark--alt { background: var(--taupe-soft); }
.audience-col + .audience-col:hover h3 .mark--alt {
  background: var(--taupe);
}
.audience-col ul { list-style: none; }
.audience-col li {
  padding-block: 0.9rem;
  border-bottom: 1px solid var(--line-soft);
  font-size: var(--step-0);
  color: var(--cocoa-soft);
  position: relative;
  padding-left: 1.4rem;
}
.audience-col li:last-child { border-bottom: 0; }
.audience-col li::before {
  content: "·";
  position: absolute;
  left: 0;
  color: var(--clay);
}
@media (max-width: 800px) {
  .audience-grid { grid-template-columns: 1fr; }
  .audience-col + .audience-col { border-left: 0; border-top: 1px solid var(--line); }
}

/* -----------------------------------------------------------
   15. STATS · editorial truths · NOT a dark band
   ----------------------------------------------------------- */
.stats {
  /* Warm cream + subtle blush wash · no SaaS-style dark band */
  background:
    radial-gradient(circle at 80% 20%, rgba(236, 211, 198, 0.45), transparent 55%),
    radial-gradient(circle at 10% 90%, rgba(193, 139, 114, 0.18), transparent 50%),
    var(--cream);
  color: var(--cocoa);
  position: relative;
  overflow: hidden;
}
.stats-header { max-width: 56rem; margin-bottom: 4rem; position: relative; z-index: 1; }
.stats-header h2 { font-size: var(--step-6); }
.stats-header h2 em { font-style: italic; color: var(--clay-deep); }

/* The three lines · long italic paragraph rhythm */
.stats-prose {
  max-width: 60rem;
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  gap: 2.4rem;
}
.stats-line {
  display: grid;
  grid-template-columns: minmax(170px, 0.5fr) 1fr;
  gap: clamp(1.4rem, 4vw, 3.4rem);
  align-items: baseline;
  padding-block: 1.2rem;
  border-top: 1px solid var(--line-soft);
}
.stats-line:last-child { border-bottom: 1px solid var(--line-soft); }
.stats-line__num {
  font-family: var(--font-display);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(3rem, 6vw, 5rem);
  line-height: 0.9;
  letter-spacing: -0.02em;
  color: var(--clay-deep);
  display: inline-flex;
  align-items: baseline;
  gap: 0.18em;
}
.stats-line__unit {
  font-family: var(--font-body);
  font-style: normal;
  font-weight: 500;
  font-size: 0.32em;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--taupe);
  align-self: end;
  padding-bottom: 0.4em;
}
.stats-line__copy {
  font-family: var(--font-display);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(1.3rem, 2.3vw, 1.85rem);
  line-height: 1.35;
  color: var(--cocoa);
  max-width: 36rem;
}
.stats-line__copy em {
  color: var(--clay-deep);
  font-style: italic;
}
.stats-line__faint {
  color: var(--taupe);
  font-style: normal;
}

/* ----- Stats line · cursor-driven interaction ------------------------------
   On hover each row 'wakes up' · a warm clay spotlight tracks the cursor
   across the row (via --mx/--my updated by pointermove in main.js),
   the number swells + thickens, the unit warms from taupe to clay-deep,
   the dividing rule deepens, and an animated underline draws beneath.
   All values calibrated to feel deliberate, never twitchy. */
.stats-line {
  position: relative;
  transition:
    transform 0.7s var(--ease-out),
    border-top-color 0.7s var(--ease-out);
  cursor: none;
}
/* Warm spotlight · follows cursor inside the row */
.stats-line::before {
  content: "";
  position: absolute;
  inset: -0.5rem -1.2rem;
  background: radial-gradient(
    260px 180px at var(--mx, 50%) var(--my, 50%),
    rgba(193, 139, 114, 0.18) 0%,
    rgba(193, 139, 114, 0.06) 38%,
    transparent 72%);
  border-radius: 8px;
  opacity: 0;
  transition: opacity 0.6s var(--ease-out);
  pointer-events: none;
  z-index: 0;
}
/* Animated bottom underline · grows from left on hover */
.stats-line::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 1px;
  background: linear-gradient(90deg,
    var(--clay-deep) 0%,
    var(--clay) 60%,
    transparent 100%);
  transform: scaleX(0);
  transform-origin: left center;
  opacity: 0;
  transition: transform 0.9s var(--ease-out), opacity 0.4s var(--ease-out);
  pointer-events: none;
  z-index: 1;
}
/* Children float above the spotlight */
.stats-line__num,
.stats-line__copy {
  position: relative;
  z-index: 1;
}
.stats-line__num,
.stats-line__unit,
.stats-line__copy em,
.stats-line__faint {
  transition:
    transform 0.6s var(--ease-out),
    color 0.6s var(--ease-out),
    text-shadow 0.6s var(--ease-out),
    letter-spacing 0.6s var(--ease-out);
}
/* Hover state · everything wakes up together */
.stats-line:hover {
  transform: translateY(-3px);
  border-top-color: var(--clay-deep);
}
.stats-line:hover::before { opacity: 1; }
.stats-line:hover::after  { transform: scaleX(1); opacity: 1; }
.stats-line:hover .stats-line__num {
  transform: scale(1.04);
  text-shadow: 0.014em 0 0 currentColor, -0.014em 0 0 currentColor;
}
.stats-line:hover .stats-line__unit {
  color: var(--clay-deep);
  letter-spacing: 0.22em;
}
.stats-line:hover .stats-line__copy em {
  text-shadow: 0.012em 0 0 currentColor, -0.012em 0 0 currentColor;
}
.stats-line:hover .stats-line__faint {
  color: var(--cocoa-soft);
}
@media (prefers-reduced-motion: reduce) {
  .stats-line,
  .stats-line::before,
  .stats-line::after,
  .stats-line__num,
  .stats-line__unit,
  .stats-line__copy em,
  .stats-line__faint { transition: none; }
  .stats-line:hover                       { transform: none; }
  .stats-line:hover .stats-line__num      { transform: none; }
}

/* Concentric ellipses ornament behind everything · slowly drifts with breath */
.stats-ornament {
  position: absolute;
  top: 50%; right: -10vw;
  width: min(50vh, 520px);
  height: min(50vh, 520px);
  aspect-ratio: 1 / 1;
  display: block;
  color: var(--clay);
  opacity: calc(0.08 + var(--breath, 0.5) * 0.06);
  transform: translateY(-50%) rotate(calc(var(--breath, 0.5) * 6deg - 3deg));
  pointer-events: none;
  z-index: 0;
}

@media (max-width: 700px) {
  .stats-line {
    grid-template-columns: 1fr;
    gap: 0.6rem;
  }
}

/* -----------------------------------------------------------
   16. ABOUT (Founder)
   ----------------------------------------------------------- */
.about {
  background: var(--bone);
}
.about-grid {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: clamp(2rem, 6vw, 6rem);
  align-items: center;
}
.about-portrait {
  position: relative;
  aspect-ratio: 4 / 5;
  background: var(--blush-deep);
  border-radius: 4px;
  overflow: hidden;
}
.about-portrait img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Tighter framing on the face; pull the focal point up so the
     name caption at the bottom doesn't cover Débora's smile. */
  object-position: 50% 22%;
  filter: saturate(0.9) contrast(1.03) brightness(1.01) sepia(0.05);
  transition: transform 1.6s var(--ease-out), filter 0.8s var(--ease-out);
}
.about-portrait:hover img {
  transform: scale(1.05);
  filter: saturate(1) contrast(1.05) brightness(1.02) sepia(0);
}
.about-portrait .portrait-grain {
  position: absolute; inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.17  0 0 0 0 0.13  0 0 0 0 0.10  0 0 0 0.4 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
  opacity: 0.18;
  mix-blend-mode: multiply;
  pointer-events: none;
}
/* Soft dark gradient at the bottom so the white-on-image name caption stays legible.
   Uses ::before so the .img-reveal::after curtain animation isn't overridden. */
.about-portrait::before {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 50%, rgba(44, 32, 26, 0.55) 100%);
  pointer-events: none;
  z-index: 1;
}
.about-name { z-index: 2; }
.about-name {
  position: absolute;
  left: 1.5rem; bottom: 1.5rem;
  color: var(--bone);
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-3);
}
.about-name small {
  display: block;
  font-family: var(--font-body);
  font-style: normal;
  font-size: 0.65rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--blush);
  margin-top: 6px;
}
.about-content h2 { font-size: var(--step-6); margin-bottom: 1.6rem; }
.about-content p + p { margin-top: 1rem; }
.about-creds {
  margin-top: 2.4rem;
  padding-top: 1.6rem;
  border-top: 1px solid var(--line-soft);
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
}
.cred-pill {
  font-size: var(--step--2);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 0.5rem 0.9rem;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--cocoa-soft);
  position: relative;
  overflow: hidden;
  cursor: none;
  isolation: isolate;
  transition:
    color 0.5s var(--ease-out),
    border-color 0.5s var(--ease-out),
    transform 0.5s var(--ease-out),
    letter-spacing 0.5s var(--ease-out),
    text-shadow 0.5s var(--ease-out),
    box-shadow 0.5s var(--ease-out);
}
/* Warm radial spotlight · follows cursor inside the pill */
.cred-pill::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(
    90px 70px at var(--mx, 50%) var(--my, 50%),
    rgba(193, 139, 114, 0.24) 0%,
    rgba(193, 139, 114, 0.08) 50%,
    transparent 80%);
  opacity: 0;
  transition: opacity 0.5s var(--ease-out);
  pointer-events: none;
  border-radius: inherit;
  z-index: -1;
}
.cred-pill:hover {
  color: var(--cocoa);
  border-color: var(--clay-deep);
  transform: translateY(-2px);
  box-shadow: 0 10px 24px -16px rgba(193, 139, 114, 0.6);
}
.cred-pill:hover::before { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  .cred-pill,
  .cred-pill::before { transition: none; }
  .cred-pill:hover { transform: none; }
}
@media (max-width: 880px) { .about-grid { grid-template-columns: 1fr; } }

/* -----------------------------------------------------------
   16.5 NETWORK  ·  trusted specialist circle
   ----------------------------------------------------------- */
.network {
  background: var(--cream);
  position: relative;
  overflow: hidden;
}
.network-header {
  max-width: 52rem;
  margin: 0 auto 4.5rem auto;
  position: relative;
  z-index: 1;
}
.network-header h2 {
  font-size: var(--step-6);
  margin-bottom: 1.6rem;
}
.network-header p {
  font-size: var(--step-1);
  color: var(--cocoa-soft);
  line-height: 1.55;
}
.network-roll {
  list-style: none;
  max-width: 64rem;
  margin: 0 auto;
  position: relative;
  z-index: 1;
}
.network-row {
  display: grid;
  grid-template-columns: 60px 1fr;
  gap: 2rem;
  padding: 2rem 1rem;
  border-top: 1px solid var(--line-soft);
  align-items: baseline;
  transition: transform 0.5s var(--ease-out),
              background-color 0.5s var(--ease-out);
  border-radius: 4px;
}
.network-row:last-child { border-bottom: 1px solid var(--line-soft); }
.network-row:hover {
  transform: translateX(1rem);
  background: linear-gradient(90deg, var(--blush) 0%, transparent 80%);
}
.network-num {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-2);
  color: var(--clay);
  letter-spacing: 0.04em;
  transition: color 0.5s var(--ease-out), transform 0.5s var(--ease-out);
}
.network-row:hover .network-num {
  color: var(--clay-deep);
  transform: translateX(3px);
}
.network-text {
  display: grid;
  grid-template-columns: 1fr 1.4fr;
  gap: 1.4rem 2rem;
  align-items: baseline;
}
.network-name {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--step-3);
  color: var(--cocoa);
  line-height: 1.15;
  transition: color 0.5s var(--ease-out), text-shadow 0.5s var(--ease-out);
  text-shadow: 0 0 0 transparent, 0 0 0 transparent;
}
.network-row:hover .network-name {
  color: var(--clay-deep);
  text-shadow: 0.018em 0 0 currentColor, -0.018em 0 0 currentColor;
}
.network-desc {
  font-size: var(--step-0);
  color: var(--taupe);
  line-height: 1.6;
  transition: color 0.5s var(--ease-out);
}
.network-row:hover .network-desc { color: var(--cocoa); }
@media (max-width: 880px) {
  .network-text { grid-template-columns: 1fr; gap: 0.6rem; }
}
@media (max-width: 600px) {
  .network-row { grid-template-columns: 40px 1fr; gap: 1rem; padding: 1.6rem 0.6rem; }
}

/* Faint concentric-circles ornament behind the section */
.network-ornament {
  position: absolute;
  top: 50%; right: -8vw;
  width: min(60vh, 720px);
  height: min(60vh, 720px);
  aspect-ratio: 1 / 1;
  display: block;
  color: var(--clay);
  opacity: 0.10;
  transform: translateY(-50%);
  pointer-events: none;
  animation: networkDrift 30s ease-in-out infinite;
}
@keyframes networkDrift {
  0%, 100% { transform: translateY(-50%) rotate(0deg); }
  50%      { transform: translateY(-48%) rotate(8deg); }
}

/* -----------------------------------------------------------
   17. FINAL CTA
   ----------------------------------------------------------- */
.cta-final {
  background: var(--cocoa);
  color: var(--bone);
  position: relative;
  overflow: hidden;
}
.cta-final::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 80% 100%, rgba(193, 139, 114, 0.25), transparent 50%);
}
.cta-final * { position: relative; }
.cta-final .eyebrow { color: var(--blush); }
.cta-final .eyebrow::before { background: var(--blush); }
.cta-final h2 {
  font-size: var(--step-8);
  color: var(--bone);
  max-width: 18ch;
  margin: 1.6rem 0 2.4rem;
  padding-right: 0.12em;
  overflow-wrap: break-word;
}
.cta-final h2 em { color: var(--blush); font-style: italic; }
/* Mobile · italic descenders (the 'y' in "way", the 'k' in "talk", the
   'y' in "yours") visually overflow the typographic box and were poking
   into the section's right padding at the headline's clamp-min size.
   Step down to a more modest scale and let the heading breathe. */
@media (max-width: 600px) {
  .cta-final h2 {
    font-size: clamp(2.4rem, 11vw, 3.6rem);
    max-width: none;
    padding-right: 0.25em;
  }
}
.cta-final .btn {
  border-color: var(--bone);
  color: var(--bone);
}
.cta-final .btn::before { background: var(--bone); }
.cta-final .btn:hover { color: var(--cocoa); }

/* -----------------------------------------------------------
   18. FOOTER
   ----------------------------------------------------------- */
.foot {
  background: var(--bone);
  padding: 4rem var(--gutter) 2.4rem;
  border-top: 1px solid var(--line-soft);
}
.foot-grid {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr 1fr;
  gap: 2.4rem;
  margin-bottom: 4rem;
}
.foot-brand .nav-brand-mark { width: 36px; height: 36px; }
.foot-brand .nav-brand-text { font-size: 1.2rem; }
.foot-brand p {
  margin-top: 1.2rem;
  max-width: 22rem;
  font-size: var(--step--1);
  color: var(--taupe);
  line-height: 1.6;
}
.foot-col h5 {
  font-size: var(--step--2);
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--taupe);
  margin-bottom: 1.2rem;
  font-family: var(--font-body);
}
/* Grid items default to min-width:auto, which means their min-content
   size (e.g. an unbreakable email like info@endometriosisresetmethod.com
   ~250px wide) forces the 1fr track wider than its share. That blows
   the entire footer grid past .foot/.wrap, pushing the "Begin" column
   to the viewport edge and bleeding horizontal overflow onto the page
   (the "right beige strip"). min-width:0 lets the column shrink below
   intrinsic min-content; overflow-wrap:anywhere lets the long email/URL
   actually break. Both are needed. */
.foot-col { min-width: 0; }
.foot-col ul { list-style: none; }
.foot-col li { padding-block: 0.4rem; }
.foot-col a {
  color: var(--cocoa-soft);
  font-size: var(--step-0);
  overflow-wrap: anywhere;
  word-break: break-word;
}
.foot-col a:hover { color: var(--clay-deep); }
.foot-bottom {
  padding-top: 2rem;
  border-top: 1px solid var(--line-soft);
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: var(--step--2);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--taupe);
  flex-wrap: wrap;
  gap: 1rem;
}
@media (max-width: 760px) {
  .foot-grid { grid-template-columns: 1fr 1fr; gap: 1.6rem; }
  .foot-brand { grid-column: 1 / -1; }
  /* The global --gutter clamps to 1.25rem at narrow viewports, leaving
     the right-hand footer column ("Begin": Sessions & pricing / Free
     discovery call / Terms & conditions) flush against the screen edge.
     Boost the footer's own inline padding so the columns always have
     real breathing room from the viewport edge across all stacked
     mobile breakpoints (≤760px), regardless of the .wrap gutter. */
  .foot { padding-inline: clamp(2rem, 7vw, 3rem); }
}

/* Big footer wordmark · scales fluidly, wraps cleanly if needed.
   Was clamp(3rem, 14vw, 12rem) with nowrap + overflow:hidden which
   clipped 'Reset Method.' off the right edge on viewports ≥ 1100px.
   Now sized to fit "Endometriosis Reset Method." on one line at the
   widest content widths and wraps gracefully to two lines on narrow
   viewports; 'Endometriosis Reset' / 'Method.' is the natural break. */
.foot-wordmark {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(2rem, 9vw, 7rem);
  line-height: 0.95;
  color: var(--cocoa);
  letter-spacing: -0.02em;
  margin: 3rem 0;
  opacity: 0.92;
}
.foot-wordmark .accent-display { color: var(--clay-deep); }

/* -----------------------------------------------------------
   19. BOOKING PAGE
   ----------------------------------------------------------- */
.book-hero {
  padding-top: 10rem;
  padding-bottom: 5rem;
  background: var(--bone);
}
.book-hero .eyebrow { margin-bottom: 1.6rem; }
.book-hero h1 {
  font-size: var(--step-8);
  max-width: 18ch;
  margin-bottom: 1.6rem;
}
.book-hero h1 em { color: var(--clay-deep); font-style: italic; }
.book-hero p {
  max-width: 36rem;
  font-size: var(--step-1);
  color: var(--cocoa-soft);
}

.book-flow {
  background: var(--warm-white);
}
.book-flow-grid {
  display: grid;
  grid-template-columns: 1fr 2fr;
  gap: clamp(2rem, 6vw, 6rem);
}
.book-flow h2 { font-size: var(--step-5); }
.flow-list { list-style: none; }
.flow-step {
  padding-block: 1.4rem;
  border-bottom: 1px solid var(--line-soft);
  display: grid;
  grid-template-columns: 60px 1fr;
  gap: 1.4rem;
  align-items: baseline;
}
.flow-step:last-child { border-bottom: 0; }
.flow-num {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-1);
  color: var(--clay);
}
.flow-content h4 {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--step-2);
  color: var(--cocoa);
  margin-bottom: 0.4rem;
}
.flow-content p { color: var(--taupe); font-size: var(--step-0); }
@media (max-width: 880px) { .book-flow-grid { grid-template-columns: 1fr; } }

.book-form-section {
  background: var(--bone);
}
.book-form-grid {
  display: grid;
  grid-template-columns: 1fr 1.4fr;
  gap: clamp(2rem, 6vw, 6rem);
  align-items: start;
}
.book-form-side h3 { font-size: var(--step-4); margin-bottom: 1.4rem; }
.book-form-side .lede { font-size: var(--step-1); color: var(--cocoa-soft); margin-bottom: 1.6rem; }
.book-form-side .small-meta {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  margin-top: 2rem;
  font-size: var(--step--1);
  color: var(--taupe);
  letter-spacing: 0.04em;
}
.book-form-side .small-meta strong {
  display: block;
  font-family: var(--font-body);
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-size: var(--step--2);
  color: var(--cocoa);
  margin-bottom: 0.2rem;
}

.form {
  background: var(--warm-white);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: clamp(1.6rem, 3vw, 2.4rem);
}
.field {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  margin-bottom: 1.4rem;
}
.field label {
  font-size: var(--step--2);
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--cocoa);
}
.field label .req { color: var(--clay); }
.field input,
.field textarea,
.field select {
  width: 100%;
  padding: 0.95rem 1rem;
  background: var(--bone);
  border: 1px solid var(--line);
  border-radius: 4px;
  color: var(--cocoa);
  font-size: var(--step-0);
  font-family: var(--font-body);
  transition: border-color var(--fast) var(--ease-out),
              background-color var(--fast) var(--ease-out);
}
.field input:focus,
.field textarea:focus,
.field select:focus {
  outline: none;
  border-color: var(--clay);
  background: var(--warm-white);
}
.field textarea { resize: vertical; min-height: 130px; line-height: 1.5; }
.field-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
}
@media (max-width: 600px) { .field-row { grid-template-columns: 1fr; } }
.consent {
  display: flex;
  gap: 0.8rem;
  align-items: flex-start;
  margin-bottom: 1.6rem;
  font-size: var(--step--1);
  color: var(--taupe);
  line-height: 1.5;
}
.consent input { width: 16px; height: 16px; flex-shrink: 0; margin-top: 4px; accent-color: var(--cocoa); }
.consent a { color: var(--cocoa); text-decoration: underline; text-underline-offset: 3px; }
.form-success {
  display: none;
  padding: 1.4rem;
  border-radius: 4px;
  background: var(--blush);
  border: 1px solid var(--clay);
  color: var(--cocoa);
  font-size: var(--step-0);
  margin-top: 1rem;
}
.form-success.show { display: block; }

@media (max-width: 880px) { .book-form-grid { grid-template-columns: 1fr; } }

.book-faq { background: var(--cream); }
.faq-grid {
  display: grid;
  grid-template-columns: 1fr 2fr;
  gap: clamp(2rem, 6vw, 6rem);
  align-items: start;
}
.faq-grid h2 { font-size: var(--step-5); }
.faq-list { list-style: none; }
.faq-item {
  border-bottom: 1px solid var(--line);
  padding-block: 1.2rem;
}
.faq-item:first-child { border-top: 1px solid var(--line); }
.faq-q {
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 100%;
  text-align: left;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--step-2);
  color: var(--cocoa);
  padding: 0.6rem 0;
  cursor: none;
  gap: 1rem;
}
.faq-q .chev {
  width: 22px; height: 22px;
  border-radius: 50%;
  border: 1px solid var(--cocoa);
  display: grid; place-items: center;
  flex-shrink: 0;
  transition: transform var(--med) var(--ease-out),
              background-color var(--med) var(--ease-out);
  color: var(--cocoa);
}
.faq-q .chev::before {
  content: "+";
  font-size: 14px;
  line-height: 1;
  font-family: var(--font-body);
}
.faq-item.is-open .faq-q .chev { transform: rotate(45deg); background: var(--cocoa); color: var(--bone); }
.faq-item.is-open .faq-q .chev::before { color: var(--bone); }
.faq-a {
  max-height: 0;
  overflow: hidden;
  transition: max-height var(--med) var(--ease-out);
}
.faq-a-inner {
  padding: 0.6rem 0 1.2rem;
  color: var(--taupe);
  max-width: 48rem;
  font-size: var(--step-0);
  line-height: 1.6;
}
@media (max-width: 880px) { .faq-grid { grid-template-columns: 1fr; } }

/* -----------------------------------------------------------
   20. TERMS PAGE
   ----------------------------------------------------------- */
.terms-hero {
  padding-top: 10rem;
  padding-bottom: 4rem;
  background: var(--bone);
}
.terms-hero h1 {
  font-size: var(--step-8);
  max-width: 16ch;
  margin-bottom: 1.6rem;
}
.terms-hero h1 em { color: var(--clay-deep); font-style: italic; }
.terms-hero .updated {
  display: inline-block;
  margin-top: 1rem;
  font-size: var(--step--1);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--taupe);
  padding: 0.5rem 1rem;
  border: 1px solid var(--line);
  border-radius: 999px;
}

.terms-body {
  background: var(--warm-white);
  padding-top: 4rem;
}
.terms-grid {
  display: grid;
  grid-template-columns: 240px 1fr;
  gap: clamp(2rem, 6vw, 6rem);
  align-items: start;
}
.terms-toc {
  position: sticky;
  top: 6rem;
  font-size: var(--step--1);
}
.terms-toc h5 {
  font-family: var(--font-body);
  font-size: var(--step--2);
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--taupe);
  margin-bottom: 1rem;
}
.terms-toc ol {
  list-style: none;
  counter-reset: tocitem;
}
.terms-toc li {
  counter-increment: tocitem;
  padding-block: 0.45rem;
  border-bottom: 1px dashed var(--line-soft);
}
.terms-toc li:last-child { border-bottom: 0; }
.terms-toc a {
  color: var(--cocoa-soft);
  display: flex;
  gap: 0.7rem;
}
.terms-toc a::before {
  content: counter(tocitem, decimal-leading-zero);
  color: var(--clay);
  font-family: var(--font-display);
  font-style: italic;
}
.terms-toc a:hover { color: var(--clay-deep); }
.terms-toc a.is-active { color: var(--clay-deep); }

.terms-content { max-width: 44rem; }
.terms-section {
  padding-block: 2.4rem;
  border-bottom: 1px solid var(--line-soft);
  scroll-margin-top: 6rem;
}
.terms-section:last-child { border-bottom: 0; }
.terms-section h2 {
  font-size: var(--step-4);
  margin-bottom: 1rem;
  display: flex;
  gap: 0.8rem;
  align-items: baseline;
}
.terms-section h2::before {
  content: attr(data-num);
  font-family: var(--font-display);
  font-style: italic;
  color: var(--clay);
  font-size: 0.6em;
}
.terms-section p { color: var(--cocoa-soft); margin-bottom: 1rem; line-height: 1.65; }
.terms-section ul { margin: 1rem 0 1rem 1.2rem; color: var(--cocoa-soft); }
.terms-section li { margin-bottom: 0.5rem; }
.terms-section strong { color: var(--cocoa); font-weight: 600; }

@media (max-width: 880px) {
  .terms-grid { grid-template-columns: 1fr; }
  .terms-toc { position: static; }
}

/* -----------------------------------------------------------
   19.5  BOOKING FLOW  ·  step nav + slot picker + summary
   ----------------------------------------------------------- */

/* Step indicator at top of the form section */
.step-nav {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: 2.4rem;
  font-size: var(--step--2);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--taupe);
  flex-wrap: wrap;
}
.step-nav .step {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.4rem 0.8rem;
  border: 1px solid var(--line-soft);
  border-radius: 999px;
  transition: border-color var(--med) var(--ease-out),
              background-color var(--med) var(--ease-out),
              color var(--med) var(--ease-out);
}
.step-nav .step .step-num {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-0);
  color: var(--clay);
  letter-spacing: 0.04em;
  line-height: 1;
}
.step-nav .step.is-active {
  border-color: var(--cocoa);
  background: var(--cocoa);
  color: var(--bone);
}
.step-nav .step.is-active .step-num { color: var(--blush); }
.step-nav .step.is-done {
  border-color: var(--clay);
  color: var(--clay-deep);
}
.step-nav .divider {
  flex: 0 0 18px;
  height: 1px;
  background: var(--line-soft);
}

/* Step panels · only one visible at a time */
.step-panel { display: none; }
.step-panel.is-active { display: block; animation: stepFade 0.6s var(--ease-out); }
@keyframes stepFade {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Slot picker */
.slot-loading,
.slot-empty {
  padding: 2rem 0;
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-1);
  color: var(--taupe);
}
.slot-day {
  padding-block: 1.2rem;
  border-bottom: 1px solid var(--line-soft);
  display: grid;
  grid-template-columns: 110px 1fr;
  gap: 1.4rem;
  align-items: start;
}
.slot-day:first-child { border-top: 1px solid var(--line-soft); }
.slot-day-label {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-1);
  color: var(--cocoa);
  line-height: 1.2;
}
.slot-day-label .slot-dom {
  display: block;
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 300;
  font-size: var(--step-4);
  line-height: 1;
  color: var(--cocoa);
  margin-top: 4px;
  letter-spacing: -0.02em;
}
.slot-day-label .slot-month {
  display: block;
  font-family: var(--font-body);
  font-size: var(--step--2);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--taupe);
  margin-top: 4px;
  font-style: normal;
}
.slot-times {
  display: flex;
  flex-wrap: wrap;
  gap: 0.55rem;
}
.slot-time {
  font-family: var(--font-body);
  font-size: var(--step--1);
  font-weight: 500;
  letter-spacing: 0.08em;
  padding: 0.55rem 1rem;
  border: 1px solid var(--line);
  border-radius: 999px;
  color: var(--cocoa);
  background: var(--warm-white);
  cursor: none;
  transition:
    background-color 0.35s var(--ease-out),
    color 0.35s var(--ease-out),
    border-color 0.35s var(--ease-out),
    transform 0.35s var(--ease-out);
}
.slot-time:hover {
  border-color: var(--clay);
  color: var(--clay-deep);
  transform: translateY(-2px);
}
.slot-time.is-selected {
  background: var(--cocoa);
  border-color: var(--cocoa);
  color: var(--bone);
  transform: translateY(-2px);
  box-shadow: 0 12px 24px -16px rgba(193,139,114,0.6);
}
@media (max-width: 600px) {
  .slot-day { grid-template-columns: 1fr; gap: 0.8rem; }
}

/* Step actions footer */
.step-actions {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  margin-top: 2.4rem;
  flex-wrap: wrap;
}
.step-actions .ghost-link {
  font-size: var(--step--1);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--taupe);
  cursor: none;
  background: none;
  border: 0;
  padding: 0;
}
.step-actions .ghost-link:hover { color: var(--clay-deep); }

/* Summary card on review step */
.review-card {
  padding: 1.6rem;
  background: var(--cream);
  border: 1px solid var(--line-soft);
  border-radius: 6px;
  margin-bottom: 1.8rem;
}
.review-card h4 {
  font-family: var(--font-body);
  font-size: var(--step--2);
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--taupe);
  margin-bottom: 0.8rem;
}
.review-card .when {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-3);
  color: var(--cocoa);
  line-height: 1.2;
}
.review-card .when .accent { color: var(--clay-deep); }
.review-card .total {
  margin-top: 1.2rem;
  padding-top: 1.2rem;
  border-top: 1px solid var(--line-soft);
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  font-size: var(--step-0);
  color: var(--cocoa);
}
.review-card .total .price {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-3);
  color: var(--clay-deep);
}

/* Inline error banner */
.form-error {
  display: none;
  padding: 1rem 1.2rem;
  border-radius: 4px;
  background: #F5DCDC;
  border: 1px solid #B5564B;
  color: #6E2A22;
  font-size: var(--step--1);
  margin-bottom: 1.4rem;
}
.form-error.show { display: block; }
.field.has-error input,
.field.has-error textarea,
.field.has-error select {
  border-color: #B5564B;
  background: #FBF0F0;
}
.field-error {
  display: none;
  margin-top: 0.4rem;
  font-size: var(--step--2);
  color: #B5564B;
  letter-spacing: 0.04em;
}
.field.has-error .field-error { display: block; }

/* Loading state on submit button */
.btn.is-loading { pointer-events: none; opacity: 0.75; }
.btn.is-loading::before { transform: translateY(0); }
.btn.is-loading .btn-arrow { display: none; }
.btn .btn-spinner {
  display: none;
  width: 14px; height: 14px;
  border: 1.5px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
}
.btn.is-loading .btn-spinner { display: inline-block; }
@keyframes spin { to { transform: rotate(360deg); } }

/* Outcome pages (booking-confirmed / canceled) */
.outcome-hero {
  padding-top: 10rem;
  padding-bottom: 6rem;
  background: var(--bone);
  position: relative;
  overflow: hidden;
  text-align: center;
}
.outcome-hero h1 {
  font-size: var(--step-8);
  max-width: 18ch;
  margin: 1.4rem auto 1.4rem auto;
}
.outcome-hero h1 em { color: var(--clay-deep); font-style: italic; }
.outcome-hero p { max-width: 36rem; margin: 0 auto 2.4rem auto; font-size: var(--step-1); color: var(--cocoa-soft); }
.outcome-hero .eyebrow { display: inline-block; }
.outcome-hero .actions {
  display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;
  margin-top: 2rem;
}

/* -----------------------------------------------------------
   20.5  MICRO-INTERACTIONS  ·  hover color & motion polish
   ----------------------------------------------------------- */

/* Nav links · color shift + tracking */
.nav-links a.link-underline {
  transition:
    color 0.4s var(--ease-out),
    letter-spacing 0.4s var(--ease-out);
}
.nav-links a.link-underline:hover {
  letter-spacing: 0.08em;
}

/* Pillar cards · gentle lift, blush wash, accent number */
.pillar {
  transition:
    background-color var(--med) var(--ease-out),
    transform 0.6s var(--ease-out),
    box-shadow 0.6s var(--ease-out);
}
.pillar:hover {
  background: linear-gradient(180deg, var(--bone) 0%, var(--blush) 220%);
  transform: translateY(-4px);
  box-shadow: 0 30px 60px -40px rgba(193, 139, 114, 0.45);
}
.pillar .pillar-num,
.pillar .pillar-mark {
  transition: color 0.5s var(--ease-out), transform 0.6s var(--ease-out);
}
.pillar:hover .pillar-num { color: var(--clay-deep); transform: translateX(3px); }
.pillar:hover .pillar-mark { color: var(--clay-deep); transform: rotate(-6deg); }

/* Experience list · highlight on hover · bolds the text */
.exp-item {
  transition: background-color 0.4s var(--ease-out);
  cursor: none;
  padding-inline: 0.4rem;
  border-radius: 4px;
}
.exp-item:hover {
  background: linear-gradient(90deg, var(--blush) 0%, transparent 80%);
}
.exp-num {
  transition: transform 0.5s var(--ease-out), color 0.5s var(--ease-out);
}
.exp-item:hover .exp-num { color: var(--clay-deep); transform: translateX(4px); }
/* Smooth fade-bold via text-shadow (font-weight can't transition between integers) */
.exp-content h4 {
  transition: color 0.5s var(--ease-out), text-shadow 0.5s var(--ease-out);
  text-shadow: 0 0 0 transparent, 0 0 0 transparent;
}
.exp-item:hover .exp-content h4 {
  color: var(--clay-deep);
  text-shadow: 0.018em 0 0 currentColor, -0.018em 0 0 currentColor;
}
.exp-content p {
  transition: color 0.5s var(--ease-out);
}
.exp-item:hover .exp-content p {
  color: var(--cocoa);
}

/* Audience bullets · color + smooth fake-bold + blush gradient sweep per-row */
.audience-col li {
  transition:
    padding-left 0.4s var(--ease-out),
    color 0.4s var(--ease-out),
    text-shadow 0.4s var(--ease-out),
    background-color 0.4s var(--ease-out),
    background-image 0.4s var(--ease-out);
  text-shadow: 0 0 0 transparent, 0 0 0 transparent;
  border-radius: 4px;
  /* Need a transparent gradient as the base so it interpolates smoothly to the hover gradient */
  background: linear-gradient(90deg, rgba(193, 139, 114, 0) 0%, rgba(193, 139, 114, 0) 90%);
}
.audience-col li:hover {
  padding-left: 1.9rem;
  color: var(--cocoa);
  text-shadow: 0.018em 0 0 currentColor, -0.018em 0 0 currentColor;
  background: linear-gradient(90deg, rgba(193, 139, 114, 0.12) 0%, rgba(193, 139, 114, 0) 85%);
}
.audience-col li::before {
  transition: color 0.4s var(--ease-out), transform 0.4s var(--ease-out);
  font-size: 1.4em;
  line-height: 1;
  top: 0.05em;
}
.audience-col li:hover::before {
  color: var(--clay-deep);
  transform: scale(1.7) translateX(-1px);
}
/* For the second column, use a taupe wash instead of clay so it stays visually distinct from the "for you" column */
.audience-col + .audience-col li:hover {
  background: linear-gradient(90deg, rgba(133, 114, 99, 0.12) 0%, rgba(133, 114, 99, 0) 85%);
}
.audience-col + .audience-col li:hover::before {
  color: var(--taupe);
}

/* Stat numbers · subtle color pulse */
.stat-number {
  transition: color 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}
.stat:hover .stat-number {
  color: var(--bone);
  transform: scale(1.04);
}

/* Footer links · clay shift on hover */
.foot-col a {
  transition: color 0.4s var(--ease-out);
}

/* FAQ chevron · color glow + halo */
.faq-q {
  transition: color 0.4s var(--ease-out), letter-spacing 0.4s var(--ease-out);
}
.faq-q:hover {
  color: var(--clay-deep);
  letter-spacing: 0.005em;
}
.faq-q .chev {
  transition:
    transform var(--med) var(--ease-out),
    background-color var(--med) var(--ease-out),
    border-color var(--med) var(--ease-out),
    box-shadow var(--med) var(--ease-out);
}
.faq-q:hover .chev {
  border-color: var(--clay-deep);
  color: var(--clay-deep);
  box-shadow: 0 0 0 6px rgba(193, 139, 114, 0.12);
}

/* Flow steps on the booking page · bolds the text on hover */
.flow-step {
  transition: background-color 0.4s var(--ease-out);
  padding-inline: 0.4rem;
  border-radius: 4px;
}
.flow-step:hover {
  background: linear-gradient(90deg, var(--blush) 0%, transparent 80%);
}
.flow-num {
  transition: color 0.5s var(--ease-out), transform 0.5s var(--ease-out);
}
.flow-step:hover .flow-num { color: var(--clay-deep); transform: translateX(4px); }
.flow-content h4 {
  transition: color 0.5s var(--ease-out), text-shadow 0.5s var(--ease-out);
  text-shadow: 0 0 0 transparent, 0 0 0 transparent;
}
.flow-step:hover .flow-content h4 {
  color: var(--clay-deep);
  text-shadow: 0.018em 0 0 currentColor, -0.018em 0 0 currentColor;
}
.flow-content p {
  transition: color 0.5s var(--ease-out);
}
.flow-step:hover .flow-content p {
  color: var(--cocoa);
}

/* Form fields · accent on focus */
.field input:focus,
.field textarea:focus,
.field select:focus {
  box-shadow: 0 0 0 4px rgba(193, 139, 114, 0.18);
}

/* Brand-mark gentle rotation animates a touch slower on idle hover */
.nav-brand {
  transition: color 0.4s var(--ease-out);
}
.nav-brand:hover { color: var(--clay-deep); }
.nav-brand-mark {
  transition: transform 1.1s var(--ease-out), color 0.5s var(--ease-out);
}

/* Inline link emphasis */
.link-underline {
  transition: color 0.35s var(--ease-out);
}
.link-underline:hover { color: var(--clay-deep); }

/* Reduce motion safeguard for the breathing animation */
@media (prefers-reduced-motion: reduce) {
  .btn--primary { animation: none; }
  .btn:hover { transform: none; letter-spacing: 0.16em; }
  .pillar:hover { transform: none; }
}

/* -----------------------------------------------------------
   20.9 · CAL.COM INLINE EMBED on /booking-confirmed
   ----------------------------------------------------------- */
.cal-embed-section {
  background: var(--bone);
  padding-block: 2rem clamp(4rem, 8vw, 6rem);
}
.cal-embed-container {
  position: relative;
  width: 100%;
  min-height: 620px;
  border: 1px solid var(--line-soft);
  border-radius: 8px;
  background: var(--warm-white);
  overflow: hidden;
}
.cal-embed-container iframe {
  width: 100%;
  border: 0;
  display: block;
}
.cal-embed-loading {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  font-family: var(--font-display);
  font-style: italic;
  color: var(--taupe);
  font-size: var(--step-0);
}
.cal-embed-hint {
  margin-top: 1.4rem;
  text-align: center;
  font-size: var(--step--1);
  color: var(--taupe);
}

/* Fallback panel · shown when CAL_LINK is the placeholder / invalid */
.cal-embed-fallback {
  background: var(--warm-white);
  border: 1px solid var(--line-soft);
  border-left: 3px solid var(--clay-deep);
  border-radius: 8px;
  padding: clamp(2rem, 4vw, 3rem);
  text-align: left;
}
.cal-embed-fallback[hidden] { display: none; }
.cal-embed-fallback__inner {
  max-width: 42rem;
}
.cal-embed-fallback .eyebrow {
  margin-bottom: 1rem;
}
.cal-embed-fallback h3 {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--step-4);
  line-height: 1.15;
  color: var(--cocoa);
  margin-bottom: 1rem;
}
.cal-embed-fallback p {
  color: var(--cocoa-soft);
  font-size: var(--step-0);
  line-height: 1.6;
}
.cal-embed-fallback__contacts {
  list-style: none;
  margin: 1.6rem 0 0 0;
  padding: 1.4rem 0 0 0;
  border-top: 1px solid var(--line-soft);
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
}
.cal-embed-fallback__contacts li a {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step-2);
  color: var(--clay-deep);
  transition: color 0.4s var(--ease-out);
}
.cal-embed-fallback__contacts li a:hover { color: var(--cocoa); }

/* -----------------------------------------------------------
   21. UTILITIES
   ----------------------------------------------------------- */
.text-center { text-align: center; }
.text-clay { color: var(--clay-deep); }
.text-taupe { color: var(--taupe); }
.serif-italic-clay {
  font-family: var(--font-display);
  font-style: italic;
  color: var(--clay-deep);
}
.mt-s { margin-top: 1rem; }
.mt-m { margin-top: 2rem; }
.mt-l { margin-top: 4rem; }
.mb-s { margin-bottom: 1rem; }
.mb-m { margin-bottom: 2rem; }
.mb-l { margin-bottom: 4rem; }

/* ===== LANGUAGE SWITCHER ============================================
   Injected by initLangSwitcher() into the nav-drawer on every page.
   Globe icon + current language code on the toggle, dropdown menu
   showing all four languages with the same URL in each.            */

.nav-lang {
  position: relative;
  margin-left: 0.4rem;
}

.lang-toggle {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  background: transparent;
  border: 1px solid rgba(99, 79, 68, 0.22);
  border-radius: 999px;
  padding: 0.4rem 0.85rem;
  font-family: inherit;
  font-size: var(--step--2);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--cocoa);
  cursor: none;
  transition: border-color var(--fast) var(--ease-out),
              background var(--fast) var(--ease-out),
              color var(--fast) var(--ease-out);
}

.lang-toggle:hover,
.nav-lang.is-open .lang-toggle {
  border-color: var(--clay-deep);
  color: var(--clay-deep);
  background: rgba(193, 139, 114, 0.06);
}

.lang-icon {
  width: 1rem;
  height: 1rem;
  flex-shrink: 0;
}

.lang-current {
  font-weight: 500;
}

.lang-menu {
  list-style: none;
  margin: 0;
  padding: 0.45rem 0;
  position: absolute;
  top: calc(100% + 0.6rem);
  right: 0;
  min-width: 12rem;
  background: var(--cream);
  border: 1px solid rgba(99, 79, 68, 0.14);
  border-radius: 10px;
  box-shadow: 0 18px 40px -22px rgba(44, 32, 26, 0.35);
  z-index: 60;
  opacity: 0;
  transform: translateY(-4px);
  pointer-events: none;
  transition: opacity 0.22s var(--ease-out),
              transform 0.22s var(--ease-out);
}

.nav-lang.is-open .lang-menu {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

.lang-menu li {
  margin: 0;
  padding: 0;
}

.lang-menu a {
  display: flex;
  align-items: baseline;
  gap: 0.9rem;
  padding: 0.55rem 1.1rem;
  color: var(--cocoa-soft);
  text-decoration: none;
  font-size: var(--step--1);
  transition: background var(--fast) var(--ease-out),
              color var(--fast) var(--ease-out);
}

.lang-menu a:hover {
  background: rgba(193, 139, 114, 0.08);
  color: var(--clay-deep);
}

.lang-menu .lang-short {
  font-family: var(--font-sans, inherit);
  font-size: var(--step--2);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--taupe);
  min-width: 1.8em;
  transition: color var(--fast) var(--ease-out);
}

.lang-menu .lang-label {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--step--1);
}

.lang-menu .is-current a {
  color: var(--clay-deep);
}

.lang-menu .is-current .lang-short {
  color: var(--clay-deep);
}

.lang-menu a:hover .lang-short {
  color: var(--clay-deep);
}

/* Mobile · inside the drawer the menu opens inline rather than as a
   floating popover so it doesn't overflow the panel edge. */
@media (max-width: 880px) {
  .nav-lang {
    margin-left: 0;
    width: 100%;
    order: 99;
  }
  .lang-toggle {
    width: auto;
    align-self: flex-start;
  }
  .lang-menu {
    position: static;
    margin-top: 0.7rem;
    width: 100%;
    min-width: 0;
    background: rgba(248, 239, 224, 0.55);
    box-shadow: none;
    border: 1px solid rgba(99, 79, 68, 0.14);
    transform: none;
    opacity: 0;
    max-height: 0;
    overflow: hidden;
    padding: 0;
    transition: opacity 0.2s var(--ease-out),
                max-height 0.28s var(--ease-out),
                padding 0.2s var(--ease-out);
  }
  .nav-lang.is-open .lang-menu {
    opacity: 1;
    max-height: 16rem;
    padding: 0.4rem 0;
  }
}

/* -----------------------------------------------------------
   20. PACKAGES · sessions and the Reset program
   Editorial pricing block: three doorways, one savings offer.
   Built for conversion without breaking Débora's quiet voice.
   ----------------------------------------------------------- */
.packages {
  background:
    radial-gradient(circle at 85% 10%, rgba(236, 211, 198, 0.42), transparent 55%),
    radial-gradient(circle at 8% 92%, rgba(193, 139, 114, 0.16), transparent 50%),
    var(--cream);
  position: relative;
  overflow: hidden;
}

.packages-header {
  max-width: 56rem;
  margin: 0 auto 4rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1rem;
  text-align: center;
  position: relative;
  z-index: 1;
}
.packages-header h2 {
  font-size: var(--step-6);
  margin-top: 0;
}
.packages-header h2 em {
  color: var(--clay-deep);
  font-style: italic;
}
.packages-header .lede {
  margin: 1.6rem auto 0;
  max-width: 42rem;
  font-size: var(--step-2);
}

.packages-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
  align-items: stretch;
  position: relative;
  z-index: 1;
}
@media (max-width: 980px) {
  .packages-grid { grid-template-columns: 1fr; gap: 1.2rem; max-width: 36rem; margin: 0 auto; }
}

.pkg-card {
  position: relative;
  display: flex;
  flex-direction: column;
  padding: 2.6rem 2.2rem 2.4rem;
  background: var(--warm-white);
  border: 1px solid var(--line);
  border-radius: 4px;
  overflow: hidden;
  transition:
    transform 0.55s var(--ease-out),
    box-shadow 0.55s var(--ease-out),
    border-color 0.55s var(--ease-out),
    background-color 0.55s var(--ease-out);
}
.pkg-card:hover {
  transform: translateY(-3px);
  border-color: rgba(193, 139, 114, 0.45);
  box-shadow:
    0 28px 60px -36px rgba(44, 32, 26, 0.35),
    inset 0 3px 0 0 var(--clay);
}

.pkg-num {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  font-size: var(--step-2);
  color: var(--clay);
  letter-spacing: 0.04em;
  margin-bottom: 1.2rem;
  line-height: 1;
}

.pkg-title {
  font-size: var(--step-3);
  margin-bottom: 0.6rem;
  line-height: 1.1;
}
.pkg-title em { color: var(--clay-deep); font-style: italic; }

.pkg-tag {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  font-size: var(--step-0);
  color: var(--taupe);
  margin-bottom: 1.4rem;
  line-height: 1.45;
}

.pkg-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem 1.4rem;
  padding: 0.9rem 0;
  margin-bottom: 1.4rem;
  border-block: 1px solid var(--line-soft);
}
.pkg-meta__item {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  font-family: var(--font-body);
  font-size: var(--step--1);
  letter-spacing: 0.04em;
  color: var(--cocoa-soft);
}
.pkg-icon {
  width: 1.05rem;
  height: 1.05rem;
  color: var(--clay);
  flex-shrink: 0;
}

.pkg-desc {
  font-size: var(--step-0);
  color: var(--cocoa-soft);
  line-height: 1.6;
  margin-bottom: 1.2rem;
}

.pkg-incl {
  list-style: none;
  margin-bottom: 1.8rem;
  padding: 0;
}
.pkg-incl li {
  position: relative;
  padding: 0.55rem 0 0.55rem 1.3rem;
  font-size: var(--step--1);
  color: var(--cocoa-soft);
  border-bottom: 1px solid var(--line-soft);
  line-height: 1.5;
}
.pkg-incl li:last-child { border-bottom: 0; }
.pkg-incl li::before {
  content: "·";
  position: absolute;
  left: 0;
  top: 0.55rem;
  color: var(--clay);
  font-size: 1.4em;
  line-height: 1.4;
}

.pkg-price {
  margin-top: auto;
  padding-top: 1.4rem;
  margin-bottom: 1.6rem;
}
.pkg-price__main {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(2.4rem, 4.4vw, 3.4rem);
  line-height: 1;
  color: var(--clay-deep);
  letter-spacing: -0.01em;
  display: inline-flex;
  align-items: baseline;
}
.pkg-price__sym {
  font-size: 0.6em;
  margin-right: 0.08em;
  color: var(--clay);
}
.pkg-price__hint {
  display: block;
  margin-top: 0.45rem;
  font-family: var(--font-body);
  font-size: var(--step--2);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--taupe);
}

.pkg-cta {
  align-self: stretch;
  justify-content: center;
  position: relative;
  gap: 0;
  font-size: var(--step--2) !important;
  padding: 0.95rem 2.8rem 0.95rem 2.4rem !important;
  text-align: center;
}
.pkg-cta .btn-arrow {
  position: absolute;
  right: 1.2rem;
  top: 50%;
  transform: translateY(-50%);
}

/* ---- Action group · Book button · OR · WhatsApp button, stacked
       inside each pkg-card. Pushed to the card bottom via margin-top: auto. ---- */
.pkg-actions {
  margin-top: auto;
  padding-top: 1.4rem;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 0.9rem;
}
.pkg-actions > .btn {
  width: 100%;
  align-self: stretch;
}
.pkg-actions .pkg-save {
  align-self: flex-start;
  margin-bottom: 0.2rem;
}
.pkg-actions .discover-or {
  text-align: center;
  align-self: center;
}

/* ---- WhatsApp icon positioned on the left of the pkg-cta variant.
       Matches the brand mark that already lives on the discover CTA. ---- */
.pkg-cta .btn-icon {
  position: absolute;
  left: 1.2rem;
  top: 50%;
  transform: translateY(-50%);
  width: 1.05rem;
  height: 1.05rem;
  display: block;
}
.btn--whatsapp.pkg-cta {
  padding-left: 3rem !important;
}

/* ---- Refund window note · small trust line under the CTA ---- */
.pkg-refund {
  margin-top: 0.9rem;
  font-family: var(--font-body);
  font-style: italic;
  font-size: var(--step--2);
  line-height: 1.45;
  color: var(--taupe);
  text-align: center;
  letter-spacing: 0.02em;
}
.pkg-refund::before {
  content: "↻";
  font-style: normal;
  margin-right: 0.45em;
  color: var(--clay);
  font-size: 0.95em;
  vertical-align: middle;
}

/* ---- Button modifier · text optically centred, arrow pinned right ----
   Use for stand-alone CTAs where the long copy + trailing arrow would
   otherwise leave the text visually left-of-centre inside the pill. */
.btn--center {
  justify-content: center;
  position: relative;
  gap: 0;
  padding-left: 2.4rem;
  padding-right: 2.4rem;
  text-align: center;
}
.btn--center .btn-arrow {
  position: absolute;
  right: 1.3rem;
  top: 50%;
  transform: translateY(-50%);
}

/* ---- Button modifier · leading icon · text optically centred ---- */
.btn--icon-left {
  justify-content: center;
  position: relative;
  gap: 0;
  padding-left: 3rem;
  padding-right: 1.8rem;
}
.btn--icon-left .btn-icon {
  position: absolute;
  left: 1.15rem;
  top: 50%;
  transform: translateY(-50%);
  width: 1.1rem;
  height: 1.1rem;
  display: block;
}

/* ---- WhatsApp button variant · brand green ---- */
.btn--whatsapp {
  --btn-bg:        #25D366;
  --btn-fg:        #FFFFFF;
  --btn-border:    #25D366;
  --btn-fill-a:    #128C7E;
  --btn-fill-b:    #075E54;
  --btn-fg-hover:  #FFFFFF;
  --btn-glow:      rgba(37, 211, 102, 0.45);
}
.btn--whatsapp:hover {
  border-color: #128C7E;
}

/* ---- Discovery action column · button · OR · button, stacked ---- */
.discover-actions {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.9rem;
}
.discover-or {
  font-family: var(--font-body);
  font-size: var(--step--2);
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--taupe);
  padding: 0.1rem 0;
}

/* ---- Secure-payments badge · sits above the section heading ---- */
.packages-secure {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  padding: 0.5rem 1.05rem;
  background: rgba(143, 160, 136, 0.14);
  border: 1px solid rgba(143, 160, 136, 0.45);
  color: #4F6248;
  border-radius: 999px;
  font-family: var(--font-body);
  font-size: var(--step--2);
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.packages-secure__icon {
  width: 0.95rem;
  height: 0.95rem;
  color: #4F6248;
  flex-shrink: 0;
}

/* ---- Featured card · the Reset Method program ---- */
.pkg-card--featured {
  background:
    linear-gradient(180deg, rgba(236, 211, 198, 0.35) 0%, var(--warm-white) 45%);
  border-color: rgba(193, 139, 114, 0.4);
  box-shadow: inset 0 3px 0 0 var(--clay-deep);
}
.pkg-card--featured:hover {
  border-color: var(--clay);
  box-shadow:
    0 32px 70px -34px rgba(162, 111, 88, 0.55),
    inset 0 3px 0 0 var(--clay-deep);
}
.pkg-card--featured .pkg-num { color: var(--clay-deep); }
.pkg-card--featured .pkg-title em { color: var(--clay-deep); }

.pkg-flag {
  position: absolute;
  top: 0;
  right: 1.8rem;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.5rem 0.9rem;
  background: var(--clay-deep);
  color: var(--cream);
  font-family: var(--font-body);
  font-size: var(--step--2);
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  border-radius: 0 0 4px 4px;
}
.pkg-flag::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--blush);
}

.pkg-price--save {
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
}
.pkg-save {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.4rem 0.85rem;
  background: var(--clay-deep);
  color: var(--cream);
  font-family: var(--font-body);
  font-size: var(--step--2);
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border-radius: 999px;
  box-shadow: 0 8px 18px -10px rgba(162, 111, 88, 0.55);
}
.pkg-save::before {
  content: "";
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--blush);
  display: inline-block;
}
.pkg-price__row {
  display: inline-flex;
  align-items: baseline;
  gap: 1rem;
  flex-wrap: wrap;
}
.pkg-price__was {
  position: relative;
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.55rem, 2.4vw, 2rem);
  color: var(--taupe);
  letter-spacing: -0.01em;
  text-decoration: line-through;
  text-decoration-thickness: 2px;
  text-decoration-color: var(--clay-deep);
}
.pkg-card--featured .pkg-price__main {
  color: var(--clay-deep);
  font-weight: 400;
}

/* ---- Discovery fallback · soft, reassuring, free ---- */
.packages-discover {
  margin: 4rem auto 0;
  max-width: 44rem;
  padding: 2.4rem 2rem;
  text-align: center;
  background: rgba(244, 236, 221, 0.65);
  border: 1px dashed var(--line);
  border-radius: 6px;
  position: relative;
  z-index: 1;
}
.packages-discover__eyebrow {
  font-family: var(--font-body);
  font-size: var(--step--2);
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--taupe);
  margin-bottom: 0.8rem;
  display: block;
}
.packages-discover h3 {
  font-size: var(--step-3);
  margin-bottom: 0.8rem;
}
.packages-discover h3 em { color: var(--clay-deep); font-style: italic; }
.packages-discover p {
  max-width: 30rem;
  margin: 0 auto 1.6rem;
  font-size: var(--step-0);
  color: var(--cocoa-soft);
  line-height: 1.55;
}
.packages-discover__free {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 1.2rem;
  font-family: var(--font-body);
  font-size: var(--step--1);
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--sage);
}
.packages-discover__free::before {
  content: "";
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--sage);
  display: inline-block;
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  body { cursor: auto; }
  .cursor-dot, .cursor-halo { display: none; }
  [data-reveal] { opacity: 1; transform: none; }
  .img-reveal::after { display: none; }
  .img-reveal img, .img-reveal .img-fill { transform: none; }
  .split-word > span { transform: none; }
}

