/* ==================================================================
   The Longevity Edge — /speaking (podcast-guest press kit) page styles
   Loaded by inc/speaking.php only, deps le-components, priority 22.

   Token rule: SHORT token names only (--navy-900, --s-6, --gold-text).
   inc/enqueue-cleanup.php dequeues `global-styles` on block-free pages,
   so every WordPress preset variable is UNDEFINED here. Do not use one.

   Scoping rule: everything is either .speaking-* or a component class
   nested under a .speaking-* ancestor. about.css is NOT loaded on this
   page (inc/about.php enqueues it on page-about.php only), so the
   handful of .about-* rules this page reuses are copied in below —
   scoped, and deliberately WITHOUT .about-why-card's container rule
   (it carries position:sticky; top:100px, which must not apply here).
   ================================================================== */

/* ------------------------------------------------------------------
   0. Kadence page chrome reset

   Guarded on three body selectors on purpose. WordPress will auto-match
   page-speaking.php to a page slugged "speaking" WITHOUT writing
   _wp_page_template, in which case the body class is
   page-template-default, not page-template-page-speaking. inc/speaking.php
   also adds a `speaking-page` body class via the body_class filter, which
   is the reliable hook; the other two are belt-and-braces. This sheet only
   ever loads on the speaking page, so the bare page-template-default
   selector cannot leak to other pages.
   ------------------------------------------------------------------ */
body.speaking-page .entry-header,
body.page-template-page-speaking .entry-header,
body.page-template-default .entry-header,
body.speaking-page .page-title,
body.page-template-page-speaking .page-title,
body.page-template-default .page-title,
body.speaking-page .entry-title,
body.page-template-page-speaking .entry-title,
body.page-template-default .entry-title { display: none !important; }

body.speaking-page .content-area,
body.page-template-page-speaking .content-area,
body.page-template-default .content-area { margin-top: 0 !important; padding: 0 !important; }

body.speaking-page .entry-content-wrap,
body.page-template-page-speaking .entry-content-wrap,
body.page-template-default .entry-content-wrap { padding: 0 !important; }

body.speaking-page main#main,
body.page-template-page-speaking main#main,
body.page-template-default main#main { padding: 0 !important; }

body.speaking-page .primary-sidebar,
body.page-template-page-speaking .primary-sidebar,
body.page-template-default .primary-sidebar { display: none !important; }

/* The 100vw full-bleed technique below can produce a hairline horizontal
   scroll when a desktop scrollbar is visible. Same fix pdp.css / shop.css /
   article.css already ship. Safe here: this sheet is page-scoped. */
html, body { overflow-x: clip; }

/* ------------------------------------------------------------------
   1. Full-bleed bands + inner container

   In the mockup the sections were body children, so they were full width
   for free. In the theme they sit inside Kadence's content wrapper, so
   they need about.css's 100vw technique (about.css line 21).
   ------------------------------------------------------------------ */
.speaking-hero,
.speaking-section,
.speaking-pullquote { width: 100vw; position: relative; left: 50%; right: 50%; margin-left: -50vw; margin-right: -50vw; }

.speaking-hero .container,
.speaking-section .container,
.speaking-pullquote .container { max-width: 1180px; margin: 0 auto; padding: 0 var(--s-5); }

/* ------------------------------------------------------------------
   2. Reused about.css rules — copied in, scoped
   ------------------------------------------------------------------ */
.speaking-section .about-section-head { margin: 0 0 var(--s-7); max-width: 760px; }
.speaking-section .about-section-head h2 { font-family: var(--font-display); font-weight: 700; font-size: var(--fs-3xl); color: var(--navy-900); margin: 0 0 var(--s-3); letter-spacing: var(--ls-tight); line-height: var(--lh-tight); }
.speaking-section .about-section-sub { font-size: var(--fs-base); color: var(--ink-700); margin: 0; line-height: var(--lh-relaxed); }

/* Portrait treatment (about.css) — container rule included, it carries no sticky. */
.speaking-hero .about-hero-portrait { position: relative; }
.speaking-hero .about-hero-portrait-frame { position: relative; border-radius: var(--r-lg); overflow: hidden; box-shadow: 0 24px 48px rgba(14, 26, 43, 0.18); transform: rotate(-1deg); transition: transform 400ms var(--ease-out); }
.speaking-hero .about-hero-portrait-frame:hover { transform: rotate(0deg); }
.speaking-hero .about-hero-portrait-frame::before { content: ""; position: absolute; inset: 0; box-shadow: inset 0 0 0 2px var(--gold-300); border-radius: var(--r-lg); pointer-events: none; z-index: 2; }
.speaking-hero .about-hero-portrait-frame img { display: block; width: 100%; height: auto; object-fit: cover; aspect-ratio: 4/5; }
.speaking-hero .about-hero-portrait-sig { position: absolute; bottom: -16px; right: -8px; background: var(--navy-900); color: #fff; font-family: var(--font-display); font-weight: 600; font-size: var(--fs-sm); padding: 8px 16px; border-radius: var(--r-pill); letter-spacing: var(--ls-tight); box-shadow: 0 8px 16px rgba(14,26,43,0.22); }

/* Pull-quote band (about.css) — the strongest quote treatment in the theme.
   Markup keeps about.css's <footer><span class="about-pullquote-attr"> pattern. */
.speaking-pullquote { background: linear-gradient(135deg, var(--navy-900) 0%, var(--navy-700) 100%); color: #fff; padding: var(--s-9) 0; overflow: hidden; }
.speaking-pullquote::before { content: ""; position: absolute; inset: 0; background: radial-gradient(ellipse at 80% 20%, rgba(229,189,92,0.12) 0%, transparent 50%); pointer-events: none; }
.speaking-pullquote .container { position: relative; z-index: 1; max-width: 880px; text-align: center; }
.speaking-pullquote .about-pullquote-mark { color: var(--gold-300); margin: 0 auto var(--s-3); display: block; opacity: 0.7; }
.speaking-pullquote blockquote { margin: 0; }
.speaking-pullquote blockquote p { font-family: var(--font-display); font-weight: 500; font-style: italic; font-size: var(--fs-2xl); color: #fff; line-height: 1.45; margin: 0 0 var(--s-5); letter-spacing: var(--ls-tight); }
/* about.css uses 700px here; 768 keeps this page on the 900/768/640 set. */
@media (max-width: 768px) { .speaking-pullquote blockquote p { font-size: var(--fs-xl); } }
.speaking-pullquote .about-pullquote-attr { font-family: var(--font-body); font-size: var(--fs-sm); color: var(--gold-300); text-transform: uppercase; letter-spacing: var(--ls-widest); font-weight: 700; font-style: normal; }

/* Checklist rows (about.css). The .about-why-card CONTAINER rule is
   deliberately not copied — it is position:sticky; top:100px. */
.speaking-section .about-why-card ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--s-3); }
.speaking-section .about-why-card li { display: grid; grid-template-columns: 20px 1fr; gap: var(--s-3); align-items: start; font-size: var(--fs-sm); color: var(--ink-900); line-height: var(--lh-normal); }
.speaking-section .about-why-card li svg { color: var(--success); margin-top: 2px; flex-shrink: 0; }

/* ------------------------------------------------------------------
   3. Page scaffolding
   ------------------------------------------------------------------ */
.speaking-section { padding: var(--s-9) 0; }
.speaking-section--canvas  { background: var(--canvas); }
.speaking-section--surface { background: var(--surface); }
.speaking-section--navy    { background: var(--navy-900); }
@media (max-width: 640px) { .speaking-section { padding: var(--s-7) 0; } }

/* Focus ring — house style (components.css sets it on .btn only). */
.speaking-hero a:focus-visible,
.speaking-section a:focus-visible,
.speaking-section button:focus-visible,
.speaking-section summary:focus-visible,
.speaking-section input:focus-visible,
.speaking-section [tabindex]:focus-visible { outline: 3px solid var(--gold-300); outline-offset: 2px; }

/* Body-copy floor (design spec §6): 17px minimum on substantive prose.
   Several reused components run at --fs-sm / --fs-base, under the floor.
   Genuine metadata — dates, download-card <small>, the citation, captions,
   the tech/promotion rows — deliberately stays small. */
.speaking-section .about-section-sub,
.speaking-section .faq-body,
.speaking-track p,
.speaking-episode .about-why-card li,
.speaking-commercial .about-why-card li { font-size: var(--body-fs); }

/* ------------------------------------------------------------------
   4. Hero
   ------------------------------------------------------------------ */
.speaking-hero { background: var(--canvas); padding: var(--s-9) 0 var(--s-8); border-bottom: 1px solid var(--navy-100); }
.speaking-hero-grid { display: grid; grid-template-columns: 7fr 5fr; gap: var(--s-8); align-items: center; }
@media (max-width: 900px) { .speaking-hero-grid { grid-template-columns: 1fr; gap: var(--s-6); } }
/* No press headshot configured → the hero is a single column, not a
   7fr text column with a 5fr hole beside it. */
.speaking-hero-grid--noportrait { grid-template-columns: 1fr; }
.speaking-hero h1 { font-family: var(--font-display); font-weight: 700; font-size: var(--fs-5xl); color: var(--navy-900); margin: 0 0 var(--s-3); letter-spacing: var(--ls-tight); line-height: var(--lh-tight); }
.speaking-hero-showname { font-family: var(--font-body); font-size: var(--fs-sm); font-weight: 600; color: var(--ink-500); margin: 0 0 var(--s-2); }
.speaking-hero-cred { font-size: var(--fs-lg); color: var(--ink-700); margin: 0 0 var(--s-5); line-height: var(--lh-normal); }
.speaking-hero-benefit { font-family: var(--font-display); font-style: italic; font-weight: 500; font-size: var(--fs-xl); color: var(--navy-900); line-height: var(--lh-snug); letter-spacing: var(--ls-tight); margin: 0 0 var(--s-5); max-width: 34ch; }
.speaking-hero-support { font-size: var(--body-fs); color: var(--ink-700); line-height: var(--lh-relaxed); margin: 0 0 var(--s-6); max-width: 62ch; }
.speaking-cta-row { display: flex; flex-wrap: wrap; gap: var(--s-4); align-items: center; }
/* Both CTAs have to sit on one row inside the hero's 7/12 column (635px at
   1440). At the components.css defaults the pair measures 746px and wraps.
   Side padding steps down to --s-3 and the primary's label runs at --fs-base;
   .btn-lg keeps its 60px height, so the CTA is still the tallest control. */
.speaking-cta-row .btn { padding: 0 var(--s-3); }
.speaking-cta-row .btn-lg { font-size: var(--fs-base); }
@media (max-width: 640px) {
	.speaking-cta-row { flex-direction: column; align-items: stretch; }
	.speaking-cta-row .btn { width: 100%; }
}

/* Proof strip: 3-up. The reused .authority-creds flex row can't hold three
   items in the hero column, so it becomes a 3-col grid; the "numeral" steps
   to --fs-lg because two of the three values are words, not numbers. */
.speaking-proof { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-5); }
@media (max-width: 640px) { .speaking-proof { grid-template-columns: 1fr; gap: var(--s-4); } }
.speaking-proof .authority-cred-num { color: var(--gold-text); text-transform: uppercase; letter-spacing: var(--ls-wide); font-size: var(--fs-lg); }

/* The portrait DISAPPEARS below 900px. Deliberate: it makes the H1 the
   mobile LCP element. See inc/hero-mobile.php — this fixed a ~10s LCP. */
@media (max-width: 900px) { .speaking-hero-portrait { display: none; } }

/* ------------------------------------------------------------------
   5. Episode menu
   ------------------------------------------------------------------ */
.speaking-episode-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--s-5); }
@media (max-width: 900px) { .speaking-episode-grid { grid-template-columns: 1fr; } }
.speaking-episode { background: var(--surface); border: 1px solid var(--navy-100); border-radius: var(--r-lg); padding: var(--s-6); box-shadow: var(--shadow-sm); }
.speaking-episode--contrarian { background: var(--gold-50); border-color: var(--gold-100); }
.speaking-episode-top { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--s-4); margin-bottom: var(--s-3); }
.speaking-episode-num { font-family: var(--font-display); font-weight: 700; font-size: var(--fs-3xl); color: var(--gold-500); line-height: 1; }
.speaking-episode h3 { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-xl); color: var(--navy-900); margin: 0 0 var(--s-3); letter-spacing: var(--ls-tight); line-height: var(--lh-snug); }
.speaking-episode-desc { font-size: var(--body-fs); color: var(--ink-700); line-height: var(--lh-relaxed); margin: 0; }
.speaking-episode .authority-quote { font-size: var(--fs-lg); }
.speaking-learn-label { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--ls-widest); color: var(--gold-text); font-weight: 700; margin: 0 0 var(--s-3); }
.speaking-learn-label--spaced { margin-top: var(--s-5); }
.speaking-note { font-size: var(--fs-sm); color: var(--ink-500); line-height: var(--lh-relaxed); margin: var(--s-4) 0 0; max-width: 70ch; }
/* .badge modifiers: the theme ships .badge-save / .badge-bestseller, whose
   commerce semantics have no business on this page, so the token pairs are
   reused under .speaking- names instead. */
.speaking-badge--contrarian { background: var(--gold-100); color: var(--gold-text); }

/* ------------------------------------------------------------------
   6. Clip band (navy)
   ------------------------------------------------------------------ */
.speaking-clip { text-align: center; }
.speaking-clip .eyebrow { color: var(--gold-300); }
.speaking-clip h2 { color: var(--surface); }
.speaking-clip-intro { color: var(--navy-text-muted); font-size: var(--fs-lg); line-height: var(--lh-relaxed); margin: 0 auto var(--s-6); max-width: 60ch; }
/* The player needs the same side padding as the surrounding copy, but a
   wider max-width (760px) than .container-text allows, hence its own wrap. */
.speaking-player-wrap { max-width: 760px; margin: 0 auto; padding: 0 var(--s-5); }
.speaking-player {
	position: relative; aspect-ratio: 16 / 9; margin: 0 auto var(--s-5);
	background: var(--navy-800); border: 1px solid var(--navy-700); border-radius: var(--r-lg);
	box-shadow: var(--shadow-lg); overflow: hidden;
}
/* Click-to-load facade: nothing third-party is requested on page view. */
.speaking-player-facade {
	position: absolute; inset: 0; width: 100%; display: flex; flex-direction: column;
	align-items: center; justify-content: center; gap: var(--s-4); padding: var(--s-5);
	background: transparent; border: 0; cursor: pointer; color: inherit; font: inherit;
}
.speaking-player .speaking-embed-slot:not(:empty) { position: absolute; inset: 0; }
.speaking-embed-slot iframe { position: absolute; inset: 0; display: block; width: 100%; height: 100%; border: 0; }
/* 64px matches .about-personal-stat-icon in about.css — the theme's existing
   circular-icon diameter. Not a token; there is no token for control sizes. */
.speaking-player-play { width: 64px; height: 64px; border-radius: 50%; border: 1px solid var(--gold-300); color: var(--gold-300); display: inline-flex; align-items: center; justify-content: center; transition: background var(--t-default) var(--ease-out); }
.speaking-player-facade:hover .speaking-player-play { background: rgba(229,189,92,0.16); }
.speaking-player-label { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--ls-widest); color: var(--navy-text-muted); font-weight: 700; margin: 0; }
.speaking-clip-caption { font-size: var(--fs-sm); color: var(--navy-text-muted); max-width: 60ch; margin: 0 auto; }
.speaking-clip-caption a { color: var(--gold-300); }

/* ------------------------------------------------------------------
   7. Verification block — reads like a document
   ------------------------------------------------------------------ */
.speaking-verify-doc { background: var(--raised); border: 1px solid var(--navy-100); border-radius: var(--r-md); padding: var(--s-2) var(--s-6); margin: 0; }
.speaking-verify-row { display: grid; grid-template-columns: 220px 1fr; gap: var(--s-5); padding: var(--s-4) 0; border-bottom: 1px solid var(--navy-100); align-items: baseline; }
.speaking-verify-row:last-child { border-bottom: 0; }
@media (max-width: 768px) { .speaking-verify-row { grid-template-columns: 1fr; gap: var(--s-2); } }
.speaking-verify-row dt { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--ls-wide); color: var(--ink-500); font-family: var(--font-body); font-weight: 700; }
.speaking-verify-row dd { margin: 0; font-size: var(--body-fs); color: var(--ink-900); line-height: var(--lh-normal); }
.speaking-verify-aside { display: block; font-size: var(--fs-sm); color: var(--ink-500); margin-top: var(--s-1); }

/* ------------------------------------------------------------------
   8. Commercial interest + host disclosure
   ------------------------------------------------------------------ */
.speaking-commercial { background: var(--surface); border-left: 3px solid var(--gold-500); border-top: 1px solid var(--navy-100); border-right: 1px solid var(--navy-100); border-bottom: 1px solid var(--navy-100); border-radius: 0 var(--r-md) var(--r-md) 0; padding: var(--s-6); }
.speaking-concession { font-size: var(--fs-lg); color: var(--ink-700); line-height: var(--lh-relaxed); margin: 0 0 var(--s-6); }
.speaking-disclosure { background: var(--navy-50); border-radius: var(--r-md); padding: var(--s-5); margin-top: var(--s-6); }
.speaking-disclosure-head { display: flex; justify-content: space-between; align-items: center; gap: var(--s-4); flex-wrap: wrap; margin-bottom: var(--s-3); }
.speaking-copy-label { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--ls-widest); color: var(--gold-text); font-weight: 700; margin: 0; }
.speaking-disclosure blockquote { margin: 0; font-family: var(--font-display); font-style: italic; font-size: var(--fs-lg); color: var(--navy-900); line-height: var(--lh-snug); }
.speaking-caption { font-size: var(--fs-sm); color: var(--ink-500); margin: var(--s-3) 0 0; }

/* ------------------------------------------------------------------
   9. Copy blocks: bios + host intro
   ------------------------------------------------------------------ */
.speaking-copyblock { background: var(--surface); border: 1px solid var(--navy-100); border-radius: var(--r-md); padding: var(--s-5); margin-bottom: var(--s-5); }
.speaking-copyblock--intro { background: var(--gold-50); border-color: var(--gold-100); }
.speaking-copyblock-head { display: flex; justify-content: space-between; align-items: center; gap: var(--s-4); flex-wrap: wrap; margin-bottom: var(--s-3); }
.speaking-copyblock h3,
.speaking-copyblock .speaking-meta { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--ls-widest); color: var(--gold-text); font-weight: 700; font-family: var(--font-body); margin: 0; }
.speaking-copyblock-body { font-size: var(--body-fs); color: var(--ink-700); line-height: var(--lh-relaxed); }
.speaking-copyblock-body p:last-child { margin-bottom: 0; }
.speaking-copy-btn { min-height: var(--tap-min); }
.speaking-h2--spaced { margin-top: var(--s-8); }

/* ------------------------------------------------------------------
   10. Questions
   ------------------------------------------------------------------ */
.speaking-questions { list-style: none; counter-reset: q; margin: 0; padding: 0; }
.speaking-questions li { counter-increment: q; display: grid; grid-template-columns: 40px 1fr; gap: var(--s-3); padding: var(--s-4) var(--s-3); border-bottom: 1px solid var(--navy-100); font-size: var(--body-fs); color: var(--ink-900); line-height: var(--lh-relaxed); }
.speaking-questions li::before { content: counter(q, decimal-leading-zero); font-family: var(--font-display); font-size: var(--fs-lg); font-weight: 700; color: var(--gold-500); line-height: var(--lh-relaxed); }
.speaking-questions li.speaking-questions-hard { background: var(--gold-50); border-radius: var(--r-md); }
/* grid-column: 2 keeps the marker in the text cell — auto-placement drops it
   into the 40px numeral column and stacks it three lines deep. */
.speaking-hard-marker { grid-column: 2; display: block; font-family: var(--font-body); font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--ls-widest); color: var(--gold-text); font-weight: 700; margin-top: var(--s-2); }

/* ------------------------------------------------------------------
   11. Track record
   ------------------------------------------------------------------ */
.speaking-subhead { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-xl); color: var(--navy-900); margin: 0 0 var(--s-5); letter-spacing: var(--ls-tight); }
.speaking-appearances { list-style: none; margin: 0 0 var(--s-6); padding: 0; }
.speaking-appearances > li { padding: var(--s-5) 0; border-bottom: 1px solid var(--navy-100); display: grid; grid-template-columns: 1fr auto; gap: var(--s-3) var(--s-5); align-items: baseline; }
@media (max-width: 768px) { .speaking-appearances > li { grid-template-columns: 1fr; } }
.speaking-appearance-name { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-lg); color: var(--navy-900); margin: 0 0 var(--s-2); letter-spacing: var(--ls-tight); }
.speaking-appearance-desc { font-size: var(--body-fs); color: var(--ink-700); margin: 0; line-height: var(--lh-relaxed); }
.speaking-appearance-date { font-size: var(--fs-sm); color: var(--ink-500); white-space: nowrap; }
@media (min-width: 768px) { .speaking-appearance-date { text-align: right; } }
.speaking-recency { background: var(--raised); border: 1px solid var(--navy-100); border-radius: var(--r-md); padding: var(--s-5); margin: 0 0 var(--s-6); }
.speaking-recency p { margin: 0 0 var(--s-3); font-size: var(--body-fs); color: var(--ink-700); }
.speaking-recency p:last-child { margin-bottom: 0; }
.speaking-hr { border: 0; border-top: 1px solid var(--navy-100); margin: var(--s-7) 0; }
/* 180px cover column — a layout width; no token covers image columns. */
.speaking-book-grid { display: grid; grid-template-columns: 180px 1fr; gap: var(--s-6); align-items: start; }
/* No cover image configured → single column, no empty well. */
.speaking-book-grid--nocover { grid-template-columns: 1fr; }
@media (max-width: 768px) { .speaking-book-grid { grid-template-columns: 1fr; } }
.speaking-book-cover { aspect-ratio: 2 / 3; background: var(--navy-50); border: 1px solid var(--navy-300); border-radius: var(--r-md); display: flex; align-items: center; justify-content: center; overflow: hidden; text-align: center; }
.speaking-book-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.speaking-book-title { font-family: var(--font-display); font-weight: 600; font-style: italic; font-size: var(--fs-lg); color: var(--navy-900); margin: 0 0 var(--s-2); }
.speaking-citation { background: var(--raised); border: 1px solid var(--navy-100); border-radius: var(--r-md); padding: var(--s-5); font-family: var(--font-mono); font-size: var(--fs-sm); color: var(--ink-900); line-height: var(--lh-relaxed); margin: 0; }
.speaking-featured-also { font-size: var(--body-fs); color: var(--ink-700); }

/* ------------------------------------------------------------------
   12. Tech readiness + promotion
   ------------------------------------------------------------------ */
.speaking-two-up { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-5); align-items: start; }
@media (max-width: 900px) { .speaking-two-up { grid-template-columns: 1fr; } }
.speaking-quiet-card { background: var(--raised); border: 1px solid var(--navy-100); border-radius: var(--r-md); padding: var(--s-6); }
.speaking-quiet-card h2 { font-size: var(--fs-xl); margin: 0 0 var(--s-4); letter-spacing: var(--ls-tight); }

/* ------------------------------------------------------------------
   13. Downloads
   ------------------------------------------------------------------ */
.speaking-downloads-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--s-4); }
@media (max-width: 768px) { .speaking-downloads-grid { grid-template-columns: 1fr; } }
.speaking-downloads-grid .le-404-link-card { background: var(--surface); }

/* ------------------------------------------------------------------
   14. Booking (navy)
   ------------------------------------------------------------------ */
.speaking-booking .eyebrow { color: var(--gold-300); }
.speaking-booking h2 { color: var(--surface); }
.speaking-booking-intro { color: var(--navy-text-muted); font-size: var(--fs-lg); margin: 0 0 var(--s-7); max-width: 60ch; }
.speaking-booking-grid { display: grid; grid-template-columns: 2fr 1fr; gap: var(--s-5); align-items: stretch; }
@media (max-width: 900px) { .speaking-booking-grid { grid-template-columns: 1fr; } }
.speaking-booking-col { display: grid; gap: var(--s-5); }
/* No scheduler configured → the scheduler track is not rendered and the two
   remaining tracks share the full width instead of stacking in a narrow rail. */
.speaking-booking-grid--noscheduler { grid-template-columns: 1fr; }
.speaking-booking-grid--noscheduler .speaking-booking-col { grid-template-columns: 1fr 1fr; }
@media (max-width: 900px) { .speaking-booking-grid--noscheduler .speaking-booking-col { grid-template-columns: 1fr; } }
.speaking-track { background: var(--navy-800); border: 1px solid var(--navy-700); border-radius: var(--r-md); padding: var(--s-6); display: flex; flex-direction: column; }
.speaking-track h3 { font-family: var(--font-display); font-weight: 600; font-size: var(--fs-lg); color: var(--surface); margin: 0 0 var(--s-3); letter-spacing: var(--ls-tight); }
.speaking-track p { color: var(--navy-text-muted); line-height: var(--lh-relaxed); } /* size from the body-copy floor rule */
/* Scheduler: click-to-load. Nothing third-party is requested on page view.
   The well holds the button before the click and the iframe after it, and it
   flexes to fill the track's height so a short scheduler track never leaves a
   navy void beside the taller form/email column. */
.speaking-scheduler-well { flex: 1 1 auto; display: flex; align-items: center; justify-content: center; min-height: 220px; padding: var(--s-6); margin: var(--s-5) 0 0; background: var(--navy-900); border: 1px dashed var(--navy-300); border-radius: var(--r-md); }
/* speaking.js adds this once an iframe is injected: the framing well steps out
   of the way and the embed takes the space. */
.speaking-scheduler-well.speaking-embed-loaded { display: block; padding: 0; min-height: 0; border-style: solid; border-color: var(--navy-700); overflow: hidden; }
/* Explicit height: an absolutely-positioned iframe at height:100% would
   resolve against the slot's auto height and collapse to ~150px. */
.speaking-scheduler-slot { position: relative; width: 100%; height: 620px; background: var(--navy-900); }
@media (max-width: 640px) { .speaking-scheduler-slot { height: 560px; } }
.speaking-scheduler-note { font-size: var(--fs-sm); color: var(--navy-text-muted); margin: var(--s-3) 0 0; }
.speaking-scheduler-note a { color: var(--gold-300); }
.speaking-fields { list-style: none; margin: var(--s-4) 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--s-2); }
.speaking-fields li { font-size: var(--fs-xs); color: var(--navy-text-muted); border: 1px solid var(--navy-700); border-radius: var(--r-pill); padding: var(--s-1) var(--s-3); }
/* The address runs at --fs-base in gold-300 rather than .btn-ghost's --fs-lg:
   at --fs-lg the 29-character address breaks mid-word in a 1/3-width card. */
.speaking-track .btn-ghost { color: var(--gold-300); font-size: var(--fs-base); padding: 0; min-height: var(--tap-min); justify-content: flex-start; text-align: left; white-space: normal; overflow-wrap: normal; letter-spacing: 0; }
.speaking-track .btn-ghost:hover { color: var(--gold-300); }
.speaking-email-plain { font-size: var(--fs-sm); color: var(--navy-text-muted); margin: var(--s-2) 0 0; user-select: all; overflow-wrap: normal; }
/* Fluent Forms / mailto fallback inside a navy card. components.css's
   .btn-outline is navy-on-transparent, which is invisible on navy-800. */
.speaking-form-fallback { margin-top: var(--s-4); }
.speaking-form-fallback p { color: var(--navy-text-muted); margin-bottom: var(--s-3); }
.speaking-track .btn-outline { color: #fff; border-color: var(--navy-300); }
.speaking-track .btn-outline:hover { background: #fff; color: var(--navy-900); border-color: #fff; }
.speaking-track .fluentform label,
.speaking-track .fluentform .ff-el-input--label label { color: #fff; }

/* Grid children must be allowed to shrink below their min-content width, or a
   long unbroken string (the speaking@ address) blows the layout past 375px. */
.speaking-booking-grid > *,
.speaking-booking-col > *,
.speaking-two-up > *,
.speaking-episode-grid > *,
.speaking-book-grid > *,
.speaking-appearances > li > *,
.speaking-verify-row > * { min-width: 0; }
@media (max-width: 640px) {
	.speaking-track { padding: var(--s-5); }
	.speaking-track .btn { width: 100%; }
	/* .btn-lg's --fs-lg wraps "Open the scheduler →" onto three lines at 375. */
	.speaking-track .btn-lg { font-size: var(--fs-base); }
	.speaking-track .btn-ghost { width: auto; }
	.speaking-scheduler-well { padding: var(--s-5); min-height: 180px; }
}

/* ------------------------------------------------------------------
   15. FAQ — scopes the global components.css .faq/.faq-summary/.faq-body
   ------------------------------------------------------------------ */
.speaking-faq .faq {
	background: var(--surface);
	border: 1px solid var(--navy-100);
	border-radius: var(--r-md);
	margin-bottom: var(--s-3);
	padding: 0 var(--s-5);
}
.speaking-faq .faq-summary { min-height: var(--tap-min); }

.speaking-visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
