/* ==========================================================================
   Tokens — his real brand, inverted back to the dark ground his site uses.
   Sources: Brand/brand-tokens.css, extracted from learn.jbarrows.com.
   ========================================================================== */
:root{
  /* ⚠ VERBATIM FROM JOHN'S BRAND STORE, NOT SAMPLED FROM HIS SITE. An earlier
     version of this file took its palette by eyedropping learn.jbarrows.com and got
     the roles backwards: it led with #006AFF, which is his SECONDARY. It also had no
     equivalent of the accent below, which is the one colour here that is not simply
     another blue and is doing the most work to make this look like an upgrade. */
  --jb:#3088F3;            /* Primary   — buttons, links, the working accent      */
  --jb-deep:#006AFF;       /* Secondary — headline emphasis, the punchier blue    */
  --jb-accent:#1F0AE8;     /* Accent    — indigo. Depth in gradients, pressed     */
  --dark:#28282D;          /* Dark      — raised surfaces, hovers                 */
  --ground:#080808;        /* Black     — page ground. Note: NOT pure #000        */

  --ink:#F2F2F3;
  --ink-2:#C4C4CA;
  --muted:#A3A3AB;         /* brighter supporting copy for comfortable dark-mode reading */
  --hero-soft:#ECECF0;      /* near-white secondary copy over the moving hero      */
  --hero-nav:#DDDEE4;       /* brighter secondary hierarchy without reaching pure white */
  --assistant-ground:#07111F;
  --assistant-raise:#0B192C;
  --raise:#131317;         /* between Black and Dark, so cards read as lifted     */
  --raise-2:var(--dark);
  --line:#25252A;
  --line-2:#35353C;
  /* ⚠ radius 0 is a real brand signature on his site: every button and card is
     square. It is the cheapest single thing that stops this reading as generic SaaS. */
  --r:0px;
  /* ⚠ INTER IS THE BRAND BODY FACE, NOT A FALLBACK. This file previously listed
     "proxima-nova" first and carried a warning about Adobe domain-locking. His brand
     store names the pair outright: Oswald for headings, Inter for body. Both are
     Google Fonts, so there is no licence to arrange and no domain to authorise. */
  --head:"Oswald","Inter Tight",system-ui,sans-serif;
  --body:"Inter",system-ui,-apple-system,sans-serif;
  --max:1180px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--ground);color:var(--ink);font-family:var(--body);
  font-size:16.5px;line-height:1.62;overflow-x:clip;-webkit-font-smoothing:antialiased}
body.assistant-modal-open{overflow:hidden}
img{max-width:100%;display:block}
a{color:inherit}
.wrap{max-width:var(--max);margin:0 auto;padding:0 24px}

h1,h2,h3,.h{font-family:var(--head);font-weight:600;letter-spacing:.01em;
  text-transform:uppercase;line-height:1.04;margin:0;text-wrap:balance}
.eyebrow{font-family:var(--head);font-size:12px;font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;color:var(--jb);margin:0 0 14px}

/* ── Nav ─────────────────────────────────────────────────────────────────── */
/* ⚠ SCOPED TO #nav, NOT THE BARE ELEMENT. This was `nav{position:fixed}`, which caught
   every <nav> on the page - including the pagination landmark, which pinned itself to
   the top of the viewport and drew over the site nav. Pagination is legitimately a
   <nav> for screen readers, so the fix belongs on the site nav's selector rather than
   downgrading the pager to a <div> and losing the landmark. */
#nav{position:fixed;inset:0 0 auto;z-index:60;transition:background .25s,border-color .25s;
  border-bottom:1px solid transparent}
/* ⚠ SOLID MEANS OPAQUE. This was rgba(0,0,0,.92) with a backdrop blur, which is a
   glass masthead, not a solid one: 8% of whatever scrolls underneath comes through it.
   Against the near-black sections nobody could see that, so it read as fine for months.
   It only became obvious once bright artwork started passing under the bar - the
   newsletter cards and the episode thumbnails - and then section headings and card
   images ghosted across the nav as you scrolled, which is exactly what it looks like:
   the bottom of the page sneaking over the header (reported 2026-09-29).
   The blur goes with it. A backdrop filter behind an opaque background is paint the
   browser does on every frame of every scroll and nobody can ever see. */
#nav.solid{background:var(--ground);border-bottom-color:var(--line)}
.nav-in{display:flex;align-items:center;gap:26px;height:70px;
  max-width:var(--max);margin:0 auto;padding:0 24px}
/* ⚠ THE REAL LOGO IS WHITE-ONLY, WHICH IS WHY THE MASTHEAD IS DARK. His only
   supplied mark has no dark variant, so any light header would need a version that
   does not exist. Height is fixed and width follows the 2.88 aspect, so it never
   distorts; 34px keeps it inside the 70px bar with room to breathe. */
.brand{display:flex;align-items:center;text-decoration:none;flex:none}
.brand img{height:34px;width:auto;display:block}
.nav-links{display:flex;gap:22px;margin-left:auto;list-style:none;padding:0;margin-block:0}
.nav-links a{font-size:13px;letter-spacing:.1em;text-transform:uppercase;
  text-decoration:none;color:var(--hero-nav);font-weight:500;transition:color .15s}
.nav-links a:hover{color:var(--ink)}
.btn{display:inline-flex;align-items:center;gap:9px;font-family:var(--head);
  font-size:13px;font-weight:500;letter-spacing:.13em;text-transform:uppercase;
  padding:12px 20px;border-radius:var(--r);text-decoration:none;cursor:pointer;
  border:1px solid var(--line-2);color:var(--ink);background:transparent;
  transition:background .18s,border-color .18s,color .18s}
.btn:hover{border-color:var(--jb);color:#fff}
.btn.solid{background:var(--jb);border-color:var(--jb);color:#fff}
.btn.solid:hover{background:var(--jb-deep);border-color:var(--jb-deep)}
/* The trailing square is his own button detail, kept. */
.btn.solid::after{content:"";width:7px;height:7px;background:#fff;flex:none}
.nav-cta{display:flex;gap:10px;align-items:center}
.nav-member-link{color:var(--hero-nav);font-size:12px;font-weight:500;
  letter-spacing:.1em;text-decoration:none;text-transform:uppercase;white-space:nowrap;
  transition:color .15s}
.nav-member-link:hover,.nav-member-link:focus-visible{color:var(--ink)}

/* ---- Nav dropdown (Content) ------------------------------------------------
   Added 2026-11-09. Blog, Newsletter and Podcast moved under one Content item so
   Advisory could take a top-level slot without an eighth link in the bar. */
/* ⚠ ONE BOX MODEL FOR EVERY ITEM IN THE BAR, or they do not line up. The links are
   inline text sitting on a baseline; the toggle has to be a flex box to put a caret
   beside its label. Those two are positioned by different rules, and Content rode about
   4px above its neighbours because of it. Making the top-level links flex boxes too, and
   centring the row rather than stretching it, means every item is the same kind of box
   and alignment stops depending on which element happens to be inside the li. */
.nav-links{align-items:center}
.nav-links>li{display:flex;align-items:center}
.nav-links>li>a{display:flex;align-items:center}
.nav-group{position:relative}
/* The button has to be indistinguishable from the links beside it, so every one of
   these declarations exists to undo a browser default, not to style anything. */
.nav-group-toggle{display:flex;align-items:center;gap:5px;appearance:none;background:none;
  border:0;margin:0;padding:0;cursor:pointer;font-family:inherit;font-size:13px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--hero-nav);font-weight:500;
  line-height:inherit;transition:color .15s}
.nav-group-toggle:hover,.nav-group-toggle:focus-visible{color:var(--ink)}
.nav-caret{width:9px;height:6px;flex:none;transition:transform .18s}
.nav-group.is-open .nav-caret{transform:rotate(180deg)}

/* ⚠ THE GAP BELOW THE BUTTON IS HOVERABLE, OR THE MENU IS UNREACHABLE BY MOUSE. The panel
   sits 12px clear of the bar so it does not look welded to it, and without this bridge the
   pointer leaves .nav-group crossing that gap and the menu closes before it is reached. */
.nav-group.is-open::after{content:'';position:absolute;left:0;right:0;top:100%;height:12px}

.nav-group-menu{position:absolute;top:calc(100% + 12px);left:50%;transform:translateX(-50%);
  z-index:5;min-width:184px;margin:0;padding:7px;list-style:none;
  background:var(--ground);border:1px solid var(--line);border-radius:10px;
  box-shadow:0 18px 40px rgba(0,0,0,.4)}
.nav-group-menu[hidden]{display:none}
.nav-group-menu li{border:0}
.nav-links .nav-group-menu a{display:block;padding:10px 12px;border-radius:6px;font-size:12px;
  letter-spacing:.08em;text-transform:uppercase;text-decoration:none;white-space:nowrap;
  color:var(--hero-nav);font-weight:500;transition:color .15s,background .15s}
.nav-links .nav-group-menu a:hover,.nav-links .nav-group-menu a:focus-visible{color:var(--ink);
  background:rgba(255,255,255,.06)}
.nav-links .nav-group-menu a[aria-current="page"]{color:var(--jb)}

/* Phone menu: a heading with its items beneath, never a second disclosure. */
.nav-menu .nav-menu-group{padding-bottom:8px}
.nav-menu .nav-menu-group-label{margin:0;padding:15px 2px 2px;font-family:var(--head);font-size:12px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--hero-nav);opacity:.78}
.nav-menu .nav-menu-group ul{list-style:none;margin:0;padding:0 0 0 14px;display:flex;flex-direction:column}
.nav-menu .nav-menu-group li{border-bottom:0}
.nav-menu .nav-menu-group a{padding:11px 2px 11px 14px;font-size:13px}
/* ⚠ NO-WRAP ONLY WHERE THE LINKS ARE SHOWN, NOT EVERYWHERE. flex items shrink by
   default, so once Keynotes made five links the buttons were squeezed narrower than
   their own labels and "Member login" broke across two lines, taking the bar from 47px
   to 68px. Stopping them shrinking fixes that above the breakpoint and BREAKS the phone,
   where the row is only wide enough because "Work with me" is allowed to wrap: pinned
   to one line it ran off the right edge instead. Wrapping is the phone's escape valve,
   so it keeps it. Above 900px there are no links to steal room from anyway. */
@media (min-width:1020px){
  .nav-cta{flex:0 0 auto}
  .nav-cta .btn{white-space:nowrap;flex:0 0 auto}
}

/* ── Hero, with the Vimeo plate behind it ────────────────────────────────── */
/* ⚠ NO `isolation` AND NO NEGATIVE z-index ON THE MEDIA PLATE. This is the whole
   reason the hero video appeared broken for hours. `isolation:isolate` here plus
   `z-index:-2` on .hero-media painted the iframe BEHIND its own parent's background:
   the embed loaded, Vimeo reported ready, opacity went to 1, and nothing was visible.
   It reads exactly like a blocked embed and it is not one. This now matches the
   stacking that works on mainstage.pro: plate at 0, scrim at 1, content at 2. */
/* ⚠ NOT STICKY. THE PAGE SCROLLS NORMALLY. This was `position:sticky;top:0`, which
   pinned the whole hero - video, headline and all - for the entire page, so every
   section after it rose over a stationary frame. The effect was never what was wanted
   (David, 2026-09-29) and it produced a real defect on the way: the incoming section's
   hard top edge sawed through "STRONGER SALES TEAMS" and held there for 340px of
   scrolling, because the copy was pinned under the thing sliding over it. Unpinning is
   the fix, and it also deletes the class of bug rather than papering over it - there is
   no overlap to get wrong once the page just scrolls. */
.hero{position:relative;height:100vh;height:100svh;min-height:100vh;min-height:100svh;
  display:flex;align-items:center;padding:70px 0 156px;overflow:hidden;
  box-shadow:inset 0 -1px var(--line)}
.hero-media{position:absolute;inset:0;z-index:0;overflow:hidden;background:var(--ground)}
.hero-media iframe{position:absolute;top:50%;left:50%;width:100vw;height:56.25vw;
  min-height:100%;min-width:177.78vh;transform:translate(-50%,-50%);border:0;
  pointer-events:none}
.hero-video-mobile{display:none}
/* ⚠ THE SCRIM IS A REAL ELEMENT, NOT A PSEUDO-ELEMENT ON THE PLATE. Same reason as
   above: it is what works on the other two sites, and it keeps the stacking flat and
   obvious — plate 0, overlay 1, content 2. Any headline over moving video fails
   contrast somewhere in the loop, so this is not decoration. */
.hero-overlay{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,rgba(8,8,8,.70) 0%,rgba(8,8,8,.52) 40%,rgba(8,8,8,.94) 100%)}
.hero-in{position:relative;z-index:2;max-width:var(--max);margin:0 auto;padding:0 24px;width:100%;
  transform:translateY(-24px)}
.hero h1{font-size:clamp(33px,5.6vw,68px);width:max-content;max-width:17ch;margin-bottom:34px;
  position:relative;text-wrap:balance}
.hero h1 > span{display:block;white-space:nowrap}
/* ── The blue rule under "changing market." ──────────────────────────────────
   It draws itself once on load, stays, and then carries the same travelling light as
   the call to action, at the same 4.2s pace, so the page has one rhythm rather than three.

   ⚠ IT IS A DRAWN ELEMENT, NOT text-decoration, because text-decoration's width cannot
   be animated. The declarations below stay only for the narrow fallback at the bottom.
   ⚠ NO TRAVELLING LIGHT HERE, ON PURPOSE. It was tried and cut on sight (David,
   2026-09-25): on a 3px rule it reads as a flicker, and it competed with the button and
   the chat launcher, which are the two things that are supposed to pull the eye. The rule
   draws once and then holds still. */
.hero h1 em{font-style:normal;color:inherit;position:relative;
  text-decoration-color:var(--jb);text-decoration-thickness:.075em;text-underline-offset:.1em;
  text-decoration-skip-ink:none}
.hero h1 em::after{
  content:"";position:absolute;left:0;right:0;bottom:-.06em;height:.075em;pointer-events:none;
  background:var(--jb);
  transform:scaleX(0);transform-origin:left center;
  animation:hero-rule-draw .85s cubic-bezier(.2,.7,.2,1) .3s forwards}
@keyframes hero-rule-draw{to{transform:scaleX(1)}}
@media (prefers-reduced-motion:reduce){
  /* The rule is information, so it stays. Only the drawing stops. */
  .hero h1 em::after{animation:none;transform:scaleX(1)}
}
/* Under 360px the headline is allowed to wrap, and a single absolute rule cannot follow
   two line boxes. There, text-decoration does the job it is good at. */
@media (max-width:360px){
  .hero h1 em{text-decoration-line:underline}
  .hero h1 em::after{display:none}
}
.hero .eyebrow{color:var(--hero-soft)}
.hero-in > p:not(.eyebrow){font-size:clamp(17px,2vw,20px);color:var(--hero-soft);max-width:62ch;margin:0 0 32px}
.hero-copy-mobile{display:none}
.hero-cta{display:flex;gap:12px;flex-wrap:wrap}
.hero-cta .btn{height:44px;min-width:192px;justify-content:center}
.hero-text-link{display:inline-flex;align-items:center;min-height:44px;color:var(--ink);
  font:500 12.5px/1 var(--head);letter-spacing:.14em;text-transform:uppercase;
  text-underline-offset:5px;text-decoration-color:var(--jb)}
.hero-text-link:hover{color:var(--jb)}
.hero-ask{color:var(--hero-soft);border-color:var(--hero-nav);background:rgba(8,8,8,.18)}

/* ── Logo strip ──────────────────────────────────────────────────────────── */
.proof{position:absolute;inset:auto 0 0;z-index:2;overflow:hidden;padding:20px 0 24px}
.proof-in{width:100%}
.proof .lede{font-family:var(--body);font-size:12px;letter-spacing:.16em;color:var(--ink);
  text-transform:uppercase;text-align:center;max-width:none;margin:0 24px 16px;
  text-shadow:0 1px 12px rgba(0,0,0,.95)}
.proof-marquee{overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
.proof-marquee:focus-visible{outline:2px solid var(--jb);outline-offset:-2px}
.proof-marquee-track{display:flex;width:max-content;will-change:transform;
  animation:proof-marquee 52s linear infinite}
.proof-marquee:hover .proof-marquee-track,
.proof-marquee:focus .proof-marquee-track{animation-play-state:paused}
.proof-logo-set{display:flex;align-items:center;gap:32px;flex:none;
  list-style:none;margin:0;padding:0 32px 0 0}
.proof-logo-set li{display:grid;place-items:center;flex:0 0 144px;height:40px}
.proof-logo-set img{width:auto;max-width:144px;max-height:40px;object-fit:contain;
  filter:grayscale(1) brightness(0) invert(1);opacity:.80}
@keyframes proof-marquee{to{transform:translateX(-50%)}}

/* ⚠ THIS NO LONGER STACKS ANYTHING, AND THE BACKGROUND IS WHY IT STAYS. It used to
   lift every section above a pinned hero so the page rose over it as one frame. The
   hero is not pinned any more, so nothing here overlaps anything and the z-index is
   inert. The rule is kept for the opaque background, which these sections do rely on,
   and for the positioned context their own absolutely-placed children expect. Do not
   read it as a stacking trick that is still doing work. */
.hero ~ section:not(.assistant-section),
.hero ~ .stats,
.hero ~ footer{position:relative;z-index:3;background:var(--ground)}

/* ── Local AI assistant prototype ───────────────────────────────────────── */
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;
  margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;
  white-space:nowrap!important;border:0!important}
section.assistant-section{position:fixed;inset:0;z-index:120;display:grid;place-items:center;
  padding:clamp(16px,4vw,48px);background:rgba(3,7,13,.82);backdrop-filter:blur(12px);
  overflow:auto}
.assistant-section[hidden]{display:none}
.assistant-section.is-open{animation:assistant-backdrop-in .2s ease-out both}
.assistant-section.is-open .assistant-panel{animation:assistant-reveal .24s ease-out both}
@keyframes assistant-backdrop-in{from{background:rgba(3,7,13,0);backdrop-filter:blur(0)}to{background:rgba(3,7,13,.82);backdrop-filter:blur(12px)}}
@keyframes assistant-reveal{from{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:none}}
.assistant-panel{width:min(760px,100%);max-height:calc(100dvh - clamp(32px,8vw,96px));
  margin:auto;padding:0;overflow:auto;overscroll-behavior:contain;background:
  radial-gradient(800px 420px at 12% 0%,rgba(48,136,243,.18),transparent 68%),
  linear-gradient(180deg,var(--assistant-ground),var(--ground));
  border:1px solid rgba(48,136,243,.32);box-shadow:0 28px 90px rgba(0,0,0,.62)}
.assistant-topline{position:absolute;top:16px;right:16px;z-index:3}
.assistant-stepbar{display:flex;align-items:center;gap:14px;padding:24px 64px 0 24px}
.assistant-progress{font-family:var(--head);font-size:10px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted);white-space:nowrap}
.assistant-back,.assistant-restart{padding:4px 0;border:0;border-bottom:1px solid var(--line-2);
  background:transparent;color:var(--hero-nav);font:500 10px/1.2 var(--head);
  letter-spacing:.12em;text-transform:uppercase;cursor:pointer}
.assistant-back:hover,.assistant-back:focus-visible,
.assistant-restart:hover,.assistant-restart:focus-visible{border-color:var(--jb);color:var(--ink)}
.assistant-close{display:grid;place-items:center;width:36px;height:36px;flex:none;padding:0;
  border:0;border-radius:var(--r);background:transparent;color:var(--hero-nav);
  font:300 25px/1 var(--body);cursor:pointer;transition:color .18s,background .18s}
.assistant-close:hover,.assistant-close:focus-visible{border-color:var(--jb);color:var(--jb)}
.assistant-thread{border-bottom:1px solid rgba(48,136,243,.20)}
.assistant-turn{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;padding:24px 32px 32px;border-top:0}
.assistant-turn-ai{background:rgba(48,136,243,.055)}
.assistant-turn.is-new{animation:assistant-turn-in .24s ease-out both}
@keyframes assistant-turn-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.assistant-message{width:100%;max-width:none;min-width:0}
.assistant-message h2{max-width:none;font-size:clamp(20px,2.4vw,24px);margin:0 0 12px}
.assistant-message > p{max-width:68ch;margin:0 0 16px;color:var(--hero-nav);font-size:14px;line-height:1.6}
.assistant-intro{margin-bottom:24px!important}
.assistant-paths{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.assistant-paths button{display:flex;flex-direction:column;justify-content:center;min-height:112px;padding:20px;
  border:1px solid var(--line-2);border-radius:var(--r);background:var(--assistant-raise);color:var(--ink);
  text-align:left;cursor:pointer;transition:border-color .18s,background .18s,transform .18s}
.assistant-paths button:hover,.assistant-paths button:focus-visible{border-color:var(--jb);
  background:rgba(48,136,243,.10);transform:translateY(-2px)}
.assistant-paths strong{font:500 18px/1.2 var(--head);letter-spacing:.04em;text-transform:uppercase}
.assistant-paths span{margin-top:8px;color:var(--hero-nav);font-size:12.5px;line-height:1.45}
.assistant-ai-disclosure{display:flex;align-items:center;gap:7px;margin:0 0 12px!important;color:var(--jb)!important;
  font:500 10px/1.2 var(--body)!important;letter-spacing:.1em;text-transform:uppercase}
.assistant-ai-disclosure span{width:7px;height:7px;background:var(--jb);box-shadow:0 0 14px rgba(48,136,243,.68)}
.assistant-lead-form{margin-top:20px}
.assistant-question-field{position:relative;display:block}
.assistant-question-field textarea{display:block;width:100%;min-height:120px;padding:16px 64px 16px 16px;border:1px solid var(--line-2);
  border-radius:var(--r);outline:0;resize:vertical;background:var(--raise);color:var(--ink);
  font:14.5px/1.55 var(--body);box-shadow:0 12px 36px rgba(0,0,0,.22);transition:border-color .18s,box-shadow .18s}
.assistant-question-field textarea:focus{border-color:var(--jb);box-shadow:0 12px 40px rgba(48,136,243,.12)}
.assistant-question-field textarea::placeholder,.assistant-lead-grid input::placeholder{color:var(--muted)}
.assistant-voice{position:absolute;right:8px;bottom:8px;display:grid;place-items:center;width:44px;height:44px;padding:0;
  border:1px solid var(--line-2);border-radius:var(--r);background:var(--assistant-raise);color:var(--hero-nav);
  cursor:pointer;transition:border-color .18s,background .18s,color .18s}
.assistant-voice[hidden]{display:none}
.assistant-voice svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.assistant-voice:hover,.assistant-voice:focus-visible{border-color:var(--jb);color:var(--ink)}
.assistant-voice.is-listening{border-color:var(--jb);background:var(--jb);color:var(--ink);
  box-shadow:0 0 0 4px rgba(48,136,243,.14)}
.assistant-voice-status{min-height:18px;margin:6px 0 0;color:var(--hero-nav);font-size:10.5px;line-height:1.45}
.assistant-field-label{margin:20px 0 8px!important;color:var(--hero-nav)!important;font:500 11px/1.3 var(--body)!important}
.assistant-lead-grid{display:grid;grid-template-columns:.8fr 1.25fr 1fr;gap:8px}
.assistant-lead-grid-two{grid-template-columns:.8fr 1.4fr}
/* ⚠ THE REP COUNT GETS ITS OWN ROW BECAUSE IT DECIDES THE OUTCOME. It is the one answer
   that picks whose calendar the visitor lands on, so on the team booking flow it is asked
   first and sits full width above the contact fields rather than tucked in as a fourth
   box. Collapses with the rest of the grid at the narrow breakpoint. */
.assistant-lead-grid .assistant-field-wide{grid-column:1 / -1}
.assistant-lead-grid label{display:block}
.assistant-lead-grid label > span{display:block;margin:0 0 5px;color:#fff;font-size:10.5px;line-height:1.3}
.assistant-lead-grid label em{font-style:normal;color:#fff}
.assistant-lead-grid input{display:block;width:100%;height:44px;padding:0 12px;border:1px solid var(--line-2);
  border-radius:var(--r);outline:0;background:var(--assistant-raise);color:var(--ink);font:13px/1 var(--body)}
.assistant-lead-grid select{display:block;width:100%;height:44px;padding:0 42px 0 12px;
  appearance:none;-webkit-appearance:none;border:1px solid var(--line-2);border-radius:var(--r);outline:0;
  background-color:var(--assistant-raise);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8' viewBox='0 0 14 8'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%233088F3' stroke-width='2'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;color:var(--ink);font:13px/1 var(--body);cursor:pointer}
.assistant-lead-grid select:invalid{color:var(--muted)}
.assistant-lead-grid select option{background:var(--assistant-raise);color:var(--ink)}
.assistant-lead-grid input:focus,.assistant-lead-grid select:focus{border-color:var(--jb);
  box-shadow:0 0 0 2px rgba(48,136,243,.14)}
.assistant-form-end{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:16px}
.assistant-form-end-single{justify-content:flex-end}
.assistant-form-end .btn{height:44px;flex:none}
.assistant-local-note{margin:12px 0 0!important;color:var(--muted)!important;font-size:10.5px!important;line-height:1.45!important}
.assistant-form-end .assistant-local-note{max-width:42ch;margin:0!important}
.assistant-status{min-height:18px;margin:8px 0 0;color:var(--hero-nav);font-size:11.5px;line-height:1.45}
.assistant-consent{margin:10px 0 0!important;color:var(--muted)!important;font-size:10.5px!important;line-height:1.45!important}
.assistant-consent a{color:var(--hero-nav);text-decoration:underline;text-underline-offset:2px}
.assistant-form-end .btn:disabled{cursor:wait;opacity:.7}
.assistant-outcome-label{margin:0 0 6px!important;color:var(--jb)!important;font-family:var(--head);
  font-size:10px;letter-spacing:.14em;text-transform:uppercase}
.assistant-guidance{max-width:68ch!important;margin:0 0 12px!important;color:var(--hero-nav)!important;
  font-size:14px!important;line-height:1.65!important}
.assistant-answer-note{margin:0!important;color:var(--muted)!important;font-size:10.5px!important;line-height:1.45!important}
.assistant-handoff{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-top:24px;
  padding-top:20px;border-top:1px solid var(--line-2)}
.assistant-handoff > div{display:flex;flex-direction:column;gap:4px}
.assistant-handoff strong{color:var(--ink);font:500 15px/1.3 var(--head);letter-spacing:.03em;text-transform:uppercase}
.assistant-handoff span{color:var(--muted);font-size:11px;line-height:1.4}
.assistant-handoff .btn{height:44px;flex:none;justify-content:center}

section{padding:96px 0}
/* ⚠ SCOPED, NOT A CHANGE TO THE GLOBAL SECTION RULE. 96px is right for the marketing
   sections on the home page, where each block is a separate idea. On an index the
   search box is the first thing a visitor reaches for and 96px of empty ground pushed
   it most of a fold down, directly under a header that had just been halved for the
   same reason. Bottom padding stays generous: the pager sits there. */
.index-body{padding-top:34px;padding-bottom:72px}
.sec-head{display:flex;flex-direction:column;align-items:flex-start;gap:16px;
  flex-wrap:wrap;margin-bottom:42px}
/* `solo` keeps short, content-led sections compact beneath their cards while preserving
   the same 16px heading-to-body rhythm as every other stacked section header. */
.sec-head.solo{gap:16px;margin-bottom:26px}
.sec-head.solo h2{flex:none;max-width:none}
.sec-head.solo p{flex:none;max-width:66ch;margin:0}
.sec-foot{display:flex;justify-content:center;margin-top:36px}
.sec-head h2{font-size:clamp(26px,3.6vw,42px);flex:none;max-width:none;margin:0}
.sec-head p{color:var(--ink-2);max-width:72ch;margin:0;font-size:15.5px}
.sec-head .btn{flex:none}

/* ── Service cards ───────────────────────────────────────────────────────── */
.svc{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:2px;
  background:var(--line)}
.svc article{position:relative;background:var(--raise-2);padding:38px 30px 32px;display:flex;
  flex-direction:column;gap:14px;border-top:3px solid var(--jb);transition:background .2s,border-color .2s,transform .2s}
.svc article:hover{background:#24252b;border-top-color:#78b8ff;transform:translateY(-3px)}
.svc .n{font-family:var(--head);font-size:20px;letter-spacing:.16em;color:var(--jb)}
.svc h3{font-size:36px}
.svc p{color:var(--ink-2);font-size:15.5px;margin:0;flex:1}
.svc a{font-family:var(--head);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink);text-decoration:none;border-bottom:1px solid var(--jb);
  padding-bottom:3px;align-self:flex-start}
.svc .svc-featured{background:linear-gradient(145deg,#2379dd,#155bb1);border-top-color:#8cc3ff}
.svc .svc-featured:hover{background:linear-gradient(145deg,#3088f3,#1767c9)}
.svc .svc-featured .n,.svc .svc-featured p,.svc .svc-featured a{color:#fff}
.svc-tag{position:absolute;right:22px;top:22px;padding:6px 9px;border:1px solid rgba(255,255,255,.45);
  color:#fff;font:500 10px/1 var(--head);letter-spacing:.16em;text-transform:uppercase}
.home-content-actions{gap:12px;flex-wrap:wrap}

/* ── Post + episode cards ────────────────────────────────────────────────
   Same component for both. David's brief: thumbnail, title, published date,
   short description, click through to the article or episode page. */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(310px,100%),1fr));gap:26px}
/* min(310px,100%): on a 320px phone a fixed 310px column plus the page padding ran 14px
   past the screen. Capping the column at the container width keeps one full-width card. */
.card{background:var(--raise);border:1px solid var(--line);border-radius:var(--r);
  display:flex;flex-direction:column;text-decoration:none;overflow:hidden;
  transition:border-color .2s,transform .2s}
.card:hover{border-color:var(--jb);transform:translateY(-3px)}
.card:focus-visible{outline:2px solid var(--jb);outline-offset:2px}
/* ⚠ ART IS GENERATED, NOT STOCK. No real thumbnails exist yet. A deterministic
   gradient keyed to the title is honest about that and still reads as designed;
   dropping in stock photography would misrepresent what has been built. */
.thumb{aspect-ratio:16/9;position:relative;display:grid;place-items:center;
  border-bottom:1px solid var(--line)}
.thumb .mark{font-family:var(--head);font-size:13px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--hero-soft);z-index:1;text-align:center;
  padding:0 18px}
.thumb::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,transparent 45%,rgba(0,0,0,.55))}
.card-b{padding:20px 22px 24px;display:flex;flex-direction:column;gap:9px;flex:1}
.meta{display:flex;gap:10px;align-items:center;font-size:11.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted)}
.meta .dot{width:3px;height:3px;background:var(--muted);flex:none}
.card h3{font-size:18.5px;text-transform:none;font-family:var(--head);font-weight:500;
  letter-spacing:0;line-height:1.26}
/* ⚠ THE CARD DATE AND SUMMARY ARE NOT THE SAME GREY AS EVERYTHING ELSE, AND THE DATE
   DOES NOT WRAP. On the raise surface the shared --muted date and --ink-2 summary both
   read as grey-on-black and the card's own content sank into it; the date also broke
   across two lines. White for the date, --hero-nav for the summary: both are existing
   brand tokens, and the summary stays a step below the title so the hierarchy holds.
   Scoped to .card so the featured hero, which carries guest and runtime beside its
   date, keeps its quieter row. */
.card .meta{color:var(--ink)}
.card .meta span{white-space:nowrap}
.card p{margin:0;font-size:14.5px;color:var(--hero-nav);line-height:1.58;flex:1}
.card .go{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--jb);
  font-family:var(--head)}

/* ── Numbers band ────────────────────────────────────────────────────────── */
.stats{border-block:1px solid var(--line);background:#0B0B0D}
.stats-in{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  max-width:var(--max);margin:0 auto}
.stat{padding:40px 24px;border-right:1px solid var(--line)}
.stat:last-child{border-right:0}
.stat b{display:block;font-family:var(--head);font-size:clamp(30px,4vw,46px);
  font-weight:600;line-height:1;color:#fff}
.stat span{display:block;margin-top:9px;font-size:12.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted)}

/* ── Membership band — the Uscreen handoff ───────────────────────────────── */
.member{background:
  linear-gradient(120deg,rgba(31,10,232,.30),rgba(48,136,243,.10) 46%,transparent 62%),var(--raise);
  border:1px solid var(--line);padding:46px 40px;display:flex;gap:34px;
  align-items:center;flex-wrap:wrap}
.member div{flex:1 1 420px}
.member h2{font-size:clamp(24px,3vw,34px);margin-bottom:12px}
.member p{color:var(--ink-2);margin:0;max-width:56ch}

footer{border-top:1px solid var(--line);padding:56px 0 40px;background:#0B0B0D}
body.has-sticky-work footer{padding-bottom:128px}
.foot-in{display:flex;gap:34px;flex-wrap:wrap;justify-content:space-between;
  max-width:var(--max);margin:0 auto;padding:0 24px}
.foot-in p{color:var(--muted);font-size:13.5px;margin:0}
.foot-links{display:flex;gap:20px;flex-wrap:wrap;list-style:none;padding:0;margin:0}
.foot-links a{font-size:13px;color:var(--ink-2);text-decoration:none}
.foot-links a:hover{color:var(--jb)}
.social-links{display:flex;align-items:center;gap:8px}
.social-link{display:flex;align-items:center;justify-content:center;width:44px;height:44px;
  padding:0;text-decoration:none;transition:transform .15s,filter .15s}
.social-link img{width:28px;height:28px;object-fit:contain;flex:none}
.social-link:hover{transform:translateY(-2px);filter:brightness(1.08)}
.social-link:focus-visible{outline:2px solid var(--jb);outline-offset:2px}
/* ── G2 verified badge ────────────────────────────────────────────────────
   The accessible link label keeps the G2 relationship explicit without repeating the
   badge copy visually below the image.
   ⚠ RESERVE THE HEIGHT. The badge arrives from g2.com after our own paint, so without
   min-height the hero copy below it jumps once the image lands. */
/* ⚠ A DIV, NOT A PARAGRAPH, AND THAT IS LOAD-BEARING. As a <p> it was caught by
   `.hero-in > p:not(.eyebrow)` and `.foot-in p`, both more specific than this class, which
   zeroed the margin and styled the badge as hero body copy. The gap under the CTA measured
   0px on production until it stopped being a paragraph.
   ⚠ 32px MATCHES THE HERO'S OWN RHYTHM, the same bottom margin its paragraphs carry, so the
   badge reads as its own element rather than something stuck to the button. */
.g2-badge{display:flex;flex-direction:column;align-items:flex-start;gap:7px;margin:32px 0 0}
.g2-badge a{display:block;line-height:0;min-height:48px}
.g2-badge img{display:block;height:auto;max-width:220px}
/* G2 injects a second instructional caption under the self-explanatory badge. Keeping the
   pill and its accessible link label preserves the trust signal without the mobile clutter. */
.g2-badge [data-g2-verified-badge-caption]{display:none!important}
/* Older cached nav markup can still contain the retired caption briefly after a release. */
.g2-badge-note{display:none}
.g2-badge-foot{margin:0;align-items:flex-start}
.g2-badge-foot a{min-height:40px}
.g2-badge-foot img{max-width:180px}
@media (max-width:620px){
  /* The hero stacks here, so the badge follows the "See the training programs" link rather
     than the button, and 18px read as attached to it. */
  .g2-badge{margin-top:26px}
}

/* ── Post-hero work invitation ───────────────────────────────────────────── */
.sticky-work{position:fixed;inset:auto 0 0;z-index:58;border-top:2px solid var(--jb);
  background:rgba(7,17,31,.97);backdrop-filter:blur(14px);box-shadow:0 -18px 48px rgba(0,0,0,.34);
  transform:translateY(calc(100% + 2px));visibility:hidden;pointer-events:none;
  transition:transform .28s cubic-bezier(.2,.8,.2,1),visibility 0s linear .28s}
.sticky-work.is-visible{transform:translateY(0);visibility:visible;pointer-events:auto;
  transition-delay:0s}
body.assistant-modal-open .sticky-work,body.kn-open .sticky-work{transform:translateY(calc(100% + 2px));visibility:hidden;
  pointer-events:none}
.sticky-work-in{display:grid;grid-template-columns:minmax(0,1fr) auto 44px;align-items:center;
  gap:24px;min-height:76px;max-width:var(--max);margin:0 auto;padding:12px 24px}
.sticky-work-copy{min-width:0}
.sticky-work-copy strong{display:block;font:500 17px/1.2 var(--head);letter-spacing:.04em;
  text-transform:uppercase;color:var(--ink)}
.sticky-work-copy span{display:block;margin-top:3px;color:var(--hero-nav);font-size:12px;line-height:1.4}
.sticky-work .btn{height:44px;min-width:184px;justify-content:center}
.sticky-work-dismiss{display:grid;place-items:center;width:44px;height:44px;padding:0;border:0;
  background:transparent;color:var(--hero-nav);font:300 25px/1 var(--body);cursor:pointer;
  transition:color .18s,background .18s}
.sticky-work-dismiss:hover,.sticky-work-dismiss:focus-visible{color:var(--jb);
  background:rgba(48,136,243,.08)}

/* ⚠ FIVE NAV ITEMS DO NOT FIT THE DEFAULT SPACING JUST ABOVE THE BREAKPOINT. Adding
   Keynotes pushed the masthead buttons from one line to two between 900px and roughly
   1050px: measured at 901px the CTA grew from 47px tall to 68px. Raising the breakpoint
   instead would have been worse, because below 900px the links are hidden and nothing
   replaces them, so that band would have lost its navigation altogether. Closing the
   gaps buys back the ~21px needed and nothing moves on a full-width screen. */
/* ⚠ 1240px, NOT 1050px, SINCE MEMBERSHIP MADE IT SEVEN LINKS (2026-10-13). Measured
   with the seventh link in place: seven at full 13px type are 650px wide and the bar
   needs 1241px to hold them, so between 1050 and 1240 the untightened type overflowed
   the masthead. Tightened they are 518px and the bar's intrinsic width is 980px, which
   is why the burger now takes over below 1020px rather than 900px. If an eighth link
   is ever added, re-measure both numbers; do not assume this still fits. */
@media (max-width:1240px){
  .nav-in{gap:18px}
  /* 5 uppercase links at .1em tracking were 438px of the 901px available, most of it
     letter-spacing. Tightening the type here buys back more room than closing the gaps
     did, and at this width nobody is reading the tracking. */
  .nav-links{gap:15px}
  .nav-links a{font-size:11.5px;letter-spacing:.05em}
  .nav-group-toggle{font-size:11.5px;letter-spacing:.05em}
  .nav-cta{gap:8px}
}

/* ── Mobile nav menu ───────────────────────────────────────────────────────
   Below 900px .nav-links is hidden, and until now nothing replaced it: the phone had
   no way to reach any section. The burger and this panel are that replacement. Both
   are desktop-invisible, so nothing above the breakpoint changes. */
.nav-burger{display:none;flex:0 0 auto;width:42px;height:42px;padding:0;
  background:transparent;border:1px solid var(--line-2);border-radius:var(--r);
  cursor:pointer;align-items:center;justify-content:center;flex-direction:column;gap:5px}
.nav-burger span{display:block;width:18px;height:2px;background:var(--ink);
  transition:transform .2s ease,opacity .15s ease}
.nav-burger:hover{border-color:var(--jb)}
.nav-burger:focus-visible{outline:2px solid var(--jb);outline-offset:2px}
/* Open state: the bars become a cross, so the control says what it will do next. */
#nav.menu-open .nav-burger span:nth-child(1){transform:translateY(7px) rotate(45deg)}
#nav.menu-open .nav-burger span:nth-child(2){opacity:0}
#nav.menu-open .nav-burger span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

.nav-menu{border-top:1px solid var(--line);background:var(--ground)}
.nav-menu[hidden]{display:none}
.nav-menu ul{list-style:none;margin:0;padding:6px 24px 14px;display:flex;
  flex-direction:column}
.nav-menu li{border-bottom:1px solid var(--line)}
.nav-menu li:last-child{border-bottom:0}
.nav-menu a{display:block;padding:15px 2px;font-family:var(--head);font-size:14px;
  letter-spacing:.12em;text-transform:uppercase;color:var(--hero-nav);
  text-decoration:none}
.nav-menu a:hover,.nav-menu a:focus-visible{color:var(--ink)}
.nav-menu a[aria-current="page"]{color:var(--jb)}
.nav-menu .nav-menu-cta{padding:16px 0 10px;border-bottom:0}
.nav-menu .nav-menu-cta .btn{display:flex;width:100%;height:44px;padding:0 20px;
  justify-content:center;color:#fff}
.nav-menu .nav-menu-socials{padding:0 0 12px;border-bottom:0}
.nav-menu .nav-menu-socials .social-links{justify-content:center}
.nav-menu .nav-menu-socials .social-link{display:flex;width:44px;height:44px;padding:0}

@media (max-width:1019px){
  .nav-burger{display:flex}
  .nav-in{gap:12px}
  .nav-cta{display:none}
  .nav-burger{margin-left:auto}
}

/* ⚠ SPLIT FROM THE LAYOUT RULES BELOW ON PURPOSE. .nav-links hides when the burger
   appears, which is now 1019px; section padding and the hero sizing are page layout and
   still belong at 900px. Moving the whole block would have reflowed the hero on every
   tablet. */
@media (max-width:1019px){
  .nav-links{display:none}
}
@media (max-width:900px){
  section{padding:64px 0}
  .hero{height:100svh;min-height:100svh;padding:70px 0 136px}
  .hero-in{transform:translateY(-12px)}
  .stat{border-right:0;border-bottom:1px solid var(--line)}
}
@media (max-width:640px){
  /* ⚠ STACKED EXPLICITLY, NOT LEFT TO WRAP. These two fit side by side at 390px and
     wrap at 375px, so whether the secondary link sat beside the button or beneath it
     came down to the handset. Same layout on every phone now. flex-direction alone is
     not enough: the 50% basis below becomes a HEIGHT once the axis turns, which
     stretches the button down the column. */
  .hero-cta{gap:10px;flex-direction:column;align-items:flex-start}
  .hero-cta .btn{min-width:0;flex:0 0 auto;width:auto;padding-inline:12px}
  .proof{padding:16px 0}
  /* ⚠ SMALLER SO MORE THAN TWO FIT. At 375px the 112px logos left 2.84 visible, so the
     band read as three oversized wordmarks sliding past with a cut-off one at each
     edge. That is what "cluttered" was. Smaller marks mean roughly four at a time and
     the strip reads as a trust band rather than a carousel. */
  .proof-logo-set{gap:18px;padding-right:18px}
  .proof-logo-set li{flex:0 0 92px;height:32px}
  .proof-logo-set img{max-width:92px;max-height:24px}
  section.assistant-section{padding:12px}
  .assistant-panel{max-height:calc(100dvh - 24px)}
  .assistant-topline{top:10px;right:10px}
  .assistant-stepbar{gap:10px;padding:18px 52px 0 16px}
  .assistant-turn{grid-template-columns:1fr;gap:8px;padding:20px 16px 24px}
  .assistant-message h2{font-size:clamp(15px,4.6vw,20px)}
  .assistant-paths{grid-template-columns:1fr}
  .assistant-paths button{min-height:88px;padding:16px}
  .assistant-question-field textarea{min-height:104px;padding:14px}
  .assistant-lead-grid,.assistant-lead-grid-two{grid-template-columns:1fr}
  .assistant-form-end{align-items:stretch;flex-direction:column-reverse;gap:10px}
  .assistant-form-end .btn{width:100%;justify-content:center}
  .assistant-handoff{align-items:stretch;flex-direction:column;gap:16px}
  .assistant-handoff .btn{width:100%}
  body.has-sticky-work footer{padding-bottom:calc(120px + env(safe-area-inset-bottom))}
  .sticky-work-in{grid-template-columns:minmax(0,1fr) 44px;gap:8px;min-height:68px;
    padding:12px max(16px,env(safe-area-inset-right)) calc(12px + env(safe-area-inset-bottom))
      max(16px,env(safe-area-inset-left))}
  .sticky-work-copy{display:none}
  .sticky-work .btn{width:100%;min-width:0}
}
@media (max-width:480px){
  /* Mobile hero: one clear message, one primary action, and one compact proof point.
     The 44px target remains intact while type and vertical gaps step down. */
  .hero{padding-bottom:120px}
  .hero-in{transform:translateY(-16px)}
  .hero .eyebrow{font-size:10px;letter-spacing:.15em;margin-bottom:14px}
  .hero h1{font-size:30px;line-height:1.02;max-width:100%;margin-bottom:20px}
  .hero-in > p:not(.eyebrow){font-size:16px;line-height:1.48;max-width:34ch;margin-bottom:24px}
  .hero-copy-desktop{display:none}
  .hero-copy-mobile{display:inline}
  .hero-cta{gap:8px}
  /* Keep the 44px accessible target, but stop the primary CTA from reading as a
     full-width banner on a phone. Still auto width; the column above puts the
     secondary link underneath without widening this. */
  .hero-cta .btn{flex:0 0 auto;width:auto;min-width:0;padding-inline:20px;
    font-size:11px;letter-spacing:.11em}
  .proof-logo-set{gap:14px;padding-right:14px}
  .proof-logo-set li{flex:0 0 76px;height:28px}
  .proof-logo-set img{max-width:76px;max-height:20px}
  .hero-text-link{min-height:36px;font-size:11px;letter-spacing:.13em}
  .g2-badge{margin-top:16px}
  /* G2 owns the pill's inline markup. Scaling its link is the least invasive way to
     reduce the visual weight while retaining a 46px-tall clickable proof point. */
  .hero .g2-badge a{transform:scale(.88);transform-origin:left top;margin-bottom:-6px}
  /* Keep the logo proof bar above the fixed 48px assistant control instead of letting
     the two compete for the same bottom-right space. */
  .proof{bottom:calc(80px + env(safe-area-inset-bottom));padding:12px 0}
  .proof .lede{font-size:10px;line-height:1.45;margin-bottom:10px}

  /* Compact footer: a two-column link index is easier to scan and substantially shorter
     than the wrapped desktop row. The badge retains a 44px link box while its artwork is
     visually reduced below the hero treatment. */
  footer{padding:32px 0 24px}
  body.has-sticky-work footer{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
  .foot-in{display:grid;grid-template-columns:1fr;gap:16px}
  .foot-in p{font-size:12px}
  .foot-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 24px;width:100%}
  .foot-links a{display:flex;align-items:center;min-height:32px;font-size:11.5px;line-height:1.25}
  .g2-badge-foot{min-height:44px}
  .g2-badge-foot a{width:184px;min-height:44px}
  .g2-badge-foot a > span{width:125%!important;transform:scale(.8);transform-origin:left top}
  .g2-badge-foot img{max-width:150px}
}
@media (max-width:600px){
  .hero-video-desktop{display:none}
  .hero-media .hero-video-mobile{display:block;width:56.25vh;height:100vh;
    width:56.25svh;height:100svh;min-width:100vw;min-height:177.78vw}
}
@media (max-width:360px){
  .hero h1{font-size:26px;width:auto}
  .hero h1 > span{white-space:normal}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *{transition:none!important;animation:none!important}
  .hero-media iframe{display:none}
  .proof-marquee{overflow-x:auto;-webkit-mask-image:none;mask-image:none;scrollbar-width:none}
  .proof-marquee-track{animation-name:none!important;transform:none}
  .proof-logo-set[aria-hidden="true"]{display:none}
}


/* ── Interior pages ─────────────────────────────────────────────────────────
   The homepage opens on a full-bleed hero. Interior pages open on a compact
   masthead instead: enough weight to feel like a real page, not so much that
   someone reading three articles has to scroll past a landing page each time. */
/* ⚠ 96px TOP IS A FLOOR, NOT A TASTE CALL. The nav is position:fixed at 70px, so any
   less and the eyebrow slides under it. The old 150/54 put the first episode card
   roughly a full viewport down on a 900px screen - on an index whose whole job is
   showing 482 episodes, the fold was spent on a headline the visitor already chose.
   Padding alone could not halve it (70px is spoken for), so the type scale comes down
   with it: h1 60->42 and the copy 19->17, which is what actually closes the gap. */
.page-head{padding:88px 0 24px;position:relative;isolation:isolate;
  border-bottom:1px solid var(--line)}
.page-head::before{content:"";position:absolute;inset:0;z-index:-1;
  background:
    radial-gradient(760px 380px at 12% 0%,rgba(48,136,243,.20),transparent 64%),
    radial-gradient(620px 420px at 88% 96%,rgba(31,10,232,.24),transparent 66%),
    var(--ground)}
/* Content indexes use a broader, brighter atmosphere behind the
   intro column. The glow stays transparent so the masthead remains one continuous
   split composition rather than turning the copy into a separate card. */
.podcast-index .page-head::before,.newsletter-index .page-head::before,
.blog-index .page-head::before{
  background:
    radial-gradient(ellipse 60% 100% at 14% 46%,rgba(48,136,243,.43) 0%,
      rgba(32,91,166,.24) 38%,transparent 74%),
    linear-gradient(104deg,rgba(48,136,243,.12) 0%,transparent 54%),
    radial-gradient(620px 420px at 88% 96%,rgba(31,10,232,.31),transparent 66%),
    var(--ground)}
.page-head .eyebrow{margin-bottom:10px}
.page-head h1{font-size:clamp(28px,3.3vw,38px);max-width:26ch;margin-bottom:10px}
.page-head p{font-size:clamp(14px,1.4vw,16px);color:var(--ink-2);max-width:72ch;margin:0;
  line-height:1.5}
.page-head .count{margin-top:12px;font-family:var(--head);font-size:12px;
  letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}

/* Filter row on the index pages. */
.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:34px}
.filters input{flex:1 1 260px;min-width:0;font:inherit;font-size:15px;padding:12px 15px;
  background:var(--raise);border:1px solid var(--line);border-radius:var(--r);
  color:var(--ink)}
.filters input:focus{outline:none;border-color:var(--jb)}
.filters input::placeholder{color:var(--muted)}
.chipbar{display:flex;gap:8px;flex-wrap:wrap}
.chipbar button{font-family:var(--head);font-size:12px;letter-spacing:.12em;
  text-transform:uppercase;padding:10px 15px;background:transparent;color:var(--ink-2);
  border:1px solid var(--line-2);border-radius:var(--r);cursor:pointer;
  transition:border-color .15s,color .15s,background .15s}
.chipbar button:hover{border-color:var(--jb);color:var(--ink)}
.chipbar button[aria-pressed="true"]{background:var(--jb);border-color:var(--jb);color:#fff}
.empty{padding:52px 0;color:var(--muted);text-align:center}

/* ── About ─────────────────────────────────────────────────────────────── */
.prose{max-width:68ch}
.prose p{font-size:17px;line-height:1.72;color:var(--ink-2);margin:0 0 1.15em}
.prose p strong{color:var(--ink);font-weight:600}
.split{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:start}
.rail h3{font-size:15px;letter-spacing:.14em;margin-bottom:16px;color:var(--jb)}
.rail ul{list-style:none;padding:0;margin:0 0 34px}
.rail li{padding:11px 0;border-bottom:1px solid var(--line);font-size:15px;
  color:var(--ink-2);display:flex;gap:12px}
.rail li:last-child{border-bottom:0}
.rail li b{color:var(--ink);font-weight:600;flex:none}
.values{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:2px;
  background:var(--line)}
.values div{background:var(--raise);padding:26px 22px}
.values b{display:block;font-family:var(--head);font-size:17px;letter-spacing:.02em;
  text-transform:uppercase;margin-bottom:7px}
.values span{font-size:14.5px;color:var(--ink-2)}
@media (max-width:900px){ .split{grid-template-columns:1fr;gap:40px} }

/* ── Episode landing page ───────────────────────────────────────────────── */
.ep-guest{font-size:19px;color:var(--jb);margin:6px 0 0;font-weight:600}
.ep-page{max-width:74ch}
.ep-player{width:100%;margin-bottom:30px}
/* ⚠ THE SUMMARY IS THE ANSWER, SO IT LOOKS LIKE ONE. Set larger than body copy and
   rule-marked, because it is both the first thing a reader sees and the block an
   answer engine is most likely to lift. */
.ep-summary{border-left:3px solid var(--jb);padding:2px 0 2px 22px;margin-bottom:38px}
.ep-summary p{font-size:17.5px;line-height:1.6;color:var(--ink);margin:0}
.ep-page h2{font-size:clamp(21px,2.6vw,27px);margin:42px 0 16px}
.ep-takeaways{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:14px}
.ep-takeaways li{padding-left:26px;position:relative;font-size:16.5px;line-height:1.6;
  color:var(--hero-nav)}
.ep-takeaways li::before{content:"";position:absolute;left:0;top:.62em;width:9px;height:9px;
  background:var(--jb)}
.ep-topics{display:flex;gap:8px;flex-wrap:wrap;margin-top:30px}
.ep-topics .tag{font-family:var(--head);font-size:11px;letter-spacing:.1em;
  text-transform:uppercase;padding:5px 10px;border:1px solid var(--line);color:var(--ink-2)}
.ep-faq{display:flex;flex-direction:column;gap:24px}
/* ⚠ FAQ IS OPEN MARKUP, NOT AN ACCORDION. Google requires marked-up questions to be
   visible to a user, and hiding them behind a toggle to save space is the fastest way
   to turn valid FAQ schema into a structured-data problem. */
.ep-faq h3{font-size:17.5px;text-transform:none;letter-spacing:0;margin:0 0 8px;
  color:var(--ink);font-family:var(--head);font-weight:600}
.ep-faq p{margin:0;color:var(--hero-nav);font-size:16px;line-height:1.65}
.ep-transcript{border-top:1px solid var(--line);background:#0B0B0D;padding:0 0 34px}
.ep-transcript details{max-width:var(--max);margin:0 auto;padding:0 24px}
.ep-transcript summary{cursor:pointer;list-style:none;padding:26px 0;
  font-family:var(--head);font-size:14px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-2);display:flex;justify-content:space-between;align-items:center}
.ep-transcript summary::-webkit-details-marker{display:none}
.ep-transcript summary:hover{color:var(--jb)}
.ep-transcript summary::after{content:"+";font-size:22px;color:var(--jb)}
.ep-transcript details[open] summary::after{content:"\2212"}
.ep-transcript summary:focus-visible{outline:2px solid var(--jb);outline-offset:3px}
.tx-note{font-size:13.5px;color:var(--muted);max-width:70ch;margin:0 0 24px;
  padding-bottom:20px;border-bottom:1px solid var(--line)}
.tx-body{max-width:72ch;max-height:60vh;overflow-y:auto;padding-right:12px}
.tx-body p{font-size:15.5px;line-height:1.75;color:var(--hero-nav);margin:0 0 1.3em}
.card-flat{cursor:default}
.card-flat:hover{transform:none;border-color:var(--line)}
.go-off{color:var(--muted);opacity:.75}

/* ── Newsletter article page ────────────────────────────────────────────── */
/* ⚠ THE HEADLINE AND THE PROSE ARE ONE COLUMN, AND IT SITS IN THE MIDDLE. Reading
   width is 70ch; the container around it is 1180. Narrowing only the body left the
   title in a different column from the text under it, and pinning the body to the left
   instead left half the page empty on a wide screen. Both now take the same 70ch and
   the same auto margins, so they line up with each other and centre together, which is
   what the reference page does.

   ⚠ SCOPED WITH :has(), NOT WITH A CLASS ON THE HEADER, because three different
   builders emit these pages (blog, newsletter, and whatever writes the next one) and a
   class is a thing each of them has to remember. The body column is the page's own
   declaration that it is an article; the header follows it. Episode pages use
   .ep-page and are untouched. */
.nl-page{max-width:70ch;margin-left:auto;margin-right:auto}
body:has(.nl-page) .page-head .wrap{max-width:70ch}
.nl-body{font-size:17.5px;line-height:1.72;color:var(--hero-nav)}
.nl-body p{margin:0 0 1.35em}
.nl-body h2,.nl-body h3,.nl-body h4{color:var(--ink);font-family:var(--head);
  letter-spacing:.01em;text-transform:none;margin:1.9em 0 .6em;line-height:1.25}
.nl-body h2{font-size:26px}.nl-body h3{font-size:21px}.nl-body h4{font-size:18px}
.nl-body a{color:var(--jb);text-decoration:underline;text-underline-offset:3px}
.nl-body a:hover{color:var(--jb-deep)}
.nl-body strong{color:var(--ink);font-weight:600}
.nl-body ul,.nl-body ol{margin:0 0 1.35em;padding-left:1.3em}
.nl-body li{margin:0 0 .5em}
.nl-body blockquote{margin:1.6em 0;padding:2px 0 2px 22px;border-left:3px solid var(--jb);
  color:var(--ink)}
/* ⚠ IMAGES ARE HOTLINKED FROM KIT AND GOOGLE. Nothing guarantees their aspect ratio,
   so they are constrained rather than trusted, and a broken one collapses instead of
   stretching the column. */
.nl-body img{max-width:100%;height:auto;display:block;margin:1.6em 0}
.nl-body hr{border:0;border-top:1px solid var(--line);margin:2.2em 0}
.nl-cta{margin:60px 0 0;padding:34px;border:1px solid var(--line);background:#0B0B0D}
.nl-cta h2{font-size:20px;margin:0 0 8px}
.nl-cta p{color:var(--ink-2);font-size:15.5px;margin:0 0 20px}
.nl-back{margin:36px 0 0;font-size:14px}
.nl-back a{color:var(--muted)}
.nl-back a:hover{color:var(--jb)}


/* ── Episode hero: copy left, video right ──────────────────────────────────
   ⚠ THE GRID ONLY SPLITS WHEN THERE IS A VIDEO. 153 of 362 episodes predate the
   YouTube era, and a two-column grid with an empty right cell leaves the headline
   stranded in a half-width column for no reason. .has-video is set by the builder
   only when a video id parsed, so those pages keep the full-width single column. */
.ep-head-in{display:block}
.ep-head.has-video .ep-head-in{display:grid;gap:38px;align-items:center;
  grid-template-columns:minmax(0,1.05fr) minmax(0,1fr)}
.ep-head-copy{min-width:0}
.ep-head h1{max-width:20ch}

/* ⚠ ASPECT-RATIO ON THE WRAPPER, NOT A HEIGHT ON THE IFRAME. A fixed height gives
   letterboxing at every width except the one it was measured at. */
.ep-video{position:relative;aspect-ratio:16/9;border-radius:var(--r);overflow:hidden;
  background:#000;border:1px solid var(--line-2);box-shadow:0 18px 50px rgba(0,0,0,.45)}
.ep-video iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}

.ep-links{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px}
.ep-link{display:inline-flex;align-items:center;gap:9px;padding:10px 16px;
  font-family:var(--head);font-size:12px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink);background:rgba(255,255,255,.06);border:1px solid var(--line-2);
  border-radius:var(--r);text-decoration:none;
  transition:background .15s,border-color .15s,transform .15s}
.ep-link:hover{background:rgba(255,255,255,.12);border-color:var(--jb);
  transform:translateY(-1px)}
.ep-link svg,.ep-link img{flex:none}
.ep-link img{width:18px;height:18px;object-fit:contain}
.ep-link.sp:hover{border-color:#1db954}
.ep-link.ap:hover{border-color:#a855f7}
.ep-link.yt:hover{border-color:#ff0033}

@media (max-width:860px){
  /* Preserve the episode's reading order on small screens: title and listening links,
     then the full video, then the description below the hero. Stretching the flex
     children is essential because the iframe is absolutely positioned and otherwise
     gives its wrapper no intrinsic width. */
  .ep-head.has-video .ep-head-in{display:flex;flex-direction:column;align-items:stretch;
    gap:24px}
  .ep-head.has-video .ep-video{order:initial;width:100%}
}
@media (max-width:480px){
  /* On phones the brand marks already name the destinations. Keep the links as
     full-size touch targets while removing the repeated visible labels. The text
     remains in the DOM, so each icon retains its accessible name. */
  .ep-links{gap:8px}
  .ep-link{width:44px;height:44px;padding:0;justify-content:center;gap:0;font-size:0;
    border:0;background:transparent}
  .ep-link:hover{border:0;background:transparent;transform:none}
  .ep-link img{width:28px;height:28px;object-fit:contain}
}


/* ── Pagination ────────────────────────────────────────────────────────────
   ⚠ THE PAGER SITS BELOW THE GRID AND IS HIDDEN AT ONE PAGE. A control that only
   ever says "1" is furniture; the JS unhides it once there is somewhere to go. */
.pager{position:static;display:flex;gap:6px;flex-wrap:wrap;align-items:center;justify-content:center;
  margin:38px 0 4px}
.pager button{font-family:var(--head);font-size:12px;letter-spacing:.1em;
  text-transform:uppercase;min-width:40px;padding:10px 12px;cursor:pointer;
  background:transparent;color:var(--ink-2);border:1px solid var(--line-2);
  border-radius:var(--r);transition:border-color .15s,color .15s,background .15s}
.pager button:hover:not(:disabled){border-color:var(--jb);color:var(--ink)}
.pager button:disabled{opacity:.35;cursor:default}
.pager button[aria-current="page"]{background:var(--jb);border-color:var(--jb);color:#fff}
.pg-gap{color:var(--muted);padding:0 2px}
@media (max-width:560px){
  /* Numbers go, arrows stay: on a phone the useful action is next, not page 11. */
  .pager .pg-n:not([aria-current="page"]){display:none}
}


/* ── Episode page: related episodes and summary size ───────────────────── */
/* ⚠ THE INNER <section> WAS INHERITING THE GLOBAL 96px. `.ep-sec` has no rules of its
   own, so the related block picked up `section{padding:96px 0}` while sitting inside
   .ep-relwrap - 96px of it stacked on the transcript's own 70px bottom, leaving about
   a third of a fold of empty ground between a collapsed summary row and the carousel.
   The wrapper owns the outer spacing; the inner section owns none. */
.ep-relwrap{padding:0 0 84px}
.ep-relwrap .ep-sec{padding:34px 0 0}
.ep-rel-controls{display:flex;justify-content:center;gap:8px;margin:24px 0 0}
.ep-rel-control{display:inline-grid;place-items:center;width:44px;height:44px;padding:0;
  border:1px solid var(--line-2);border-radius:var(--r);background:transparent;
  color:var(--ink);font-size:22px;line-height:1;cursor:pointer;
  transition:background .18s,border-color .18s,color .18s,opacity .18s}
.ep-rel-control:hover:not(:disabled){background:var(--raise-2);border-color:var(--jb);
  color:#fff}
.ep-rel-control:focus-visible{outline:2px solid var(--jb);outline-offset:3px}
.ep-rel-control:disabled{opacity:.3;cursor:default}
.ep-rel-controls[hidden]{display:none}
.ep-all{margin:22px 0 0}
.ep-all a{font-family:var(--head);font-size:12px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--jb);text-decoration:none}


/* ── Related episodes: a scrolling row of the same cards the grids use ──────
   ⚠ SCROLL-SNAP, AND THE TRACK IS THE ONLY THING THAT SCROLLS. The page body must
   never scroll sideways, so the overflow lives on this element and nowhere above it.
   With three cards they fit and no scrollbar appears; the fourth is what makes it a
   carousel, which is exactly the rule David asked for and falls out of `auto`. */
.ep-rel-track{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(276px,1fr);
  gap:18px;overflow-x:auto;overscroll-behavior-x:contain;
  scroll-snap-type:x proximity;padding:2px 2px 14px;margin:0 -2px;
  scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}
.ep-rel-track > .card{scroll-snap-align:start}
.ep-rel-track::-webkit-scrollbar{height:8px}
.ep-rel-track::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:99px}
.ep-rel-track::-webkit-scrollbar-track{background:transparent}
/* The blurb is a preview, not the summary: two lines, then it stops. */
.ep-rel-track .card p{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;color:var(--hero-nav)}
.ep-rel-track .card h3{font-size:16.5px}
@media (max-width:640px){
  .ep-rel-track{grid-auto-columns:minmax(232px,1fr);gap:14px}
}


/* ── About hero ────────────────────────────────────────────────────────────
   ⚠ THE PHOTO IS SECOND IN THE SOURCE AND FIRST ON A PHONE. Reading order puts the
   heading before the portrait, which is right for a screen reader and for a crawler;
   `order` moves it visually on narrow screens, where a face is the better opening. */
.about-head-in{display:grid;gap:44px;align-items:center;
  grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)}
.about-copy{min-width:0}
.about-photo{width:100%;height:auto;display:block;max-width:420px;margin-left:auto}
@media (max-width:820px){
  .about-head-in{grid-template-columns:1fr;gap:28px;display:flex;flex-direction:column}
  .about-photo{order:-1;max-width:300px;margin:0}
}

/* About story: the purpose statement leads, with the room image carrying the human
   proof beside it. About John remains a readable prose column below rather than being
   squeezed into the split. */
/* ⚠ THIS IS THE FIRST SECTION ON THE PAGE NOW, SO IT CARRIES THE HEAD'S CLEARANCE. The
   About hero was removed on John's note of 2026-10-27, and the nav is position:fixed over
   a body with no top padding, so the old 72px left the eyebrow one pixel under the nav.
   88px is what .page-head uses, which is the clearance every other interior page gets. */
.about-story{padding-top:88px}
.about-why-grid{display:grid;grid-template-columns:minmax(0,.88fr) minmax(0,1.12fr);
  gap:64px;align-items:center}
.about-why-copy{min-width:0}
.about-why-copy h2{font-size:clamp(40px,5vw,64px);margin:0 0 24px}
.about-why-copy>p:last-child{max-width:30ch;margin:0;font-size:clamp(18px,2vw,22px);
  line-height:1.6;color:var(--hero-soft)}
.about-why-media{margin:0;aspect-ratio:16/10;align-self:center;overflow:hidden;border:1px solid var(--line-2);
  background:var(--raise)}
.about-why-media img{width:100%;height:100%;object-fit:cover;object-position:center}
.about-john-grid{display:grid;grid-template-columns:minmax(320px,.82fr) minmax(0,1.18fr);
  gap:64px;align-items:center;margin-top:80px;padding-top:48px;border-top:1px solid var(--line)}
.about-story .about-john-grid:first-child{margin-top:0;padding-top:0;border-top:0}
.about-john-media{position:relative;margin:0;overflow:hidden;border:1px solid var(--line-2);background:var(--raise)}
.about-john-media img{width:100%;height:auto;aspect-ratio:4/5;display:block;object-fit:cover;object-position:center}
.ai-image-note{position:absolute;right:8px;bottom:8px;padding:4px 6px;border:1px solid rgba(255,255,255,.25);
  background:rgba(0,0,0,.62);font:500 9px/1 var(--body);letter-spacing:.04em;color:var(--ink);text-align:left}
.about-john-copy{margin:0;padding:0;border:0}
.about-john-copy h2{font-size:30px;margin:0 0 24px}
@media (max-width:1024px){
  .about-why-grid,.about-john-grid{gap:40px}
}
@media (max-width:768px){
  .about-why-grid,.about-john-grid{grid-template-columns:1fr;gap:40px}
  .about-why-copy>p:last-child{max-width:40ch}
  .about-why-media{aspect-ratio:16/10;max-height:680px}
  .about-john-grid{margin-top:64px;padding-top:40px}
  .about-john-media{max-height:680px}
}
@media (max-width:480px){
  .about-why-grid{gap:32px}
  .about-why-copy h2{margin-bottom:16px}
  .about-john-grid{gap:24px;margin-top:48px;padding-top:32px}
  /* This portrait is the first visual on the page. A shallow, face-led crop lets the
     About eyebrow, heading and opening copy enter the first viewport instead of making
     the user scroll past a full portrait before learning who John is. */
  .about-story .about-john-media{height:224px;max-height:224px}
  .about-story .about-john-media img{height:100%;aspect-ratio:auto;object-position:center 26%}
}

/* ── Sales leadership advisory ─────────────────────────────────────────────
   LAYOUT: Split 50/50 hero + 3-column roadmap + bordered offer + proof carousel.
   STRUCTURE: The current learning-page system, adapted to a leadership engagement.
   ARCHETYPES: Split 50/50 + Bordered Content Columns + Testimonial 3-up. */
.learning-page.advisory-page .advisory-hero h1{max-width:18ch;font-size:clamp(42px,4.15vw,58px)}
/* ⚠ TUNED TO THIS PHOTO, AND IT CHANGED SHAPE. The first hero was landscape and John
   sat right of centre, so it was pushed to 72% to keep him in a 4:5 frame. This one is a
   2:3 portrait with him centred and his face about a quarter down. The box crops
   vertically at both breakpoints, hard at 16/10 where only about 42% of the height
   survives, so the vertical figure is what matters and 'center' cropped his head off
   there. Horizontal is now irrelevant: the image is narrower than both boxes. */
.advisory-page .advisory-hero-media img{object-position:50% 20%}
.advisory-page .advisory-hero-media::before{content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(90deg,transparent 62%,color-mix(in srgb,var(--ground) 18%,transparent));
  pointer-events:none}

.advisory-start-links{display:flex;align-items:center;gap:16px 24px;flex-wrap:wrap;
  margin-top:32px;padding-top:24px;border-top:1px solid var(--line-2)}
.advisory-start-links span{font-family:var(--head);font-size:12px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--hero-nav)}
.advisory-start-links a{color:var(--jb);font-size:14px;font-weight:600;
  text-underline-offset:4px}

.advisory-process-section{background:var(--raise)}
.advisory-process-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.advisory-process-card{display:flex;flex-direction:column;min-height:368px;padding:32px;
  border:1px solid var(--line-2);border-top:3px solid var(--jb);
  background:linear-gradient(145deg,var(--raise-2),var(--raise))}
.advisory-process-top{display:flex;align-items:flex-start;justify-content:space-between;
  gap:24px;margin-bottom:56px}
.advisory-process-top .n{font-family:var(--head);font-size:48px;line-height:1;color:var(--jb)}
.advisory-process-top span:last-child{padding-top:8px;font-family:var(--head);font-size:11px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--hero-nav)}
.advisory-process-card h3{margin:0 0 16px;font-size:30px;font-weight:500;color:var(--ink)}
.advisory-process-card p{margin:0;color:var(--hero-nav);font-size:15.5px;line-height:1.68}

.advisory-included-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(320px,.75fr);
  gap:56px;align-items:start}
.advisory-included-list{display:grid;grid-template-columns:repeat(2,1fr);gap:0 32px;
  list-style:none;margin:0;padding:0;border-top:1px solid var(--line-2)}
.advisory-included-list li{position:relative;display:flex;flex-direction:column;gap:6px;
  min-height:112px;padding:24px 16px 24px 24px;border-bottom:1px solid var(--line-2)}
.advisory-included-list li::before{content:"";position:absolute;left:0;top:31px;
  width:8px;height:8px;background:var(--jb)}
.advisory-included-list strong{font-family:var(--head);font-size:18px;font-weight:500;
  letter-spacing:.02em;text-transform:uppercase;color:var(--ink)}
.advisory-included-list span{color:var(--hero-nav);font-size:14.5px;line-height:1.5}
.advisory-offer-card{position:sticky;top:96px;padding:40px 36px;
  border:1px solid var(--jb);border-top:3px solid var(--jb);
  background:linear-gradient(160deg,color-mix(in srgb,var(--jb) 15%,var(--raise-2)),var(--raise))}
.advisory-offer-card h3{margin:0 0 20px;font-size:30px;font-weight:500;line-height:1.12;
  color:var(--ink)}
.advisory-offer-card h3 span{display:block;margin-top:10px;font-size:48px;color:var(--jb)}
.advisory-offer-card>p:not(.eyebrow){margin:0 0 28px;color:var(--hero-nav);
  font-size:15.5px;line-height:1.68}
.advisory-offer-card .btn{width:100%;height:44px;justify-content:center}
.advisory-offer-card small{display:block;margin-top:16px;color:var(--hero-nav);
  font-size:12px;line-height:1.5}

.advisory-page .tcard .tav{display:grid;place-items:center;background:var(--jb);color:var(--ink);
  font-family:var(--head);font-size:24px;font-weight:600;letter-spacing:.04em}
.advisory-page .tcard{min-height:430px}
.learning-page.advisory-page .testimonial-result{font-size:22px}
.advisory-story-grid .learning-story-media img{object-position:center 18%}
.advisory-final-cta{padding:0 0 clamp(48px,8vw,96px)}

@media (max-width:1024px){
  .learning-page.advisory-page .advisory-hero h1{font-size:clamp(40px,5.2vw,54px)}
  .advisory-process-card{min-height:400px;padding:28px}
  .advisory-process-top{margin-bottom:40px}
  .advisory-included-grid{gap:40px}
  .advisory-included-list{grid-template-columns:1fr}
}
@media (max-width:768px){
  .learning-page.advisory-page .advisory-hero h1{max-width:16ch}
  .advisory-page .advisory-hero-media img{object-position:50% 20%}
  .advisory-process-grid{grid-template-columns:1fr}
  .advisory-process-card{min-height:0}
  .advisory-process-top{margin-bottom:32px}
  .advisory-included-grid{grid-template-columns:1fr}
  .advisory-included-list{grid-template-columns:repeat(2,1fr)}
  .advisory-offer-card{position:static}
}
@media (max-width:480px){
  .learning-page.advisory-page .advisory-hero h1{font-size:36px}
  .advisory-start-links{align-items:flex-start;flex-direction:column;gap:12px}
  .advisory-process-card{padding:24px}
  .advisory-process-top .n{font-size:42px}
  .advisory-included-list{grid-template-columns:1fr}
  .advisory-offer-card{padding:32px 24px}
  .advisory-offer-card h3 span{font-size:42px}
  .learning-page.advisory-page .testimonial-result{font-size:20px}
}


/* ── Credentials (recognition / featured in) ───────────────────────────────
   ⚠ EQUAL-HEIGHT CARDS, LOGO BASELINED AT THE TOP. The logos are four different
   aspect ratios; giving the image row a fixed height is what stops three cards
   starting their text at three different points. */
.creds{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(248px,1fr))}
.cred{background:var(--raise);border:1px solid var(--line);border-radius:var(--r);
  padding:26px 24px 24px;display:flex;flex-direction:column;gap:10px;
  transition:border-color .2s,transform .2s}
.cred:hover{border-color:var(--jb);transform:translateY(-2px)}
.cred-logo{height:48px;display:flex;align-items:center;justify-content:flex-start;margin-bottom:12px}
.cred-logo img{display:block;width:auto;max-width:190px;object-fit:contain;object-position:left center;opacity:.92}
.cred-logo .brand-salesforce{height:46px}
.cred-logo .brand-forbes{height:38px}
.cred-logo .brand-linkedin{height:36px}
.cred-logo .brand-inc{height:38px}
.cred p{margin:0;font-size:14.5px;line-height:1.55;color:var(--ink-2)}
.cred p.cred-n{margin:0 0 4px;font-family:var(--head);font-size:clamp(30px,2.4vw,36px);
  font-weight:600;line-height:1;letter-spacing:.01em;color:var(--jb)}

/* Spam trap: off-screen rather than display:none, so form-filling bots still see it.
   aria-hidden and tabindex -1 keep people, including screen-reader users, out of it. */
.assistant-hp{position:absolute!important;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}

/* Consent bar. z-index 110 keeps it under the assistant panel (120) so opening the
   assistant never buries the prompt under a dialog the visitor cannot act on, and over
   everything else so it cannot be scrolled past and forgotten. */
.consent{position:fixed;left:0;right:0;bottom:0;z-index:110;
  display:flex;gap:18px;align-items:center;justify-content:center;flex-wrap:wrap;
  padding:16px 20px calc(16px + env(safe-area-inset-bottom));
  background:var(--raise);border-top:1px solid var(--line);
  font-family:var(--body);box-shadow:0 -10px 30px rgba(0,0,0,.45)}
.consent-text{margin:0;max-width:720px;color:var(--muted);font-size:14px;line-height:1.55}
.consent-text a{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.consent-actions{display:flex;gap:10px;flex:none}
/* A button that has to read as a link, because it sits mid-sentence in prose. */
.linklike{background:none;border:0;padding:0;font:inherit;color:inherit;
  text-decoration:underline;text-underline-offset:3px;cursor:pointer}
/* Full width on a phone so neither button is a thumb-stretch, and Decline is first in
   the DOM so it is never the harder one to reach. */
@media (max-width:640px){
  .consent{gap:12px}
  .consent-actions{width:100%}
  .consent-actions .btn{flex:1;justify-content:center}
}
@media (prefers-reduced-motion:no-preference){
  .consent{animation:consent-in .28s ease-out both}
  @keyframes consent-in{from{transform:translateY(100%)}to{transform:none}}
}
.assistant-turnstile:not(:empty){margin:12px 0 4px}

/* Steps 2 and 3: the heading breaks after the greeting and the sentence after it stays
   on one line. Phone headings scale with the screen so it fits; below 340px it wraps
   rather than overflow the card. */
.assistant-title-line{white-space:nowrap}
@media (max-width:340px){.assistant-title-line{white-space:normal}}

/* member-actions-phone-fix: the Member login / Browse the catalog row carries an inline
   flex:0 0 auto, so it kept both buttons side by side at 353px and pushed a 375px phone
   layout out to 418px (the fixed nav and sticky bar then stretched to match). On phones
   the row takes the full width and may shrink, so the buttons wrap instead. */
@media (max-width:640px){.member > div + div{flex:1 1 100% !important;min-width:0}}

/* ── Native booking: his real Zoom availability, drawn in our own chrome ──────
   Day pills then a grid of times, both keyboard-reachable and 44px tall so a thumb can
   hit them. The embedded Zoom frame below is only the fallback. */
.assistant-booking-meta{margin-bottom:14px!important}
.assistant-booking-days{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px;
  scrollbar-width:none;-webkit-overflow-scrolling:touch}
.assistant-booking-days::-webkit-scrollbar{display:none}
.assistant-day{flex:0 0 auto;display:grid;gap:2px;min-width:78px;min-height:58px;padding:9px 12px;
  border:1px solid var(--line-2);border-radius:var(--r);background:var(--assistant-raise);color:var(--hero-nav);
  font:500 11px/1.2 var(--body);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;
  transition:border-color .18s,color .18s,background .18s}
.assistant-day strong{color:var(--ink);font:600 14px/1.2 var(--head);letter-spacing:.01em;text-transform:none}
.assistant-day:hover,.assistant-day:focus-visible{border-color:var(--jb);color:var(--ink)}
.assistant-day.is-active{border-color:var(--jb);background:rgba(48,136,243,.12);color:var(--ink)}
.assistant-booking-times{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));
  gap:8px;margin-top:16px;max-height:min(46dvh,320px);overflow-y:auto}
.assistant-slot{min-height:44px;padding:11px 10px;border:1px solid var(--line-2);border-radius:var(--r);
  background:var(--assistant-raise);color:var(--ink);font:500 14px/1.2 var(--body);cursor:pointer;
  transition:border-color .18s,background .18s}
.assistant-slot:hover,.assistant-slot:focus-visible{border-color:var(--jb);background:rgba(48,136,243,.1)}
.assistant-booking-when{margin-bottom:18px!important;color:var(--ink)!important;font-size:15px!important}
.assistant-booking-when strong{font:600 17px/1.3 var(--head)}
.assistant-booking-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}
.assistant-booking-loading-text{color:var(--hero-nav)}
.assistant-field{display:block;margin-bottom:12px}
.assistant-field > span{display:block;margin-bottom:6px;color:var(--hero-nav);font:500 11px/1.3 var(--body)}
.assistant-field input,.assistant-field textarea{display:block;width:100%;padding:12px 14px;
  border:1px solid var(--line-2);border-radius:var(--r);outline:0;background:var(--assistant-raise);color:var(--ink);
  font:14.5px/1.5 var(--body);transition:border-color .18s}
.assistant-field input:focus,.assistant-field textarea:focus{border-color:var(--jb)}
@media (max-width:600px){
  .assistant-booking-times{grid-template-columns:repeat(auto-fill,minmax(92px,1fr));max-height:38dvh}
  .assistant-booking-actions .btn{flex:1 1 100%}
}

/* Booking calendar inside the modal: widen the panel so Zoom's three-column layout fits,
   and give the frame a real height instead of letting the modal collapse around it. */
.assistant-section.is-booking .assistant-panel{width:min(1100px,100%)}
.assistant-booking-frame{position:relative;width:100%;height:clamp(520px,68dvh,760px);
  border-radius:12px;overflow:hidden;background:#fff}
.assistant-booking-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.assistant-booking-loading{position:absolute;inset:0;display:grid;place-items:center;margin:0;
  color:#555;font-size:14px}
.assistant-booking-fallback{margin:10px 0 0!important;font-size:13px;color:var(--hero-nav)}
.assistant-booking-fallback a{color:inherit;text-decoration:underline}
@media (max-width:600px){.assistant-booking-frame{height:calc(100dvh - 190px)}}
/* ── stats-v2: the credibility bar ───────────────────────────────────────────
   Brand only: Oswald numbers, the three JB blues, square corners, near-black ground.
   The accent line draws in and the numbers count up once, when the bar is on screen. */
.stats-v2{position:relative;overflow:hidden;background:
  radial-gradient(55% 140% at 12% 0%,rgba(31,10,232,.20),transparent 62%),
  radial-gradient(45% 140% at 92% 100%,rgba(0,106,255,.14),transparent 62%),#0B0B0D}
.stats-v2 .stat{position:relative;padding:46px 28px 42px;transition:background-color .25s}
.stats-v2 .stat::before{content:"";position:absolute;left:28px;top:0;height:2px;width:0;
  background:linear-gradient(90deg,var(--jb-accent),var(--jb-deep),var(--jb));
  transition:width .9s cubic-bezier(.2,.7,.2,1)}
.stats-v2 .stat:nth-child(2)::before{transition-delay:.12s}
.stats-v2 .stat:nth-child(3)::before{transition-delay:.24s}
.stats-v2 .stat:nth-child(4)::before{transition-delay:.36s}
.stats-v2.is-in .stat::before{width:56px}
.stats-v2 .stat:hover{background-color:rgba(48,136,243,.06)}
.stats-v2 .stat-ico{display:block;width:26px;height:26px;margin-bottom:16px;fill:none;
  stroke:var(--jb);stroke-width:1.6;stroke-linecap:square;stroke-linejoin:miter}
.stats-v2 .stat b{font-size:clamp(44px,5.6vw,68px);line-height:1;color:var(--ink);
  font-variant-numeric:tabular-nums}
.stats-v2 .stat b span{display:inline;margin:0;font:inherit;letter-spacing:inherit;
  text-transform:none;color:inherit}
.stats-v2 .stat b .stat-sfx{margin-left:2px;color:var(--jb);
  background:linear-gradient(135deg,var(--jb),var(--jb-deep) 55%,var(--jb-accent));
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.stats-v2 .stat .stat-label{margin-top:12px;color:var(--hero-nav)}
@media (max-width:640px){
  .stats-v2 .stats-in{grid-template-columns:1fr 1fr}
  .stats-v2 .stat{padding:30px 18px 28px;border-bottom:1px solid var(--line)}
  .stats-v2 .stat:nth-child(odd){border-right:1px solid var(--line)}
  .stats-v2 .stat:nth-child(even){border-right:0}
  .stats-v2 .stat:nth-child(n+3){border-bottom:0}
  .stats-v2 .stat::before{left:18px}
  .stats-v2 .stat .stat-label{font-size:11px}
}
@media (prefers-reduced-motion:reduce){
  .stats-v2 .stat::before{transition:none;width:56px}
}

/* The booking button says a calendar is open: a live dot with a ring opening out of it.
   Same treatment as the chat widget's button, so the two read as one product.
   ⚠ NO ARROW HERE. .btn already ends every button on the site with the house square, and
   an arrow next to it gave the button two endings. The chat widget has no such square, so
   it keeps its arrow. */
.book-cta{display:inline-flex;align-items:center;gap:10px}
.book-live{position:relative;width:8px;height:8px;border-radius:50%;background:#7FE3A1;flex:0 0 auto}
.book-live::after{content:"";position:absolute;inset:-4px;border-radius:50%;
  border:1px solid rgba(127,227,161,.8);animation:book-ring 3.2s ease-out infinite}
@keyframes book-ring{0%{transform:scale(.6);opacity:.9}70%{transform:scale(2.1);opacity:0}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){
  .book-live::after{animation:none}
}

/* Zoom's calendar is another origin and keeps its own white face whatever we do here. The
   frame around it is ours: a card with the site's border and shadow, so it reads as a
   booking panel rather than a page from somewhere else. */
.assistant-booking-note{margin:0 0 10px!important;font-size:13px;color:var(--hero-nav)}
.assistant-booking-frame{background:#0B1220;border:1px solid rgba(48,136,243,.5);
  box-shadow:0 18px 50px rgba(0,0,0,.45)}
/* Same inversion as the chat widget's panel: Zoom's white page cannot be styled across an
   origin, so the frame is filtered instead. The photo and illustration invert with it. */
.assistant-booking-frame iframe{filter:invert(1) hue-rotate(180deg) contrast(.92) brightness(1.04)}
.assistant-booking-loading{color:var(--muted)}
@media (prefers-contrast:more){ .assistant-booking-frame iframe{filter:none} }

/* ── The shine on the primary call to action ─────────────────────────────────
   A point of light travels the button's edge: a conic gradient rotating behind
   the button, masked so only the 1px ring shows it.

   ⚠ ONE BUTTON PER SCREEN. This is a pointer, not a style. It is on the hero
   "Work with me" and on the sticky bar's copy of the same button, which replaces the
   hero once it has scrolled away, so only ever one of them is on screen. Nothing else
   gets it: a second shining button on the same screen points at neither.
   (The chat launcher beside the sticky bar is safe. Its dot only glows; the pulsing
   green dot is on the booking button INSIDE the chat panel, not the launcher.)

   ⚠ THE MASK IS TWO DECLARATIONS, NOT ONE. -webkit-mask-composite:xor and the
   standard mask-composite:exclude do the same job for different engines; drop
   either and the gradient floods the whole button instead of its edge. */
@property --shine-a{syntax:"<angle>";initial-value:0deg;inherits:false}
.btn.shine{position:relative;isolation:isolate}
.btn.shine::before{
  content:"";position:absolute;inset:-1px;padding:1px;border-radius:inherit;
  background:conic-gradient(from var(--shine-a),
    rgba(255,255,255,0) 0deg 52%,rgba(255,255,255,1) 70%,
    rgba(255,255,255,.45) 80%,rgba(255,255,255,0) 90% 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;
  mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude;
  /* The ring is 1px, so the highlight needs a bloom to carry over a photo ground.
     drop-shadow follows the masked arc, not the box, so only the lit part glows. */
  filter:drop-shadow(0 0 5px rgba(255,255,255,.55));
  animation:btn-shine 4.2s linear infinite;pointer-events:none}
@keyframes btn-shine{to{--shine-a:360deg}}
/* Browsers without @property never animate the angle, so they get a fixed lit
   hairline rather than a dead border. Same fallback the reduced-motion rule uses. */
@supports not (background:conic-gradient(from var(--shine-a),#000,#fff)){
  .btn.shine::before{background:linear-gradient(143deg,rgba(255,255,255,.6),
    rgba(255,255,255,0) 45%,rgba(255,255,255,.45));animation:none}
}
@media (prefers-reduced-motion:reduce){
  .btn.shine::before{animation:none;
    background:linear-gradient(143deg,rgba(255,255,255,.6),
      rgba(255,255,255,0) 45%,rgba(255,255,255,.45))}
}
/* ── Index hero: featured item, search band, grid/text views ───────────────
   The archive index now opens on the newest item rather than on a headline. An
   index whose job is to make 488 episodes findable was spending its best space
   restating what the visitor already clicked, and the newest episode — the one
   thing most people arrive for — sat in the top-left of a grid looking exactly
   like the 487 behind it.
   ⚠ SCOPE EVERY SELECTOR INSIDE .page-head. The page-head block already styles
   bare `p` and `h1` at 72ch and --ink-2, so an unscoped .feature p inherits the
   lede's width and colour and the card's summary runs the width of the header. */

.page-head.has-feature{padding-bottom:40px}
.head-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,430px);
  gap:46px;align-items:center}
.head-intro{min-width:0}
/* ⚠ COLLAPSE WHEN THERE IS NOTHING TO FEATURE. .has-feature is added only once a
   featured item has actually rendered, so a failed content.json (or an archive with
   no linked items yet) leaves the intro alone in a full-width column instead of
   sitting beside a 430px hole. */
.page-head:not(.has-feature) .head-grid{grid-template-columns:1fr}
@media(max-width:920px){
  .head-grid{grid-template-columns:1fr;gap:28px}
}

/* Where to listen. Show-level links, not episode links. */
.listen-row{display:flex;gap:16px;flex-wrap:wrap;margin-top:24px}
/* The platform marks are the labels. Their links retain invisible 44px hit areas and
   explicit accessible names, but no additional button chrome or repeated words. */
.podcast-index .page-head .listen{display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;color:var(--ink);text-decoration:none;background:transparent;
  border:0;transition:transform .15s,filter .15s}
.podcast-index .page-head .listen:hover{background:transparent;border:0;
  transform:translateY(-2px);filter:brightness(1.08)}
.podcast-index .page-head .listen img{width:36px;height:36px;object-fit:contain;flex:none}

/* The featured card. */
.page-head .feature{display:block;text-decoration:none;background:var(--raise);
  border:1px solid var(--line);overflow:hidden;
  transition:border-color .2s,transform .2s}
.page-head .feature:hover{border-color:var(--jb);transform:translateY(-3px)}
.page-head .feature:focus-visible{outline:2px solid var(--jb);outline-offset:2px}
.feature-media{aspect-ratio:16/9;position:relative;background-size:cover;
  background-position:center;border-bottom:1px solid var(--line)}
/* ⚠ TOP LEFT, NOT BOTTOM LEFT. His episode artwork carries the guest's name burned
   into the lower third of the image, so a badge along the bottom edge sat directly on
   top of it and both became unreadable. The top-left corner of this artwork is
   consistently empty. */
.feature-badge{position:absolute;left:0;top:0;font-family:var(--head);font-size:11px;
  letter-spacing:.18em;text-transform:uppercase;background:var(--jb);color:#fff;
  padding:7px 13px}
.feature-b{padding:19px 22px 22px;display:flex;flex-direction:column;gap:10px}
.page-head .feature-b h2{font-family:var(--head);font-weight:500;font-size:21px;
  line-height:1.24;text-transform:none;letter-spacing:0;color:var(--ink);margin:0;
  max-width:none}
.page-head .feature-b p{font-size:14.5px;line-height:1.5;color:var(--ink-2);margin:0;
  max-width:none;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden}
/* The shared .meta row does not wrap, so on a phone "Aug 24, 2026" broke across two
   lines mid-date while the separators stayed put. Wrap as whole facts. */
.page-head .feature-b .meta{margin:0;flex-wrap:wrap;row-gap:5px}
.page-head .feature-b .meta span{white-space:nowrap}
.feature-go{font-family:var(--head);font-size:12px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--jb)}

/* The three editorial landing pages use the brighter supporting hierarchy approved
   on the homepage. Body copy stays one step below headings, while metadata and
   controls remain visibly secondary without falling back to the old dim grey. */
:is(.blog-index,.newsletter-index,.podcast-index) .page-head p:not(.eyebrow),
:is(.blog-index,.newsletter-index,.podcast-index) .page-head .feature-b p,
:is(.blog-index,.newsletter-index,.podcast-index) .page-head .feature-b .meta,
:is(.blog-index,.newsletter-index,.podcast-index) .start-here-head p:last-child,
:is(.blog-index,.newsletter-index,.podcast-index) .archive-signup p,
:is(.blog-index,.newsletter-index,.podcast-index) .search-meta,
:is(.blog-index,.newsletter-index,.podcast-index) .sortflip,
:is(.blog-index,.newsletter-index,.podcast-index) .viewtoggle button,
:is(.blog-index,.newsletter-index,.podcast-index) .topic-chips a,
:is(.blog-index,.newsletter-index,.podcast-index) .text-row .d,
:is(.blog-index,.newsletter-index,.podcast-index) .pager button,
:is(.blog-index,.newsletter-index,.podcast-index) .pg-gap,
:is(.blog-index,.newsletter-index,.podcast-index) .search-field svg,
:is(.blog-index,.newsletter-index,.podcast-index) .search-field input::placeholder{
  color:var(--hero-nav)}

/* Search band: search, count, view toggle. */
.search-band{background:var(--raise);border-bottom:1px solid var(--line)}
.search-inner{display:flex;gap:16px;align-items:center;flex-wrap:wrap;
  padding-top:14px;padding-bottom:14px}
.search-field{flex:1 1 300px;min-width:0;position:relative;display:flex;
  align-items:center}
.search-field svg{position:absolute;left:14px;width:17px;height:17px;
  color:var(--muted);pointer-events:none}
.search-field input{width:100%;font:inherit;font-size:15px;padding:12px 15px 12px 42px;
  background:var(--ground);border:1px solid var(--line-2);border-radius:var(--r);
  color:var(--ink)}
.search-field input:focus{outline:none;border-color:var(--jb)}
.search-field input::placeholder{color:var(--muted)}
.search-meta{font-family:var(--head);font-size:12px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted);white-space:nowrap;margin:0}
.search-meta strong{color:var(--ink);font-weight:600}
/* ⚠ THE SORT IS STILL HERE, IT IS JUST NOT A PAIR OF BUTTONS ANY MORE. Newest and
   Oldest as two chips spent a third of this row saying something the second chip
   already implies. One control that states the current order and flips it. */
.sortflip{font:inherit;font-size:inherit;letter-spacing:inherit;text-transform:inherit;
  background:none;border:0;padding:0;color:var(--ink-2);cursor:pointer;
  border-bottom:1px dotted var(--line-2)}
.sortflip:hover{color:var(--jb);border-bottom-color:var(--jb)}
.viewtoggle{display:flex;border:1px solid var(--line-2);border-radius:var(--r)}
.viewtoggle button{display:inline-flex;align-items:center;gap:7px;
  font-family:var(--head);font-size:12px;letter-spacing:.12em;text-transform:uppercase;
  padding:10px 15px;background:transparent;border:0;color:var(--ink-2);cursor:pointer;
  transition:background .15s,color .15s}
.viewtoggle button+button{border-left:1px solid var(--line-2)}
.viewtoggle button:hover{color:var(--ink)}
.viewtoggle button[aria-pressed="true"]{background:var(--jb);color:#fff}
.viewtoggle svg{width:14px;height:14px;flex:none}

/* ── Phase 3: editorial indexes ───────────────────────────────────────
   Full-width editorial modules keep the three archives structurally consistent.
   Start Here stays hidden until an editor adds explicit slugs to start-here.json. */
.start-here{padding:clamp(48px,7vw,88px) 0;border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,var(--raise),var(--ground))}
.start-here[hidden]{display:none}
.start-here-head{max-width:720px;margin-bottom:32px}
.start-here-head h2{font-size:clamp(34px,4vw,50px);margin-bottom:14px}
.start-here-head p:last-child{margin:0;color:var(--ink-2);font-size:17px;line-height:1.6}
.start-here-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.start-here-grid .card{height:100%}

.newsletter-signup{display:flex;align-items:stretch;gap:10px;width:min(640px,100%);
  margin-top:24px}
.newsletter-signup input{flex:1 1 280px;min-width:0;height:44px;padding:0 14px;
  border:1px solid var(--line-2);border-radius:var(--r);background:var(--ground);
  color:var(--ink);font:500 15px/1 var(--body)}
.newsletter-signup input::placeholder{color:var(--muted)}
.newsletter-signup input:focus{outline:2px solid var(--jb);outline-offset:2px;
  border-color:var(--jb)}
.newsletter-signup .btn{height:44px;white-space:nowrap}
.newsletter-signup .formkit-fields{display:contents}
.newsletter-signup .formkit-alert{display:none;list-style:none;margin:0;padding:0}
.newsletter-signup .formkit-alert:not(:empty){display:block;flex:1 0 100%;color:#ffb4b4;font-size:14px}
.newsletter-signup .formkit-alert-success{width:100%;padding:13px 16px;border:1px solid var(--jb);background:rgba(52,145,255,.1);color:#fff;font-weight:700}
.page-head .signup-proof{margin-top:10px;font-size:13px;color:var(--hero-nav)}

.archive-signup{margin-top:64px;padding:32px;border:1px solid var(--line-2);
  border-top:3px solid var(--jb);background:var(--raise);display:grid;
  grid-template-columns:minmax(0,.8fr) minmax(420px,1.2fr);gap:40px;align-items:center}
.archive-signup h2{font-size:clamp(25px,3vw,34px);margin:0 0 8px}
.archive-signup p{margin:0;color:var(--ink-2);font-size:15px}
.archive-signup .eyebrow{margin-bottom:10px;color:var(--jb)}
.archive-signup .newsletter-signup{margin:0;width:100%}

.topic-chips{flex:1 0 100%;display:flex;gap:8px;flex-wrap:wrap;
  padding-top:2px;border-top:1px solid var(--line)}
.topic-chips a{display:inline-flex;align-items:center;min-height:36px;padding:7px 12px;
  border:1px solid var(--line-2);font-family:var(--head);font-size:11px;
  letter-spacing:.1em;text-transform:uppercase;text-decoration:none;color:var(--ink-2);
  transition:border-color .18s,color .18s,background .18s}
.topic-chips a:hover,.topic-chips a[aria-current="page"]{border-color:var(--jb);
  background:rgba(48,136,243,.12);color:var(--ink)}

.topic-page .page-head{padding-bottom:48px}
.topic-page .head-intro{max-width:780px}
.topic-page .page-head h1{font-size:clamp(38px,5vw,58px);max-width:18ch}
.topic-page .topic-back{display:inline-flex;margin-top:22px;font-family:var(--head);
  font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--jb);
  text-decoration:none}
.topic-page .topic-back:hover{color:var(--ink)}

@media(max-width:900px){
  .start-here-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .archive-signup{grid-template-columns:1fr;gap:24px}
}
@media(max-width:600px){
  .start-here-grid{grid-template-columns:1fr}
  .newsletter-signup{flex-direction:column}
  /* On a column flex container the desktop 280px flex-basis becomes vertical height.
     Pin the field to the same 44px control height as the button on phones. */
  .newsletter-signup input{flex:0 0 44px;width:100%}
  .newsletter-signup .btn{width:100%;justify-content:center}
  .archive-signup{padding:26px 22px;margin-top:48px}
  .topic-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}
  .topic-chips::-webkit-scrollbar{display:none}
  .topic-chips a{white-space:nowrap}
}
@media(max-width:480px){
  /* Archive counts may be wider than the 272px content column on a 320px phone. */
  .search-meta{white-space:normal;max-width:100%}
}

/* Text view: the whole archive as a scannable list rather than 30 thumbnails. */
.text-list{display:grid;grid-template-columns:repeat(3,1fr);gap:0 36px}
@media(max-width:1000px){.text-list{grid-template-columns:repeat(2,1fr);gap:0 28px}}
@media(max-width:660px){.text-list{grid-template-columns:1fr}}
.text-row{display:flex;align-items:baseline;gap:12px;padding:11px 2px;
  border-bottom:1px dashed var(--line);text-decoration:none;color:var(--ink);
  transition:color .15s}
.text-row:hover{color:var(--jb)}
.text-row:focus-visible{outline:2px solid var(--jb);outline-offset:2px}
.text-row .t{flex:1;font-size:14px;line-height:1.35;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.text-row .d{font-size:12px;color:var(--muted);white-space:nowrap;
  font-variant-numeric:tabular-nums}
/* Same rule as the flat card: no page, no link. */
.text-row.flat,.text-row.flat:hover{color:var(--muted);cursor:default}

/* ── Service pages: training packages and keynotes ─────────────────────────
   Built for /training and /keynotes, which are rebuilds of the two Shopify pages
   on learn.jbarrows.com. Everything reuses the existing vocabulary where one
   exists (.svc, .sec-head, .prose, .member, .ep-faq) so these pages are the same
   site; only the three genuinely new objects are defined here. */

/* Programme curricula: a long list of what is inside a course. Deliberately not
   bulleted dots - eleven dots in a card reads as a receipt. A hairline per row
   gives the same scannability and sits better with the square brand. */
.prog-list{list-style:none;margin:4px 0 0;padding:0;display:flex;flex-direction:column}
.prog-list li{padding:9px 0;border-bottom:1px solid var(--line);font-size:14px;
  line-height:1.4;color:var(--hero-nav)}
.prog-list li:last-child{border-bottom:0}

/* Package / pricing cards. */
/* ⚠ STRETCH, NOT START. With align-items:start each card was only as tall as its own
   content, so the three price blocks sat at three different heights - and the price is
   the one row a reader is actually comparing across. Equal-height cards plus flex:1 on
   the feature list push every price and button onto a common baseline. */
.pkg{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;align-items:stretch}
.pkg.pkg-two{grid-template-columns:repeat(2,1fr)}
.pkg > article{background:var(--raise);border:1px solid var(--line);padding:26px 24px 28px;
  display:flex;flex-direction:column;gap:12px;height:100%}
/* ⚠ THE EMPHASIS IS A BORDER, NOT A SCALE TRANSFORM. Lifting the popular card with
   transform:scale made its text render a fraction off the pixel grid next to its
   siblings, which on Oswald at this size reads as a different font weight. */
.pkg > article.pkg-pop{border-color:var(--jb);background:
  linear-gradient(180deg,rgba(48,136,243,.08),transparent 220px),var(--raise)}
.pkg-tag{align-self:flex-start;font-family:var(--head);font-size:10.5px;
  letter-spacing:.18em;text-transform:uppercase;padding:5px 10px;
  background:var(--line);color:var(--ink-2)}
.pkg > article.pkg-pop .pkg-tag{background:var(--jb);color:#fff}
.pkg > article h3{font-family:var(--head);font-weight:500;font-size:22px;line-height:1.15;
  letter-spacing:0;text-transform:none;color:var(--ink);margin:0}
.pkg > article > p{margin:0;font-size:14.5px;line-height:1.55;color:var(--hero-nav)}
.pkg > article ul{list-style:none;margin:2px 0 0;padding:0;display:flex;
  flex-direction:column;gap:9px;flex:1}
.pkg > article ul li{position:relative;padding-left:18px;font-size:14px;line-height:1.45;
  color:var(--hero-nav)}
.pkg > article ul li::before{content:"";position:absolute;left:0;top:7px;width:7px;
  height:7px;background:var(--jb)}
.pkg > article ul li strong{color:var(--ink);font-weight:600}
/* The price block. Tabular figures so three stacked prices line up on the dollar. */
.pkg-price{margin:6px 0 0!important;font-size:14px;line-height:1.7;color:var(--ink-2);
  font-variant-numeric:tabular-nums}
.pkg-price span{font-family:var(--head);font-size:26px;font-weight:600;color:var(--ink);
  letter-spacing:0;margin-right:4px}
.pkg-price small{display:block;margin-top:8px;font-size:12.5px;color:var(--muted);
  line-height:1.5}
.pkg > article .btn{align-self:flex-start;margin-top:6px}

/* Keynote topics: same shape as the homepage services grid, two across, with a
   duration line because the length is part of what is being chosen. */
.topics{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}
.topics > article{background:var(--raise);border:1px solid var(--line);padding:26px 24px}
.topics > article .n{font-family:var(--head);font-size:12px;letter-spacing:.2em;
  color:var(--jb);display:block;margin-bottom:12px}
.topics > article h3{font-family:var(--head);font-weight:500;font-size:21px;
  line-height:1.18;letter-spacing:0;text-transform:none;color:var(--ink);margin:0}
.topic-meta{margin:6px 0 12px!important;font-family:var(--head);font-size:11.5px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--jb)}
.topics > article p:not(.topic-meta){margin:0;font-size:14.5px;line-height:1.6;
  color:var(--hero-nav)}

/* Testimonials. */
.quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.quotes.quotes-two{grid-template-columns:repeat(2,1fr)}
.quotes blockquote{margin:0;background:var(--raise);border:1px solid var(--line);
  border-left:2px solid var(--jb);padding:24px 24px 22px;display:flex;
  flex-direction:column;gap:11px}
.quotes blockquote h3{font-family:var(--head);font-weight:500;font-size:16px;
  line-height:1.3;letter-spacing:0;text-transform:none;color:var(--ink);margin:0}
.quotes blockquote p{margin:0;font-size:14px;line-height:1.62;color:var(--hero-nav)}
.quotes blockquote footer{font-family:var(--head);font-size:12.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink);margin-top:auto;padding-top:4px}
.quotes blockquote footer span{display:block;margin-top:3px;letter-spacing:.12em;
  color:var(--muted);font-size:11px}
.quotes-more{margin-top:26px;font-family:var(--head);font-size:12px;letter-spacing:.16em;
  text-transform:uppercase}
.quotes-more a{color:var(--jb);text-decoration:none;border-bottom:1px solid var(--line-2);
  padding-bottom:2px}
.quotes-more a:hover{border-bottom-color:var(--jb)}

/* ⚠ NOTHING ADDED FOR .faq-item, DELIBERATELY. .ep-faq already styles its heading and
   body and spaces the rows, and it is on all 393 episode pages. Restyling .faq-item
   here to taste for two new pages would silently restyle every one of those, which is
   a lot of blast radius for a hairline nobody asked for. The service pages use the
   component exactly as the episode pages do, which is also why the FAQ reads the same
   everywhere. */

@media (max-width:1000px){
  .pkg,.pkg.pkg-two{grid-template-columns:1fr}
  .topics{grid-template-columns:1fr}
  .quotes{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:680px){
  .quotes,.quotes.quotes-two{grid-template-columns:1fr}
}

/* ── Migrated blog archive ─────────────────────────────────────────────────────
   ⚠ THE EMBED WRAPPER IS LOAD-BEARING, NOT DECORATION. 155 of the migrated posts
   carry an iframe, most of them a Spotify or libsyn player sized in the 2010s with
   fixed width attributes. Unwrapped, those overflow a phone and break the page-width
   lock. The aspect-ratio box makes every embed fluid regardless of what the original
   markup asked for. */
.nl-body .embed{position:relative;aspect-ratio:16/9;margin:28px 0;
  border-radius:10px;overflow:hidden;background:#111}
.nl-body .embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
/* Audio players are not 16:9. Spotify and libsyn both render a short bar, and forcing
   them into a video box leaves a large black void under the controls. */
.nl-body .embed:has(iframe[src*="spotify"]),
.nl-body .embed:has(iframe[src*="libsyn"]),
.nl-body .embed:has(iframe[src*="soundcloud"]){aspect-ratio:auto;height:152px}
.nl-body img{max-width:100%;height:auto;border-radius:8px}
.nl-body .post-hero{display:block;width:100%;margin:0 0 30px}

/* ── Keynotes: subhead, format comparison, event list, extra topics ─────────
   ⚠ THE COMPARISON IS A REAL TABLE, NOT A TWO COLUMN GRID. The tactical against
   inspirational split is the page's strongest answer-engine asset, and an engine
   lifting "what is a tactical sales keynote" needs the row header beside the cell to
   know what it is reading. A grid of divs loses that relationship and reads as six
   unlabelled sentences. It costs one horizontal scroll on a phone, which .fmt-wrap
   contains rather than letting it widen the page: body carries overflow-x:clip, so an
   overflowing table inside it would be clipped and unreachable instead of scrollable. */
.head-sub{font-family:var(--head);font-weight:400;font-size:clamp(15px,1.7vw,19px)!important;
  color:var(--hero-nav)!important;letter-spacing:.01em;margin:0 0 14px!important}

.fmt-wrap{overflow-x:auto;overscroll-behavior-x:contain;border:1px solid var(--line);
  background:var(--raise)}
.fmt{border-collapse:collapse;width:100%;min-width:620px;font-size:14.5px;line-height:1.55}
.fmt th,.fmt td{text-align:left;vertical-align:top;padding:16px 18px;
  border-bottom:1px solid var(--line)}
.fmt tbody tr:last-child th,.fmt tbody tr:last-child td{border-bottom:0}
.fmt thead th{font-family:var(--head);font-weight:500;font-size:16px;color:var(--ink);
  background:var(--dark);border-bottom:1px solid var(--line-2)}
.fmt tbody th{font-family:var(--head);font-size:13px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink);font-weight:400;width:23%;white-space:nowrap}
.fmt td{color:var(--hero-nav);width:38.5%}
.fmt td:first-of-type{border-right:1px solid var(--line)}
.sr-label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}

/* The event terms a buyer actually searches, as scannable chips rather than a
   paragraph they have to read to the end of. */
.ev-list{list-style:none;margin:26px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:10px}
.ev-list li{font-family:var(--head);font-size:12px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--hero-nav);border:1px solid var(--line-2);
  background:var(--raise);padding:9px 14px}

.topic-fit{margin:14px 0 0!important;font-size:14px!important;line-height:1.5;
  color:var(--ink-2)!important;padding-top:13px;border-top:1px solid var(--line)}
.topic-fit strong{color:var(--jb);font-weight:600}

/* ⚠ details, NOT A JS ACCORDION, and the copy is in the markup either way. Collapsed
   text still ships to crawlers and answer engines, which is the only reason it is
   acceptable to hide four sessions behind a click. John's own layout note asked for
   dropdowns here; his supplied light-theme CSS is not used. */
.more-topics{display:flex;flex-direction:column;gap:12px}
.more-topics details{border:1px solid var(--line);background:var(--raise)}
.more-topics details[open]{border-color:var(--line-2)}
.more-topics summary{cursor:pointer;list-style:none;display:flex;flex-direction:column;
  gap:6px;padding:22px 56px 22px 22px;position:relative}
.more-topics summary::-webkit-details-marker{display:none}
.more-topics summary::after{content:"+";position:absolute;right:22px;top:20px;
  font-family:var(--head);font-size:24px;line-height:1;color:var(--jb)}
.more-topics details[open] summary::after{content:"\2212"}
.more-topics summary:hover .mt-title{color:var(--jb)}
.more-topics summary:focus-visible{outline:2px solid var(--jb);outline-offset:3px}
.mt-title{font-family:var(--head);font-weight:500;font-size:20px;line-height:1.2;
  color:var(--ink)}
.mt-tag{font-family:var(--head);font-size:11.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--jb)}
.mt-body{padding:0 22px 24px}
.mt-body p{margin:0 0 14px;font-size:15px;line-height:1.68;color:var(--hero-nav)}
.mt-body p:last-child{margin-bottom:0}
.mt-body strong{display:block;font-family:var(--head);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted);font-weight:400;margin-bottom:5px}

/* ⚠ ON A PHONE THE TABLE RESTACKS, IT DOES NOT SCROLL SIDEWAYS. A 620px table inside a
   375px screen hides half of the tactical column behind a gesture most people never
   make, which is the column a buyer is comparing against. display:block restacks each
   row into a labelled card and the data-fmt label carries the column name down with the
   cell, so nothing is duplicated in the markup and the DOM order an answer engine reads
   is unchanged. */
@media (max-width:720px){
  .fmt-wrap{overflow:visible;border:0;background:none}
  .fmt{min-width:0;width:100%;display:block}
  .fmt thead{display:none}
  .fmt tbody,.fmt tbody tr,.fmt tbody th,.fmt tbody td{display:block;width:auto}
  .fmt tbody tr{border:1px solid var(--line);background:var(--raise);margin-bottom:12px;
    padding:6px 0 10px}
  .fmt tbody th{border-bottom:0;padding:12px 18px 2px;white-space:normal}
  .fmt tbody td{border-bottom:0;padding:8px 18px 0}
  .fmt tbody td:first-of-type{border-right:0}
  .fmt tbody td::before{content:attr(data-fmt);display:block;font-family:var(--head);
    font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
    margin-bottom:3px}
  .more-topics summary{padding:18px 48px 18px 18px}
  .mt-title{font-size:18px}
  .mt-body{padding:0 18px 20px}
}

/* ── Keynotes: testimonial carousel ────────────────────────────────────────
   ⚠ THREE UP, PAGED, NOT A SCROLL TRACK. David's call: a row of three that changes,
   rather than a strip that runs off the edge. The cards that are not on the current
   page carry the hidden attribute, and display here has to win against the grid, which
   is the rule that catches everyone: display outranks hidden. */
.tcar{position:relative;margin-top:6px;isolation:isolate}
.tcar::before{content:"";position:absolute;z-index:-1;left:50%;top:-12%;
  width:min(1100px,118%);height:124%;transform:translateX(-50%);pointer-events:none;
  background:radial-gradient(60% 55% at 50% 50%,rgba(48,136,243,.17),transparent 72%)}
.tcar-grid{list-style:none;margin:0;padding:0;display:grid;gap:18px;
  grid-template-columns:repeat(3,1fr);align-items:stretch}
.tcar-grid .tcard[hidden]{display:none}

.tcard{display:flex;flex-direction:column;justify-content:space-between;gap:22px;
  padding:28px 26px 24px;border:1px solid var(--line);
  background:linear-gradient(180deg,var(--dark) 0%,var(--raise) 58%)}
.tcard blockquote{margin:0;border:0;padding:0}
.tcard blockquote p{margin:0;font-size:16px;line-height:1.62;color:var(--ink)}
/* The quote mark is decoration, so it sits behind the text and never in a screen
   reader's way. */
.tcard blockquote::before{content:"\201C";display:block;font-family:var(--head);
  font-size:46px;line-height:.7;color:var(--jb);opacity:.55;margin-bottom:10px}
.tcard footer{display:flex;align-items:center;gap:12px;padding-top:18px;
  border-top:1px solid var(--line-2)}
/* ⚠ INITIALS, NOT STOCK FACES. We have no photograph of any of these people and a
   bought face under a real person's name is a fabricated testimonial. */
.tav{flex:0 0 auto;width:42px;height:42px;border-radius:50%;display:grid;
  place-items:center;font-family:var(--head);font-size:14px;letter-spacing:.06em;
  color:#fff;background:linear-gradient(145deg,var(--jb) 0%,var(--jb-accent) 100%)}
.tmeta{display:flex;flex-direction:column;gap:2px;min-width:0}
.tmeta strong{font-family:var(--head);font-weight:500;font-size:15.5px;color:var(--ink)}
.tmeta span{font-size:12.5px;line-height:1.35;color:var(--muted)}

/* margin-left:auto keeps the arrows hard right even when a long section lede pushes
   them onto their own line, which is what the training page does. */
.sec-head .tcar-nav{display:flex;gap:8px;flex:none;margin-left:auto}
.keynote-page .testimonial-head{flex-direction:row;align-items:flex-end}
.keynote-page .keynote-testimonials{padding-top:72px}
.keynote-page .testimonial-title{display:flex;flex:1 1 620px;flex-direction:column;align-items:flex-start;gap:8px}
.keynote-page .sec-head.testimonial-head .testimonial-title h2{flex:none;max-width:none;
  margin:0;white-space:nowrap}
.keynote-page .testimonial-title p{margin:0}
.testimonial-title .testimonial-all{display:inline-flex;margin-top:16px;width:max-content}
.keynote-page .tcar-foot{flex-direction:column;justify-content:center;gap:18px;margin-top:28px}
.keynote-page .tcar-foot .testimonial-all{margin:0;width:max-content}
.keynote-page .topics-head{flex-direction:column;align-items:flex-start;gap:16px}
.keynote-page .sec-head.topics-head h2{flex:none;max-width:none;margin:0;white-space:nowrap}
.keynote-page .topics-head p{max-width:72ch;margin:0}
.keynote-page .more-topics-head{flex-direction:column;align-items:flex-start;gap:16px}
.keynote-page .sec-head.more-topics-head h2{flex:none;max-width:none;margin:0;white-space:nowrap}
.keynote-page .more-topics-head p{max-width:72ch;margin:0}
.keynote-page .pricing-head{flex-direction:column;align-items:flex-start;gap:16px}
.keynote-page .sec-head.pricing-head h2{flex:none;max-width:none;margin:0;white-space:nowrap}
.keynote-page .pricing-head p{max-width:72ch;margin:0}
.keynote-page .sec-head.faq-head h2{flex:none;max-width:none;margin:0;white-space:nowrap}
.keynote-page .keynote-faq{gap:0;border-top:1px solid var(--line-2)}
.keynote-page .keynote-faq .faq-item{border-bottom:1px solid var(--line-2)}
.keynote-page .keynote-faq summary{display:flex;align-items:center;justify-content:space-between;
  gap:24px;padding:24px 0;cursor:pointer;list-style:none;color:var(--ink);
  font-family:var(--head);font-size:19px;font-weight:500;line-height:1.25}
.keynote-page .keynote-faq summary::-webkit-details-marker{display:none}
.keynote-page .keynote-faq summary::after{content:"+";flex:none;color:var(--jb);
  font-size:26px;font-weight:400;line-height:1;transition:transform .2s ease}
.keynote-page .keynote-faq details[open] summary::after{transform:rotate(45deg)}
.keynote-page .keynote-faq summary:hover,.keynote-page .keynote-faq summary:focus-visible{
  color:var(--jb)}
.keynote-page .keynote-faq summary:focus-visible{outline:1px solid var(--jb);outline-offset:4px}
.keynote-page .keynote-faq .faq-answer{max-width:76ch;padding:0 56px 24px 0}
.keynote-page .keynote-faq .faq-answer p{margin:0;color:var(--ink-2);font-size:16px;
  line-height:1.65}
.keynote-page .tcar-stage{display:grid;grid-template-columns:36px minmax(0,1fr) 36px;
  align-items:center;gap:12px;position:relative}
.keynote-page .tcar-stage>.tcar-btn{width:36px;height:36px}
.tcar-btn{width:40px;height:40px;display:grid;place-items:center;cursor:pointer;
  background:transparent;border:1px solid var(--line-2);color:var(--ink);
  transition:border-color .15s,color .15s,opacity .15s}
.tcar-btn svg{width:18px;height:18px}
.tcar-btn:hover:not(:disabled){border-color:var(--jb);color:var(--jb)}
.tcar-btn:disabled{opacity:.3;cursor:default}

.tcar-foot{display:flex;align-items:center;justify-content:space-between;gap:20px;
  flex-wrap:wrap;margin-top:22px}
.tcar-dots{display:flex;gap:7px}
.tcar-dot{width:26px;height:3px;padding:0;border:0;cursor:pointer;
  background:var(--line-2);transition:background .2s}
.tcar-dot[aria-current="true"]{background:var(--jb)}
.tcar-foot .quotes-more{margin:0}

@media (max-width:860px){.tcar-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:620px){
  .tcar-grid{grid-template-columns:1fr}
  .keynote-page .tcar-stage{display:block}
  .keynote-page .tcar-stage>.tcar-btn{position:absolute;z-index:2;top:50%;
    transform:translateY(-50%);width:32px;height:32px;background:var(--ground)}
  .keynote-page .tcar-stage>.tcar-prev{left:-12px}
  .keynote-page .tcar-stage>.tcar-next{right:-12px}
}

/* ⚠ A SOURCE MARK IS NOT A FACE, AND THE TWO G2 CARDS HAVE NO PERSON TO SHOW. Those
   reviews are published under an initial, so there is no one to photograph and no
   company to name: the mark says where the review is verified, which is the part that
   carries the weight. Same white treatment as the homepage logo marquee. */
img.tav{object-fit:cover}
/* ⚠ NO BACKGROUND UNDER A FILTERED LOGO. brightness(0) invert(1) whitens everything it
   is applied to, backgrounds and borders included, so a tile behind the mark came out
   as a solid white disc. The mark alone takes the filter, the same as the marquee. */
img.tav-logo{object-fit:contain;padding:2px;background:none;border:0;
  filter:grayscale(1) brightness(0) invert(1);opacity:.85}

/* ── Keynotes: elevated editorial pass ────────────────────────────────────
   LAYOUT: Full-bleed split hero + split media/story + testimonial 3-up.
   Scoped to .keynote-page so the richer landing-page rhythm does not inflate
   the compact archive and article mastheads that share .page-head. */
.keynote-page .keynote-hero{padding:118px 0 72px;min-height:680px;display:flex;
  align-items:center;overflow:hidden;background:var(--ground)}
.keynote-page .keynote-hero::before{background:
  radial-gradient(circle at 18% 16%,var(--raise-2),transparent 42%),var(--ground)}
.keynote-hero-grid{display:grid;grid-template-columns:minmax(0,1.02fr) minmax(420px,.98fr);
  gap:56px;align-items:center;width:100%}
.keynote-hero-copy{position:relative;z-index:1;min-width:0}
.keynote-page .keynote-hero .eyebrow{margin-bottom:18px}
.keynote-page .keynote-hero h1{font-size:clamp(44px,4.6vw,64px);line-height:1;
  max-width:15ch;margin-bottom:24px;text-wrap:balance}
.keynote-page .keynote-hero .head-sub{font-size:clamp(18px,1.8vw,23px)!important;
  line-height:1.25;margin-bottom:18px!important;color:var(--ink)!important}
.keynote-page .keynote-hero-copy > p:not(.eyebrow):not(.head-sub){font-size:17px;
  line-height:1.66;max-width:59ch;color:var(--hero-nav)}
.keynote-page .keynote-hero .listen-row{margin-top:32px;gap:12px}
.keynote-page .keynote-hero .btn{height:44px}
.keynote-hero-media,.keynote-event-media{position:relative;margin:0;overflow:hidden;
  border:1px solid var(--line-2);background:var(--raise)}
.keynote-hero-media{aspect-ratio:4/5;min-height:520px}
.keynote-hero-media::after,.keynote-event-media::after{content:"";position:absolute;
  inset:0;box-shadow:inset 0 0 0 1px var(--line);pointer-events:none}
.keynote-hero-media img,.keynote-event-media img{width:100%;height:100%;display:block;
  object-fit:cover}
.keynote-hero-media img{object-position:62% center}
.keynote-hero-media figcaption,.keynote-event-media figcaption{position:absolute;
  left:0;right:0;bottom:0;margin:0;padding:10px 14px;background:var(--ground);
  color:var(--muted);font-size:10.5px;line-height:1.35;letter-spacing:.04em}
.keynote-hero-media figcaption span,.keynote-event-media figcaption span{font-family:var(--head);
  color:var(--jb);text-transform:uppercase;letter-spacing:.14em;margin-right:7px}

.keynote-page .index-body{padding-bottom:96px}
.keynote-page section[id]{scroll-margin-top:96px}
.keynote-page .sec-head{margin-bottom:48px}
.keynote-page .sec-head h2{font-size:clamp(34px,4.2vw,52px);line-height:1.05;
  max-width:15ch}
.keynote-page .sec-head p{font-size:17px;line-height:1.6}
.keynote-page .formats-head{display:flex;flex-direction:column;align-items:flex-start;
  gap:0;max-width:880px;margin-bottom:48px}
.keynote-page .formats-head h2{flex:none;max-width:none;margin:0}
.keynote-page .formats-head h3{margin:8px 0 0;color:var(--ink);font-family:var(--head);
  font-size:clamp(28px,3.2vw,42px);font-weight:500;line-height:1.08;
  letter-spacing:-.01em;text-transform:uppercase}
.keynote-page .formats-head .formats-support{max-width:64ch;margin:24px 0 0;
  color:var(--ink-2);font-size:17px;line-height:1.6}

.keynote-page .fmt-wrap{border-color:var(--line-2);box-shadow:0 18px 60px var(--ground)}
.keynote-page .fmt thead th{padding-block:22px;font-size:19px}
.keynote-page .fmt thead th:not(:first-child){border-top:3px solid var(--jb)}
.keynote-page .fmt th,.keynote-page .fmt td{padding:19px 22px}
.keynote-page .fmt tbody tr:hover{background:var(--dark)}

.keynote-event-grid{display:grid;grid-template-columns:minmax(0,.94fr) minmax(380px,1.06fr);
  gap:56px;align-items:center}
.keynote-event-copy{padding:16px 0;display:flex;flex-direction:column;justify-content:center}
.keynote-event-copy .sec-head{display:block;margin-bottom:24px}
.keynote-event-copy .sec-head h2{max-width:none;margin-bottom:14px}
.keynote-event-copy .prose{max-width:62ch}
.keynote-event-copy .prose p{font-size:16px;line-height:1.68}
.keynote-event-media{aspect-ratio:870/941;min-height:0}
.keynote-event-media img{object-fit:cover;object-position:center center}
.keynote-page .ev-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:0 24px;margin-top:32px}
.keynote-page .ev-list li{position:relative;padding:12px 0 12px 18px;border:0;
  border-bottom:1px solid var(--line-2);background:transparent;font-size:12.5px}
.keynote-page .ev-list li::before{content:"";position:absolute;left:0;top:17px;
  width:6px;height:6px;background:var(--jb)}

.keynote-page .tcar{margin-top:12px}
.keynote-page .tcar-grid{gap:24px}
.keynote-page .tcard{position:relative;justify-content:flex-start;gap:24px;
  min-height:430px;padding:32px;border-top:3px solid var(--jb);
  background:linear-gradient(180deg,var(--raise-2),var(--raise))}
.keynote-page .tcard footer{order:-1;display:flex;align-items:flex-start;
  flex-direction:column;gap:16px;padding:0 0 24px;border-top:0;
  border-bottom:1px solid var(--line-2);background:transparent}
.keynote-page .tav{width:84px;height:84px;font-size:26px;border-radius:50%;
  box-shadow:0 0 0 6px var(--dark)}
.keynote-page img.tav{object-fit:cover;padding:0}
.keynote-page img.tav-logo{width:84px;height:84px;object-fit:contain;padding:12px;
  border:1px solid var(--line-2);border-radius:0;box-shadow:none}
.keynote-page .tmeta{gap:4px}
.keynote-page .tmeta strong{font-size:19px;line-height:1.15}
.keynote-page .tmeta span{font-size:13.5px;color:var(--hero-nav)}
.keynote-page .tcard blockquote{display:flex;flex-direction:column;gap:16px}
.keynote-page .tcard blockquote::before{font-size:58px;line-height:.55;margin:0;
  opacity:1}
.keynote-page .tcard blockquote p{font-size:16px;line-height:1.68;color:var(--ink)}

.keynote-page .topics{gap:24px}
.keynote-page .topics > article{position:relative;overflow:hidden;padding:36px 34px;
  border-color:var(--line-2);background:linear-gradient(145deg,var(--raise-2),var(--raise));
  transition:border-color .2s,transform .2s}
.keynote-page .topics > article:hover{border-color:var(--jb);transform:translateY(-4px)}
.keynote-page .topics > article .n{font-size:54px;line-height:1;margin-bottom:24px;
  letter-spacing:.03em}
.keynote-page .topics > article h3{font-size:28px;line-height:1.1}
.keynote-page .topic-meta{margin-top:10px!important;margin-bottom:18px!important}
.keynote-page .topics > article p:not(.topic-meta){font-size:15.5px;line-height:1.68}
.keynote-page .topic-fit{margin-top:22px!important;padding-top:18px}

@media (max-width:1024px){
  .keynote-hero-grid{grid-template-columns:minmax(0,1fr) minmax(340px,.82fr);gap:40px}
  .keynote-page .keynote-hero h1{font-size:clamp(42px,5.8vw,60px)}
  .keynote-hero-media{min-height:480px}
  .keynote-event-grid{grid-template-columns:1fr 1fr;gap:40px}
  .keynote-page .tcard{padding:28px;min-height:420px}
}
@media (max-width:768px){
  .keynote-page .keynote-hero{padding:104px 0 56px;min-height:0}
  .keynote-hero-grid,.keynote-event-grid{grid-template-columns:1fr;gap:40px}
  .keynote-page .keynote-hero h1{max-width:15ch;font-size:clamp(40px,10vw,58px)}
  .keynote-hero-media{aspect-ratio:16/10;min-height:0}
  .keynote-hero-media img{object-position:center center}
  .keynote-event-media{aspect-ratio:870/941;min-height:0}
  .keynote-page .index-body{padding-bottom:72px}
  .keynote-page .sec-head{margin-bottom:36px}
  .keynote-page .sec-head.more-topics-head h2{white-space:normal}
  .keynote-page .sec-head.faq-head h2{white-space:nowrap}
  .keynote-page .tcar-grid{grid-template-columns:1fr}
  .keynote-page .tcard{min-height:0}
}
@media (max-width:480px){
  .keynote-page .keynote-hero{padding-top:96px}
  .keynote-page .keynote-hero h1{font-size:38px}
  .keynote-page .keynote-hero-copy > p:not(.eyebrow):not(.head-sub){font-size:16px}
  .keynote-page .keynote-hero .listen-row{flex-direction:column}
  .keynote-page .keynote-hero .listen-row{align-items:flex-start}
  .keynote-page .keynote-hero .btn{width:auto;max-width:100%;justify-content:center;
    padding-inline:18px;font-size:11px;letter-spacing:.11em;white-space:nowrap}
  .keynote-page .sec-head h2{font-size:34px}
  .keynote-page .sec-head.testimonial-head .testimonial-title h2{
    font-size:clamp(24px,7.2vw,28px)
  }
  .keynote-page .sec-head.faq-head h2{font-size:clamp(24px,6.8vw,27px)}
  .keynote-page .formats-head h3{font-size:28px}
  .keynote-page .formats-head .formats-support{margin-top:16px;font-size:16px}
  .keynote-page .topics > article{padding:28px 24px}
  .keynote-page .topics > article .n{font-size:44px;margin-bottom:18px}
  .keynote-page .topics > article h3{font-size:24px}
  .keynote-page .tcard{padding:26px 24px}
  .keynote-page .keynote-faq summary{padding:20px 0;font-size:17px}
  .keynote-page .keynote-faq .faq-answer{padding:0 36px 20px 0}
  .keynote-page .ev-list{grid-template-columns:1fr}
}

/* ── Keynote enquiry: the event, then the call, in one pass ─────────────────
   ⚠ IT WEARS THE ASSISTANT PANEL'S CLOTHES, NOT ITS OWN. The first version was a
   white card on a site that is dark everywhere else, which read as a third-party
   widget bolted onto the page rather than as John's. These reuse the same tokens,
   the same blurred backdrop and the same blue-edged panel as the "Work with me"
   assistant, so the two feel like one product and a change to the palette moves
   both. */
.kn-modal{position:fixed;inset:0;z-index:120;display:grid;place-items:center;
  padding:clamp(16px,4vw,48px);background:rgba(3,7,13,.82);backdrop-filter:blur(12px);
  overflow:auto}
.kn-modal[hidden]{display:none}
body.kn-open{overflow:hidden}
.kn-card{position:relative;width:min(760px,100%);margin:auto;
  max-height:calc(100dvh - clamp(32px,8vw,96px));overflow:auto;overscroll-behavior:contain;
  padding:34px 32px 30px;
  background:radial-gradient(800px 420px at 12% 0%,rgba(48,136,243,.18),transparent 68%),
             linear-gradient(180deg,var(--assistant-ground),var(--ground));
  border:1px solid rgba(48,136,243,.32);box-shadow:0 28px 90px rgba(0,0,0,.62);
  outline:none;animation:assistant-reveal .24s ease-out both}
.kn-x{position:absolute;top:16px;right:16px;display:grid;place-items:center;
  width:36px;height:36px;padding:0;border:0;border-radius:var(--r);background:transparent;
  color:var(--hero-nav);font:300 25px/1 var(--body);cursor:pointer;
  transition:color .18s,background .18s}
.kn-x:hover,.kn-x:focus-visible{color:var(--jb)}
.kn-eyebrow{margin:0 0 10px;font-family:var(--head);font-size:10px;letter-spacing:.13em;
  text-transform:uppercase;color:#fff}
.kn-card h2{margin:0 0 10px;font-family:var(--head);font-size:clamp(22px,2.6vw,30px);
  line-height:1.1;text-transform:uppercase;color:var(--ink)}
.kn-sub{margin:0 0 22px;max-width:68ch;color:var(--hero-nav);font-size:14px;line-height:1.6}
.kn-error{margin:0 0 16px;padding:10px 12px;border:1px solid rgba(220,38,38,.45);
  background:rgba(220,38,38,.12);color:#FCA5A5;font-size:14px}
.kn-form label{display:block;font-family:var(--head);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:#fff;margin-bottom:14px}
.kn-form input,.kn-form textarea{display:block;width:100%;margin-top:7px;padding:11px 13px;
  border:1px solid var(--line-2);background:rgba(255,255,255,.03);color:var(--ink);
  border-radius:var(--r);font:400 15px/1.45 var(--body);letter-spacing:0;text-transform:none}
.kn-form input::placeholder,.kn-form textarea::placeholder{color:var(--muted)}
.kn-form input:focus,.kn-form textarea:focus{outline:none;border-color:var(--jb);
  box-shadow:0 0 0 3px rgba(48,136,243,.22)}
.kn-form input[type=date]{color-scheme:dark}
.kn-row{display:flex;gap:14px;flex-wrap:wrap}
.kn-row>label{flex:1 1 220px;min-width:0}
.kn-fieldset{border:1px solid rgba(48,136,243,.20);border-radius:var(--r);
  padding:16px 18px 4px;margin:0 0 16px;background:rgba(48,136,243,.055)}
.kn-fieldset legend{padding:0 8px;font-family:var(--head);font-size:10px;
  letter-spacing:.13em;text-transform:uppercase;color:#fff}
.kn-choice{display:flex;gap:20px;flex-wrap:wrap;margin-bottom:12px}
.kn-choice label{display:flex;align-items:center;gap:8px;margin:0;
  font-family:var(--body);font-size:14px;letter-spacing:0;text-transform:none;
  color:var(--ink);font-weight:400}
.kn-choice input{width:auto;margin:0;accent-color:var(--jb)}
.kn-actions{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:8px}
.kn-status,.kn-loading{margin:8px 0 0;font-size:14px;color:var(--hero-nav)}
.kn-days{display:flex;flex-direction:column;gap:18px;max-height:52vh;overflow:auto;
  padding-right:6px}
.kn-day h3{margin:0 0 10px;font-family:var(--head);font-size:13px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--ink)}
.kn-slots{display:flex;gap:8px;flex-wrap:wrap}
.kn-slot{padding:9px 16px;border:1px solid var(--line-2);border-radius:999px;
  background:transparent;color:var(--ink);font:400 14px/1 var(--body);cursor:pointer;
  transition:border-color .18s,color .18s,background .18s}
.kn-slot:hover:not([disabled]){border-color:var(--jb);color:var(--jb)}
.kn-slot[disabled]{opacity:.4;cursor:default}
.kn-slot.is-chosen{background:var(--jb);border-color:var(--jb);color:#fff;opacity:1}
/* ⚠ display:none, NOT THE hidden ATTRIBUTE ALONE. .kn-row is display:flex and a label
   is display:block, and both outrank [hidden], so all three date answers rendered at
   once and the form asked for an exact date, a range and a note together. Same trap as
   the testimonial carousel and the composer: hidden is a hint, display is the
   instruction. */
.kn-form [data-kn-when][hidden]{display:none}
@media (max-width:620px){
  .kn-card{padding:26px 20px 22px}
  .kn-row{gap:0}
}

/* ── Training and membership: elevated editorial pass ─────────────────────
   LAYOUT: Split 50/50 hero + bordered content cards + testimonial 3-up.
   STRUCTURE: The keynote page's hierarchy, adapted for learning products.
   ARCHETYPES: Split 50/50 + Bordered Content Columns + Testimonial 3-up. */
.learning-page .learning-hero{padding:120px 0 72px;min-height:680px;display:flex;
  align-items:center;overflow:hidden;background:var(--ground)}
.learning-page .learning-hero::before{background:
  radial-gradient(circle at 18% 16%,var(--raise-2),transparent 42%),var(--ground)}
.learning-hero-grid{display:grid;grid-template-columns:minmax(0,1.02fr) minmax(420px,.98fr);
  gap:56px;align-items:center;width:100%}
.learning-hero-copy{position:relative;z-index:1;min-width:0}
.learning-page .learning-hero .eyebrow{margin-bottom:16px}
.learning-page .learning-hero h1{font-size:clamp(44px,4.6vw,64px);line-height:1;
  max-width:15ch;margin-bottom:24px;text-wrap:balance}
.membership-page .learning-hero h1>span{display:block;white-space:nowrap}
.learning-page .learning-hero .head-sub{font-size:clamp(18px,1.8vw,23px)!important;
  line-height:1.25;margin-bottom:16px!important;color:var(--ink)!important}
.learning-page .learning-hero-copy>p:not(.eyebrow):not(.head-sub){font-size:17px;
  line-height:1.66;max-width:60ch;color:var(--hero-nav)}
.learning-page .learning-hero .listen-row{margin-top:32px;gap:12px}
.learning-page .learning-hero .btn{height:44px}
.learning-hero-media,.learning-story-media{position:relative;margin:0;overflow:hidden;
  border:1px solid var(--line-2);background:var(--raise)}
.learning-hero-media{aspect-ratio:4/5;min-height:520px}
.learning-hero-media::after,.learning-story-media::after{content:"";position:absolute;
  inset:0;box-shadow:inset 0 0 0 1px var(--line);pointer-events:none}
.learning-hero-media img,.learning-story-media img{width:100%;height:100%;display:block;
  object-fit:cover}
.training-page .learning-hero-media img{object-position:50% center}
.membership-page .membership-hero-media img{object-position:center 22%}
@media (min-width:1025px){
  .training-page .learning-hero-copy{transform:translateY(-64px)}
}

.learning-page .index-body{padding-bottom:96px}
.learning-page section[id]{scroll-margin-top:96px}
.learning-page .sec-head{margin-bottom:48px}
.learning-page .sec-head h2{font-size:clamp(34px,4.2vw,52px);line-height:1.05;
  max-width:17ch}
.learning-page .sec-head p{font-size:17px;line-height:1.6}
.learning-page .stacked-head{display:flex;flex-direction:column;align-items:flex-start;
  gap:16px;max-width:920px}
.learning-page .stacked-head h2,.learning-page .stacked-head p{margin:0}
.learning-page .stacked-head h2{max-width:none;flex:none}
.learning-page .stacked-head p{max-width:72ch}

.audience-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.audience-card,.benefit-card{position:relative;overflow:hidden;padding:32px;
  border:1px solid var(--line-2);border-top:3px solid var(--jb);
  background:linear-gradient(145deg,var(--raise-2),var(--raise))}
.audience-card .n,.benefit-card .n,.program-card .n{display:block;font-family:var(--head);
  color:var(--jb);font-size:48px;line-height:1;letter-spacing:.03em;margin-bottom:24px}
.audience-card h3,.benefit-card h3{margin:0 0 16px;font-family:var(--head);
  font-size:25px;font-weight:500;line-height:1.12;text-transform:uppercase;color:var(--ink)}
.audience-card p,.benefit-card p{margin:0;color:var(--hero-nav);font-size:15.5px;
  line-height:1.68}

.program-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:24px;align-items:stretch}
.program-card{border:1px solid var(--line-2);border-top:3px solid var(--jb);
  background:linear-gradient(145deg,var(--raise-2),var(--raise));display:flex;
  flex-direction:column;height:100%}
.program-card-head{padding:32px;flex:1}
.program-card .n{margin-bottom:20px}
.program-label{margin:0 0 8px;font-family:var(--head);font-size:11.5px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--jb)}
.program-card h3{margin:0 0 16px;font-family:var(--head);font-weight:500;
  font-size:32px;line-height:1.08;color:var(--ink)}
.program-card-head>p:last-child{margin:0;color:var(--hero-nav);font-size:16px;
  line-height:1.62;max-width:50ch}
.program-curriculum{border-top:1px solid var(--line-2);margin-top:auto}
.program-curriculum summary{cursor:pointer;list-style:none;position:relative;
  padding:20px 56px 20px 32px;font-family:var(--head);font-size:13px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
.program-curriculum summary::-webkit-details-marker{display:none}
.program-curriculum summary::after{content:"+";position:absolute;right:32px;top:17px;
  font-size:24px;line-height:1;color:var(--jb)}
.program-curriculum[open] summary::after{content:"\2212"}
.program-curriculum summary:hover,.program-curriculum summary:focus-visible{color:var(--jb)}
.program-curriculum summary:focus-visible{outline:1px solid var(--jb);outline-offset:-4px}
.program-curriculum .prog-list{padding:0 32px 24px;margin:0}
.program-curriculum .prog-list li{padding:10px 0;font-size:14.5px}

.learning-page .pkg{gap:24px}
.learning-page .pkg>article{padding:32px;border-color:var(--line-2);
  border-top:3px solid var(--line-2);background:linear-gradient(180deg,var(--raise-2),var(--raise))}
/* ⚠ THE MIDDLE CARD CARRIES THE EMPHASIS NOW. John asked for Dedicated in the centre and
   for it to stand out, 2026-10-27. A top border alone was enough when it sat on the end;
   in the middle it has a neighbour on both sides, so it needs the surface to differ too.
   Still no transform: see the note on .pkg-pop above for why scaling it misrenders Oswald. */
.learning-page .pkg>article.pkg-pop{border-top-color:var(--jb);border-color:var(--jb);
  background:linear-gradient(180deg,rgba(48,136,243,.14),rgba(48,136,243,.03) 280px),
    linear-gradient(180deg,var(--raise-2),var(--raise))}
/* ⚠ RESERVE THE EYEBROW'S SPACE ON THE CARD THAT HAS NONE. Teams and Dedicated both carry a
   tag, Flex does not, so its heading started a line higher than its neighbours. Holding the
   space keeps the three aligned whatever the tag text later becomes; a hand-tuned margin
   would not. */
.pkg-tag-ghost{visibility:hidden}
.pkg-tag-ghost::after{content:"\00a0"}
/* Same reason, one row lower: Flex is a flat price and carries no "Starting at", so without
   this its number sat 12px above the other two. */
.pkg-starting-ghost{visibility:hidden}
.pkg-starting-ghost::after{content:"\00a0"}
.learning-page .pkg>article h3{font-size:28px}
.learning-page .pkg>article>p,.learning-page .pkg>article ul li{font-size:15px}
.learning-page .pkg-summary{min-height:72px}
.learning-page .pkg-footer{display:flex;flex-direction:column;justify-content:space-between;
  gap:24px;height:184px;margin-top:8px;padding-top:24px;border-top:1px solid var(--line-2)}
.learning-page .pkg-footer .pkg-price{margin:0!important}
.learning-page .pkg-footer .btn{margin-top:auto}
.learning-page .pkg-price .pkg-starting{display:block;margin:0 0 10px;font-family:var(--head);
  font-size:11px;line-height:1;letter-spacing:.16em;text-transform:uppercase;color:var(--hero-nav)}
.learning-page .pkg-price span{font-size:30px}
.learning-page .pkg>article .btn{height:44px}

.learning-page .testimonial-head{flex-direction:row;align-items:flex-end}
.learning-page .testimonial-title{display:flex;flex:1 1 620px;flex-direction:column;
  align-items:flex-start;gap:8px}
.learning-page .sec-head.testimonial-head .testimonial-title h2{flex:none;max-width:none;
  margin:0;white-space:nowrap}
.learning-page .testimonial-title p{margin:0}
.learning-page .tcar-stage{display:grid;grid-template-columns:36px minmax(0,1fr) 36px;
  align-items:center;gap:12px;position:relative}
.learning-page .tcar-stage>.tcar-btn{width:36px;height:36px}
.learning-page .tcar-grid{gap:24px}
.learning-page .tcard{position:relative;justify-content:flex-start;gap:24px;
  min-height:430px;padding:32px;border-top:3px solid var(--jb);
  background:linear-gradient(180deg,var(--raise-2),var(--raise))}
.learning-page .testimonial-result{margin:0;color:var(--jb);font:500 24px/1.12 var(--head);
  letter-spacing:.01em;text-transform:uppercase}
.learning-page .tcar-foot{display:flex;align-items:center;justify-content:space-between;
  gap:24px;margin-top:28px}
.learning-page .tcar-foot .btn{height:44px;flex:none}
.learning-page .tcard footer{order:-1;display:flex;align-items:flex-start;
  flex-direction:column;gap:16px;padding:0 0 24px;border-top:0;
  border-bottom:1px solid var(--line-2);background:transparent}
.learning-page .tav{width:84px;height:84px;font-size:26px;border-radius:50%;
  box-shadow:0 0 0 6px var(--dark)}
.learning-page img.tav{display:block;object-fit:cover;object-position:center;padding:0}
.learning-page .tmeta{gap:4px}
.learning-page .tmeta strong{font-size:19px;line-height:1.15}
.learning-page .tmeta span{font-size:13.5px;color:var(--hero-nav)}
.learning-page .tcard blockquote{display:flex;flex-direction:column;gap:16px}
.learning-page .tcard blockquote::before{font-size:58px;line-height:.55;margin:0;opacity:1}
.learning-page .tcard blockquote p{font-size:16px;line-height:1.68;color:var(--ink)}

.learning-page .faq-head h2{max-width:none;white-space:nowrap}
.learning-faq{gap:0;border-top:1px solid var(--line-2)}
.learning-faq .faq-item{border-bottom:1px solid var(--line-2)}
.learning-faq summary{display:flex;align-items:center;justify-content:space-between;
  gap:24px;padding:24px 0;cursor:pointer;list-style:none;color:var(--ink);
  font-family:var(--head);font-size:19px;font-weight:500;line-height:1.25}
.learning-faq summary::-webkit-details-marker{display:none}
.learning-faq summary::after{content:"+";flex:none;color:var(--jb);font-size:26px;
  font-weight:400;line-height:1;transition:transform .2s ease}
.learning-faq details[open] summary::after{transform:rotate(45deg)}
.learning-faq summary:hover,.learning-faq summary:focus-visible{color:var(--jb)}
.learning-faq summary:focus-visible{outline:1px solid var(--jb);outline-offset:4px}
.learning-faq .faq-answer{max-width:76ch;padding:0 56px 24px 0}
.learning-faq .faq-answer p{margin:0;color:var(--ink-2);font-size:16px;line-height:1.65}

.learning-story-grid{display:grid;grid-template-columns:minmax(340px,.78fr) minmax(0,1.22fr);
  gap:56px;align-items:center}
.learning-story-media{aspect-ratio:4/5;max-height:620px}
.learning-story-media img{object-position:center 18%}
.learning-story-copy .sec-head{margin-bottom:24px}
.learning-story-copy .prose{max-width:66ch}
.research-links{margin:24px 0 0;padding-top:20px;border-top:1px solid var(--line-2);
  color:var(--hero-nav);font-size:15px;line-height:1.6}
.research-links a{color:var(--jb)}

.benefit-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.benefit-card{padding:28px 24px;min-height:248px}
.benefit-card .n{font-size:36px;margin-bottom:20px}
.benefit-card h3{font-size:21px}
.benefit-card p{font-size:14.5px}
.membership-offer{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:24px}
.membership-offer strong{font-family:var(--head);font-size:34px;color:var(--ink);font-weight:600}
.fit-panel{display:grid;grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr);
  gap:56px;padding:48px;border:1px solid var(--line-2);
  background:linear-gradient(145deg,var(--raise-2),var(--raise))}
.fit-panel .sec-head{margin:0}
.fit-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.fit-list li{position:relative;padding:16px 0 16px 28px;border-bottom:1px solid var(--line-2);
  color:var(--ink);font-size:16px;line-height:1.5}
.fit-list li:last-child{border-bottom:0}
.fit-list li::before{content:"";position:absolute;left:0;top:23px;width:8px;height:8px;
  background:var(--jb)}
.cta-actions{flex:0 0 auto!important;display:flex;gap:12px;flex-wrap:wrap}

@media (max-width:1024px){
  .learning-hero-grid{grid-template-columns:minmax(0,1fr) minmax(340px,.82fr);gap:40px}
  .learning-page .learning-hero h1{font-size:clamp(42px,5.8vw,60px)}
  .learning-hero-media{min-height:480px}
  .audience-grid{grid-template-columns:repeat(2,1fr)}
  .audience-card:last-child{grid-column:1/-1}
  .benefit-grid{grid-template-columns:repeat(2,1fr)}
  .learning-story-grid{gap:40px}
  .learning-page .tcard{padding:28px;min-height:420px}
}
@media (max-width:768px){
  .learning-page .learning-hero{padding:104px 0 56px;min-height:0}
  .learning-hero-grid,.learning-story-grid{grid-template-columns:1fr;gap:40px}
  .learning-page .learning-hero h1{max-width:15ch;font-size:clamp(40px,10vw,58px)}
  .learning-hero-media{aspect-ratio:16/10;min-height:0}
  .training-page .learning-hero-media img{object-position:50% 10%}
  .membership-page .membership-hero-media{aspect-ratio:4/5;max-height:560px}
  .learning-page .index-body{padding-bottom:72px}
  .learning-page .sec-head{margin-bottom:36px}
  .audience-grid,.program-grid{grid-template-columns:1fr}
  .audience-card:last-child{grid-column:auto}
  .learning-page .pkg{grid-template-columns:1fr}
  .learning-page .pkg-summary{min-height:0}
  .learning-page .pkg-footer{height:auto}
  .learning-page .tcar-grid{grid-template-columns:1fr}
  .learning-page .tcard{min-height:0}
  .learning-story-media{aspect-ratio:16/10;max-height:none}
  .fit-panel{grid-template-columns:1fr;gap:32px;padding:32px}
}
@media (max-width:480px){
  .learning-page .learning-hero{padding-top:96px}
  .learning-page .learning-hero h1{font-size:38px}
  .membership-page .learning-hero h1>span{white-space:normal}
  .learning-page .learning-hero-copy>p:not(.eyebrow):not(.head-sub){font-size:16px}
  .learning-page .learning-hero .listen-row{flex-direction:column}
  .learning-page .learning-hero .listen-row{align-items:flex-start}
  .learning-page .learning-hero .btn{width:auto;max-width:100%;justify-content:center;
    padding-inline:18px;font-size:11px;letter-spacing:.11em;white-space:nowrap}
  .membership-offer{gap:12px}
  .learning-page .sec-head h2{font-size:34px}
  .learning-page .sec-head.testimonial-head .testimonial-title h2{white-space:normal;
    font-size:clamp(27px,8vw,34px)}
  .learning-page .faq-head h2{font-size:clamp(24px,6.8vw,27px)}
  .audience-card,.benefit-card,.program-card-head{padding:24px}
  .audience-card .n,.program-card .n{font-size:42px;margin-bottom:18px}
  .audience-card h3{font-size:23px}
  .program-card h3{font-size:27px}
  .program-curriculum summary{padding:18px 48px 18px 24px}
  .program-curriculum summary::after{right:24px;top:15px}
  .program-curriculum .prog-list{padding:0 24px 24px}
  .learning-page .pkg>article{padding:24px}
  .benefit-grid{grid-template-columns:1fr}
  .benefit-card{min-height:0}
  .learning-page .tcar-stage{display:block}
  .learning-page .tcar-stage>.tcar-btn{position:absolute;z-index:2;top:50%;
    transform:translateY(-50%);width:32px;height:32px;background:var(--ground)}
  .learning-page .tcar-stage>.tcar-prev{left:-12px}
  .learning-page .tcar-stage>.tcar-next{right:-12px}
  .learning-page .tcard{padding:24px}
  .learning-faq summary{padding:20px 0;font-size:17px}
  .learning-faq .faq-answer{padding:0 36px 20px 0}
  .fit-panel{padding:24px}
  .cta-actions{width:100%}
  .cta-actions .btn{width:100%;justify-content:center}
}

/* ── Phase 2: decision-path refinements ────────────────────────────────── */
.curriculum-stages{border-top:1px solid var(--line-2)}
.curriculum-stages .program-curriculum{border-top:0;border-bottom:1px solid var(--line-2)}
.curriculum-stages .program-curriculum:last-child{border-bottom:0}
.curriculum-stages .program-curriculum summary{display:flex;align-items:center;gap:14px;
  text-transform:none;letter-spacing:.02em;font-size:16px;line-height:1.3}
.curriculum-stages .program-curriculum summary span{color:var(--jb);font-size:12px;
  letter-spacing:.14em}
.package-note{margin:28px 0 0;padding:20px 22px;border-left:3px solid var(--jb);
  background:var(--raise);color:var(--hero-nav);font-size:15px;line-height:1.6}
.package-note a{color:var(--ink);text-underline-offset:3px}
.testimonial-proof{display:flex;align-items:center;gap:16px;margin-top:10px}
.testimonial-proof strong{font:600 42px/1 var(--head);color:var(--jb)}
.testimonial-proof span{max-width:31ch;color:var(--hero-nav);font-size:14px;line-height:1.4}
.credential-line{padding-top:18px;border-top:1px solid var(--line-2);color:var(--ink)!important}

.membership-device-stage{position:relative;min-height:520px;display:flex;align-items:center;
  justify-content:center;padding:36px 24px;background:radial-gradient(circle at 55% 42%,rgba(48,136,243,.2),transparent 55%)}
.device-laptop{position:relative;width:min(100%,560px);filter:drop-shadow(0 30px 44px rgba(0,0,0,.5))}
.device-screen{overflow:hidden;min-height:352px;padding:14px;border:10px solid #24252b;
  border-bottom-width:18px;background:#0d0e12;box-shadow:0 0 0 1px #4a4c55}
.device-base{height:18px;margin:-1px -26px 0;background:linear-gradient(#d1d5dc,#777d88);
  clip-path:polygon(3% 0,97% 0,100% 100%,0 100%)}
.portal-top{display:flex;justify-content:space-between;padding:4px 4px 14px;color:var(--ink);
  font:500 10px/1 var(--head);letter-spacing:.12em}
.portal-player{display:flex;min-height:160px;flex-direction:column;justify-content:flex-end;
  padding:20px;background:linear-gradient(135deg,rgba(48,136,243,.55),rgba(8,9,13,.1)),#10131d}
.portal-play{display:grid;place-items:center;width:42px;height:42px;margin-bottom:22px;
  background:var(--jb);color:#fff;border-radius:50%;font-size:13px}
.portal-player strong{font:500 28px/1.05 var(--head);text-transform:uppercase}
.portal-player small{margin-top:6px;color:var(--hero-nav)}
.portal-modules{margin:12px 0 0;padding:0;list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:6px}
.portal-modules li{padding:10px;background:var(--raise);color:var(--hero-nav);font-size:11px}
.device-phone{position:absolute;right:0;bottom:12px;width:148px;height:296px;padding:8px;
  border-radius:24px;background:#202126;border:1px solid #565962;box-shadow:0 24px 46px rgba(0,0,0,.65)}
.phone-notch{position:absolute;z-index:1;top:8px;left:50%;width:54px;height:12px;
  transform:translateX(-50%);border-radius:0 0 8px 8px;background:#202126}
.phone-screen{height:100%;padding:28px 12px 12px;border-radius:17px;background:linear-gradient(180deg,#173d79,#0d0e12 48%)}
.phone-screen{display:flex;flex-direction:column;gap:9px}
.phone-label{color:#9bc6ff;font:500 8px/1 var(--head);letter-spacing:.14em}
.phone-screen strong{font:500 19px/1.05 var(--head);text-transform:uppercase}
.phone-screen small{color:var(--hero-nav);font-size:9px;margin-bottom:8px}
.phone-card{padding:9px 8px;background:rgba(255,255,255,.07);font-size:9px;color:var(--ink)}
.benefit-grid-three{grid-template-columns:repeat(3,1fr);gap:24px}
.benefit-grid-three .benefit-card{min-height:100%;padding:34px 30px}
.benefit-icon{display:grid;place-items:center;width:44px;height:44px;margin-bottom:24px;
  border:1px solid var(--jb);color:var(--jb);font-size:20px}
.benefit-card ul{list-style:none;margin:18px 0 0;padding:0;display:flex;flex-direction:column;gap:16px}
.benefit-card li{position:relative;padding-left:18px;color:var(--hero-nav);font-size:15px;line-height:1.55}
.benefit-card li::before{content:"";position:absolute;left:0;top:8px;width:6px;height:6px;background:var(--jb)}
.membership-page .program-card-head>p{margin:0;color:var(--hero-nav);font-size:16px;line-height:1.62}
.membership-page .program-card-head{display:flex;flex-direction:column}
.membership-page .program-stats{list-style:none;margin:auto 0 0;padding:18px 0 0;
  border-top:1px solid var(--line-2);display:flex;flex-direction:column;gap:11px;
  color:var(--ink);font:500 14.5px/1.45 var(--head);letter-spacing:.025em;text-transform:uppercase}
.membership-page .program-card-head>p:not(.program-label){padding-bottom:22px}
.membership-page .program-stats li{position:relative;padding-left:18px;min-height:21px}
.membership-page .program-stats li::before{content:"";position:absolute;left:0;top:.55em;
  width:7px;height:7px;background:var(--jb)}
.membership-page .program-stats .ai-prompt-bullet::after{content:"←";display:inline-block;
  margin-left:9px;color:var(--jb);font-size:19px;line-height:.8;vertical-align:.02em;
  animation:ai-prompt-nudge 1.35s ease-in-out infinite}
@keyframes ai-prompt-nudge{0%,100%{transform:translateX(0)}55%{transform:translateX(-6px)}}
@media (prefers-reduced-motion:reduce){
  .membership-page .program-stats .ai-prompt-bullet::after{animation:none}
}
.ai-tag{display:inline-flex;padding:3px 6px;margin-right:3px;background:var(--jb);color:#fff;
  font:500 9px/1 var(--head);letter-spacing:.1em;vertical-align:middle}

.keynote-proof-band{padding:28px 0;border-block:1px solid var(--line-2);background:#0b0b0d}
.keynote-proof-band .wrap{display:flex;align-items:center;justify-content:space-between;gap:32px}
.keynote-proof-band p{margin:0;color:var(--ink);font:500 15px/1.4 var(--head);
  letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}
.keynote-proof-band p strong{color:var(--jb)}
.keynote-proof-band p span{margin:0 8px;color:var(--muted)}
.keynote-proof-band ul{list-style:none;margin:0;padding:0;display:flex;align-items:center;gap:30px}
.keynote-proof-band li{display:grid;place-items:center;width:94px;height:44px}
.keynote-proof-band img{max-width:100%;max-height:34px;object-fit:contain;filter:grayscale(1) brightness(2);opacity:.82}
.keynote-page .topic-meta{display:flex;flex-wrap:wrap;gap:8px}
.keynote-page .topic-meta span{padding:6px 9px;border:1px solid var(--jb);color:#9bc6ff}
.topic-takeaways{list-style:none;margin:22px 0 0;padding:18px 0 0;border-top:1px solid var(--line-2);
  display:flex;flex-direction:column;gap:12px}
.topic-takeaways li{position:relative;padding-left:18px;color:var(--hero-nav);font-size:14.5px;line-height:1.55}
.topic-takeaways li::before{content:"";position:absolute;left:0;top:8px;width:6px;height:6px;background:var(--jb)}
.keynote-fit-grid{align-items:stretch}
.event-fit-list{display:flex;flex-direction:column;margin:6px 0 24px;border-top:1px solid var(--line-2)}
.event-fit-list p{margin:0;padding:17px 0;border-bottom:1px solid var(--line-2);color:var(--hero-nav);line-height:1.6}
.event-fit-list strong{display:block;margin-bottom:4px;color:var(--ink);font-family:var(--head);font-size:17px}
.event-types{margin:0;color:var(--hero-nav);font-size:14px;line-height:1.65}

.featured-cards a.cred{color:inherit;text-decoration:none;transition:border-color .2s,transform .2s}
.featured-cards a.cred:hover{border-color:var(--jb);transform:translateY(-3px)}
.stand-intro{margin-bottom:44px}
.stand-intro .eyebrow{font-size:14px;font-weight:600;letter-spacing:.18em}
.stand-intro .about-why-copy h2{font-size:clamp(40px,4.3vw,58px);white-space:nowrap}
/* ⚠ SMALLER THAN THE "MY WHY" HEADING ABOVE IT, ON PURPOSE. John asked for "a smaller
   subheader that says VALUES before this section" (2026-10-27): it introduces the grid, it
   does not compete with the section heading, so it is sized off the eyebrow, not the h2. */
.values-head{font-family:var(--head);font-size:14px;font-weight:600;letter-spacing:.18em;
  text-transform:uppercase;color:var(--jb);margin:0 0 18px}
.values-grid{grid-template-columns:repeat(3,1fr);gap:20px;background:none}
.values-grid div{min-height:210px;padding:30px;border:1px solid var(--line-2);border-top:3px solid var(--jb);
  background:linear-gradient(145deg,var(--raise-2),var(--raise))}
.values-grid b{font-size:24px;margin-bottom:16px}
.values-grid span{font-size:15px;line-height:1.65;color:var(--hero-nav)}
.cred-logo .brand-salesforce{filter:grayscale(1) brightness(4);opacity:1}

@media (max-width:1024px){
  .keynote-proof-band .wrap{align-items:flex-start;flex-direction:column}
  .keynote-proof-band ul{width:100%;justify-content:space-between;gap:16px}
  .benefit-grid-three,.values-grid{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:768px){
  .membership-device-stage{min-height:430px;padding-inline:0}
  .device-screen{min-height:300px}
  .device-phone{right:2px;width:128px;height:256px}
  /* Keep the complete client proof set visible as one compact brand bar on mobile. */
  .keynote-proof-band ul{flex-wrap:nowrap;justify-content:space-between;gap:8px}
  .keynote-proof-band li{flex:1 1 0;min-width:0;width:auto;height:32px}
  .keynote-proof-band img{max-width:100%;max-height:24px}
  .keynote-page .keynote-testimonials{padding-top:56px}
  .values-grid{grid-template-columns:1fr}
  .stand-intro .about-why-copy h2{white-space:normal}
}
@media (max-width:520px){
  .benefit-grid-three{grid-template-columns:1fr}
  .keynote-proof-band p{white-space:normal}
  .device-phone{width:112px;height:226px}
  .portal-modules{grid-template-columns:1fr}
  .portal-modules li:nth-child(n+4){display:none}
}
@media (max-width:480px){
  /* Final narrow-phone override: these no-wrap desktop headings are declared later in
     the component layer, so the mobile release valve must live after that layer. */
  .learning-page .faq-head h2,.keynote-page .sec-head.faq-head h2{white-space:normal}
}
