/* ============================================================
   master-common.css — Pleomatic design system
   Single source of truth for site-wide styles. Vanilla CSS for
   now; Tailwind compile step (_scripts/build_tailwind.py) stays
   a no-op until pages > ~20 (see CHANGELOG roadmap).

   Design vocabulary documented in DECISIONS.md D-W005.
   ============================================================ */

/* -----------------------------
   1 · Design tokens
   ----------------------------- */
:root {
  --pleo-ink: #0b0d12;
  --pleo-ink-soft: #1a1d26;
  --pleo-paper: #fafafa;
  --pleo-white: #ffffff;
  --pleo-muted: #6b7280;
  --pleo-text: #4b5563;
  --pleo-line: #e5e7eb;

  /* Palette re-anchored to the Pleomatic logo (D-W017).
     Logo is orange/cream/dark-grey — so primary is orange, accents are warm.
     Purple and rose stay only as deep gradient anchors (Unbound pattern),
     never as standalone brand colors. */
  --pleo-primary: #C2410C;       /* deep brand orange, matches logo sphere */
  --pleo-primary-dark: #9A3412;  /* darker orange for hover / depth */
  --pleo-orange: #F97316;        /* brighter orange for accents + buttons */
  --pleo-amber: #F59E0B;         /* warm amber for highlights */
  --pleo-cream: #FED7AA;          /* light cream — logo highlight family */
  --pleo-rose: #BE185D;           /* warm magenta — gradient mid-stop only */
  --pleo-purple: #5B21B6;         /* deep purple — gradient anchor only */
  --pleo-accent: #22c55e;         /* green — kept for SLA / "live" badges only */

  --grad-hero: linear-gradient(135deg, #1A0822 0%, #5B21B6 25%, #BE185D 55%, #F97316 100%);
  /* Method-card variants — all warm-anchored, harmonious with the logo */
  --grad-card-1: linear-gradient(135deg, #9A3412 0%, #F97316 100%);   /* deep → bright orange */
  --grad-card-2: linear-gradient(135deg, #BE185D 0%, #F59E0B 100%);   /* rose → amber */
  --grad-card-3: linear-gradient(135deg, #5B21B6 0%, #C2410C 100%);   /* purple → brand orange */
  --grad-card-4: linear-gradient(135deg, #F59E0B 0%, #BE185D 100%);   /* amber → rose */
  --grad-cta-bg: linear-gradient(135deg, #0B0D12 0%, #5B21B6 45%, #F97316 100%);

  --radius-sm: 8px;
  --radius-md: 14px;
  --radius-lg: 22px;
  --radius-xl: 32px;

  --shadow-sm: 0 1px 2px rgba(11,13,18,0.04);
  --shadow-md: 0 8px 24px rgba(11,13,18,0.08);
  --shadow-lg: 0 20px 60px rgba(11,13,18,0.12);

  --space-section: 6rem;
}

/* -----------------------------
   2 · Base
   ----------------------------- */
* { box-sizing: border-box; }
html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  /* Fixed nav (~120px tall after logo went 2×) — anchor jumps must offset
     it so target h2s aren't hidden under the nav. */
  scroll-padding-top: 130px;
}
body {
  margin: 0;
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
  color: var(--pleo-ink);
  background: var(--pleo-white);
  -webkit-font-smoothing: antialiased;
  line-height: 1.5;
}
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
h1, h2, h3, h4 { letter-spacing: -0.025em; }

/* -----------------------------
   3 · Layout
   ----------------------------- */
.container { max-width: 1200px; margin: 0 auto; padding: 0 1.5rem; }
.container-narrow { max-width: 900px; margin: 0 auto; padding: 0 1.5rem; }
section.block { padding: var(--space-section) 0; }
.bg-paper { background: var(--pleo-paper); }

/* -----------------------------
   4 · Navigation — transparent, blends with hero (Unbound pattern · D-W012)
   -----------------------------
   The nav is `position: absolute` at the very top of the page so it overlays
   the hero gradient seamlessly. Two logo variants ship via the chrome SSI
   fragment (`nav-logo-dark` + `nav-logo-light`); CSS uses `:has()` on the
   <body> to show the right one based on whether the first section is the
   dark `.hero` (homepage) or the light `.hero-slim` (other pages).
   ----------------------------- */
.nav {
  position: fixed; top: 0; left: 0; right: 0;
  z-index: 50;
  background: transparent;
  border: none;
  transition: background-color .25s ease-out, border-color .25s ease-out, box-shadow .25s ease-out;
}
/* Scrolled state — solid white blur backdrop with subtle shadow + border.
   Toggled by the inline JS in the nav SSI fragment when scrollY > 80px.
   The :has() switches below still control text/logo colors per-page; this
   only adds the surface, not the foreground. */
.nav.nav--scrolled {
  /* Higher opacity (0.94) reduces the color bleed from the hero gradient
     that the backdrop-filter would otherwise pick up during the scroll
     transition (visible as a pastel band right after the hero scrolls
     under the nav). Saturate kept modest (130%) for the same reason. */
  background: rgba(255, 255, 255, 0.94);
  backdrop-filter: saturate(130%) blur(18px);
  -webkit-backdrop-filter: saturate(130%) blur(18px);
  border-bottom: 1px solid var(--pleo-line);
  box-shadow: 0 4px 24px rgba(11, 13, 18, 0.06);
}
/* On dark-hero pages, when scrolled past the hero, the page below is white
   too — so the same scrolled style works visually. But the logo + nav-links
   need to flip back to DARK because the white backdrop won't read with the
   white text from the dark-hero theming. Override the :has() switches: */
body:has(.hero) .nav.nav--scrolled .nav-logo-light { display: none; }
body:has(.hero) .nav.nav--scrolled .nav-logo-dark { display: block; }
body:has(.hero) .nav.nav--scrolled .nav-links {
  color: var(--pleo-ink);
}
body:has(.hero) .nav.nav--scrolled .nav-links a:hover {
  color: var(--pleo-primary);
}
body:has(.hero) .nav.nav--scrolled .nav-cta {
  background: var(--pleo-ink);
  color: var(--pleo-white);
}
body:has(.hero) .nav.nav--scrolled .nav-cta:hover {
  background: var(--pleo-primary);
}
body:has(.hero) .nav.nav--scrolled .nav-hamburger {
  color: var(--pleo-ink);
}
@media (prefers-reduced-motion: reduce) {
  .nav { transition: none; }
}
.nav-inner {
  display: flex; align-items: center; justify-content: space-between;
  padding: 1.5rem clamp(1.5rem, 4vw, 3rem);
  max-width: 1280px; margin: 0 auto;
}
.nav-logo {
  display: inline-flex; align-items: center;
  text-decoration: none;
}
/* Image-based logo (replaces the old text+dot wordmark).
   2× the previous size (was 36px) per user direction 2026-05-24 — the logo
   is the strongest brand carrier we have and deserves visual weight in the
   nav. Nav vertical padding stays the same; the bar grows taller. */
.nav-logo-img {
  height: 72px; width: auto;
  display: block;
}
/* Both <img> variants point at the SAME transparent logo file. CSS picks
   which one is visible per page, and applies a brightness-invert filter to
   the dark-hero variant so the multicolor real logo reads on the gradient
   without needing a separate white-wordmark asset. The `hue-rotate(180deg)`
   after `invert(1)` is the classic trick — invert flips lightness AND
   spins hue; rotating hue 180° back leaves orange as orange, but dark text
   becomes light text. */
.nav-logo-light { display: none; }
.nav-logo-dark { display: block; }
body:has(.hero) .nav-logo-light {
  display: block;
  filter: invert(1) hue-rotate(180deg) brightness(1.05) drop-shadow(0 1px 4px rgba(0,0,0,0.25));
}
body:has(.hero) .nav-logo-dark { display: none; }
/* When the dark-hero nav scrolls into its solid white state, we want the
   normal (non-inverted) logo back so the wordmark reads dark on white. */
body:has(.hero) .nav.nav--scrolled .nav-logo-light { display: none; filter: none; }
body:has(.hero) .nav.nav--scrolled .nav-logo-dark { display: block; }

/* Pill-button nav links (Unbound-style). Each link is a rounded pill
   with a subtle outline — clickable affordance + adds visual rhythm.
   Typeface: Lexend Deca (D-W019) — geometric humanist sans-serif that
   matches Unbound's nav exactly. Weight 300 = airy, weight 400 on hover
   adds subtle authority feedback. */
.nav-links {
  display: flex; gap: 0.5rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.92rem; font-weight: 400;
  letter-spacing: 0.01em;
  color: var(--pleo-ink);
  list-style: none; margin: 0; padding: 0;
}
.nav-links a {
  display: inline-block;
  padding: 0.5rem 1rem;
  border-radius: 999px;
  border: 1px solid var(--pleo-line);
  background: transparent;
  color: inherit;
  transition: background .15s, border-color .15s, color .15s;
}
.nav-links a:hover {
  background: var(--pleo-ink);
  color: var(--pleo-white);
  border-color: var(--pleo-ink);
}
/* On dark hero: white-outlined pills, translucent fill on hover */
body:has(.hero) .nav-links { color: rgba(255, 255, 255, 0.92); }
body:has(.hero) .nav-links a {
  border-color: rgba(255, 255, 255, 0.22);
  background: rgba(255, 255, 255, 0.04);
  backdrop-filter: blur(6px);
}
body:has(.hero) .nav-links a:hover {
  background: rgba(255, 255, 255, 0.12);
  border-color: rgba(255, 255, 255, 0.45);
  color: var(--pleo-white);
}

.nav-cta {
  background: var(--pleo-ink); color: var(--pleo-white);
  padding: 0.55rem 1.1rem; border-radius: 999px;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-weight: 500; font-size: 0.92rem;
  letter-spacing: 0.01em;
  display: inline-flex; align-items: center; gap: 0.4rem;
  transition: transform .15s, background .15s, color .15s, box-shadow .15s;
  text-decoration: none;
}
.nav-cta:hover { transform: translateY(-1px); background: var(--pleo-primary); }
/* Brand-orange pill CTA on the dark hero — Unbound's pattern of using the
   same color family as the page gradient (their CTA is a dark purple
   matching the hero). For us, orange anchors the CTA to the logo's orange
   and feels native to the page, not stamped on top of it. */
body:has(.hero) .nav-cta {
  background: var(--pleo-orange);
  color: var(--pleo-white);
  box-shadow: 0 4px 14px rgba(249, 115, 22, 0.4);
}
body:has(.hero) .nav-cta:hover {
  background: var(--pleo-primary-dark);
  color: var(--pleo-white);
  box-shadow: 0 8px 24px rgba(154, 52, 18, 0.5);
}

@media (max-width: 800px) {
  .nav-links { display: none; }
  /* Mobile logo also 2× (was 30px). Stays readable on phones; balances
     against the hamburger button which is 40px square. */
  .nav-logo-img { height: 60px; }
  .nav-inner { padding: 1rem 1.25rem; }
  /* The desktop CTA pill hides on mobile — its job moves to the drawer */
  .nav-inner > .nav-cta { display: none; }
}

/* -----------------------------
   4b · Mobile nav drawer (D-W013)
   -----------------------------
   Hamburger button visible only on phones; tapping it slides in a full-
   screen dark panel from the right with all nav links + the CTA. Body gets
   a `data-mobile-nav-open` attribute via the inline JS in the nav SSI
   fragment. CSS handles all motion + the icon morph; JS only toggles state.
   ----------------------------- */
.nav-hamburger {
  display: none;                          /* desktop hidden — see media query below */
  background: transparent;
  border: 0;
  padding: 0;
  width: 40px; height: 40px;
  cursor: pointer;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 5px;
  color: var(--pleo-ink);
}
body:has(.hero) .nav-hamburger { color: var(--pleo-white); }
.nav-hamburger span {
  display: block;
  width: 22px; height: 2px;
  background: currentColor;
  border-radius: 1px;
  transition: transform .25s cubic-bezier(.22, 1, .36, 1),
              opacity .15s ease-out;
}
@media (max-width: 800px) {
  .nav-hamburger { display: inline-flex; }
}
/* Animated icon morph: 3 lines → X */
body[data-mobile-nav-open] .nav-hamburger {
  color: var(--pleo-white);               /* always white on the dark drawer */
}
body[data-mobile-nav-open] .nav-hamburger span:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}
body[data-mobile-nav-open] .nav-hamburger span:nth-child(2) { opacity: 0; }
body[data-mobile-nav-open] .nav-hamburger span:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}

/* Slide-in drawer */
.nav-mobile-panel {
  position: fixed;
  top: 0; right: 0; bottom: 0;
  width: 100%;
  max-width: 480px;
  background: linear-gradient(160deg, #0b0d12 0%, #5B21B6 50%, #F97316 100%);
  color: var(--pleo-white);
  z-index: 60;
  transform: translateX(100%);
  transition: transform .35s cubic-bezier(.22, 1, .36, 1),
              visibility 0s linear .35s;
  visibility: hidden;
  box-shadow: -20px 0 60px rgba(0, 0, 0, 0.35);
}
body[data-mobile-nav-open] .nav-mobile-panel {
  transform: translateX(0);
  visibility: visible;
  transition: transform .35s cubic-bezier(.22, 1, .36, 1),
              visibility 0s linear 0s;
}
.nav-mobile-panel nav {
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  gap: 1.5rem;
  padding: 5rem 2.5rem 3rem;
}
.nav-mobile-panel a {
  color: var(--pleo-white);
  text-decoration: none;
  font-size: 1.75rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  opacity: 0.9;
  transition: opacity .15s ease-out;
}
.nav-mobile-panel a:hover,
.nav-mobile-panel a:focus { opacity: 1; }
.nav-mobile-panel .nav-cta {
  display: inline-flex;                    /* override the .nav-inner > .nav-cta { display: none } */
  margin-top: 1rem;
  background: var(--pleo-white);
  color: var(--pleo-ink);
  font-size: 1rem;
  padding: 0.85rem 1.4rem;
  opacity: 1;
}
.nav-mobile-panel .nav-cta:hover {
  background: var(--pleo-ink);
  color: var(--pleo-white);
}

/* Dim backdrop behind the drawer — real <button> element so tap-to-close
   works and the click target is keyboard-focusable for a11y. Visible only
   on screens wider than the drawer's 480px max-width (phones get full-cover). */
.nav-mobile-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(11, 13, 18, 0.55);
  border: 0;
  padding: 0;
  margin: 0;
  z-index: 55;                              /* between page (z 1-50) and drawer (60) */
  opacity: 0;
  pointer-events: none;
  visibility: hidden;
  cursor: pointer;
  transition: opacity .35s ease-out, visibility 0s linear .35s;
}
body[data-mobile-nav-open] .nav-mobile-backdrop {
  opacity: 1;
  pointer-events: auto;
  visibility: visible;
  transition: opacity .35s ease-out, visibility 0s linear 0s;
}

/* Respect motion preferences — instant show/hide, no slide */
@media (prefers-reduced-motion: reduce) {
  .nav-mobile-panel,
  .nav-mobile-backdrop,
  .nav-hamburger span { transition: none; }
}

/* -----------------------------
   5 · Hero — split-shard layout (Unbound-pattern)
   -----------------------------
   Full-bleed two-column hero:
     · LEFT column  — solid gradient background with text content
                      (eyebrow, h1, sub, CTAs) left-aligned. Orbs drift
                      inside this column for atmospheric depth.
     · RIGHT column — looping video, clipped by a polygon "shard" that
                      cuts into the gradient on its left edge.

   Layer order inside .hero-shard (the right-column container):
     1. .hero-shard-bg      → CSS-animated gradient (always-on fallback)
     2. <video>             → optional, takes over when /assets/hero-loop.*
                              exist. Silently degrades to the gradient if
                              the source 404s or the file is absent.
     3. .hero-shard-overlay → subtle darkening for image-on-video contrast

   Shape control: the shard is clipped via `clip-path: var(--shard-clip)`.
   Override the variable at any breakpoint to swap shapes. For curve-aware
   shapes, swap to `mask-image: url(...)` with an SVG — Unbound itself uses
   that pattern per breakpoint (`--video-mask`, `--mobile-mask`).

   See DECISIONS.md D-W010 (supersedes D-W007, the centered-frame treatment).
   ----------------------------- */

.hero {
  position: relative; overflow: hidden;
  /* Taller hero — the big editorial headline needs room to breathe AND have
     a generous gap to the CTA block below. 92vh approximates Unbound's
     near-full-viewport hero proportions. */
  min-height: 92vh;
  /* No top padding: the gradient AND the video shard run flush to y=0,
     behind the (transparent) fixed nav. This matches Unbound's pattern
     where the video reads as the page's frame, not as a panel under the
     nav. The text column gets its own top padding to clear the nav. */
  display: grid;
  /* Text column = 40% of hero width, video shard column = 60%. The shard
     dominates compositionally (user direction 2026-05-24: "give more space
     to the video, 40% of the width of hero section"). The headline going
     even bigger relative to its narrower column is part of the same
     compositional intent — a tight column of editorial typography against
     a wide cinematic video panel. */
  grid-template-columns: minmax(0, 0.4fr) minmax(0, 0.6fr);
  /* Warm gradient that the logo's orange continues OUT of, not contradicts.
     Deep purple → magenta → bright orange. D-W017. */
  background: linear-gradient(135deg, #1A0822 0%, #5B21B6 28%, #BE185D 60%, #F97316 100%);
  /* Shard cut — POLYGON fallback (universal). Used by browsers that
     don't support clip-path: shape() yet. Straight diagonal between the
     same top/bottom anchor points as the curved version.
     Percentages are relative to the SHARD element (not the hero).
     Shard column = 60% of viewport, starting at 40% from left.
     So 15% across shard = 9% from shard's left = 49% from viewport. */
  --shard-clip: polygon(
    15% 0%,
    100% 0%,
    100% 100%,
    0% 100%
  );
}

/* Curved-edge shard (Unbound benchmark · D-W019).
   Replaces the straight polygon with a cubic bezier that bows the cut
   inward into the gradient column at the vertical midpoint, then comes
   back. Cleaner-feeling, more editorial — the diagonal polygon read as
   "drawn in CSS"; the curve reads as "designed."
   Control points are both at x=52% to make a symmetric C-bow. Endpoints
   match the polygon fallback (44% top, 28% bottom) so the overall shape
   and proportions stay identical — only the edge between them curves.

   Browser support: Chrome 123+, Edge 123+, Firefox 129+. Older browsers
   silently fall through to the polygon fallback above. */
@supports (clip-path: shape(from 0% 0%, line to 100% 0%, close)) {
  .hero {
    /* Cut starts at 15% across the shard at the top, bows out to ~28% in
       the middle, comes back to 0% (flush with the shard's left edge) at
       the bottom. Combined with the wider grid column (60%), the visible
       video occupies roughly 50%-of-viewport at the top widening to
       60%-of-viewport at the bottom — close to half the page is video. */
    --shard-clip: shape(
      from 15% 0%,
      curve to 0% 100% with 28% 30% / 28% 70%,
      line to 100% 100%,
      line to 100% 0%,
      close
    );
  }
}

/* Orbs sit BEHIND the left text column for depth — they don't reach the shard */
.hero-orbs { position: absolute; inset: 0; pointer-events: none; overflow: hidden; z-index: 0; }
.orb {
  position: absolute; border-radius: 50%;
  filter: blur(90px); opacity: 0.55;
  animation: pleo-float 22s ease-in-out infinite;
}
.orb-1 {
  width: 520px; height: 520px; top: -160px; left: -140px;
  background: radial-gradient(circle at 30% 30%, #5B21B6, transparent 65%);
}
.orb-2 {
  width: 460px; height: 460px; top: 30%; left: 5%;
  background: radial-gradient(circle at 50% 50%, #BE185D, transparent 65%);
  animation-delay: -7s;
}
.orb-3 {
  width: 400px; height: 400px; bottom: -150px; left: -80px;
  background: radial-gradient(circle at 50% 50%, #F97316, transparent 65%);
  animation-delay: -14s;
}
@keyframes pleo-float {
  0%, 100% { transform: translate(0,0) scale(1); }
  33% { transform: translate(30px,-30px) scale(1.06); }
  66% { transform: translate(-20px,25px) scale(0.94); }
}

/* LEFT column — content sits here, z-indexed over the orbs.
   Structural rebalance (D-W018): justify-content: space-between top-anchors
   the headline and bottom-anchors the CTA block, mirroring Unbound's
   editorial vertical rhythm. Generous vertical padding gives the headline
   AND the bottom block actual breathing room from the nav and the
   proof-bar overlap below. */
.hero-content {
  position: relative; z-index: 2;
  display: flex; flex-direction: column;
  justify-content: space-between;
  /* Top padding now includes the ~120px nav clearance (logo went 2× to
     72px; nav-inner padding 1.5rem top+bottom = 48px; total ~120px).
     The bottom padding stays generous to keep the CTA group well off the
     proof-bar overlap. */
  padding: clamp(8.5rem, 11vw, 11rem) clamp(1.5rem, 4vw, 4rem) clamp(4rem, 7vw, 6rem);
  color: var(--pleo-white);
  max-width: 780px;
}
/* Top block — holds just the headline. No margin tricks; the parent's
   space-between does the vertical work. */
.hero-content-top { margin: 0; }
/* Bottom block — sub-promise, meta line, single CTA. Stacked tightly so
   they read as one anchored unit. */
.hero-content-bottom {
  display: flex; flex-direction: column;
  gap: 0;
}
.hero-content .eyebrow {
  background: rgba(255, 255, 255, 0.14);
  border-color: rgba(255, 255, 255, 0.30);
  color: var(--pleo-white);
  backdrop-filter: blur(8px);
  align-self: flex-start;
}
.hero-content h1 {
  /* Display serif — closest open-source match to HubSpot Serif (which
     Unbound uses at weight 300 for their hero). Fraunces is a variable
     font that holds up beautifully at large display sizes when set in
     light weights. Weight 300 + tight tracking is what gives the hero
     its airy editorial feel (vs. the "tech bro" weight 800 Inter we
     started with). D-W019. */
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 300;
  font-size: clamp(3.5rem, 7.2vw, 7rem);
  letter-spacing: -0.02em;                     /* Fraunces 300 reads better with slightly more negative tracking than Instrument Serif 400 did */
  line-height: 0.98;
  /* Bottom padding reserves space for the "g" descender in
     "guaranteed." so it doesn't poke into the .hero-sub paragraph
     below. 0.2em scales with the font-size — at the max 7rem clamp,
     that's ~22px of breathing room. */
  margin: 0;
  padding-bottom: 0.2em;
  text-shadow: 0 2px 30px rgba(0,0,0,0.20);
  /* Variable-font axes — slight optical-size adjustment for display */
  font-variation-settings: "opsz" 144, "SOFT" 50;
}
/* "Not promises." tagline below h1 — italic serif, looks like a signature line.
   Was previously a `<span class="serif">not promises.</span>` INSIDE the h1
   which read as broken layout (orphan word, awkward wrap). Now its own line.
   NOTE: removed from the homepage build in D-W018 but kept in CSS in case
   a future page wants the same effect. */
.hero-content .hero-tagline {
  font-family: 'Fraunces', 'Instrument Serif', serif;
  font-style: italic;
  font-weight: 400;
  font-size: clamp(1.3rem, 2.2vw, 1.95rem);
  color: rgba(255, 255, 255, 0.85);
  margin: 0 0 1.5rem;
  letter-spacing: -0.005em;
}
.hero-content .grad-text {
  /* Saturated end goes LEFT (where eye lands first) so the first letters
     have maximum pop. Was 135deg cream→peach which left "g" almost
     invisible against the magenta. Now 90deg amber→cream — the "g" gets
     the brand-amber, the trailing "d." softens into cream. */
  background: linear-gradient(90deg, #F59E0B 0%, #FBBF24 40%, #FDE68A 75%, #FED7AA 100%);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.30));
}
.hero-content .serif { color: rgba(255, 255, 255, 0.85); }
.hero-content .hero-sub {
  max-width: 540px;
  margin: 0 0 1.25rem;
  font-size: clamp(1.02rem, 1.18vw, 1.15rem);
  color: rgba(255, 255, 255, 0.88);
  line-height: 1.55;
  text-shadow: 0 1px 20px rgba(0,0,0,0.25);
}
.hero-content .hero-sub strong { color: var(--pleo-white); font-weight: 600; }
/* Hero meta line (Unbound parallel to their "September 16-18, 2026 in Boston").
   Gives the visitor a concrete fact to anchor on. Monospace-ish for "data" feel. */
.hero-content .hero-meta {
  display: inline-flex; align-items: center; gap: 0.6rem;
  align-self: flex-start;
  font-size: 0.8rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.62);
  margin: 0 0 1.5rem;
}
.hero-content .hero-meta strong {
  color: var(--pleo-cream);
  font-weight: 600;
}
.hero-content .hero-meta-dot {
  width: 4px; height: 4px; border-radius: 50%;
  background: rgba(255, 255, 255, 0.4);
  display: inline-block;
}
.hero-content .hero-ctas { justify-content: flex-start; }
.hero-content .btn-primary {
  background: var(--pleo-white); color: var(--pleo-ink);
}
.hero-content .btn-primary:hover {
  background: var(--pleo-ink); color: var(--pleo-white);
  box-shadow: 0 8px 28px rgba(0,0,0,0.30);
}
.hero-content .btn-secondary {
  background: rgba(255, 255, 255, 0.08);
  color: var(--pleo-white);
  border-color: rgba(255, 255, 255, 0.45);
  backdrop-filter: blur(8px);
}
.hero-content .btn-secondary:hover {
  background: var(--pleo-white); color: var(--pleo-ink);
  border-color: var(--pleo-white);
}

/* RIGHT column — the shard. clip-path cuts the left edge into the gradient.
   border-radius removed: the shard goes flush to the viewport's right edge,
   so previously-rounded right corners (which created visible gradient-bleed
   gaps) are now sharp. The diagonal polygon cut on the left is the visual
   interest; we don't need extra corner-rounding. */
.hero-shard {
  position: relative;
  width: 100%; height: 100%;
  overflow: hidden;
  isolation: isolate;
  clip-path: var(--shard-clip);
  /* Entrance: subtle rotate-in + fade. Same shape Unbound uses. */
  animation: hero-shard-in 1.6s cubic-bezier(.22, 1, .36, 1) both;
  transform-origin: 100% 50%;
}
@keyframes hero-shard-in {
  0% { opacity: 0; transform: rotate(-6deg) scale(1.04); }
  100% { opacity: 1; transform: rotate(0deg) scale(1); }
}

/* Layer 1: Always-on animated gradient inside the shard (video fallback).
   Warm radial-gradient blobs in brand colors so the fallback looks like
   it belongs even when no video loads. */
.hero-shard-bg {
  position: absolute; inset: 0;
  background:
    radial-gradient(at 25% 25%, #5B21B6 0%, transparent 55%),
    radial-gradient(at 80% 30%, #BE185D 0%, transparent 55%),
    radial-gradient(at 60% 80%, #F97316 0%, transparent 55%),
    radial-gradient(at 30% 70%, #C2410C 0%, transparent 55%),
    linear-gradient(135deg, #0B0D12 0%, #1A0822 100%);
  background-size: 200% 200%, 200% 200%, 200% 200%, 200% 200%, 100% 100%;
  animation: hero-gradient-flow 22s ease-in-out infinite;
  filter: saturate(1.15);
  z-index: 1;
}
@keyframes hero-gradient-flow {
  0%, 100% { background-position: 0% 50%, 100% 50%, 50% 100%, 50% 0%, 0 0; }
  25%     { background-position: 100% 30%, 0% 70%, 80% 80%, 20% 20%, 0 0; }
  50%     { background-position: 80% 80%, 20% 20%, 0% 50%, 100% 50%, 0 0; }
  75%     { background-position: 20% 60%, 80% 40%, 60% 0%, 40% 100%, 0 0; }
}

/* Layer 2: The video itself (optional).
   The current source (strategy-deliberation.mp4) is footage of a meeting
   with people in it. We:
     · `object-position: 50% 75%` — frame on the bottom 25% (hands/table
       area) instead of the centered face area, so we get atmospheric
       texture instead of awkwardly cropped portraits.
     · `filter: blur + brightness + saturate` — turns recognisable footage
       into a moody, on-brand texture. People become silhouettes; motion is
       preserved; the warm overlay below can do its work. */
.hero-shard-video {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 50% 75%;
  filter: blur(2px) brightness(0.78) saturate(1.15);
  z-index: 2;
}

/* Layer 3: Warm-tint overlay — primary role is now to:
     · Tint the (blurred) video with brand color so it harmonises with
       the page gradient instead of reading as a dark hole on the right
     · Bleed in from the left edge so the diagonal cut feels continuous
       with the page gradient
   Two stacked gradients: a left-edge horizontal bleed + a soft warm wash
   over the whole shard. */
.hero-shard-overlay {
  position: absolute; inset: 0;
  background:
    linear-gradient(90deg,
      rgba(91, 33, 182, 0.45) 0%,
      rgba(190, 24, 93, 0.15) 22%,
      transparent 42%),
    linear-gradient(135deg,
      rgba(91, 33, 182, 0.20) 0%,
      rgba(190, 24, 93, 0.15) 50%,
      rgba(249, 115, 22, 0.18) 100%);
  z-index: 3;
}

/* Responsive: on phones the shard moves above the text and squashes wider */
@media (max-width: 900px) {
  .hero {
    grid-template-columns: 1fr;
    grid-template-rows: minmax(280px, 38vh) auto;
    min-height: auto;
    /* Reshape the shard for the stacked layout — bottom edge angled.
       Polygon fallback first. */
    --shard-clip: polygon(0% 0%, 100% 0%, 100% 88%, 50% 100%, 0% 92%);
  }
  /* Curved bottom edge on mobile too — soft wave instead of zigzag. */
  @supports (clip-path: shape(from 0% 0%, line to 100% 0%, close)) {
    .hero {
      --shard-clip: shape(
        from 0% 0%,
        line to 100% 0%,
        line to 100% 90%,
        curve to 0% 90% with 75% 110% / 25% 110%,
        close
      );
    }
  }
  .hero-shard {
    animation: hero-shard-in-mobile 1.2s cubic-bezier(.22, 1, .36, 1) both;
    transform-origin: 50% 0%;
  }
  @keyframes hero-shard-in-mobile {
    0% { opacity: 0; transform: scale(1.06); }
    100% { opacity: 1; transform: scale(1); }
  }
  .hero-content { padding: 3rem 1.5rem 4rem; max-width: 100%; }
}

/* Respect motion preferences — kill animations + hide autoplay video */
@media (prefers-reduced-motion: reduce) {
  .hero-shard-bg { animation: none; }
  .hero-shard-video { display: none; }
  .hero-shard { animation: none; }
  .orb { animation: none; }
}

/* Legacy hero helpers (kept for any non-frame uses) */
.hero-inner { position: relative; z-index: 1; text-align: center; }
.grad-text {
  background: var(--grad-hero);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.serif {
  /* Italic-serif utility class (e.g. inline emphasis). Fraunces in italic is
     beautiful at light weights. */
  font-family: 'Fraunces', 'Instrument Serif', serif;
  font-style: italic;
  font-weight: 400;
}
.hero-sub {
  max-width: 640px; margin: 0 auto 2.25rem;
  font-size: clamp(1.05rem, 1.6vw, 1.25rem);
  color: var(--pleo-text); line-height: 1.55;
}
.hero-ctas {
  display: inline-flex; gap: 0.75rem; flex-wrap: wrap; justify-content: center;
}

/* Inline hero for slim pages (method, contact, about, industries, etc.).
   Carries atmospheric gradient orbs + a soft top→bottom paper gradient so
   the inner pages don't feel flat compared to the homepage. The orbs are
   purely decorative (z-index 0); content sits at z-index 1+. */
.hero-slim {
  position: relative; overflow: hidden;
  padding: 9rem 0 3rem;
  background: linear-gradient(180deg, #fafafa 0%, #ffffff 100%);
}
.hero-slim::before,
.hero-slim::after {
  content: '';
  position: absolute;
  pointer-events: none;
  z-index: 0;
  border-radius: 50%;
  filter: blur(80px);
  opacity: 0.18;
}
.hero-slim::before {
  /* Brand-orange blob top-right */
  width: 420px; height: 420px;
  top: -120px; right: -120px;
  background: radial-gradient(circle at 50% 50%, #F97316, transparent 65%);
}
.hero-slim::after {
  /* Purple blob bottom-left, slightly larger */
  width: 480px; height: 480px;
  bottom: -180px; left: -80px;
  background: radial-gradient(circle at 50% 50%, #5B21B6, transparent 65%);
  opacity: 0.12;
}
/* Hoist hero-slim content above the decorative orbs. The `.container`
   inside hero-slim handles the z-index lift for us. */
.hero-slim > .container,
.hero-slim > * {
  position: relative;
  z-index: 1;
}
.hero-slim h1 {
  /* Matches the homepage hero h1 — Fraunces (D-W019). Light weight (300)
     for editorial display feel. Slightly smaller than the homepage h1
     because secondary pages don't need the same marquee dominance. */
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 300;
  font-size: clamp(2.5rem, 5.5vw, 4.5rem);
  letter-spacing: -0.02em;
  line-height: 1.02;
  margin: 0 0 1rem;
  font-variation-settings: "opsz" 120, "SOFT" 50;
}
.hero-slim p { font-size: 1.15rem; color: var(--pleo-text); max-width: 640px; }

/* -----------------------------
   6 · Eyebrow / Section heads
   ----------------------------- */
.eyebrow {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.4rem 0.9rem;
  background: rgba(34,197,94,0.10);
  border: 1px solid rgba(34,197,94,0.30);
  border-radius: 999px;
  font-size: 0.82rem; font-weight: 600;
  color: #15803d;
  margin-bottom: 1.5rem;
}
.eyebrow-pulse {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--pleo-accent);
  box-shadow: 0 0 0 0 rgba(34,197,94,0.6);
  animation: pleo-pulse 2s infinite;
}
@keyframes pleo-pulse {
  0% { box-shadow: 0 0 0 0 rgba(34,197,94,0.6); }
  100% { box-shadow: 0 0 0 12px rgba(34,197,94,0); }
}
.section-eyebrow {
  /* Lexend Deca for small uppercase labels — geometric letterforms read
     cleaner than Inter at this scale + spacing. D-W019. */
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.82rem; font-weight: 500; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--pleo-primary);
  margin-bottom: 0.75rem;
}
.section-title {
  /* Fraunces — section heads use weight 400 (slightly heavier than the
     hero h1's 300) for in-page presence without competing with the hero. */
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(2.1rem, 4.2vw, 3.5rem);
  letter-spacing: -0.02em;
  line-height: 1.05;
  margin: 0 0 1rem;
  max-width: 800px;
  font-variation-settings: "opsz" 80;
}
.section-lede {
  font-size: 1.15rem; color: var(--pleo-text); max-width: 640px; line-height: 1.55;
  margin: 0 0 3rem;
}

/* -----------------------------
   7 · Buttons
   ----------------------------- */
.btn {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.95rem 1.6rem;
  border-radius: 999px; font-weight: 600; font-size: 1rem;
  transition: transform .15s, box-shadow .15s, background .15s;
  cursor: pointer; border: none;
  text-decoration: none;
}
.btn-primary { background: var(--pleo-ink); color: var(--pleo-white); }
.btn-primary:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.btn-secondary {
  background: transparent; color: var(--pleo-ink);
  border: 1.5px solid var(--pleo-ink);
}
.btn-secondary:hover { background: var(--pleo-ink); color: var(--pleo-white); }
.btn-arrow { transition: transform .15s; display: inline-block; }
.btn:hover .btn-arrow { transform: translateX(3px); }
.arrow { transition: transform .15s; display: inline-block; }
a:hover .arrow { transform: translateX(3px); }

/* -----------------------------
   8 · Proof bar
   ----------------------------- */
.proof {
  position: relative; z-index: 10;
  margin: -2.5rem auto 0; max-width: 1140px;       /* widened from 1000px to fit the 4th MixBound-credential tile */
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-lg);
  padding: 2rem 1.5rem;
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem;
  text-align: center;
}
@media (max-width: 880px) {
  .proof { grid-template-columns: repeat(2, 1fr); gap: 1.25rem; }
}
.proof-item { padding: 0 1rem; }
.proof-item + .proof-item { border-left: 1px solid var(--pleo-line); }
.proof-num {
  font-size: clamp(1.8rem, 3.5vw, 2.5rem);
  font-weight: 800; letter-spacing: -0.03em;
  background: var(--grad-hero);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.proof-label { font-size: 0.9rem; color: var(--pleo-muted); margin-top: 0.25rem; }
@media (max-width: 700px) {
  .proof { grid-template-columns: 1fr; gap: 1.25rem; }
  .proof-item + .proof-item { border-left: 0; border-top: 1px solid var(--pleo-line); padding-top: 1.25rem; }
}

/* -----------------------------
   9 · Method cards
   ----------------------------- */
.method-grid {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.25rem;
}
@media (max-width: 900px) { .method-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 540px) { .method-grid { grid-template-columns: 1fr; } }

/* ============================================================
   4M METHOD SECTION — concept-selling treatment (D-W028)
   ============================================================ */

/* Reveal-on-scroll utility. JS toggles `.is-visible` on any element
   with `.reveal-up` once it enters the viewport (IntersectionObserver).
   Staggered with `.reveal-delay-N` so a 4-card grid cascades smoothly. */
.reveal-up {
  opacity: 0;
  transform: translateY(28px);
  transition:
    opacity 0.7s cubic-bezier(0.2, 0.7, 0.2, 1),
    transform 0.7s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.reveal-up.is-visible {
  opacity: 1;
  transform: translateY(0);
}
.reveal-delay-1.is-visible { transition-delay: 0.06s; }
.reveal-delay-2.is-visible { transition-delay: 0.16s; }
.reveal-delay-3.is-visible { transition-delay: 0.26s; }
.reveal-delay-4.is-visible { transition-delay: 0.36s; }
@media (prefers-reduced-motion: reduce) {
  .reveal-up { opacity: 1; transform: none; transition: none; }
}

.method-section { padding-top: 5rem; padding-bottom: 5rem; }

/* CONCEPT-COMPARE CARDS — side-by-side visual argument: the
   conventional way (silos) vs the 4M way (loop). The visitor sees
   the difference before they read any prose. */
.method-compare {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.5rem;
  margin: 2.5rem 0 3rem;
}
@media (max-width: 880px) { .method-compare { grid-template-columns: 1fr; } }
.method-compare-card {
  position: relative;
  padding: 1.75rem 1.75rem 1.5rem;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.method-compare-bad {
  background:
    linear-gradient(180deg, rgba(11, 13, 18, 0.02) 0%, var(--pleo-white) 100%);
}
.method-compare-good {
  background:
    linear-gradient(135deg, rgba(34, 197, 94, 0.06) 0%, rgba(22, 163, 74, 0.03) 100%),
    var(--pleo-white);
  border-color: rgba(22, 163, 74, 0.30);
  box-shadow: 0 4px 18px rgba(22, 163, 74, 0.08);
}
.method-compare-tag {
  display: inline-block;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-bottom: 0.45rem;
}
.method-compare-bad  .method-compare-tag { color: var(--pleo-muted); }
.method-compare-good .method-compare-tag { color: var(--pleo-primary); }
.method-compare-title {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.15rem, 2vw, 1.4rem);
  letter-spacing: -0.015em;
  line-height: 1.25;
  margin: 0 0 1.25rem;
  color: var(--pleo-ink);
}
/* Broken-silos visual on the left card. 5 disconnected gray boxes
   with × marks between them — the visual point is isolation. Mirrors
   the right card's connected loop diagram (160×160) for height parity
   so both cards have the same top-visual + content rhythm. (D-W032) */
.method-compare-silos {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto 0.85rem;
  width: 160px;
  height: 160px;
}
.method-compare-silos svg { width: 100%; height: 100%; overflow: visible; }
.silo-box {
  fill: var(--pleo-paper);
  stroke: var(--pleo-line);
  stroke-width: 1.5;
  filter: drop-shadow(0 1px 2px rgba(11, 13, 18, 0.05));
}
.silo-x {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 16px;
  font-weight: 400;
  fill: rgba(11, 13, 18, 0.25);
  text-anchor: middle;
  dominant-baseline: middle;
}

/* Vendor / counter blob stack — used on both cards now. Spacing is
   distributed so heights match when the right card has the loop SVG
   pushing content down. (D-W032) */
.method-compare-stack {
  list-style: none;
  padding: 0;
  margin: 0 0 0.5rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.method-compare-stack li {
  display: flex;
  align-items: baseline;
  gap: 0.6rem;
  font-size: 0.88rem;
  color: var(--pleo-text);
}
.method-compare-blob {
  display: inline-flex;
  align-items: center;
  padding: 0.3rem 0.75rem;
  background: var(--pleo-paper);
  border: 1px solid var(--pleo-line);
  border-radius: 6px;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 500;
  color: var(--pleo-ink);
  min-width: 8rem;
}
.method-compare-stack em {
  font-style: normal;
  color: var(--pleo-muted);
  font-size: 0.82rem;
}

/* Good-side loop diagram — animated SVG cycle visualises the 4 phases
   connected. Tightened to 160px for height parity with the left card
   (which has no comparable visual artefact). Arcs + nodes shift to
   semantic GREEN so the right card reads as "the positive answer"
   instead of brand-orange (which is the warning color on the left).
   (D-W032) */
.method-compare-loop {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto 0.85rem;
  width: 160px;
  height: 160px;
}
.method-compare-loop svg { width: 100%; height: 100%; overflow: visible; }
.loop-node {
  fill: var(--pleo-white);
  stroke: #16a34a;
  stroke-width: 2;
  filter: drop-shadow(0 2px 6px rgba(34, 197, 94, 0.18));
  transition: transform 0.3s, fill 0.3s;
  transform-origin: center;
  transform-box: fill-box;
}
.method-compare-good:hover .loop-node {
  fill: rgba(34, 197, 94, 0.10);
}
.loop-arc {
  fill: none;
  stroke: url(#loopGrad);
  stroke-width: 2.2;
  stroke-linecap: round;
  stroke-dasharray: 200;
  stroke-dashoffset: 200;
  animation: pleo-arc-draw 1.6s cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
}
.method-compare-good.is-visible .loop-arc { animation-play-state: running; }
.method-compare-good:not(.is-visible) .loop-arc { animation-play-state: paused; }
.method-compare-good .loop-arc:nth-of-type(1) { animation-delay: 0.2s; }
.method-compare-good .loop-arc:nth-of-type(2) { animation-delay: 0.55s; }
.method-compare-good .loop-arc:nth-of-type(3) { animation-delay: 0.90s; }
.method-compare-good .loop-arc:nth-of-type(4) { animation-delay: 1.25s; }
@keyframes pleo-arc-draw { to { stroke-dashoffset: 0; } }
.loop-label {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 10px;
  font-weight: 600;
  fill: #16a34a;
  text-anchor: middle;
  dominant-baseline: middle;
  letter-spacing: 0.06em;
}
@media (prefers-reduced-motion: reduce) {
  .loop-arc { animation: none; stroke-dashoffset: 0; }
}

.method-compare-list {
  list-style: none;
  padding: 0;
  margin: 0 0 1rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.method-compare-list li {
  display: flex;
  align-items: baseline;
  gap: 0.55rem;
  font-size: 0.9rem;
  line-height: 1.45;
  color: var(--pleo-text);
}
.method-compare-check {
  flex: 0 0 18px;
  width: 18px; height: 18px;
  background: var(--pleo-primary);
  color: var(--pleo-white);
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 800;
  margin-top: 1px;
}
.method-compare-foot {
  margin: auto 0 0;
  padding-top: 0.85rem;
  border-top: 1px solid var(--pleo-line);
  font-size: 0.92rem;
  line-height: 1.55;
  color: var(--pleo-text);
}
.method-compare-foot strong { color: var(--pleo-ink); }
.method-compare-good .method-compare-foot strong { color: var(--pleo-primary); }

/* Research-backed stat strip on the "conventional way" card — three
   sourced numbers (MIT lead study, Indian SMB averages, dental
   abandoned-call data) that turn the abstract "vendors don't connect"
   argument into specific, defensible pain. (D-W031) */
.method-compare-stats {
  margin: 1.1rem 0 0;
  padding: 0.85rem 0;
  border-top: 1px dashed rgba(11, 13, 18, 0.10);
  border-bottom: 1px dashed rgba(11, 13, 18, 0.10);
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
}
.method-compare-stat {
  display: grid;
  grid-template-columns: 5rem 1fr;
  gap: 0.85rem;
  align-items: baseline;
}
.method-compare-stat-num {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 500;
  font-size: 1.25rem;
  letter-spacing: -0.02em;
  color: var(--pleo-ink);
  line-height: 1.1;
}
.method-compare-stat-label {
  font-size: 0.82rem;
  line-height: 1.4;
  color: var(--pleo-text);
}
.method-compare-stat-label em {
  font-style: normal;
  font-size: 0.72rem;
  color: var(--pleo-muted);
  letter-spacing: 0.01em;
}

/* Right-card variants — semantic GREEN so it reads as "the positive
   answer" instead of brand-orange (which the left card uses as warning).
   (D-W032) */
.method-compare-good .method-compare-tag { color: #15803d; }
.method-compare-good .method-compare-blob {
  background: rgba(34, 197, 94, 0.10);
  border-color: rgba(22, 163, 74, 0.32);
  color: #15803d;
}
.method-compare-good .method-compare-stats {
  border-top-color: rgba(22, 163, 74, 0.22);
  border-bottom-color: rgba(22, 163, 74, 0.22);
}
.method-compare-good .method-compare-stat-num {
  color: #15803d;
}
.method-compare-good .method-compare-foot strong {
  color: #15803d;
}

/* DRAMATIC THESIS — the one-line concept punch. Full-width centered
   pull quote with massive serif type. This is the moment a visitor's
   eye gets caught — the section's poster. */
.method-thesis {
  position: relative;
  margin: 3rem auto 3.5rem;
  max-width: 880px;
  padding: 3rem 2rem 2.5rem;
  text-align: center;
  background:
    radial-gradient(ellipse at top, rgba(194, 65, 12, 0.10), transparent 60%),
    radial-gradient(ellipse at bottom, rgba(168, 85, 247, 0.06), transparent 60%);
  border-top: 1px solid var(--pleo-line);
  border-bottom: 1px solid var(--pleo-line);
}
.method-thesis-mark {
  position: absolute;
  top: 0.4rem;
  left: 50%;
  transform: translateX(-50%);
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 500;
  font-size: 4rem;
  line-height: 1;
  color: var(--pleo-primary);
  opacity: 0.22;
  pointer-events: none;
  user-select: none;
}
.method-thesis-body {
  margin: 0 auto 1.25rem;
  max-width: 720px;
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 300;
  font-size: clamp(1.75rem, 4vw, 3rem);
  letter-spacing: -0.025em;
  line-height: 1.15;
  color: var(--pleo-ink);
}
.thesis-strike {
  position: relative;
  font-style: italic;
  color: var(--pleo-muted);
  font-weight: 300;
}
.thesis-strike::after {
  content: '';
  position: absolute;
  left: -4%; right: -4%;
  top: 55%;
  height: 2px;
  background: var(--pleo-muted);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.6s 0.4s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.method-thesis.is-visible .thesis-strike::after { transform: scaleX(1); }
.thesis-emphasis {
  font-weight: 500;
  font-style: italic;
  background: linear-gradient(135deg, var(--pleo-primary), #F97316);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  position: relative;
}
.thesis-emphasis::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: -0.15em;
  height: 4px;
  background: linear-gradient(90deg, var(--pleo-primary), #F97316);
  border-radius: 4px;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.7s 0.7s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.method-thesis.is-visible .thesis-emphasis::after { transform: scaleX(1); }
.method-thesis-sub {
  margin: 0 auto;
  max-width: 640px;
  font-size: 0.96rem;
  line-height: 1.6;
  color: var(--pleo-text);
}
.thesis-formula {
  display: inline-block;
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-style: italic;
  color: var(--pleo-ink);
  font-weight: 500;
  padding: 0 0.2rem;
  background: rgba(249, 115, 22, 0.08);
  border-radius: 3px;
}

/* Synergy chain — tight homepage version. 4 mini-step rows scan in
   2 seconds. Detail goes to /method. (D-W028 trim) */
.method-chain {
  margin-top: 2.5rem;
  padding: 1.5rem 1.75rem 1.25rem;
  background: var(--pleo-paper);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
}
.method-chain-head {
  display: flex;
  align-items: baseline;
  gap: 0.85rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
}
.method-chain-eyebrow {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--pleo-primary);
}
.method-chain-title {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.1rem, 2vw, 1.35rem);
  letter-spacing: -0.015em;
  margin: 0;
  color: var(--pleo-ink);
}
.method-chain-steps {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0.5rem;
}
@media (max-width: 880px) {
  .method-chain-steps { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 480px) {
  .method-chain-steps { grid-template-columns: 1fr; }
}
.method-chain-steps li {
  display: grid;
  grid-template-columns: auto auto auto;
  grid-template-rows: auto auto;
  column-gap: 0.4rem;
  row-gap: 0.25rem;
  align-items: center;
  padding: 0.7rem 0.85rem;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-md);
  transition: border-color .2s, transform .2s;
}
.method-chain-steps li:hover {
  border-color: var(--pleo-primary);
  transform: translateY(-1px);
}
.method-chain-from,
.method-chain-to {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--pleo-ink);
  text-transform: uppercase;
}
.method-chain-arrow {
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--pleo-primary);
  text-align: center;
}
.method-chain-steps li em {
  grid-column: 1 / -1;
  font-style: normal;
  font-size: 0.82rem;
  line-height: 1.4;
  color: var(--pleo-muted);
  margin-top: 0.1rem;
}
/* Loop-closing step — orange tint so the loop visually closes back to MAP */
.method-chain-loop {
  background: rgba(249, 115, 22, 0.06) !important;
  border-color: rgba(194, 65, 12, 0.25) !important;
}
.method-chain-loop .method-chain-arrow { font-size: 1.05rem; }
.method-chain-foot {
  margin: 1.25rem 0 0;
  padding-top: 1rem;
  border-top: 1px solid var(--pleo-line);
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.5rem;
  align-items: baseline;
  justify-content: space-between;
}
.method-chain-punch {
  margin: 0;
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1rem, 1.6vw, 1.15rem);
  letter-spacing: -0.01em;
  color: var(--pleo-ink);
  line-height: 1.4;
}
.method-chain-punch strong {
  font-weight: 500;
  font-style: italic;
  color: var(--pleo-primary);
  margin-left: 0.15rem;
}
.method-chain-more {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--pleo-primary);
  text-decoration: none;
  white-space: nowrap;
}
.method-chain-more:hover { text-decoration: underline; text-underline-offset: 3px; }

/* /method page — "Why MixBound exists" intro paragraphs + "What's
   structurally different" numbered manifesto (D-W030). Longer-form
   reading treatment than the homepage. */
.method-intro {
  display: flex;
  flex-direction: column;
  gap: 1.1rem;
}
.method-intro p {
  margin: 0;
  font-size: 1.05rem;
  line-height: 1.75;
  color: var(--pleo-text);
}
.method-intro p strong {
  color: var(--pleo-ink);
  font-weight: 600;
}

/* Numbered manifesto items — 5 structural commitments. Each item is a
   card with a big serif index number on the left and a headline + body
   on the right. Stacks vertically (one row per item) so each
   commitment gets its own breath. */
.method-unique-list {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  margin-top: 2.5rem;
}
.method-unique-item {
  display: grid;
  grid-template-columns: 5rem 1fr;
  gap: 1.5rem;
  align-items: start;
  padding: 1.5rem 1.75rem;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  transition: border-color .2s, transform .2s, box-shadow .2s;
}
.method-unique-item:hover {
  border-color: var(--pleo-primary);
  transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(11, 13, 18, 0.05);
}
@media (max-width: 640px) {
  .method-unique-item {
    grid-template-columns: 1fr;
    gap: 0.5rem;
    padding: 1.25rem 1.4rem;
  }
}
.method-unique-num {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(2.25rem, 4vw, 3rem);
  letter-spacing: -0.03em;
  line-height: 0.95;
  color: var(--pleo-primary);
  opacity: 0.85;
}
.method-unique-body { display: flex; flex-direction: column; gap: 0.4rem; min-width: 0; }
.method-unique-title {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.2rem, 2vw, 1.45rem);
  letter-spacing: -0.015em;
  line-height: 1.25;
  color: var(--pleo-ink);
  margin: 0;
}
.method-unique-body p {
  margin: 0;
  font-size: 0.96rem;
  line-height: 1.65;
  color: var(--pleo-text);
}
.method-card {
  position: relative; overflow: hidden;
  padding: 2rem 1.5rem;
  border-radius: var(--radius-lg);
  color: var(--pleo-white);
  min-height: 280px;
  display: flex; flex-direction: column; justify-content: space-between;
  transition: transform .25s, box-shadow .25s;
}
.method-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.method-card.c1 { background: var(--grad-card-1); }
.method-card.c2 { background: var(--grad-card-2); }
.method-card.c3 { background: var(--grad-card-3); }
.method-card.c4 { background: var(--grad-card-4); }
/* The 4M step indicator at the top of each method card. Was a tiny single
   uppercase line (M1 · MAP at 0.8rem) that read as a hairline label — the
   4M mnemonic visually disappeared. Now a two-part visual: a numbered
   CHIP (M1, M2, M3, M4) + the phase NAME (MAP / MOLD / MOVE / MULTIPLY).
   Chip is the visual anchor; label sits to its right.

   Why this matters: the 4M mnemonic IS the method brand. Hiding it as a
   hairline meant the homepage proved we have a method but didn't help
   the visitor remember WHICH method. The chip is the brand carrier. */
.method-step {
  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
  margin-bottom: 0.25rem;
}
.method-step-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 38px;
  height: 32px;
  padding: 0 0.55rem;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.18);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  font-size: 0.9rem;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--pleo-white);
}
.method-step-label {
  font-size: 0.95rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--pleo-white);
  opacity: 0.95;
}
.method-name {
  font-size: 1.75rem; font-weight: 800; letter-spacing: -0.02em;
  margin: 0.5rem 0 0.75rem;
}
.method-desc { font-size: 0.95rem; opacity: 0.92; line-height: 1.5; }
.method-duration {
  margin-top: 1rem;
  font-size: 0.8rem; opacity: 0.8;
  display: inline-flex; align-items: center; gap: 0.4rem;
}

/* -----------------------------
   10 · Treatments grid
   ----------------------------- */
.treatments-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; }
@media (max-width: 800px) { .treatments-grid { grid-template-columns: 1fr; } }
.treatment-card {
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  padding: 2rem;
  transition: border-color .2s, transform .2s, box-shadow .2s;
}
.treatment-card:hover {
  border-color: var(--pleo-primary);
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}
.treatment-name {
  font-size: 1.4rem; font-weight: 700; letter-spacing: -0.02em;
  margin: 0 0 0.5rem;
}
.treatment-meta {
  display: flex; gap: 0.5rem; flex-wrap: wrap;
  font-size: 0.85rem; color: var(--pleo-muted);
  margin-bottom: 1rem;
}
.treatment-meta-pill {
  padding: 0.25rem 0.6rem;
  background: var(--pleo-paper);
  border-radius: 999px;
}
.treatment-meta-pill strong { color: var(--pleo-ink); }
.treatment-desc { color: var(--pleo-text); line-height: 1.55; margin: 0 0 1.25rem; }
.treatment-link {
  font-weight: 600; color: var(--pleo-primary);
  display: inline-flex; align-items: center; gap: 0.35rem;
}

/* Industry-card icon — symbolic SVG in a tinted rounded badge sitting at
   the top-left of each card on the homepage industries grid (D-W021).
   Replaces the previous tiny unicode glyph with a real category symbol
   that reads at a glance — paw / dumbbell / tooth / scissors / sparkles. */
.ind-card {
  position: relative;
  padding-top: 1.75rem;
}
.ind-card-icon {
  width: 64px;
  height: 64px;
  border-radius: 18px;
  background:
    linear-gradient(135deg, rgba(194, 65, 12, 0.10) 0%, rgba(249, 115, 22, 0.06) 100%);
  border: 1px solid rgba(194, 65, 12, 0.18);
  color: var(--pleo-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 1.1rem;
  transition: transform .25s ease, background .25s ease, border-color .25s ease;
}
.ind-card:hover .ind-card-icon {
  transform: translateY(-1px) scale(1.04);
  background:
    linear-gradient(135deg, rgba(194, 65, 12, 0.16) 0%, rgba(249, 115, 22, 0.10) 100%);
  border-color: rgba(194, 65, 12, 0.32);
}
.ind-card-icon svg {
  width: 34px;
  height: 34px;
  display: block;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
}
/* "Don't see your industry?" inquiry card — dashed border on the badge so
   it reads as "open slot" rather than "established category". */
.ind-card-icon-dashed {
  background: var(--pleo-white);
  border: 1.5px dashed rgba(194, 65, 12, 0.45);
  color: var(--pleo-primary);
}
.ind-card-icon-dashed svg { stroke-width: 2; }
.ind-card-inquiry {
  background: linear-gradient(135deg, #fafafa 0%, #ffffff 100%);
}

/* ============================================================
   /industries index cards — image-background variant (D-W034)
   ============================================================
   Each industry card uses a stock photo as the full background.
   A dark gradient overlay keeps text legible regardless of the
   image's content. The whole card is a single <a> for full-card
   click targeting. Hover zooms the image subtly and brightens
   the overlay. */
.ind-bg-card {
  position: relative;
  display: block;
  height: 320px;
  border-radius: var(--radius-lg);
  overflow: hidden;
  border: 1px solid var(--pleo-line);
  text-decoration: none;
  isolation: isolate;
  transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.ind-bg-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 30px rgba(11, 13, 18, 0.18);
  border-color: var(--pleo-primary);
}
.ind-bg-img {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  transition: transform .6s cubic-bezier(0.2, 0.7, 0.2, 1);
  z-index: 0;
}
.ind-bg-img-fallback {
  background:
    linear-gradient(135deg, rgba(194, 65, 12, 0.18), rgba(168, 85, 247, 0.10)),
    var(--pleo-paper);
}
.ind-bg-card:hover .ind-bg-img { transform: scale(1.06); }
.ind-bg-overlay {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg, rgba(11, 13, 18, 0.15) 0%, rgba(11, 13, 18, 0.55) 55%, rgba(11, 13, 18, 0.85) 100%);
  z-index: 1;
  transition: opacity .25s;
}
.ind-bg-card:hover .ind-bg-overlay {
  background:
    linear-gradient(180deg, rgba(11, 13, 18, 0.20) 0%, rgba(11, 13, 18, 0.60) 55%, rgba(11, 13, 18, 0.88) 100%);
}
.ind-bg-content {
  position: relative;
  z-index: 2;
  height: 100%;
  padding: 1.5rem 1.5rem 1.4rem;
  display: flex;
  flex-direction: column;
  color: var(--pleo-white);
}
.ind-bg-icon {
  width: 48px;
  height: 48px;
  border-radius: 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.18);
  border: 1px solid rgba(255, 255, 255, 0.30);
  color: var(--pleo-white);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  transition: background .25s, transform .25s;
}
.ind-bg-card:hover .ind-bg-icon {
  background: rgba(249, 115, 22, 0.85);
  border-color: rgba(249, 115, 22, 1);
  transform: scale(1.05);
}
.ind-bg-icon svg {
  width: 26px; height: 26px;
  fill: none; stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.ind-bg-icon-dashed {
  background: rgba(255, 255, 255, 0.06);
  border: 1.5px dashed rgba(255, 255, 255, 0.5);
}
.ind-bg-name {
  margin: auto 0 0.45rem;
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.4rem, 2.4vw, 1.7rem);
  letter-spacing: -0.015em;
  line-height: 1.15;
  color: var(--pleo-white);
  text-shadow: 0 1px 6px rgba(0, 0, 0, 0.35);
}
.ind-bg-tag {
  margin: 0 0 0.85rem;
  font-size: 0.92rem;
  line-height: 1.45;
  color: rgba(255, 255, 255, 0.88);
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
  /* Cap at ~3 lines so cards stay aligned across the grid */
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.ind-bg-link {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.88rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--pleo-white);
  padding: 0.45rem 0.85rem;
  background: rgba(249, 115, 22, 0.85);
  border-radius: 999px;
  width: fit-content;
  transition: background .2s, transform .2s;
}
.ind-bg-card:hover .ind-bg-link {
  background: var(--pleo-primary);
  transform: translateX(2px);
}
.ind-bg-link .arrow { transition: transform .15s; }
.ind-bg-card:hover .ind-bg-link .arrow { transform: translateX(3px); }

/* Status pill (Live / Exploring) — sits top-right of homepage industry
   cards, overlaid on the image. Live = green; Exploring = neutral. */
.ind-bg-status {
  position: absolute;
  top: 1.1rem;
  right: 1.1rem;
  z-index: 3;
  padding: 0.3rem 0.7rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-white);
  background: rgba(11, 13, 18, 0.6);
  border: 1px solid rgba(255, 255, 255, 0.20);
  border-radius: 999px;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}
.ind-bg-status-live {
  background: rgba(34, 197, 94, 0.85);
  border-color: rgba(34, 197, 94, 1);
}

/* Inquiry-card variant — same shape but no image, soft paper gradient
   instead, dashed icon hints "open slot." */
.ind-bg-card-inquiry {
  background: linear-gradient(135deg, var(--pleo-paper) 0%, var(--pleo-white) 100%);
  border-style: dashed;
}
.ind-bg-card-inquiry .ind-bg-overlay { display: none; }
.ind-bg-card-inquiry .ind-bg-content { color: var(--pleo-ink); }
.ind-bg-card-inquiry .ind-bg-icon {
  background: rgba(249, 115, 22, 0.08);
  border: 1.5px dashed rgba(194, 65, 12, 0.5);
  color: var(--pleo-primary);
  backdrop-filter: none;
}
.ind-bg-card-inquiry .ind-bg-name { color: var(--pleo-ink); text-shadow: none; }
.ind-bg-card-inquiry .ind-bg-tag { color: var(--pleo-text); text-shadow: none; }
.ind-bg-card-inquiry:hover .ind-bg-icon {
  background: rgba(249, 115, 22, 0.15);
  border-color: var(--pleo-primary);
  color: var(--pleo-primary);
}

@media (prefers-reduced-motion: reduce) {
  .ind-bg-img, .ind-bg-card, .ind-bg-icon, .ind-bg-link { transition: none; }
  .ind-bg-card:hover .ind-bg-img { transform: none; }
}

/* -----------------------------
   11 · Pricing tier cards
   ----------------------------- */
.pricing-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; }
@media (max-width: 800px) { .pricing-grid { grid-template-columns: 1fr; } }
.price-card {
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-xl);
  padding: 2.5rem;
  position: relative; overflow: hidden;
  transition: transform .25s, box-shadow .25s;
}
.price-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); }
/* Standard plan card — animated moving-glow treatment (D-W024). Dark
   gradient base + two orbiting radial glow blobs (orange + deep purple)
   that drift in slow loops behind the content. The blobs are blurred so
   they read as ambient light, not visible UI, and never cross the card
   edge thanks to overflow:hidden on the parent. Honours
   prefers-reduced-motion. */
.price-card.featured {
  border-color: transparent;
  background:
    radial-gradient(ellipse at 100% 0%, rgba(194, 65, 12, 0.18), transparent 60%),
    radial-gradient(ellipse at 0% 100%, rgba(91, 33, 182, 0.22), transparent 60%),
    linear-gradient(135deg, #0b0d12 0%, #14101a 50%, #0b0d12 100%);
  color: var(--pleo-white);
  overflow: hidden;
  isolation: isolate;            /* contain blend-mode of the glow blobs */
}

/* Orbiting glow #1 — bright orange, primary visual anchor, slow loop. */
.price-card.featured::before {
  content: '';
  position: absolute;
  width: 70%;
  height: 70%;
  top: -25%;
  left: -25%;
  border-radius: 50%;
  background: radial-gradient(circle,
    rgba(249, 115, 22, 0.55) 0%,
    rgba(194, 65, 12, 0.32) 35%,
    transparent 70%);
  filter: blur(40px);
  pointer-events: none;
  z-index: 0;
  animation: pleo-glow-orbit-a 14s ease-in-out infinite;
  will-change: transform;
}

/* Orbiting glow #2 — deeper purple, opposite phase, longer cycle so the
   two glows never line up — keeps the motion feeling organic. */
.price-card.featured::after {
  content: '';
  position: absolute;
  width: 60%;
  height: 60%;
  bottom: -20%;
  right: -20%;
  border-radius: 50%;
  background: radial-gradient(circle,
    rgba(168, 85, 247, 0.45) 0%,
    rgba(91, 33, 182, 0.28) 35%,
    transparent 70%);
  filter: blur(48px);
  pointer-events: none;
  z-index: 0;
  animation: pleo-glow-orbit-b 18s ease-in-out infinite;
  will-change: transform;
}

@keyframes pleo-glow-orbit-a {
  0%   { transform: translate(0, 0)        scale(1);   }
  25%  { transform: translate(60%, 30%)    scale(1.1); }
  50%  { transform: translate(120%, 80%)   scale(0.95);}
  75%  { transform: translate(60%, 110%)   scale(1.05);}
  100% { transform: translate(0, 0)        scale(1);   }
}

@keyframes pleo-glow-orbit-b {
  0%   { transform: translate(0, 0)         scale(1);   }
  33%  { transform: translate(-80%, -50%)   scale(1.1); }
  66%  { transform: translate(-40%, -110%)  scale(0.9); }
  100% { transform: translate(0, 0)         scale(1);   }
}

/* Respect motion preferences — kill the orbit when the visitor opts out
   but keep the static glow look so the card still has visual richness. */
@media (prefers-reduced-motion: reduce) {
  .price-card.featured::before,
  .price-card.featured::after { animation: none; }
}

.price-card > * { position: relative; z-index: 1; }
.price-badge {
  display: inline-block;
  padding: 0.3rem 0.7rem;
  background: rgba(34,197,94,0.12);
  color: #15803d;
  border-radius: 999px;
  font-size: 0.75rem; font-weight: 700; letter-spacing: 0.05em;
  text-transform: uppercase;
  margin-bottom: 1rem;
}
.price-card.featured .price-badge {
  background: rgba(249, 115, 22, 0.18);
  color: #fed7aa;
  border: 1px solid rgba(249, 115, 22, 0.35);
}
.price-name { font-size: 1.5rem; font-weight: 700; letter-spacing: -0.02em; margin: 0 0 0.5rem; }
.price-tagline { color: var(--pleo-muted); font-size: 0.95rem; margin-bottom: 1.5rem; }
.price-card.featured .price-tagline { color: rgba(255,255,255,0.7); }
.price-amount {
  font-size: 2.75rem; font-weight: 800; letter-spacing: -0.03em;
  line-height: 1; margin-bottom: 0.25rem;
}
.price-amount-sub { color: var(--pleo-muted); font-size: 0.9rem; margin-bottom: 2rem; }
.price-card.featured .price-amount-sub { color: rgba(255,255,255,0.65); }
.price-list { list-style: none; padding: 0; margin: 0 0 2rem; }
.price-list li {
  padding: 0.6rem 0;
  border-top: 1px solid var(--pleo-line);
  font-size: 0.95rem; line-height: 1.4;
  display: flex; align-items: flex-start; gap: 0.6rem;
}
.price-card.featured .price-list li { border-top-color: rgba(255,255,255,0.12); }
.check {
  flex: 0 0 18px; width: 18px; height: 18px; margin-top: 2px;
  border-radius: 50%;
  background: var(--pleo-accent);
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--pleo-white); font-size: 11px; font-weight: 800;
}
.price-cta {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.85rem 1.4rem;
  border-radius: 999px;
  font-weight: 600;
  background: var(--pleo-ink); color: var(--pleo-white);
  transition: transform .15s, background .15s;
}
.price-card.featured .price-cta { background: var(--pleo-white); color: var(--pleo-ink); }
.price-cta:hover { transform: translateY(-1px); }

/* -----------------------------
   12 · Field guides / generic cards
   ----------------------------- */
.guides-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.25rem; }
@media (max-width: 900px) { .guides-grid { grid-template-columns: 1fr; } }
.guide-card {
  padding: 1.75rem;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-md);
  transition: border-color .2s, transform .2s;
  display: block;
}
.guide-card:hover { border-color: var(--pleo-ink); transform: translateY(-2px); }
/* Featured guide-card variant — used for the calculator entry */
.guide-card-feature {
  background:
    linear-gradient(135deg, rgba(42,109,244,0.05) 0%, rgba(217,70,239,0.05) 100%),
    var(--pleo-white);
  border-color: rgba(42, 109, 244, 0.25);
}
.guide-card-feature:hover { border-color: var(--pleo-primary); }

/* Calculator card — has no stock image like its siblings, so we fill the
   bottom of the card with a demo-math preview block. Reads as the
   calculator's sample output (₹50K spend → 120 leads → 23 booked → ₹2,174
   per booked). Visual anchor + click-through teaser in one (D-W026). */
.guide-card-calc {
  display: flex;
  flex-direction: column;
}
.guide-card-calc .guide-meta { margin-bottom: 1.25rem; }
.calc-card-preview {
  margin-top: auto;                       /* pin to bottom of card */
  padding: 1rem 1.1rem;
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid rgba(194, 65, 12, 0.18);
  border-radius: var(--radius-md);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.82rem;
  color: var(--pleo-text);
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  transition: border-color .2s ease, background .2s ease;
}
.guide-card-calc:hover .calc-card-preview {
  border-color: rgba(194, 65, 12, 0.4);
  background: rgba(255, 255, 255, 0.85);
}
.calc-card-preview-eyebrow {
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--pleo-primary);
  margin-bottom: 0.25rem;
}
.calc-card-preview-row {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: baseline;
  gap: 0.5rem;
  padding: 0.3rem 0;
  border-bottom: 1px dashed rgba(194, 65, 12, 0.12);
}
.calc-card-preview-row:last-of-type { border-bottom: none; }
.calc-card-preview-label {
  color: var(--pleo-muted);
  font-size: 0.8rem;
}
.calc-card-preview-arrow {
  color: var(--pleo-primary);
  font-weight: 600;
  text-align: center;
}
.calc-card-preview-value {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 500;
  font-size: 0.95rem;
  color: var(--pleo-ink);
  letter-spacing: -0.01em;
  text-align: right;
}
.calc-card-preview-row-result {
  margin-top: 0.25rem;
  padding-top: 0.6rem;
  border-top: 1px solid rgba(194, 65, 12, 0.18);
}
.calc-card-preview-value-emphasize {
  font-size: 1.4rem;
  color: var(--pleo-primary);
}
.calc-card-preview-foot {
  margin-top: 0.5rem;
  padding-top: 0.5rem;
  border-top: 1px dashed rgba(194, 65, 12, 0.12);
  font-size: 0.74rem;
  color: var(--pleo-muted);
  text-align: center;
  letter-spacing: 0.01em;
}
.guide-tag {
  display: inline-block;
  font-size: 0.75rem; font-weight: 700; letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--pleo-magenta);
  margin-bottom: 0.75rem;
}
.guide-title {
  font-size: 1.15rem; font-weight: 700; letter-spacing: -0.015em;
  line-height: 1.3; margin: 0 0 0.5rem;
}
.guide-meta { font-size: 0.85rem; color: var(--pleo-muted); }

/* Field-guide cards WITH stock image — image-on-top variant.
   Used on /playbooks listing, on homepage playbooks strip, and on
   related-guides cards at the bottom of each detail page. The card
   stretches vertically so the bottom (.guide-meta) sits flush across a
   3-up grid regardless of title length. */
.guide-card-with-img {
  padding: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.guide-card-img {
  width: 100%;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--pleo-paper);
  position: relative;
}
.guide-card-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform .35s ease;
}
.guide-card-with-img:hover .guide-card-img img {
  transform: scale(1.04);
}
.guide-card-body {
  padding: 1.4rem 1.5rem 1.5rem;
  display: flex;
  flex-direction: column;
  flex: 1;
}
.guide-card-body .guide-meta {
  margin-top: auto;
  padding-top: 0.75rem;
}

/* Hero image for the field-guide DETAIL pages. Sits below .hero-slim
   header (eyebrow + h1 + dek + meta) and above the long-form article
   body. Constrained to a comfortable editorial width that lines up with
   the article column below, and gets a soft rounded corner + thin line. */
.guide-hero-img-wrap {
  padding: 0.5rem 0 2rem;
}
.guide-hero-img {
  margin: 0 auto;
  max-width: 920px;
  border-radius: var(--radius-lg);
  overflow: hidden;
  border: 1px solid var(--pleo-line);
  box-shadow: 0 8px 28px rgba(11, 13, 18, 0.08);
  aspect-ratio: 16 / 9;
  background: var(--pleo-paper);
}
.guide-hero-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
@media (max-width: 700px) {
  .guide-hero-img { border-radius: var(--radius-md); aspect-ratio: 4 / 3; }
}

/* -----------------------------
   12b · Mock client-logos RIBBON
   -----------------------------
   Continuously-scrolling marquee of logos. Sits between the proof bar
   and the 4M Method on the homepage. Reads as "we know your category"
   ambient social proof rather than a static badge wall — the motion
   draws the eye without demanding focus.

   How the seamless loop works:
     · The track contains TWO IDENTICAL copies of the logo list (rendered
       server-side by `_client_logo_strip()` in `build_root_pages.py`).
     · `animation` translates the track from `translateX(0)` to
       `translateX(-50%)`. At -50% the second copy of the list is
       perfectly aligned with where the first copy started, so the
       cycle restarts visually identical — no jump.
     · `prefers-reduced-motion` kills the animation entirely.
     · Hover pauses motion so visitors can read each logo.

   Driven by `_data/mock_logos.py`. The brands shown are MOCK placeholders
   until real clients are retained — see that file's docstring for the
   real-client swap procedure. The ribbon auto-shows a small "mock
   preview" caveat in the eyebrow as long as `IS_MOCK = True`.
   ----------------------------- */

.logo-strip-section {
  padding: 4.5rem 0 4rem;
  background: var(--pleo-white);
  overflow: hidden;                  /* clip the marquee at the viewport edges */
}
.logo-strip-eyebrow {
  text-align: center;
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-muted);
  margin: 0 0 2rem;
}

/* Ribbon viewport. Full-bleed (lives outside the .container) so the
   marquee can scroll off either edge. The mask-image creates a soft
   fade at the left and right edges so logos don't pop in/out hard. */
.logo-strip {
  position: relative;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg,
    transparent 0%,
    #000 6%,
    #000 94%,
    transparent 100%);
          mask-image: linear-gradient(90deg,
    transparent 0%,
    #000 6%,
    #000 94%,
    transparent 100%);
}

/* The animated track. width: max-content lets it lay all 40 logos
   (2 × 20 for the seamless loop) on one horizontal line that exceeds
   the viewport — the animation then translates it. */
.logo-strip-track {
  display: flex;
  align-items: center;
  width: max-content;
  gap: clamp(2.5rem, 4.5vw, 4.5rem);
  /* 60s for one full traversal of one set of 20 logos. Slow enough that
     each logo is readable for ~3s as it passes the centerline; fast
     enough that the motion registers as "active" not "stuck". */
  animation: logo-marquee 60s linear infinite;
}
.logo-strip-track:hover { animation-play-state: paused; }

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

.logo-strip-item {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  /* Larger than the previous 56px static grid — the ribbon's smaller
     visual share (one row, ambient) needs each logo to be its own
     focal point as it passes. */
  height: 80px;
  filter: grayscale(1);
  opacity: 0.55;
  transition: filter .2s ease-out, opacity .2s ease-out, transform .2s ease-out;
}
.logo-strip-item:hover {
  filter: grayscale(0);
  opacity: 1;
  transform: translateY(-2px);
}
.logo-strip-item img {
  /* max-width caps unusually wide logos from dominating the ribbon's
     horizontal rhythm; max-height keeps the row visually aligned. */
  max-width: 170px;
  max-height: 80px;
  width: auto;
  height: auto;
  object-fit: contain;
}

@media (max-width: 800px) {
  /* Smaller logos + tighter gap on phones so 3-4 are visible at once */
  .logo-strip-item { height: 60px; }
  .logo-strip-item img { max-width: 130px; max-height: 60px; }
  .logo-strip-track { gap: 2rem; }
}

@media (prefers-reduced-motion: reduce) {
  /* Honour OS-level motion-reduction. The 20 logos stay in DOM order but
     no longer animate — visitor sees a static row of the first ~6. */
  .logo-strip-track { animation: none; }
}

/* -----------------------------
   12c · Tech stack tiles ("Partnerships & stack" section)
   -----------------------------
   Static grid of tools we integrate to operate the appointment engine.
   Deliberately different visual treatment from the client logos ribbon
   (12b) so the two sections don't feel redundant:
     · Client ribbon  = MOTION, grayscale, "trusted by"
     · Stack grid     = STATIC, full color, "powered by"
   Each tile shows logo + tool name + small category label so the visitor
   gets both visual recognition AND an explanation of where the tool fits
   in the engine.

   Driven by `_data/tech_stack.py`. Add/remove tools there.
   ----------------------------- */

.stack-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 1rem;
  margin-top: 2rem;
}
@media (max-width: 1100px) { .stack-grid { grid-template-columns: repeat(4, 1fr); } }
@media (max-width: 700px)  { .stack-grid { grid-template-columns: repeat(2, 1fr); } }

.stack-tile {
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-md);
  padding: 1.5rem 1rem 1.25rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 0.6rem;
  transition: transform .2s ease-out, border-color .2s ease-out, box-shadow .2s ease-out;
}
.stack-tile:hover {
  transform: translateY(-3px);
  border-color: var(--pleo-primary);
  box-shadow: 0 8px 20px rgba(11, 13, 18, 0.06);
}
.stack-tile-logo {
  /* Fixed-height logo well so tiles align even when source PNGs have
     different aspect ratios. The 56px height + object-fit: contain on
     the <img> keeps each logo whole. */
  height: 56px;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
.stack-tile-logo img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
}
.stack-tile-name {
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--pleo-ink);
  letter-spacing: -0.01em;
}
.stack-tile-cat {
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--pleo-muted);
}

/* -----------------------------
   12d · FAQ page layout
   -----------------------------
   Two-column layout on desktop: sticky TOC sidebar (jump links per
   category) on the left, scrolling Q&A body on the right. Single column
   on phones. Each Q&A uses native <details>/<summary> for accessibility —
   keyboard-navigable, screen-reader-friendly, zero JS required.
   ----------------------------- */

.faq-layout {
  display: grid;
  grid-template-columns: 240px 1fr;
  gap: clamp(2rem, 4vw, 4rem);
  align-items: start;
}
@media (max-width: 900px) {
  .faq-layout { grid-template-columns: 1fr; }
  .faq-toc { position: static !important; }
}

.faq-toc {
  position: sticky;
  top: 140px;                          /* clears the 120px-tall fixed nav with a 20px gap */
  font-size: 0.92rem;
}
.faq-toc-label {
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-muted);
  margin-bottom: 0.75rem;
}
.faq-toc ol {
  list-style: none; padding: 0; margin: 0;
  counter-reset: faq-toc;
}
.faq-toc li {
  counter-increment: faq-toc;
  padding: 0.4rem 0;
  border-bottom: 1px solid var(--pleo-line);
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 0.5rem;
}
.faq-toc li:last-child { border-bottom: 0; }
.faq-toc li::before {
  content: counter(faq-toc, decimal-leading-zero);
  font-size: 0.7rem;
  font-weight: 700;
  color: var(--pleo-primary);
  letter-spacing: 0.04em;
  margin-right: 0.5rem;
}
.faq-toc a {
  color: var(--pleo-ink);
  font-weight: 600;
  flex: 1;
}
.faq-toc a:hover { color: var(--pleo-primary); }
.faq-toc-count {
  font-size: 0.78rem;
  color: var(--pleo-muted);
  font-weight: 500;
}

.faq-group { margin-bottom: 3rem; scroll-margin-top: 140px; }
.faq-group-title {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.6rem, 3vw, 2.25rem);
  letter-spacing: -0.015em;
  margin: 0 0 0.5rem;
  color: var(--pleo-ink);
}
.faq-group-intro {
  color: var(--pleo-muted);
  font-size: 0.95rem;
  margin: 0 0 1.5rem;
}

.faq-item {
  border-top: 1px solid var(--pleo-line);
  padding: 1.25rem 0;
}
.faq-item:last-child { border-bottom: 1px solid var(--pleo-line); }
.faq-item summary {
  font-size: 1.08rem;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--pleo-ink);
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: '+';
  font-size: 1.5rem;
  font-weight: 300;
  color: var(--pleo-primary);
  line-height: 1;
  flex: 0 0 auto;
  transition: transform .2s ease-out;
}
.faq-item[open] summary::after {
  transform: rotate(45deg);
}
.faq-answer {
  margin-top: 0.85rem;
  color: var(--pleo-text);
  font-size: 0.98rem;
  line-height: 1.65;
}
.faq-answer p { margin: 0; }

/* CTA block reused on /faq, /how-it-works, /guarantees */
.faq-cta-block {
  margin-top: 3rem;
  padding: 2.5rem 2rem;
  background: var(--pleo-paper);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  text-align: center;
}
.faq-cta-block h2 {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.5rem, 2.8vw, 2rem);
  letter-spacing: -0.015em;
  margin: 0 0 0.5rem;
  color: var(--pleo-ink);
}
.faq-cta-block p {
  color: var(--pleo-text);
  max-width: 520px;
  margin: 0 auto 1.5rem;
}

/* -----------------------------
   12e · How-it-works timeline page
   -----------------------------
   Vertical timeline. Each phase is a row with a numbered rail-marker on
   the left and the phase body on the right. The rail-markers visually
   connect with a vertical line so the timeline reads as a sequence, not
   five disconnected sections. Inside each phase, a 2-column WE/YOU
   split makes the time-commitment ask explicit.
   ----------------------------- */

.hiw-timeline {
  position: relative;
  margin: 2rem 0;
}

.hiw-phase {
  position: relative;
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: 1.5rem;
  padding-bottom: 3rem;
}
.hiw-phase:last-child { padding-bottom: 0; }

.hiw-phase-rail {
  position: relative;
  display: flex; justify-content: center;
}
.hiw-phase-rail::before {
  /* The vertical connector line between phase numbers */
  content: '';
  position: absolute;
  top: 56px;
  bottom: -3rem;
  width: 2px;
  background: linear-gradient(180deg, var(--pleo-primary) 0%, var(--pleo-line) 100%);
  left: 50%;
  transform: translateX(-50%);
}
.hiw-phase:last-child .hiw-phase-rail::before { display: none; }

.hiw-phase-num {
  position: relative;
  z-index: 1;
  width: 48px; height: 48px;
  border-radius: 50%;
  background: var(--grad-card-1);   /* warm orange gradient — same as 4M card 1 */
  color: var(--pleo-white);
  display: flex; align-items: center; justify-content: center;
  font-weight: 800;
  font-size: 1.15rem;
  letter-spacing: -0.02em;
  box-shadow: 0 4px 14px rgba(194, 65, 12, 0.30);
}
.hiw-phase:nth-child(2) .hiw-phase-num { background: var(--grad-card-2); box-shadow: 0 4px 14px rgba(190, 24, 93, 0.30); }
.hiw-phase:nth-child(3) .hiw-phase-num { background: var(--grad-card-3); box-shadow: 0 4px 14px rgba(91, 33, 182, 0.30); }
.hiw-phase:nth-child(4) .hiw-phase-num { background: var(--grad-card-4); box-shadow: 0 4px 14px rgba(245, 158, 11, 0.30); }
.hiw-phase:nth-child(5) .hiw-phase-num { background: linear-gradient(135deg, #5B21B6, #F97316); }

.hiw-phase-body { padding-top: 0.4rem; }
.hiw-phase-meta {
  display: flex; align-items: baseline; gap: 0.85rem; flex-wrap: wrap;
  margin-bottom: 0.4rem;
}
.hiw-phase-name {
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--pleo-primary);
}
.hiw-phase-duration {
  font-size: 0.85rem;
  color: var(--pleo-muted);
}
.hiw-phase-headline {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.5rem, 2.6vw, 2rem);
  letter-spacing: -0.015em;
  line-height: 1.15;
  margin: 0 0 0.75rem;
  color: var(--pleo-ink);
}
.hiw-phase-summary {
  color: var(--pleo-text);
  line-height: 1.65;
  margin: 0 0 1.5rem;
}

.hiw-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.5rem;
  background: var(--pleo-paper);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-md);
  padding: 1.25rem 1.5rem;
}
@media (max-width: 700px) {
  .hiw-split { grid-template-columns: 1fr; }
  .hiw-phase { grid-template-columns: 44px 1fr; gap: 1rem; }
  .hiw-phase-num { width: 38px; height: 38px; font-size: 1rem; }
}
.hiw-split-label {
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-muted);
  margin-bottom: 0.5rem;
}
.hiw-split-col ul {
  list-style: none; padding: 0; margin: 0;
}
.hiw-split-col li {
  padding: 0.35rem 0;
  font-size: 0.92rem;
  line-height: 1.5;
  color: var(--pleo-text);
  padding-left: 1.1rem;
  position: relative;
}
.hiw-split-col li::before {
  content: '';
  position: absolute;
  left: 0; top: 0.85rem;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--pleo-primary);
}

/* -----------------------------
   12f · Guarantees page cards
   -----------------------------
   One card per SLA. Headline at top, then a 3-column grid:
   "What we mean" / "How we measure" / "If we miss". The 3-column
   structure makes the contract terms scannable — first-time visitor
   can pattern-match all SLAs in 30 seconds.
   ----------------------------- */

/* TOP SUMMARY CHIPS — scannable 6-tile strip above the long-form cards.
   The visitor who doesn't read the detailed cards still leaves with the
   6 short promises in their head. Each chip is an anchor to its
   corresponding gtr-card. */
.gtr-chips {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.75rem;
  margin: 0 0 2.5rem;
}
@media (max-width: 720px) {
  .gtr-chips { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 460px) {
  .gtr-chips { grid-template-columns: 1fr; }
}
.gtr-chip {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  padding: 0.9rem 1rem;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-md);
  text-decoration: none;
  transition: border-color .15s, transform .15s, box-shadow .15s;
}
.gtr-chip:hover {
  border-color: var(--pleo-primary);
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(194, 65, 12, 0.08);
}
.gtr-chip-num {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 500;
  font-size: 1.25rem;
  letter-spacing: -0.02em;
  color: var(--pleo-primary);
  line-height: 1;
}
.gtr-chip-label {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 500;
  color: var(--pleo-text);
  line-height: 1.35;
}

/* CARD STACK — numbered editorial cards (D-W018). Each card has a giant
   faded background index number for visual hierarchy. */
.gtr-stack {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}
.gtr-card {
  position: relative;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  padding: clamp(1.75rem, 3vw, 2.5rem) clamp(1.5rem, 3vw, 2.5rem) clamp(1.5rem, 3vw, 2rem);
  scroll-margin-top: 140px;
  overflow: hidden;
  transition: border-color .2s ease-out, box-shadow .2s ease-out, transform .2s ease-out;
}
.gtr-card:hover {
  border-color: var(--pleo-primary);
  box-shadow: 0 10px 28px rgba(11, 13, 18, 0.07);
  transform: translateY(-2px);
}
/* Giant faded index number anchored to the top-right corner — purely
   decorative, draws the eye and creates rhythm down the stack. */
.gtr-card-bgnum {
  position: absolute;
  top: -0.4em;
  right: 1.25rem;
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 500;
  font-size: clamp(6rem, 14vw, 9rem);
  line-height: 1;
  color: var(--pleo-primary);
  opacity: 0.05;
  letter-spacing: -0.04em;
  pointer-events: none;
  user-select: none;
  z-index: 0;
}
.gtr-card-header {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: auto 1fr;
  grid-template-rows: auto auto;
  align-items: start;
  column-gap: 1.25rem;
  row-gap: 0.5rem;
  margin-bottom: 1.5rem;
  padding-bottom: 1.25rem;
  border-bottom: 1px solid var(--pleo-line);
}
.gtr-card-index {
  grid-row: 1 / 3;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.35rem;
  min-width: 4.5rem;
}
.gtr-card-index-num {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: 1.5rem;
  color: var(--pleo-muted);
  line-height: 1;
  letter-spacing: -0.02em;
}
.gtr-card-short {
  display: inline-flex;
  align-items: center;
  padding: 0.25rem 0.55rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--pleo-primary);
  background: rgba(194, 65, 12, 0.08);
  border-radius: 999px;
  white-space: nowrap;
}
.gtr-card-icon {
  grid-column: 2;
  grid-row: 1;
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--pleo-primary);
  margin-bottom: 0.25rem;
}
.gtr-card-icon svg {
  width: 24px;
  height: 24px;
  display: block;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.gtr-card-headline {
  grid-column: 2;
  grid-row: 2;
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.35rem, 2.4vw, 1.85rem);
  letter-spacing: -0.015em;
  line-height: 1.15;
  margin: 0;
  color: var(--pleo-ink);
}
@media (max-width: 560px) {
  .gtr-card-header {
    grid-template-columns: 1fr;
    grid-template-rows: auto auto auto;
    row-gap: 0.75rem;
  }
  .gtr-card-index { grid-row: 1; flex-direction: row; align-items: center; gap: 0.6rem; min-width: 0; }
  .gtr-card-icon { grid-column: 1; grid-row: 2; }
  .gtr-card-headline { grid-column: 1; grid-row: 3; }
}
.gtr-card-grid {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1.5rem;
  margin-bottom: 1.5rem;
}
@media (max-width: 700px) {
  .gtr-card-grid { grid-template-columns: 1fr; gap: 1.25rem; }
}
.gtr-card-cell {
  min-width: 0;
}
.gtr-card-label {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-primary);
  margin-bottom: 0.5rem;
}
.gtr-card-grid p {
  margin: 0;
  font-size: 0.93rem;
  line-height: 1.65;
  color: var(--pleo-text);
}
/* "IF WE MISS" — the consequence. Highlighted because it's the part that
   earns trust; agencies that don't put a consequence here are bluffing. */
.gtr-card-miss {
  position: relative;
  z-index: 1;
  padding: 1rem 1.15rem;
  background: rgba(194, 65, 12, 0.05);
  border: 1px solid rgba(194, 65, 12, 0.18);
  border-radius: var(--radius-sm);
}
.gtr-card-miss-label {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-primary);
  margin-bottom: 0.4rem;
}
.gtr-card-miss-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  background: var(--pleo-primary);
  color: var(--pleo-white);
  border-radius: 50%;
  font-size: 0.7rem;
  font-weight: 800;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
}
.gtr-card-miss p {
  margin: 0;
  font-size: 0.95rem;
  line-height: 1.6;
  color: var(--pleo-ink);
}
.gtr-card-miss p strong { color: var(--pleo-ink); }

/* -----------------------------
   12g · Industry-page components
   -----------------------------
   New page anatomy elements introduced for the comprehensive industry-page
   rewrite (0.15.2): vertical-specific proof bar, "what we do" sequence cards,
   mid-page CTA strip. Each component slots into a hero-slim industry page
   between the existing challenges-grid and final-CTA.
   ----------------------------- */

.ind-proof-section {
  padding: 2.5rem 0 0;
}
.ind-proof {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-md);
  padding: 1.75rem 1.5rem;
  text-align: center;
}
@media (max-width: 800px) {
  .ind-proof { grid-template-columns: 1fr; gap: 1.25rem; }
}
.ind-proof-item { padding: 0 1rem; }
.ind-proof-item + .ind-proof-item { border-left: 1px solid var(--pleo-line); }
@media (max-width: 800px) {
  .ind-proof-item + .ind-proof-item {
    border-left: 0; border-top: 1px solid var(--pleo-line); padding-top: 1.25rem;
  }
}
.ind-proof-num {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.7rem, 3.2vw, 2.4rem);
  letter-spacing: -0.02em;
  background: var(--grad-hero);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
}
.ind-proof-label {
  font-size: 0.88rem; color: var(--pleo-muted);
  margin-top: 0.25rem; line-height: 1.4;
}

/* What-we-do for this industry — numbered sequence cards */
.ind-wedo-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.25rem;
  margin-top: 2rem;
}
@media (max-width: 800px) { .ind-wedo-grid { grid-template-columns: 1fr; } }

.ind-wedo-card {
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  padding: 1.75rem;
  display: flex;
  gap: 1.25rem;
  align-items: flex-start;
  transition: border-color .2s ease-out, transform .2s ease-out, box-shadow .2s ease-out;
}
.ind-wedo-card:hover {
  border-color: var(--pleo-primary);
  transform: translateY(-3px);
  box-shadow: 0 8px 20px rgba(11, 13, 18, 0.06);
}
.ind-wedo-num {
  flex: 0 0 auto;
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: 1.6rem;
  color: var(--pleo-primary);
  letter-spacing: -0.02em;
  line-height: 1;
  min-width: 2.5rem;
}
.ind-wedo-title {
  font-size: 1.15rem; font-weight: 700; letter-spacing: -0.015em;
  margin: 0 0 0.4rem; color: var(--pleo-ink);
}
.ind-wedo-body {
  margin: 0; color: var(--pleo-text); line-height: 1.55; font-size: 0.96rem;
}

/* Wrap the inner content of a what-we-install card so we can stack a
   header row (number + title), a body p, and an optional footer link
   in a single column. The wrapper grows to fill the right column. */
.ind-wedo-body-wrap { display: flex; flex-direction: column; gap: 0.45rem; min-width: 0; }
.ind-wedo-head {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: 0.15rem;
}
.ind-wedo-head .ind-wedo-title { margin: 0; }

/* Card-footer deep-link on a what-we-install card — routes to the matching
   playbook / guarantee / calculator. Quiet styling so the card body
   dominates; underline-on-hover signals the link. */
.ind-wedo-link {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  margin-top: 0.5rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--pleo-primary);
  text-decoration: none;
}
.ind-wedo-link:hover { text-decoration: underline; text-underline-offset: 3px; }
.ind-wedo-link .arrow { transition: transform .15s; }
.ind-wedo-link:hover .arrow { transform: translateX(2px); }

/* Same treatment for challenge cards' "read the playbook →" footer link. */
.ind-challenge-card { display: flex; flex-direction: column; }
.ind-challenge-link {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  margin-top: auto;
  padding-top: 0.85rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--pleo-primary);
  text-decoration: none;
}
.ind-challenge-link:hover { text-decoration: underline; text-underline-offset: 3px; }

/* 3-chip in-page TOC under hero CTAs — gives the visitor a sense of
   what's on the page and a way to jump straight to their section. */
.ind-toc-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 1.5rem;
}
.ind-toc-chip {
  display: inline-flex;
  align-items: center;
  padding: 0.45rem 0.85rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.82rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--pleo-text);
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: 999px;
  text-decoration: none;
  transition: border-color .15s, color .15s, background .15s;
}
.ind-toc-chip:hover {
  color: var(--pleo-primary);
  border-color: var(--pleo-primary);
  background: rgba(194, 65, 12, 0.04);
}

/* Anchor offset — sections need a scroll-padding so the section header
   doesn't get hidden under the sticky nav after a TOC jump. */
#challenges, #what-we-install, #fit, #treatments, #objections,
#playbooks, #other-industries {
  scroll-margin-top: 120px;
}

/* "Who this is for" — 2-col fit filter. Good fit (green-ish) on the
   left, Not yet (muted) on the right. Side-by-side honest framing. */
.ind-fit-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.25rem;
  margin: 0 0 1.5rem;
}
@media (max-width: 720px) {
  .ind-fit-grid { grid-template-columns: 1fr; }
}
.ind-fit-col {
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  padding: 1.5rem 1.4rem;
}
.ind-fit-col-good { border-top: 3px solid var(--pleo-primary); }
.ind-fit-col-not { border-top: 3px solid var(--pleo-line); }
.ind-fit-col-head {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  margin-bottom: 1rem;
  padding-bottom: 0.85rem;
  border-bottom: 1px solid var(--pleo-line);
}
.ind-fit-col-eyebrow {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
.ind-fit-col-good .ind-fit-col-eyebrow { color: var(--pleo-primary); }
.ind-fit-col-not  .ind-fit-col-eyebrow { color: var(--pleo-muted); }
.ind-fit-col-head strong {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: 1.25rem;
  letter-spacing: -0.015em;
  color: var(--pleo-ink);
}
.ind-fit-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.65rem; }
.ind-fit-list li {
  display: flex;
  align-items: flex-start;
  gap: 0.65rem;
  font-size: 0.93rem;
  line-height: 1.5;
  color: var(--pleo-text);
}
.ind-fit-mark {
  flex: 0 0 20px;
  width: 20px; height: 20px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  font-size: 0.7rem;
  font-weight: 800;
  margin-top: 1px;
}
.ind-fit-mark-good { background: var(--pleo-primary); color: var(--pleo-white); }
.ind-fit-mark-not  { background: var(--pleo-line); color: var(--pleo-muted); }
.ind-fit-foot {
  text-align: center;
  margin: 0;
  font-size: 0.9rem;
  color: var(--pleo-muted);
}
.ind-fit-foot a { color: var(--pleo-primary); font-weight: 600; border-bottom: 1px solid rgba(194,65,12,0.25); }

/* "Other industries" lateral nav — 4 sibling cards. Each carries an
   icon, the name + tagline, and a "see the playbook" link. Reciprocal
   linking ties the 5 industry pages into a closed cluster. */
.ind-other-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 1rem;
}
@media (max-width: 1024px) {
  .ind-other-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 560px) {
  .ind-other-grid { grid-template-columns: 1fr; }
}
.ind-other-card {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  padding: 1.4rem 1.25rem;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  text-decoration: none;
  transition: border-color .2s, transform .2s, box-shadow .2s;
}
.ind-other-card:hover {
  border-color: var(--pleo-primary);
  transform: translateY(-2px);
  box-shadow: 0 6px 16px rgba(11, 13, 18, 0.06);
}
.ind-other-icon {
  width: 44px; height: 44px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, rgba(249, 115, 22, 0.14), rgba(194, 65, 12, 0.08));
  border: 1px solid rgba(194, 65, 12, 0.16);
  color: var(--pleo-primary);
}
.ind-other-icon svg {
  width: 24px; height: 24px;
  fill: none; stroke: currentColor;
  stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round;
}
.ind-other-body { display: flex; flex-direction: column; gap: 0.35rem; flex: 1; }
.ind-other-name {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: 1.2rem;
  letter-spacing: -0.015em;
  color: var(--pleo-ink);
  margin: 0;
}
.ind-other-tag {
  margin: 0;
  font-size: 0.88rem;
  color: var(--pleo-text);
  line-height: 1.5;
  flex: 1;
}
.ind-other-link {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  margin-top: 0.5rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--pleo-primary);
}
.ind-other-link .arrow { transition: transform .15s; }
.ind-other-card:hover .ind-other-link .arrow { transform: translateX(3px); }

/* Mid-page CTA strip — one-line conversion moment between sections */
.ind-midcta {
  background: linear-gradient(135deg, var(--pleo-paper) 0%, var(--pleo-white) 100%);
  padding: 3rem 0;
  border-top: 1px solid var(--pleo-line);
  border-bottom: 1px solid var(--pleo-line);
}
.ind-midcta-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 2rem;
  flex-wrap: wrap;
}
.ind-midcta-eyebrow {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--pleo-primary);
  margin-bottom: 0.35rem;
}
.ind-midcta-title {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.4rem, 2.4vw, 1.85rem);
  letter-spacing: -0.02em;
  margin: 0;
  color: var(--pleo-ink);
}

/* -----------------------------
   12h · Visual narrative — section dividers + card icons
   -----------------------------
   Reusable visual rhythm components that prevent the inner pages reading
   as text walls. Strategy:
     · `.section-divider`   — decorative gradient strip between sections
     · `.section-flourish`  — small inline-SVG icon that sits left of a
                              section title (signals "what this section
                              is about" before the visitor reads the words)
     · `.ind-wedo-icon`     — small SVG inside numbered cards (signals
                              card category at a glance)
     · `.hero-flourish`     — decorative SVG positioned in the corner of
                              hero-slim for industry pages
   ----------------------------- */

/* Gradient strip divider — sits between sections as visual punctuation */
.section-divider {
  height: 1px;
  border: 0;
  margin: 0 auto;
  max-width: 1100px;
  background: linear-gradient(
    90deg,
    transparent 0%,
    var(--pleo-line) 25%,
    var(--pleo-primary) 50%,
    var(--pleo-line) 75%,
    transparent 100%
  );
  opacity: 0.55;
}

/* Inline SVG flourish next to section titles. Sits to the left of the
   eyebrow on hero-slim pages, or above the eyebrow on block sections. */
.section-flourish {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  margin-right: 0.6rem;
  vertical-align: middle;
  color: var(--pleo-primary);
}
.section-flourish svg {
  width: 100%;
  height: 100%;
}

/* Hero flourish — small SVG positioned in the top-right corner of a
   hero-slim. Industry pages use this for vertical-themed iconography.
   Sits BEHIND the content (z:0) with low opacity so it reads as a
   decorative brand mark, not a competing visual against the headline.
   Was: 50%-centered, large (140-240px), 85% opacity — overlapped the
   headline. Now: corner-anchored, mid-size (110-180px), 22% opacity. */
.hero-flourish {
  position: absolute;
  top: clamp(8rem, 12vw, 11rem);        /* clears the fixed nav */
  right: clamp(2rem, 6vw, 5rem);
  width: clamp(110px, 16vw, 180px);
  height: clamp(110px, 16vw, 180px);
  z-index: 0;
  pointer-events: none;
  opacity: 0.22;
  color: var(--pleo-primary);            /* tints stroke-currentColor SVGs orange */
}
.hero-flourish svg {
  width: 100%;
  height: 100%;
  stroke-width: 1.2;                     /* thinner stroke at this scale reads cleaner */
}
@media (max-width: 800px) {
  .hero-flourish { display: none; }     /* drop on phones to keep heroes clean */
}

/* Card icon inside .ind-wedo-card — sits LEFT of the content as a 56×56
   anchor block. Larger than the previous 36px to give it visual weight
   matching the content column's vertical extent (D-W022). On narrow
   viewports the card switches to a vertical stack so the icon never
   orphans above an empty band. */
.ind-wedo-card { position: relative; }
.ind-wedo-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 14px;
  background: linear-gradient(135deg, rgba(249, 115, 22, 0.14), rgba(194, 65, 12, 0.08));
  border: 1px solid rgba(194, 65, 12, 0.16);
  color: var(--pleo-primary);
  flex: 0 0 56px;
  /* Align the icon's vertical center with the title row in the content
     column. ~10px nudge down so the icon block centers against the
     headline + small number badge (whose midline sits ~13px below the
     card's top padding). */
  margin-top: 2px;
  transition: transform .25s ease, background .25s ease;
}
.ind-wedo-card:hover .ind-wedo-icon {
  transform: scale(1.04);
  background: linear-gradient(135deg, rgba(249, 115, 22, 0.2), rgba(194, 65, 12, 0.12));
}
.ind-wedo-icon svg {
  width: 28px;
  height: 28px;
  stroke: currentColor;
  fill: none;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* The "01 / 02 / 03" number badge — small inline pill that sits inline
   with the title. Lower visual weight than the icon (icon is the symbol,
   number is just the index). */
.ind-wedo-card .ind-wedo-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.2rem;
  height: 1.6rem;
  padding: 0 0.5rem;
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-size: 0.95rem;
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--pleo-primary);
  background: rgba(249, 115, 22, 0.10);
  border-radius: 6px;
  flex: 0 0 auto;
}

/* Narrow viewports — stack icon above content. Eliminates the visual
   imbalance where a short icon orphans above a tall content column. */
@media (max-width: 600px) {
  .ind-wedo-card {
    flex-direction: column;
    gap: 0.85rem;
    align-items: flex-start;
  }
  .ind-wedo-icon { margin-top: 0; }
}

/* -----------------------------
   12i · 4M Method flow arrows (inter-card chevrons)
   -----------------------------
   Three orange chevron chips that sit BETWEEN the cards (in the gap,
   at card-mid height) so the row visually reads as 1 → 2 → 3 → 4.
   Implemented as ::after on the first three cards. The chip sits
   absolutely positioned outside the right edge of its parent card,
   half-overlapping the gap. Hidden on small viewports where cards
   stack vertically.
   ----------------------------- */
.method-card { position: relative; }
.method-card.c1::after,
.method-card.c2::after,
.method-card.c3::after {
  content: '\203A';                          /* › (single right-pointing angle bracket) */
  position: absolute;
  top: 50%;
  right: 0;
  /* Slide the chip half-outside its card so it lands in the gap.
     translate(50%, -50%) centers it ON the right edge; we then nudge
     right by an extra half-gap so it sits on the gap midpoint. */
  transform: translate(calc(50% + 0.625rem), -50%);
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--pleo-primary);
  color: var(--pleo-white);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 1.5rem;
  font-weight: 600;
  line-height: 1;
  padding-bottom: 2px;                       /* optical centering for the › glyph */
  box-shadow: 0 4px 12px rgba(194, 65, 12, 0.35);
  z-index: 2;
  pointer-events: none;
}
@media (max-width: 900px) {
  /* Grid switches to 2 columns; chip on c2 (end of first row) would
     point at empty space on the right. Hide that one; keep c1 + c3. */
  .method-card.c2::after { display: none; }
}
@media (max-width: 540px) {
  /* Grid is 1 column on phones — all cards stack vertically; arrows
     would point sideways into empty space. Hide all of them. */
  .method-card.c1::after,
  .method-card.c2::after,
  .method-card.c3::after { display: none; }
}

/* Industries-index card icon — small orange-tinted square holding the
   vertical's signature SVG flourish. Matches the same visual language as
   .ind-wedo-icon but slightly larger because it's a top-level card. */
.ind-index-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: linear-gradient(135deg, rgba(249, 115, 22, 0.12), rgba(194, 65, 12, 0.08));
  color: var(--pleo-primary);
  margin-bottom: 0.8rem;
}
.ind-index-icon svg {
  width: 24px;
  height: 24px;
  stroke: currentColor;
  fill: none;
  stroke-width: 1.75;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* -----------------------------
   12j · Pricing-page Performance-plan eligibility gate
   -----------------------------
   Visible gate between the hero and the two-plan grid. Tells visitors
   honestly that the zero-up-front Performance plan isn't open to
   everyone, with the 5 criteria. Standard plan has no such gate, so
   the band only governs the left card. Visual treatment is "callout"
   not "marketing band" — left orange border + paper-tinted card to
   read as a gate, not a feature.
   ----------------------------- */

.pricing-elig-section {
  padding: 2.5rem 0 0;
}
.pricing-elig {
  position: relative;
  background: linear-gradient(180deg, #fffaf4 0%, var(--pleo-white) 100%);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  padding: clamp(1.75rem, 3vw, 2.5rem) clamp(1.5rem, 3vw, 2.5rem);
  box-shadow: 0 4px 14px rgba(11, 13, 18, 0.04);
}
.pricing-elig-head {
  margin-bottom: 1.75rem;
}
.pricing-elig-tag {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-primary);
  margin-bottom: 0.6rem;
}
.pricing-elig-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--pleo-primary);
  box-shadow: 0 0 0 0 rgba(194, 65, 12, 0.6);
  animation: pleo-pulse 2s infinite;
}
.pricing-elig-title {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 400;
  font-size: clamp(1.5rem, 2.8vw, 2.2rem);
  letter-spacing: -0.02em;
  line-height: 1.1;
  color: var(--pleo-ink);
  margin: 0 0 0.6rem;
}
.pricing-elig-sub {
  color: var(--pleo-text);
  font-size: 1rem;
  line-height: 1.6;
  margin: 0;
  max-width: 720px;
}
.pricing-elig-sub strong { color: var(--pleo-ink); }
.pricing-elig-sub a {
  color: var(--pleo-primary);
  font-weight: 600;
  border-bottom: 1px solid rgba(194, 65, 12, 0.25);
}

.pricing-elig-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem 1.5rem;
}
/* Span the 5th item across both columns when there's an odd count —
   prevents an orphan item on the bottom row. */
.pricing-elig-list li:nth-child(5):last-child {
  grid-column: 1 / -1;
}
@media (max-width: 800px) {
  .pricing-elig-list { grid-template-columns: 1fr; }
  .pricing-elig-list li:nth-child(5):last-child { grid-column: auto; }
}
.pricing-elig-list li {
  display: flex;
  gap: 0.75rem;
  align-items: flex-start;
  padding: 0.75rem 0;
  border-top: 1px solid var(--pleo-line);
}
/* On 2-column grid, the FIRST two items border the top together — give
   them a clean shared top edge. */
.pricing-elig-list li:nth-child(1),
.pricing-elig-list li:nth-child(2) {
  border-top: 1px solid var(--pleo-line);
}
.pricing-elig-check {
  flex: 0 0 22px;
  width: 22px; height: 22px;
  border-radius: 50%;
  background: var(--pleo-primary);
  color: var(--pleo-white);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 800;
  margin-top: 2px;
}
.pricing-elig-list li > div {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}
.pricing-elig-list strong {
  font-size: 0.98rem;
  font-weight: 700;
  color: var(--pleo-ink);
  letter-spacing: -0.01em;
}
.pricing-elig-list span {
  font-size: 0.9rem;
  color: var(--pleo-text);
  line-height: 1.5;
}
.pricing-elig-list a {
  color: var(--pleo-primary);
  font-weight: 600;
  border-bottom: 1px solid rgba(194, 65, 12, 0.25);
}

.pricing-elig-foot {
  margin: 1.75rem 0 0;
  padding-top: 1.25rem;
  border-top: 1px solid var(--pleo-line);
  font-size: 0.95rem;
  color: var(--pleo-text);
  text-align: center;
}
.pricing-elig-foot strong { color: var(--pleo-ink); }

/* KPI-grid eligibility — four numeric thresholds as the visual anchor.
   Each card has a giant Fraunces number (the threshold), a Lexend label
   (what it measures), and a small note (why it matters). The qualitative
   5th gate (clean ad accounts) sits as a footnote so the grid stays a
   balanced 4-up / 2-up. */
.pricing-elig-kpis {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 1rem;
  margin: 0;
}
@media (max-width: 900px) {
  .pricing-elig-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 480px) {
  .pricing-elig-kpis { grid-template-columns: 1fr; }
}
.pricing-elig-kpi {
  position: relative;
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-md);
  padding: 1.25rem 1.1rem 1.1rem;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  transition: border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
}
.pricing-elig-kpi:hover {
  border-color: var(--pleo-primary);
  box-shadow: 0 6px 18px rgba(194, 65, 12, 0.08);
  transform: translateY(-2px);
}
.pricing-elig-kpi::before {
  content: "";
  position: absolute;
  top: 0; left: 0;
  width: 28px; height: 3px;
  background: var(--pleo-primary);
  border-radius: 0 0 3px 0;
}
.pricing-elig-kpi-num {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 500;
  font-size: clamp(2.1rem, 4vw, 2.75rem);
  letter-spacing: -0.03em;
  line-height: 1;
  color: var(--pleo-ink);
  display: flex;
  align-items: baseline;
  gap: 0.1rem;
}
.pricing-elig-kpi-currency {
  font-size: 0.7em;
  color: var(--pleo-primary);
  font-weight: 400;
  margin-right: 0.05em;
}
.pricing-elig-kpi-unit {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.45em;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--pleo-muted);
  margin-left: 0.2em;
  text-transform: lowercase;
}
.pricing-elig-kpi-label {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pleo-primary);
}
.pricing-elig-kpi-note {
  font-size: 0.85rem;
  color: var(--pleo-text);
  line-height: 1.45;
  margin-top: 0.15rem;
}
.pricing-elig-kpi-note a {
  color: var(--pleo-primary);
  font-weight: 600;
  border-bottom: 1px solid rgba(194, 65, 12, 0.25);
}
.pricing-elig-footnote {
  margin: 1.5rem 0 0;
  padding: 0.9rem 1.1rem;
  background: rgba(194, 65, 12, 0.04);
  border: 1px solid rgba(194, 65, 12, 0.15);
  border-radius: var(--radius-md);
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  font-size: 0.92rem;
  color: var(--pleo-text);
  line-height: 1.55;
}
.pricing-elig-footnote strong { color: var(--pleo-ink); }
.pricing-elig-footnote .pricing-elig-check {
  margin-top: 1px;
}

/* -----------------------------
   13 · Final CTA block
   ----------------------------- */
.final-cta {
  position: relative; overflow: hidden;
  padding: 6rem 0;
  background: var(--grad-cta-bg);
  color: var(--pleo-white);
  text-align: center;
}
.final-cta::before {
  content: ''; position: absolute; inset: 0;
  background:
    radial-gradient(circle at 20% 30%, rgba(6,182,212,0.30), transparent 40%),
    radial-gradient(circle at 80% 70%, rgba(217,70,239,0.25), transparent 40%);
  pointer-events: none;
}
.final-cta-inner { position: relative; z-index: 1; }
.final-cta h2 {
  /* Fraunces — same family as the hero. Light weight (300) closes the
     typographic loop top-and-bottom of every page. */
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 300;
  font-size: clamp(2.5rem, 5.5vw, 4.5rem);
  letter-spacing: -0.02em;
  line-height: 1.02;
  margin: 0 0 1rem;
  font-variation-settings: "opsz" 120, "SOFT" 50;
}
.final-cta p {
  font-size: 1.15rem;
  max-width: 600px; margin: 0 auto 2rem;
  color: rgba(255,255,255,0.8);
}
.final-cta .btn-primary { background: var(--pleo-white); color: var(--pleo-ink); }
.final-cta .btn-secondary { color: var(--pleo-white); border-color: rgba(255,255,255,0.4); }
.final-cta .btn-secondary:hover { background: var(--pleo-white); color: var(--pleo-ink); }

/* -----------------------------
   14 · Footer
   ----------------------------- */
footer.site-footer { background: var(--pleo-ink); color: rgba(255,255,255,0.8); padding: 4rem 0 2rem; }
.footer-grid {
  display: grid;
  grid-template-columns: 2fr repeat(3, 1fr); gap: 2rem;
  padding-bottom: 3rem;
  border-bottom: 1px solid rgba(255,255,255,0.10);
}
@media (max-width: 800px) { .footer-grid { grid-template-columns: 1fr 1fr; } }
.footer-brand { margin-bottom: 0.75rem; display: inline-flex; align-items: center; gap: 0.4rem; }
.footer-logo-img {
  height: 36px;
  width: auto;
  display: block;
  /* Footer background is var(--pleo-ink) — near black. The logo file is
     the dark/orange variant; we don't ship a separate light asset.
     Instead, invert + hue-rotate so the dark wordmark flips to light
     while brand orange stays roughly orange (saturation/brightness
     preserved across the inversion). Drop-shadow gives a faint glow
     so the inverted logo doesn't look cut-out on the dark ink bg. */
  filter:
    invert(1)
    hue-rotate(180deg)
    drop-shadow(0 0 8px rgba(249, 115, 22, 0.18));
  opacity: 0.95;
}
.footer-tagline { color: rgba(255,255,255,0.6); font-size: 0.9rem; max-width: 280px; line-height: 1.5; }
.footer-col h4 {
  color: var(--pleo-white); font-size: 0.85rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.06em;
  margin: 0 0 1rem;
}
.footer-col a { display: block; padding: 0.3rem 0; color: rgba(255,255,255,0.7); font-size: 0.92rem; }
.footer-col a:hover { color: var(--pleo-white); }
.footer-bottom {
  padding-top: 2rem;
  display: flex; justify-content: space-between; flex-wrap: wrap; gap: 1rem;
  font-size: 0.85rem; color: rgba(255,255,255,0.5);
}

/* -----------------------------
   15 · City + treatment page chrome
   ----------------------------- */
.prog-body { max-width: 780px; margin: 0 auto; padding: 0 1.5rem 5rem; }
.prog-body h2 { font-size: 1.6rem; font-weight: 700; letter-spacing: -0.02em; margin-top: 3rem; }
.prog-body p { color: var(--pleo-text); line-height: 1.65; }
.prog-body ul { line-height: 1.8; padding-left: 1.2rem; }
.callout {
  margin-top: 2rem;
  background: var(--pleo-paper);
  padding: 1.25rem 1.5rem;
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-md);
}
.callout.warn { border-color: var(--pleo-amber); background: #fffbeb; }
.stat-row {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem;
  margin: 2rem 0;
}
@media (max-width: 600px) { .stat-row { grid-template-columns: 1fr; } }
.stat-tile {
  background: var(--pleo-paper);
  border: 1px solid var(--pleo-line);
  padding: 1rem 1.25rem;
  border-radius: var(--radius-md);
}
.stat-tile .lbl { font-size: 0.82rem; color: var(--pleo-muted); }
.stat-tile .val { font-size: 1.4rem; font-weight: 700; color: var(--pleo-primary); letter-spacing: -0.02em; }

/* -----------------------------
   15a · Long-form field guides (D-W015)
   -----------------------------
   Narrow max-width for readability (~70ch), comfortable line-height,
   clear h2/h3 hierarchy, takeaway callout, related-guides strip.
   ----------------------------- */
.guide-meta-row {
  display: inline-flex; gap: 0.5rem;
  margin-top: 1.5rem;
  color: var(--pleo-muted);
  font-size: 0.9rem;
}

.guide-article {
  max-width: 720px;
  margin: 0 auto;
  padding: 0 1.5rem;
}
.guide-article-body {
  font-size: 1.075rem;
  line-height: 1.75;
  color: var(--pleo-text);
}
.guide-article-body p {
  margin: 0 0 1.25rem;
}
.guide-article-body strong { color: var(--pleo-ink); font-weight: 700; }
.guide-article-body em { color: var(--pleo-ink); font-style: italic; }
.guide-article-body a {
  color: var(--pleo-primary);
  font-weight: 600;
  border-bottom: 1px solid rgba(42, 109, 244, 0.30);
  transition: border-color .15s, color .15s;
}
.guide-article-body a:hover {
  color: var(--pleo-magenta);
  border-bottom-color: var(--pleo-magenta);
}

.guide-h2 {
  font-size: clamp(1.4rem, 2.4vw, 1.85rem);
  font-weight: 800; letter-spacing: -0.02em; line-height: 1.2;
  color: var(--pleo-ink);
  margin: 3rem 0 1rem;
  position: relative; padding-left: 1rem;
}
.guide-h2::before {
  content: '';
  position: absolute; left: 0; top: 0.4em; bottom: 0.4em;
  width: 3px;
  background: var(--grad-hero);
  border-radius: 2px;
}

.guide-article-body ul,
.guide-article-body ol {
  margin: 0 0 1.5rem;
  padding-left: 1.5rem;
}
.guide-article-body li {
  margin-bottom: 0.6rem;
  padding-left: 0.3rem;
}
.guide-article-body ul li::marker { color: var(--pleo-primary); }
.guide-article-body ol li::marker { color: var(--pleo-primary); font-weight: 700; }

/* Takeaway callout at the end of each guide */
.guide-takeaway {
  margin: 3rem 0 1.5rem;
  padding: 1.75rem 1.75rem;
  background: linear-gradient(135deg, rgba(42,109,244,0.05) 0%, rgba(217,70,239,0.05) 100%);
  border: 1px solid rgba(194, 65, 12, 0.18);
  border-radius: var(--radius-md);
}
.guide-takeaway-label {
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-primary);
  margin-bottom: 0.5rem;
}
.guide-takeaway p {
  margin: 0;
  font-size: 1.08rem;
  line-height: 1.6;
  color: var(--pleo-ink);
  font-weight: 500;
}

.guide-backlink {
  margin: 2rem 0 0;
  font-size: 0.95rem;
  color: var(--pleo-muted);
}
.guide-backlink a {
  color: var(--pleo-primary);
  font-weight: 600;
}
.guide-back {
  margin: 3rem 0 0;
  font-size: 0.95rem;
  color: var(--pleo-muted);
}
.guide-back a { color: var(--pleo-primary); font-weight: 600; }

/* -----------------------------
   15b · Interactive calculator (D-W014)
   -----------------------------
   Two-column layout: inputs left (form), outputs right (live-updated cards).
   Mobile: stacks vertically. Below the two columns sits the Pleomatic-
   benchmark comparison strip + the final CTA section.
   ----------------------------- */

.calc-grid {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: clamp(1.5rem, 3vw, 2.5rem);
  margin-bottom: 3rem;
}
@media (max-width: 900px) {
  .calc-grid { grid-template-columns: 1fr; }
}

.calc-section-title {
  font-size: 1.15rem; font-weight: 700; letter-spacing: -0.01em;
  margin: 0 0 1.5rem;
  color: var(--pleo-ink);
}

/* Inputs ---------------------------------------------- */
/* 2-column grid keeps the input form compact so it pairs visually with
   the sticky output panel on the right. Each input lays out as a
   labelled cell. Title (h2) spans both columns. Mobile (<700px) falls
   back to a single column for readability on phones. */
.calc-inputs {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem 1.25rem;
  background: var(--pleo-paper);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  padding: 1.5rem;
}
.calc-inputs > .calc-section-title {
  grid-column: 1 / -1;
  margin-bottom: 0;
}
@media (max-width: 700px) {
  .calc-inputs { grid-template-columns: 1fr; }
}

/* Category selector — pill button row that picks which industry's
   benchmark numbers feed the comparison block. Spans both columns of
   the input grid so it sits at full width above the input fields. */
.calc-cat-selector {
  grid-column: 1 / -1;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--pleo-line);
  margin-bottom: 0.25rem;
}
.calc-cat-selector-label {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--pleo-muted);
}
.calc-cat-buttons {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}
.calc-cat-btn {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.85rem;
  font-weight: 500;
  padding: 0.4rem 0.85rem;
  border-radius: 999px;
  border: 1px solid var(--pleo-line);
  background: var(--pleo-white);
  color: var(--pleo-ink);
  cursor: pointer;
  transition: background .15s ease-out, border-color .15s ease-out, color .15s ease-out;
}
.calc-cat-btn:hover {
  border-color: var(--pleo-primary);
  color: var(--pleo-primary);
}
.calc-cat-btn.is-active {
  background: var(--pleo-primary);
  border-color: var(--pleo-primary);
  color: var(--pleo-white);
}
.calc-input {
  display: flex; flex-direction: column; gap: 0.4rem;
}
.calc-label {
  font-size: 0.9rem; font-weight: 600;
  color: var(--pleo-ink);
}
.calc-input-wrap {
  display: flex; align-items: center;
  background: var(--pleo-white);
  border: 1.5px solid var(--pleo-line);
  border-radius: var(--radius-sm);
  padding: 0 0.85rem;
  transition: border-color .15s;
}
.calc-input-wrap:focus-within {
  border-color: var(--pleo-primary);
  box-shadow: 0 0 0 3px rgba(249, 115, 22, 0.15);
}
.calc-input-wrap input {
  flex: 1;
  border: 0;
  padding: 0.75rem 0;
  font-size: 1.05rem;
  font-weight: 600;
  color: var(--pleo-ink);
  background: transparent;
  outline: none;
  width: 100%;
  font-family: inherit;
  /* Hide spinners on number inputs — looks cleaner */
  -moz-appearance: textfield;
}
.calc-input-wrap input::-webkit-outer-spin-button,
.calc-input-wrap input::-webkit-inner-spin-button {
  -webkit-appearance: none; margin: 0;
}
.calc-affix {
  color: var(--pleo-muted);
  font-weight: 600;
  font-size: 0.95rem;
  padding: 0 0.15rem;
}
.calc-help {
  font-size: 0.78rem;
  color: var(--pleo-muted);
  line-height: 1.4;
}

/* Outputs --------------------------------------------- */
/* STICKY OUTPUT COLUMN: as the visitor fiddles with input values on
   the left, the output column stays pinned to the viewport so they
   can see how their changes affect the math without scrolling. The
   sticky offset (140px) clears the 120px fixed nav with a 20px gap.
   `align-self: start` is REQUIRED for sticky to work inside a CSS
   grid — without it the item stretches to row height and sticky
   becomes a no-op. On mobile the two columns stack vertically and
   sticky is disabled. */
.calc-outputs {
  display: flex; flex-direction: column;
  position: sticky;
  top: 140px;
  align-self: start;
  max-height: calc(100vh - 160px);
  overflow-y: auto;
  /* Slim scrollbar styling so the sticky panel doesn't look heavy */
  scrollbar-width: thin;
  scrollbar-color: var(--pleo-line) transparent;
}
.calc-outputs::-webkit-scrollbar { width: 6px; }
.calc-outputs::-webkit-scrollbar-thumb {
  background: var(--pleo-line);
  border-radius: 3px;
}
@media (max-width: 900px) {
  .calc-outputs {
    position: static;
    max-height: none;
    overflow-y: visible;
  }
}

.calc-output-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
  gap: 0.75rem;
}
.calc-output {
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-md);
  padding: 1rem 1.15rem;
  display: flex; flex-direction: column; gap: 0.25rem;
  transition: transform .15s, border-color .15s, box-shadow .15s;
}
.calc-output:hover {
  border-color: var(--pleo-primary);
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(11, 13, 18, 0.04);
}
.calc-output-label {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.74rem;
  color: var(--pleo-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  font-weight: 500;
}
.calc-output-value {
  font-size: 1.45rem;
  font-weight: 800;
  letter-spacing: -0.025em;
  color: var(--pleo-ink);
  line-height: 1.1;
}
/* Primary outputs get a soft brand-orange wash + gradient-text value */
.calc-output-primary {
  background: linear-gradient(135deg, rgba(249, 115, 22, 0.06), rgba(190, 24, 93, 0.05));
  border-color: rgba(194, 65, 12, 0.22);
}
.calc-output-primary .calc-output-value {
  background: var(--grad-hero);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
  font-size: 1.6rem;
}

/* Subtle pulse animation when a value updates — helps the eye catch
   which output just recalculated as the visitor types. */
@keyframes calc-output-pulse {
  0%   { background-color: rgba(249, 115, 22, 0.15); }
  100% { background-color: transparent; }
}
.calc-output-value.is-updated {
  animation: calc-output-pulse 0.6s ease-out;
  border-radius: 4px;
}

/* Benchmark comparison block ------------------------- */
.calc-benchmark {
  background: var(--pleo-ink);
  color: var(--pleo-white);
  border-radius: var(--radius-xl);
  padding: 2.5rem clamp(1.5rem, 3vw, 2.5rem);
  position: relative;
  overflow: hidden;
  margin-top: 2rem;
}
.calc-benchmark::before {
  content: '';
  position: absolute; inset: 0;
  background:
    radial-gradient(circle at 0% 0%, rgba(42,109,244,0.25), transparent 50%),
    radial-gradient(circle at 100% 100%, rgba(217,70,239,0.20), transparent 50%);
  pointer-events: none;
}
.calc-benchmark > * { position: relative; }
.calc-benchmark .section-eyebrow {
  color: #FDE68A;
  margin-bottom: 0.5rem;
}
.calc-benchmark-title {
  font-size: clamp(1.4rem, 2.5vw, 2rem);
  font-weight: 800; letter-spacing: -0.02em; line-height: 1.2;
  margin: 0 0 2rem;
  max-width: 720px;
}
.calc-benchmark-title .grad-text {
  background: linear-gradient(135deg, #FEF3C7 0%, #FDE68A 50%, #FED7AA 100%);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
}
.calc-benchmark-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 1rem;
}
.calc-benchmark-tile {
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: var(--radius-md);
  padding: 1.1rem 1.2rem;
}
.calc-bm-label {
  font-size: 0.78rem;
  color: rgba(255, 255, 255, 0.65);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 600;
}
.calc-bm-value {
  font-size: 1.6rem;
  font-weight: 800;
  letter-spacing: -0.025em;
  color: var(--pleo-white);
  margin: 0.2rem 0;
}
.calc-bm-vs {
  font-size: 0.78rem;
  color: rgba(255, 255, 255, 0.7);
}

/* -----------------------------
   15 · /book-a-call — qualifier form
   -----------------------------
   Two-column layout (form on the right, "what you get" sidebar on the
   left). Submits client-side to a mailto: link via a small inline JS
   handler — see book_a_call_page() in build_root_pages.py. */

.bc-layout {
  display: grid;
  grid-template-columns: 280px 1fr;
  gap: 2.5rem;
  align-items: start;
}
@media (max-width: 880px) {
  .bc-layout { grid-template-columns: 1fr; gap: 2rem; }
}

/* Sidebar — "what you get on the call" + email fallback */
.bc-sidebar { display: flex; flex-direction: column; gap: 1rem; position: sticky; top: 130px; }
@media (max-width: 880px) { .bc-sidebar { position: static; } }
.bc-sidebar-card {
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  padding: 1.5rem 1.4rem 1.4rem;
  box-shadow: 0 4px 12px rgba(11, 13, 18, 0.03);
}
.bc-sidebar-card-secondary {
  background: linear-gradient(180deg, #fffaf4 0%, var(--pleo-white) 100%);
}
.bc-sidebar-eyebrow {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--pleo-primary);
  margin-bottom: 0.85rem;
}
.bc-sidebar-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
.bc-sidebar-list li {
  display: flex;
  gap: 0.6rem;
  font-size: 0.9rem;
  line-height: 1.5;
  color: var(--pleo-text);
}
.bc-sidebar-list li span {
  font-family: 'Fraunces', 'Instrument Serif', Georgia, serif;
  font-weight: 500;
  color: var(--pleo-primary);
  flex-shrink: 0;
  width: 1.4rem;
}
.bc-sidebar-foot {
  margin-top: 1rem;
  padding-top: 1rem;
  border-top: 1px solid var(--pleo-line);
  font-size: 0.88rem;
  color: var(--pleo-text);
  line-height: 1.55;
}
.bc-sidebar-foot strong { color: var(--pleo-ink); }
.bc-sidebar-card-secondary p {
  margin: 0;
  font-size: 0.9rem;
  color: var(--pleo-text);
  line-height: 1.55;
}
.bc-sidebar-card-secondary a {
  color: var(--pleo-primary);
  font-weight: 600;
  border-bottom: 1px solid rgba(194, 65, 12, 0.25);
}

/* The form itself */
.bc-form {
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-lg);
  padding: clamp(1.5rem, 3vw, 2.25rem);
  box-shadow: 0 6px 18px rgba(11, 13, 18, 0.04);
}
.bc-form-section {
  padding-bottom: 1.5rem;
  margin-bottom: 1.5rem;
  border-bottom: 1px solid var(--pleo-line);
}
.bc-form-section:last-of-type {
  border-bottom: none;
  margin-bottom: 1rem;
}
.bc-form-section-title {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--pleo-primary);
  margin-bottom: 1.1rem;
}
.bc-form-section-note {
  font-size: 0.88rem;
  color: var(--pleo-muted);
  line-height: 1.55;
  margin: -0.5rem 0 1.1rem;
}

.bc-form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem 1.25rem;
}
@media (max-width: 640px) {
  .bc-form-grid { grid-template-columns: 1fr; gap: 0.85rem; }
}
.bc-field { display: flex; flex-direction: column; gap: 0.35rem; min-width: 0; }
.bc-field-full {
  margin-top: 1rem;
}
.bc-field label {
  font-family: 'Lexend Deca', 'Inter', system-ui, sans-serif;
  font-size: 0.82rem;
  font-weight: 500;
  color: var(--pleo-ink);
}
.bc-req {
  color: var(--pleo-primary);
  margin-left: 0.15rem;
}
.bc-optional {
  color: var(--pleo-muted);
  font-weight: 400;
  font-size: 0.78rem;
  margin-left: 0.25rem;
}
.bc-field input,
.bc-field select,
.bc-field textarea {
  width: 100%;
  padding: 0.7rem 0.85rem;
  font: inherit;
  font-size: 0.95rem;
  color: var(--pleo-ink);
  background: var(--pleo-white);
  border: 1px solid var(--pleo-line);
  border-radius: var(--radius-sm);
  transition: border-color .15s, box-shadow .15s;
  appearance: none;
  -webkit-appearance: none;
}
.bc-field select {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' fill='none' stroke='%237a7a7a' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  background-repeat: no-repeat;
  background-position: right 0.85rem center;
  padding-right: 2.2rem;
}
.bc-field input:focus,
.bc-field select:focus,
.bc-field textarea:focus {
  outline: none;
  border-color: var(--pleo-primary);
  box-shadow: 0 0 0 3px rgba(194, 65, 12, 0.15);
}
.bc-field textarea {
  resize: vertical;
  min-height: 5.5rem;
  line-height: 1.55;
}
.bc-field input::placeholder,
.bc-field textarea::placeholder {
  color: var(--pleo-muted);
}

.bc-form-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.85rem;
  padding-top: 0.5rem;
}
.bc-submit {
  font-size: 1rem;
  padding: 0.95rem 1.6rem;
}
.bc-form-foot {
  font-size: 0.83rem;
  color: var(--pleo-muted);
  line-height: 1.55;
  margin: 0;
}
.bc-form-foot strong { color: var(--pleo-ink); }

/* -----------------------------
   16 · Utilities
   ----------------------------- */
.center { text-align: center; }
.mt-1 { margin-top: 1rem; }
.mt-2 { margin-top: 2rem; }
.mt-3 { margin-top: 3rem; }
