/* ==========================================================================
   THRIVE — Echo design system (ported). Scoped under .echo so it restyles the
   homepage + global shell (header/footer) without disturbing existing pages.
   Palette + Playfair come from theme.json; this adds the component layer.
   ========================================================================== */

/* Global horizontal-overflow guard — kills any stray horizontal scrollbar
   site-wide (decorative orbs, full-bleed bands, or the nav at tablet width).
   `clip` (not `hidden`) so it never breaks position:sticky / position:fixed. */
html { overflow-x: clip; }


/* Kill the cream strip above the first section (root blockGap margin after the
   fixed header) — flush every page's first block to the top. */
.wp-site-blocks > header.wp-block-template-part { margin: 0; }
.wp-site-blocks > header.wp-block-template-part + * { margin-block-start: 0 !important; }

/* Full-bleed trailer bands butt flush against each other — no ivory blockGap
   strip showing between the stacked colored sections (symptom / related /
   peptide / provider / review) or above the footer. */
.wp-site-blocks > .thrive-symptom-cta,
.wp-site-blocks > .thrive-related,
.wp-site-blocks > .thrive-peptide-path,
.wp-site-blocks > .thrive-provider-band,
.wp-site-blocks > .thrive-review-band,
.wp-site-blocks > footer.wp-block-template-part { margin-block-start: 0 !important; }
/* Bulletproof: kill every ivory blockGap strip between ANY root section and around the footer wrapper (footer part wraps .q-footer in a transparent .echo div) */
:where(.wp-site-blocks) > * { margin-block-start: 0 !important; }
.wp-site-blocks > footer.wp-block-template-part > .echo,
.wp-site-blocks > footer.wp-block-template-part .q-footer { margin-top: 0 !important; }
/* WordPress inserts a zero-width character above the footer that occupies a line. */
.wp-site-blocks > footer.wp-block-template-part::before { content: none; }

/* Unconverted pages whose first block is plain content (no .echo hero and no
   full-bleed cover) sit flush under the fixed nav. Pad them clear. Echo pages
   and cover-hero pages space themselves, so they're excluded. */
.wp-block-post-content:not(:has(> .echo)):not(:has(> .wp-block-cover)) { padding-top: 7rem; }

/* ---------- base / typography (scoped) ---------- */
.echo { font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; letter-spacing: -0.01em; color: var(--q-text); overflow-x: clip; }
.echo .container { width: 100%; max-width: 1320px; margin: 0 auto; padding: 0 clamp(1.25rem, 3vw, 2.5rem); }
.echo section { padding: clamp(5rem, 10vw, 9rem) 0; position: relative; }
.echo .q-nap { padding: clamp(1rem, 2.5vw, 1.75rem) 0; } /* NAP band is a thin strip, not a full section */
.echo h1, .echo h2, .echo h3, .echo h4 { font-family: var(--q-serif); font-weight: 500; letter-spacing: -0.025em; line-height: 1.14; color: var(--q-text); } /* 1.14 (was 1.05): room for italic serif descenders so gradient/gold emphasis words don't clip */
.echo h1 { font-size: clamp(2.75rem, 7vw, 6.25rem); }
.echo h2 { font-size: clamp(2.25rem, 5vw, 4.25rem); }
.echo h3 { font-size: clamp(1.5rem, 2.5vw, 2rem); line-height: 1.15; }
.echo h4 { font-size: 1.25rem; line-height: 1.25; }
.echo p { color: var(--q-muted); font-size: 1.0625rem; line-height: 1.65; }
.echo .lead { font-size: clamp(1.1rem, 1.4vw, 1.25rem); line-height: 1.6; color: var(--q-muted); }
.echo .eyebrow { font-size: 0.72rem; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; color: var(--q-gold-ink); }
/* eyebrows sitting on dark bands keep the bright gold (contrast is fine there) */
.echo .membership .eyebrow, .echo .q-cta .eyebrow, .echo .symptoms.dark .eyebrow, .echo .framework.dark .eyebrow, .echo .article.dark .eyebrow, .echo .lakeway:not(.light) .eyebrow, .echo .adv-card.featured .eyebrow, .echo .bento-card.dark .eyebrow { color: var(--q-gold-soft); }
.echo em, .echo .em-gold { font-style: italic; color: var(--q-gold); font-weight: 400; }
/* Gradient emphasis word (kept by design). Hardened so it never "breaks":
   - color fallback means it's never invisible if background-clip:text is unsupported
   - padding-bottom + matching negative margin extends the paint box so italic
     descenders (g, y, p) aren't clipped, without shifting surrounding layout
   - print / forced-colors fall back to a solid readable forest */
.echo .em-grad { font-style: italic; font-weight: 400; background: linear-gradient(120deg, var(--q-forest) 0%, var(--q-gold) 100%); -webkit-background-clip: text; background-clip: text; -webkit-box-decoration-break: clone; box-decoration-break: clone; color: var(--q-gold); padding-bottom: 0.12em; }
@supports ((-webkit-background-clip: text) or (background-clip: text)) { .echo .em-grad { -webkit-text-fill-color: transparent; color: transparent; } }
@media print, (forced-colors: active) { .echo .em-grad { -webkit-text-fill-color: currentColor; color: var(--q-forest); background: none; } }
.echo a { color: inherit; text-decoration: none; }

/* ---------- buttons ---------- */
.echo .btn-primary { display: inline-flex; align-items: center; gap: 0.5rem; background: linear-gradient(115deg, var(--q-forest-deep) 0%, var(--q-forest) 32%, var(--q-gold) 118%); color: var(--q-cream); padding: 0.85rem 1.6rem; border-radius: 100px; font-size: 0.88rem; font-weight: 500; transition: all 0.35s var(--q-ease); position: relative; overflow: hidden; }
.echo .btn-primary::before { content: ''; position: absolute; inset: 0; background: linear-gradient(115deg, var(--q-forest) 0%, var(--q-gold-soft) 125%); opacity: 0; transition: opacity 0.35s ease; }
.echo .btn-primary span, .echo .btn-primary svg { position: relative; z-index: 1; }
.echo .btn-primary:hover { transform: translateY(-1px); box-shadow: 0 10px 30px rgb(var(--t-forest-rgb) / 0.25); }
.echo .btn-primary:hover::before { opacity: 1; }
.echo .btn-primary .arrow, .echo .btn-gold .arrow { transition: transform 0.3s ease; }
.echo .btn-primary:hover .arrow, .echo .btn-gold:hover .arrow { transform: translateX(3px); }
.echo .btn-secondary { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.85rem 1.6rem; border: 1px solid rgb(var(--t-forest-rgb) / 0.18); border-radius: 100px; font-size: 0.88rem; font-weight: 500; color: var(--q-text); transition: all 0.3s ease; background: transparent; }
.echo .btn-secondary:hover { border-color: var(--q-forest); background: rgb(var(--t-forest-rgb) / 0.04); }
.echo .btn-gold { display: inline-flex; align-items: center; gap: 0.6rem; background: linear-gradient(115deg, var(--q-forest-deep) 0%, var(--q-forest) 30%, var(--q-gold) 112%); color: var(--q-cream); padding: 1.1rem 2.25rem; border-radius: 100px; font-size: 0.95rem; font-weight: 600; letter-spacing: 0.02em; transition: all 0.35s ease; box-shadow: 0 10px 40px rgb(var(--t-gold-rgb) / 0.32); border: 1px solid rgb(var(--t-gold-soft-rgb) / 0.35); position: relative; overflow: hidden; }
.echo .btn-gold::before { content: ''; position: absolute; inset: 0; background: linear-gradient(115deg, var(--q-forest) 0%, var(--q-gold-soft) 120%); opacity: 0; transition: opacity 0.35s ease; }
.echo .btn-gold span, .echo .btn-gold svg { position: relative; z-index: 1; }
.echo .btn-gold:hover { transform: translateY(-2px); box-shadow: 0 16px 50px rgb(var(--t-gold-rgb) / 0.5); }
.echo .btn-gold:hover::before { opacity: 1; }

