/* Expert On SEO — design system. :root tokens are overwritten at runtime
   by the Brand settings panel (see class-eos-tokens.php). */
/* ═══════════════════════════════════════════════════════════
   1 · TOKENS — written by the ACF "Brand" panel. Change a hex
   in wp-admin and the site, charts and tools all re-skin.
   ═══════════════════════════════════════════════════════════ */
:root{--i50:#F6F4FF; --i100:#EDE9FE; --i200:#DDD6FE; --i300:#C4B5FD;
  --i400:#A78BFA; --i500:#8B5CF6; --i600:#7C3AED; --i700:#6D28D9; --i900:#4C1D95;
  --a50:#FFFBEB; --a100:#FEF3C7; --a400:#FBBF24; --a500:#F59E0B; --a700:#B45309;
  --e50:#ECFDF5; --e500:#10B981; --e700:#047857;
  --r50:#FEF2F2; --r500:#EF4444; --r700:#B91C1C;
  --bg:#FFFFFF; --bg2:#FAFAFB; --ink:#0F172A; --body:#475569;
  --muted:#94A3B8; --line:#E2E8F0;

  --display:'Manrope',system-ui,-apple-system,sans-serif;
  --text:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
  --mono:'JetBrains Mono',ui-monospace,'SF Mono',monospace;

  --r:14px; --r-sm:10px; --r-lg:20px;
  --sh:0 1px 2px rgba(15,23,42,.04),0 6px 18px -10px rgba(15,23,42,.10);
  --sh-lg:0 1px 2px rgba(15,23,42,.04),0 22px 46px -24px rgba(76,29,149,.22);
  --sh-glow:0 0 0 1px var(--i200),0 18px 44px -20px rgba(124,58,237,.35);
  --wrap:1240px;
  --sp:clamp(66px,8vw,116px);
  --ease:cubic-bezier(.22,.68,.28,1);
  --gutter:clamp(20px,5vw,64px);
  --sbw:0px;
  --t-fast:.18s; --t:.26s; --t-slow:.42s;}

/* ═══════════ 2 · BASE ═══════════ */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--body);font-family:var(--text);
  font-size:clamp(16px,.42vw + 15px,18.5px);line-height:1.68;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;text-rendering:optimizeLegibility}
h1,h2,h3,h4{font-family:var(--display);color:var(--ink);margin:0;line-height:1.08;letter-spacing:-.022em;font-weight:800}
h1{font-size:clamp(2.35rem,5.1vw,4.05rem)}
h3{font-weight:700;letter-spacing:-.012em}
p{margin:0 0 1.1rem}
a{color:var(--i600);text-decoration:none}
a:hover{color:var(--i700)}
img,svg{max-width:100%;display:block}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}
:focus-visible{outline:3px solid var(--i500);outline-offset:3px;border-radius:4px}
.wrap{max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gutter,24px)}
.sect{padding-block:var(--sp)}
.bg-alt{background:var(--bg2)}
.bg-iris{background:var(--i50)}
.skip{position:absolute;left:-9999px;background:var(--i600);color:#fff;padding:12px 20px;z-index:999}
.skip:focus{left:0;color:#fff}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

.eyebrow{font-family:var(--mono);font-size:.68rem;font-weight:500;letter-spacing:.14em;
  text-transform:uppercase;color:var(--a700);margin:0 0 18px;display:flex;align-items:center;gap:10px}
.eyebrow::before{content:"";width:22px;height:2px;background:var(--a500);flex:none}
.lede{font-size:clamp(1.05rem,1.5vw,1.19rem)}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.sect-head{max-width:66ch;margin-bottom:52px}
.sect-head.mid .eyebrow{justify-content:center}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:14px 26px;
  border-radius:var(--r-sm);font-weight:600;font-size:.96rem;white-space:nowrap;
  transition:transform .18s var(--ease),background .18s,box-shadow .18s,border-color .18s}
.btn .arw{transition:transform .22s var(--ease)}
.btn:hover .arw{transform:translateX(4px)}
.btn-p{background:var(--i600);color:#fff;box-shadow:0 6px 18px -8px rgba(124,58,237,.75)}
.btn-p:hover{background:var(--i700);color:#fff;transform:translateY(-2px);box-shadow:0 12px 26px -10px rgba(124,58,237,.75)}
.btn-s{background:#fff;color:var(--ink);border:1.5px solid var(--line)}
.btn-s:hover{border-color:var(--i300);background:var(--i50);color:var(--ink);transform:translateY(-2px)}
.btn-g{background:var(--i100);color:var(--i700)}
.btn-g:hover{background:var(--i200);color:var(--i900)}
.btn[disabled]{opacity:.45;pointer-events:none}

/* ═══════════ 3 · SIGNATURE: "The Climb" ═══════════ */
.climb{display:block;width:100%;height:40px;overflow:visible}
.climb path{fill:none;stroke:var(--i200);stroke-width:1.5;stroke-linecap:square}

/* scroll progress */
.prog{position:fixed;top:0;left:0;height:2px;background:linear-gradient(90deg,var(--i500),var(--a400));
  z-index:200;width:0;transition:width .08s linear}

/* reveal — applied only when JS runs, so no-JS keeps content visible */
.js .rv{opacity:0;transform:translateY(20px);transition:opacity .62s var(--ease),transform .62s var(--ease)}

/* ═══════════ 4 · ANNOUNCE + HEADER ═══════════ */
.announce{background:var(--i900);color:#EDE9FE;font-size:.83rem;text-align:center;padding:9px 44px 9px 20px;position:relative}
.announce a{color:#fff;text-decoration:underline;text-underline-offset:3px}
.announce b{font-family:var(--mono);font-weight:500;color:var(--a400)}
.announce-x{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:#A78BFA;font-size:1.1rem;padding:6px 9px;border-radius:6px;line-height:1}
.announce-x:hover{background:rgba(255,255,255,.12);color:#fff}

.hdr{position:sticky;top:0;z-index:120;background:rgba(255,255,255,.94);backdrop-filter:blur(14px);
  border-bottom:1px solid transparent;transition:border-color .2s,box-shadow .2s}
.hdr.stuck{border-bottom-color:var(--line);box-shadow:0 4px 22px -16px rgba(15,23,42,.5)}
.hdr-in{display:flex;align-items:center;height:70px;max-width:var(--wrap);margin-inline:auto;padding-inline:24px}
.logo{display:flex;align-items:center;font-family:var(--display);font-weight:800;color:var(--ink);letter-spacing:-.03em}
.logo:hover{color:var(--ink)}
.logo-mk{flex:none}
.nav{display:flex;align-items:center}
.nav-i{position:relative}
.nav-b{display:flex;align-items:center;gap:5px;padding:9px 13px;border-radius:8px;font-size:.93rem;font-weight:500;color:var(--ink);transition:background .15s}
.nav-b:hover{background:var(--i50);color:var(--i700)}
.nav-b svg{width:11px;height:11px;transition:transform .2s;opacity:.55}
.nav-i:hover .nav-b svg,.nav-i:focus-within .nav-b svg{transform:rotate(180deg)}
.mega{position:absolute;top:calc(100% + 12px);left:50%;transform:translateX(-50%) translateY(-8px);
  background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-lg);
  padding:26px;display:grid;gap:30px;opacity:0;visibility:hidden;transition:opacity .18s,transform .18s,visibility .18s}
.nav-i:hover .mega,.nav-i:focus-within .mega{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
.mega-3{grid-template-columns:repeat(3,minmax(190px,1fr));width:min(760px,88vw)}
.mega-2{grid-template-columns:repeat(2,minmax(200px,1fr));width:min(560px,88vw)}
.mega h4{font-family:var(--mono);font-size:.64rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:13px}
.mega ul{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.mega li a{display:block;padding:8px 11px;border-radius:8px;font-size:.9rem;color:var(--body);font-weight:500}
.mega li a:hover{background:var(--i50);color:var(--i700)}
.mega-feat{background:var(--i50);border-radius:var(--r);padding:20px;margin:-6px}
.mega-feat a{display:block;padding:11px;border-radius:9px;font-size:.88rem;font-weight:600;color:var(--i700);line-height:1.4}
.mega-feat a:hover{background:#fff}
.mega-feat .tag{font-family:var(--mono);font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--a700);display:block;margin-bottom:3px;font-weight:500}
.hdr-cta{display:flex;align-items:center}
.burger{display:none;width:42px;height:42px;align-items:center;justify-content:center;border-radius:9px;border:1.5px solid var(--line)}

/* mobile drawer */
.drawer{position:fixed;inset:0;z-index:130;background:#fff;transform:translateY(-100%);
  transition:transform .34s var(--ease);overflow-y:auto;padding-bottom:40px;visibility:hidden}
.drawer.open{transform:none;visibility:visible}
.drawer-top{display:flex;align-items:center;justify-content:space-between;height:70px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff}
.drawer details{border-bottom:1px solid var(--line)}
.drawer summary{list-style:none;cursor:pointer;font-family:var(--display);font-weight:700;font-size:1.16rem;color:var(--ink);display:flex;justify-content:space-between;align-items:center}
.drawer summary::-webkit-details-marker{display:none}
.drawer summary::after{content:"+";font-family:var(--mono);color:var(--i500);font-size:1.3rem;font-weight:400}
.drawer details[open] summary::after{content:"–"}
.drawer details ul{list-style:none;margin:0;padding:0 0 16px;display:grid;gap:4px}
.drawer details ul a{color:var(--body);font-size:.98rem}
.drawer > nav > a{border-bottom:1px solid var(--line);font-family:var(--display);font-weight:700;font-size:1.16rem;color:var(--ink)}
.drawer-cta{display:grid;gap:10px}

/* ═══════════ 5 · HERO ═══════════ */
.hero{padding-block:clamp(54px,7vw,92px) clamp(48px,6vw,76px);position:relative;overflow:hidden}
.hero::before{content:"";position:absolute;inset:0;z-index:-2;
  background-image:radial-gradient(circle at 1px 1px,var(--i200) 1px,transparent 0);
  background-size:26px 26px;opacity:.5;
  mask-image:radial-gradient(ellipse 70% 60% at 72% 32%,#000 20%,transparent 72%);
  -webkit-mask-image:radial-gradient(ellipse 70% 60% at 72% 32%,#000 20%,transparent 72%)}
.hero::after{content:"";position:absolute;top:-190px;right:-200px;width:660px;height:660px;border-radius:50%;
  background:radial-gradient(circle,rgba(237,233,254,.9) 0%,rgba(246,244,255,0) 68%);z-index:-1}
.hero-grid{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:clamp(36px,5vw,64px);align-items:center}
.hero h1{margin-bottom:22px}
.hero h1 .fig{font-family:var(--mono);font-weight:700;letter-spacing:-.05em;font-size:.9em;
  background:linear-gradient(96deg,var(--i600),var(--i400));-webkit-background-clip:text;background-clip:text;color:transparent}
.hero .lede{margin-bottom:30px;font-size:clamp(1.06rem,1.4vw,1.16rem)}
.hero-btns{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:26px}
.hero-trust{display:flex;flex-wrap:wrap;gap:9px 22px;font-size:.83rem;color:var(--muted);align-items:center}
.hero-trust span{display:flex;align-items:center;gap:7px}
.hero-trust svg{width:14px;height:14px;color:var(--e500);flex:none}

.chart-card{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:24px;box-shadow:var(--sh-lg);position:relative}
.chart-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:6px;flex-wrap:wrap}
.chart-label{font-family:var(--mono);font-size:.66rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);font-weight:500}
.chart-title{font-family:var(--display);font-weight:700;font-size:1.02rem;color:var(--ink);margin-top:3px;letter-spacing:-.01em}
.chart-delta{text-align:right}
.chart-delta .big{font-family:var(--mono);font-size:1.5rem;font-weight:700;color:var(--e700);letter-spacing:-.04em;display:block;line-height:1.1}
.chart-delta .sm{font-family:var(--mono);font-size:.68rem;color:var(--muted)}
#chart{width:100%;height:auto;overflow:visible}
.ln{fill:none;stroke:var(--i600);stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round}
.grid-l{stroke:var(--line);stroke-width:1}
.ax{font-family:var(--mono);font-size:10px;fill:var(--muted)}
.mk-dot{fill:#fff;stroke:var(--i600);stroke-width:2.5}
.mk-num{font-family:var(--mono);font-size:9px;font-weight:700;fill:var(--i700);text-anchor:middle}
.mk-halo{fill:var(--i100)}
.mk{cursor:default}
.chart-key{display:grid;gap:7px;margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}
.chart-key div{display:flex;gap:11px;align-items:baseline;font-size:.8rem;color:var(--body)}
.chart-key b{font-family:var(--mono);font-size:.66rem;font-weight:700;color:var(--i700);background:var(--i100);
  width:19px;height:19px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex:none;transform:translateY(3px)}
.chart-key em{font-family:var(--mono);font-style:normal;color:var(--muted);font-size:.74rem;flex:none}
.chart-note{font-size:.74rem;color:var(--muted);margin:14px 0 0;line-height:1.5}

/* ═══════════ 6 · MARQUEE ═══════════ */
.marq{border-block:1px solid var(--line);padding-block:26px;overflow:hidden;position:relative;background:#fff}
.marq::before,.marq::after{content:"";position:absolute;top:0;bottom:0;width:110px;z-index:2;pointer-events:none}
.marq::before{left:0;background:linear-gradient(90deg,#fff,transparent)}
.marq::after{right:0;background:linear-gradient(270deg,#fff,transparent)}
.marq-lbl{font-family:var(--mono);font-size:.62rem;letter-spacing:.15em;text-transform:uppercase;color:var(--muted);text-align:center;margin-bottom:20px}
.marq-track{display:flex;gap:56px;width:max-content;animation:slide 42s linear infinite}
.marq:hover .marq-track{animation-play-state:paused}
@keyframes slide{to{transform:translateX(-50%)}}
.marq-item{font-family:var(--display);font-weight:700;font-size:1.06rem;color:var(--muted);white-space:nowrap;
  letter-spacing:-.02em;display:flex;align-items:center;gap:11px;transition:color .2s}
.marq-item:hover{color:var(--ink)}
.marq-item i{width:7px;height:7px;border-radius:50%;background:var(--i300);flex:none;font-style:normal}

/* ═══════════ 7 · PROOF ═══════════ */
.proof{border-bottom:1px solid var(--line);background:var(--bg2)}
.proof-in{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line)}
.proof-c{background:var(--bg2);padding:34px 22px;text-align:center}
.proof-c .v{font-family:var(--mono);font-size:clamp(1.5rem,2.6vw,2.05rem);font-weight:700;color:var(--ink);letter-spacing:-.045em;display:block;line-height:1}
.proof-c .k{font-size:.79rem;color:var(--muted);margin-top:9px;display:block}
.proof-c .spark{margin:11px auto 0;width:62px;height:17px}
.proof-c .spark path{fill:none;stroke:var(--e500);stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}

/* ═══════════ 8 · SERVICE TABS ═══════════ */
.tabs{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:34px;border-bottom:1px solid var(--line);padding-bottom:16px}
.tab{padding:10px 17px;border-radius:99px;font-size:.9rem;font-weight:600;color:var(--body);transition:all .16s;border:1.5px solid transparent}
.tab:hover{background:var(--i50);color:var(--i700)}
.tab[aria-selected="true"]{background:var(--i600);color:#fff}
.panel{display:none}
.panel.on{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(32px,5vw,60px);align-items:start;animation:fade .34s var(--ease)}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.panel h3{margin-bottom:14px;font-size:clamp(1.4rem,2.2vw,1.85rem);font-weight:800}
.capsule{background:var(--i50);border-left:3px solid var(--i400);padding:16px 20px;border-radius:0 var(--r-sm) var(--r-sm) 0;margin-bottom:22px;font-size:.97rem;color:var(--ink)}
.deliver{list-style:none;padding:0;margin:0 0 26px;display:grid;gap:11px}
.deliver li{display:flex;gap:11px;font-size:.94rem;align-items:flex-start}
.deliver svg{width:17px;height:17px;color:var(--i500);flex:none;margin-top:4px}
.panel-aside{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:24px;box-shadow:var(--sh)}
.panel-aside .chip2{font-family:var(--mono);font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;color:var(--a700);background:var(--a50);padding:5px 10px;border-radius:99px;display:inline-block;margin-bottom:14px;font-weight:500}
.panel-aside h4{font-family:var(--display);font-size:1.04rem;color:var(--ink);margin-bottom:9px;font-weight:700}
.panel-aside p{font-size:.89rem;margin-bottom:16px}
.mini-stat{display:flex;gap:22px;padding-top:16px;border-top:1px solid var(--line)}
.mini-stat span{display:block}
.mini-stat .mv{font-family:var(--mono);font-size:1.16rem;font-weight:700;color:var(--e700);letter-spacing:-.03em}
.mini-stat .mk{font-size:.74rem;color:var(--muted)}

/* ═══════════ 9 · FLAGSHIP BAND ═══════════ */
.flag{background:var(--ink);color:#CBD5E1;border-radius:var(--r-lg);padding:clamp(30px,4.4vw,56px);
  display:grid;grid-template-columns:1.25fr .75fr;gap:clamp(28px,4vw,50px);align-items:center;position:relative;overflow:hidden}
.flag::before{content:"";position:absolute;top:-120px;left:-90px;width:420px;height:420px;border-radius:50%;
  background:radial-gradient(circle,rgba(124,58,237,.32),transparent 66%)}
.flag > *{position:relative}
.flag h2{color:#fff;margin-bottom:16px;font-size:clamp(1.7rem,3vw,2.4rem)}
.flag p{color:#94A3B8;font-size:.99rem}
.flag .eyebrow{color:var(--a400)}
.flag .eyebrow::before{background:var(--a400)}
.flag-stats{display:grid;gap:16px}
.flag-s{background:rgba(255,255,255,.055);border:1px solid rgba(255,255,255,.1);border-radius:var(--r);padding:19px;transition:background .2s,border-color .2s}
.flag-s:hover{background:rgba(255,255,255,.09);border-color:rgba(167,139,250,.4)}
.flag-s .v{font-family:var(--mono);font-size:1.35rem;font-weight:700;color:#fff;letter-spacing:-.04em;display:block;line-height:1.15}
.flag-s .v i{font-style:normal;color:var(--e500)}
.flag-s .k{font-size:.77rem;color:#94A3B8;margin-top:5px;display:block}
.flag .btn-p{background:#fff;color:var(--ink);box-shadow:none}
.flag .btn-p:hover{background:var(--i100);color:var(--i900)}

/* ═══════════ 10 · GBP RISK CHECKER ═══════════ */
.tool{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-lg);overflow:hidden;
  display:grid;grid-template-columns:1.1fr .9fr}
.tool-q{padding:clamp(26px,3.4vw,40px);border-right:1px solid var(--line)}
.tool-r{padding:clamp(26px,3.4vw,40px);background:linear-gradient(170deg,var(--i50),#fff 60%);display:flex;flex-direction:column}
.q{margin-bottom:24px}
.q > p{font-size:.9rem;font-weight:600;color:var(--ink);margin-bottom:10px;display:flex;gap:9px;align-items:baseline}
.q > p b{font-family:var(--mono);font-size:.68rem;color:var(--i500);font-weight:700;flex:none}
.opts{display:flex;flex-wrap:wrap;gap:7px}
.opt{padding:9px 14px;border-radius:99px;border:1.5px solid var(--line);font-size:.83rem;font-weight:500;
  color:var(--body);background:#fff;transition:all .15s}
.opt:hover{border-color:var(--i300);color:var(--i700)}
.opt[aria-pressed="true"]{background:var(--i600);border-color:var(--i600);color:#fff}
.tool-actions{display:flex;gap:10px;flex-wrap:wrap;padding-top:6px}
.dial{width:168px;height:168px;margin:0 auto 20px;position:relative}
.dial svg{transform:rotate(-90deg)}
.dial .track{fill:none;stroke:var(--i100);stroke-width:13}
.dial .val{fill:none;stroke-width:13;stroke-linecap:round;transition:stroke-dashoffset 1s var(--ease),stroke .5s}
.dial-mid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.dial-mid .n{font-family:var(--mono);font-size:2.3rem;font-weight:700;letter-spacing:-.05em;color:var(--ink);line-height:1}
.dial-mid .l{font-family:var(--mono);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-top:5px}
.band{text-align:center;font-family:var(--display);font-weight:800;font-size:1.3rem;margin-bottom:6px}
.band-sub{text-align:center;font-size:.87rem;margin-bottom:22px}
.finds{list-style:none;margin:0 0 20px;padding:0;display:grid;gap:10px}
.finds li{background:#fff;border:1px solid var(--line);border-left-width:3px;font-size:.85rem}
.finds li b{display:block;color:var(--ink);font-weight:600;margin-bottom:3px;font-size:.88rem}
.finds li.sev-3{border-left-color:var(--r500)}
.finds li.sev-2{border-left-color:var(--a500)}
.finds li.sev-1{border-left-color:var(--i400)}
.finds li.sev-0{border-left-color:var(--e500)}
.tool-empty{margin:auto;text-align:center;color:var(--muted);font-size:.9rem;padding:30px 10px}
.tool-empty svg{width:46px;height:46px;margin:0 auto 16px;color:var(--i300)}
.tool-cta{margin-top:auto;padding-top:20px;border-top:1px solid var(--i200)}
.tool-foot{font-size:.74rem;color:var(--muted);margin-top:14px;line-height:1.55}

/* ═══════════ 11 · CALCULATOR ═══════════ */
.calc{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:#fff;box-shadow:var(--sh-lg)}
.calc-in{padding:clamp(26px,3.4vw,38px);border-right:1px solid var(--line)}
.calc-out{padding:clamp(26px,3.4vw,38px);background:linear-gradient(168deg,var(--i50) 0%,#fff 62%)}
.seg{display:flex;gap:5px;background:var(--bg2);padding:5px;border-radius:11px;margin-bottom:26px}
.seg button{flex:1;padding:9px 6px;border-radius:8px;font-size:.83rem;font-weight:600;color:var(--body);transition:all .16s}
.seg button[aria-pressed="true"]{background:#fff;color:var(--i700);box-shadow:var(--sh)}
.fld{margin-bottom:21px}
.fld label{display:flex;justify-content:space-between;align-items:baseline;font-size:.86rem;font-weight:600;color:var(--ink);margin-bottom:9px;gap:12px}
.fld label output{font-family:var(--mono);font-size:.92rem;color:var(--i700);font-weight:700}
input[type=range]{width:100%;height:5px;border-radius:99px;background:var(--i100);appearance:none;-webkit-appearance:none;outline-offset:6px}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;background:var(--i600);border:3px solid #fff;box-shadow:0 2px 7px rgba(76,29,149,.4);cursor:pointer}
input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:var(--i600);border:3px solid #fff;box-shadow:0 2px 7px rgba(76,29,149,.4);cursor:pointer}
.res{margin-bottom:22px}
.res .k{font-size:.8rem;color:var(--muted);margin-bottom:4px}
.res .v{font-family:var(--mono);font-size:clamp(1.35rem,2.3vw,1.75rem);font-weight:700;color:var(--ink);letter-spacing:-.045em;line-height:1.15}
.res .v em{font-style:normal;color:var(--e700);font-size:.66em;margin-left:9px}
.gate{position:relative;border-top:1px solid var(--i200);padding-top:22px;margin-top:22px}
.gate .v{color:var(--e700);font-size:clamp(1.7rem,3vw,2.3rem)}
.blurred{filter:blur(9px);user-select:none;opacity:.6}
.gate-form{display:flex;gap:8px;margin-top:14px}
.gate-form input[type=email]{flex:1;min-width:0;padding:12px 14px;border:1.5px solid var(--line);border-radius:var(--r-sm);font:inherit;font-size:.9rem;background:#fff}
.gate-form input[type=email]:focus{border-color:var(--i500);outline:none}
.gate-msg{font-size:.77rem;color:var(--muted);margin:10px 0 0}
.calc-foot{font-size:.75rem;color:var(--muted);margin-top:20px;padding-top:16px;border-top:1px solid var(--line);line-height:1.55}

/* ═══════════ 12 · RESULTS WALL ═══════════ */
.filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:32px}
.chip{padding:8px 15px;border-radius:99px;font-size:.85rem;font-weight:600;color:var(--body);background:#fff;border:1.5px solid var(--line);transition:all .16s}
.chip:hover{border-color:var(--i300);color:var(--i700)}
.chip[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:#fff}
.cases{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:20px}
.case{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:24px;display:flex;flex-direction:column;
  transition:transform .24s var(--ease),box-shadow .24s,border-color .24s;animation:fade .4s var(--ease)}
.case:hover{transform:translateY(-5px);box-shadow:var(--sh-glow);border-color:transparent}
.case-top{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:16px}
.case-tag{font-family:var(--mono);font-size:.6rem;letter-spacing:.11em;text-transform:uppercase;color:var(--i700);background:var(--i50);padding:5px 9px;border-radius:99px;font-weight:500}
.case-loc{font-family:var(--mono);font-size:.68rem;color:var(--muted)}
.case h3{font-size:1.06rem;margin-bottom:7px}
.case p{font-size:.87rem;margin-bottom:18px}
.case-metric{margin-top:auto;padding-top:17px;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:flex-end;gap:14px}
.case-metric .mval{font-family:var(--mono);font-size:1.16rem;font-weight:700;color:var(--ink);letter-spacing:-.04em;display:block;line-height:1.15}
.case-metric .mlab{font-size:.73rem;color:var(--muted);display:block;margin-top:3px}
.case-metric .msp{width:72px;height:26px;flex:none}
.case-metric .msp path{fill:none;stroke:var(--e500);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.case-time{font-family:var(--mono);font-size:.68rem;color:var(--muted);margin-top:12px}

/* ═══════════ 13 · PROCESS ═══════════ */
.proc{display:grid;grid-template-columns:repeat(4,1fr);gap:0;position:relative}
.proc::before{content:"";position:absolute;top:19px;left:6%;right:6%;height:1.5px;
  background:repeating-linear-gradient(90deg,var(--i200) 0 7px,transparent 7px 14px)}
.proc-s{position:relative;padding:0 16px}
.proc-n{width:40px;height:40px;border-radius:50%;background:#fff;border:1.5px solid var(--i200);color:var(--i700);
  font-family:var(--mono);font-size:.8rem;font-weight:700;display:flex;align-items:center;justify-content:center;
  margin-bottom:20px;position:relative;z-index:1;transition:all .24s var(--ease)}
.proc-s:hover .proc-n{background:var(--i600);border-color:var(--i600);color:#fff;transform:scale(1.08)}
.proc-s h3{font-size:1.02rem;margin-bottom:9px}
.proc-s p{font-size:.87rem;margin:0}
.proc-s .wk{font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--a700);display:block;margin-bottom:8px}

/* ═══════════ 14 · COMPARISON ═══════════ */
.cmp{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:#fff;box-shadow:var(--sh)}
.cmp table{width:100%;border-collapse:collapse}
.cmp th,.cmp td{padding:17px 22px;text-align:left;font-size:.92rem;border-bottom:1px solid var(--line);vertical-align:top}
.cmp thead th{background:var(--bg2);font-family:var(--mono);font-size:.65rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);font-weight:500}
.cmp thead th:last-child{background:var(--i50);color:var(--i700)}
.cmp td:first-child{font-weight:600;color:var(--ink);width:26%}
.cmp td:last-child{background:var(--i50);color:var(--ink)}
.cmp tbody tr:last-child td{border-bottom:0}
.cmp .x,.cmp .t{font-family:var(--mono);font-weight:700;margin-right:7px}
.cmp .x{color:var(--muted)}
.cmp .t{color:var(--e700)}

/* ═══════════ 15 · TESTIMONIALS ═══════════ */
.quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.quote{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:26px;display:flex;flex-direction:column;
  transition:transform .24s var(--ease),box-shadow .24s}
.quote:hover{transform:translateY(-4px);box-shadow:var(--sh-lg)}
.quote .mark{font-family:var(--display);font-size:2.4rem;line-height:.7;color:var(--i200);margin-bottom:12px}
.quote p{font-size:.94rem;color:var(--ink);margin-bottom:20px}
.quote footer{margin-top:auto;padding-top:16px;border-top:1px solid var(--line);display:flex;align-items:center;gap:12px}
.avat{width:38px;height:38px;border-radius:50%;background:var(--i100);color:var(--i700);display:flex;align-items:center;
  justify-content:center;font-family:var(--mono);font-weight:700;font-size:.8rem;flex:none}
.quote .who{font-weight:600;color:var(--ink);font-size:.87rem;display:block;line-height:1.35}
.quote .role{font-size:.77rem;color:var(--muted)}

/* ═══════════ 16 · GEO + LOCATIONS ═══════════ */
.geo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}
.geo-c{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:26px;position:relative;overflow:hidden;
  transition:transform .24s var(--ease),box-shadow .24s}
.geo-c:hover{transform:translateY(-4px);box-shadow:var(--sh-lg)}
.geo-c::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--i400)}
.geo-c h3{font-size:1.02rem;margin-bottom:10px}
.geo-c p{font-size:.88rem;margin:0}
.geo-c .n{font-family:var(--mono);font-size:.68rem;color:var(--muted);display:block;margin-bottom:12px;font-weight:500}
.loc-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,4vw,56px)}
.loc-col h3{font-size:1.06rem;margin-bottom:8px}
.loc-col > p{font-size:.89rem;margin-bottom:20px}
.loc-list{display:flex;flex-wrap:wrap;gap:8px;list-style:none;padding:0;margin:0}
.loc-list a{display:block;padding:8px 14px;background:#fff;border:1px solid var(--line);border-radius:99px;font-size:.85rem;color:var(--body);font-weight:500;transition:all .16s}
.loc-list a:hover{border-color:var(--i300);background:var(--i50);color:var(--i700);transform:translateY(-2px)}
.loc-list .hq{border-color:var(--i300);background:var(--i50);color:var(--i700)}
.loc-list .hq::before{content:"● ";color:var(--e500);font-size:.7em;vertical-align:middle}

/* ═══════════ 17 · FAQ ═══════════ */
.faq{max-width:820px;margin-inline:auto}
.faq details{border:1px solid var(--line);border-radius:var(--r);margin-bottom:10px;background:#fff;overflow:hidden;transition:border-color .2s,box-shadow .2s}
.faq details[open]{border-color:var(--i200);box-shadow:var(--sh)}
.faq summary{list-style:none;cursor:pointer;padding:20px 24px;font-family:var(--display);font-weight:700;font-size:1.04rem;
  color:var(--ink);display:flex;justify-content:space-between;align-items:center;gap:18px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-family:var(--mono);color:var(--i500);font-size:1.4rem;font-weight:400;flex:none;transition:transform .2s}
.faq details[open] summary::after{content:"–"}
.faq summary:hover{color:var(--i700)}
.faq .ans{padding:0 24px 22px;font-size:.94rem}
.faq .ans p:last-child{margin-bottom:0}
.faq .ans .cap{background:var(--i50);border-left:3px solid var(--i400);padding:13px 17px;border-radius:0 var(--r-sm) var(--r-sm) 0;color:var(--ink);margin-bottom:14px}

/* ═══════════ 18 · CTA + FOOTER ═══════════ */
.cta-band{background:linear-gradient(150deg,var(--i700) 0%,var(--i900) 100%);border-radius:var(--r-lg);
  padding:clamp(36px,5vw,64px);text-align:center;color:#EDE9FE;position:relative;overflow:hidden}
.cta-band::before{content:"";position:absolute;inset:0;
  background-image:radial-gradient(circle at 1px 1px,rgba(255,255,255,.14) 1px,transparent 0);background-size:24px 24px}
.cta-band > *{position:relative}
.cta-band h2{color:#fff;margin-bottom:14px}
.cta-band p{max-width:56ch;margin:0 auto 28px;color:#C4B5FD}
.cta-btns{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}
.cta-band .btn-p{background:#fff;color:var(--i900);box-shadow:none}
.cta-band .btn-p:hover{background:var(--i100);color:var(--i900)}
.cta-band .btn-s{background:transparent;border-color:rgba(255,255,255,.3);color:#fff}
.cta-band .btn-s:hover{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.55);color:#fff}

.ftr{background:var(--ink);color:#94A3B8;padding-block:clamp(52px,6vw,72px) 0;font-size:.88rem;margin-top:var(--sp)}
.ftr-grid{display:grid;grid-template-columns:1.45fr repeat(4,1fr);gap:34px}
.ftr h4{font-family:var(--mono);font-size:.63rem;letter-spacing:.14em;text-transform:uppercase;color:#64748B;margin-bottom:15px;font-weight:500}
.ftr ul{list-style:none;padding:0;margin:0;display:grid;gap:9px}
.ftr a{color:#CBD5E1}
.ftr a:hover{color:#fff}
.ftr-brand .logo{color:#fff;margin-bottom:15px}
.ftr-brand p{font-size:.86rem;color:#94A3B8;max-width:34ch}
.ftr-tel{font-family:var(--mono);color:#fff;font-size:1rem;font-weight:500;display:block;margin-bottom:7px}
.ftr-bot{border-top:1px solid rgba(255,255,255,.09);margin-top:46px;padding-block:24px;display:flex;justify-content:space-between;gap:18px;flex-wrap:wrap;font-size:.8rem;color:#64748B}
.ftr-bot ul{display:flex;gap:20px;list-style:none;margin:0;padding:0}
.cwv{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:.72rem;background:rgba(16,185,129,.12);
  color:#6EE7B7;padding:6px 12px;border-radius:99px;border:1px solid rgba(16,185,129,.22)}
.cwv i{width:6px;height:6px;border-radius:50%;background:var(--e500);display:block;animation:pulse 2.4s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}

.mbar{display:none;position:fixed;bottom:0;left:0;right:0;z-index:110;background:rgba(255,255,255,.96);
  backdrop-filter:blur(14px);border-top:1px solid var(--line);padding:9px 12px calc(9px + env(safe-area-inset-bottom));gap:8px}
.mbar a{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;padding:7px;border-radius:10px;font-size:.68rem;font-weight:600;color:var(--body)}
.mbar a svg{width:19px;height:19px}
.mbar a.pri{background:var(--i600);color:#fff}

/* ═══════════ 19 · RESPONSIVE ═══════════ */
@media (max-width:1040px){.hero-grid,.panel.on,.calc,.flag,.loc-grid,.tool{grid-template-columns:1fr}
  .calc-in,.tool-q{border-right:0;border-bottom:1px solid var(--line)}
  .geo-grid,.quotes{grid-template-columns:1fr 1fr}
  .proc{grid-template-columns:1fr 1fr;gap:34px 0}
  .proc::before{display:none}
  .ftr-grid{grid-template-columns:1.4fr 1fr 1fr}}
@media (max-width:900px){
  .nav{display:none}
  .burger{display:flex}
  .mbar{display:flex}
  body{padding-bottom:74px}
  .proof-in{grid-template-columns:1fr 1fr}
  .cmp{overflow-x:auto}
  .cmp table{min-width:600px}
}
@media (max-width:640px){
  body{font-size:16px}
  .geo-grid,.quotes,.ftr-grid,.proc{grid-template-columns:1fr}
  .hero-btns .btn{flex:1}
  .chart-card,.flag{padding:20px}
  .seg{flex-wrap:wrap}
  .seg button{flex:1 1 45%}
}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto}
  .js .rv{opacity:1;transform:none}
}

/* ═══════════════════════════════════════════════════════════
   20 · SCROLLYTELLING CASE STUDY
   The chart pins; the story scrolls past it. The line extends
   as you read, so the reader watches the number climb while
   learning why it climbed.
   ═══════════════════════════════════════════════════════════ */
.cs-open{padding-block:clamp(48px,6vw,84px) clamp(30px,4vw,48px)}
.cs-open .eyebrow{margin-bottom:22px}
.cs-huge{font-family:var(--mono);font-weight:700;letter-spacing:-.06em;line-height:1;
  font-size:clamp(2.4rem,7vw,5rem);color:var(--ink);margin:0 0 8px;display:flex;flex-wrap:wrap;align-items:baseline;gap:.24em}
.cs-huge i{font-style:normal;color:var(--i400)}
.cs-huge b{font-weight:700;color:var(--e700)}
.cs-sub{font-size:clamp(1.02rem,1.5vw,1.2rem);margin-bottom:32px}
.cs-frame{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);
  border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.cs-frame div{background:#fff;padding:18px 20px}
.cs-frame dt{font-family:var(--mono);font-size:.6rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}
.cs-frame dd{margin:0;font-size:.88rem;color:var(--ink);line-height:1.45}

.cs-prose{max-width:66ch;margin-inline:0}
.cs-prose p{font-size:1.02rem}
.cs-prose ul{padding-left:20px;margin-bottom:1.1rem}
.cs-prose li{margin-bottom:8px;font-size:1.02rem}
.cs-pull{border-left:3px solid var(--i400);background:var(--i50);padding:18px 22px;
  border-radius:0 var(--r-sm) var(--r-sm) 0;margin:26px 0;font-size:1.02rem;color:var(--ink)}
.cs-warn{border-left:3px solid var(--a500);background:var(--a50);padding:18px 22px;
  border-radius:0 var(--r-sm) var(--r-sm) 0;margin:26px 0;font-size:.98rem;color:var(--ink)}

/* the scroll spine */
.cs-scrolly{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.92fr);gap:clamp(30px,5vw,64px);align-items:start}
.cs-sticky{position:sticky;top:96px}
.cs-panel{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:24px;box-shadow:var(--sh-lg)}
.cs-panel .now{display:flex;justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:14px}
.cs-panel .now .m{font-family:var(--mono);font-size:.66rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.cs-panel .now .v{font-family:var(--mono);font-size:1.8rem;font-weight:700;letter-spacing:-.05em;color:var(--ink);line-height:1}
#csChart{width:100%;height:auto;overflow:visible}
#csChart .cs-ln{fill:none;stroke:var(--i600);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;
  transition:stroke-dashoffset .7s var(--ease)}
#csChart .cs-dot{fill:var(--i600);stroke:#fff;stroke-width:3;transition:opacity .4s,transform .4s var(--ease)}
.cs-steps{display:grid;gap:0}
.cs-step{min-height:62vh;display:flex;flex-direction:column;justify-content:center;padding:26px 0;
  opacity:.34;transition:opacity .4s var(--ease)}
.cs-step.on{opacity:1}
.cs-step .tag{font-family:var(--mono);font-size:.66rem;letter-spacing:.13em;text-transform:uppercase;
  color:var(--a700);margin-bottom:10px;display:flex;align-items:center;gap:10px}
.cs-step .tag b{background:var(--i100);color:var(--i700);width:22px;height:22px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;font-size:.62rem;flex:none}
.cs-step h3{font-size:clamp(1.2rem,2vw,1.55rem);margin-bottom:12px}
.cs-step p{font-size:1rem;margin-bottom:0}
.cs-step .delta{font-family:var(--mono);font-size:.8rem;color:var(--e700);margin-top:14px;display:inline-block;
  background:var(--e50);padding:5px 11px;border-radius:99px}
.cs-step .delta.flat{color:var(--a700);background:var(--a50)}

/* qualifier */
.cs-qual{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:32px 0}
.cs-qual div{border:1px solid var(--line);border-radius:var(--r);padding:20px;background:#fff}
.cs-qual dt{font-family:var(--mono);font-size:.6rem;letter-spacing:.13em;text-transform:uppercase;color:var(--i700);margin-bottom:8px}
.cs-qual dd{margin:0;font-size:.9rem}

@media (max-width:1040px){
  .cs-scrolly{grid-template-columns:1fr}
  .cs-sticky{position:sticky;top:74px;z-index:20;background:var(--bg);padding-block:10px;margin-bottom:8px}
  .cs-panel{padding:16px}
  .cs-step{min-height:auto;padding:22px 0;opacity:1;border-bottom:1px solid var(--line)}
  .cs-frame,.cs-qual{grid-template-columns:1fr 1fr}
}
@media (max-width:640px){
  .cs-frame,.cs-qual{grid-template-columns:1fr}
}

/* ═══════════ 21 · GENERIC PAGE FURNITURE ═══════════ */
.pg-hero{padding-block:clamp(46px,6vw,80px) clamp(28px,3.5vw,44px);position:relative}
.pg-hero::after{content:"";position:absolute;top:-140px;right:-160px;width:520px;height:520px;border-radius:50%;
  background:radial-gradient(circle,var(--i50),transparent 68%);z-index:-1}
.pg-hero h1{font-size:clamp(2rem,4.2vw,3.2rem);margin-bottom:18px;max-width:20ch}
.pg-hero .lede{font-size:clamp(1.04rem,1.5vw,1.18rem);margin-bottom:26px}
.pg-hero .btns{display:flex;flex-wrap:wrap;gap:12px}

.cols-2{display:grid;gap:clamp(28px,4vw,52px);align-items:start}
.cols-3{display:grid;gap:20px}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:26px;
  transition:transform .24s var(--ease),box-shadow .24s}
.card:hover{transform:translateY(-4px);box-shadow:var(--sh-lg)}
.card h3{font-size:1.04rem;margin-bottom:10px}
.card p{font-size:.9rem;margin:0}
.card .n{font-family:var(--mono);font-size:.66rem;color:var(--muted);display:block;margin-bottom:11px}

.checks{list-style:none;padding:0;margin:0 0 24px;display:grid;gap:11px}
.checks li{display:flex;gap:11px;font-size:.96rem}
.checks li::before{content:"✓";font-family:var(--mono);color:var(--i500);font-weight:700;flex:none;line-height:1.5}

@media (max-width:900px){.cols-2,.cols-3,}

/* ═══════════════════════════════════════════════════════════
   22 · RESPONSIVE REFINEMENT
   Written after seeing the build on a 2000px laptop: the reading
   column was too narrow for the type size, headings outran the
   measure, and the case study sat in a thin strip of white.
   ═══════════════════════════════════════════════════════════ */

/* Gutters are owned by --gutter in section 43 so there is one source
   of truth for page margins. */

/* Headings: cap the top end so a wide laptop doesn't get billboard
   type, and tighten leading as size grows. */
h1{font-size:clamp(2.1rem,1.35rem + 2.4vw,3.5rem);line-height:1.06}
h2{font-size:clamp(1.7rem,1.15rem + 1.8vw,2.6rem);line-height:1.1}
h3{font-size:clamp(1.12rem,1rem + .45vw,1.38rem);line-height:1.25}
.lede{max-width:64ch;line-height:1.6}

/* Reading column. 66ch at 17px on a 2000px screen reads as a thin
   ribbon; 72ch with fluid type holds the page together. */
.cs-prose{max-width:72ch}
.cs-prose p,.cs-prose li{font-size:clamp(1rem,.96rem + .18vw,1.1rem);line-height:1.7}
.cs-prose h2{margin-bottom:18px}
.cs-prose h3{margin:30px 0 10px}
.cs-prose > p:first-of-type{font-size:clamp(1.05rem,1rem + .28vw,1.2rem)}

/* The case study had nine sections each at 5vw of vertical padding,
   which is what made it feel sparse rather than considered. */
.eos-case-story .sect{padding-block:clamp(38px,4.2vw,64px) !important}
.eos-case-story .bg-alt + .bg-alt,
.eos-case-story .bg-iris + .bg-iris{padding-top:0 !important}

/* Opening number: must wrap gracefully, never overflow. */
.cs-huge{font-size:clamp(2rem,1.1rem + 4.4vw,4.4rem);row-gap:.06em}
.cs-huge i{font-size:.62em}
.cs-sub{max-width:56ch}
.cs-open{padding-block:clamp(38px,5vw,72px) clamp(24px,3vw,40px)}

/* Hero: stop the two columns cramping between 900 and 1100px. */
@media (max-width:1180px) and (min-width:1041px){.hero-grid{gap:32px}
  .chart-card{padding:20px}}

/* Tablet */
@media (max-width:1040px){.cs-sticky{top:66px;box-shadow:0 10px 20px -18px rgba(15,23,42,.5)}
  .cs-panel{padding:14px}
  #csChart{max-height:190px}
  .cs-step{min-height:auto}}

/* Phone — the real test. */
@media (max-width:640px){:root{--sp:clamp(44px,11vw,66px)}
  .sect-head{margin-bottom:32px}
  .eyebrow{font-size:.62rem;letter-spacing:.12em}

  /* touch targets */
  .btn{padding:15px 22px;min-height:48px}
  .btn-lg{padding:16px 24px;font-size:.98rem}
  .tab,.chip,.opt{min-height:44px;display:inline-flex;align-items:center}
  .mbar a{min-height:52px;justify-content:center}

  /* stacking */
  .proof-in{grid-template-columns:1fr 1fr}
  .proof-c{padding:24px 14px}
  .cs-frame,.cs-qual,.geo-grid,.quotes,.proc,.cols-2,.cols-3{grid-template-columns:1fr}
  .flag-stats{gap:12px}

  /* the pinned chart becomes a compact top strip */
  .cs-sticky{top:60px;margin-inline:-18px;padding:8px 18px 10px;
    border-bottom:1px solid var(--line);background:rgba(255,255,255,.97);backdrop-filter:blur(10px)}
  .cs-panel{border:0;box-shadow:none;padding:0;background:transparent}
  #csChart{max-height:150px}
  .cs-panel .now .v{font-size:1.35rem}

  /* tables scroll rather than squash */
  .cmp{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .cmp table{min-width:560px}
  .cmp th,.cmp td{padding:14px 16px;font-size:.88rem}

  /* the calculator and checker need room */
  .calc-in,.calc-out,.tool-q,.tool-r{padding:22px 18px}
  .dial{width:140px;height:140px}
  .dial svg{width:140px;height:140px}
  .dial-mid .n{font-size:1.9rem}
  .gate-form{flex-direction:column}
  .gate-form .btn{width:100%}

  /* long strings must never blow out the viewport */
  h1,h2,h3,.cs-huge{overflow-wrap:break-word;hyphens:none;-webkit-hyphens:none}
  .hdr-in{gap:12px}}

@media (max-width:380px){
  .proof-in{grid-template-columns:1fr}
  .seg{flex-direction:column}
  .seg button{width:100%}
}

/* Very wide screens: hold the measure, don't let sections drift apart. */
@media (min-width:1500px){:root{--wrap:1320px}
  .cs-prose{max-width:74ch}}

/* Print — people do print case studies to take into meetings. */
@media print{.hdr,.mbar,.announce,.prog,.cta-band,.btn{display:none !important}
  .cs-sticky{position:static}
  .cs-step{opacity:1 !important}
  body{font-size:11pt}}

/* ═══════════ 23 · AUDIT TOOL ═══════════ */
.audit-dials{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-bottom:20px}
.audit-dials .dial{width:150px;height:150px;margin:0}
.audit-dials .dial-mid .n{font-size:1.95rem}
.audit-group > p{font-family:var(--mono);text-transform:uppercase;
  color:var(--muted);font-weight:500}
.audit-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.audit-list li{display:flex;gap:11px;align-items:flex-start;background:#fff;border:1px solid var(--line);
  border-left-width:3px}
.audit-list li.ok{border-left-color:var(--e500)}
.audit-list li.no{border-left-color:var(--r500)}
.audit-list .mk{font-family:var(--mono);font-weight:700;flex:none;line-height:1.5}
.audit-list li.ok .mk{color:var(--e700)}
.audit-list li.no .mk{color:var(--r700)}
.audit-list b{display:block;color:var(--ink);font-weight:600}
.audit-err{background:var(--r50);border-left:3px solid var(--r500);padding:13px 16px;
  border-radius:0 var(--r-sm) var(--r-sm) 0;font-size:.87rem;color:var(--ink);margin-top:14px}
.spin{display:inline-block;width:15px;height:15px;border:2px solid rgba(255,255,255,.4);
  border-top-color:#fff;border-radius:50%;animation:sp .7s linear infinite;vertical-align:-2px}
@keyframes sp{to{transform:rotate(360deg)}}

/* ═══════════ 24 · AUTOMATION SAVINGS ═══════════ */
.auto-tasks{display:grid;gap:9px;margin-bottom:24px}
.auto-task{display:flex;align-items:center;gap:13px;border:1.5px solid var(--line);border-radius:var(--r-sm);
  padding:13px 15px;cursor:pointer;transition:all .15s;background:#fff}
.auto-task:hover{border-color:var(--i300)}
.auto-task.on{border-color:var(--i500);background:var(--i50)}
.auto-task input{width:19px;height:19px;accent-color:var(--i600);flex:none;cursor:pointer}
.auto-task .lbl{flex:1;font-size:.91rem;color:var(--ink);font-weight:500}
.auto-task .hrs{font-family:var(--mono);font-size:.76rem;color:var(--muted);flex:none}
@media (max-width:640px){.audit-dials .dial{width:126px;height:126px}.audit-dials .dial svg{width:126px;height:126px}}

/* ═══════════ 25 · EXIT INTENT ═══════════ */
.eos-exit{position:fixed;inset:0;z-index:300;background:rgba(15,23,42,.5);backdrop-filter:blur(4px);
  display:flex;align-items:center;justify-content:center;padding:24px;opacity:0;transition:opacity .26s var(--ease)}
.eos-exit.in{opacity:1}
.eos-exit-card{background:#fff;border-radius:var(--r-lg);padding:34px;max-width:460px;width:100%;
  box-shadow:var(--sh-lg);position:relative;transform:translateY(14px);transition:transform .26s var(--ease)}
.eos-exit.in .eos-exit-card{transform:none}
.eos-exit-card h3{font-size:1.35rem;margin-bottom:10px}
.eos-exit-card p{font-size:.94rem}
.eos-exit-x{position:absolute;top:14px;right:14px;width:34px;height:34px;border-radius:8px;
  color:var(--muted);font-size:1.3rem;line-height:1}
.eos-exit-x:hover{background:var(--bg2);color:var(--ink)}

/* ═══════════ 26 · MARKDOWN TABLES IN SEEDED COPY ═══════════ */
.md-table{width:100%;border-collapse:collapse;margin:22px 0;border:1px solid var(--line);
  border-radius:var(--r);overflow:hidden;background:#fff;font-size:.92rem}
.md-table th,.md-table td{padding:14px 18px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
.md-table th{background:var(--bg2);font-family:var(--mono);font-size:.64rem;letter-spacing:.12em;
  text-transform:uppercase;color:var(--muted);font-weight:500}
.md-table tr:last-child td{border-bottom:0}
@media (max-width:640px){.md-table{display:block;overflow-x:auto;white-space:nowrap}}

/* ═══════════════════════════════════════════════════════════
   27 · THEME INTEGRATION
   Block themes cap post content around 650px via theme.json.
   That squeezed the two-column hero into one word per line on
   a live install. These rules release the constraint for the
   plugin's own sections without touching the rest of the theme.
   ═══════════════════════════════════════════════════════════ */
body.eos-site{overflow-x:clip}

/* Release the constrained content width on plugin pages */
.eos-site .wp-block-post-content,
.eos-site .entry-content,
.eos-site .wp-site-blocks,
.eos-site main,
.eos-site #main,
.eos-site .site-main,
.eos-site .site-content{max-width:none !important;padding-left:0 !important;padding-right:0 !important}

/* ...including the per-child constraint block themes apply */
.eos-site .wp-block-post-content > *,
.eos-site .entry-content > *,
.eos-site .is-layout-constrained > *{max-width:none !important;margin-left:0 !important;margin-right:0 !important}

/* Plugin sections own their full width and their own rhythm */
.eos-site .hero,.eos-site .sect,.eos-site .marq,.eos-site .proof,
.eos-site .climb,.eos-site .pg-hero,.eos-site .eos-case-story > section{width:100%;max-width:none;margin-block:0}

/* Theme wrappers sometimes add their own padding on top of ours */
.eos-site .wp-block-group.has-global-padding{padding-left:0;padding-right:0}

/* Optional: hide the theme's own header and footer when ours is on */
.eos-hide-theme-chrome .wp-site-blocks > header.wp-block-template-part,
.eos-hide-theme-chrome .wp-site-blocks > footer.wp-block-template-part,
.eos-hide-theme-chrome > header.wp-block-template-part,
.eos-hide-theme-chrome > footer.wp-block-template-part,
.eos-hide-theme-chrome .site-header,
.eos-hide-theme-chrome .site-footer,
.eos-hide-theme-chrome #masthead,
.eos-hide-theme-chrome #colophon,
.eos-hide-theme-chrome .wp-block-post-title,
.eos-hide-theme-chrome .entry-header{display:none !important}

/* The admin bar pushes everything down 32px; the sticky header must follow */
body.admin-bar .hdr{top:32px}
body.admin-bar .drawer{top:32px}
@media screen and (max-width:782px){
  body.admin-bar .hdr{top:46px}
  body.admin-bar .drawer{top:46px}
}

/* Themes set their own heading margins and font sizes — ours win inside our sections */
.eos-site .hero h1,.eos-site .sect h2,.eos-site .sect h3,
.eos-site .pg-hero h1,.eos-site .eos-case-story h2{margin-top:0}
.eos-site .wrap > *:first-child{margin-top:0}

/* Some themes force list styling that breaks our nav and card lists */
.eos-site .nav ul,.eos-site .mega ul,.eos-site .ftr ul,
.eos-site .loc-list,.eos-site .deliver,.eos-site .checks,
.eos-site .audit-list,.eos-site .finds{list-style:none;padding-left:0}

/* Chart card must never collapse, whatever the container does */
.chart-card{min-width:0}
/* No min-height. It beats max-height in the cascade, which is why every
   mobile cap on the case-study chart was being ignored. */
#chart,#csChart{display:block;width:100%}
#chart{min-height:180px}

/* Empty-state so a missing chart never reads as a broken image */
.chart-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;
  min-height:210px;text-align:center;color:var(--muted);font-size:.85rem;gap:10px;padding:20px}
.chart-empty svg{width:38px;height:38px;color:var(--i300)}

/* ═══════════ 28 · ARCHIVES, SEARCH, 404, SINGLE POST ═══════════ */
.post-card{display:flex;flex-direction:column;gap:0}
.post-card .case-tag{align-self:flex-start;margin-bottom:12px}
.post-card h3{margin-bottom:9px;font-size:1.06rem;line-height:1.3}
.post-card h3 a{color:var(--ink);text-decoration:none}
.post-card h3 a:hover{color:var(--i700)}
.post-card p{font-size:.88rem;margin-bottom:16px}
.post-card .case-time{margin-top:auto;padding-top:14px;border-top:1px solid var(--line)}
a.card{display:block;color:inherit}
a.card h3{color:var(--ink)}
a.card:hover h3{color:var(--i700)}

.eos-search{display:flex;gap:10px}
.eos-search input[type=search]{flex:1;min-width:0;padding:15px 18px;border:1.5px solid var(--line);
  border-radius:var(--r-sm);font:inherit;font-size:1rem;background:#fff;-webkit-appearance:none}
.eos-search input[type=search]:focus{border-color:var(--i500);outline:none}

.eos-pager{margin-top:44px}
.eos-pager ul{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0;padding:0}
.eos-pager a,.eos-pager span{display:inline-flex;align-items:center;justify-content:center;min-width:44px;
  min-height:44px;padding:0 14px;border-radius:var(--r-sm);border:1.5px solid var(--line);
  font-size:.9rem;font-weight:600;color:var(--body);background:#fff;text-decoration:none}
.eos-pager a:hover{border-color:var(--i300);color:var(--i700)}
.eos-pager .current{background:var(--ink);border-color:var(--ink);color:#fff}

/* Long-form post body, since the theme's typography no longer applies */
.cs-prose h2{margin-top:38px}
.cs-prose h2:first-child{margin-top:0}
.cs-prose blockquote{border-left:3px solid var(--i400);background:var(--i50);margin:26px 0;
  padding:18px 22px;border-radius:0 var(--r-sm) var(--r-sm) 0}
.cs-prose blockquote p:last-child{margin-bottom:0}
.cs-prose code{background:var(--bg2);border:1px solid var(--line);border-radius:5px;
  padding:2px 6px;font-family:var(--mono);font-size:.86em}
.cs-prose img{border-radius:var(--r);margin:26px 0}
.cs-prose a{text-decoration:underline;text-underline-offset:3px}
@media (max-width:640px){.eos-search{flex-direction:column}.eos-search .btn{width:100%}}

/* ═══════════ 29 · AI TOOLS ═══════════ */
.eos-input{width:100%;padding:13px 15px;border:1.5px solid var(--line);border-radius:var(--r-sm);
  font:inherit;font-size:.95rem;background:#fff;-webkit-appearance:none}
.eos-input:focus{border-color:var(--i500);outline:none}
.eos-input:disabled{background:var(--bg2);cursor:not-allowed}

.vis-verdict{margin-bottom:20px;
  font-weight:700}
.vis-verdict.yes{background:var(--e50);color:var(--e700);border:1px solid rgba(4,120,87,.2)}
.vis-verdict.no{background:var(--r50);color:var(--r700);border:1px solid rgba(185,28,28,.2)}
.vis-answer{background:#fff;border:1px solid var(--line);border-left:3px solid var(--i400);line-height:1.6;color:var(--ink)}
#visComp .chip{cursor:default;font-size:.8rem}

.strat{max-width:760px;margin-inline:auto;background:#fff;border:1px solid var(--line);
  border-radius:var(--r-lg);padding:clamp(20px,3vw,30px);box-shadow:var(--sh-lg)}
.strat-log{display:grid;gap:12px;max-height:440px;overflow-y:auto;margin-bottom:16px;padding-right:4px}
.strat-msg{padding:14px 17px;border-radius:var(--r);font-size:.93rem;line-height:1.6;max-width:88%}
.strat-msg.bot{background:var(--i50);color:var(--ink);justify-self:start;border-bottom-left-radius:5px}
.strat-msg.me{background:var(--i600);color:#fff;justify-self:end;border-bottom-right-radius:5px}
.strat-msg.err{background:var(--r50);color:var(--r700);justify-self:start}
.strat-msg.think{color:var(--muted);font-style:italic}
.strat-suggest{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:14px}
.strat-suggest .chip{font-size:.8rem;padding:7px 13px;min-height:auto}
.strat-in{display:flex;gap:9px}
.strat-in .eos-input{flex:1;min-width:0}
@media (max-width:640px){
  .strat-msg{max-width:96%}
  .strat-in{flex-direction:column}
  .strat-in .btn{width:100%}
}

/* ═══════════════════════════════════════════════════════════
   30 · FULL-BLEED SECTIONS
   Sections must reach the viewport edge no matter what wraps
   them — a block theme's constrained content, Hello Elementor's
   .page-content, or an Elementor container. This breaks out of
   any centred parent, and accounts for the scrollbar so it
   never causes a horizontal scroll.
   --sbw is measured in JS on load and resize.
   ═══════════════════════════════════════════════════════════ */

.eos-site .hero,
.eos-site .sect,
.eos-site .marq,
.eos-site .proof,
.eos-site .climb,
.eos-site .pg-hero,
.eos-site .eos-case-story > section{width:calc(100vw - var(--sbw));
  max-width:calc(100vw - var(--sbw));
  margin-left:calc(50% - 50vw + (var(--sbw) / 2));
  margin-right:calc(50% - 50vw + (var(--sbw) / 2))}

/* When the plugin owns the document there is no wrapper to escape,
   so neutralise the maths and let the sections sit naturally. */
.eos-templated .hero,
.eos-templated .sect,
.eos-templated .marq,
.eos-templated .proof,
.eos-templated .climb,
.eos-templated .pg-hero,
.eos-templated .eos-case-story > section{width:auto;max-width:none;margin-left:0;margin-right:0}

body.eos-site{overflow-x:clip}

/* ═══════════════════════════════════════════════════════════
   31 · CLASSIC THEMES (Hello Elementor and friends)
   Every earlier rule targeted block-theme classes, which Hello
   Elementor does not have. These are the classic equivalents.
   ═══════════════════════════════════════════════════════════ */
.eos-site .site-main,
.eos-site .page-content,
.eos-site .entry-content,
.eos-site #content,
.eos-site #primary,
.eos-site .site-content,
.eos-site .container,
.eos-site .elementor-section-wrap{max-width:none !important;width:auto !important;
  padding-left:0 !important;padding-right:0 !important;
  margin-left:0 !important;margin-right:0 !important}

.eos-site .page-content > *,
.eos-site .entry-content > *{max-width:none !important;margin-left:0 !important;margin-right:0 !important}

/* The theme's own page title, printed above our hero */
.eos-hide-theme-chrome .page-header,
.eos-hide-theme-chrome .entry-title,
.eos-hide-theme-chrome .entry-header,
.eos-hide-theme-chrome h1.entry-title,
.eos-hide-theme-chrome .page-title,
.eos-hide-theme-chrome .elementor-page-title,
.eos-hide-theme-chrome .elementor-heading-title.page-title{display:none !important}

/* The theme's own header and footer, alongside ours */
.eos-hide-theme-chrome > .site-header,
.eos-hide-theme-chrome > .site-footer,
.eos-hide-theme-chrome .site > .site-header,
.eos-hide-theme-chrome .site > .site-footer,
.eos-hide-theme-chrome #site-header,
.eos-hide-theme-chrome #site-footer,
.eos-hide-theme-chrome .ehf-header,
.eos-hide-theme-chrome .ehf-footer{display:none !important}

/* Hello Elementor sets a body/container padding we do not want */
.eos-site #page.site,
.eos-site .site{max-width:none;padding:0;margin:0}

/* Themes commonly reset heading sizes; ours must win inside our sections */
.eos-site .hero h1,.eos-site .pg-hero h1,.eos-site .cs-huge{line-height:1.06}
.eos-site .sect h2,.eos-site .cs-prose h2{line-height:1.1}

/* ═══════════════════════════════════════════════════════════
   32 · FRONT-END BUG FIXES
   Everything below came from testing on a real install.
   ═══════════════════════════════════════════════════════════ */

/* --- Horizontal scroll. .pg-hero had a 520px decorative circle at
   right:-160px and no overflow rule, so it pushed the viewport
   sideways on every interior page. --- */
html{overflow-x:hidden}
.pg-hero,.cta-band,.marq,.flag,.hero{overflow:hidden}
.eos-site img,.eos-site svg,.eos-site video,.eos-site iframe{max-width:100%;height:auto}
.eos-site table{max-width:100%}
.eos-site pre,.eos-site code{overflow-wrap:anywhere}

/* --- The stray outlines on header buttons and toggles. Themes and
   Elementor both style bare <button> elements; rather than guess which
   one, neutralise every control the plugin owns and restate focus
   explicitly. --- */
.eos-site .btn,.eos-site .nav-b,.eos-site .burger,.eos-site .tab,
.eos-site .chip,.eos-site .opt,.eos-site .seg button,
.eos-site .announce-x,.eos-site .eos-exit-x,.eos-site .auto-task{border-style:solid;box-shadow:none;text-shadow:none;
  -webkit-appearance:none;appearance:none;outline:0}
.eos-site .btn,.eos-site .nav-b,.eos-site .tab,.eos-site .seg button,
.eos-site .announce-x,.eos-site .eos-exit-x{border-width:0}
.eos-site .btn-s,.eos-site .chip,.eos-site .opt,.eos-site .burger,.eos-site .auto-task{border-width:1.5px}
.eos-site .btn-p{box-shadow:0 6px 18px -8px rgba(124,58,237,.75)}
.eos-site button:focus:not(:focus-visible){outline:0;box-shadow:none}
.eos-site :focus-visible{outline:3px solid var(--i500,#8B5CF6);outline-offset:2px;border-radius:6px}
.eos-site input:not([type=range]),.eos-site textarea,.eos-site select{-webkit-appearance:none;appearance:none;box-shadow:none}
.eos-site input:invalid{box-shadow:none;outline:0}

/* --- Header on phones. The logo wrapped to two lines, the CTA was
   oversized, and the burger was a small target in a wide bar. --- */
.logo{white-space:nowrap;flex:0 0 auto}
.logo span{white-space:nowrap}
.hdr-in{gap:16px}

@media (max-width:900px){
  .hdr-in{height:60px;gap:10px;padding-inline:16px}
  .logo{font-size:1.02rem;gap:8px}
  .logo-mk{width:26px;height:26px}
  .hdr-cta{gap:8px;margin-left:auto}
  /* The mobile action bar already carries the audit CTA, so the header
     one only needs to be a compact secondary. */
  .hdr-cta .btn-p{padding:10px 14px;font-size:.82rem;min-height:40px;box-shadow:none}
  .burger{width:46px;height:46px;border-radius:10px;border-width:1.5px;flex:none}
  .burger svg{width:22px;height:22px}
}
@media (max-width:380px){
  .logo{font-size:.94rem}
  .logo-mk{width:24px;height:24px}
  .hdr-cta .btn-p{display:none}   /* the bottom bar has it */
  .burger{width:48px;height:48px}
}

/* --- The drawer scrolled sideways and sat under the header. --- */
.drawer{position:fixed;inset:0;width:100%;max-width:100%;overflow-x:hidden;overflow-y:auto;
  overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.drawer-top{padding-inline:18px}
.drawer nav{padding:16px 18px}
.drawer summary{padding:18px 0;min-height:56px}
.drawer details ul a{padding:12px 0;min-height:46px;display:flex;align-items:center}
.drawer > nav > a{padding:18px 0;min-height:56px;display:flex;align-items:center}
.drawer-cta{padding:22px 18px 40px}
body.eos-drawer-open{overflow:hidden;position:relative}

/* --- Interior page padding on phones. Sections need breathing room
   at the edges, which unwrapped content had none of. --- */
/* Gutters and section rhythm live on the --gutter and --sp tokens in
   sections 43 and 49. These per-breakpoint overrides were fighting them. */
@media (max-width:640px){.cs-prose,.wrap.cs-prose{max-width:100%}}

/* ═══════════ 33 · AUTOMATION LIBRARY + SPECIALITIES ═══════════ */
.auto-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.auto-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:26px;
  display:flex;flex-direction:column;transition:transform .24s var(--ease),box-shadow .24s,border-color .24s}
.auto-card:hover{transform:translateY(-4px);box-shadow:var(--sh-glow);border-color:transparent}
.auto-card .n{font-family:var(--mono);font-size:.66rem;color:var(--i500);font-weight:700;
  letter-spacing:.1em;display:block;margin-bottom:12px}
.auto-card h3{font-size:1.04rem;margin-bottom:10px;line-height:1.3}
.auto-card p{font-size:.88rem;margin-bottom:20px}
.auto-meta{margin-top:auto;padding-top:16px;border-top:1px solid var(--line);display:grid;gap:6px}
.auto-meta b{color:var(--e700);font-size:1rem;font-weight:700}
.auto-meta span{font-size:.78rem;color:var(--muted)}
.auto-meta .stack{font-family:var(--mono);font-size:.7rem}

.spec-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:24px;align-items:start}
.spec{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:clamp(24px,3.2vw,38px);position:relative}
.spec-lead{border-color:var(--i200);box-shadow:var(--sh-glow)}
.spec-rank{font-family:var(--mono);font-size:.7rem;font-weight:700;letter-spacing:.14em;
  color:var(--i600);background:var(--i50);padding:6px 11px;border-radius:99px;display:inline-block;margin-bottom:16px}
.spec-lead .spec-rank{background:var(--i600);color:#fff}
.spec h3{font-size:clamp(1.35rem,2.2vw,1.8rem);margin-bottom:12px;font-weight:800}
.spec-lede{font-size:1rem;margin-bottom:20px}
.spec .checks li{font-size:.92rem}
.spec-proof{display:grid;gap:8px;padding:16px 18px;background:var(--bg2);border-radius:var(--r);margin-bottom:22px}
.spec-proof span{font-size:.8rem;color:var(--body)}
.spec-proof b{color:var(--e700);font-weight:700}

@media (max-width:1040px){.auto-grid{grid-template-columns:1fr 1fr}.spec-grid{grid-template-columns:1fr}}
@media (max-width:640px){.auto-grid{grid-template-columns:1fr}}

/* ═══════════════════════════════════════════════════════════
   35 · CONTROL CHROME — the coloured outlines
   Safari draws focus rings in the macOS accent colour, which is
   why toggling the calculator's channel buttons produced a red
   ring. accent-color pins every native control to the brand,
   and focus is restated explicitly rather than left to the OS.
   ═══════════════════════════════════════════════════════════ */
.eos-site,.eos-site *{accent-color:var(--i600);-webkit-tap-highlight-color:transparent}

.eos-site button,
.eos-site .btn,
.eos-site .tab,
.eos-site .chip,
.eos-site .opt,
.eos-site .seg button,
.eos-site .burger,
.eos-site .nav-b,
.eos-site .auto-task,
.eos-site input,
.eos-site select,
.eos-site textarea{outline:none !important;outline-color:transparent !important}

/* One consistent focus treatment, keyboard only, in the brand colour */
.eos-site button:focus-visible,
.eos-site a:focus-visible,
.eos-site input:focus-visible,
.eos-site select:focus-visible,
.eos-site textarea:focus-visible,
.eos-site [tabindex]:focus-visible{outline:3px solid var(--i500) !important;outline-offset:2px !important;border-radius:6px}

/* Pressed states carry their own ring so the outline is never needed */
.eos-site .seg button[aria-pressed="true"]{box-shadow:0 0 0 1px var(--i200),var(--sh)}
.eos-site .tab[aria-selected="true"],
.eos-site .chip[aria-pressed="true"],
.eos-site .opt[aria-pressed="true"]{box-shadow:none}

/* Safari also tints checkboxes, radios and range thumbs */
.eos-site input[type=checkbox],.eos-site input[type=radio]{accent-color:var(--i600)}
.eos-site input[type=range]{accent-color:var(--i600)}

/* ═══════════════════════════════════════════════════════════
   36 · PHONE HEADER
   The logo was allowed to shrink because of min-width:0, so
   "Expert On SEO" broke across two lines on an iPhone.
   ═══════════════════════════════════════════════════════════ */
.hdr-in{display:flex;align-items:center;flex-wrap:nowrap}
.logo{white-space:nowrap;min-width:auto;overflow:visible}
.logo span,.logo b{white-space:nowrap;display:inline}
.hdr-cta{margin-left:auto}

@media (max-width:900px){
  .hdr-in{height:58px;gap:12px;padding-inline:16px}
  .logo{font-size:1rem;gap:8px;letter-spacing:-.02em}
  .logo-mk{width:26px;height:26px;flex:none}
  /* The bottom action bar already carries the audit CTA — the header
     one is pure duplication on a phone and was crowding the logo. */
  .hdr-cta .btn-p{display:none}
    .burger{display:flex;width:48px;height:48px;border-radius:12px;border:1.5px solid var(--line);
    background:#fff;flex:none;align-items:center;justify-content:center}
  .burger svg{width:24px;height:24px}
  .burger:active{background:var(--i50);border-color:var(--i300)}
}
@media (max-width:380px){
  .logo{font-size:.94rem}
  .logo-mk{width:24px;height:24px}
  .hdr-in{gap:8px;padding-inline:14px}
}

/* ═══════════════════════════════════════════════════════════
   37 · PINCH-ZOOM / SIDEWAYS SCROLL
   If anything is wider than the viewport the phone renders the
   whole page zoomed out. These are hard stops.
   ═══════════════════════════════════════════════════════════ */
html,body{max-width:100%;overflow-x:hidden}
.eos-site main,.eos-site .wrap,.eos-site section{max-width:100%}
.eos-site .cs-scrolly,.eos-site .hero-grid,.eos-site .calc,.eos-site .tool,
.eos-site .loc-grid,.eos-site .spec-grid,.eos-site .cols-2,.eos-site .cols-3,
.eos-site .auto-grid,.eos-site .quotes,.eos-site .cases,.eos-site .geo-grid{min-width:0}
.eos-site .cs-scrolly > *,.eos-site .hero-grid > *,.eos-site .calc > *,
.eos-site .tool > *,.eos-site .spec-grid > *{min-width:0}
.eos-site h1,.eos-site h2,.eos-site h3,.eos-site h4,.eos-site p,.eos-site li,.eos-site td,.eos-site a{overflow-wrap:break-word;word-break:normal;hyphens:none;-webkit-hyphens:none}
.eos-site .num,.eos-site .cs-huge{overflow-wrap:break-word}
.eos-site svg{max-width:100%}
.dial svg,.audit-dials .dial svg{max-width:100%;height:auto}

/* ═══════════════════════════════════════════════════════════
   38 · TESTIMONIALS ON PHONES
   The cards were carrying desktop padding on a 390px screen, so
   the section ballooned while the text stayed tiny.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:640px){.quotes{gap:12px}
  .quote{padding:20px 18px}
  .quote .mark{font-size:1.9rem;margin-bottom:8px}
  .quote p{font-size:.95rem;margin-bottom:14px;line-height:1.6}
  .quote footer{padding-top:13px;gap:10px}
  .avat{width:34px;height:34px;font-size:.74rem}
  .quote .who{font-size:.85rem}
  .quote .role{font-size:.75rem}

  /* Same treatment for every other card so nothing is padding-heavy */
  .card,.auto-card,.case,.geo-c,.panel-aside,.spec{padding:20px 18px}
  .flag-s{padding:16px}
  .cs-frame div{padding:15px 16px}
  .chart-card{padding:16px}
  .strat{padding:18px 16px}
  .strat-msg{padding:12px 14px;font-size:.9rem}}

/* ═══════════ 39 · AUDIT REQUEST FORM ═══════════ */
.req{display:grid;grid-template-columns:1.25fr .75fr;gap:clamp(24px,3.5vw,44px);align-items:start}
.req-form{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  padding:clamp(22px,3vw,34px);box-shadow:var(--sh-lg)}
.req-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.req-form .fld{margin-bottom:18px}
.req-form label{display:block;font-size:.86rem;font-weight:600;color:var(--ink);margin-bottom:8px}
.opt-lbl{font-weight:400;color:var(--muted);font-size:.78rem;margin-left:6px}
.req-form textarea{resize:vertical;min-height:84px;font-family:inherit}
.req-form .btn{width:100%;justify-content:center}
.req-note{font-size:.78rem;color:var(--muted);margin:12px 0 0;text-align:center}
.req-note.ok{color:var(--e700);font-weight:600;font-size:.9rem}
.req-note.err{color:var(--r700);font-weight:600}
.eos-input.bad{border-color:var(--r500)}
.req-aside{background:var(--i50);border-radius:var(--r-lg);padding:clamp(22px,3vw,30px)}
.req-aside h3{font-size:1.02rem;margin-bottom:16px}
.req-aside .checks li{font-size:.9rem}
.req-alt{margin-top:22px;padding-top:20px;border-top:1px solid var(--i200)}
.req-alt p{font-size:.82rem;color:var(--muted);margin-bottom:10px}
.req-alt .btn{margin-right:8px;margin-bottom:8px}
@media (max-width:900px){.req{grid-template-columns:1fr}.req-row{grid-template-columns:1fr;gap:0}}

/* ═══════════ 34 · ILLUSTRATIVE TAG ═══════════ */
.cs-illus{font-family:var(--mono);font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;
  background:var(--a100);color:#78350F;padding:4px 8px;border-radius:99px;margin-left:8px;
  font-weight:500;vertical-align:middle}

/* ═══════════════════════════════════════════════════════════
   40 · PAGE BUILDING BLOCKS
   Interior pages were a hero plus one column of prose, which
   reads as unstyled however good the type is. These give every
   page the same rhythm the homepage has.
   ═══════════════════════════════════════════════════════════ */
.capsule-band{padding-block:clamp(28px,3.5vw,46px)}
.capsule-lg{background:var(--i50);border-left:4px solid var(--i500);border-radius:0 var(--r-lg) var(--r-lg) 0;
  padding:clamp(22px,3vw,32px) clamp(24px,3.4vw,38px);max-width:76ch}
.capsule-lg .eyebrow{margin-bottom:10px}
.capsule-lg p:last-child{font-size:clamp(1.02rem,.98rem + .32vw,1.22rem);color:var(--ink);
  line-height:1.6;margin:0;font-weight:500}

.statband{padding-block:clamp(26px,3vw,42px)}
.statband-in{display:flex;flex-wrap:wrap;gap:clamp(20px,4vw,56px);align-items:flex-end;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:clamp(22px,3vw,34px)}
.statband-in > div{flex:0 0 auto}
.statband-in .v{display:block;font-size:clamp(1.5rem,2.4vw,2.1rem);font-weight:700;
  letter-spacing:-.045em;color:var(--e700);line-height:1}
.statband-in .k{display:block;font-size:.8rem;color:var(--muted);margin-top:7px}
.statband-note{flex:1 1 260px;font-size:.88rem;color:var(--body);margin:0;
  border-left:2px solid var(--line);padding-left:clamp(16px,2vw,26px)}

.split-note{background:var(--i50);border-radius:var(--r-lg);padding:clamp(22px,3vw,30px)}
.split-note h3{font-size:1.02rem;margin-bottom:10px}
.split-note p{font-size:.94rem;margin:0}

.card-list{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  padding:clamp(22px,3vw,30px);margin:0}
.card-list li{font-size:.94rem}

/* The numbered marker on composed cards */
.card .n{font-family:var(--mono);font-size:.66rem;color:var(--i500);font-weight:700;
  letter-spacing:.1em;display:block;margin-bottom:11px}

/* Composed prose sections should not run edge to edge on wide screens */
/* The container keeps the page's width and gutter; only the reading
   measure is constrained, so prose lines up with every other section. */
.sect > .wrap.cs-prose{max-width:var(--wrap)}
.sect > .wrap.cs-prose > *{max-width:74ch}
.sect > .wrap.cs-prose > .cs-frame,
.sect > .wrap.cs-prose > .cs-qual,
.sect > .wrap.cs-prose > table{max-width:none}

@media (max-width:900px){
  .statband-in{gap:22px 32px;padding:22px}
  .statband-note{flex-basis:100%;border-left:0;border-top:1px solid var(--line);
    padding-left:0;padding-top:16px}
  .capsule-lg{border-radius:0 var(--r) var(--r) 0}
}

/* ═══════════════════════════════════════════════════════════
   41 · PHONE GRID CORRECTIONS
   Reported from a real device: the stat strip was stacking into
   four full-width rows instead of a 2x2, and the review cards
   were carrying desktop padding in a single column.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:900px){.proof-in{grid-template-columns:1fr 1fr !important}
  .proof-c{padding:22px 12px}
  .proof-c .v{font-size:1.45rem}
  .proof-c .k{font-size:.72rem;margin-top:6px;line-height:1.35}
  .proof-c .spark{width:48px;height:14px;margin-top:9px}}
@media (max-width:640px){
  .proof-in{grid-template-columns:1fr 1fr !important}
  .proof-c{padding:18px 10px}
  .proof-c .v{font-size:1.3rem}
  .proof-c .k{font-size:.68rem}

  /* Case and automation cards read better paired too */
  .cases,.auto-grid{gap:12px}
  .case,.auto-card{padding:18px 16px}
  .flag-stats{gap:10px}
  .flag-s{padding:14px}
  .flag-s .v{font-size:1.15rem}
  .flag-s .k{font-size:.72rem}
}

/* Stat band and hero stats should pair up rather than stack */
@media (max-width:640px){.statband-in{display:grid;grid-template-columns:1fr 1fr;gap:16px}
  .statband-in .v{font-size:1.3rem}
  .statband-note{grid-column:1 / -1}
  .cs-frame{grid-template-columns:1fr 1fr}
  .cs-frame div{padding:13px 14px}
  .cs-frame dd{font-size:.82rem}
  .cs-qual{grid-template-columns:1fr 1fr}}
@media (max-width:380px){
  .cs-frame,.cs-qual,.statband-in{grid-template-columns:1fr}
}

/* ═══════════════════════════════════════════════════════════
   42 · LOCATIONS — international leads
   ═══════════════════════════════════════════════════════════ */
.loc-primary{background:var(--i50);border-radius:var(--r-lg);padding:clamp(22px,3vw,32px)}
.loc-primary .loc-list a{background:#fff;border-color:var(--i200)}
.loc-list a.lead{font-weight:600;color:var(--i700);border-color:var(--i300);padding:10px 18px}
.loc-list a.lead:hover{background:var(--i600);border-color:var(--i600);color:#fff}
.loc-note{margin-top:18px;font-size:.82rem;color:var(--muted)}
.loc-note .num{color:var(--ink);font-weight:600}
.loc-col + .loc-col{padding-top:4px}

/* ═══════════════════════════════════════════════════════════
   43 · PAGE MARGINS
   Reported as edge-to-edge on both phone and laptop. The
   container had padding but sections stretched past it, and on
   wide screens there was no outer breathing room at all.
   ═══════════════════════════════════════════════════════════ */
.eos-site .wrap{padding-inline:var(--gutter)}
.eos-site .hdr-in{padding-inline:var(--gutter)}
.eos-site .proof-in{margin-inline:var(--gutter);border-radius:var(--r-lg);overflow:hidden;
  border:1px solid var(--line)}
@media (min-width:1500px){:root{--gutter:clamp(48px,6vw,110px)}}
@media (max-width:640px){:root{--gutter:20px}}

/* Full-width bands still need their inner content inset */
.eos-site .cta-band,.eos-site .flag,.eos-site .tool,.eos-site .calc,
.eos-site .req,.eos-site .strat{margin-inline:0}

/* ═══════════════════════════════════════════════════════════
   44 · TESTIMONIALS — swipe, don't squeeze
   Two cards side by side on a 390px screen gave ~170px columns
   and text broke one word per line. A snap carousel shows the
   second card peeking without destroying the first.
   ═══════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════
   44 · TESTIMONIALS
   Two attempts were wrong: a 2-up grid gave 170px columns that
   broke text one word per line, and the swipe carousel showed
   half a card. One full-width card per row, properly padded.
   ═══════════════════════════════════════════════════════════ */
/* Superseded by section 50, which is the version that shipped. */
.quotes-hint{display:none !important}

/* ═══════════════════════════════════════════════════════════
   45 · TOOLS AND FORMS — real cards, real breathing room
   Reported as clumped together with no boxes on the phone.
   ═══════════════════════════════════════════════════════════ */
.tool,.calc,.req-form,.req-aside,.strat{border-radius:18px;
  box-shadow:0 1px 2px rgba(15,23,42,.04),0 18px 44px -28px rgba(76,29,149,.28)}

/* Section headings inside tools were competing with the page H2 */
.tool .fld > label,.calc .fld label,.req-form label{font-family:var(--text);font-weight:600;font-size:.84rem;letter-spacing:.005em;color:var(--ink)}
.tool-q > .q > p,.audit-group > p{font-family:var(--text)}

/* The AI tools had cramped headings and no card around the body */
#ai-visibility .sect-head h2,#strategist .sect-head h2,
#audit-tool .sect-head h2,#risk .sect-head h2,#tools .sect-head h2{font-size:clamp(1.5rem,1.1rem + 1.5vw,2.3rem);line-height:1.12;letter-spacing:-.02em}
#ai-visibility .sect-head .lede,#strategist .sect-head .lede{max-width:60ch}

.vis-verdict{font-family:var(--display);font-size:1.02rem;line-height:1.4;padding:16px 18px;border-radius:14px}
.vis-answer{border-radius:0 12px 12px 0;font-size:.92rem;padding:16px 18px}
.audit-group{margin-bottom:24px}
.audit-group > p{font-size:.66rem;letter-spacing:.13em;margin-bottom:12px}
.audit-list li{padding:14px 16px;border-radius:12px;font-size:.88rem;line-height:1.5}
.audit-list b{margin-bottom:4px}
.finds li{padding:15px 17px;border-radius:12px;line-height:1.55}

@media (max-width:900px){
  .tool,.calc{border-radius:16px}
  .tool-q,.tool-r,.calc-in,.calc-out{padding:24px 20px}
  .tool-q{border-right:0;border-bottom:1px solid var(--line)}
  .calc-in{border-right:0;border-bottom:1px solid var(--line)}
  .q{margin-bottom:22px}
  .q > p{font-size:.92rem;margin-bottom:12px}
  .opts{gap:8px}
  .opt{padding:11px 15px;font-size:.85rem}
  .seg{margin-bottom:24px;padding:6px;gap:6px}
  .seg button{padding:11px 8px;font-size:.82rem}
  .fld{margin-bottom:22px}
  .res{margin-bottom:20px}
  .res .v{font-size:1.5rem}
  .gate{padding-top:20px;margin-top:20px}
  .tool-actions{gap:10px;padding-top:10px}
  .tool-actions .btn{width:100%;justify-content:center}
  .tool-empty{padding:36px 20px;font-size:.88rem}
  .tool-cta{padding-top:22px}
  .tool-foot,.calc-foot{font-size:.76rem;line-height:1.55;margin-top:14px}
  .req-form,.req-aside{padding:24px 20px;border-radius:16px}
  .req-form .fld{margin-bottom:20px}
  .strat{padding:20px 18px;border-radius:16px}
  .strat-log{max-height:320px}
  .audit-dials{gap:16px;margin-bottom:22px}
}

/* ═══════════════════════════════════════════════════════════
   46 · MOTION
   Restrained: entrances stagger, buttons have a sheen, cards
   lift. Nothing bounces, nothing parallaxes.
   ═══════════════════════════════════════════════════════════ */
.js .rv{opacity:0;transform:translateY(22px);
  transition:opacity .7s var(--ease),transform .7s var(--ease)}
.js .rv.in{opacity:1;transform:none}

/* Children of a revealed grid come in one after another */
.js .rv.in > .card,.js .rv.in > .auto-card,.js .rv.in > .case,
.js .rv.in > .geo-c,.js .rv.in > .quote,.js .rv.in > .spec,
.js .rv.in > .proof-c{animation:eosRise .62s var(--ease) both}
.js .rv.in > *:nth-child(1){animation-delay:.02s}
.js .rv.in > *:nth-child(2){animation-delay:.09s}
.js .rv.in > *:nth-child(3){animation-delay:.16s}
.js .rv.in > *:nth-child(4){animation-delay:.23s}
.js .rv.in > *:nth-child(5){animation-delay:.30s}
.js .rv.in > *:nth-child(6){animation-delay:.37s}
@keyframes eosRise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}

/* A slow sheen crossing the primary button on hover */
.btn-p{position:relative;overflow:hidden;isolation:isolate}
.btn-p::after{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(115deg,transparent 30%,rgba(255,255,255,.22) 50%,transparent 70%);
  transform:translateX(-120%);transition:transform .7s var(--ease)}
.btn-p:hover::after{transform:translateX(120%)}

/* Nav items get an underline that grows from the left */
.nav-b{position:relative}
.nav-b::after{content:"";position:absolute;left:13px;right:13px;bottom:4px;height:2px;
  background:var(--i500);border-radius:2px;transform:scaleX(0);transform-origin:left;
  transition:transform .26s var(--ease)}
.nav-i:hover > .nav-b::after,a.nav-b:hover::after{transform:scaleX(1)}

/* Cards settle rather than snap */
.card,.auto-card,.case,.geo-c,.quote,.spec{transition:transform .3s var(--ease),box-shadow .3s var(--ease),border-color .3s var(--ease)}

/* Section eyebrow rule draws itself in */
.js .rv.in .eyebrow::before{animation:eosRule .5s var(--ease) both}
@keyframes eosRule{from{transform:scaleX(0);transform-origin:left}to{transform:scaleX(1)}}

@media (prefers-reduced-motion:reduce){
  .js .rv,.js .rv.in > *{animation:none !important;opacity:1 !important;transform:none !important}
  .btn-p::after{display:none}
  .nav-b::after{transition:none}
}

/* ═══════════════════════════════════════════════════════════
   47 · TYPESETTING
   Words were breaking mid-syllable because of automatic hyphenation.
   breaking words mid-syllable. Never hyphenate; balance instead.
   ═══════════════════════════════════════════════════════════ */
.eos-site h1,.eos-site h2,.eos-site h3,.eos-site h4,
.eos-site .cs-huge,.eos-site .btn,.eos-site .nav-b{hyphens:none !important;-webkit-hyphens:none !important;
  word-break:normal;overflow-wrap:normal}
.eos-site h1,.eos-site h2,.eos-site .cta-band h2,.eos-site .pg-hero h1{text-wrap:balance}
.eos-site p,.eos-site li{text-wrap:pretty;overflow-wrap:break-word}
.eos-site .btn{white-space:normal;text-align:center}

/* ═══════════════════════════════════════════════════════════
   48 · BUTTONS — text was touching the edges
   ═══════════════════════════════════════════════════════════ */
.btn{padding:15px 28px;line-height:1.25;gap:10px}
.btn-lg{padding:18px 34px;font-size:1rem}
.btn .arw{flex:none}
@media (max-width:900px){
  .btn{padding:15px 24px;font-size:.95rem;min-height:50px}
  .btn-lg{padding:17px 26px;font-size:.98rem;min-height:54px}
  .hero-btns{gap:10px}
  .hero-btns .btn{flex:1 1 100%;width:100%}
  .cta-btns .btn{flex:1 1 100%;width:100%}
  .cta-band .btn{padding:17px 20px}
}

/* ═══════════════════════════════════════════════════════════
   49 · MOBILE RHYTHM
   Reported: a huge gap under the header, tools floating in
   margin, and dead space between sections.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:900px){:root{--sp:clamp(34px,8vw,52px)}
  .hero{padding-block:22px 34px}
  .hero-grid{gap:26px}
  .hero h1{margin-bottom:16px}
  .hero .lede{margin-bottom:22px;font-size:1.02rem}
  .hero-trust{gap:8px 16px;font-size:.8rem;margin-bottom:20px}
  .pg-hero{padding-block:26px 20px}
  .sect{padding-block:38px}
  .sect-head{margin-bottom:26px}
  .sect-head .lede{font-size:1rem}
  .capsule-band{padding-block:24px}
  .statband{padding-block:22px}
  .cta-band{padding:30px 22px;border-radius:18px}
  .cta-band h2{font-size:1.5rem;margin-bottom:12px}
  .cta-band p{font-size:.95rem;margin-bottom:22px}
  .climb{height:24px}

  /* Tools sat in a wide margin and read as floating */
  .tool,.calc,.req,.strat,.cmp{margin-inline:0;width:100%}}
@media (max-width:640px){
  .sect{padding-block:34px}
  .hero{padding-block:18px 30px}
}

/* ═══════════════════════════════════════════════════════════
   50 · TESTIMONIALS — the padding, properly this time
   ═══════════════════════════════════════════════════════════ */
@media (max-width:900px){.eos-site .quotes{
    display:grid !important;grid-template-columns:1fr !important;
    gap:12px !important;margin:0 !important;padding:0 !important;
    overflow:visible !important}
  .eos-site .quote{
    padding:20px 18px !important;border-radius:14px;margin:0 !important;
    box-shadow:0 1px 2px rgba(15,23,42,.05),0 8px 22px -16px rgba(15,23,42,.2)}
  .eos-site .quote .mark{font-size:1.6rem;margin-bottom:8px;line-height:.6}
  .eos-site .quote p{font-size:.95rem;line-height:1.58;margin-bottom:14px}
  .eos-site .quote footer{padding-top:12px;gap:10px}
  .eos-site .avat{width:34px;height:34px;font-size:.72rem}
  .eos-site .quote .who{font-size:.86rem}
  .eos-site .quote .role{font-size:.76rem}}

/* ═══════════════════════════════════════════════════════════
   51 · SEGMENTED CONTROL
   It was stacking into a column on small phones and reading as
   three unrelated boxes. A grid keeps it recognisable.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:640px){.seg{display:grid;grid-template-columns:1fr 1fr;gap:6px;flex-direction:row}
  .seg button{width:auto;font-size:.8rem;padding:12px 8px;line-height:1.25}
  .seg button:first-child{grid-column:1 / -1}}
@media (max-width:380px){
  .seg{grid-template-columns:1fr}
  .seg button:first-child{grid-column:auto}
}

/* ═══════════════════════════════════════════════════════════
   52 · CASE CARDS ARE LINKS
   ═══════════════════════════════════════════════════════════ */
a.case,a.case-link{text-decoration:none;color:inherit;display:flex;flex-direction:column}
a.case h3,a.case .mval,a.case .mlab{color:var(--ink)}
a.case:hover h3{color:var(--i700)}
.case-go{margin-top:14px;font-size:.82rem;font-weight:600;color:var(--i600);
  display:inline-flex;align-items:center;gap:6px}
.case:hover .case-go .arw{transform:translateX(4px)}
.case-go .arw{transition:transform .22s var(--ease)}

/* ═══════════════════════════════════════════════════════════
   53 · TYPE REFINEMENT
   Manrope for headings, Inter for text. Optical sizing, tighter
   tracking at display sizes, and tabular figures for every metric
   so numbers line up column to column.
   ═══════════════════════════════════════════════════════════ */
.eos-site{font-feature-settings:"kern" 1,"liga" 1,"calt" 1;font-optical-sizing:auto}
.eos-site h1,.eos-site h2{letter-spacing:-.028em;font-weight:800}
.eos-site h3,.eos-site h4{letter-spacing:-.015em;font-weight:700}
.eos-site .lede{letter-spacing:-.005em;font-weight:400}
.eos-site p,.eos-site li{font-weight:400}
.eos-site strong,.eos-site b{font-weight:600}
.eos-site .num,.eos-site .mono,.eos-site .ax,.eos-site .mk-num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1,"zero" 1}
.eos-site .eyebrow{font-weight:500;letter-spacing:.15em}
.eos-site .btn{letter-spacing:-.005em;font-weight:600}
.eos-site .nav-b{font-weight:500;letter-spacing:-.002em}
.eos-site .logo{letter-spacing:-.035em;font-weight:800}

/* ═══════════════════════════════════════════════════════════
   54 · CASE STUDY CHART ON PHONES
   The pinned chart and the scroll spine both needed sizing down
   so the story is readable while the line is still visible.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:1040px){.cs-scrolly{gap:0}
  .cs-sticky{position:sticky;top:60px;z-index:20;background:var(--bg);
    padding:10px 0 12px;margin-inline:0;border-bottom:1px solid var(--line)}
  .cs-panel{padding:10px 0;border:0;box-shadow:none;background:transparent}
  .cs-panel .now{margin-bottom:8px}
  .cs-panel .now .m{font-size:.6rem}
  .cs-panel .now .v{font-size:1.4rem}
  #csChart{max-height:150px}
  .cs-steps{padding-top:8px}
  .cs-step{min-height:auto;padding:20px 0;opacity:1;border-bottom:1px solid var(--line)}
  .cs-step:last-child{border-bottom:0}
  .cs-step.on{background:transparent}
  .cs-step .tag{font-size:.62rem;margin-bottom:8px}
  .cs-step h3{font-size:1.1rem;margin-bottom:8px}
  .cs-step p{font-size:.94rem}
  .cs-step .delta{font-size:.74rem;margin-top:10px}}
@media (max-width:640px){
  .cs-sticky{top:58px;padding:8px 0 10px}
  #csChart{max-height:128px}
  .cs-panel .now .v{font-size:1.22rem}
  .cs-huge{font-size:clamp(1.7rem,1rem + 5vw,2.6rem);gap:.18em}
  .cs-huge i{font-size:.58em}
  .cs-open{padding-block:26px 20px}
  .cs-sub{font-size:1rem;margin-bottom:22px}
  .cs-prose p,.cs-prose li{font-size:.97rem}
  .cs-pull,.cs-warn{padding:15px 17px;font-size:.95rem}
  .eos-case-story .sect{padding-block:30px !important}
}

/* The axis labels need room once units are appended */
.ax{font-size:9.5px}
@media (max-width:640px){.ax{font-size:9px}}

/* ═══════════════════════════════════════════════════════════
   55 · LOCATION PAGES
   These now compose properly. Giving the split section and the
   local-question cards their own treatment so a city page reads
   as deliberate rather than as a generic page with a place name.
   ═══════════════════════════════════════════════════════════ */
.split-note{border:1px solid var(--i200);position:relative;overflow:hidden}
.split-note::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--i500)}
.split-note h3{color:var(--i900)}

/* Local FAQ cards read as questions, not as numbered features */
#locations + .sect .card .n,.sect .card .n:empty{display:none}
.cols-2 .card h3{font-size:1rem;line-height:1.35}
.cols-2 .card p{font-size:.9rem}

/* ═══════════════════════════════════════════════════════════
   56 · REFINEMENT PASS
   Small things that add up: consistent radii, calmer shadows,
   aligned optical spacing, and states that were never styled.
   ═══════════════════════════════════════════════════════════ */
/* Radii and shadows live in the token block at the top of this file. */

/* Cards were carrying three different radii across the site */
.card,.auto-card,.case,.geo-c,.quote,.panel-aside,.flag-s,
.audit-list li,.finds li,.split-note,.card-list{border-radius:var(--r)}
.tool,.calc,.req-form,.req-aside,.strat,.spec,.cta-band,.capsule-lg,
.statband-in,.chart-card,.cs-panel,.md-table,.cmp{border-radius:var(--r-lg)}

/* Links inside prose were inheriting a heavier weight than the body */
.cs-prose a{font-weight:500;text-decoration-thickness:1px}
.cs-prose a:hover{text-decoration-thickness:2px}

/* Lists inside composed sections had no left alignment with the heading */
.cs-prose ul,.cs-prose ol{padding-left:1.15em}
.cs-prose li::marker{color:var(--i400)}
.checks li{align-items:flex-start}
.checks li::before{margin-top:.05em}

/* Empty states and disabled controls were unstyled */
.eos-site [hidden]{display:none !important}
.eos-site .btn[disabled],.eos-site button[disabled]{opacity:.5;cursor:not-allowed;transform:none}
.eos-site .btn[disabled]:hover{transform:none;box-shadow:none}
.eos-site select:disabled,.eos-site input:disabled,.eos-site textarea:disabled{background:var(--bg2);color:var(--muted);cursor:not-allowed}

/* Selection and scrollbar picked up the brand */
.eos-site ::selection{background:var(--i100);color:var(--i900)}
.eos-site{scrollbar-color:var(--i300) transparent}

/* Tables inside prose were unstyled when they came from markdown */
.cs-prose table{width:100%;border-collapse:collapse;margin:22px 0;font-size:.92rem;
  border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.cs-prose th,.cs-prose td{padding:13px 16px;text-align:left;border-bottom:1px solid var(--line)}
.cs-prose th{background:var(--bg2);font-family:var(--mono);font-size:.64rem;
  letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:500}
.cs-prose tr:last-child td{border-bottom:0}

/* Two adjacent tinted sections were merging into one grey block */
.sect.bg-alt + .sect.bg-alt{padding-top:0}
.sect.bg-iris + .sect.bg-iris{padding-top:0}
.sect.bg-alt + .sect.bg-alt > .wrap > .sect-head{padding-top:clamp(30px,4vw,52px);
  border-top:1px solid var(--line)}

/* The climb divider was invisible against a tinted band */
.sect.bg-alt + .climb path,.bg-alt + .climb path{stroke:var(--i300)}

/* Focus inside the drawer was landing behind the sticky top bar */
.drawer a:focus-visible,.drawer summary:focus-visible{scroll-margin-top:80px}

/* Print: let someone take a case study into a meeting */
@media print{.eos-site .quotes,.eos-site .cases,.eos-site .cols-3{display:block}
  .eos-site .quote,.eos-site .case,.eos-site .card{
    break-inside:avoid;page-break-inside:avoid;margin-bottom:12px;box-shadow:none;border:1px solid #ccc}
  .cs-sticky{position:static !important}
  a[href^="http"]::after{content:" (" attr(href) ")";font-size:9pt;color:#555}}

/* ═══════════════════════════════════════════════════════════
   57 · CONTROL COLOURS
   Buttons and icons were picking up the theme's link colour —
   "Run it" rendered crimson and the burger drew red. Every
   control now states its own background and colour explicitly.
   ═══════════════════════════════════════════════════════════ */
.eos-site .btn-p,
.eos-site a.btn-p,
.eos-site button.btn-p{background:var(--i600) !important;color:#fff !important;
  text-decoration:none !important;border:0}
.eos-site .btn-p:hover,.eos-site a.btn-p:hover,.eos-site button.btn-p:hover{background:var(--i700) !important;color:#fff !important}
.eos-site .btn-s,.eos-site a.btn-s,.eos-site button.btn-s{background:#fff !important;color:var(--ink) !important;text-decoration:none !important}
.eos-site .btn-s:hover{background:var(--i50) !important;color:var(--ink) !important}
.eos-site .btn-g,.eos-site a.btn-g{background:var(--i100) !important;color:var(--i700) !important;
  text-decoration:none !important}
.eos-site .btn,.eos-site a.btn{text-decoration:none !important}
.eos-site .btn .arw{color:inherit}

/* The dark and tinted bands invert the pair */
.eos-site .cta-band .btn-p,.eos-site .flag .btn-p{background:#fff !important;color:var(--i900) !important}
.eos-site .cta-band .btn-p:hover,.eos-site .flag .btn-p:hover{background:var(--i100) !important;color:var(--i900) !important}
.eos-site .cta-band .btn-s{background:transparent !important;color:#fff !important;
  border-color:rgba(255,255,255,.34)}
.eos-site .cta-band .btn-s:hover{background:rgba(255,255,255,.12) !important;color:#fff !important}

/* Icons must never inherit a theme accent */
.eos-site .burger{color:var(--ink) !important;background:#fff}
.eos-site .burger svg path{stroke:var(--ink)}
.eos-site .mbar a{color:var(--body) !important;text-decoration:none !important}
.eos-site .mbar a.pri{background:var(--i600) !important;color:#fff !important}
.eos-site .mbar a svg{color:inherit}
.eos-site .nav-b,.eos-site a.nav-b{text-decoration:none !important;color:var(--ink) !important}
.eos-site .nav-b:hover,.eos-site a.nav-b:hover{color:var(--i700) !important}
.eos-site .mega a,.eos-site .ftr a,.eos-site .loc-list a,.eos-site .drawer a{text-decoration:none !important}
.eos-site .logo,.eos-site a.logo{text-decoration:none !important;color:var(--ink) !important}
.eos-site .ftr .logo,.eos-site .ftr a.logo{color:#fff !important}

/* ═══════════════════════════════════════════════════════════
   58 · TOOL PAGES — width and vertical rhythm
   The cards sat in a wide margin and there was dead space
   between the page title and the tool.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:900px){/* Tools use exactly the same gutter as every other section, so the
     calculator on the homepage and the calculator on its own page are
     identical. The narrower override made them inconsistent. */
  .tool,.calc,.req,.strat{width:100%;max-width:100%;margin-inline:0}
  .tool-q,.tool-r,.calc-in,.calc-out{padding:20px 16px}
  .req-form,.req-aside{padding:20px 16px}

  /* A page hero immediately followed by a tool had two lots of padding */
  .pg-hero + .sect,.pg-hero + section > .wrap > .sect-head{padding-top:0}
  .pg-hero + .sect{padding-top:18px}
  .sect-head{margin-bottom:20px}
  .sect-head .eyebrow{margin-bottom:12px}
  .sect-head h2{margin-bottom:10px}

  /* Long eyebrows were wrapping to three lines */
  .eyebrow{font-size:.6rem;letter-spacing:.11em;line-height:1.5}
  .eyebrow::before{width:16px}}

/* ═══════════════════════════════════════════════════════════
   59 · WHITESPACE AUDIT
   Collapsing the gaps that stack up when sections meet.
   ═══════════════════════════════════════════════════════════ */
.eos-site section:last-child{padding-bottom:clamp(38px,5vw,72px)}
.eos-site .sect + .climb{margin-top:calc(var(--sp) * -0.45)}
.eos-site .climb + .sect{padding-top:calc(var(--sp) * 0.6)}
.eos-site .pg-hero + .capsule-band{padding-top:6px}
.eos-site .capsule-band + .sect{padding-top:clamp(24px,3vw,40px)}
.eos-site .statband + .sect{padding-top:clamp(24px,3vw,40px)}
.eos-site .sect-head:last-child{margin-bottom:0}
.eos-site .wrap > .sect-head + .rv{margin-top:0}
.eos-site .marq + .proof{margin-top:0}
@media (max-width:900px){
  .eos-site .sect + .climb{margin-top:calc(var(--sp) * -0.3)}
  .eos-site section:last-child{padding-bottom:34px}
  .eos-site .ftr{margin-top:clamp(34px,6vw,60px)}
}

/* The audit aside heading is an h2 for document order but should read
   at h3 scale. */
.req-aside .req-aside-h{font-size:1.02rem;margin-bottom:16px;font-weight:700;
  letter-spacing:-.015em;line-height:1.3}

/* ═══════════════════════════════════════════════════════════
   60 · DESKTOP HEADER
   Reported: "Case Studies" wrapping to two lines, everything
   oversized, and the phone number crowding the bar. The phone
   is in the footer and the mobile bar already.
   ═══════════════════════════════════════════════════════════ */
.hdr-in{gap:clamp(14px,2vw,30px);height:72px}
.nav{gap:2px;margin-left:auto;flex-wrap:nowrap;min-width:0}
.nav-b,.nav > a.nav-b{white-space:nowrap;
  font-size:.92rem;
  padding:9px 11px;
  border-radius:9px;
  line-height:1.2}
.nav-i > .nav-b svg{width:11px;height:11px;opacity:.55;margin-left:1px}
.hdr-cta{gap:10px;flex:none}
.hdr-cta .btn-p{padding:12px 20px;font-size:.9rem;white-space:nowrap;min-height:44px}
.logo{font-size:1.14rem;gap:10px;flex:none}
.logo-mk{width:32px;height:32px}

/* Between 1100 and 1320 the bar gets tight before the drawer takes over */
@media (max-width:1320px){.nav-b,.nav > a.nav-b{font-size:.875rem;padding:9px 9px}
  .hdr-in{gap:14px;padding-inline:20px}
  .hdr-cta .btn-p{padding:11px 16px;font-size:.86rem}
  .logo{font-size:1.06rem}}
@media (max-width:1320px){
  .nav-b,.nav > a.nav-b{font-size:.83rem;padding:8px 7px}
  .hdr-cta .btn-p{padding:10px 14px;font-size:.83rem}
  .logo span{display:inline}
}

/* ═══════════════════════════════════════════════════════════
   61 · CASE STUDY ON DESKTOP
   The pinned chart was flush against the header with no
   breathing room, and the story column read as a floating slab.
   ═══════════════════════════════════════════════════════════ */
@media (min-width:1041px){.cs-scrolly{grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);
    gap:clamp(36px,4vw,72px);align-items:start}
  .cs-sticky{position:sticky;top:104px;padding-block:8px}
  .cs-panel{padding:clamp(20px,2vw,28px);border:1px solid var(--line);
    border-radius:var(--r-lg);background:#fff;box-shadow:var(--sh)}
  #csChart{max-height:340px;width:100%}
  .cs-steps{padding-block:clamp(20px,3vw,48px)}
  .cs-step{min-height:auto;padding-block:clamp(34px,5vw,72px);
    border-bottom:1px solid var(--line)}
  .cs-step:last-child{border-bottom:0}
  .cs-step h3{font-size:clamp(1.3rem,1.1rem + .6vw,1.7rem)}
  .cs-step p{max-width:52ch}
  /* Give the whole scrollytelling block air below the sticky header */
  .eos-case-story .cs-open{padding-block:clamp(46px,5vw,86px) clamp(26px,3vw,44px)}}

/* ═══════════════════════════════════════════════════════════
   62 · CARD GRIDS AT WIDTH
   Case study and resource cards were running one per row and
   reading as a centred column with empty sides.
   ═══════════════════════════════════════════════════════════ */
.cases{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px}
.auto-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
.cols-3{grid-template-columns:repeat(auto-fill,minmax(270px,1fr))}
.cols-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.quotes{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
@media (max-width:640px){
  .cases,.auto-grid,.cols-3,.cols-2{grid-template-columns:1fr}
}

/* ═══════════════════════════════════════════════════════════
   63 · SECTION HEADS AT WIDTH
   A centred head above left-aligned content was the other half
   of the ragged look.
   ═══════════════════════════════════════════════════════════ */
.sect-head{max-width:74ch}
.sect-head .lede{max-width:66ch}
.sect-head.mid{max-width:68ch;margin-inline:auto;text-align:center}
.sect-head.mid .lede{margin-inline:auto}
.eos-case-story .sect > .wrap > .sect-head{max-width:74ch}

/* ═══════════════════════════════════════════════════════════
   64 · SCROLLYTELLING — chart centred in the viewport
   It was pinned to the top of the screen, so the story ran past
   a chart sitting in the upper corner. Centring it vertically is
   what makes the line feel like it is tracking the text.
   ═══════════════════════════════════════════════════════════ */
@media (min-width:1041px){.cs-sticky{
    position:sticky;
    top:var(--hdr-h,72px);
    height:calc(100vh - var(--hdr-h,72px));
    display:flex;
    align-items:center;
    padding-block:0}
  .cs-panel{width:100%;margin-block:0}
  #csChart{max-height:min(46vh,380px)}
  /* First and last steps need half a screen of lead-in and lead-out so the
     chart is still centred when the story starts and ends. */
  .cs-steps{padding-block:calc(28vh - 40px) calc(30vh - 40px)}}
.eos-site{--hdr-h:72px}
.admin-bar .eos-site,body.admin-bar{--hdr-h:104px}

/* ═══════════════════════════════════════════════════════════
   65 · SPACING BETWEEN A SECTION HEAD AND WHAT FOLLOWS
   52px under every head plus 32px under the filter row left a
   visible void on the case studies page.
   ═══════════════════════════════════════════════════════════ */
.sect-head{margin-bottom:clamp(26px,3vw,40px)}
.filters{margin-bottom:clamp(18px,2vw,26px)}
.sect-head h2{margin-bottom:14px}
.sect-head .lede{margin-bottom:0}
#results .sect-head{margin-bottom:clamp(22px,2.4vw,32px)}

/* A page hero straight into a tool or a section head had two lots of space */
.pg-hero + .sect > .wrap > .sect-head{margin-top:0}
.pg-hero + .sect{padding-top:clamp(20px,2.4vw,34px)}
#tools .sect-head,#audit-tool .sect-head,#risk .sect-head,
#automation-calc .sect-head,#ai-visibility .sect-head,#strategist .sect-head{margin-bottom:clamp(20px,2.2vw,30px)}

/* ═══════════════════════════════════════════════════════════
   66 · PHONE GUTTER
   He is happy with the homepage edge distance and wants every
   other page — the tool pages especially — to match it exactly.
   One token, no per-section exceptions.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:640px){:root{--gutter:22px}}
@media (max-width:380px){:root{--gutter:18px}}

/* ═══════════════════════════════════════════════════════════
   67 · TOOLS — content sits the same distance from the edge as
   everywhere else on the site.
   A tool card is gutter + card padding before any content, so
   at 22px + 26px the text started 48px in while the homepage
   started at 22px. Splitting it 8 + 14 puts tool content at
   exactly 22px, matching the rest of the site.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:640px){.eos-site #tools > .wrap,
  .eos-site #audit-tool > .wrap,
  .eos-site #risk > .wrap,
  .eos-site #automation-calc > .wrap,
  .eos-site #ai-visibility > .wrap,
  .eos-site #strategist > .wrap,
  .eos-site #audit-request > .wrap{padding-inline:12px}

  /* The heading above the card still needs the normal gutter, or it
     looks detached from the page. */
  .eos-site #tools > .wrap > .sect-head,
  .eos-site #audit-tool > .wrap > .sect-head,
  .eos-site #risk > .wrap > .sect-head,
  .eos-site #automation-calc > .wrap > .sect-head,
  .eos-site #ai-visibility > .wrap > .sect-head,
  .eos-site #strategist > .wrap > .sect-head,
  .eos-site #audit-request > .wrap > .sect-head{padding-inline:14px}

  .eos-site .calc-in,.eos-site .calc-out,
  .eos-site .tool-q,.eos-site .tool-r,
  .eos-site .req-form,.eos-site .req-aside,
  .eos-site .strat{padding:20px 14px}

  /* Radius eases off as the card approaches the edge */
  .eos-site .calc,.eos-site .tool,.eos-site .req-form,
  .eos-site .req-aside,.eos-site .strat{border-radius:14px}}
@media (max-width:380px){
  .eos-site #tools > .wrap,.eos-site #audit-tool > .wrap,
  .eos-site #risk > .wrap,.eos-site #automation-calc > .wrap,
  .eos-site #ai-visibility > .wrap,.eos-site #strategist > .wrap,
  .eos-site #audit-request > .wrap{padding-inline:10px}
  .eos-site .calc-in,.eos-site .calc-out,
  .eos-site .tool-q,.eos-site .tool-r{padding:18px 12px}
}

/* ═══════════ 69 · AUTOMATION CARDS ARE LINKS ═══════════ */
a.auto-card,a.auto-link{text-decoration:none !important;color:inherit;display:flex;flex-direction:column}
a.auto-card h3{color:var(--ink)}
a.auto-card:hover h3{color:var(--i700)}
.auto-go{margin-top:14px;font-size:.82rem;font-weight:600;color:var(--i600);
  display:inline-flex;align-items:center;gap:6px}
.auto-card:hover .auto-go .arw{transform:translateX(4px)}
.auto-go .arw{transition:transform .22s var(--ease)}

/* ═══════════════════════════════════════════════════════════
   70 · CASE STUDY CHART ON PHONES — the version that works
   Two wrong attempts before this: a 227px slab that filled the
   screen, then a 104px strip so small it read as broken. It
   needs to be a proper card, clear of the header, taking about
   half the screen so the line is actually legible.
   ═══════════════════════════════════════════════════════════ */
@media (max-width:1040px){.eos-site .cs-scrolly{display:block}

  .eos-site .cs-sticky{
    position:sticky;
    top:calc(var(--hdr-h,60px) + 20px);
    z-index:20;
    margin-top:14px;
    margin-bottom:24px;
    padding:0}

  .eos-site .cs-panel{
    background:#fff;
    border:1px solid var(--line);
    border-radius:16px;
    padding:13px 14px 10px;
    box-shadow:0 2px 4px rgba(15,23,42,.04),0 16px 34px -22px rgba(15,23,42,.28)}

  /* Roughly half the viewport, floored so a short screen still works */
  .eos-site #csChart{
    max-height:none;
    min-height:0;
    height:clamp(150px,29vh,220px);
    width:100%}

  .eos-site .cs-panel .now{
    display:flex;align-items:baseline;justify-content:space-between;
    margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--line)}
  .eos-site .cs-panel .now .m{font-size:.62rem;letter-spacing:.14em;color:var(--muted)}
  .eos-site .cs-panel .now .v{font-size:1.24rem;font-weight:700;letter-spacing:-.03em}

  .eos-site .cs-steps{padding-block:0}
  .eos-site .cs-step{
    min-height:auto;
    opacity:1;
    padding-block:26px;
    border-bottom:1px solid var(--line)}
  .eos-site .cs-step:last-child{border-bottom:0}
  .eos-site .cs-step .tag{font-size:.62rem;margin-bottom:9px}
  .eos-site .cs-step h3{font-size:1.16rem;margin-bottom:9px;line-height:1.28}
  .eos-site .cs-step p{font-size:.97rem;line-height:1.62}
  .eos-site .cs-step .delta{font-size:.78rem;margin-top:12px}

  /* The chart is pinned, so the story needs somewhere to scroll under it */
  .eos-site .eos-case-story .cs-open{padding-block:26px 18px}}
@media (max-width:640px){
  .eos-site{--hdr-h:60px}
  .eos-site .cs-panel{padding:11px 12px 8px;border-radius:14px}
  .eos-site #csChart{height:clamp(140px,27vh,196px)}
  .eos-site .cs-panel .now .v{font-size:1.12rem}
  .eos-site .ax{font-size:9px}
}

/* ═══════════════════════════════════════════════════════════
   71 · IMPORTED TOOLS
   Rendered with the same .calc shell as the built-in ones, so
   nothing about an imported tool looks bolted on.
   ═══════════════════════════════════════════════════════════ */
.calc[data-ctool] .fld label{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.calc[data-ctool] .fld label .v{font-family:var(--mono);font-size:.94rem;font-weight:700;
  color:var(--i700);font-variant-numeric:tabular-nums}
.calc[data-ctool] .fld-help{font-size:.76rem;color:var(--muted);margin-top:7px;line-height:1.5}
.calc[data-ctool] .res-note{display:block;font-size:.74rem;color:var(--muted);margin-top:6px;line-height:1.5}
.calc[data-ctool] .res.big .v{font-size:clamp(1.7rem,1.2rem + 1.6vw,2.5rem);color:var(--e700)}
.calc[data-ctool] .res.big{padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--line)}
.calc[data-ctool] select.eos-input{width:100%}
.calc[data-ctool] .btn-p{width:100%;justify-content:center;margin-top:8px}

/* ═══════════════════════════════════════════════════════════
   72 · CONSISTENCY PASS
   The stylesheet grew over many rounds and drifted. Everything
   below states one value for a thing that had several.
   ═══════════════════════════════════════════════════════════ */

/* One easing and one duration ladder */
.eos-site a,.eos-site button,.eos-site .btn,.eos-site .card,
.eos-site .auto-card,.eos-site .case,.eos-site .quote,.eos-site .chip,
.eos-site .opt,.eos-site .tab,.eos-site input,.eos-site select,.eos-site textarea{
  transition-timing-function:var(--ease)}

/* Interactive surfaces share one hover lift instead of four */
.eos-site .card:hover,.eos-site .auto-card:hover,
.eos-site .case:hover,.eos-site .geo-c:hover{transform:translateY(-4px)}

/* One focus treatment, stated once, for everything focusable */
.eos-site :is(a,button,input,select,textarea,summary,[tabindex]):focus-visible{
  outline:3px solid var(--i500);outline-offset:2px;border-radius:6px}

/* Inputs shared four different border treatments */
.eos-site :is(input,select,textarea).eos-input{
  border:1.5px solid var(--line);border-radius:var(--r-sm);
  background:#fff;color:var(--ink);font-family:inherit;font-size:.95rem;
  padding:13px 15px;width:100%;transition:border-color var(--t),box-shadow var(--t)}
.eos-site :is(input,select,textarea).eos-input:focus{
  border-color:var(--i400);box-shadow:0 0 0 4px var(--i50)}
.eos-site :is(input,select,textarea).eos-input::placeholder{color:var(--muted);opacity:1}

/* Range thumbs were styled in three places with different sizes */
.eos-site input[type=range]{-webkit-appearance:none;appearance:none;
  width:100%;height:4px;border-radius:99px;background:var(--i100);accent-color:var(--i600)}
.eos-site input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;
  width:22px;height:22px;border-radius:50%;background:var(--i600);
  border:3px solid #fff;box-shadow:0 1px 4px rgba(15,23,42,.25);cursor:pointer}
.eos-site input[type=range]::-moz-range-thumb{width:22px;height:22px;border:3px solid #fff;
  border-radius:50%;background:var(--i600);box-shadow:0 1px 4px rgba(15,23,42,.25);cursor:pointer}

/* Every tappable thing clears the 44px minimum */
@media (pointer:coarse){
  .eos-site :is(a.btn,button,summary,.nav-b,.chip,.opt,.tab,.burger){min-height:44px}
  .eos-site .mbar a{min-height:56px}
  .eos-site input[type=range]{height:6px}
  .eos-site input[type=range]::-webkit-slider-thumb{width:26px;height:26px}
}

/* Scroll anchoring for in-page links, so a target never lands under the header */
.eos-site :target{scroll-margin-top:calc(var(--hdr-h,72px) + 20px)}
.eos-site [id]{scroll-margin-top:calc(var(--hdr-h,72px) + 20px)}

/* Long words in user-entered content cannot break the layout */
.eos-site .quote p,.eos-site .cs-step p,.eos-site .card p,
.eos-site .auto-card p{overflow-wrap:anywhere}

/* Images and embeds never exceed their column */
.eos-site :is(img,svg,video,iframe,canvas){max-width:100%;height:auto}
.eos-site iframe{border:0}
