/* ==========================================================================
   Kingdom Affluence Brand Stylesheet
   Palette and type per the Kingdom Affluence Brand Kit:
   Kingdom Green #14392B | Metallic Gold #C4A052 | Mint #A9D8BE
   Ink #111111 | White #FFFFFF | Mint Tint #EAF4EC
   Headlines: Playfair Display | Body: Montserrat
   ========================================================================== */

/* ==========================================================================
   Self-hosted webfonts.
   Fonts are served from this site rather than the Google Fonts CDN. That
   keeps visitor IP addresses from being sent to a third party on page load,
   which is a GDPR consideration for EU and UK visitors, and it makes the
   site faster and independent of an outside service.
   ========================================================================== */
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/Montserrat-400-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/Montserrat-400-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/Montserrat-500-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/Montserrat-500-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/Montserrat-600-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/Montserrat-600-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/Montserrat-700-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Montserrat";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/Montserrat-700-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Playfair Display";
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/PlayfairDisplay-500i-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Playfair Display";
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/PlayfairDisplay-500i-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Playfair Display";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/PlayfairDisplay-500-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Playfair Display";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/PlayfairDisplay-500-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Playfair Display";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/PlayfairDisplay-700-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Playfair Display";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/PlayfairDisplay-700-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Playfair Display";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url("../fonts/PlayfairDisplay-800-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Playfair Display";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url("../fonts/PlayfairDisplay-800-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Prata";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/Prata-400-latin.woff2") format("woff2");
}

/* Luminari Grandis: kept as a secondary display face.
   Single Regular weight; scripture quotes stay in Playfair for true italics. */
@font-face {
  font-family: "Luminari Grandis";
  src: url("../fonts/LuminariGrandis.woff2") format("woff2"),
       url("../fonts/LuminariGrandis.ttf") format("truetype");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

:root {
  --green: #14392B;
  --green-deep: #0E2A20;
  --gold: #C4A052;
  --gold-soft: #D4B876;
  --mint: #A8D6BE;
  --mint-tint: #EAF4EC;
  --ink: #111111;
  --white: #FFFFFF;
  --body-muted: #4A5A52;
  --light-muted: #DEE9E2;

  --font-display: "Prata", Georgia, serif;
  --font-serif: "Playfair Display", Georgia, serif;
  --font-body: "Montserrat", "Helvetica Neue", Arial, sans-serif;

  --radius: 14px;
  --radius-sm: 8px;
  --shadow: 0 18px 45px rgba(17, 17, 17, 0.10);
  --shadow-soft: 0 8px 24px rgba(20, 57, 43, 0.08);
  --maxw: 1140px;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

/* An element with the hidden attribute must stay hidden even when a later
   rule gives it a display value. This is what makes data-ka-requires work. */
[hidden] { display: none !important; }

html { scroll-behavior: smooth; }

body {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.7;
  color: var(--ink);
  background: var(--white);
  -webkit-font-smoothing: antialiased;
}

img { max-width: 100%; display: block; }

a { color: inherit; }

.container {
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 0 24px;
}

/* ---------- Type ---------- */

h1, h2, h3, .display {
  font-family: var(--font-display);
  font-weight: 700;
  font-synthesis: none;
  line-height: 1.15;
  color: var(--green);
}


h1 { font-size: clamp(2.4rem, 5.2vw, 4rem); }
h2 { font-size: clamp(1.9rem, 3.6vw, 2.7rem); }
h3 { font-size: 1.3rem; }

.on-dark h1, .on-dark h2, .on-dark h3 { color: var(--white); }

.gold { color: var(--gold); }

.eyebrow {
  display: inline-block;
  font-family: var(--font-body);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 18px;
}

.lead {
  font-size: 1.12rem;
  color: var(--body-muted);
  max-width: 640px;
}

.on-dark .lead { color: var(--light-muted); }

.section-head {
  max-width: 720px;
  margin-bottom: 56px;
}

.section-head.center { margin-left: auto; margin-right: auto; text-align: center; }
.section-head h2 { margin-bottom: 16px; }

/* ---------- Buttons ---------- */

.btn {
  display: inline-block;
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 0.95rem;
  letter-spacing: 0.02em;
  text-decoration: none;
  padding: 16px 32px;
  border-radius: 999px;
  transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
  cursor: pointer;
  border: 2px solid transparent;
  text-align: center;
}

.btn:hover { transform: translateY(-2px); box-shadow: var(--shadow-soft); }

/* Green on gold: the brand CTA pairing */
.btn-gold { background: var(--gold); color: var(--green); }
.btn-gold:hover { background: var(--gold-soft); }

.btn-green { background: var(--green); color: var(--white); }
.btn-green:hover { background: var(--green-deep); }

.btn-outline-light { border-color: rgba(255, 255, 255, 0.55); color: var(--white); background: transparent; }
.btn-outline-light:hover { border-color: var(--gold); color: var(--gold); }

.btn-outline-green { border-color: var(--green); color: var(--green); background: transparent; }
.btn-outline-green:hover { background: var(--green); color: var(--white); }

.btn-row { display: flex; flex-wrap: wrap; gap: 16px; }

/* ---------- Header / Nav ---------- */

.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--green);
  border-bottom: 1px solid rgba(196, 160, 82, 0.25);
}

.nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 18px 24px;
  max-width: var(--maxw);
  margin: 0 auto;
}

.brand { text-decoration: none; line-height: 1.1; }

.brand .wordmark {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.35rem;
  color: var(--white);
  display: block;
}

.brand .wordmark .gold { color: var(--gold); }

.brand .tagline {
  display: block;
  font-family: var(--font-body);
  font-size: 0.58rem;
  font-weight: 600;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  color: var(--mint);
  margin-top: 3px;
}

.nav-links {
  display: flex;
  align-items: center;
  gap: 28px;
  list-style: none;
}

.nav-links a {
  text-decoration: none;
  color: var(--white);
  font-size: 0.88rem;
  font-weight: 600;
}

.nav-links a:hover { color: var(--gold); }

.nav-links .btn { padding: 11px 22px; font-size: 0.83rem; }

.nav-toggle {
  display: none;
  background: none;
  border: none;
  cursor: pointer;
  width: 40px;
  height: 40px;
  position: relative;
}

.nav-toggle span, .nav-toggle span::before, .nav-toggle span::after {
  content: "";
  position: absolute;
  left: 8px;
  width: 24px;
  height: 2px;
  background: var(--white);
  transition: transform 0.2s ease;
}

.nav-toggle span { top: 19px; }
.nav-toggle span::before { top: -8px; left: 0; }
.nav-toggle span::after { top: 8px; left: 0; }

/* ---------- Sections ---------- */

section { padding: 96px 0; }

.bg-dark { background: var(--green); color: var(--white); }
.bg-deep { background: var(--green-deep); color: var(--white); }
.bg-mint { background: var(--mint-tint); }
.bg-white { background: var(--white); }

/* ---------- Hero ---------- */

.hero {
  background: linear-gradient(160deg, var(--green-deep) 0%, var(--green) 60%, #1B4A38 100%);
  color: var(--white);
  padding: 110px 0 120px;
  position: relative;
  overflow: hidden;
}

.hero::after {
  content: "";
  position: absolute;
  right: -180px;
  top: -180px;
  width: 560px;
  height: 560px;
  border-radius: 50%;
  border: 1px solid rgba(196, 160, 82, 0.35);
  pointer-events: none;
}

.hero::before {
  content: "";
  position: absolute;
  right: -80px;
  top: -80px;
  width: 560px;
  height: 560px;
  border-radius: 50%;
  border: 1px solid rgba(169, 216, 190, 0.18);
  pointer-events: none;
}

.hero .container { position: relative; z-index: 2; }

/* ---------- Interactive hero canvas ----------
   Occupies the right side of the hero so the headline never competes with the
   spheres. The mask feathers the inner edge so the field dissolves into the
   gradient instead of ending on a hard line. Fades in once initialized, so
   there is no flash of an empty canvas. */
.hero-canvas {
  position: absolute;
  top: 0;
  right: 0;
  width: 62%;
  /* A canvas is a replaced element, so top plus bottom does NOT stretch it.
     Without an explicit height it falls back to its intrinsic 2:1 ratio and
     ends partway down the hero, cutting the scene off on a hard line. */
  height: 100%;
  z-index: 1;
  opacity: 0;
  transition: opacity 1.1s ease;
  pointer-events: none;
  -webkit-mask-image: linear-gradient(to right, transparent 0%, rgba(0,0,0,0.55) 18%, #000 42%);
  mask-image: linear-gradient(to right, transparent 0%, rgba(0,0,0,0.55) 18%, #000 42%);
}

.hero-canvas.ready { opacity: 1; }

@media (max-width: 900px) {
  /* The effect never loads at this width, so the element is removed outright. */
  .hero-canvas { display: none; }
}


.hero h1 { color: var(--white); margin-bottom: 24px; }

.hero .lead { margin-bottom: 36px; color: rgba(255, 255, 255, 0.94); }

.hero-verse {
  margin-top: 48px;
  padding-top: 28px;
  border-top: 1px solid rgba(196, 160, 82, 0.35);
  max-width: 640px;
}

.hero-verse p {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.05rem;
  color: var(--mint);
}

.hero-verse cite {
  display: block;
  font-family: var(--font-body);
  font-style: normal;
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
  margin-top: 8px;
}

/* ---------- Strip ---------- */

.strip {
  background: var(--green-deep);
  padding: 22px 0;
  border-top: 1px solid rgba(196, 160, 82, 0.2);
}

.strip .container {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 14px 44px;
}

.strip span {
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gold);
}

/* ---------- Cards ---------- */

.grid { display: grid; gap: 28px; }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-2 { grid-template-columns: repeat(2, 1fr); }

.card {
  background: var(--white);
  border-radius: var(--radius);
  padding: 40px 32px;
  box-shadow: var(--shadow-soft);
  border: 1px solid rgba(20, 57, 43, 0.06);
}

.card h3 { margin: 18px 0 12px; }

/* Program card titles stay on one line */
#programs .card h3 { font-size: 1.16rem; white-space: nowrap; }

.card p { color: var(--body-muted); font-size: 0.98rem; }

.card .num {
  font-family: var(--font-display);
  font-size: 1rem;
  font-weight: 700;
  color: var(--green);
  background: var(--mint);
  width: 44px;
  height: 44px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.card-dark {
  background: var(--green);
  border: 1px solid rgba(196, 160, 82, 0.3);
}

.card-dark h3 { color: var(--gold); }
.card-dark p { color: var(--light-muted); }

.card-tag {
  display: inline-block;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--green);
  background: var(--mint);
  padding: 5px 12px;
  border-radius: 999px;
  margin-bottom: 14px;
}

.card-tag.gold-tag { background: var(--gold); }

.card-link {
  display: inline-block;
  margin-top: 18px;
  font-weight: 700;
  font-size: 0.9rem;
  color: var(--green);
  text-decoration: none;
  border-bottom: 2px solid var(--gold);
  padding-bottom: 2px;
}

.card-dark .card-link { color: var(--gold); }

/* ---------- Shop ---------- */

/* Grid stays centered and keeps a sane card width even with one product,
   so the shop never looks broken while the catalog is small. */
.product-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(270px, 330px));
  justify-content: center;
  gap: 30px;
}

.product-card {
  background: var(--white);
  border-radius: var(--radius);
  border: 1px solid rgba(20, 57, 43, 0.08);
  box-shadow: var(--shadow-soft);
  padding: 22px;
  display: flex;
  flex-direction: column;
  /* Reserves space while Lulu's widget loads, so the card never
     collapses into an empty sliver on a slow connection. */
  min-height: 340px;
}

/* Let Lulu's embedded widget fill the card it sits in. */
.product-card lulu-buy-button {
  display: block;
  width: 100%;
}

.product-card img { border-radius: 6px; }

.product-note {
  font-size: 0.92rem;
  color: var(--body-muted);
  margin-top: 16px;
}

.soon-card {
  background: transparent;
  border: 1px dashed var(--mint);
  box-shadow: none;
  text-align: center;
  justify-content: center;
  min-height: 200px;
  padding: 34px 24px;
}

.soon-card h3 { margin-bottom: 8px; }
.soon-card p { color: var(--body-muted); font-size: 0.92rem; }

.soon-tag {
  display: inline-block;
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 12px;
}

/* ---------- Testimonials ---------- */

.tcard { padding: 0; overflow: hidden; display: flex; flex-direction: column; }

.tcard-head {
  display: flex;
  align-items: center;
  gap: 16px;
  background: var(--mint-tint);
  padding: 22px 28px;
}

.tcard-head h3 { margin: 0; font-size: 1.05rem; }

.tcard-head .role { font-size: 0.85rem; color: var(--body-muted); }

.avatar {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: var(--green);
  color: var(--gold);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.1rem;
  flex-shrink: 0;
}

.avatar img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }

.tcard-body { padding: 24px 28px 30px; }

/* Founder feature (About page) */
.founder-grid {
  display: grid;
  grid-template-columns: 1fr 1.35fr;
  gap: 64px;
  align-items: center;
}

.founder-photo img {
  width: 100%;
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  border-bottom: 5px solid var(--gold);
}

.founder-title {
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gold);
  margin: 10px 0 18px;
}

.founder-bio { color: var(--body-muted); margin-bottom: 8px; }

.cred-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 4px 28px;
}

@media (max-width: 860px) {
  .founder-grid { grid-template-columns: 1fr; gap: 36px; }
  .founder-photo { max-width: 420px; }
  .cred-grid { grid-template-columns: 1fr; }
}

/* Credentials list (About page founder card) */
.cred-list { list-style: none; margin-top: 20px; }

.cred-list li {
  position: relative;
  padding-left: 28px;
  margin-bottom: 12px;
  color: var(--body-muted);
  font-size: 0.95rem;
}

.cred-list li::before {
  content: "\2726";
  position: absolute;
  left: 0;
  top: 0;
  color: var(--gold);
  font-size: 1rem;
}

.stars { display: flex; gap: 3px; margin-bottom: 16px; }

.stars svg { width: 18px; height: 16px; fill: var(--gold); }

.tquote { color: var(--body-muted); font-size: 0.95rem; }

/* ---------- Scripture block ---------- */

.scripture {
  text-align: center;
  max-width: 760px;
  margin: 0 auto;
}

.scripture blockquote p {
  font-family: var(--font-serif);
  font-size: clamp(1.35rem, 2.6vw, 1.9rem);
  font-style: italic;
  line-height: 1.5;
  color: var(--gold);
}

.scripture cite {
  display: block;
  margin-top: 22px;
  font-family: var(--font-body);
  font-style: normal;
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--mint);
}

/* ---------- POWER framework ---------- */

.power-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 20px; }

.power-item {
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(196, 160, 82, 0.3);
  border-radius: var(--radius);
  padding: 30px 22px;
  text-align: center;
}

.power-item .letter {
  font-family: var(--font-display);
  font-size: 2.4rem;
  font-weight: 700;
  color: var(--gold);
  display: block;
  margin-bottom: 8px;
}

.power-item h3 { color: var(--white); font-size: 1.05rem; margin-bottom: 8px; }

.power-item p { font-size: 0.85rem; color: var(--light-muted); }

/* ---------- Steps ---------- */

.steps { counter-reset: step; }

/* ---------- Opt-in / GHL embeds ---------- */

.optin-panel {
  background: var(--green);
  border-radius: var(--radius);
  padding: 64px 56px;
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 48px;
  align-items: center;
  box-shadow: var(--shadow);
}

.optin-panel h2 { color: var(--white); margin-bottom: 14px; }
.optin-panel p { color: var(--light-muted); }

.ghl-embed { min-height: 120px; }

.ghl-embed iframe {
  width: 100%;
  border: none;
  border-radius: var(--radius-sm);
  min-height: 380px;
}

.ghl-placeholder {
  background: var(--mint-tint);
  border: 2px dashed var(--mint);
  border-radius: var(--radius-sm);
  padding: 36px 28px;
  text-align: center;
  color: var(--green);
  font-size: 0.9rem;
}

.ghl-placeholder strong { display: block; font-size: 1rem; margin-bottom: 6px; }

.ghl-placeholder code {
  display: inline-block;
  background: var(--white);
  border-radius: 6px;
  padding: 2px 8px;
  font-size: 0.8rem;
  margin-top: 8px;
}

/* ---------- FAQ ---------- */

.faq-list { max-width: 800px; margin: 0 auto; }

.faq-item {
  border-bottom: 1px solid rgba(20, 57, 43, 0.15);
}

.faq-item summary {
  list-style: none;
  cursor: pointer;
  padding: 24px 40px 24px 0;
  font-family: var(--font-display);
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--green);
  position: relative;
}

.faq-item summary::-webkit-details-marker { display: none; }

.faq-item summary::after {
  content: "+";
  position: absolute;
  right: 4px;
  top: 50%;
  transform: translateY(-50%);
  font-family: var(--font-body);
  font-size: 1.5rem;
  font-weight: 400;
  color: var(--gold);
  transition: transform 0.2s ease;
}

.faq-item[open] summary::after { content: "\2212"; }

.faq-item .faq-body { padding: 0 0 26px; color: var(--body-muted); max-width: 700px; }

/* ---------- Final CTA ---------- */

.final-cta { text-align: center; }

.final-cta h2 { color: var(--white); max-width: 720px; margin: 0 auto 18px; }

.final-cta .lead { margin: 0 auto 36px; }

.final-cta .btn-row { justify-content: center; }

/* ---------- Footer ---------- */

.site-footer {
  background: var(--green-deep);
  color: var(--light-muted);
  padding: 72px 0 36px;
  font-size: 0.9rem;
}

.footer-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr;
  gap: 40px;
  margin-bottom: 48px;
}

/* Five columns need room. Below a wide desktop they go to three, and the
   existing rule at 720px takes them to one. */
@media (max-width: 1100px) {
  .footer-grid { grid-template-columns: 1fr 1fr 1fr; gap: 32px 28px; }
}

.site-footer h4 {
  font-family: var(--font-body);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 18px;
}

.site-footer ul { list-style: none; }

.site-footer li { margin-bottom: 10px; }

.site-footer a { color: var(--light-muted); text-decoration: none; }

.site-footer a:hover { color: var(--gold); }

.footer-verse {
  font-family: var(--font-serif);
  font-style: italic;
  color: var(--mint);
  margin: 16px 0;
  max-width: 340px;
}

.footer-legal {
  border-top: 1px solid rgba(196, 160, 82, 0.2);
  padding-top: 24px;
  margin-bottom: 22px;
  display: flex;
  flex-wrap: wrap;
  gap: 10px 26px;
  font-size: 0.82rem;
}

.footer-legal a { text-decoration: none; }
.footer-legal a:hover { color: var(--gold); text-decoration: underline; }

.footer-fine {
  border-top: 1px solid rgba(196, 160, 82, 0.2);
  padding-top: 22px;
  margin-bottom: 22px;
  font-size: 0.76rem;
  line-height: 1.7;
  color: #B8C7BE;
  max-width: 820px;
}

.footer-fine p { margin-bottom: 6px; }

.footer-bottom {
  border-top: 1px solid rgba(196, 160, 82, 0.2);
  padding-top: 28px;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 12px;
  font-size: 0.8rem;
}

/* Legal pages use a slimmer footer that already carries its own links. */
.site-footer .footer-bottom a { color: var(--light-muted); text-decoration: none; }
.site-footer .footer-bottom a:hover { color: var(--gold); }

/* ---------- Legal pages ---------- */

.legal {
  max-width: 780px;
  margin: 0 auto;
}

.legal .updated {
  font-size: 0.85rem;
  color: var(--body-muted);
  padding-bottom: 22px;
  border-bottom: 1px solid rgba(20, 57, 43, 0.15);
  margin-bottom: 34px;
}

.legal h2 {
  font-size: 1.5rem;
  margin: 40px 0 14px;
}

.legal h3 {
  font-size: 1.1rem;
  margin: 26px 0 10px;
}

.legal p, .legal li { color: var(--body-muted); margin-bottom: 14px; }

.legal ul, .legal ol { margin: 0 0 18px 22px; }

.legal li { margin-bottom: 8px; }

.legal a { color: var(--green); font-weight: 600; }

.legal table {
  width: 100%;
  border-collapse: collapse;
  margin: 8px 0 24px;
  font-size: 0.9rem;
}

.legal th {
  text-align: left;
  background: var(--green);
  color: var(--white);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 11px 14px;
}

.legal td {
  padding: 11px 14px;
  border-bottom: 1px solid #DDE7E0;
  color: var(--body-muted);
  vertical-align: top;
}

.legal-note {
  background: var(--mint-tint);
  border-left: 3px solid var(--gold);
  padding: 18px 22px;
  margin: 26px 0;
  border-radius: 0 6px 6px 0;
}

.legal-note p { margin-bottom: 0; }

.legal-toc {
  background: var(--mint-tint);
  border-radius: var(--radius);
  padding: 26px 30px;
  margin-bottom: 40px;
}

.legal-toc h2 { margin: 0 0 12px; font-size: 1.05rem; }
.legal-toc ol { margin-bottom: 0; }
.legal-toc a { text-decoration: none; }
.legal-toc a:hover { text-decoration: underline; }

/* ---------- Cookie consent ---------- */

.ka-consent {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 9999;
  background: var(--green);
  color: var(--white);
  border-top: 3px solid var(--gold);
  box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.22);
  font-family: var(--font-body);
  animation: kaConsentUp 0.28s ease;
}

@keyframes kaConsentUp {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  .ka-consent { animation: none; }
}

.ka-consent-inner {
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 24px;
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 20px 36px;
  align-items: center;
}

.ka-consent-copy h2 {
  font-family: var(--font-display);
  font-size: 1.2rem;
  color: var(--white);
  margin-bottom: 6px;
}

.ka-consent-copy p {
  font-size: 0.88rem;
  line-height: 1.6;
  color: var(--light-muted);
  max-width: 640px;
  margin: 0;
}

.ka-consent-copy a { color: var(--gold); }

.ka-consent-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
}

/* Accept and Reject are deliberately identical in size and weight.
   Making rejection harder than acceptance is a dark pattern and is
   specifically called out by EU regulators. */
.ka-btn {
  font-family: var(--font-body);
  font-size: 0.88rem;
  font-weight: 700;
  padding: 13px 26px;
  border-radius: 999px;
  border: 2px solid transparent;
  cursor: pointer;
  white-space: nowrap;
}

.ka-btn-gold { background: var(--gold); color: var(--green); }
.ka-btn-gold:hover { background: var(--gold-soft); }

.ka-btn-line { background: transparent; color: var(--white); border-color: rgba(255, 255, 255, 0.6); }
.ka-btn-line:hover { border-color: var(--gold); color: var(--gold); }

.ka-link {
  background: none;
  border: none;
  color: var(--mint);
  font-family: var(--font-body);
  font-size: 0.85rem;
  font-weight: 600;
  text-decoration: underline;
  cursor: pointer;
  padding: 6px 2px;
}

.ka-link:hover { color: var(--gold); }

/* display:grid below would otherwise beat the browser's [hidden] rule,
   leaving the preferences panel open on first load. */
.ka-consent-prefs[hidden] { display: none; }

.ka-consent-prefs {
  grid-column: 1 / -1;
  border-top: 1px solid rgba(196, 160, 82, 0.35);
  padding-top: 20px;
  display: grid;
  gap: 14px;
}

.ka-pref {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  cursor: pointer;
  font-size: 0.85rem;
  line-height: 1.55;
  color: var(--light-muted);
  max-width: 760px;
}

.ka-pref input { margin-top: 3px; width: 17px; height: 17px; accent-color: var(--gold); flex-shrink: 0; }

.ka-pref strong { display: block; color: var(--white); font-size: 0.9rem; margin-bottom: 2px; }

.ka-pref-locked { opacity: 0.85; cursor: default; }

.ka-consent-prefs .ka-btn { justify-self: start; margin-top: 4px; }

@media (max-width: 800px) {
  .ka-consent-inner { grid-template-columns: 1fr; padding: 20px; }
  .ka-consent { max-height: 85vh; overflow-y: auto; }
  .ka-btn { flex: 1 1 auto; text-align: center; }
}

/* Prose blocks in the new sections need paragraph rhythm. */
.session-grid p, .about-grid p { margin-bottom: 16px; }
.session-grid p:last-child, .about-grid p:last-child { margin-bottom: 0; }

/* ---------- Waitlist ---------- */

.waitlist-panel { max-width: 760px; }

.waitlist-points {
  list-style: none;
  margin: 26px 0 32px;
  display: grid;
  gap: 14px;
}

.waitlist-points li {
  position: relative;
  padding-left: 28px;
  color: var(--light-muted);
}

.waitlist-points li::before {
  content: "\2726";
  position: absolute;
  left: 0;
  top: 0;
  color: var(--gold);
}

/* ---------- Session ---------- */

.session-grid {
  display: grid;
  grid-template-columns: 1.15fr 1fr;
  gap: 56px;
  align-items: start;
}

.session-examples { list-style: none; margin: 22px 0 0; display: grid; gap: 12px; }

.session-examples li {
  position: relative;
  padding-left: 26px;
  color: var(--body-muted);
}

.session-examples li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 11px;
  width: 12px;
  height: 2px;
  background: var(--gold);
}

.rate-card {
  background: var(--white);
  border: 1px solid rgba(20, 57, 43, 0.1);
  border-radius: var(--radius);
  box-shadow: var(--shadow-soft);
  padding: 34px 32px;
}

.rate-line { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; }

.rate-line + .rate-line { margin-top: 16px; padding-top: 16px; border-top: 1px solid rgba(20, 57, 43, 0.1); }

.rate-label { font-size: 0.92rem; color: var(--body-muted); }

.rate-amount {
  font-family: var(--font-display);
  font-size: 1.7rem;
  color: var(--green);
  white-space: nowrap;
}

.rate-note { display: block; font-size: 0.8rem; color: var(--body-muted); margin-top: 4px; }

.rate-card .btn { width: 100%; margin-top: 26px; }

.fine-print {
  font-size: 0.82rem;
  color: var(--body-muted);
  margin-top: 22px;
  line-height: 1.6;
}

/* ---------- About, homepage ---------- */

.about-grid {
  display: grid;
  grid-template-columns: 0.85fr 1.15fr;
  gap: 56px;
  align-items: start;
}

.about-photo img {
  width: 100%;
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  border-bottom: 5px solid var(--gold);
}

.pull-quote {
  border-left: 3px solid var(--gold);
  padding: 6px 0 6px 20px;
  margin: 28px 0;
}

.pull-quote p {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.1rem;
  color: var(--green);
  margin-bottom: 6px;
}

.pull-quote cite {
  font-style: normal;
  font-size: 0.76rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gold);
}

.about-close {
  font-family: var(--font-display);
  font-size: 1.25rem;
  color: var(--green);
  margin-top: 26px;
}

/* ---------- Community ---------- */

.community-panel { max-width: 720px; margin: 0 auto; text-align: center; }

.community-rooms {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
  margin: 32px 0;
  text-align: left;
}

.room {
  border: 1px solid rgba(196, 160, 82, 0.35);
  border-radius: var(--radius);
  padding: 24px 26px;
}

.room h3 { color: var(--gold); font-size: 1.1rem; margin-bottom: 8px; }
.room p { color: var(--light-muted); font-size: 0.92rem; margin: 0; }

/* ---------- Blog ---------- */

.blog-empty { max-width: 560px; margin: 0 auto; text-align: center; }
.blog-empty .lead { margin: 0 auto 28px; }

/* ---------- Waitlist modal ---------- */

.ka-modal {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}

.ka-modal[hidden] { display: none; }

.ka-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(14, 42, 32, 0.72);
  backdrop-filter: blur(3px);
}

.ka-modal-dialog {
  position: relative;
  background: var(--white);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  width: 100%;
  max-width: 560px;
  max-height: 90vh;
  overflow-y: auto;
  padding: 40px 34px 30px;
  border-top: 4px solid var(--gold);
}

.ka-modal-close {
  position: absolute;
  top: 12px;
  right: 16px;
  background: none;
  border: none;
  font-size: 1.9rem;
  line-height: 1;
  color: var(--body-muted);
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
}

.ka-modal-close:hover { color: var(--green); background: var(--mint-tint); }
.ka-modal-close:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }

.ka-modal-title { font-size: 1.6rem; margin-bottom: 6px; }

.ka-modal-note {
  font-size: 0.88rem;
  color: var(--body-muted);
  margin-bottom: 22px;
}

.ka-modal-pending {
  background: var(--mint-tint);
  border-left: 3px solid var(--gold);
  padding: 20px 22px;
  border-radius: 0 6px 6px 0;
  font-size: 0.9rem;
  color: var(--body-muted);
}

.ka-modal-pending strong { display: block; color: var(--green); margin-bottom: 6px; }
.ka-modal-pending code { background: var(--white); padding: 2px 6px; border-radius: 4px; }

@media (max-width: 780px) {
  .session-grid, .about-grid { grid-template-columns: 1fr; gap: 34px; }
  .community-rooms { grid-template-columns: 1fr; }
  .ka-modal-dialog { padding: 36px 22px 24px; }
}

/* ---------- Reveal animation ---------- */

.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.reveal.visible { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  html { scroll-behavior: auto; }
}

/* ---------- Responsive ---------- */

@media (max-width: 960px) {
  .grid-3, .power-grid { grid-template-columns: repeat(2, 1fr); }
  .optin-panel { grid-template-columns: 1fr; padding: 44px 32px; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 720px) {
  section { padding: 68px 0; }

  .grid-2, .grid-3, .power-grid { grid-template-columns: 1fr; }

  .footer-grid { grid-template-columns: 1fr; }
}

/* ==========================================================================
   REBUILD LAYER
   Everything below refines or replaces earlier rules. It is last in the file
   on purpose, so it wins without deleting anything above.
   ========================================================================== */

/* ---------- Wider canvas, less boxed in ---------- */

:root { --maxw: 1240px; }

section { padding: 112px 0; }
@media (max-width: 760px) { section { padding: 72px 0; } }

/* ---------- Hero: full bleed, copy flush left ---------- */

.hero { padding: 0; min-height: 88vh; display: flex; align-items: center; }
.hero-short { min-height: 56vh; }

.hero-inner {
  position: relative;
  z-index: 2;
  width: 100%;
  max-width: 760px;
  /* Flush to the left gutter rather than centred in a narrow box. */
  padding: 120px 32px 120px max(32px, calc((100vw - var(--maxw)) / 2 + 24px));
}

@media (max-width: 900px) {
  .hero-inner { padding: 96px 24px 88px; max-width: none; }
  .hero { min-height: 0; }
}

.hero h1 { font-size: clamp(2.4rem, 5.4vw, 4.2rem); line-height: 1.06; }
.hero .hero-sub { max-width: 620px; margin-top: 24px; color: rgba(255, 255, 255, 0.88); }
.hero .btn-row { margin-top: 36px; }

/* Headline animates in a word at a time. */
.hero h1 .w {
  display: inline-block;
  opacity: 0;
  transform: translateY(0.5em);
  animation: word-in 760ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

@keyframes word-in { to { opacity: 1; transform: none; } }

.hero .hero-sub, .hero .hero-cta, .hero .hero-verse {
  opacity: 0;
  animation: fade-up 820ms ease forwards;
}

.hero .hero-sub  { animation-delay: 420ms; }
.hero .hero-cta  { animation-delay: 580ms; }
.hero .hero-verse { animation-delay: 740ms; }

@keyframes fade-up {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: none; }
}

/* ---------- Audience marquee ---------- */

.marquee {
  background: var(--green-deep);
  border-top: 1px solid rgba(196, 160, 82, 0.22);
  border-bottom: 1px solid rgba(196, 160, 82, 0.22);
  padding: 20px 0;
  overflow: hidden;
}

.marquee-track {
  display: flex;
  width: max-content;
  animation: marquee 34s linear infinite;
  will-change: transform;
}

.marquee:hover .marquee-track { animation-play-state: paused; }

@keyframes marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

.marquee-set { display: flex; align-items: center; }

.marquee-set span {
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--gold);
  padding: 0 34px;
  white-space: nowrap;
}

.marquee-set i { color: rgba(196, 160, 82, 0.5); font-style: normal; }

/* ---------- Split layouts ---------- */

.split { display: grid; gap: 40px; align-items: center; }
.split-stretch { align-items: stretch; }
.split-start { align-items: start; }

@media (min-width: 880px) {
  .split { grid-template-columns: 1fr 1fr; gap: 72px; }
  .split.flip > :first-child { order: 2; }
}

.col-center { text-align: center; display: flex; flex-direction: column; justify-content: center; }
.col-center .lead { margin-inline: auto; }
.btn-row.center { justify-content: center; }

/* ---------- Photos ---------- */

.photo {
  position: relative;
  overflow: hidden;
  border-radius: 10px;
  background: rgba(20, 57, 43, 0.08);
  margin: 0;
  box-shadow: var(--shadow);
}

.photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 1s cubic-bezier(0.16, 1, 0.3, 1);
}

.photo:hover img { transform: scale(1.05); }
.photo.wide { aspect-ratio: 16 / 10; }
.photo.tall { aspect-ratio: 4 / 5; }

@media (min-width: 880px) {
  .split-stretch .photo { aspect-ratio: auto; align-self: stretch; }
  .split-stretch .photo img { position: absolute; inset: 0; }
}

/* ---------- Full width photo band ---------- */

.band { padding: 0; }

.band-img {
  height: 46vh;
  min-height: 300px;
  background-size: cover;
  /* Fixed attachment gives a parallax feel as the page scrolls past it. */
  background-position: center;
  background-attachment: fixed;
}

/* Fixed backgrounds are unreliable on touch devices, so fall back. */
@media (hover: none), (max-width: 760px) {
  .band-img { background-attachment: scroll; height: 34vh; min-height: 220px; }
}

/* ---------- Stacked list, replaces boxed cards ---------- */

.stack { list-style: none; margin: 36px 0 0; padding: 0; counter-reset: stack; }

.stack li {
  border-top: 1px solid rgba(20, 57, 43, 0.14);
  padding: 26px 0;
}

.stack li:last-child { border-bottom: 1px solid rgba(20, 57, 43, 0.14); }
.stack h3 { font-size: 1.22rem; margin-bottom: 8px; }
.stack p { color: var(--body-muted); font-size: 0.97rem; margin: 0; }

.stack-tag {
  display: block;
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 10px;
}

.on-dark .stack li { border-color: rgba(255, 255, 255, 0.16); }
.on-dark .stack p { color: var(--light-muted); }

/* ---------- Offers ---------- */

.offer-grid { display: grid; gap: 28px; }
@media (min-width: 720px)  { .offer-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1100px) { .offer-grid { grid-template-columns: repeat(4, 1fr); } }

.offer {
  background: var(--white);
  border-radius: 12px;
  border: 1px solid rgba(20, 57, 43, 0.08);
  border-top: 3px solid var(--gold);
  padding: 34px 28px 30px;
  display: flex;
  flex-direction: column;
  box-shadow: var(--shadow-soft);
  transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 240ms ease;
}

.offer:hover { transform: translateY(-6px); box-shadow: var(--shadow); }

.offer-tag {
  display: inline-block;
  align-self: flex-start;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 14px;
}

.offer-tag.open { color: var(--green); }

.offer h3 { font-size: 1.24rem; line-height: 1.25; margin-bottom: 12px; }
.offer > p { color: var(--body-muted); font-size: 0.94rem; }

.offer-points { list-style: none; margin: 20px 0 26px; padding: 0; }

.offer-points li {
  position: relative;
  padding: 9px 0 9px 22px;
  font-size: 0.88rem;
  color: var(--ink);
  border-top: 1px solid rgba(20, 57, 43, 0.08);
}

.offer-points li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 17px;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--gold);
}

/* Pushes the button to the bottom so every card's button lines up. */
.offer .btn-block { margin-top: auto; }
.btn-block { display: block; width: 100%; text-align: center; }

/* ---------- The store shelf ---------- */

.shelf-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  margin-bottom: 40px;
}

.shelf-nav { display: flex; gap: 10px; }

.shelf-btn {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  border: 1px solid rgba(20, 57, 43, 0.22);
  background: transparent;
  color: var(--green);
  font-size: 1.1rem;
  cursor: pointer;
  transition: background 180ms ease, color 180ms ease, border-color 180ms ease;
}

.shelf-btn:hover { background: var(--green); color: var(--white); border-color: var(--green); }

.shelf {
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  /* Hide the scrollbar but keep the scrolling. */
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}

.shelf::-webkit-scrollbar { display: none; }

.shelf-track {
  display: flex;
  gap: 28px;
  width: max-content;
  padding: 4px max(24px, calc((100vw - var(--maxw)) / 2 + 24px)) 8px;
}

.shelf-item { flex: 0 0 300px; scroll-snap-align: start; }
@media (max-width: 480px) { .shelf-item { flex-basis: 250px; } }

.shelf-img {
  aspect-ratio: 4 / 3;
  border-radius: 10px;
  overflow: hidden;
  margin-bottom: 18px;
  background: var(--mint-tint);
  box-shadow: var(--shadow-soft);
}

.shelf-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 900ms cubic-bezier(0.16, 1, 0.3, 1);
}

.shelf-item:hover .shelf-img img { transform: scale(1.06); }
.shelf-item h3 { font-size: 1.1rem; margin-bottom: 8px; }
.shelf-item p { font-size: 0.9rem; color: var(--body-muted); }

.shelf-soon {
  display: inline-block;
  margin-top: 12px;
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
}

/* ---------- Steps ---------- */

.steps-row { display: grid; gap: 40px; }
@media (min-width: 820px) { .steps-row { grid-template-columns: repeat(3, 1fr); gap: 56px; } }

.step { border-top: 2px solid var(--gold); padding-top: 24px; }
.step h3 { font-size: 1.15rem; margin: 10px 0 10px; }
.step p { color: var(--body-muted); font-size: 0.95rem; }

.step-num {
  font-family: var(--font-display);
  font-size: 2.2rem;
  color: var(--gold);
  line-height: 1;
}

/* ---------- FAQ, hairlines instead of boxes ---------- */

.faq-grid { display: grid; gap: 44px; align-items: start; }
@media (min-width: 900px) { .faq-grid { grid-template-columns: 0.85fr 1.15fr; gap: 72px; } }

.faq-aside p { color: var(--body-muted); margin-bottom: 28px; }
.faq-aside .photo { margin-bottom: 28px; }

.faq-list { max-width: none; }

.faq-item {
  border: 0;
  border-top: 1px solid rgba(20, 57, 43, 0.14);
  border-radius: 0;
  background: transparent;
  padding: 0;
  margin: 0;
}

.faq-item:last-child { border-bottom: 1px solid rgba(20, 57, 43, 0.14); }

.faq-item summary {
  list-style: none;
  cursor: pointer;
  position: relative;
  padding: 24px 46px 24px 0;
  font-family: var(--font-display);
  font-size: 1.12rem;
  color: var(--green);
  background: transparent;
}

.faq-item summary::-webkit-details-marker { display: none; }

.faq-item summary::after {
  content: "+";
  position: absolute;
  right: 4px;
  top: 50%;
  transform: translateY(-50%);
  font-family: var(--font-body);
  font-weight: 400;
  font-size: 1.6rem;
  color: var(--gold);
  transition: transform 260ms ease;
}

.faq-item[open] summary::after { transform: translateY(-50%) rotate(45deg); }

.faq-item .faq-body {
  padding: 0 46px 26px 0;
  color: var(--body-muted);
  font-size: 0.97rem;
  animation: fade-up 380ms ease;
}

/* ---------- Plain cards, no shadow box ---------- */

.card.plain {
  background: transparent;
  border: 0;
  border-top: 2px solid var(--gold);
  border-radius: 0;
  box-shadow: none;
  padding: 24px 0 0;
}

/* ---------- Reviews ---------- */

.reviews-row {
  margin-top: 8px;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(to right, transparent, black 7%, black 93%, transparent);
          mask-image: linear-gradient(to right, transparent, black 7%, black 93%, transparent);
}

.reviews-track {
  display: flex;
  gap: 24px;
  width: max-content;
  animation: marquee 64s linear infinite;
  will-change: transform;
}

.reviews-row:hover .reviews-track { animation-play-state: paused; }

.review {
  flex: 0 0 22rem;
  margin: 0;
  background: var(--white);
  border: 1px solid rgba(20, 57, 43, 0.10);
  border-radius: 20px;
  padding: 32px 28px;
  box-shadow: var(--shadow-soft);
  font-size: 0.94rem;
  line-height: 1.65;
  color: var(--ink);
  transition: transform 200ms ease, box-shadow 200ms ease;
}

.review:hover { transform: translateY(-4px); box-shadow: var(--shadow); }
.review blockquote { margin: 0; }

.review .stars {
  display: block;
  color: var(--gold);
  letter-spacing: 0.12em;
  font-size: 0.85rem;
  margin-bottom: 12px;
}

.review .who { display: flex; align-items: center; gap: 12px; margin-top: 20px; }

.review .avatar {
  width: 40px;
  height: 40px;
  min-width: 40px;
  border-radius: 50%;
  background: var(--green);
  color: var(--gold);
  font-family: var(--font-display);
  font-size: 1.05rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.review .who strong { display: block; color: var(--green); font-weight: 600; font-size: 0.94rem; line-height: 1.25; }
.review .who .role { display: block; color: var(--body-muted); font-size: 0.84rem; line-height: 1.25; }

@media (max-width: 480px) { .review { flex-basis: 18rem; } }

/* ---------- A form whose id is not filled in yet ---------- */

.form-pending {
  border: 1px dashed rgba(196, 160, 82, 0.6);
  border-radius: 10px;
  padding: 28px 24px;
  color: var(--body-muted);
  font-size: 0.94rem;
  background: rgba(196, 160, 82, 0.06);
}

/* ---------- Scroll reveals, with direction ---------- */

.reveal { opacity: 0; transform: translateY(28px); transition: opacity 0.7s ease, transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); }
.reveal-left  { transform: translateX(-36px); }
.reveal-right { transform: translateX(36px); }
.reveal.visible { opacity: 1; transform: none; }

/* Children of a revealed group come in one after another. */
.offer-grid > .reveal:nth-child(2)  { transition-delay: 90ms; }
.offer-grid > .reveal:nth-child(3)  { transition-delay: 180ms; }
.offer-grid > .reveal:nth-child(4)  { transition-delay: 270ms; }
.power-grid > .reveal:nth-child(2)  { transition-delay: 80ms; }
.power-grid > .reveal:nth-child(3)  { transition-delay: 160ms; }
.power-grid > .reveal:nth-child(4)  { transition-delay: 240ms; }
.power-grid > .reveal:nth-child(5)  { transition-delay: 320ms; }
.steps-row  > .reveal:nth-child(2)  { transition-delay: 110ms; }
.steps-row  > .reveal:nth-child(3)  { transition-delay: 220ms; }
.stack      > .reveal:nth-child(2)  { transition-delay: 90ms; }
.stack      > .reveal:nth-child(3)  { transition-delay: 180ms; }
.grid       > .reveal:nth-child(2)  { transition-delay: 80ms; }
.grid       > .reveal:nth-child(3)  { transition-delay: 160ms; }
.grid       > .reveal:nth-child(4)  { transition-delay: 240ms; }
.grid       > .reveal:nth-child(5)  { transition-delay: 320ms; }
.grid       > .reveal:nth-child(6)  { transition-delay: 400ms; }

/* Power items lift on hover. */
.power-item { transition: transform 240ms ease, background 240ms ease; }
.power-item:hover { transform: translateY(-5px); background: rgba(255, 255, 255, 0.08); }

/* Buttons lift too. */
.btn { transition: transform 180ms ease, box-shadow 180ms ease, background 180ms ease, color 180ms ease, border-color 180ms ease; }
.btn:hover { transform: translateY(-2px); box-shadow: 0 12px 26px rgba(0, 0, 0, 0.18); }

/* ---------- Anyone who asked their system for less motion gets none ---------- */

@media (prefers-reduced-motion: reduce) {
  .hero h1 .w,
  .hero .hero-sub,
  .hero .hero-cta,
  .hero .hero-verse { animation: none; opacity: 1; transform: none; }

  .marquee-track,
  .reviews-track { animation: none; }

  .reviews-track { flex-wrap: wrap; width: auto; justify-content: center; }
  .reviews-row { -webkit-mask-image: none; mask-image: none; }
  .review.is-clone { display: none; }

  .marquee { overflow-x: auto; }
  .reveal { opacity: 1; transform: none; transition: none; }
  .photo img, .shelf-img img, .btn, .offer, .power-item { transition: none; }
  .photo:hover img, .shelf-item:hover .shelf-img img { transform: none; }
  .btn:hover, .offer:hover, .power-item:hover { transform: none; }
  .band-img { background-attachment: scroll; }
  .faq-item .faq-body { animation: none; }
}

.shelf-btn:disabled { opacity: 0.32; cursor: default; }
.shelf-btn:disabled:hover { background: transparent; color: var(--green); border-color: rgba(20, 57, 43, 0.22); transform: none; }

/* ---------- Full width photo band ----------
   A plain image rather than a fixed background. background-attachment: fixed
   is unreliable on mobile and expensive to paint, and it does not survive a
   full page screenshot either. */

.band { padding: 0; line-height: 0; }

.band img {
  display: block;
  width: 100%;
  height: 46vh;
  min-height: 300px;
  max-height: 520px;
  object-fit: cover;
  object-position: center;
}

@media (max-width: 760px) { .band img { height: 34vh; min-height: 220px; } }

/* ---------- Product tile placeholder ----------
   Stands in until there is real product photography. To use a real photo,
   replace the whole <div class="shelf-img shelf-placeholder">...</div> with:
   <div class="shelf-img"><img src="assets/img/your-product.jpg" alt="..."></div> */

.shelf-placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: linear-gradient(150deg, var(--green-deep) 0%, var(--green) 70%, #1B4A38 100%);
  position: relative;
}

.shelf-placeholder::before {
  content: "";
  position: absolute;
  inset: 12px;
  border: 1px solid rgba(196, 160, 82, 0.4);
  border-radius: 6px;
}

.shelf-placeholder span {
  position: relative;
  font-family: var(--font-display);
  font-size: 1.35rem;
  line-height: 1.25;
  color: var(--gold);
  padding: 0 18px;
}

/* ---------- Nav: fits on one line now that there are more items ---------- */

.nav-links { gap: 20px; }
.nav-links > li > a:not(.btn) { font-size: 0.86rem; white-space: nowrap; }
.nav-links .btn { padding: 11px 18px; font-size: 0.82rem; white-space: nowrap; }

@media (max-width: 1240px) and (min-width: 1080px) {
  .nav-links { gap: 14px; }
  .nav-links > li > a:not(.btn) { font-size: 0.8rem; }
  .nav-links .btn { padding: 10px 14px; font-size: 0.78rem; }
}

/* The menu bar carries eight items now, and even squeezed it needs a little
   over 1000px to sit on one line. Below that it becomes the drop-down menu.
   This used to switch at 720px, which left every width from a tablet up to a
   small laptop showing a desktop nav that ran off the side of the screen and
   dragged a horizontal scrollbar onto every page. */
@media (max-width: 1079px) {
  .nav-toggle { display: block; }

  .nav-links {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    background: var(--green-deep);
    flex-direction: column;
    align-items: flex-start;
    padding: 24px;
    gap: 18px;
    border-bottom: 1px solid rgba(196, 160, 82, 0.25);
  }

  .nav-links.open { display: flex; }
}

/* ---------- Empty photo slot ----------
   Holds the space a photo will fill, so the layout is correct before the
   photo exists. To use a real photo, replace the whole
   <div class="photo ... photo-slot">...</div> with:
   <figure class="photo wide"><img src="assets/img/your-photo.jpg" alt="..."></figure>
   Keep the size class (wide or tall) so the shape stays the same. */

.photo-slot {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: linear-gradient(150deg, var(--green-deep) 0%, var(--green) 70%, #1B4A38 100%);
  box-shadow: var(--shadow-soft);
}

.photo-slot::before {
  content: "";
  position: absolute;
  inset: 14px;
  border: 1px solid rgba(196, 160, 82, 0.35);
  border-radius: 6px;
}

.photo-slot > span {
  position: relative;
  font-family: var(--font-display);
  font-size: 1.15rem;
  color: var(--gold);
  padding: 0 20px;
}

.photo-slot small {
  display: block;
  margin-top: 8px;
  font-family: var(--font-body);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.55);
}

/* ==========================================================================
   PRICING TIERS
   ========================================================================== */

.pricing-grid { display: grid; gap: 24px; }

@media (min-width: 1000px) {
  .pricing-grid { grid-template-columns: repeat(3, 1fr); gap: 32px; align-items: stretch; }
}

.tier {
  display: flex;
  flex-direction: column;
  background: var(--white);
  border: 1px solid rgba(20, 57, 43, 0.12);
  border-radius: 14px;
  padding: 32px 30px;
  transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 260ms ease;
}

.tier:hover { transform: translateY(-6px); box-shadow: var(--shadow); }

/* The featured card sits slightly proud of the other two. */
.tier-featured {
  border-color: var(--gold);
  box-shadow: var(--shadow);
  position: relative;
}

@media (min-width: 1000px) {
  .tier-featured { transform: translateY(-14px); }
  .tier-featured:hover { transform: translateY(-20px); }
}

.tier-head { padding-bottom: 4px; }

.tier-title {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 10px;
}

.tier-title h3 { font-size: 1.25rem; line-height: 1.25; margin: 0; }

.tier-badge {
  flex: 0 0 auto;
  font-family: var(--font-body);
  font-size: 0.64rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--green);
  border: 1px solid rgba(20, 57, 43, 0.25);
  border-radius: 999px;
  padding: 5px 12px;
  white-space: nowrap;
}

.tier-badge.solid { background: var(--gold); border-color: var(--gold); color: var(--green); }

.tier-desc { color: var(--body-muted); font-size: 0.9rem; margin: 0; }

/* Grows so every card's button lines up along the bottom. */
.tier-body { display: flex; flex-direction: column; flex: 1; padding-top: 26px; }

.tier-price { display: flex; align-items: baseline; gap: 10px; }

.tier-price .amount {
  font-family: var(--font-display);
  font-size: clamp(2.4rem, 4vw, 3rem);
  line-height: 1;
  color: var(--green);
}

.tier-price .amount-word { font-size: clamp(1.9rem, 3vw, 2.3rem); }
.tier-price .freq { font-size: 0.85rem; color: var(--body-muted); }

.tier-note {
  margin-top: 12px;
  font-size: 0.8rem;
  color: var(--body-muted);
  border-left: 2px solid var(--gold);
  padding-left: 12px;
}

.tier-note strong { color: var(--green); }

.tier-features { list-style: none; margin: 26px 0 0; padding: 0; display: flex; flex-direction: column; gap: 13px; }

.tier-features li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 0.88rem;
  color: var(--body-muted);
  line-height: 1.45;
}

.tier-features svg {
  flex: 0 0 auto;
  width: 17px;
  height: 17px;
  margin-top: 2px;
  fill: none;
  stroke: var(--gold);
  stroke-width: 2.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.tier-foot { padding-top: 28px; }

/* The arrow slides right on hover. */
.tier-foot .btn span { display: inline-block; transition: transform 180ms ease; margin-left: 4px; }
.tier-foot .btn:hover span { transform: translateX(4px); }

.pricing-grid > .reveal:nth-child(2) { transition-delay: 90ms; }
.pricing-grid > .reveal:nth-child(3) { transition-delay: 180ms; }

@media (prefers-reduced-motion: reduce) {
  .tier, .tier-foot .btn span { transition: none; }
  .tier:hover, .tier-featured, .tier-featured:hover { transform: none; }
  .tier-foot .btn:hover span { transform: none; }
}

/* ---------- Hero left column, corrected ----------
   The page sets border-box globally, so the left gutter was being subtracted
   from the column's max-width and squeezing the headline onto five lines.
   content-box makes the max-width mean the text area itself, with the gutter
   sitting outside it. */

.hero-inner {
  box-sizing: content-box;
  max-width: 880px;
  padding-top: 104px;
  padding-bottom: 104px;
}

/* A little smaller, so each written line fits on one line. */
.hero h1 { font-size: clamp(2.2rem, 4.4vw, 3.55rem); line-height: 1.16; }

.hero .hero-sub { max-width: 660px; margin-top: 28px; line-height: 1.75; }
.hero .btn-row { margin-top: 40px; }
.hero .hero-verse { margin-top: 44px; padding-top: 26px; }

@media (min-width: 1600px) {
  .hero-inner { max-width: 960px; }
  .hero h1 { font-size: 3.9rem; }
}

@media (max-width: 900px) {
  .hero-inner { box-sizing: border-box; max-width: none; padding-top: 88px; padding-bottom: 80px; }
  .hero .hero-verse { margin-top: 36px; }
}

/* Below the split breakpoint the columns stack, so a sideways reveal has
   nowhere to come from and its offset pushes the page 36px wider than the
   screen. Fall back to the vertical reveal. */
@media (max-width: 880px) {
  .reveal-left, .reveal-right { transform: translateY(28px); }
}

/* ---------- Section headings ----------
   720px was forcing "Find The Right Way To Work With Us" onto two lines with
   one word stranded. Centred heads get room to sit on one line. */

.section-head.center { max-width: 1000px; }
.section-head.center h2 { text-wrap: balance; }
.section-head.center .lead { max-width: 660px; }

/* A page with no hero puts its h1 in the first section head instead. It is
   still the page title, but it is sitting where an h2 normally sits, so it
   takes the h2's size and spacing rather than hero-sized type. */
.section-head h1 { font-size: clamp(1.9rem, 3.6vw, 2.7rem); margin-bottom: 16px; }
.section-head.center h1 { text-wrap: balance; }
.section-head.center .lead { margin-left: auto; margin-right: auto; }

@media (max-width: 720px) {
  .section-head.center { max-width: none; }
}

/* ---------- Stop sideways reveals from widening the page ----------
   A .reveal-right sits 36px to the right until it becomes visible. In a two
   column split the right column is already flush to the container edge, so
   that offset pushed the document wider than the screen and produced a
   horizontal scrollbar. Clip it at the body.

   overflow-x: clip rather than hidden, because hidden would turn the body
   into a scroll container and break sticky positioning.

   It has to go on the root as well as the body. Overflow set on the body
   alone gets propagated up to the viewport, and in that hand-off the body's
   own used value goes back to visible, so the clip never actually happened
   and the page still scrolled sideways a few pixels. Clip is safe on the
   root here because, unlike hidden, it does not create a scroll container,
   so the sticky header still sticks. */

html, body { overflow-x: hidden; overflow-x: clip; }

/* The founding rate is the headline number, so it gets the big type and the
   line directly under it names what it is. */
.tier-founding {
  margin-top: 10px;
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gold);
}

.tier-founding + .tier-note { margin-top: 10px; }

/* ---------- Portrait photo that holds its shape ----------
   2:3, the standard portrait ratio image generators produce, so a generated
   photo drops in without being cropped. */

.photo.portrait { aspect-ratio: 2 / 3; }

/* On wide screens it stays put while the column beside it scrolls, rather
   than stretching to match a much taller column. */
@media (min-width: 880px) {
  .photo-sticky { position: sticky; top: 104px; align-self: start; }
}

@media (max-width: 879px) {
  .photo.portrait { aspect-ratio: 4 / 3; }
}

/* ---------- Who We Serve: give the copy the wider column ----------
   An even split left the heading 76px short of fitting on one line. The
   photo holds its 2:3 shape either way, so the width is better spent on
   the text. A small cap on the heading keeps it on one line at the
   narrower desktop sizes too. */

@media (min-width: 880px) {
  #who .split { grid-template-columns: 0.82fr 1.18fr; }
}

#who h2 { font-size: clamp(1.7rem, 3vw, 2.7rem); }

.photo.square { aspect-ratio: 1 / 1; }
@media (max-width: 879px) { .photo.square { aspect-ratio: 4 / 3; } }
.on-dark .cred-list li { color: var(--light-muted); }
.on-dark .about-close { color: var(--gold); }

/* ---------- About Me section ---------- */

#about h2 { margin-bottom: 20px; }
#about p { margin-bottom: 18px; line-height: 1.75; }
#about .cred-list { margin-top: 30px; }
#about .about-close { margin-top: 30px; margin-bottom: 0; }

/* ---------- Arch photo ----------
   The shape used on the Beauty Academy landing page: a full半 round top and
   Beauty Academy landing page. */

.photo.arch { border-radius: 999px 999px 12px 12px; }
.photo.tall-arch { aspect-ratio: 4 / 5; }

@media (max-width: 879px) {
  .photo.tall-arch { aspect-ratio: 4 / 5; max-width: 340px; margin-inline: auto; }
}

/* ---------- A photo that runs the full height of the column beside it ----
   No aspect ratio of its own: it takes the height of the text next to it so
   the two columns finish level. */

@media (min-width: 880px) {
  .photo-fill { aspect-ratio: auto; align-self: stretch; height: 100%; }
  .photo-fill img { position: absolute; inset: 0; }
}

@media (max-width: 879px) {
  .photo-fill { aspect-ratio: 4 / 5; max-width: 360px; margin-inline: auto; }
}

/* ---------- Uniform tier cards ----------
   The three product names run to different lengths, so the title block was
   two lines in one card and three in another, which pushed the price, the
   list and the button out of line across the row. Reserving the height of
   the longest title lines all three up. */

@media (min-width: 1000px) {
  .tier-title { min-height: 82px; align-items: flex-start; }
  .tier-desc { min-height: 66px; }
  .tier-price { min-height: 58px; align-items: center; }
  .tier-founding, .tier-note { min-height: 20px; }
}

/* Four across on a wide screen, two on a laptop. */
@media (min-width: 1000px) { .store-grid { grid-template-columns: repeat(4, 1fr); gap: 24px; } }
@media (min-width: 700px) and (max-width: 999px) { .store-grid { grid-template-columns: repeat(2, 1fr); } }
.store-grid .tier { padding: 28px 24px 26px; }
.store-grid .tier h3 { font-size: 1.12rem; }
.store-grid .tier-title { min-height: 60px; }
.store-grid .tier-desc { min-height: 60px; }
.store-grid > .reveal:nth-child(4) { transition-delay: 270ms; }

/* A wide banner photo above the store grid. */
.photo.banner { aspect-ratio: 21 / 9; margin-bottom: 48px; }
@media (max-width: 760px) { .photo.banner { aspect-ratio: 16 / 9; margin-bottom: 36px; } }

/* Six store cards: three across on a wide screen, two on a laptop. */
@media (min-width: 1100px) { .store-grid { grid-template-columns: repeat(3, 1fr); gap: 28px; } }
@media (min-width: 700px) and (max-width: 1099px) { .store-grid { grid-template-columns: repeat(2, 1fr); } }
.store-grid > .reveal:nth-child(5) { transition-delay: 360ms; }
.store-grid > .reveal:nth-child(6) { transition-delay: 450ms; }

/* ---------- Final call to action ---------- */

/* The buttons were sitting right under the sentence. */
.cta-row { margin-top: 44px; gap: 16px; }

/* Long headline, kept on one line on a desktop. */
.final-cta h2 { font-size: clamp(1.6rem, 3.2vw, 2.7rem); }
@media (min-width: 900px) { .final-cta h2 { white-space: nowrap; } }

/* ==========================================================================
   STORE SHELF
   ========================================================================== */

.shelf-card {
  flex: 0 0 330px;
  scroll-snap-align: start;
  padding: 0 0 26px;
  overflow: hidden;
}

@media (max-width: 480px) { .shelf-card { flex-basis: 280px; } }

.shelf-card .tier-head,
.shelf-card .tier-body,
.shelf-card .tier-foot { padding-inline: 24px; }

.shelf-card .tier-head { padding-top: 22px; }
.shelf-card:hover { transform: none; }

/* Product cover. Replace the .cover-slot div with an <img> when there is a
   real cover to show. */
.cover {
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--mint-tint);
}

.cover img { width: 100%; height: 100%; object-fit: cover; display: block;
             transition: transform 900ms cubic-bezier(0.16, 1, 0.3, 1); }
.shelf-card:hover .cover img { transform: scale(1.05); }

.cover-slot {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: linear-gradient(150deg, var(--green-deep) 0%, var(--green) 70%, #1B4A38 100%);
  position: relative;
}

.cover-slot::before {
  content: "";
  position: absolute;
  inset: 10px;
  border: 1px solid rgba(196, 160, 82, 0.4);
  border-radius: 4px;
}

.cover-slot span {
  position: relative;
  font-family: var(--font-display);
  font-size: 1.15rem;
  line-height: 1.3;
  color: var(--gold);
  padding: 0 16px;
}

/* Buttons alternate down the row: outline, gold, outline, gold. Driven by
   position, so adding or removing a card keeps the pattern. */
.shelf-card:nth-child(odd)  .tier-foot .btn { border-color: var(--green); color: var(--green); background: transparent; }
.shelf-card:nth-child(odd)  .tier-foot .btn:hover { background: var(--green); color: var(--white); }
.shelf-card:nth-child(even) .tier-foot .btn { background: var(--gold); color: var(--green); border-color: var(--gold); }
.shelf-card:nth-child(even) .tier-foot .btn:hover { background: var(--gold-soft); border-color: var(--gold-soft); }

/* ---------- Final call to action ----------
   The 720px cap plus nowrap made the text overflow its own box, which is why
   it sat off to the right. */
.final-cta h2 { max-width: none; }

/* ---------- The contact form inside the FAQ column ---------- */
.faq-form { margin-top: 26px; }

/* The badge runs opposite to the button on the same card, so no card shows
   two gold elements and the row alternates cleanly in both directions.
   Position driven, so it survives adding or removing a product. */
.shelf-card:nth-child(odd) .tier-badge {
  background: var(--gold);
  border-color: var(--gold);
  color: var(--green);
}

.shelf-card:nth-child(even) .tier-badge {
  background: transparent;
  border-color: rgba(20, 57, 43, 0.28);
  color: var(--green);
}

/* A longer hero headline that has to hold one line. */
.hero h1.h1-fit { font-size: clamp(1.5rem, 2.9vw, 2.45rem); }
@media (min-width: 1000px) { .hero h1.h1-fit { white-space: nowrap; } }

/* ---------- Hero with a photo behind it ----------
   Add class "hero-photo" to the hero section once assets/img/hero.jpg
   exists. The photo sits under a Kingdom Green wash whose strength is one
   variable, so it can be dialled up or down without regenerating anything.

   The plain hero already uses ::before and ::after for two decorative rings.
   Those set a border-radius and a fixed 560px box, and a later rule only
   overrides the properties it names, so the wash inherited the circle unless
   every one of them is reset here. */

.hero-photo {
  --hero-tint: 0.94;              /* how solid the green is over the copy */
  background-image: url("../img/hero.jpg");
  background-size: cover;
  background-position: right center;
  background-repeat: no-repeat;
  position: relative;
}

/* The rings are clutter over a photograph. */
.hero-photo::before { display: none; }

.hero-photo::after {
  content: "";
  position: absolute;
  inset: 0;
  width: auto;
  height: auto;
  border: 0;
  border-radius: 0;
  z-index: 1;
  pointer-events: none;
  /* Heavy where the words are, clearing to almost nothing over her and the
     panel on the right. */
  background: linear-gradient(97deg,
    rgba(14, 42, 32, var(--hero-tint)) 0%,
    rgba(14, 42, 32, calc(var(--hero-tint) - 0.06)) 34%,
    rgba(14, 42, 32, calc(var(--hero-tint) - 0.34)) 56%,
    rgba(20, 57, 43, 0.30) 76%,
    rgba(20, 57, 43, 0.16) 100%);
}

.hero-photo .hero-inner { position: relative; z-index: 2; }

@media (max-width: 900px) {
  /* Stacked, so the copy covers the frame and the wash goes flat and heavy. */
  .hero-photo { --hero-tint: 0.9; background-position: 72% center; }
  .hero-photo::after {
    background: linear-gradient(180deg,
      rgba(14, 42, 32, 0.86) 0%,
      rgba(14, 42, 32, 0.92) 100%);
  }
}

/* A longer hero headline that has to hold one line. */
.hero h1.h1-fit { font-size: clamp(1.5rem, 2.9vw, 2.45rem); }
@media (min-width: 1000px) { .hero h1.h1-fit { white-space: nowrap; } }

/* ---------- Hero with a photo behind it ----------
   Add class "hero-photo" to the hero section once assets/img/hero.jpg
   exists. The photo sits under a Kingdom Green wash whose strength is one
   variable, so it can be dialled up or down without regenerating anything.
   The photo is composed with its subject on the right, so it is anchored
   right and the empty left side carries the copy. */

.hero-photo {
  --hero-tint: 0.72;              /* 0 is the bare photo, 1 is solid green */
  background-image: url("../img/hero.jpg");
  background-size: cover;
  background-position: right center;
  position: relative;
}

.hero-photo::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(90deg,
      rgba(14, 42, 32, calc(var(--hero-tint) + 0.2)) 0%,
      rgba(14, 42, 32, var(--hero-tint)) 45%,
      rgba(20, 57, 43, calc(var(--hero-tint) - 0.25)) 100%);
}

.hero-photo .hero-inner { position: relative; z-index: 2; }

@media (max-width: 760px) {
  /* On a phone the copy covers most of the frame, so the wash goes heavier. */
  .hero-photo { --hero-tint: 0.82; background-position: 70% center; }
}

/* ---------- Step number beside its title ---------- */

.step h3 { display: flex; align-items: baseline; gap: 12px; }
.step h3 .step-num { flex: 0 0 auto; }
.step .step-num { font-size: 1.9rem; }

/* ---------- Cancellation terms, as a readable table ----------
   This was one long run-on line of Title Case. Four rows read in a glance. */

.terms-block { margin-top: 30px; }
.terms-block h3 { font-size: 1.1rem; margin-bottom: 14px; }

.terms-list { list-style: none; margin: 0; padding: 0; }

.terms-list li {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 18px;
  padding: 13px 0;
  border-top: 1px solid rgba(20, 57, 43, 0.14);
  font-size: 0.94rem;
}

.terms-list li:last-child { border-bottom: 1px solid rgba(20, 57, 43, 0.14); }
.terms-list span { color: var(--body-muted); }
.terms-list strong { color: var(--green); font-weight: 600; white-space: nowrap; }

/* A section built around one tall embed does not need the full breathing room
   above and below, because the embed is already mostly white space. Trimming
   it is what gets the whole form onto a laptop screen at once. */
.section-compact { padding-top: 56px; padding-bottom: 56px; }

/* The inquiry form does not need half the page, and the photos beside it do.
   An even split capped the circles at roughly half the column, which is why
   they kept coming out small. Giving the photo side the larger share is what
   lets them be properly sized. */
@media (min-width: 880px) {
  #form .split { grid-template-columns: 1.15fr 0.85fr; }
}

@media (max-width: 720px) {
  .section-compact { padding-top: 52px; padding-bottom: 52px; }
}

.form-thanks { margin: 22px; border: 0; }

.form-thanks {
  background: var(--mint-tint);
  border: 1px solid var(--mint);
  border-radius: var(--radius-sm);
  padding: 40px 32px;
  text-align: center;
}

.form-thanks h3 { font-size: 1.35rem; margin-bottom: 12px; color: var(--green); }
.form-thanks p { margin: 0; color: var(--body-muted); }

.embed-fallback {
  margin-top: 12px;
  font-size: 0.86rem;
  color: var(--body-muted);
}

.embed-fallback a { color: var(--green); font-weight: 600; }

.terms-note {
  margin-top: 14px;
  font-size: 0.92rem;
  color: var(--body-muted);
}

/* ---------- Two overlapping circular photos ----------
   A vertical cascade: one high and right, the second below it and left,
   overlapping so the pair reads as one falling shape. Taller than it is
   wide, which is the whole point of the arrangement.

   Sized as a share of the column rather than in fixed pixels, so the photos
   fill whatever width they are given instead of being tuned for one screen
   and coming out small on the rest. The pair holds a fixed ratio, so its
   height always follows its width. */

.circle-pair {
  position: relative;
  margin-top: 36px;
  width: 100%;
  max-width: 560px;
  aspect-ratio: 560 / 760;
}

.circle {
  position: absolute;
  margin: 0;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  overflow: hidden;
  box-shadow: var(--shadow);
  background: var(--mint-tint);
}

.circle img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Upper, set to the right. It sits behind. */
.circle-a {
  width: 66%;
  left: 34%;
  top: 0;
  z-index: 1;
}

/* Lower, set to the left, and in front. The ring belongs on the one in
   front so the overlap reads as deliberate rather than two photos running
   into each other. */
.circle-b {
  width: 76%;
  left: 0;
  top: 43.5%;
  z-index: 2;
  border: 8px solid var(--mint-tint);
}

/* A thinner ring once the photos are small, so it does not eat the picture. */
@media (max-width: 620px) {
  .circle-b { border-width: 6px; }
}

.circle-slot {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: linear-gradient(150deg, var(--green-deep) 0%, var(--green) 70%, #1B4A38 100%);
}

.circle-slot span {
  font-family: var(--font-display);
  font-size: 0.95rem;
  color: var(--gold);
  padding: 0 14px;
}

/* ---------- Where an anchor link lands ----------
   The header is sticky, so jumping to #who or #programs used to put the top
   of that section directly underneath the menu bar and hide the heading you
   clicked to reach. This holds the landing point clear of it. */

section[id], [id][data-anchor] { scroll-margin-top: 104px; }

@media (max-width: 720px) {
  section[id], [id][data-anchor] { scroll-margin-top: 84px; }
}
