/* ============================================================================
   THE COVENANT  ::  /covenant  ::  assets/css/covenant.css
   ----------------------------------------------------------------------------
   COVENANT lane. Page-scoped, dark "instrument chrome" (Tempus) surface.
   HARD CONSTRAINT: every selector is namespaced .cv-* / #cv-* (or is a bare
   element selector nested INSIDE a .cv-* scope). This file is structurally
   incapable of affecting any other page in the estate.

   Colors are LITERAL. global-nav.js stamps data-theme="light" on <html>; this
   page is immune to that by never reading a theme token.

   Motion: transform + opacity ONLY. Never a layout property. Everything is
   gated behind prefers-reduced-motion at the bottom of this file.
   ========================================================================== */

/* ---- 0. The display face, declared HERE and not inherited from a late script.
   Schibsted Grotesk is self-hosted on our own origin, but th-hero.css (which owns
   its @font-face) is injected at RUNTIME by the deferred th-nav-shared.js. That
   made the largest type on the page paint in a fallback and swap after load,
   reflowing a 17,000px document: prod CLS raced between 0.00 and 2.28 run to run,
   and the same defect is live on every other th-nav page. Declaring it here (a
   stylesheet in <head>, alongside a <link rel=preload> for the file itself) means
   the headline face is resolved at first paint and never swaps.
   Identical family name, identical file, identical weights: this is the SAME face
   th-hero.css declares, so nothing about the brand rendering changes. ------------ */
@font-face{
  font-family:'Schibsted Grotesk';
  font-style:normal;
  font-weight:400 900;
  font-display:swap;
  src:url(/assets/fonts/schibsted-grotesk-latin-var.woff2?v=rd1) format('woff2')
}

/* ---- 1. Stage ------------------------------------------------------------ */
.cv-html{background:#06080c !important;-webkit-text-size-adjust:100%;scroll-behavior:smooth}
.cv-body{
  background:#06080c !important;
  color:#F2F6FA !important;
  margin:0;
  font-family:'IBM Plex Sans',system-ui,-apple-system,'Segoe UI',sans-serif;
  font-size:16px;
  line-height:1.65;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

#cv-page{
  --cv-bg:#06080c;
  --cv-bg2:#0b0f16;
  --cv-panel:#0e131b;
  --cv-plate:rgba(8,12,19,.82);
  --cv-line:#1c2530;
  --cv-hair:rgba(151,187,222,.16);
  --cv-ink:#F2F6FA;
  --cv-txt:rgba(219,229,241,.86);
  --cv-mute:#93a1b1;
  --cv-teal:#2dd4bf;
  --cv-cyan:#22d3ee;
  --cv-warn:#f2c14e;
  --cv-red:#f87171;
  --cv-mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --cv-disp:'Schibsted Grotesk','IBM Plex Sans',system-ui,sans-serif;
  --cv-ez:cubic-bezier(.25,.46,.45,.94);
  position:relative;
  background:#06080c;
  color:#F2F6FA;
  isolation:isolate;
  overflow-x:clip;
  /* THE CLS FIX (measured, not assumed).
     th-nav-shared.js swaps our fallback header for a FIXED .th-nav plus a 62px
     in-flow spacer that it inserts at boot. That spacer arrives ~440ms after
     first paint and pushes the entire document down 62px: a 0.39 shift, three
     times the budget, in Google's "poor" band.
     So: the fallback is pinned out of flow (page-local <style> in covenant.html),
     the late spacer is suppressed below, and the nav height is reserved HERE,
     statically, from the very first paint. Nothing moves. */
  padding-top:62px;
}
/* --th-nav-h drops to 56px under 560px in th-hero.css. Track it exactly. */
@media(max-width:560px){#cv-page{padding-top:56px}}

/* The spacer th-nav-shared.js injects at boot. #cv-page already reserves the nav
   height from first paint, so this would double-count it and shift the page.
   Scoped under .cv-body: structurally cannot reach another page. */
.cv-body > .th-nav-shared-spacer{display:none !important}

#cv-main{display:block}

.cv-wrap{width:100%;max-width:1120px;margin:0 auto;padding:0 20px;box-sizing:border-box}

/* The performance/percentage-lane pill is injected site-wide by perf-toggle.js.
   Company policy is binding: the percentage lane is a quiet option, discussed on
   a call, NEVER promoted on a public page. It also renders as a white blob on a
   #06080c surface. Suppressed HERE, in this lane's own file. Escalated site-wide. */
.cv-body #perf-toggle{display:none !important}

/* ---- 1b. CLS: absorb the shared nav's late reflow, on THIS page only --------
   MEASURED, not assumed (Playwright + PerformanceObserver, 1440x900, no scroll):
     covenant   0.277   <- before these two rules
     downcode-index  0.493   what-data-we-use  0.486   <- the same defect, site-wide
     light-home 0.000   (it ships .th-nav inline, so it is never upgraded)
   Two late reflows inside the INJECTED nav, both owned by lane R2
   (global-nav.js -> th-nav-shared.js -> brand-lockup.js), neither introduced here:
     (a) brand-lockup.js repaints the lockup and the mark grows 26px -> 44px;
     (b) the closed .th-mega dropdown panels are laid out (not display:none) and
         resize 810px -> 794px when th-hero.css lands.
   We do NOT duplicate their nav markup to dodge this: a second copy of a shared
   component is exactly the drift bug this company keeps getting burned by. We
   reserve the final geometry from first paint instead, scoped to .cv-body so it
   cannot reach another page, and the closed mega is taken out of layout entirely.
   Result: 0.277 -> 0.03. Menu behavior verified byte-identical (hover opens,
   megaH 598, links clickable, click still toggles). Escalated to R2 site-wide. */
body.cv-body #th-root .rbl,
body.cv-body #main-nav .brand{min-height:44px;align-items:center}
body.cv-body #th-root img.rbl__img,
body.cv-body #main-nav img.rbl__img{width:34px;height:34px}
body.cv-body #th-root img.rbl__word{height:20px}
body.cv-body .th-nav__item:not(.open) .th-mega{content-visibility:hidden}

/* ---- 2. Type primitives -------------------------------------------------- */
#cv-page :where(h1,h2,h3){font-family:var(--cv-disp);color:var(--cv-ink);margin:0;letter-spacing:-.015em;line-height:1.14;font-weight:700}
#cv-page p{margin:0 0 14px}
#cv-page p:last-child{margin-bottom:0}
#cv-page a{color:var(--cv-cyan);text-decoration:none;overflow-wrap:anywhere}
#cv-page a:hover{color:var(--cv-teal);text-decoration:underline}
#cv-page a:focus-visible,
#cv-page button:focus-visible{outline:2px solid var(--cv-cyan);outline-offset:3px;border-radius:4px}
#cv-page q{quotes:'\201C' '\201D';font-style:italic;color:#e6edf5}
#cv-page em{font-style:italic}
#cv-page strong{font-weight:600;color:var(--cv-ink)}

/* Grouped figures render in the DISPLAY face with PROPORTIONAL numerals.
   Two separate defects, and the second is the one that actually bites:
     1. IBM Plex Mono is monospaced, so the comma took a full digit advance.
     2. font-variant-numeric:tabular-nums does the SAME THING in a proportional
        face, because the OpenType `tnum` feature tabularises the group separator
        (comma) and the decimal point too, so a column of figures aligns. So
        "display face + tabular-nums" still renders "1 , 186 , 812".
   Verified by screenshot: only dropping tnum closes the gap. The count-up does
   not jitter, because covenant.js reserves the final width in `ch` up front.

   AND: a shared stylesheet in the estate carries
     .num,.rate,.dollars,[class*="-num"],[class*="-rate"] {font-family:mono;
      font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
   `[class*="-num"]` MATCHES our own `.cv-num` counter span, so the parent rule
   below was being overridden on the exact element that renders 1,186,812. Hence
   the #cv-page prefix: (1,1,0) beats the shared (0,1,0). Do not drop it. */
#cv-page .cv-fig,#cv-page .cv-stat__n,#cv-page .cv-econ__n,#cv-page .cv-lane__px-n,
#cv-page .cv-door__big,#cv-page .cv-door__mid,#cv-page .cv-num{
  font-family:var(--cv-disp);
  font-variant-numeric:lining-nums proportional-nums;
  font-feature-settings:'tnum' 0,'lnum' 1;
  letter-spacing:-.01em
}

.cv-kick{
  font-family:var(--cv-mono);font-size:12px;font-weight:500;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cv-teal);margin:0 0 14px
}
.cv-kick--sm{font-size:12px;letter-spacing:.12em;margin-bottom:10px;color:var(--cv-mute)}

.cv-h1{
  font-size:clamp(32px,6.4vw,64px);font-weight:800;letter-spacing:-.03em;line-height:1.06;
  margin:0 0 18px;max-width:17ch
}
/* display:inline, NOT inline-block. An inline-block is an atomic box that cannot
   break, which strands the preceding word on its own line at 320px. */
.cv-h1__hi{
  display:inline;
  background:linear-gradient(96deg,#22d3ee 0%,#2dd4bf 55%,#7dd3fc 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  -webkit-box-decoration-break:clone;box-decoration-break:clone;
}
.cv-h2{font-size:clamp(25px,3.4vw,40px);letter-spacing:-.025em;margin:0 0 14px;max-width:26ch}
.cv-h2--big{font-size:clamp(30px,5.6vw,58px);max-width:16ch;margin-inline:auto}
.cv-h3{font-size:clamp(19px,2.2vw,23px);margin:0 0 12px}

.cv-lede{font-size:clamp(16px,1.7vw,19px);color:var(--cv-txt);max-width:64ch;margin:0 0 30px;line-height:1.62}
.cv-sub{font-size:clamp(15px,1.5vw,17px);color:var(--cv-mute);max-width:68ch;margin:0;line-height:1.62}
.cv-note{
  font-size:15px;line-height:1.7;color:var(--cv-txt);max-width:76ch;margin:26px 0 0;
  padding:18px 20px;border-left:2px solid var(--cv-teal);
  background:linear-gradient(90deg,rgba(45,212,191,.07),rgba(45,212,191,0));
  border-radius:0 8px 8px 0;box-sizing:border-box
}
.cv-note--qual{border-left-color:var(--cv-warn);background:linear-gradient(90deg,rgba(242,193,78,.07),rgba(242,193,78,0));margin-top:34px}
.cv-fine{font-size:13px;line-height:1.6;color:var(--cv-mute);margin:14px 0 0}
.cv-fine--c{text-align:center;margin-top:14px}
.cv-mono{font-family:var(--cv-mono);font-variant-numeric:tabular-nums}

.cv-cite{font-family:var(--cv-mono);font-size:12px;letter-spacing:.02em;color:var(--cv-mute);margin:12px 0 0}
.cv-cite a{color:var(--cv-mute);border-bottom:1px dotted rgba(147,161,177,.5);position:relative;display:inline-block}
.cv-cite a:hover{color:var(--cv-cyan);border-bottom-color:var(--cv-cyan);text-decoration:none}
/* 44px tap target on a 12px citation link.
   The previous attempt here was a transparent ::after hit area (inset:-14px -8px).
   It does not work, and we proved it rather than trusting it: probing 10px above
   each link with document.elementFromPoint at 390x844 returned NOT-the-link on
   5 of 5 citation links. The pseudo-element box is generated but loses hit-testing
   to the stacking context around it. So we pay for the tap target in real padding
   and take the height back out of the paragraph margin, which keeps the vertical
   rhythm identical while making the target genuinely 44px. */
.cv-cite a,.cv-stat__s a{padding:12px 4px;margin:-12px -4px;min-height:44px;box-sizing:border-box;display:inline-flex;align-items:center}

/* ---- 2b. Status chips ---------------------------------------------------- */
/* Every claim of capability on this page carries one of these, or it does not ship. */
.cv-st{
  display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;
  font-family:var(--cv-mono);font-size:12px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;
  padding:5px 10px;border-radius:999px;line-height:1.35;box-sizing:border-box
}
.cv-st--inl{vertical-align:middle}
.cv-st--live{color:var(--cv-teal);background:rgba(45,212,191,.1);border:1px solid rgba(45,212,191,.34)}
.cv-st--live::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--cv-teal);flex:0 0 auto}
.cv-st--soon{color:var(--cv-warn);background:rgba(242,193,78,.09);border:1px solid rgba(242,193,78,.3)}
.cv-st--soon::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--cv-warn);flex:0 0 auto;opacity:.7}

.cv-chip{
  display:inline-flex;align-items:center;gap:9px;
  font-family:var(--cv-mono);font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  color:var(--cv-warn);background:rgba(242,193,78,.08);border:1px solid rgba(242,193,78,.3);
  padding:8px 14px;border-radius:999px;margin:0 0 24px !important;max-width:100%;line-height:1.45;box-sizing:border-box
}
.cv-chip__dot{width:7px;height:7px;border-radius:50%;background:var(--cv-warn);flex:0 0 auto}

.cv-band{
  font-size:14.5px;line-height:1.7;color:var(--cv-txt);max-width:82ch;
  margin:0 0 22px !important;padding:16px 20px;border-radius:12px;box-sizing:border-box;
  background:rgba(242,193,78,.05);border:1px solid rgba(242,193,78,.22)
}
.cv-band strong{color:var(--cv-warn)}

/* ---- 3. Sections --------------------------------------------------------- */
.cv-sec{position:relative;padding:clamp(58px,8vw,110px) 0;border-top:1px solid var(--cv-line)}
.cv-sec--prov{background:linear-gradient(180deg,#06080c 0%,#0a0e15 100%)}
.cv-sec--stat{background:#0b0f16}
.cv-sec--cov{background:linear-gradient(180deg,#0b0f16 0%,#080c12 100%)}
.cv-sec--moat{background:#06080c}
.cv-sec--free{background:#0b0f16}
.cv-sec--paid{background:#06080c}
.cv-sec--econ{background:#0b0f16}
.cv-sec--who{background:#06080c}
.cv-sec--cta{background:radial-gradient(120% 90% at 50% 0%,rgba(34,211,238,.10) 0%,rgba(6,8,12,0) 62%),#06080c;text-align:center}
.cv-sec--src{background:#080b11;padding-bottom:clamp(56px,7vw,88px)}

.cv-sec-head{position:relative;margin:0 0 clamp(30px,4vw,50px);max-width:100%;scroll-margin-top:80px}
/* At >=1080 the section head becomes a 2-column instrument: the claim on the
   left, the evidence for it on the right. Below that the right half of the page
   was simply empty on all eight heads. */
@media(min-width:1080px){
  .cv-sec:not(.cv-sec--cta) .cv-sec-head{
    display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,1fr);
    column-gap:46px;align-items:end
  }
  .cv-sec:not(.cv-sec--cta) .cv-sec-head .cv-kick{grid-column:1/-1}
  .cv-sec:not(.cv-sec--cta) .cv-sec-head .cv-h2{grid-column:1;margin-bottom:0}
  .cv-sec:not(.cv-sec--cta) .cv-sec-head .cv-sub,
  .cv-sec:not(.cv-sec--cta) .cv-sec-head .cv-stamp{grid-column:2;justify-self:start}
  .cv-sec:not(.cv-sec--cta) .cv-sec-head .cv-stamp{margin-top:0}
}
.cv-sec--cta .cv-sec-head{margin-inline:auto}

/* ---- 4. Buttons ---------------------------------------------------------- */
.cv-cta-row{display:flex;flex-wrap:wrap;gap:12px;margin:0 0 26px}
.cv-cta-row--c{justify-content:center;margin:28px 0 0}
.cv-btn{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:48px;padding:13px 24px;border-radius:999px;
  font-family:var(--cv-disp);font-size:15px;font-weight:700;letter-spacing:-.01em;
  text-decoration:none;box-sizing:border-box;
  transition:transform .25s var(--cv-ez),opacity .25s var(--cv-ez),box-shadow .25s var(--cv-ez);
  will-change:transform
}
.cv-btn:hover{text-decoration:none;transform:translateY(-2px)}
.cv-btn--pri{background:linear-gradient(96deg,#22d3ee,#2dd4bf);color:#04070b !important;box-shadow:0 6px 26px rgba(34,211,238,.24)}
.cv-btn--pri:hover{box-shadow:0 12px 38px rgba(34,211,238,.36);color:#04070b !important}
.cv-btn--sec{background:rgba(151,187,222,.06);color:var(--cv-ink) !important;border:1px solid var(--cv-hair)}
.cv-btn--sec:hover{background:rgba(151,187,222,.12);color:#fff !important}
.cv-btn--lg{min-height:56px;padding:16px 34px;font-size:16.5px}

/* ---- 4b. The sticky mobile CTA dock -------------------------------------- */
/* 22,000px separated the hero CTA from the next one. On a phone that is 39
   screens with no way to act. */
.cv-dock{display:none}
@media(max-width:768px){
  .cv-dock{
    position:fixed;left:12px;right:12px;bottom:12px;z-index:40;
    display:flex;opacity:0;transform:translateY(14px);pointer-events:none;
    transition:opacity .28s var(--cv-ez),transform .28s var(--cv-ez)
  }
  .cv-dock[hidden]{display:none}
  .cv-dock.cv-dock--on{opacity:1;transform:none;pointer-events:auto}
  .cv-dock .cv-btn{width:100%;min-height:50px;box-shadow:0 10px 34px rgba(0,0,0,.6),0 6px 26px rgba(34,211,238,.28)}
}

/* ---- 5. Hero ------------------------------------------------------------- */
.cv-hero{position:relative;padding:clamp(48px,7vw,92px) 0 clamp(52px,7vw,88px);overflow:hidden;isolation:isolate}
.cv-hero__field{position:absolute;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.cv-hero__grid{
  position:absolute;inset:-40%;
  background-image:linear-gradient(rgba(151,187,222,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(151,187,222,.05) 1px,transparent 1px);
  background-size:64px 64px;
  -webkit-mask-image:radial-gradient(70% 60% at 50% 30%,#000 0%,transparent 72%);
  mask-image:radial-gradient(70% 60% at 50% 30%,#000 0%,transparent 72%);
  opacity:.85
}
.cv-hero__ring{
  position:absolute;border-radius:50%;
  border:1px solid transparent;
  background:conic-gradient(from 0deg,rgba(34,211,238,0) 0deg,rgba(34,211,238,.32) 80deg,rgba(45,212,191,.10) 170deg,rgba(34,211,238,0) 260deg) border-box;
  -webkit-mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
  will-change:transform
}
.cv-hero__ring--a{width:min(760px,150vw);height:min(760px,150vw);top:-30%;right:-24%;animation:cv-spin 46s linear infinite}
.cv-hero__ring--b{width:min(480px,110vw);height:min(480px,110vw);bottom:-34%;left:-18%;animation:cv-spin 64s linear infinite reverse;opacity:.7}
@keyframes cv-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}

.cv-eyebrow{
  display:inline-flex;align-items:center;gap:9px;
  font-family:var(--cv-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--cv-mute);background:rgba(8,12,19,.82);border:1px solid var(--cv-hair);
  padding:7px 14px;border-radius:999px;margin:0 0 22px;max-width:100%;line-height:1.4
}
.cv-eyebrow__short{display:none}
.cv-eyebrow__dot{width:7px;height:7px;border-radius:50%;background:var(--cv-teal);flex:0 0 auto;box-shadow:0 0 0 0 rgba(45,212,191,.6);animation:cv-pulse 2.6s var(--cv-ez) infinite}
@keyframes cv-pulse{0%{box-shadow:0 0 0 0 rgba(45,212,191,.5)}70%{box-shadow:0 0 0 8px rgba(45,212,191,0)}100%{box-shadow:0 0 0 0 rgba(45,212,191,0)}}

.cv-hero__acts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,270px),1fr));gap:14px;margin:0 0 24px}
.cv-hero__act{
  position:relative;padding:22px 22px 20px;border-radius:14px;
  background:var(--cv-plate);border:1px solid var(--cv-hair);
  transition:transform .3s var(--cv-ez),border-color .3s var(--cv-ez)
}
.cv-hero__act:hover{transform:translateY(-3px);border-color:rgba(34,211,238,.35)}
.cv-hero__act-n{font-family:var(--cv-mono);font-size:12px;color:var(--cv-cyan);letter-spacing:.14em;display:block;margin-bottom:10px}
.cv-hero__act-h{font-size:clamp(17px,2vw,20px);margin:0 0 8px;max-width:none}
.cv-hero__act p{font-size:14.5px;color:var(--cv-mute);margin:0;line-height:1.6}

.cv-status{
  font-size:14px;line-height:1.68;color:var(--cv-txt);max-width:78ch;
  padding:18px 20px;border-radius:12px;box-sizing:border-box;
  background:rgba(242,193,78,.06);border:1px solid rgba(242,193,78,.24);margin:0 0 26px !important
}
.cv-status strong{color:var(--cv-warn)}

/* ---- 5b. Section index --------------------------------------------------- */
.cv-index{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 0}
.cv-index a{
  display:inline-flex;align-items:center;gap:8px;min-height:44px;
  padding:0 14px;border-radius:999px;box-sizing:border-box;
  font-family:var(--cv-mono);font-size:12px;letter-spacing:.05em;
  color:var(--cv-mute);background:rgba(8,12,19,.72);border:1px solid var(--cv-hair);
  transition:transform .2s var(--cv-ez),border-color .2s var(--cv-ez),color .2s var(--cv-ez)
}
.cv-index a span{color:var(--cv-cyan);font-weight:600}
.cv-index a:hover{color:var(--cv-ink);border-color:rgba(34,211,238,.4);text-decoration:none;transform:translateY(-2px)}

/* ---- 6. Timeline --------------------------------------------------------- */
.cv-tl{position:relative;list-style:none;margin:0;padding:0 0 0 34px}
.cv-tl__rail{position:absolute;left:7px;top:8px;bottom:8px;width:2px;background:var(--cv-line);border-radius:2px;overflow:hidden}
.cv-tl__fill{
  display:block;width:100%;height:100%;
  background:linear-gradient(180deg,#22d3ee,#2dd4bf);
  transform:scaleY(0);transform-origin:top center;
  transition:transform 1.1s var(--cv-ez)
}
.cv-tl__item{position:relative;padding:0 0 clamp(30px,4vw,46px)}
.cv-tl__item:last-child{padding-bottom:0}
.cv-tl__node{
  position:absolute;left:-34px;top:6px;width:16px;height:16px;border-radius:50%;
  background:#06080c;border:2px solid var(--cv-line);box-sizing:border-box;
  transition:transform .4s var(--cv-ez),border-color .4s var(--cv-ez),background-color .4s var(--cv-ez)
}
.cv-tl__item.cv-in .cv-tl__node{border-color:var(--cv-cyan);background:#0d2a33;transform:scale(1.15)}
.cv-tl__date{font-family:var(--cv-mono);font-size:12px;letter-spacing:.09em;text-transform:uppercase;color:var(--cv-cyan);margin:0 0 8px}
.cv-tl__h{font-size:clamp(19px,2.5vw,26px);margin:0 0 10px;max-width:28ch}
.cv-tl__b{font-size:15.5px;line-height:1.7;color:var(--cv-txt);max-width:74ch;margin:0}
.cv-tl__note{
  font-size:14px;line-height:1.65;color:var(--cv-txt);max-width:74ch;
  margin:14px 0 0;padding:12px 15px;border-radius:10px;box-sizing:border-box;
  background:rgba(151,187,222,.05);border:1px solid var(--cv-hair)
}
.cv-tl__note strong{color:#fff}

.cv-quote{
  margin:0 0 14px;padding:20px 22px;border-radius:12px;box-sizing:border-box;
  background:linear-gradient(140deg,rgba(248,113,113,.08),rgba(6,8,12,0) 70%),var(--cv-plate);
  border:1px solid rgba(248,113,113,.24)
}
.cv-quote p{font-family:var(--cv-disp);font-size:clamp(16px,2vw,20px);line-height:1.5;color:#fff;margin:0 0 12px}
.cv-quote cite{font-family:var(--cv-mono);font-size:12px;font-style:normal;letter-spacing:.05em;color:var(--cv-mute)}

.cv-verdict{
  display:grid;grid-template-columns:1fr;gap:16px;align-items:center;
  margin:clamp(34px,4.5vw,52px) 0 0;padding:26px;border-radius:16px;box-sizing:border-box;
  background:var(--cv-plate);border:1px solid var(--cv-hair)
}
.cv-verdict__l{font-size:16px;line-height:1.65;color:var(--cv-txt);margin:0}
.cv-verdict__r{font-family:var(--cv-disp);font-size:clamp(20px,2.6vw,27px);font-weight:700;line-height:1.28;margin:0}
.cv-verdict__r strong{
  background:linear-gradient(96deg,#22d3ee,#2dd4bf);-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:800
}
@media(min-width:900px){.cv-verdict{grid-template-columns:1.5fr 1fr;gap:34px;padding:32px 34px}}

/* ---- 7. The regulation panel --------------------------------------------- */
.cv-reg{display:grid;grid-template-columns:1fr;gap:14px}
@media(min-width:860px){.cv-reg{grid-template-columns:.85fr 1.3fr 1fr}}
.cv-reg__col{
  padding:22px;border-radius:14px;box-sizing:border-box;
  background:var(--cv-plate);border:1px solid var(--cv-hair);
  transition:transform .35s var(--cv-ez),border-color .35s var(--cv-ez)
}
.cv-reg__col:hover{transform:translateY(-3px)}
.cv-reg__col--must{border-color:rgba(45,212,191,.3)}
.cv-reg__col--then{border-color:rgba(34,211,238,.34);background:linear-gradient(160deg,rgba(34,211,238,.06),rgba(6,8,12,0) 62%),var(--cv-plate)}
.cv-reg__col--not{border-color:rgba(248,113,113,.28)}
.cv-reg__lab{
  font-family:var(--cv-mono);font-size:12px;letter-spacing:.11em;text-transform:uppercase;
  margin:0 0 14px;padding-bottom:12px;border-bottom:1px solid var(--cv-hair)
}
.cv-reg__col--must .cv-reg__lab{color:var(--cv-teal)}
.cv-reg__col--then .cv-reg__lab{color:var(--cv-cyan)}
.cv-reg__col--not .cv-reg__lab{color:var(--cv-red)}
.cv-reg__list{list-style:none;margin:0;padding:0}
.cv-reg__list li{position:relative;font-size:14.5px;line-height:1.6;color:var(--cv-txt);padding:0 0 12px 16px}
.cv-reg__list li:last-child{padding-bottom:0}
.cv-reg__list li::before{content:'';position:absolute;left:0;top:9px;width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.45}
.cv-reg__list--struck li{color:var(--cv-mute)}
/* The strike must HUG the text and strike EVERY line box. The old absolutely
   positioned ::after ran to the container edge and struck only line one, so on
   the three-line public-payor bullet it visually asserted that Medicaid, CHIP
   and TRICARE were NOT prohibited. It is a text-decoration now, animated by its
   own color alpha, which transitions and wraps. */
.cv-reg__s{
  text-decoration:line-through;
  text-decoration-thickness:2px;
  text-decoration-color:transparent;
  transition:text-decoration-color .55s var(--cv-ez)
}
.cv-reg.cv-in .cv-reg__s{text-decoration-color:rgba(248,113,113,.85)}
.cv-reg.cv-in li:nth-child(2) .cv-reg__s{transition-delay:.14s}
.cv-reg.cv-in li:nth-child(3) .cv-reg__s{transition-delay:.28s}

/* ---- 8. Stat strip ------------------------------------------------------- */
.cv-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:14px;margin:clamp(30px,4vw,44px) 0 0}
.cv-stat{
  display:flex;flex-direction:column;
  padding:22px 20px;border-radius:14px;box-sizing:border-box;
  background:var(--cv-plate);border:1px solid var(--cv-hair);
  transition:transform .35s var(--cv-ez),border-color .35s var(--cv-ez)
}
.cv-stat:hover{transform:translateY(-3px);border-color:rgba(34,211,238,.3)}
.cv-stat--hi{border-color:rgba(45,212,191,.3);background:linear-gradient(160deg,rgba(45,212,191,.07),rgba(6,8,12,0) 60%),var(--cv-plate)}
.cv-stat__n{
  font-weight:700;
  font-size:clamp(28px,3.6vw,40px);line-height:1.1;color:#fff;margin:0 0 10px;
  display:flex;align-items:baseline;gap:2px;overflow-wrap:anywhere
}
.cv-stat--hi .cv-stat__n{color:var(--cv-teal)}
.cv-stat__u{font-size:.6em;opacity:.8}
.cv-stat__l{font-size:13.5px;line-height:1.55;color:var(--cv-txt);margin:0}
.cv-stat__s{font-family:var(--cv-mono);font-size:12px;color:var(--cv-mute);margin:auto 0 0;padding-top:10px;line-height:1.5}
.cv-stat__s a{color:var(--cv-mute);border-bottom:1px dotted rgba(147,161,177,.45);position:relative;display:inline-block}
.cv-stat__s a:hover{color:var(--cv-cyan);text-decoration:none}

/* ---- 9. The door --------------------------------------------------------- */
.cv-door{display:grid;grid-template-columns:1fr;gap:14px;margin:clamp(30px,4vw,44px) 0 0}
@media(min-width:860px){.cv-door{grid-template-columns:1fr 1fr}}
.cv-door__l,.cv-door__r{display:flex;flex-direction:column;padding:26px 24px;border-radius:16px;box-sizing:border-box;background:var(--cv-plate);border:1px solid var(--cv-hair)}
.cv-door__l{border-color:rgba(34,211,238,.3);background:linear-gradient(150deg,rgba(34,211,238,.08),rgba(6,8,12,0) 65%),var(--cv-plate)}
.cv-door__big{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;font-weight:700;font-size:clamp(30px,5vw,52px);line-height:1.1;margin:0 0 14px}
.cv-door__from{color:var(--cv-mute);text-decoration:line-through;text-decoration-color:rgba(248,113,113,.75);text-decoration-thickness:2px}
.cv-door__arrow{color:var(--cv-mute);font-size:.6em;font-family:var(--cv-mono)}
.cv-door__to{color:var(--cv-cyan)}
.cv-door__mid{font-weight:700;font-size:clamp(24px,3.6vw,36px);color:#fff;margin:0 0 14px;line-height:1.15}
.cv-door__cap{font-size:14.5px;line-height:1.65;color:var(--cv-txt);margin:0 0 auto}
.cv-door .cv-stat__s{margin-top:14px}

/* ---- 10. The four covenants ---------------------------------------------- */
/* Deliberately 2x2, never auto-fit: four covenants read as a quadrant, and a
   3+1 orphan row makes the fourth look like an afterthought. It is not. */
.cv-covgrid{display:grid;grid-template-columns:1fr;gap:16px;align-items:stretch}
@media(min-width:760px){.cv-covgrid{grid-template-columns:1fr 1fr}}
.cv-cov{
  position:relative;display:flex;flex-direction:column;
  padding:28px 24px 24px;border-radius:16px;box-sizing:border-box;overflow:hidden;
  background:linear-gradient(165deg,rgba(151,187,222,.05),rgba(6,8,12,0) 60%),var(--cv-panel);
  border:1px solid var(--cv-hair);
  transition:transform .38s var(--cv-ez),border-color .38s var(--cv-ez),box-shadow .38s var(--cv-ez)
}
.cv-cov::before{
  content:'';position:absolute;left:0;right:0;top:0;height:2px;
  background:linear-gradient(90deg,#22d3ee,#2dd4bf);
  transform:scaleX(0);transform-origin:left center;transition:transform .55s var(--cv-ez)
}
.cv-cov.cv-in::before{transform:scaleX(1)}
.cv-cov:hover{transform:translateY(-4px);border-color:rgba(34,211,238,.36);box-shadow:0 18px 48px rgba(0,0,0,.42)}
.cv-cov__n{
  font-family:var(--cv-mono);font-size:12px;font-weight:600;letter-spacing:.2em;
  color:var(--cv-cyan);margin:0 0 14px
}
.cv-cov__h{font-size:clamp(20px,2.4vw,25px);margin:0 0 12px;max-width:none}
.cv-cov__b{font-size:14.8px;line-height:1.68;color:var(--cv-txt);margin:0 0 14px}
/* A real control, not a hover state. Keyboard-operable, announced, and it opens
   the instrument instead of summarising it. */
.cv-cov__t{
  display:inline-flex;align-items:center;justify-content:space-between;gap:10px;
  width:100%;min-height:44px;margin:0 0 4px;padding:10px 14px;
  border-radius:10px;box-sizing:border-box;cursor:pointer;text-align:left;
  background:rgba(34,211,238,.07);border:1px solid rgba(34,211,238,.26);
  font-family:var(--cv-mono);font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  color:var(--cv-cyan);
  transition:background-color .25s var(--cv-ez),border-color .25s var(--cv-ez)
}
.cv-cov__t:hover{background:rgba(34,211,238,.13);border-color:rgba(34,211,238,.45)}
.cv-cov__t-i{
  position:relative;width:12px;height:12px;flex:0 0 auto;
  transition:transform .3s var(--cv-ez)
}
.cv-cov__t-i::before,.cv-cov__t-i::after{content:'';position:absolute;background:currentColor;border-radius:1px}
.cv-cov__t-i::before{left:0;top:5px;width:12px;height:2px}
.cv-cov__t-i::after{left:5px;top:0;width:2px;height:12px;transition:transform .3s var(--cv-ez)}
.cv-cov__t[aria-expanded="true"] .cv-cov__t-i::after{transform:scaleY(0)}
.cv-cov__p{margin:10px 0 0;padding:16px 18px;border-radius:10px;box-sizing:border-box;background:rgba(6,8,12,.62);border:1px solid var(--cv-hair)}
.cv-cov__p[hidden]{display:none}
.cv-cov__draft{font-size:14px;line-height:1.72;color:var(--cv-txt);margin:0 0 10px}
.cv-cov__draft q{color:#dfe8f2}
.cv-cov__note{font-family:var(--cv-mono);font-size:12px;letter-spacing:.04em;color:var(--cv-warn);margin:0;line-height:1.5}
/* margin-top:auto pins the kicker to the card bottom so a row of unequal cards
   still shares one baseline rule. */
.cv-cov__k{
  font-family:var(--cv-mono);font-size:12px;letter-spacing:.04em;color:var(--cv-teal);
  margin:16px 0 0 !important;padding-top:14px;border-top:1px solid var(--cv-hair)
}
.cv-callout{
  margin:clamp(26px,3.5vw,38px) 0 0;padding:20px 22px;border-radius:14px;box-sizing:border-box;
  background:rgba(242,193,78,.06);border:1px solid rgba(242,193,78,.24)
}
.cv-callout p{font-size:15px;line-height:1.68;color:var(--cv-txt);margin:0 0 14px}
.cv-callout p:last-child{margin:0}
.cv-callout strong{color:var(--cv-warn)}
.cv-callout__against{padding-top:14px;border-top:1px solid rgba(242,193,78,.2)}

/* ---- 11. Moat ------------------------------------------------------------ */
.cv-anlg{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:16px;align-items:stretch}
.cv-anlg__c{
  display:flex;flex-direction:column;
  padding:26px 24px;border-radius:16px;box-sizing:border-box;
  background:var(--cv-plate);border:1px solid var(--cv-hair);
  transition:transform .35s var(--cv-ez),border-color .35s var(--cv-ez)
}
.cv-anlg__c:hover{transform:translateY(-3px);border-color:rgba(45,212,191,.32)}
.cv-anlg__h{font-size:clamp(18px,2.1vw,21px);margin:0 0 12px;color:var(--cv-teal)}
.cv-anlg__c p{font-size:14.8px;line-height:1.7;color:var(--cv-txt)}
.cv-anlg__p{font-family:var(--cv-disp);font-size:16px !important;font-weight:600;color:#fff !important;line-height:1.5 !important;margin:auto 0 0 !important;padding-top:14px;border-top:1px solid var(--cv-hair)}

.cv-reg-panel{margin:clamp(30px,4vw,46px) 0 0;padding:clamp(20px,3vw,32px);border-radius:18px;box-sizing:border-box;background:var(--cv-panel);border:1px solid var(--cv-hair)}
.cv-reg-panel__hd{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:0 0 14px}
.cv-reg-panel__hd .cv-h3{margin:0}
.cv-reg-panel__b{font-size:15.5px;line-height:1.7;color:var(--cv-txt);max-width:74ch;margin:0 0 20px}

/* ---- 12. Tables ---------------------------------------------------------- */
/* At >=760 a real table. Below that they STACK: a 640px table in a 242px window
   was hiding 62% of the register, including our own self-disclosure row, and it
   was truncating "35,000" to "35" in the revenue table. */
.cv-tblwrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;border-radius:12px 12px 0 0;border:1px solid var(--cv-hair)}
.cv-tbl{width:100%;border-collapse:collapse;font-size:14px;background:rgba(8,12,19,.6)}
.cv-tbl th,.cv-tbl td{padding:13px 14px;text-align:left;vertical-align:top;border-bottom:1px solid var(--cv-line);line-height:1.55}
.cv-tbl thead th{
  font-family:var(--cv-mono);font-size:12px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;
  color:var(--cv-mute);background:rgba(151,187,222,.05)
}
.cv-tbl tbody th{color:#fff;font-weight:600;font-family:var(--cv-disp)}
.cv-tbl tbody td{color:var(--cv-txt)}
.cv-tbl tbody tr:last-child th,.cv-tbl tbody tr:last-child td{border-bottom:0}
.cv-tbl__self{background:linear-gradient(90deg,rgba(45,212,191,.09),rgba(6,8,12,0))}
.cv-tbl__pend{color:var(--cv-mute) !important;font-family:var(--cv-mono);font-size:12.5px}
.cv-tbl--rev{table-layout:fixed}
.cv-tbl--rev td{font-size:17px;font-weight:600;color:#fff}
/* The caption is a SIBLING now, not a <caption>. A table-caption box sizes to
   max-content, so it was 793px wide inside a 640px table, creating a SECOND
   nested horizontal scroller and clipping the mandatory "MODELED, NOT
   GUARANTEED" disclosure mid-sentence. */
.cv-tbl__cap{
  display:block;text-align:left;font-size:12.5px;line-height:1.6;color:var(--cv-mute);
  margin:0 !important;padding:12px 14px;box-sizing:border-box;
  background:rgba(8,12,19,.45);border:1px solid var(--cv-hair);border-top:0;border-radius:0 0 12px 12px
}
.cv-tbl__cap strong{color:var(--cv-warn)}
/* 900, not 760. At 768 the 5-column register still needed an 80px swipe and the
   column it hid was RESPONSE, the payoff column. A tablet reader saw a register
   with the answer amputated. Both tables are now cards below 900. */
@media(min-width:900px){
  .cv-tbl--reg{min-width:760px}
  .cv-tbl--rev{min-width:0}
}
@media(max-width:899.98px){
  .cv-tblwrap{overflow-x:visible;border-radius:12px 12px 0 0}
  .cv-tbl{display:block;min-width:0}
  .cv-tbl thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
  .cv-tbl tbody{display:block}
  .cv-tbl tbody tr{display:block;padding:12px 0;border-bottom:1px solid var(--cv-line)}
  .cv-tbl tbody tr:last-child{border-bottom:0}
  .cv-tbl tbody th{display:block;border:0;padding:4px 14px 8px;font-size:16px}
  .cv-tbl tbody td{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 16px;border:0;padding:5px 14px}
  .cv-tbl tbody td::before{
    content:attr(data-l);flex:0 0 auto;
    font-family:var(--cv-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--cv-mute)
  }
  .cv-tbl tbody td.cv-fig{font-size:19px}
  .cv-tbl--reg tbody td{display:block}
  .cv-tbl--reg tbody td::before{display:block;margin-bottom:3px}
}

/* ---- 13. Free layer ------------------------------------------------------ */
.cv-freegrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr));gap:16px;align-items:stretch}
.cv-free-card{
  position:relative;display:flex;flex-direction:column;
  padding:26px 24px;border-radius:16px;box-sizing:border-box;
  background:var(--cv-plate);border:1px solid var(--cv-hair);
  transition:transform .35s var(--cv-ez),border-color .35s var(--cv-ez)
}
.cv-free-card:hover{transform:translateY(-3px);border-color:rgba(34,211,238,.32)}
.cv-free-card--wide{grid-column:1/-1;border-color:rgba(45,212,191,.34);background:linear-gradient(160deg,rgba(45,212,191,.07),rgba(6,8,12,0) 58%),var(--cv-plate)}
.cv-free-card__hd{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 14px}
.cv-free-card__tag{
  display:inline-block;font-family:var(--cv-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;
  color:#04070b;background:var(--cv-teal);padding:5px 10px;border-radius:999px;margin:0 !important;font-weight:600
}
.cv-free-card__h{font-size:clamp(19px,2.2vw,23px);margin:0 0 12px;max-width:none}
.cv-free-card p{font-size:14.8px;line-height:1.7;color:var(--cv-txt)}
/* margin-top:auto -> the price rail pins to the card floor, so a row of cards
   with unequal copy still lines its prices up on one baseline. */
.cv-free-card__px{
  font-family:var(--cv-mono);font-size:12.5px;letter-spacing:.05em;color:var(--cv-teal);
  margin:16px 0 0 !important;padding-top:14px;border-top:1px solid var(--cv-hair);font-weight:600;
  margin-top:auto !important
}
.cv-free-card__px a{color:var(--cv-teal);display:inline-block;min-height:24px}
.cv-example{
  margin:16px 0;padding:18px 20px;border-radius:12px;box-sizing:border-box;
  background:rgba(6,8,12,.6);border:1px solid rgba(34,211,238,.26);border-left-width:3px
}
.cv-example p{font-family:var(--cv-disp);font-size:clamp(15px,1.9vw,18px) !important;line-height:1.55 !important;color:#fff !important;margin:0 0 10px !important}
.cv-example cite{font-family:var(--cv-mono);font-size:12px;font-style:normal;color:var(--cv-mute);line-height:1.5;display:block}

/* ---- 14. Paid lanes ------------------------------------------------------ */
/* stretch, not start: lane one was 644px and lane two 999px, leaving a 355px
   black hole under the $149 card, in the money section. */
.cv-lanes{display:grid;grid-template-columns:1fr;gap:16px;align-items:stretch}
@media(min-width:920px){.cv-lanes{grid-template-columns:1fr 1fr}}
.cv-lane{
  display:flex;flex-direction:column;
  padding:clamp(24px,3vw,32px);border-radius:18px;box-sizing:border-box;
  background:linear-gradient(165deg,rgba(34,211,238,.07),rgba(6,8,12,0) 55%),var(--cv-panel);
  border:1px solid rgba(34,211,238,.28)
}
.cv-lane--b{background:linear-gradient(165deg,rgba(45,212,191,.07),rgba(6,8,12,0) 55%),var(--cv-panel);border-color:rgba(45,212,191,.28)}
.cv-lane__tag{display:flex;flex-wrap:wrap;align-items:center;gap:10px;font-family:var(--cv-mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--cv-mute);margin:0 0 10px}
.cv-lane__h{font-size:clamp(22px,2.8vw,30px);margin:0 0 18px;max-width:none}
.cv-lane__px{display:flex;align-items:baseline;flex-wrap:wrap;gap:8px;margin:0 0 6px}
.cv-lane__px-n{font-weight:700;font-size:clamp(30px,4.2vw,44px);color:#fff;line-height:1.05}
.cv-lane__px-u{font-size:14px;color:var(--cv-mute)}
.cv-lane__wholesale{font-size:13.5px;color:var(--cv-mute);margin:0 0 20px;padding-bottom:18px;border-bottom:1px solid var(--cv-hair)}
.cv-lane__list{list-style:none;margin:0;padding:0}
.cv-lane__list li{position:relative;font-size:14.8px;line-height:1.7;color:var(--cv-txt);padding:0 0 14px 20px}
.cv-lane__list li:last-child{padding-bottom:0}
.cv-lane__list li::before{content:'';position:absolute;left:0;top:10px;width:7px;height:7px;border-radius:2px;background:var(--cv-cyan);opacity:.75}
.cv-lane--b .cv-lane__list li::before{background:var(--cv-teal)}
.cv-lane__pin{
  margin:auto 0 0;padding:18px 20px 16px;border-radius:12px;box-sizing:border-box;
  background:rgba(6,8,12,.55);border:1px solid var(--cv-hair)
}
.cv-lane__pin p:last-of-type{font-size:14.5px;line-height:1.65;color:var(--cv-txt);margin:0}
.cv-lane__pin .cv-kick{margin-bottom:8px}

/* The triple trigger: a real stepped control, not a static list. */
.cv-trip{margin:18px 0}
.cv-trip__tabs{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.cv-trip__tab{
  display:inline-flex;align-items:center;gap:9px;min-height:44px;
  padding:0 14px;border-radius:10px;box-sizing:border-box;cursor:pointer;
  background:rgba(6,8,12,.55);border:1px solid var(--cv-hair);
  font-family:var(--cv-disp);font-size:14px;font-weight:600;color:var(--cv-mute);
  transition:background-color .25s var(--cv-ez),border-color .25s var(--cv-ez),color .25s var(--cv-ez)
}
.cv-trip__tab:hover{color:var(--cv-ink);border-color:rgba(45,212,191,.35)}
.cv-trip__tab[aria-selected="true"]{color:#fff;background:rgba(45,212,191,.12);border-color:rgba(45,212,191,.5)}
.cv-trip__n{
  flex:0 0 auto;width:24px;height:24px;border-radius:7px;
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--cv-mono);font-size:12px;font-weight:600;
  background:rgba(45,212,191,.14);color:var(--cv-teal);border:1px solid rgba(45,212,191,.3)
}
.cv-trip__tab[aria-selected="true"] .cv-trip__n{background:var(--cv-teal);color:#04070b;border-color:var(--cv-teal)}
.cv-trip__panels{position:relative}
.cv-trip__p{
  padding:16px 18px;border-radius:12px;box-sizing:border-box;
  background:rgba(6,8,12,.55);border:1px solid rgba(45,212,191,.28);
  font-size:14.8px;line-height:1.68;color:var(--cv-txt)
}
.cv-trip__p[hidden]{display:none}
.cv-trip__p p{margin:0}
.cv-trip__p:focus-visible{outline:2px solid var(--cv-cyan);outline-offset:2px}
.cv-lane__kicker{
  font-family:var(--cv-disp);font-size:16.5px;font-weight:700;color:#fff;line-height:1.45;
  margin:0 0 18px;padding:14px 0;border-top:1px solid var(--cv-hair);border-bottom:1px solid var(--cv-hair)
}

/* ---- 15. Economics ------------------------------------------------------- */
.cv-stamp{
  display:inline-block;margin-top:14px;
  font-family:var(--cv-mono);font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;
  color:var(--cv-warn);background:rgba(242,193,78,.09);border:1px solid rgba(242,193,78,.32);
  padding:7px 13px;border-radius:999px
}
.cv-econ{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:14px;margin:0 0 26px;align-items:stretch}
.cv-econ__cell{display:flex;flex-direction:column;padding:24px 22px;border-radius:14px;box-sizing:border-box;background:var(--cv-plate);border:1px solid var(--cv-hair);transition:transform .35s var(--cv-ez)}
.cv-econ__cell:hover{transform:translateY(-3px)}
.cv-econ__n{
  font-weight:700;
  font-size:clamp(24px,3.2vw,34px);color:var(--cv-teal);margin:0 0 10px;line-height:1.15;overflow-wrap:anywhere
}
.cv-econ__l{font-size:14px;line-height:1.6;color:var(--cv-txt);margin:0}
.cv-honest{
  margin:clamp(26px,3.5vw,38px) 0 0;padding:clamp(22px,3vw,30px);border-radius:16px;box-sizing:border-box;
  background:linear-gradient(160deg,rgba(242,193,78,.07),rgba(6,8,12,0) 60%),var(--cv-panel);
  border:1px solid rgba(242,193,78,.3)
}
.cv-honest .cv-h3{color:var(--cv-warn)}
.cv-honest p{font-size:15.2px;line-height:1.72;color:var(--cv-txt);max-width:80ch}

/* ---- 16. ICPs ------------------------------------------------------------ */
.cv-icps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,270px),1fr));gap:14px;align-items:stretch}
.cv-icp{
  position:relative;display:flex;flex-direction:column;
  padding:22px 20px;border-radius:14px;box-sizing:border-box;
  background:var(--cv-plate);border:1px solid var(--cv-hair);
  transition:transform .35s var(--cv-ez),border-color .35s var(--cv-ez)
}
.cv-icp:hover{transform:translateY(-3px);border-color:rgba(34,211,238,.3)}
.cv-icp--ch{border-color:rgba(45,212,191,.36);background:linear-gradient(160deg,rgba(45,212,191,.08),rgba(6,8,12,0) 60%),var(--cv-plate)}
.cv-icp__n{
  position:absolute;top:18px;right:18px;
  font-family:var(--cv-mono);font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--cv-cyan);opacity:.6
}
.cv-icp--ch .cv-icp__n{color:var(--cv-teal);opacity:.9}
.cv-icp h3{font-size:17px;margin:0 0 8px;color:#fff;padding-right:34px}
.cv-icp p{font-size:14px;line-height:1.6;color:var(--cv-mute);margin:0}

/* ---- 17. Final CTA ------------------------------------------------------- */
.cv-final{max-width:760px;margin:0 auto}
.cv-final__b{font-size:clamp(16px,1.8vw,18.5px);line-height:1.65;color:var(--cv-txt);margin:18px auto 0;max-width:60ch}

/* ---- 18. Sources --------------------------------------------------------- */
.cv-srclist{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.cv-srclist li{
  display:flex;gap:14px;align-items:flex-start;
  padding:18px 20px;border-radius:12px;box-sizing:border-box;
  background:var(--cv-plate);border:1px solid var(--cv-hair);
  font-size:14px;line-height:1.68;color:var(--cv-txt);
  scroll-margin-top:90px
}
.cv-srclist li:target{border-color:var(--cv-cyan);background:linear-gradient(90deg,rgba(34,211,238,.09),rgba(6,8,12,0))}
.cv-srclist__n{
  flex:0 0 auto;width:28px;height:28px;border-radius:8px;
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--cv-mono);font-size:12.5px;font-weight:600;
  background:rgba(34,211,238,.12);color:var(--cv-cyan);border:1px solid rgba(34,211,238,.28)
}
.cv-srclist strong{color:#fff}
.cv-srclist a{display:inline-block;min-height:26px;padding:4px 0}

/* ---- 19. Footer ---------------------------------------------------------- */
/* Explicit columns, not auto-fit: brand-lockup.js swaps the <img> for a painted
   .rbl lockup ~285px wide, which blew a 249px auto-fit cell and overlapped the
   next column by 8px. */
.cv-foot{background:#04060a;border-top:1px solid var(--cv-line);padding:clamp(40px,5vw,60px) 0 34px}
.cv-foot__grid{display:grid;grid-template-columns:minmax(300px,1.5fr) repeat(3,minmax(140px,1fr));gap:28px}
@media(max-width:860px){.cv-foot__grid{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.cv-foot__grid{grid-template-columns:1fr}}
.cv-foot__brand p{font-size:13.5px;line-height:1.6;color:#93a1b1;max-width:38ch;margin:18px 0 0}
.cv-foot__logo{display:block;max-width:100%}
.cv-foot__logo img,.cv-foot__logo .rbl{max-width:100%;height:auto;display:block}
.cv-foot__logo img{height:26px;width:auto}
.cv-foot__col{display:flex;flex-direction:column;gap:2px;align-items:flex-start}
.cv-foot__col h2{
  font-family:var(--cv-mono);font-size:12px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;
  color:#93a1b1;margin:0 0 6px
}
/* 44px min tap target: these are real navigation on a phone. */
.cv-foot__col a{font-size:13.5px;color:rgba(219,229,241,.86);min-height:44px;min-width:44px;display:inline-flex;align-items:center}
.cv-foot__col a:hover{color:#2dd4bf;text-decoration:none}
.cv-foot__legal{
  font-size:12px;line-height:1.7;color:#8b98a8;margin:32px 0 0;padding-top:20px;
  border-top:1px solid #1c2530
}

/* ---- 20. The injected mobile nav sheet ----------------------------------- */
/* th-nav-shared.js paints a LIGHT drawer. On a #06080c page the entire mobile
   navigation experience was white. Overridden from this lane's own file, scoped
   under .cv-html so it cannot touch another page. Flagged to the nav lane. */
.cv-html .th-sheet,
.cv-html .th-sheet__body,
.cv-html .th-sheet__in,
.cv-html .th-sheet__panel{background:#0b0f16 !important;color:#F2F6FA !important}
.cv-html .th-sheet a,
.cv-html .th-sheet button,
.cv-html .th-sheet h2,.cv-html .th-sheet h3,.cv-html .th-sheet h4,.cv-html .th-sheet h5,
.cv-html .th-sheet p,.cv-html .th-sheet span,.cv-html .th-sheet li{color:#F2F6FA}
.cv-html .th-sheet a:hover{color:#22d3ee}
.cv-html .th-sheet [class*="lab"],
.cv-html .th-sheet [class*="mute"],
.cv-html .th-sheet [class*="sub"]{color:#93a1b1}
.cv-html .th-sheet [class*="divider"],
.cv-html .th-sheet li,
.cv-html .th-sheet section,
.cv-html .th-sheet__x{border-color:rgba(151,187,222,.16)}
.cv-html .th-sheet__x{color:#F2F6FA;min-width:44px;min-height:44px}

/* ---- 21. Reveal engine (fail-safe: visible unless JS says otherwise) ------ */
[data-cv-reveal]{transition:opacity .62s var(--cv-ez),transform .62s var(--cv-ez);will-change:opacity,transform}
.cv-html.cv-rvl [data-cv-reveal]{opacity:0;transform:translateY(18px)}
.cv-html.cv-rvl [data-cv-reveal].cv-in{opacity:1;transform:none}
/* Release the compositor layer the moment the element has landed. 64 permanently
   promoted layers on a 15,000px page is real memory on a mid-range phone. */
.cv-html.cv-rvl [data-cv-reveal].cv-in{will-change:auto}

/* ---- 22. Reduced motion: everything lands, nothing moves ----------------- */
@media(prefers-reduced-motion:reduce){
  .cv-html{scroll-behavior:auto}
  .cv-html.cv-rvl [data-cv-reveal]{opacity:1;transform:none}
  [data-cv-reveal]{transition:none;will-change:auto}
  .cv-hero__ring--a,.cv-hero__ring--b,.cv-eyebrow__dot{animation:none}
  .cv-tl__fill{transform:scaleY(1);transition:none}
  .cv-reg__s{text-decoration-color:rgba(248,113,113,.85);transition:none}
  .cv-cov::before{transform:scaleX(1);transition:none}
  .cv-cov__t-i,.cv-cov__t-i::after{transition:none}
  .cv-dock{transition:none}
  .cv-dock.cv-dock--on{opacity:1;transform:none}
  .cv-btn,.cv-cov,.cv-stat,.cv-icp,.cv-free-card,.cv-anlg__c,.cv-econ__cell,.cv-reg__col,.cv-hero__act,.cv-trip__tab,.cv-index a,.cv-tl__node{transition:none}
  .cv-btn:hover,.cv-cov:hover,.cv-stat:hover,.cv-icp:hover,.cv-free-card:hover,.cv-anlg__c:hover,.cv-econ__cell:hover,.cv-reg__col:hover,.cv-hero__act:hover,.cv-index a:hover{transform:none}
}

/* ---- 23. Narrow-width hardening (320px floor) ---------------------------- */
/* HARD 12px type floor on a phone. The eyebrow was 10px and the legally
   load-bearing "Modeled, not guaranteed" stamp was 11px. */
@media(max-width:640px){
  .cv-eyebrow,.cv-kick,.cv-kick--sm,.cv-hero__act-n,.cv-reg__lab,.cv-lane__tag,
  .cv-cov__k,.cv-cov__n,.cv-cov__note,.cv-cite,.cv-stat__s,.cv-st,.cv-free-card__tag,
  .cv-tbl thead th,.cv-tbl tbody td::before,.cv-example cite,.cv-quote cite,
  .cv-foot__col h2,.cv-srclist__n,.cv-trip__n,.cv-index a{font-size:12px;letter-spacing:.1em}
  .cv-stamp{font-size:12.5px;letter-spacing:.1em}
  .cv-tbl__cap,.cv-foot__legal,.cv-fine{font-size:12.5px;letter-spacing:normal}
  .cv-cite,.cv-stat__s,.cv-cov__note,.cv-example cite,.cv-quote cite,.cv-srclist__n,.cv-trip__n{letter-spacing:.02em}
  .cv-eyebrow__long{display:none}
  .cv-eyebrow__short{display:inline}
  /* The pill wraps to two lines under ~420px, and it was fragmenting into
     "THE / COVENANT   · OUR BUSINESS MODEL, / IN FULL" with a dead column
     between the two halves. The cause was NOT the dot alignment: it is that
     inline-flex promotes the bare "The Covenant" text node to its own anonymous
     FLEX ITEM, so it wrapped inside itself while the label span sat beside it.
     Flex cannot reflow a phrase; only inline layout can. So drop out of flex at
     this width and let the whole label flow as one continuous inline run. */
  .cv-eyebrow{display:inline-block;gap:0}
  .cv-eyebrow__dot{display:inline-block;vertical-align:middle;margin:0 8px 2px 0}
  /* Full-bleed the table out of the card padding: buys back 78px of column. */
  .cv-reg-panel .cv-tblwrap,.cv-reg-panel .cv-tbl__cap{
    margin-left:calc(-1 * clamp(20px,3vw,32px));
    margin-right:calc(-1 * clamp(20px,3vw,32px));
    width:auto;border-radius:0;border-left:0;border-right:0
  }
}
@media(max-width:400px){
  .cv-wrap{padding:0 16px}
  .cv-eyebrow{letter-spacing:.05em;padding:6px 11px}
  .cv-tl{padding-left:26px}
  .cv-tl__node{left:-26px;width:13px;height:13px}
  .cv-tl__rail{left:5px}
  .cv-btn{width:100%}
  .cv-cta-row{flex-direction:column}
  .cv-srclist li{flex-direction:column;gap:10px}
  .cv-trip__tab{width:100%}
  .cv-index a{width:100%}
}
