/* ds-v2.css — Carousel v2 type + spacing tokens. Loaded LAST on every v2 page (just before </body>) so it wins.
   Change a value here, not in page <style> blocks. See docs/DS-V2.md. */
:root{
  /* type */
  --ds-h1:clamp(46px,5.6vw,80px);   --ds-h1-lh:1;    --ds-h1-ls:-.025em;
  --ds-h2:clamp(34px,3.4vw,56px);   --ds-h2-lh:1.04; --ds-h2-ls:-.025em;
  --ds-lede:clamp(19px,1.7vw,24px); --ds-lede-lh:1.35;
  --ds-sub:clamp(16px,1.25vw,19px); --ds-sub-lh:1.45;
  --ds-body:17px;                   --ds-body-lh:1.55;
  --ds-eyebrow:12px;                --ds-eyebrow-ls:.16em;
  /* vertical rhythm (4px base) */
  --ds-eyebrow-gap:14px;  /* eyebrow → heading */
  --ds-h2-sub:16px;       /* heading → subtitle */
  --ds-h1-lede:20px;      /* h1 → lede */
  --ds-sub-next:24px;     /* subtitle → CTAs / next item in the same header */
  --ds-head-body:clamp(32px,4vw,56px); /* section header → section content */
  --ds-sec-pad:clamp(72px,8vw,120px);  /* between sections */
}
/* :not(#ds-…) chains lift specificity above page #id rules. */
/* Section heading scale (display headlines like the closing CTA are exempt) */
html body main h2:not(.fin2-h):not(.sw-h):not(.cb-h):not(.bp2-h):not(#ds-a):not(#ds-b):not(#ds-c),
html body section h2:not(.fin2-h):not(.sw-h):not(.cb-h):not(.bp2-h):not(#ds-a):not(#ds-b):not(#ds-c){
  font-size:var(--ds-h2)!important;line-height:var(--ds-h2-lh)!important;letter-spacing:var(--ds-h2-ls)!important;margin-bottom:0!important;text-wrap:balance}
/* Heading → subtitle: one gap everywhere */
html body h2:not(.fin2-h):not(.sw-h):not(.cb-h):not(.bp2-h):not(#ds-a):not(#ds-b):not(#ds-c) + p:not(#ds-a):not(#ds-b):not(#ds-c){
  margin-top:var(--ds-h2-sub)!important;margin-bottom:0!important;
  font-size:var(--ds-sub)!important;line-height:var(--ds-sub-lh)!important;text-wrap:pretty}
/* Header blocks with CTAs etc. below: zero the gap, then space what follows the subtitle */
html body :is(div,header,hgroup):not(.bp2-body):has(> h2 + p + *){row-gap:0!important}
html body :is(div,header,hgroup):not(.bp2-body):has(> h2 + p + *) > h2 + p ~ *{margin-top:var(--ds-sub-next,24px)!important}
html body :is(div,header,hgroup):not(.bp2-body):has(> h2 + p + *) > h2 + p ~ * ~ *{margin-top:var(--ds-sub-next,24px)!important}
/* Header blocks that are just [eyebrow] + h2 + p: drop the flex/grid gap so the margin above is the only spacing */
html body :is(div,header,hgroup):not(.bp2-body):has(> h2 + p:last-child):not(:has(> :nth-child(4))){row-gap:0!important}
/* Eyebrow → heading */
html body :is(p,span)[class$="-k"] + :is(h1,h2),html body :is(p,span)[class*="eyebrow"] + :is(h1,h2),html body .kx-eb + :is(h1,h2,h3){margin-top:var(--ds-eyebrow-gap)!important}
/* Hero h1 → lede */
html body h1 + p{margin-top:var(--ds-h1-lede)!important}
