@font-face{font-family:"Plus Jakarta Sans";src:url("data:font/woff2;base64,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") format("woff2");font-weight:200 800;font-display:swap;font-style:normal}
@font-face{font-family:"Manrope";src:url("data:font/woff2;base64,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") format("woff2");font-weight:200 800;font-display:swap;font-style:normal}
:root{
  /* Creo spacing token contract. Every gap is a token. See
     docs/CREO_SPACING_TOKEN_CONTRACT.md for the measured violations that caused it. */
  --sp-icon-head:12px; --sp-head-desc:12px; --sp-desc-action:20px; --sp-chip-head:8px;
  --sp-pad-micro:20px; --sp-pad-standard:24px; --sp-pad-feature:32px;
  --sp-grid-gap:24px; --sp-section-gap:64px; --sp-cta-inner:16px; --sp-faq-gap:12px;
  --sp-card-gap-m:16px; --sp-section-gap-m:40px;
--bg:#08080a; --bg-1:#0e0e11; --bg-2:#141418; --bg-3:#1a1a20;
--ink:#f7f7f8; --ink-2:#a0a0a9; --ink-3:#8a8a94; --ink-4:#7d7d87;
--line:rgba(255,255,255,.07); --line-2:rgba(255,255,255,.12); --line-3:rgba(255,255,255,.2);
--accent:#0EA5E9;--accent-rgb:14,165,233; --accent-hi:#38bdf8;
--accent-btn:#0b7db1;      
--accent-btn-hi:#0a709e;   
--accent-dim:rgba(14,165,233,.06);
--accent-bd:rgba(255,255,255,.12);      
--accent-glow:rgba(14,165,233,.14);
--accent-wash:rgba(14,165,233,.07);     
--font-d:"Plus Jakarta Sans",ui-sans-serif,system-ui,sans-serif;
--font-b:"Manrope",ui-sans-serif,system-ui,sans-serif;
--font-m:ui-monospace,SFMono-Regular,Menlo,monospace;
--s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:20px; --s-6:24px;
--s-7:32px; --s-8:40px; --s-9:48px; --s-10:64px; --s-11:80px; --s-12:96px;
--s-13:120px; --s-14:160px;
--pad-lg:40px; --pad:32px; --pad-sm:24px; --pad-xs:20px;
--r-pill:999px; --r-lg:16px; --r-md:12px; --r-sm:8px;
--nav-h:72px; --wrap:1200px; --gutter:var(--s-6); --sec:var(--s-12);
--ease:cubic-bezier(.16,1,.3,1);
--t-fast:150ms; --t:300ms; --t-slow:600ms;
color-scheme:dark;
}
@media (min-width:1024px){:root{--gutter:var(--s-8)}}
@media (max-width:900px){:root{--sec:var(--s-10);--nav-h:64px}}
@media (max-width:600px){:root{--sec:var(--s-9);--gutter:var(--s-5)}}
*,*::before,*::after{box-sizing:border-box}
*{margin:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + var(--s-7))}
body{background:var(--bg);color:var(--ink);font-family:var(--font-b);font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:clip}
img,svg,video,canvas{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
button,input,textarea,select{font:inherit;color:inherit}
ul,ol{list-style:none;padding:0}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--r-sm)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
html{scroll-behavior:auto}
*,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
}
h1,h2,h3,h4{font-family:var(--font-d);font-weight:700;line-height:1.12;letter-spacing:-.022em}
h1{font-size:clamp(33px,4.6vw,55px)}
h2{font-size:clamp(27px,3.6vw,40px);letter-spacing:-.02em}
h3{font-size:clamp(19px,2vw,23px);letter-spacing:-.012em;line-height:1.25}
h4{font-size:17px;letter-spacing:-.008em}
p{text-wrap:pretty}
.lede{font-size:clamp(17px,1.9vw,20px);color:var(--ink-2);line-height:1.62;max-width:62ch}
.eyebrow{font-family:var(--font-m);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);font-weight:500}
.muted{color:var(--ink-2)} .muted-2{color:var(--ink-3)} .small{font-size:14px}
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gutter)}
.sec{padding-block:var(--sec)}
.sec-t{padding-top:var(--sec)}
.stack>*+*{margin-top:var(--s-4)}
.grid{display:grid;gap:var(--s-6)}
@media(min-width:760px){.g-2{grid-template-columns:repeat(2,1fr)}.g-3{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1000px){.g-3{grid-template-columns:repeat(3,1fr)}}
.sec-head{max-width:66ch;margin-bottom:var(--s-9)}
.sec-head h2{margin-top:var(--s-3)}
.sec-head p{margin-top:var(--s-4)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);white-space:nowrap;min-height:48px;padding:var(--s-3) var(--s-6);border:1px solid var(--line-2);border-radius:var(--r-pill);font-weight:600;font-size:15px;line-height:1;cursor:pointer;background:transparent;transition:background var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease)}
.btn:hover{border-color:var(--line-3);background:rgba(255,255,255,.05)}
.btn:active{transform:scale(.97)}
.btn .fx{position:relative;display:grid;overflow:hidden;height:auto;line-height:inherit;white-space:normal;padding-block:4px;margin-block:-4px}
.btn-primary{background:var(--accent-btn);border-color:var(--accent-btn);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,.22)}
.btn-primary:hover{background:var(--accent-btn-hi);border-color:var(--accent-btn-hi)}
.btn-sm{min-height:40px;padding:var(--s-2) var(--s-4);font-size:14px}
.btn-block{width:100%}
.btn .ic{width:14px;height:14px;flex:none;fill:currentColor}
.cta-row{display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:center}
.tlink{display:inline-flex;align-items:center;gap:var(--s-2);font-size:15px;font-weight:600;color:var(--accent);padding-block:var(--s-1);transition:gap var(--t-fast) var(--ease)}
.tlink:hover{gap:var(--s-3)}
.tlink .ic{width:12px;height:12px;fill:currentColor}
.card{background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--pad);
transition:border-color var(--t) var(--ease),transform var(--t) var(--ease)}
.card-sm{padding:var(--pad-sm)}
.card-hover{transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.card-hover:hover{border-color:var(--line-2);background:var(--bg-2)}
.pill{display:inline-flex;align-items:center;gap:var(--s-2);height:26px;padding-inline:var(--s-3);border:1px solid var(--line-2);border-radius:var(--r-pill);background:rgba(255,255,255,.03);font-size:12px;font-weight:600;color:var(--ink-2);font-family:var(--font-m);letter-spacing:.02em}
.rule{height:1px;background:var(--line);border:0}
.nav{position:fixed;inset:0 0 auto 0;z-index:60;height:var(--nav-h);display:flex;align-items:center;
border-bottom:1px solid transparent;
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.nav.is-stuck{background:rgba(8,8,10,.72);backdrop-filter:saturate(150%) blur(14px);
-webkit-backdrop-filter:saturate(150%) blur(14px);border-bottom-color:var(--line)}
body{padding-top:var(--nav-h)}
.nav-in{display:flex;align-items:center;gap:var(--s-6);width:100%}
.brand{display:inline-flex;align-items:center;gap:8px;min-height:48px;flex:none;color:var(--ink);
transition:opacity var(--t-fast) var(--ease)}
.brand:hover{opacity:.78}
.brand .mark{width:22px;height:22px;color:var(--ink);flex:none}
.wordmark{font-family:var(--font-d);font-weight:700;font-size:18px;letter-spacing:-.025em}
@media(max-width:600px){.brand .mark{width:20px;height:20px}.wordmark{font-size:17px}}
.nav-links{display:none;align-items:center;gap:var(--s-6);margin-left:var(--s-4)}
.nav-links a{display:inline-flex;align-items:center;min-height:40px;padding:0 var(--s-3);
border-radius:var(--r-pill);font-size:15px;font-weight:500;color:var(--ink-2);
transition:color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.nav-links a:hover{color:var(--ink);background:rgba(255,255,255,.05)}
.nav-links a[aria-current]{color:var(--ink)}
.fx{position:relative;display:inline-block;overflow:hidden;white-space:pre;
height:1.35em;line-height:1.35}
.fx-a,.fx-b{display:block;height:1.35em;line-height:1.35em;white-space:pre;
transition:transform 420ms var(--ease)}
.fx-b{position:absolute;left:0;top:0;transform:translateY(105%);pointer-events:none}
.fx-b span{display:inline-block}
.fx-b span[data-g]{color:var(--accent)}
.nav-link:hover .fx.is-ready .fx-a,.nav-link:focus-visible .fx.is-ready .fx-a{transform:translateY(-105%)}
.nav-link:hover .fx.is-ready .fx-b,.nav-link:focus-visible .fx.is-ready .fx-b{transform:translateY(0)}
.btn .fx-a{display:block;height:auto;line-height:inherit;white-space:normal;
transform:translateY(0);transition:transform 420ms var(--ease)}
.btn .fx-b{display:block;position:absolute;left:0;top:4px;width:100%;height:auto;
line-height:inherit;white-space:normal;transform:translateY(110%);pointer-events:none}
form .fx-b{display:none}
.btn-primary .fx-b span[data-g]{color:#cbeafd}
.btn:hover .fx.is-ready .fx-a,.btn:focus-visible .fx.is-ready .fx-a{transform:translateY(-110%)}
.btn:hover .fx.is-ready .fx-b,.btn:focus-visible .fx.is-ready .fx-b{transform:translateY(0)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.fx{overflow:visible}
.fx-a{transform:none!important;transition:none}
.fx-b{display:none}
}
.nav-cta{display:none}
.nav-tog{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:transparent}
.nav-tog .bars{position:relative;display:block;width:16px;height:10px}
.nav-tog .bars i{position:absolute;left:0;width:100%;height:1.5px;background:var(--ink);border-radius:2px;
transition:transform var(--t) var(--ease),opacity var(--t) var(--ease)}
.nav-tog .bars i:first-child{top:0}
.nav-tog .bars i:last-child{bottom:0}
.nav-tog[aria-expanded="true"] .bars i:first-child{transform:translateY(4.25px) rotate(45deg)}
.nav-tog[aria-expanded="true"] .bars i:last-child{transform:translateY(-4.25px) rotate(-45deg)}
@media(min-width:1000px){.nav-links{display:flex}.nav-tog{display:none}
.nav-cta{margin-left:auto;display:flex;align-items:center;gap:var(--s-3)}}
.mnav{display:none;position:fixed;inset:var(--nav-h) 0 0;z-index:55;background:var(--bg);padding:var(--s-7) var(--gutter);overflow-y:auto}
.mnav.is-open{display:block}
.mnav a{display:block;padding:var(--s-4) 0;border-bottom:1px solid var(--line)}
.mnav-t{display:block;font-size:17px;font-family:var(--font-d);font-weight:600;color:var(--ink);
letter-spacing:0;word-spacing:.05em}
.mnav-d{display:block;margin-top:2px;font-size:13px;line-height:1.45;color:var(--ink-4)}
.mnav-g{margin:var(--s-5) 0 0;font-family:var(--font-m);font-size:11px;letter-spacing:.08em;
text-transform:uppercase;color:var(--ink-4)}
.mnav .btn{margin-top:var(--s-7)}
.hero{position:relative;padding-top:var(--s-10);padding-bottom:var(--s-11);overflow:clip}
.hero-bg{position:absolute;inset:0;z-index:0;pointer-events:none}
.hero-bg canvas{position:absolute;inset:0}
.hero .wrap{position:relative;z-index:1}
.hero h1{max-width:19ch}
.hero .lede{margin-top:var(--s-5)}
.hero .cta-row{margin-top:var(--s-7)}
.hero-note{margin-top:var(--s-5);font-size:14px;color:var(--ink-3)}
.ui{background:var(--bg-1);border:1px solid var(--line-2);border-radius:var(--r-lg);overflow:hidden}
.ui-bar{display:flex;align-items:center;gap:var(--s-2);padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--line);background:var(--bg-2)}
.ui-dot{width:9px;height:9px;border-radius:50%;background:var(--line-3);flex:none}
.ui-title{font-family:var(--font-m);font-size:12px;color:var(--ink-3);margin-left:var(--s-2)}
.ui-body{padding:var(--pad-sm)}
.msg{display:flex;gap:var(--s-3);margin-bottom:var(--s-4);align-items:flex-start}
.msg:last-child{margin-bottom:0}
.msg-av{width:26px;height:26px;border-radius:50%;flex:none;display:grid;place-items:center;font-size:11px;font-weight:700;font-family:var(--font-m)}
.msg-av.u{background:var(--bg-3);color:var(--ink-2);border:1px solid var(--line-2)}
.msg-av.b{background:var(--accent-dim);color:var(--accent);border:1px solid rgba(14,165,233,.3)}
.msg-tx{font-size:14px;line-height:1.55;color:var(--ink-2);padding-top:2px}
.msg-tx strong{color:var(--ink);font-weight:600}
.src{display:inline-flex;align-items:center;gap:8px;margin-top:var(--s-2);padding:4px 8px;border:1px solid var(--line-2);border-radius:var(--r-pill);font-family:var(--font-m);font-size:11px;color:var(--ink-3)}
.bento{display:grid;gap:var(--s-4);grid-template-columns:1fr}
@media(min-width:760px){.bento{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1040px){
.bento{grid-template-columns:repeat(6,1fr);grid-auto-rows:minmax(210px,auto)}
}
.bento-card{position:relative;background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--pad-sm);overflow:hidden;display:flex;flex-direction:column;gap:var(--s-3);transition:border-color var(--t) var(--ease)}
.bento-card:hover{border-color:var(--accent-bd)}
.bento-card h3{font-size:19px}
.bento-card p{font-size:15px;color:var(--ink-2);line-height:1.55}
.bento-ic{display:none}
.bento-ic svg{width:15px;height:15px;stroke:var(--accent);fill:none;stroke-width:1.7}
@media(min-width:1040px){}
.vrow{display:flex;align-items:center;gap:var(--s-2);padding:8px 8px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-2);font-family:var(--font-m);font-size:12px;color:var(--ink-2);margin-bottom:8px}
.vrow:last-child{margin-bottom:0}
.vrow .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex:none}
.vrow .rt{margin-left:auto;color:var(--ink-3);font-size:11px}
.bar{height:6px;border-radius:3px;background:var(--bg-3);overflow:hidden;margin-top:8px}
.bar i{display:block;height:100%;background:var(--accent);border-radius:3px}
.ptoggle{display:inline-flex;align-items:center;gap:var(--s-3);padding:4px;border:1px solid var(--line-2);border-radius:var(--r-pill);background:var(--bg-1)}
.ptoggle button{min-height:38px;padding-inline:var(--s-5);border:0;border-radius:var(--r-pill);background:transparent;color:var(--ink-2);font-size:14px;font-weight:600;cursor:pointer;transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}
.ptoggle button[aria-pressed="true"]{background:var(--accent-btn);color:#fff}
.psave{font-family:var(--font-m);font-size:12px;color:var(--accent);font-weight:600}
@media(min-width:680px){}
@media(min-width:1100px){}
.tier{position:relative;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);padding:var(--pad-sm);display:flex;flex-direction:column}
.tier.pop{border-color:var(--accent-bd);background:var(--bg-2)}
.tier h3{font-size:17px}
.tier .btn{margin-top:var(--s-5)}
.tscroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:var(--r-lg)}
table{border-collapse:collapse;width:100%;min-width:560px;font-size:14px}
th,td{text-align:left;padding:var(--s-4);border-bottom:1px solid var(--line);vertical-align:top}
th{font-family:var(--font-d);font-weight:600;font-size:13px;color:var(--ink-3);letter-spacing:.02em;background:var(--bg-1)}
td{color:var(--ink-2)} td strong{color:var(--ink);font-weight:600}
tr:last-child td{border-bottom:0}
.prose{max-width:70ch}
.prose>*+*{margin-top:var(--s-5)}
.prose h2{margin-top:var(--s-11);font-size:clamp(23px,2.6vw,29px)}
.prose h3{margin-top:var(--s-9);font-size:20px}
.prose p{color:var(--ink-2);line-height:1.72}
.prose strong{color:var(--ink);font-weight:600}
.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--accent-bd)}
.prose a:hover{text-decoration-color:var(--accent)}
.prose ul,.prose ol{padding-left:var(--s-6);color:var(--ink-2)}
.prose ul li{list-style:disc;padding-block:4px} .prose ol li{list-style:decimal;padding-block:4px}
.prose li::marker{color:var(--accent)}
.prose blockquote{border-left:2px solid var(--accent-bd);padding-left:var(--s-5);color:var(--ink-2);font-style:normal}
.prose code{font-family:var(--font-m);font-size:.88em;background:var(--bg-2);border:1px solid var(--line);padding:2px 8px;border-radius:5px;color:var(--accent-hi)}
.prose pre{background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--pad-sm);overflow-x:auto}
.prose pre code{background:0;border:0;padding:0;color:var(--ink-2);font-size:13px;line-height:1.6}
.callout{background:var(--bg-1);border:1px solid var(--line-2);border-left:2px solid var(--accent);border-radius:var(--r-md);padding:var(--pad-sm);font-size:15px;color:var(--ink-2)}
.callout strong{color:var(--ink)}
.amet{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-3);font-size:14px;color:var(--ink-3);margin-top:var(--s-6)}
.avat{width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.05);border:1px solid var(--line-2);display:grid;place-items:center;font-size:12px;font-weight:700;color:var(--ink-2);font-family:var(--font-m)}
.plist{display:grid;gap:var(--s-4)}
@media(min-width:760px){.plist{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1100px){.plist{grid-template-columns:repeat(3,1fr)}}
.pcard{display:flex;flex-direction:column;gap:var(--s-3);height:100%}
.pcard h3{font-size:18px;line-height:1.32}
.pcard p{font-size:14px;color:var(--ink-2);line-height:1.55}
.pcard .amet{margin-top:auto;padding-top:var(--s-4);font-size:13px}
.ptag{font-family:var(--font-m);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.foot{border-top:1px solid var(--line);padding-block:var(--s-11) var(--s-8);
margin-top:var(--s-12);position:relative;background:0}
.foot::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:-1;
background:linear-gradient(180deg,rgba(8,8,10,.30),rgba(8,8,10,.62))}
.foot-grid{display:grid;gap:var(--s-9);grid-template-columns:1fr}
@media(min-width:760px){.foot-grid{grid-template-columns:1.4fr repeat(3,1fr)}}
.foot h4{font-size:12px;font-family:var(--font-m);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-4);font-weight:500;margin-bottom:var(--s-4)}
.foot li{padding-block:8px}
.foot a{font-size:15px;color:var(--ink-2);transition:color var(--t-fast) var(--ease)}
.foot a:hover{color:var(--ink)}
.foot-bot{display:flex;flex-wrap:wrap;gap:var(--s-4);align-items:center;justify-content:space-between;margin-top:var(--s-11);padding-top:var(--s-6);border-top:1px solid var(--line);font-size:14px;color:var(--ink-4)}
/* Reveal parity: Creoglyph animates this with GSAP power3.out over .65s, NOT the
   CSS --ease token. --ease is cubic-bezier(.16,1,.3,1), far more aggressive, which
   put Creobot at 0.83 opacity where Creoglyph was at 0.42. power3.out as a bezier
   is cubic-bezier(.215,.61,.355,1). */
html.anim [data-rise],
html.anim [data-enter]{opacity:0;transform:translateY(16px);filter:blur(10px);
transition:opacity 650ms cubic-bezier(.215,.61,.355,1),
           transform 650ms cubic-bezier(.215,.61,.355,1),
           filter 650ms cubic-bezier(.215,.61,.355,1)}
html.anim [data-enter]{transform:translateY(18px);transition-duration:800ms}
html.anim [data-rise].is-in,
html.anim [data-enter].is-in{opacity:1;transform:none;filter:none}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
html.anim [data-rise],html.anim [data-enter]{opacity:1;transform:none;filter:none;transition:none}
}
.skip{position:absolute;left:-10000px}
.skip:focus{left:var(--gutter);top:var(--s-3);z-index:100;padding:var(--s-3) var(--s-5);background:var(--accent-btn);color:#fff;border-radius:var(--r-sm)}
.glow{position:relative;isolation:isolate}
.glow>*{position:relative;z-index:1}
.glow::before,.glow::after{content:"";position:absolute;inset:0;border-radius:inherit;
pointer-events:none;z-index:0;opacity:0;transition:opacity 260ms var(--ease)}
.glow::before{background:radial-gradient(240px circle at var(--gx,50%) var(--gy,50%),
rgba(14,165,233,.10),transparent 62%);opacity:calc(var(--on,0) * .55)}
.glow::after{padding:1px;
background:conic-gradient(from calc(var(--ga,0deg) - 26deg) at var(--gx,50%) var(--gy,50%),
transparent 0deg,var(--accent) 12deg,var(--accent-hi) 26deg,transparent 52deg);
-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
-webkit-mask-composite:xor;mask-composite:exclude;
opacity:calc(var(--on,0) * .55)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){.glow::before,.glow::after{display:none}}
@media (hover:none),(pointer:coarse){.glow::before,.glow::after{display:none}}
.bento-card{transition:border-color var(--t) var(--ease),transform var(--t) var(--ease)}
.bento-card:hover{border-color:var(--line-2);transform:translateY(-2px)}
.vrow{border-color:var(--line);background:rgba(255,255,255,.02);color:var(--ink-2);
transition:border-color 400ms var(--ease),background 400ms var(--ease),color 400ms var(--ease)}
.vrow .dot{background:var(--ink-4);transition:background 400ms var(--ease),box-shadow 400ms var(--ease)}
.vrow.is-live{border-color:rgba(14,165,233,.34);background:var(--accent-dim);color:var(--ink)}
.vrow.is-live .dot{background:var(--accent);box-shadow:0 0 0 3px rgba(14,165,233,.16)}
.vrow .rt{transition:color 400ms var(--ease)}
.vrow.is-live .rt{color:var(--accent)}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{display:inline-flex;align-items:center;gap:8px;padding:4px 8px;border:1px solid var(--line);
border-radius:var(--r-pill);background:rgba(255,255,255,.02);font-family:var(--font-m);font-size:11.5px;
color:var(--ink-3);opacity:.45;transform:translateY(3px);
transition:opacity 460ms var(--ease),transform 460ms var(--ease),border-color 460ms var(--ease),color 460ms var(--ease)}
.chip.is-in{opacity:1;transform:none;color:var(--ink-2);border-color:var(--line-2)}
.chip i{width:5px;height:5px;border-radius:50%;background:var(--ink-4);flex:none;transition:background 460ms var(--ease)}
.chip.is-in i{background:var(--accent)}
.route{display:grid;gap:8px}
.rpath{display:flex;align-items:center;gap:var(--s-2);padding:8px 8px;border:1px solid var(--line);
border-radius:var(--r-sm);background:rgba(255,255,255,.02);font-family:var(--font-m);font-size:11.5px;
color:var(--ink-3);position:relative;overflow:hidden;
transition:border-color 420ms var(--ease),color 420ms var(--ease)}
.rpath .tag{margin-left:auto;font-size:10.5px;color:var(--ink-4);transition:color 420ms var(--ease)}
.rpath.is-live{border-color:rgba(14,165,233,.34);color:var(--ink)}
.rpath.is-live .tag{color:var(--accent)}
.rpath::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,
transparent,rgba(14,165,233,.14),transparent);transform:translateX(-100%)}
.rpath.is-live::after{animation:sweep 900ms var(--ease)}
@keyframes sweep{to{transform:translateX(100%)}}
.status{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--r-pill);
border:1px solid var(--line-2);background:rgba(255,255,255,.02);font-family:var(--font-m);font-size:11.5px;
color:var(--ink-2);transition:border-color 500ms var(--ease),color 500ms var(--ease),background 500ms var(--ease)}
.status .who{transition:opacity 300ms var(--ease)}
.status.is-human{border-color:rgba(14,165,233,.34);background:var(--accent-dim);color:var(--ink)}
.status .av{width:16px;height:16px;border-radius:50%;display:grid;place-items:center;font-size:9px;
background:rgba(255,255,255,.07);color:var(--ink-2);transition:background 500ms var(--ease),color 500ms var(--ease)}
.status.is-human .av{background:var(--accent);color:#04222f}
.deploy{display:flex;align-items:center;gap:var(--s-3)}
.dcode{flex:1;min-width:0;padding:8px 8px;border:1px solid var(--line);border-radius:var(--r-sm);
background:rgba(255,255,255,.02);font-family:var(--font-m);font-size:11px;color:var(--ink-3);
white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dstate{font-family:var(--font-m);font-size:11px;color:var(--ink-4);flex:none;
transition:color 500ms var(--ease)}
.dstate.is-live{color:var(--accent)}
.gap-row{display:grid;grid-template-columns:1fr auto;gap:4px var(--s-3);align-items:center;margin-bottom:8px}
.gap-row:last-child{margin-bottom:0}
.gap-q{font-size:12px;color:var(--ink-2);line-height:1.3}
.gap-n{font-family:var(--font-m);font-size:11px;color:var(--ink-4)}
.gap-bar{grid-column:1/-1;height:4px;border-radius:2px;background:rgba(255,255,255,.06);overflow:hidden}
.gap-bar i{display:block;height:100%;width:0;border-radius:2px;background:var(--accent);
transition:width 900ms var(--ease)}
.own{display:grid;gap:8px}
.orow{display:flex;align-items:center;gap:var(--s-3);padding:8px 8px;border:1px solid var(--line);
border-radius:var(--r-sm);background:rgba(255,255,255,.02);font-size:12px;color:var(--ink-2)}
.sw{margin-left:auto;width:26px;height:15px;border-radius:var(--r-pill);background:rgba(255,255,255,.09);
position:relative;flex:none;transition:background 450ms var(--ease)}
.sw::after{content:"";position:absolute;top:2px;left:2px;width:11px;height:11px;border-radius:50%;
background:var(--ink-3);transition:transform 450ms var(--ease),background 450ms var(--ease)}
.orow.is-on .sw{background:rgba(14,165,233,.32)}
.orow.is-on .sw::after{transform:translateX(11px);background:var(--accent)}
.scene{display:grid;gap:var(--s-4);grid-template-columns:1fr}
@media(min-width:900px){
.scene{grid-template-columns:minmax(0,.85fr) minmax(0,1.3fr) minmax(0,.85fr);align-items:start}
}
.scene .ui-body{padding:var(--s-4)}
.scene-note{margin-top:var(--s-4);font-size:12px;line-height:1.45;color:var(--ink-4)}
.lead-row{display:flex;align-items:center;gap:var(--s-2);margin-top:var(--s-4);padding:8px 8px;
border:1px dashed var(--line-2);border-radius:var(--r-sm);font-size:12px;color:var(--ink-3);
font-family:var(--font-m)}
.lead-row .lead-ic{color:var(--accent)}
.lead-row .rt{margin-left:auto;color:var(--ink-4)}
.scene .msg-tx{font-size:13.5px}
.scene .gap-q{font-size:11.5px}
.idx{display:flex;align-items:center;gap:var(--s-3);margin-top:var(--s-4)}
.idx-l,.idx-n{font-family:var(--font-m);font-size:11px;color:var(--ink-4);flex:none}
.idx-bar{flex:1;height:4px;border-radius:2px;background:rgba(255,255,255,.06);overflow:hidden}
.idx-bar i{display:block;height:100%;width:0;border-radius:2px;background:var(--accent);
transition:width 1600ms var(--ease)}
.bento-card .chips{min-height:0}
@media(min-width:1040px){}
.rule-top{border-top:1px solid var(--line)}
.sec-head{max-width:60ch;margin-bottom:var(--s-9)}
.sec-head h2{margin:0}
.sec-head p{margin-top:var(--s-5)}
.lead-in{font-size:13px;font-family:var(--font-m);color:var(--ink-4);margin-bottom:var(--s-5);
display:flex;align-items:center;gap:var(--s-3)}
.lead-in::after{content:"";height:1px;flex:1;background:var(--line)}
.vs{display:grid;gap:0;border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
@media(min-width:820px){.vs{grid-template-columns:1fr 1fr}}
@media(min-width:820px){}
.loop{display:grid;gap:var(--s-3)}
@media(min-width:900px){.loop{grid-template-columns:repeat(6,1fr)}}
@media(min-width:900px){
}
.tickets{display:grid;gap:var(--s-4);grid-template-columns:1fr;margin-top:var(--s-9);align-items:start}
@media(min-width:680px){.tickets{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1120px){.tickets{grid-template-columns:repeat(4,1fr)}}
.ticket{position:relative;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
display:flex;flex-direction:column;overflow:hidden;
transition:border-color var(--t) var(--ease)}
.ticket.is-pop{border-color:rgba(14,165,233,.34)}
.tk-stub{padding:var(--s-5) var(--pad-sm) var(--s-6)}
.tk-name{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-3)}
.tk-name h3{font-size:15px;font-family:var(--font-m);font-weight:500;letter-spacing:.04em;
text-transform:uppercase;color:var(--ink-3)}
.tk-tag{font-family:var(--font-m);font-size:10.5px;letter-spacing:.06em;color:var(--accent)}
.tk-price{display:flex;align-items:baseline;gap:4px;margin-top:var(--s-4);font-family:var(--font-d)}
.tk-price .cur{font-size:15px;color:var(--ink-3)}
.tk-price b{font-size:40px;font-weight:700;letter-spacing:-.035em;line-height:1}
.tk-price .per{font-size:13px;color:var(--ink-4)}
.tk-cred{margin-top:var(--s-3);font-family:var(--font-m);font-size:12.5px;color:var(--ink-2)}
.tk-perf{position:relative;height:1px;background:transparent;margin-block:2px}
.tk-perf::before,.tk-perf::after{content:"";position:absolute;top:-8px;width:16px;height:16px;
border-radius:50%;background:var(--bg)}
.tk-perf::before{left:-8px}
.tk-perf::after{right:-8px}
.tk-perf span{position:absolute;left:8px;right:8px;top:0;height:1px;
background:repeating-linear-gradient(90deg,var(--line-2) 0 4px,transparent 4px 9px)}
.tk-body{padding:var(--s-6) var(--pad-sm) var(--pad-sm);display:flex;flex-direction:column;flex:1}
.tk-list{margin-bottom:var(--s-6)}
.tk-list li{display:flex;gap:var(--s-3);align-items:flex-start;font-size:13.5px;color:var(--ink-3);
padding-block:8px;line-height:1.45}
.tk-list .k{flex:none;font-family:var(--font-m);font-size:11px;color:var(--ink-4);margin-top:2px}
.ticket.is-pop .tk-list .k{color:var(--accent)}
.tk-body .btn{margin-top:auto}
.nav{transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.nav.has-mega{background:rgba(8,8,10,.86);backdrop-filter:saturate(150%) blur(18px);
-webkit-backdrop-filter:saturate(150%) blur(18px);border-bottom-color:var(--line)}
.nav,.nav-in{overflow:visible}
.nav-link{display:inline-flex;align-items:center;gap:4px;min-height:38px;padding:0 var(--s-3);
border:0;background:0;border-radius:var(--r-pill);font-family:var(--font-b);font-size:14.5px;
font-weight:500;color:var(--ink-2);cursor:pointer;position:relative;z-index:1;
transition:color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.nav-link:hover{color:var(--ink);background:rgba(255,255,255,.05)}
.nav-link[aria-current]{color:var(--ink)}
.nav-links{position:relative}
.nav-pill{position:absolute;top:50%;left:0;height:38px;margin-top:-20px;z-index:0;
width:var(--pw,0px);transform:translateX(var(--px,0px));
border-radius:var(--r-pill);background:rgba(255,255,255,.07);
opacity:0;pointer-events:none;
transition:transform 380ms cubic-bezier(.16,1,.3,1),width 380ms cubic-bezier(.16,1,.3,1),
opacity 200ms var(--ease)}
.nav-links.has-pill .nav-pill.is-on{opacity:1}
.nav-links.has-pill .nav-link:hover{background:transparent}
.nav-links.has-pill .nav-trig[aria-expanded="true"]{background:transparent}
.nav-pill:not(.is-ready){transition:none}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){.nav-pill{transition:opacity 120ms linear}}
.nav-trig .chev{width:12px;height:12px;opacity:.6;transition:transform var(--t) var(--ease),opacity var(--t) var(--ease)}
.nav-trig[aria-expanded="true"]{color:var(--ink);background:rgba(255,255,255,.06)}
.nav-trig[aria-expanded="true"] .chev{transform:rotate(180deg);opacity:1}
.mega{position:absolute;left:0;top:8px;z-index:59;
transform:translateX(var(--mx,0px));
opacity:0;pointer-events:none;
transition:transform 420ms cubic-bezier(.16,1,.3,1),opacity 200ms var(--ease)}
.mega[hidden]{display:none}
.mega.is-open{opacity:1;pointer-events:auto}
.mega:not(.is-ready){transition:none}
.mega-card{overflow:hidden;
border:1px solid var(--line-2);border-radius:var(--r-lg);
background:#0b0b0e;
box-shadow:0 1px 0 rgba(255,255,255,.04) inset,
0 28px 60px -32px rgba(0,0,0,.95);
transition:width 420ms cubic-bezier(.16,1,.3,1),height 420ms cubic-bezier(.16,1,.3,1)}
.mega:not(.is-ready) .mega-card{transition:none}
.mega-sizer{position:relative}
.mega-in{display:grid;gap:var(--s-8);padding:var(--s-7);grid-template-columns:1fr;
width:max-content}
.mega-in[hidden]{display:none !important}
@media(min-width:1000px){
.mega-in{grid-template-columns:minmax(0,240px) minmax(0,auto)}
}
.mg-side{max-width:26ch;padding-right:var(--s-7);border-right:1px solid var(--line)}
.mg-side-t{font-family:var(--font-d);font-weight:700;font-size:17px;letter-spacing:-.005em;word-spacing:.04em}
.mg-side-d{margin-top:var(--s-3);font-size:13.5px;line-height:1.55;color:var(--ink-3)}
.mg-side .tlink{margin-top:var(--s-5)}
.mg-cols{display:flex;gap:var(--s-7);align-items:flex-start}
.mg-col{min-width:0}
.mg-ct{margin:0 0 var(--s-3);padding-left:var(--s-3);
font-family:var(--font-m);font-size:11px;letter-spacing:.08em;text-transform:uppercase;
color:var(--ink-4)}
.mg-list{display:grid;gap:2px}
.mg-item{display:flex;gap:var(--s-3);align-items:flex-start;padding:8px var(--s-3);
border-radius:var(--r-md);border:1px solid transparent;width:max-content;max-width:min(25ch,100%);
transition:background var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}
.mg-item:hover{background:rgba(255,255,255,.04);border-color:var(--line)}
.mg-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.mg-mark{flex:none;width:28px;height:28px;border-radius:var(--r-sm);display:grid;place-items:center;
border:1px solid var(--line);background:rgba(255,255,255,.02);
transition:border-color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.mg-item:hover .mg-mark{border-color:var(--line-2);background:rgba(255,255,255,.05)}
.mg-mark svg{width:14px;height:14px;stroke:var(--ink-4);fill:none;stroke-width:1.5;
stroke-linecap:round;stroke-linejoin:round;transition:stroke var(--t-fast) var(--ease)}
.mg-item:hover .mg-mark svg{stroke:var(--ink-2)}
.mg-tx{min-width:0}
.mg-t{display:block;font-family:var(--font-d);font-weight:600;font-size:14px;color:var(--ink);
letter-spacing:0;word-spacing:.08em}
.mg-d{display:block;margin-top:2px;font-size:12.5px;line-height:1.4;color:var(--ink-4);
transition:color var(--t-fast) var(--ease)}
.mg-item:hover .mg-d{color:var(--ink-3)}
.mega-layer{position:absolute;left:0;right:0;top:100%;height:0;z-index:59}
.mega-layer[hidden]{display:none}
.nav-scrim{position:fixed;inset:var(--nav-h) 0 0;z-index:58;background:rgba(4,4,6,.5);
opacity:0;transition:opacity 220ms var(--ease)}
.nav-scrim[hidden]{display:none}
.nav-scrim.is-on{opacity:1}
@media(max-width:999px){.mega,.mega-layer,.nav-scrim{display:none !important}}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.mega,.mega-card{transition:none}
.nav-trig .chev{transition:none}
}
.mnav-h{font-family:var(--font-m);font-size:11px;letter-spacing:.1em;text-transform:uppercase;
color:var(--ink-4);padding-top:var(--s-6);padding-bottom:var(--s-2)}
.mnav-h:first-child{padding-top:0}
.mnav a{font-size:17px;padding:var(--s-3) 0}
.hero-demo{margin-top:var(--s-9)}
.demo{position:relative}
.demo-rail{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-bottom:var(--s-5)}
.demo-step{display:inline-flex;align-items:center;gap:8px;padding:4px 12px;border-radius:var(--r-pill);
border:1px solid var(--line);background:rgba(255,255,255,.02);
font-family:var(--font-m);font-size:11.5px;letter-spacing:.02em;color:var(--ink-4);
transition:color 400ms var(--ease),border-color 400ms var(--ease),background 400ms var(--ease)}
.demo-step::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--line-3);
transition:background 400ms var(--ease),box-shadow 400ms var(--ease)}
.demo-step.is-on{color:var(--ink-2);border-color:var(--line-2)}
.demo-step.is-on::before{background:var(--accent);box-shadow:0 0 0 3px rgba(14,165,233,.14)}
.demo-step.is-done{color:var(--ink-3)}
.demo-step.is-done::before{background:var(--ink-4);box-shadow:none}
.demo-grid{display:grid;gap:var(--s-4);grid-template-columns:1fr;align-items:start}
@media(min-width:1000px){
.demo-grid{grid-template-columns:minmax(0,.82fr) minmax(0,1.36fr) minmax(0,.82fr)}
.demo-chat{margin-top:-12px}
}
.demo .ui-body{padding:var(--s-4)}
.demo .msg-tx{font-size:13.5px}
.demo .gap-q{font-size:11.5px}
.scene-note{margin-top:var(--s-4);font-size:12px;line-height:1.45;color:var(--ink-4)}
.msg-av.h{background:rgba(255,255,255,.09);color:var(--ink);border:1px solid var(--line-2)}
.src-miss{border-style:dashed;color:var(--ink-4)}
.lead-row{display:flex;align-items:center;gap:var(--s-2);margin-top:var(--s-4);padding:8px 8px;
border:1px dashed var(--line-2);border-radius:var(--r-sm);font-size:12px;color:var(--ink-3);
font-family:var(--font-m)}
.lead-row .lead-ic{color:var(--accent)}
.lead-row .rt{margin-left:auto;color:var(--ink-4)}
html.anim .demo.is-live [data-s]{opacity:0;transform:translateY(8px);
transition:opacity 520ms var(--ease),transform 520ms var(--ease)}
html.anim .demo.is-live [data-s].is-shown{opacity:1;transform:none}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
html.anim .demo.is-live [data-s]{opacity:1;transform:none;transition:none}
}
.gap-sum{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-3);
margin-top:var(--s-5);padding-top:var(--s-4);border-top:1px solid var(--line);
font-family:var(--font-m);font-size:11.5px;color:var(--ink-4)}
.gap-sum b{font-family:var(--font-d);font-size:22px;font-weight:700;color:var(--ink);letter-spacing:-.02em}
.lead-row{flex-wrap:wrap;row-gap:4px}
.lead-row .rt{margin-left:auto}
@media(max-width:520px){
.lead-row{font-size:11px}
.lead-row .rt{margin-left:calc(12px + var(--s-2));flex-basis:100%}
}
.story-grid{display:grid;gap:var(--s-8);grid-template-columns:1fr}
@media(min-width:1000px){
.story-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:var(--s-11);align-items:start}
}
.story-step{padding-block:var(--s-9)}
.story-step h3{font-size:clamp(20px,2.1vw,24px);line-height:1.28;letter-spacing:-.018em;
color:var(--ink-4);transition:color 500ms var(--ease)}
.story-step p{margin-top:var(--s-4);font-size:15.5px;line-height:1.65;color:var(--ink-4);
max-width:46ch;transition:color 500ms var(--ease)}
@media(min-width:1000px){
.story-step{padding-block:19vh;position:relative;padding-left:var(--s-7)}
.story-step::before{content:"";position:absolute;left:0;top:19vh;bottom:19vh;width:1px;
background:var(--line)}
.story-step::after{content:"";position:absolute;left:-1px;top:19vh;width:2px;height:0;
background:var(--accent);border-radius:2px;transition:height 600ms var(--ease)}
.story-step.is-on::after{height:calc(100% - 38vh)}
}
.story-step.is-on h3{color:var(--ink)}
.story-step.is-on p{color:var(--ink-2)}
.story-stage{position:relative}
@media(min-width:1000px){
html.anim .story-stage{position:sticky;top:calc(var(--nav-h) + 14vh);height:min(56vh,430px)}
html.anim .stage-inner{position:relative;height:100%}
html.anim .stage-panel{position:absolute;inset:0;opacity:0;transform:translateY(10px);
pointer-events:none;transition:opacity 480ms var(--ease),transform 480ms var(--ease)}
html.anim .stage-panel.is-on{opacity:1;transform:none;pointer-events:auto}
html.anim .stage-panel .ui{height:100%;display:flex;flex-direction:column}
html.anim .stage-panel .ui-body{flex:1;overflow:hidden}
html:not(.anim) .stage-panel{margin-bottom:var(--s-5)}
html:not(.anim) .stage-panel:last-child{margin-bottom:0}
}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
html.anim .stage-panel{transition:none}
}
@media(max-width:999px){
.story-step{padding-block:var(--s-6) var(--s-4)}
.stage-panel{margin-bottom:var(--s-6)}
.stage-panel:last-child{margin-bottom:0}
}
.an-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-4);
padding-block:12px;border-bottom:1px solid var(--line);font-size:13.5px}
.an-row:last-of-type{border-bottom:0}
.an-k{font-family:var(--font-m);font-size:12px;color:var(--ink-4)}
.an-v{font-family:var(--font-d);font-weight:600;color:var(--ink-2)}
.think{padding:var(--s-5);border:1px dashed var(--line-2);border-radius:var(--r-md);
font-size:16px;line-height:1.45;color:var(--ink);background:rgba(255,255,255,.02);
transition:opacity 700ms var(--ease),filter 700ms var(--ease)}
.think.is-gone{opacity:.18;filter:blur(2px)}
.ghost{display:flex;align-items:center;gap:var(--s-3);padding:8px 12px;margin-bottom:8px;
border:1px solid var(--line);border-radius:var(--r-sm);font-size:13px;color:var(--ink-4);
background:rgba(255,255,255,.015)}
.ghost::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--line-3);flex:none}
.ghost:nth-child(2){opacity:.78}.ghost:nth-child(3){opacity:.58}.ghost:nth-child(4){opacity:.4}
.outcomes{display:flex;flex-wrap:wrap;gap:8px;margin-top:var(--s-5)}
.oc{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--r-pill);
border:1px solid var(--line-2);background:rgba(255,255,255,.02);
font-family:var(--font-m);font-size:11.5px;color:var(--ink-3);
opacity:0;transform:translateY(6px);
transition:opacity 420ms var(--ease),transform 420ms var(--ease),
border-color 420ms var(--ease),color 420ms var(--ease)}
.oc::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--accent)}
.stage-panel.is-on .oc{opacity:1;transform:none;border-color:var(--line-2);color:var(--ink-2)}
.stage-panel.is-on .oc[data-oc="1"]{transition-delay:140ms}
.stage-panel.is-on .oc[data-oc="2"]{transition-delay:280ms}
html:not(.anim) .oc{opacity:1;transform:none}
.chain{display:grid;gap:var(--s-3);grid-template-columns:1fr}
@media(min-width:700px){.chain{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1100px){.chain{grid-template-columns:repeat(3,1fr)}}
.node{position:relative;padding:var(--pad-sm);border:1px solid var(--line);border-radius:var(--r-lg);
background:var(--bg-1);display:flex;flex-direction:column;
transition:border-color 550ms var(--ease),background 550ms var(--ease)}
.node.is-on{border-color:var(--line-2);background:var(--bg-2)}
.node h3{font-size:17px;letter-spacing:-.012em;color:var(--ink-2);transition:color 550ms var(--ease)}
.node.is-on h3{color:var(--ink)}
.node>p{margin-top:var(--s-5);padding-bottom:var(--s-5);font-size:13.5px;line-height:1.5;
color:var(--ink-4);transition:color 550ms var(--ease);flex:none}
.node.is-on>p{color:var(--ink-3)}
.quote{font-size:13px;line-height:1.45;color:var(--ink-2);padding:8px 8px;border-radius:var(--r-sm);
background:rgba(255,255,255,.03);border:1px solid var(--line)}
.cite,.after{font-family:var(--font-m);font-size:10.5px;color:var(--ink-4)}
.node.is-on .cite{color:var(--accent)}
.field{font-family:var(--font-m);font-size:12px;color:var(--ink-2);padding:8px 8px;
border:1px dashed var(--line-2);border-radius:var(--r-sm);width:100%}
.swap{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-m);font-size:11.5px}
.swap .from{color:var(--ink-4);font-style:normal;padding:4px 8px;border:1px solid var(--line);
border-radius:var(--r-pill)}
.swap .to{color:var(--ink-3);font-style:normal;padding:4px 8px;border-radius:var(--r-pill);
border:1px solid var(--line);transition:color 550ms var(--ease),border-color 550ms var(--ease)}
.node.is-on .swap .to{color:var(--ink);border-color:var(--line-2)}
.diff{font-family:var(--font-m);font-size:11.5px;line-height:1.5;color:var(--ink-3);
padding:8px 8px;border-radius:var(--r-sm);background:rgba(255,255,255,.02);
border-left:2px solid var(--line-2);transition:border-color 550ms var(--ease)}
.diff .add{font-style:normal;color:var(--ink-4);margin-right:8px;transition:color 550ms var(--ease)}
.node.is-on .diff{border-left-color:var(--accent)}
.node.is-on .diff .add{color:var(--accent)}
.chain-back{margin-top:var(--s-7);max-width:74ch;font-size:14.5px;line-height:1.6;color:var(--ink-4)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.node,.story-step,.stage-panel,.oc{transition:none}
}
.carry{display:flex;flex-wrap:wrap;gap:4px}
.carry i{font-style:normal;font-family:var(--font-m);font-size:10.5px;color:var(--ink-4);
padding:4px 8px;border:1px dashed var(--line);border-radius:var(--r-sm);
transition:color 550ms var(--ease),border-color 550ms var(--ease)}
.node.is-on .carry i{color:var(--ink-3);border-color:var(--line-2)}
.story-prog{display:none}
@media(min-width:1000px){
.story-prog{display:flex;flex-direction:column;gap:8px;position:absolute;left:calc(var(--s-7) * -1);
top:0;bottom:0;justify-content:center;pointer-events:none}
.story-prog b{display:block;width:2px;height:26px;border-radius:2px;background:var(--line);
transition:background 450ms var(--ease),height 450ms var(--ease)}
.story-prog b.is-past{background:var(--line-3)}
.story-prog b.is-now{background:var(--accent);height:38px}
}
@media(max-width:999px){
.story-grid{gap:0}
.story-steps{display:contents}
.story-stage{display:contents}
.stage-inner{display:contents}
.story-prog{display:none}
.story-step{padding:var(--pad-sm) var(--pad-sm) var(--s-5);border:1px solid var(--line);
border-bottom:0;border-radius:var(--r-lg) var(--r-lg) 0 0;background:var(--bg-1);
margin-top:var(--s-5)}
.story-step h3{color:var(--ink);font-size:19px}
.story-step p{color:var(--ink-3);font-size:14.5px}
.stage-panel{margin:0 0 0 0;border:1px solid var(--line);border-top:0;
border-radius:0 0 var(--r-lg) var(--r-lg);padding:0 var(--pad-sm) var(--pad-sm);
background:var(--bg-1)}
.stage-panel .ui{border-color:var(--line)}
.story-step[data-step="0"]{order:1} .stage-panel[data-panel="0"]{order:2}
.story-step[data-step="1"]{order:3} .stage-panel[data-panel="1"]{order:4}
.story-step[data-step="2"]{order:5} .stage-panel[data-panel="2"]{order:6}
.story-step[data-step="3"]{order:7} .stage-panel[data-panel="3"]{order:8}
.story-step[data-step="4"]{order:9} .stage-panel[data-panel="4"]{order:10}
.story-grid{display:flex;flex-direction:column}
.story-step::before,.story-step::after{display:none}
}
.bento{display:grid;gap:var(--s-3);grid-template-columns:1fr}
@media(min-width:760px){.bento{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1080px){
.bento{grid-template-columns:repeat(6,1fr);grid-auto-rows:minmax(0,auto)}
.bx-train{grid-column:span 4}   
.bx-route{grid-column:span 2}
.bx-hand{grid-column:span 2}
.bx-deploy{grid-column:span 2}
.bx-gaps{grid-column:span 2}
.bx-own{grid-column:span 6}
.bx-own{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);
column-gap:var(--s-9);align-items:center}
.bx-own .bx-head,.bx-own>p{grid-column:1}
.bx-own .bx-body{grid-column:2;grid-row:1/3;margin-top:0}
}
.bento-card{position:relative;padding:var(--pad-sm);border:1px solid var(--line);
border-radius:var(--r-lg);background:var(--bg-1);overflow:hidden;
display:flex;flex-direction:column;
transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.bento-card:hover{border-color:var(--line-2);background:var(--bg-2)}
.bx-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--s-2) var(--s-4);
justify-content:space-between}
.bx-head h3{font-size:18px;letter-spacing:-.015em;margin:0}
.bx-tag{font-family:var(--font-m);font-size:10.5px;color:var(--ink-4);letter-spacing:.02em}
.bento-card>p{margin-top:var(--s-3);font-size:14px;line-height:1.5;color:var(--ink-3);max-width:52ch}
.bx-body{margin-top:var(--s-5)}
.bx-note{margin-top:var(--s-3);font-family:var(--font-m);font-size:10.5px;color:var(--ink-4)}
.bx-train .chips{max-width:none}
@media(min-width:1080px){
.bx-train{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
column-gap:var(--s-8);align-items:start}
.bx-train .bx-head,.bx-train>p{grid-column:1}
.bx-train .bx-body{grid-column:2;grid-row:1/3;margin-top:0}
}
.hand{display:grid;gap:var(--s-8);grid-template-columns:1fr}
@media(min-width:1000px){.hand{grid-template-columns:minmax(0,1fr) minmax(0,.9fr);gap:var(--s-11);align-items:start}}
@media(min-width:900px){}
@media(min-width:700px){}
.itag{display:inline-block;margin:0 4px 4px 0;padding:8px 12px;border:1px solid var(--line);
border-radius:var(--r-pill);background:rgba(255,255,255,.02);
font-family:var(--font-m);font-size:11.5px;color:var(--ink-4);
transition:color 450ms var(--ease),border-color 450ms var(--ease),background 450ms var(--ease)}
.itag.is-lit{color:var(--ink-2);border-color:var(--line-2);background:rgba(255,255,255,.04)}
.itag.is-now{color:var(--ink);border-color:rgba(14,165,233,.4)}
@media(min-width:760px){}
@media(min-width:1080px){}
@media(min-width:820px){}
.qt{padding:var(--pad-sm);border:1px solid var(--line);border-radius:var(--r-lg);
background:var(--bg-1);display:flex;flex-direction:column;
transition:border-color var(--t) var(--ease)}
.qt:hover{border-color:var(--line-2)}
.qt blockquote{font-size:14.5px;line-height:1.62;color:var(--ink-2)}
.qt figcaption{margin-top:auto;padding-top:var(--s-5);display:flex;flex-direction:column;gap:2px}
.qt figcaption b{font-family:var(--font-d);font-size:14px;font-weight:600;color:var(--ink)}
.qt figcaption span{font-size:12px;color:var(--ink-4)}
@media(min-width:1080px){
.bento .bx-own,.bento .bx-train{display:grid;align-items:start}
.bento .bx-own{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);column-gap:var(--s-10)}
.bento .bx-train{grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:var(--s-8)}
.bento .bx-own>.bx-head,.bento .bx-own>p{grid-column:1}
.bento .bx-own>.bx-body{grid-column:2;grid-row:1/4;margin-top:0;align-self:center}
.bento .bx-train>.bx-head,.bento .bx-train>p{grid-column:1}
.bento .bx-train>.bx-body{grid-column:2;grid-row:1/4;margin-top:0}
}
.bento-card>p{margin-bottom:var(--s-5)}
.bx-body{margin-top:0;flex:1}
@media(min-width:1080px){
.bento .bx-train>p,.bento .bx-own>p{margin-bottom:0}
.bento .bx-hand .bx-body,.bento .bx-deploy .bx-body,
.bento .bx-route .bx-body,.bento .bx-gaps .bx-body{display:flex;flex-direction:column;
justify-content:flex-start}
}
.bx-foot{margin-top:auto;padding-top:var(--s-4);font-family:var(--font-m);font-size:10.5px;
color:var(--ink-4);border-top:1px dashed var(--line)}
.bento .chip i{background:var(--ink-4)}
.bento .chip.is-in i{background:var(--ink-3)}
.bento .gap-bar i{background:rgba(255,255,255,.14)}
.bento .gap-row:first-of-type .gap-bar i{background:var(--accent)}
.bento .orow:first-child.is-on .sw::after{background:var(--accent)}
.bento .orow:first-child.is-on .sw::after{background:var(--accent)}
.card,.bento-card,.ticket,.node,.qt,.an-card,.loop-step,
.vs-side,.stage-panel .ui,.intg-group,.hand-ui,.ui.glow{
position:relative;isolation:isolate}
.card::before,.card::after,
.bento-card::before,.bento-card::after,
.ticket::before,.ticket::after,
.ig-node::before,.ig-node::after,
.qt::before,.qt::after,
.card::before,.bento-card::before,.ticket::before,.ig-node::before,
.qt::before,.an-card::before{
background:radial-gradient(240px circle at var(--gx,50%) var(--gy,50%),
rgba(14,165,233,.10),transparent 62%);
opacity:calc(var(--on,0) * .55)}
.card::after,.bento-card::after,.ticket::after,.ig-node::after,
.qt::after,.an-card::after{
padding:1px;
background:conic-gradient(from calc(var(--ga,0deg) - 26deg) at var(--gx,50%) var(--gy,50%),
transparent 0deg,var(--accent) 12deg,var(--accent-hi) 26deg,transparent 52deg);
-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
-webkit-mask-composite:xor;mask-composite:exclude;
opacity:calc(var(--on,0) * .55)}
:where(.card,.bento-card,.ticket,.ig-node,.qt)>*{position:relative;z-index:1}
@media (prefers-reduced-motion:reduce),(hover:none),(pointer:coarse){
.card::before,.card::after,.bento-card::before,.bento-card::after,
.ticket::before,.ticket::after,.node::before,.node::after,
.qt::before,.qt::after,.an-card::before,.an-card::after,
}
@media(min-width:680px){
.tickets{align-items:stretch}
.ticket{height:100%}
.tk-stub{min-height:186px;display:flex;flex-direction:column}
.tk-cred{margin-top:auto}
.tk-body{display:flex;flex-direction:column;flex:1}
.tk-list{flex:1}
}
.card:hover,.card.glow:hover,.bento-card:hover,.bento-card.glow:hover,
.ticket:hover,.ticket.glow:hover,.node:hover,.qt:hover,.qt.glow:hover,
.an-card:hover,.ig-node:hover,.faq-item:hover,.faq-item.glow:hover,
.tsl-card:hover,.stage-panel .ui:hover,.hand-ui:hover{
border-color:rgba(255,255,255,.24);
box-shadow:inset 0 1px 0 rgba(255,255,255,.06),
0 0 0 1px rgba(14,165,233,.16),
0 18px 44px -28px rgba(0,0,0,.9)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.card,.bento-card,.ticket,.node,.qt,.an-card,.ig-node,.intg-group{transition:none}
}
@media(min-width:900px){
}
.beam-svg{position:absolute;inset:0;pointer-events:none;z-index:0;overflow:visible}
@media(min-width:900px){
}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){}
.loopstack{display:grid;gap:var(--s-6);grid-template-columns:1fr;align-items:start}
@media(min-width:960px){.loopstack{grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr);gap:var(--s-9)}}
.ls-tabs{display:grid;gap:2px}
.ls-tab{position:relative;display:grid;grid-template-columns:auto 1fr;gap:var(--s-4);
align-items:start;padding:var(--s-4) var(--s-5);border:1px solid transparent;
border-radius:var(--r-md);background:transparent;text-align:left;cursor:pointer;
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.ls-tab:hover{background:rgba(255,255,255,.03);border-color:var(--line)}
.ls-tab:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.ls-tab[aria-selected="true"]{background:var(--bg-1);border-color:var(--line-2)}
.ls-n{font-family:var(--font-m);font-size:11px;color:var(--ink-4);padding-top:4px;
transition:color var(--t) var(--ease)}
.ls-tab[aria-selected="true"] .ls-n{color:var(--accent)}
.ls-t{display:block;font-family:var(--font-d);font-weight:600;font-size:15.5px;color:var(--ink-3);
letter-spacing:-.01em;transition:color var(--t) var(--ease)}
.ls-tab[aria-selected="true"] .ls-t{color:var(--ink)}
.ls-d{display:block;margin-top:4px;font-size:12.5px;line-height:1.45;color:var(--ink-4)}
.ls-bar{position:absolute;left:var(--s-5);right:var(--s-5);bottom:8px;height:1px;
background:rgba(255,255,255,.07);overflow:hidden;opacity:0;transition:opacity var(--t) var(--ease)}
.ls-tab[aria-selected="true"] .ls-bar{opacity:1}
.ls-bar i{display:block;height:100%;width:0;background:var(--accent)}
.ls-tab[aria-selected="true"] .ls-bar i{animation:lsfill 5200ms linear forwards}
.ls-tab[aria-selected="true"].is-held .ls-bar i{animation-play-state:paused}
@keyframes lsfill{to{width:100%}}
.ls-stage{position:relative;min-height:296px}
.ls-pane{position:absolute;inset:0;opacity:0;transform:translateY(8px);pointer-events:none;
transition:opacity 420ms var(--ease),transform 420ms var(--ease)}
.ls-pane[data-on]{opacity:1;transform:none;pointer-events:auto}
.ls-pane .ui{height:100%;display:flex;flex-direction:column}
.ls-pane .ui-body{flex:1;padding:var(--s-5)}
.ls-out{display:flex;align-items:center;gap:8px;margin-top:var(--s-4);font-family:var(--font-m);
font-size:11px;color:var(--ink-3)}
.ls-out .dot{width:4px;height:4px;border-radius:50%;background:var(--accent);
box-shadow:0 0 0 3px rgba(14,165,233,.14)}
.ls-row{display:flex;align-items:center;gap:var(--s-3);padding:8px 8px;border:1px solid var(--line);
border-radius:var(--r-sm);background:rgba(255,255,255,.02);font-family:var(--font-m);font-size:11.5px}
.ls-k{color:var(--ink-2)} .ls-v{margin-left:auto;color:var(--ink-4)}
html:not(.anim) .ls-stage{min-height:0;display:grid;gap:var(--s-4)}
html:not(.anim) .ls-pane{position:static;opacity:1;transform:none;pointer-events:auto}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.ls-bar i{animation:none;width:100%}
.ls-pane{transition:none}
}
.tk-after{display:flex;flex-wrap:wrap;gap:var(--s-5);align-items:center;justify-content:space-between;
margin-top:var(--s-7)}
@media(min-width:1040px){}
.ho-rail{display:grid;gap:2px;align-content:start}
.ho-tab{position:relative;display:grid;grid-template-columns:auto 1fr;gap:var(--s-3) var(--s-4);
align-items:start;padding:var(--s-4) var(--s-5);border:1px solid transparent;border-radius:var(--r-md);
background:transparent;text-align:left;cursor:pointer;
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.ho-tab:hover{background:rgba(255,255,255,.03);border-color:var(--line)}
.ho-tab:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.ho-tab[aria-selected="true"]{background:var(--bg-1);border-color:var(--line-2)}
.ho-tab[aria-selected="true"] .ho-dot{background:var(--accent);box-shadow:0 0 0 4px rgba(14,165,233,.14)}
.ho-tt{font-family:var(--font-d);font-weight:600;font-size:15px;color:var(--ink-3);
transition:color var(--t) var(--ease)}
.ho-tab[aria-selected="true"] .ho-tt{color:var(--ink)}
.ho-td{font-size:12.5px;line-height:1.45;color:var(--ink-4)}
.ho-stage{display:grid;gap:var(--s-4);grid-template-columns:minmax(0,1fr)}
@media(min-width:820px){.ho-stage{grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr)}}
.ho-thread,.ho-packet{min-width:0}
.ho-head,.ho-body{min-width:0}
.ho-body .msg{min-width:0}
.ho-body .msg-tx{min-width:0;overflow-wrap:anywhere}
@media(min-width:1040px){}
.ho-thread,.ho-packet{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
position:relative;isolation:isolate;
transition:border-color var(--t) var(--ease),box-shadow var(--t) var(--ease)}
.ho-thread:hover,.ho-packet:hover{border-color:rgba(255,255,255,.24);
box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 0 0 1px rgba(14,165,233,.16),
0 18px 44px -28px rgba(0,0,0,.9)}
.ho-head,.cta-bar{display:flex;align-items:center;gap:var(--s-2);padding:var(--s-3) var(--s-4);
border-bottom:1px solid var(--line);background:var(--bg-2);border-radius:var(--r-lg) var(--r-lg) 0 0}
.ho-body{padding:var(--s-4)}
.ho-status{margin-left:auto;display:inline-flex;align-items:center;gap:8px;padding:4px 8px;
border-radius:var(--r-pill);border:1px solid var(--line-2);font-family:var(--font-m);font-size:11px;
color:var(--ink-2);transition:border-color 450ms var(--ease),color 450ms var(--ease),background 450ms var(--ease)}
.ho-status .av{width:16px;height:16px;border-radius:50%;display:grid;place-items:center;font-size:9px;
background:rgba(255,255,255,.07);color:var(--ink-2);transition:background 450ms var(--ease),color 450ms var(--ease)}
.ho-status.is-human{border-color:rgba(14,165,233,.34);background:var(--accent-dim);color:var(--ink)}
.ho-status.is-human .av{background:var(--accent);color:#04222f}
.ho-body .msg{opacity:.2;filter:blur(1px);transition:opacity 500ms var(--ease),filter 500ms var(--ease)}
.ho-body .msg.is-on{opacity:1;filter:none}
html:not(.anim) .ho-body .msg{opacity:1;filter:none}
.ho-packet{padding:var(--s-5);display:flex;flex-direction:column;gap:8px}
.ho-pk-t{font-family:var(--font-m);font-size:10.5px;letter-spacing:.06em;color:var(--ink-4);
margin-bottom:var(--s-2)}
.ho-chip{display:flex;align-items:baseline;gap:var(--s-3);padding:8px 8px;border:1px dashed var(--line);
border-radius:var(--r-sm);font-size:12px;opacity:.28;transform:translateY(4px);
transition:opacity 460ms var(--ease),transform 460ms var(--ease),border-color 460ms var(--ease)}
.ho-chip.is-on{opacity:1;transform:none;border-color:var(--line-2)}
.ho-chip.is-sent{border-style:solid;border-color:rgba(14,165,233,.3)}
html:not(.anim) .ho-chip{opacity:1;transform:none}
.ho-ck{font-family:var(--font-m);font-size:10.5px;color:var(--ink-4);flex:none;width:88px}
.ho-cv{color:var(--ink-2);line-height:1.4}
.ho-arrow{height:22px;display:grid;place-items:center;opacity:.3;transition:opacity 460ms var(--ease)}
.ho-arrow.is-on{opacity:1}
.ho-arrow span{display:block;width:1px;height:100%;background:linear-gradient(180deg,var(--line-3),var(--accent))}
.ho-human{display:grid;grid-template-columns:auto 1fr;gap:2px var(--s-3);padding:var(--s-4);
border:1px solid var(--line);border-radius:var(--r-md);background:rgba(255,255,255,.02);
opacity:.3;transition:opacity 500ms var(--ease),border-color 500ms var(--ease),background 500ms var(--ease)}
.ho-human.is-on{opacity:1;border-color:rgba(14,165,233,.3);background:var(--accent-dim)}
html:not(.anim) .ho-human{opacity:1}
.ho-hav{grid-row:1/3;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
background:var(--accent);color:#04222f;font-family:var(--font-m);font-size:12px;font-weight:700}
.ho-hn{font-family:var(--font-d);font-weight:600;font-size:14px;color:var(--ink)}
.cc{display:grid;gap:var(--s-4);grid-template-columns:1fr}
@media(min-width:1040px){.cc{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:var(--s-6);align-items:start}}
.cc-left,.cc-panel{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
padding:var(--pad-sm);position:relative;isolation:isolate;
transition:border-color var(--t) var(--ease),box-shadow var(--t) var(--ease)}
.cc-left:hover,.cc-panel:hover{border-color:rgba(255,255,255,.24);
box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 0 0 1px rgba(14,165,233,.16),
0 18px 44px -28px rgba(0,0,0,.9)}
.cc-right{display:grid;gap:var(--s-4);align-content:start}
.cc-h{font-family:var(--font-m);font-size:10.5px;letter-spacing:.05em;color:var(--ink-4);
margin-bottom:var(--s-4)}
.cc-q{display:grid;grid-template-columns:1fr auto;gap:4px var(--s-3);width:100%;text-align:left;
padding:8px 8px;margin-bottom:4px;border:1px solid transparent;border-radius:var(--r-sm);
background:transparent;cursor:pointer;
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.cc-q:hover{background:rgba(255,255,255,.03);border-color:var(--line)}
.cc-q:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.cc-q[aria-selected="true"]{background:var(--bg-2);border-color:var(--line-2)}
.cc-qt{font-size:13px;color:var(--ink-3);line-height:1.35;transition:color var(--t) var(--ease)}
.cc-q[aria-selected="true"] .cc-qt{color:var(--ink)}
.cc-qn{font-family:var(--font-m);font-size:11px;color:var(--ink-4)}
.cc-qb{grid-column:1/-1;height:3px;border-radius:2px;background:rgba(255,255,255,.06);overflow:hidden}
.cc-qb i{display:block;height:100%;border-radius:2px;background:rgba(255,255,255,.16);
transition:background var(--t) var(--ease)}
.cc-q[aria-selected="true"] .cc-qb i{background:var(--accent)}
.cc-note{margin-top:var(--s-4);font-size:12px;line-height:1.45;color:var(--ink-4)}
.cc-src,.cc-pg{display:flex;align-items:center;gap:var(--s-3);padding:8px 8px;margin-bottom:4px;
border:1px solid transparent;border-radius:var(--r-sm);
transition:border-color 400ms var(--ease),background 400ms var(--ease),opacity 400ms var(--ease)}
.cc-src.is-lit,.cc-pg.is-lit{border-color:rgba(14,165,233,.34);background:var(--accent-dim)}
.cc-src.is-dim,.cc-pg.is-dim{opacity:.34}
.cc-sk,.cc-pu{font-family:var(--font-m);font-size:11.5px;color:var(--ink-2);flex:none;min-width:96px}
.cc-sb{flex:1;height:4px;border-radius:2px;background:rgba(255,255,255,.07);overflow:hidden}
.cc-sb i{display:block;height:100%;border-radius:2px;background:rgba(255,255,255,.18);
transition:background 400ms var(--ease)}
.cc-src.is-lit .cc-sb i{background:var(--accent)}
.cc-sv{font-family:var(--font-m);font-size:11px;color:var(--ink-4);flex:none}
.cc-pf{margin-left:auto;font-size:11.5px;color:var(--ink-4);text-align:right}
.cc-outs{display:flex;flex-wrap:wrap;gap:8px}
.cc-o{padding:8px 12px;border:1px solid var(--line);border-radius:var(--r-pill);
font-family:var(--font-m);font-size:11px;color:var(--ink-4);opacity:.4;
transition:opacity 400ms var(--ease),border-color 400ms var(--ease),color 400ms var(--ease)}
.cc-o.is-lit{opacity:1;border-color:rgba(14,165,233,.34);color:var(--ink-2)}
html:not(.anim) .cc-o{opacity:1}
@media(max-width:900px){
.tsl-slide[data-pos="-1"],.tsl-slide[data-pos="1"],
}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){}
html:not(.anim) .wf-report{min-height:0}
html:not(.anim) .wf-pane{position:static;opacity:1;transform:none;pointer-events:auto}
@media(min-width:680px){}
.cta{display:grid;gap:var(--s-8);grid-template-columns:1fr;align-items:center}
@media(min-width:1000px){.cta{grid-template-columns:minmax(0,1fr) minmax(0,1.06fr);gap:var(--s-11)}}
.cta-panel{border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--bg-1);
overflow:hidden;position:relative;isolation:isolate;
transition:border-color var(--t) var(--ease),box-shadow var(--t) var(--ease)}
.cta-panel:hover{border-color:rgba(255,255,255,.24);
box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 0 0 1px rgba(14,165,233,.16),
0 18px 44px -28px rgba(0,0,0,.9)}
.cta-live{margin-left:auto;font-family:var(--font-m);font-size:10.5px;color:var(--accent);
display:inline-flex;align-items:center;gap:8px}
.cta-live::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--accent)}
.cta-canvas{position:relative;height:168px;background:#07070a;border-bottom:1px solid var(--line)}
.cta-canvas canvas{position:absolute;inset:0;width:100%;height:100%}
.cta-feed{padding:var(--s-4)}
.cta-line{display:flex;align-items:baseline;gap:var(--s-3);padding-block:8px;
border-bottom:1px solid var(--line);font-size:12.5px}
.cta-line:last-child{border-bottom:0}
.cl-q{color:var(--ink-3);line-height:1.4}
.cl-o{margin-left:auto;flex:none;font-family:var(--font-m);font-size:10.5px;padding:4px 8px;
border-radius:var(--r-pill);border:1px solid var(--line);color:var(--ink-4)}
.cta-line.is-on .cl-q{color:var(--ink)}
.cta-line.is-on .cl-o{border-color:rgba(14,165,233,.34);color:var(--accent)}
html:not(.anim) .cta-line{opacity:1}
.tsl-card,.cc-left,.cc-panel,.ho-thread,.ho-packet,.wf-report{
position:relative;isolation:isolate}
.tsl-card::before,.cc-left::before,.cc-panel::before,.ho-thread::before,
.ho-packet::before,.wf-report::before{
content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;
background:radial-gradient(240px circle at var(--gx,50%) var(--gy,50%),
rgba(14,165,233,.10),transparent 62%);
opacity:calc(var(--on,0) * .55);transition:opacity 260ms var(--ease)}
:where(.tsl-card,.cc-left,.cc-panel,.ho-thread,.ho-packet,.cta-panel)>*{
position:relative;z-index:1}
@media (prefers-reduced-motion:reduce),(hover:none),(pointer:coarse){
.tsl-card::before,.cc-left::before,.cc-panel::before,.ho-thread::before,
.ho-packet::before,.wf-report::before{display:none}
}
@media(min-width:1040px){
.cc-note{margin-top:var(--s-5);padding-top:var(--s-5);border-top:1px dashed var(--line)}
}
body>header,body>main,body>footer{position:relative;z-index:1}
@media(min-width:900px){
}
.circ{position:relative;width:132px;height:132px;margin:0 auto}
.circ svg{width:100%;height:100%;transform:rotate(-90deg)}
.circ-track{fill:none;stroke:rgba(255,255,255,.08);stroke-width:7}
.circ-fill{fill:none;stroke:var(--accent);stroke-width:7;stroke-linecap:round;
filter:drop-shadow(0 0 6px rgba(14,165,233,.55));transition:stroke-dashoffset 120ms linear}
.circ-mid{position:absolute;inset:0;display:grid;place-content:center;text-align:center;gap:2px}
.circ-mid b{font-family:var(--font-d);font-size:26px;font-weight:700;letter-spacing:-.03em;
font-variant-numeric:tabular-nums}
.circ-mid i{font-style:normal;font-family:var(--font-m);font-size:11px;color:var(--ink-4)}
.circ-legend{display:grid;gap:4px;margin-top:var(--s-5)}
.cl-row{display:flex;align-items:center;gap:var(--s-3);padding:8px 8px;border:1px solid var(--line);
border-radius:var(--r-sm);font-family:var(--font-m);font-size:11px;color:var(--ink-4);
transition:color 400ms var(--ease),border-color 400ms var(--ease)}
.cl-row .cl-d{width:5px;height:5px;border-radius:50%;background:var(--line-3);flex:none;
transition:background 400ms var(--ease),box-shadow 400ms var(--ease)}
.cl-row.is-on{color:var(--ink-2);border-color:var(--line-2)}
.cl-row.is-on .cl-d{background:var(--accent);box-shadow:0 0 0 3px rgba(14,165,233,.16)}
.cl-n{margin-left:auto;color:var(--ink-4)}
.ls-d{color:var(--ink-3)}
.ls-tab[aria-selected="true"] .ls-d{color:var(--ink-2)}
@media (any-hover:hover) and (any-pointer:fine){
.card:hover,.card.glow:hover,.bento-card:hover,.bento-card.glow:hover,
.ticket:hover,.ticket.glow:hover,.qt:hover,.qt.glow:hover,
.cc-left:hover,.cc-panel:hover,.faq-item:hover,.faq-item.glow:hover,
.tsl-card:hover,.ho-thread:hover,.ho-packet:hover,.wf-report:hover,
.cta-panel:hover,.ig-node:hover,.hand-ui:hover{
border-color:rgba(255,255,255,.24);
box-shadow:inset 0 1px 0 rgba(255,255,255,.06),
0 0 0 1px rgba(14,165,233,.16),
0 18px 44px -28px rgba(0,0,0,.9)}
}
.card::before,.bento-card::before,.ticket::before,.ig-node::before,
.qt::before,.tsl-card::before,.cc-left::before,.cc-panel::before,
.ho-thread::before,.ho-packet::before,.cta-panel::before{
background:radial-gradient(240px circle at var(--gx,50%) var(--gy,50%),
rgba(14,165,233,.10),transparent 62%)}
@media(max-width:520px){
.ho-tab{grid-template-columns:auto minmax(0,1fr);padding:var(--s-3) var(--s-4)}
.ho-tt,.ho-td{min-width:0;overflow-wrap:anywhere}
.ho-rail,.ho-stage,.ho{min-width:0}
.circ{width:112px;height:112px}
}
.faq{border-top:0;display:grid;gap:var(--s-4)}
.faq-item{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
overflow:hidden;
transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.faq-item.is-open{border-color:var(--line-2);background:rgba(255,255,255,.028)}
.faq-q{margin:0}
.faq-btn{display:flex;width:100%;align-items:flex-start;justify-content:space-between;
gap:var(--s-6);padding:var(--pad-sm);text-align:left;cursor:pointer;
border:0;background:0;
font-family:var(--font-d);font-size:clamp(16px,1.5vw,18px);font-weight:600;
line-height:1.35;color:var(--ink-2);
letter-spacing:0;word-spacing:.06em;
transition:color var(--t-fast) var(--ease),padding var(--t) var(--ease)}
.faq-btn:hover{color:var(--ink)}
.faq-item.is-open .faq-btn{color:var(--ink);padding-bottom:var(--s-4)}
.faq-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;
border-radius:var(--r-lg)}
.faq-btn .mk{flex:none;position:relative;width:14px;height:14px;margin-top:4px}
.faq-btn .mk::before,.faq-btn .mk::after{content:"";position:absolute;
background:var(--ink-3);
transition:transform var(--t) var(--ease),background var(--t) var(--ease)}
.faq-btn .mk::before{left:0;top:6.4px;width:14px;height:1.5px;border-radius:1px}
.faq-btn .mk::after{left:6.24px;top:0;width:1.5px;height:14px;border-radius:1px}
.faq-item.is-open .mk::before{background:var(--accent)}
.faq-item.is-open .mk::after{transform:scaleY(0);background:var(--accent)}
.faq-wrap{display:grid;grid-template-rows:minmax(0,1fr);
transition:grid-template-rows 280ms var(--ease)}
.faq-wrap > *{overflow:hidden;min-height:0}
.faq-a{visibility:hidden;transition:visibility 0s linear 280ms}
.faq-item.is-open .faq-a{visibility:visible;transition-delay:0s}
@media (scripting: none){.faq-a{visibility:visible}}
@media (scripting: enabled) {
.faq-item .faq-wrap{grid-template-rows:minmax(0,0fr)}
.faq-item.is-open .faq-wrap{grid-template-rows:minmax(0,1fr)}
}
html.faq-js .faq-item .faq-wrap{grid-template-rows:minmax(0,0fr)}
html.faq-js .faq-item.is-open .faq-wrap{grid-template-rows:minmax(0,1fr)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){.faq-wrap{transition:none}}
.faq-a{padding:var(--s-2) var(--pad-sm) var(--pad);max-width:64ch;
color:var(--ink-2);font-size:15.5px;line-height:1.65}
.faq-a p + p{margin-top:var(--s-3)}
.ig{position:relative;margin-top:var(--s-9)}
.ig-grid{position:relative;z-index:1;
display:grid;grid-template-columns:1fr auto 1fr;gap:clamp(28px,6vw,96px);
align-items:center}
.ig-col{display:grid;gap:var(--s-4)}
.beam-svg{position:absolute;inset:0;width:100%;height:100%;z-index:0;
pointer-events:none;overflow:visible}
.ig-node{display:flex;align-items:center;gap:var(--s-4);
padding:var(--s-4) var(--s-5);
border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
transition:border-color var(--t) var(--ease),background var(--t) var(--ease),
transform var(--t) var(--ease)}
.ig-col-r .ig-node{flex-direction:row-reverse;text-align:right}
@media (any-hover:hover) and (any-pointer:fine){
.ig-node:hover{border-color:rgba(255,255,255,.24);background:rgba(255,255,255,.03);
transform:translateY(-1px)}
}
.ig-m{flex:none;width:40px;height:40px;border-radius:var(--r-md);display:grid;place-items:center;
border:1px solid var(--line);background:rgba(255,255,255,.02);
transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.ig-m svg{width:22px;height:22px;overflow:visible}
.ig-m svg,.ig-m svg *{fill:var(--ink-3);stroke:none;
transition:fill var(--t) var(--ease)}
.ig-node:hover .ig-m svg,.ig-node:hover .ig-m svg *{fill:var(--ink)}
.ig-node:hover .ig-m{border-color:var(--line-2);background:rgba(255,255,255,.05)}
.ig-tx{min-width:0}
.ig-n{display:block;font-family:var(--font-d);font-weight:600;font-size:15px;color:var(--ink);
letter-spacing:0;word-spacing:.05em}
.ig-d{display:block;margin-top:2px;font-size:12.5px;line-height:1.4;color:var(--ink-4);
letter-spacing:0;word-spacing:.05em}
.ig-hub{position:relative;display:grid;justify-items:center;gap:var(--s-2);
padding:var(--s-6) var(--s-7);
border:1px solid var(--line-2);border-radius:var(--r-lg);
background:var(--bg-1);
box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 24px 60px -34px rgba(0,0,0,.95)}
.ig-hub-mark{width:44px;height:44px;display:grid;place-items:center;border-radius:var(--r-md);
color:var(--accent)}
.ig-hub-mark svg{width:30px;height:30px}
.ig-hub-n{font-family:var(--font-d);font-weight:700;font-size:19px;letter-spacing:-.01em;
color:var(--ink)}
.ig-hub-d{font-size:12.5px;color:var(--ink-4);text-align:center;max-width:30ch;
letter-spacing:0;word-spacing:.05em}
@media(max-width:860px){
.ig-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-3)}
.ig-col{display:contents}
.ig-hub{grid-column:1/-1;padding:var(--s-5);margin-block:var(--s-2)}
.ig-node,.ig-col-r .ig-node{flex-direction:column;align-items:flex-start;
text-align:left;gap:var(--s-3);padding:var(--s-4)}
.beam-svg{display:block}
}
@media(max-width:520px){
.ig-d{display:none}
.ig-node{gap:var(--s-2);padding:var(--s-3) var(--s-4)}
.ig-m{width:32px;height:32px}
.ig-m svg{width:19px;height:19px}
.ig-n{font-size:14px}
}
.bento-card{display:flex;flex-direction:column}
.bento-card > p{margin-bottom:var(--s-4)}
.bx-body{flex:1;display:flex;flex-direction:column;gap:var(--s-4);min-height:0}
.src-panel{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;
background:rgba(255,255,255,.015)}
.src-hd{display:flex;justify-content:space-between;padding:8px var(--s-4);
border-bottom:1px solid var(--line);
font-family:var(--font-m);font-size:10.5px;letter-spacing:.07em;
text-transform:uppercase;color:var(--ink-4)}
.src-row{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
padding:8px var(--s-4);border-bottom:1px solid rgba(255,255,255,.05);
opacity:0;transform:translateY(4px);
transition:opacity 420ms var(--ease),transform 420ms var(--ease),background 200ms var(--ease)}
.src-row:last-child{border-bottom:0}
.src-row.is-in{opacity:1;transform:none}
.src-n{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-2);min-width:0}
.src-k{flex:none;width:34px;text-align:center;padding:2px 0;border-radius:4px;
border:1px solid var(--line);background:rgba(255,255,255,.03);
font-family:var(--font-m);font-size:10.5px;letter-spacing:.02em;color:var(--ink-4);font-style:normal}
.src-s{flex:none;font-family:var(--font-m);font-size:10.5px;color:var(--ink-4)}
.src-row.is-in .src-s{color:var(--accent)}
.rt-in{display:flex;align-items:center;gap:8px;padding:8px var(--s-4);
border:1px solid var(--line);border-radius:var(--r-md);
background:rgba(255,255,255,.02);font-size:13px;color:var(--ink-2)}
.rt-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex:none}
.rt-lanes{display:grid;gap:8px}
.rt-nm{flex:none;width:64px;font-size:12.5px;color:var(--ink-2)}
.rt-meter{flex:1;height:3px;border-radius:2px;background:rgba(255,255,255,.08);overflow:hidden}
.rt-meter i{display:block;height:100%;border-radius:2px;background:var(--ink-4);
transition:background var(--t) var(--ease)}
.rpath.is-live .rt-meter i{background:var(--accent)}
.dp-frame{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;
background:rgba(255,255,255,.015)}
.dp-bar{display:flex;align-items:center;gap:4px;padding:8px var(--s-3);
border-bottom:1px solid var(--line)}
.dp-bar i{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.14)}
.dp-url{margin-left:8px;font-family:var(--font-m);font-size:10.5px;color:var(--ink-4)}
.dp-stage{position:relative;height:62px;
background:repeating-linear-gradient(180deg,rgba(255,255,255,.045) 0 1px,transparent 1px 13px)}
.gap-fix{display:flex;align-items:center;gap:8px;margin-top:auto;
padding:8px var(--s-4);border:1px solid var(--line);border-radius:var(--r-md);
background:rgba(255,255,255,.02);font-size:12.5px;color:var(--ink-3);
opacity:0;transform:translateY(5px);
transition:opacity 460ms var(--ease),transform 460ms var(--ease)}
.gap-fix.is-on{opacity:1;transform:none}
.gap-fx{flex:none;padding:2px 8px;border-radius:4px;background:rgba(14,165,233,.14);
color:var(--accent);font-family:var(--font-m);font-size:10.5px;letter-spacing:.05em;
text-transform:uppercase}
.own-grid{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;
background:rgba(255,255,255,.015)}
.own-hd,.orow{display:grid;grid-template-columns:minmax(0,1fr) 46px 46px 52px;
align-items:center;gap:var(--s-3);padding:8px var(--s-4)}
.own-hd{border-bottom:1px solid var(--line);
font-family:var(--font-m);font-size:10.5px;letter-spacing:.07em;
text-transform:uppercase;color:var(--ink-4)}
.own-hd span + span,.orow .sw{justify-self:center}
.orow{border-bottom:1px solid rgba(255,255,255,.05)}
.orow:last-child{border-bottom:0}
.own-s{font-size:13px;color:var(--ink-2)}
.orow .sw{position:relative;width:26px;height:15px;border-radius:9px;
background:rgba(255,255,255,.10);transition:background var(--t) var(--ease)}
.orow .sw::after{content:"";position:absolute;top:2px;left:2px;width:11px;height:11px;
border-radius:50%;background:var(--ink-3);
transition:transform var(--t) var(--ease),background var(--t) var(--ease)}
.orow.is-on .sw{background:rgba(14,165,233,.34)}
.orow.is-on .sw::after{transform:translateX(11px);background:var(--accent)}
@media(max-width:760px){
.own-hd,.orow{grid-template-columns:minmax(0,1fr) 38px 38px 44px;gap:var(--s-2);
padding:8px var(--s-3)}
.dp-stage{height:52px}
}
@media(min-width:1000px){
.bento .bx-train,.bento .bx-own{align-items:stretch}
.bento .bx-train > p,.bento .bx-own > p{grid-column:1;align-self:start}
.bento .bx-train > .bx-head,.bento .bx-own > .bx-head{grid-column:1}
.bx-train .idx{grid-column:1;grid-row:3;align-self:end;margin-top:0}
.bx-train > .bx-body{grid-row:1/4}
.bx-train .bx-body{gap:0}
.bx-own .bx-note{grid-column:1;align-self:end;margin-top:0}
}
.bento-card h3{letter-spacing:0;word-spacing:.07em}
.bento .gap-q{font-size:12.5px;letter-spacing:0;word-spacing:.06em}
.gap-fix{letter-spacing:0;word-spacing:.05em}
.src-n,.own-s,.hd-t,.rt-nm,.rt-in{letter-spacing:0;word-spacing:.05em}
.bx-note,.bx-foot{word-spacing:.04em}
.orow .sw{opacity:1}
.own-grid{position:relative}
.hx{display:grid;gap:4px;border:1px solid var(--line);border-radius:var(--r-md);
padding:var(--s-3);background:rgba(255,255,255,.015)}
.hx-msg{display:block;padding:8px 8px;border-radius:8px;font-size:12.5px;line-height:1.45;
letter-spacing:0;word-spacing:.05em;color:var(--ink-2)}
.hx-who{display:block;font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;
color:var(--ink-4);margin-bottom:2px}
.hx-v{background:rgba(255,255,255,.035);margin-right:var(--s-7)}
.hx-c{background:rgba(14,165,233,.07);margin-left:var(--s-7);
border:1px solid rgba(14,165,233,.16)}
.hx-src{display:block;margin-top:4px;font-family:var(--font-m);font-size:10.5px;
font-style:normal;color:var(--ink-4)}
.hx-miss{background:rgba(255,255,255,.03);border-color:var(--line)}
.hx-miss .hx-src{color:var(--ink-4)}
.hx-esc{display:flex;align-items:center;gap:8px;padding:8px 8px;border-radius:8px;
border:1px dashed var(--line-2);font-size:12px;color:var(--ink-3);
letter-spacing:0;word-spacing:.05em;
opacity:0;transform:translateY(4px);
transition:opacity 420ms var(--ease),transform 420ms var(--ease)}
.hx-esc.is-on{opacity:1;transform:none}
.hx-tag{flex:none;padding:2px 8px;border-radius:4px;background:rgba(255,255,255,.07);
font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-3)}
.hx-join{display:flex;align-items:center;gap:8px;padding:8px 8px;border-radius:8px;
border:1px solid rgba(14,165,233,.28);background:rgba(14,165,233,.08);
opacity:0;transform:translateY(4px);
transition:opacity 460ms var(--ease),transform 460ms var(--ease)}
.hx-join.is-on{opacity:1;transform:none}
.hx-av{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;
background:var(--accent);color:#04121b;
font-family:var(--font-m);font-size:10.5px;font-weight:700}
.hx-jn{font-size:12.5px;color:var(--ink);letter-spacing:0;word-spacing:.05em}
.bento-card{position:relative}
.bento-card::before{content:"";position:absolute;left:var(--s-6);right:var(--s-6);top:0;height:1px;
background:linear-gradient(90deg,transparent,rgba(255,255,255,.13),transparent);
pointer-events:none;z-index:2}
.src-panel,.own-grid,.dp-frame,.hx{box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.bx-deploy .dp-frame{flex:1;display:flex;flex-direction:column}
.bx-deploy .dp-stage{flex:1;height:auto;min-height:62px}
.bx-gaps .bx-body{justify-content:space-between}
.bx-gaps .gap-fix{margin-top:0}
@media(min-width:1000px){
.bento .bx-train > p{align-self:center}
.bento .bx-train > .bx-head{align-self:start}
}
.dp-stage{background:
linear-gradient(90deg,rgba(255,255,255,.055) 0 46%,transparent 46%) 12px 12px/100% 7px no-repeat,
linear-gradient(90deg,rgba(255,255,255,.03) 0 72%,transparent 72%) 12px 26px/100% 4px no-repeat,
linear-gradient(90deg,rgba(255,255,255,.03) 0 64%,transparent 64%) 12px 34px/100% 4px no-repeat,
linear-gradient(90deg,rgba(255,255,255,.022) 0 30%,transparent 30%) 12px 50px/100% 26px no-repeat,
linear-gradient(90deg,rgba(255,255,255,.022) 0 30%,transparent 30%) 12px 84px/100% 26px no-repeat,
repeating-linear-gradient(180deg,rgba(255,255,255,.03) 0 1px,transparent 1px 15px)}
@media(min-width:1000px){
.bento .bx-train{grid-template-columns:minmax(0,300px) minmax(0,1fr)}
.bento .bx-train > .bx-head{grid-column:1}
.bento .bx-train > .tr-left{grid-column:1;align-self:start}
.bento .bx-train > .bx-body{grid-column:2;grid-row:1/4}
.bento .bx-train > .idx{grid-column:1/-1}
}
.tr-left{display:grid;grid-template-columns:104px minmax(0,1fr);gap:var(--s-5);align-items:center}
.cov{position:relative;width:104px;height:104px}
.cov-dial{width:104px;height:104px;transform:rotate(-90deg)}
.cov-dial circle{fill:none;stroke-width:7;stroke-linecap:round}
.cov-t{stroke:rgba(255,255,255,.08)}
.cov-v{stroke:var(--accent);stroke-dasharray:251.3;stroke-dashoffset:251.3;
transition:stroke-dashoffset 1100ms cubic-bezier(.16,1,.3,1)}
.cov-mid{position:absolute;inset:0;display:grid;place-content:center;text-align:center;gap:1px}
.cov-n{font-family:var(--font-d);font-weight:700;font-size:21px;letter-spacing:-.01em;color:var(--ink)}
.cov-l{font-family:var(--font-m);font-size:10.5px;letter-spacing:.05em;color:var(--ink-4)}
.tr-legend{display:grid;gap:8px;min-width:0}
.tr-lg{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-3);
letter-spacing:0;word-spacing:.05em}
.tr-lg b{margin-left:auto;font-family:var(--font-m);font-size:12px;color:var(--ink)}
.tr-sw{width:8px;height:8px;border-radius:2px;flex:none}
.tr-a{background:var(--accent)}.tr-b{background:rgba(56,189,248,.55)}.tr-c{background:rgba(255,255,255,.24)}
.tr-p{grid-column:1/-1;margin:var(--s-2) 0 0;font-size:12.5px;color:var(--ink-4);
letter-spacing:0;word-spacing:.05em}
.dp-steps{display:flex;align-items:center;gap:8px}
.dp-st{padding:4px 8px;border-radius:999px;border:1px solid var(--line);
font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-4);
transition:color var(--t) var(--ease),border-color var(--t) var(--ease),background var(--t) var(--ease)}
.dp-st.is-done{color:var(--ink-2)}
.dp-st.is-live{color:var(--accent);border-color:rgba(14,165,233,.4);background:rgba(14,165,233,.10)}
.dp-ar{flex:1;height:1px;background:linear-gradient(90deg,var(--line),var(--line-2))}
.dp-stage{position:relative;padding:var(--s-3);display:flex;align-items:flex-end;justify-content:flex-end}
.dp-w{width:100%;border:1px solid var(--line-2);border-radius:10px;overflow:hidden;
background:#0b0b0e;box-shadow:0 14px 30px -20px rgba(0,0,0,.9);
opacity:0;transform:translateY(8px) scale(.98);
transition:opacity 460ms var(--ease),transform 460ms cubic-bezier(.16,1,.3,1)}
.dp-w.is-on{opacity:1;transform:none}
.dp-wh{display:flex;align-items:center;gap:8px;padding:8px 8px;border-bottom:1px solid var(--line);
font-family:var(--font-d);font-weight:600;font-size:12px;color:var(--ink)}
.dp-wd{width:7px;height:7px;border-radius:50%;background:var(--accent)}
.dp-wm{margin:8px 8px;padding:8px 8px;border-radius:8px;font-size:11.5px;line-height:1.4;
letter-spacing:0;word-spacing:.05em}
.dp-wu{background:rgba(255,255,255,.05);color:var(--ink-2)}
.dp-wb{background:rgba(14,165,233,.09);border:1px solid rgba(14,165,233,.18);color:var(--ink-2)}
.dp-wb i{display:block;margin-top:4px;font-family:var(--font-m);font-size:10.5px;
font-style:normal;color:var(--ink-4)}
.dp-rows{display:grid;gap:4px}
.dp-r{display:flex;align-items:center;gap:8px;padding:8px 8px;border-radius:8px;
border:1px solid var(--line);background:rgba(255,255,255,.015);font-size:12px}
.dp-r span{color:var(--ink-4);letter-spacing:0;word-spacing:.05em}
.dp-r b{font-family:var(--font-m);font-size:11.5px;font-weight:500;color:var(--ink-2)}
.dp-ok{margin-left:auto;font-family:var(--font-m);font-size:10.5px;font-style:normal;color:var(--accent)}
.an-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.an-st{padding:8px 8px;border:1px solid var(--line);border-radius:10px;
background:rgba(255,255,255,.02);text-align:left}
.an-st b{display:block;font-family:var(--font-d);font-weight:700;font-size:19px;
letter-spacing:-.01em;color:var(--ink)}
.an-st span{font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-4)}
.an-list{display:grid;gap:8px}
.an-r{display:grid;gap:4px;padding:8px;border-radius:10px;border:1px solid transparent;
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.an-r.is-active{background:rgba(255,255,255,.035);border-color:var(--line)}
@media (any-hover:hover){.an-r:hover{background:rgba(255,255,255,.05);border-color:var(--line-2)}}
.an-q{font-size:12.5px;color:var(--ink-2);letter-spacing:0;word-spacing:.06em;line-height:1.35}
.an-n{position:absolute;opacity:0;pointer-events:none}
.an-bar{display:block;height:3px;border-radius:2px;background:rgba(255,255,255,.08);overflow:hidden}
.an-bar i{display:block;height:100%;border-radius:2px;background:var(--ink-4);
transition:background var(--t) var(--ease)}
.an-r.is-active .an-bar i{background:var(--accent)}
.an-meta{display:flex;align-items:center;gap:8px}
.an-c{padding:2px 8px;border-radius:4px;font-family:var(--font-m);font-size:10.5px;
font-style:normal;letter-spacing:.03em}
.an-miss{background:rgba(14,165,233,.14);color:var(--accent)}
.an-thin{background:rgba(255,255,255,.07);color:var(--ink-3)}
.an-ok{background:rgba(255,255,255,.05);color:var(--ink-4)}
.an-pg{margin-left:auto;font-family:var(--font-m);font-size:10.5px;font-style:normal;color:var(--ink-4)}
.bx-gaps .an-r{position:relative}
.bx-deploy .dp-stage{align-items:stretch;justify-content:stretch}
.bx-deploy .dp-w{display:flex;flex-direction:column}
.bx-deploy .dp-w .dp-wm:last-child{margin-bottom:8px}
.bx-gaps .bx-body{justify-content:flex-start}
.bx-gaps .an-list{flex:1;align-content:space-between}
@media(min-width:1000px){
.bento .bx-train > .tr-left{align-self:stretch;align-content:space-between}
}
.bx-gaps .an-list{align-content:start;gap:4px}
.bx-gaps .gap-fix{margin-top:auto}
.tr-st{grid-column:1/-1;display:flex;align-items:center;gap:8px;
padding:8px 8px;border:1px solid var(--line);border-radius:8px;
background:rgba(255,255,255,.02);font-family:var(--font-m);font-size:10.5px;
letter-spacing:.03em;color:var(--ink-4)}
.tr-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex:none}
@media(min-width:1000px){.bento .bx-train > .tr-left{align-content:start;gap:var(--s-4) var(--s-5)}}
.ho{display:grid;gap:var(--s-7);grid-template-columns:minmax(0,1fr)}
.ho-top{display:flex;align-items:center;gap:var(--s-6)}
.ho-h{font-family:var(--font-d);font-weight:700;font-size:clamp(19px,2vw,23px);
letter-spacing:0;word-spacing:.05em;color:var(--ink);margin:0}
.ho-d{margin:var(--s-3) 0 0;max-width:74ch;font-size:14px;line-height:1.6;color:var(--ink-3);
letter-spacing:0;word-spacing:.04em}
.ho-rail{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--s-3)}
.ho-tab{position:relative;display:grid;gap:4px;padding:var(--s-4);text-align:left;
border:1px solid var(--line);border-radius:var(--r-md);background:rgba(255,255,255,.015);
cursor:pointer;transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.ho-tab:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.ho-tab.is-done .ho-dot{background:var(--ink-4)}
.ho-tab.is-live{border-color:rgba(255,255,255,.24);background:rgba(255,255,255,.045)}
.ho-tab.is-live .ho-dot{background:var(--accent);box-shadow:0 0 0 4px rgba(14,165,233,.16)}
.ho-tt{font-family:var(--font-d);font-weight:600;font-size:13.5px;color:var(--ink-3);
letter-spacing:0;word-spacing:.05em;transition:color var(--t) var(--ease)}
.ho-tab.is-live .ho-tt,.ho-tab.is-done .ho-tt{color:var(--ink)}
.ho-td{font-size:12px;line-height:1.4;color:var(--ink-4);letter-spacing:0;word-spacing:.05em}
.ho-stage{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:var(--s-6);
align-items:start}
.ho-thread{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
overflow:hidden}
.ho-head{display:flex;align-items:center;gap:8px;padding:8px var(--s-5);
border-bottom:1px solid var(--line)}
.ho-status{margin-left:auto;display:flex;align-items:center;gap:8px;
padding:4px 8px 4px 4px;border-radius:999px;border:1px solid var(--line);
transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.ho-status.is-human{border-color:rgba(14,165,233,.35);background:rgba(14,165,233,.10)}
.ho-status .av{width:19px;height:19px;border-radius:50%;display:grid;place-items:center;
background:rgba(255,255,255,.10);font-family:var(--font-m);font-size:10.5px;color:var(--ink-2)}
.ho-status.is-human .av{background:var(--accent);color:#04121b}
.ho-status .who{font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-3)}
.ho-body{display:grid;gap:var(--s-3);padding:var(--s-5)}
.msg{display:flex;gap:var(--s-3);align-items:flex-start;
transition:opacity 420ms var(--ease),transform 420ms var(--ease)}
html.anim .msg{opacity:0;transform:translateY(6px)}
html.anim .msg.is-on{opacity:1;transform:none}
.msg-av{flex:none;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
font-family:var(--font-m);font-size:10.5px;
background:rgba(255,255,255,.07);color:var(--ink-3)}
.msg-av.c{background:rgba(14,165,233,.16);color:var(--accent)}
.msg-av.h{background:var(--accent);color:#04121b}
.msg-tx{font-size:13.5px;line-height:1.5;color:var(--ink-2);letter-spacing:0;word-spacing:.05em}
.msg-tx b{color:var(--ink);font-weight:600}
.msg-src{display:block;margin-top:4px;font-family:var(--font-m);font-size:10.5px;
font-style:normal;color:var(--ink-4)}
.ho-side{display:grid;gap:var(--s-4)}
.ho-packet{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
padding:var(--s-5);display:grid;gap:8px}
.ho-pk-t{margin:0 0 var(--s-2);font-family:var(--font-m);font-size:10.5px;letter-spacing:.06em;
text-transform:uppercase;color:var(--ink-4)}
.ho-chip{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
padding:8px 8px;border:1px solid var(--line);border-radius:8px;
background:rgba(255,255,255,.02);
transition:opacity 380ms var(--ease),transform 380ms var(--ease),border-color 380ms var(--ease)}
html.anim .ho-chip{opacity:.32;transform:translateY(3px)}
html.anim .ho-chip.is-on{opacity:1;transform:none}
.ho-chip.is-sent{border-color:rgba(14,165,233,.26)}
.ho-ck{font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-4);flex:none}
.ho-cv{font-size:12.5px;color:var(--ink-2);text-align:right;letter-spacing:0;word-spacing:.04em}
.ho-arrow{height:22px;display:grid;place-items:center;
transition:opacity 380ms var(--ease)}
html.anim .ho-arrow{opacity:0}
html.anim .ho-arrow.is-on{opacity:1}
.ho-arrow span{width:1px;height:22px;background:linear-gradient(180deg,transparent,var(--accent))}
.ho-human{display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px var(--s-3);
align-items:center;padding:8px;border-radius:10px;
border:1px solid rgba(14,165,233,.28);background:rgba(14,165,233,.08);
transition:opacity 420ms var(--ease),transform 420ms var(--ease)}
html.anim .ho-human{opacity:0;transform:translateY(5px)}
html.anim .ho-human.is-on{opacity:1;transform:none}
.ho-hav{grid-row:1/3;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
background:var(--accent);color:#04121b;font-family:var(--font-m);font-size:12px;font-weight:700}
.ho-hn{font-family:var(--font-d);font-weight:600;font-size:13.5px;color:var(--ink);
letter-spacing:0;word-spacing:.05em}
.ho-hsub{font-size:12px;color:var(--ink-3);letter-spacing:0;word-spacing:.05em}
@media(max-width:980px){
.ho-rail{grid-template-columns:repeat(2,minmax(0,1fr))}
.ho-stage{grid-template-columns:1fr}
}
@media(max-width:560px){
.ho-rail{grid-template-columns:1fr}
.ho-top{gap:var(--s-4)}
.ho-chip{flex-direction:column;align-items:flex-start;gap:2px}
.ho-cv{text-align:left}
}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.ho-rv,.msg,.ho-chip,.ho-human,.ho-arrow{transition:none}
}
@media(max-width:980px){
html.anim .ho-body .msg:not(.is-on){display:none}
}
.ho-tt,.ho-hn{word-spacing:.10em}
.ho-td,.ho-hsub{word-spacing:.11em}
[data-handoff-story] .scene-note{letter-spacing:0;word-spacing:.12em}
.ho-cv,.ho-ck,.ho-pk-t{word-spacing:.06em}
.ho-hint{display:flex;align-items:center;gap:8px;margin:0;font-size:12.5px;color:var(--ink-4);
letter-spacing:0;word-spacing:.08em}
.ho-hint-k{padding:2px 8px;border-radius:999px;font-family:var(--font-m);font-size:10.5px;
letter-spacing:.05em;background:rgba(14,165,233,.14);color:var(--accent)}
.ho.is-held .ho-hint-k{background:rgba(255,255,255,.08);color:var(--ink-3)}
.ho-tab{cursor:pointer}
@media (any-hover:hover){.ho-tab:hover{border-color:var(--line-2);background:rgba(255,255,255,.04)}}
.ho-pk-s{margin-left:auto;padding:2px 8px;border-radius:4px;font-family:var(--font-m);
font-size:10.5px;letter-spacing:.04em;background:rgba(255,255,255,.06);color:var(--ink-4);
transition:background var(--t) var(--ease),color var(--t) var(--ease)}
.ho-pk-t{display:flex;align-items:center;gap:8px}
.ho[data-stage="packet"] .ho-pk-s,.ho[data-stage="joined"] .ho-pk-s,
.ho[data-stage="followup"] .ho-pk-s{background:rgba(14,165,233,.16);color:var(--accent)}
.ho-standby{margin:0 0 var(--s-2);font-size:12.5px;line-height:1.5;color:var(--ink-4);
letter-spacing:0;word-spacing:.08em}
.ho[data-stage="packet"] .ho-standby,.ho[data-stage="joined"] .ho-standby,
.ho[data-stage="followup"] .ho-standby{display:none}
.ho[data-stage="answer"] .ho-cv,.ho[data-stage="escalate"] .ho-cv{
color:transparent;background:linear-gradient(90deg,rgba(255,255,255,.09),rgba(255,255,255,.04));
border-radius:4px;min-width:78px;height:11px}
.ho[data-stage="answer"] .ho-chip,.ho[data-stage="escalate"] .ho-chip{opacity:.55}
@media(max-width:992px){
.ho-rail{display:flex;gap:var(--s-3);overflow-x:auto;overflow-y:hidden;
scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;
padding-bottom:var(--s-2);margin-inline:calc(-1 * var(--gutter));
padding-inline:var(--gutter);scrollbar-width:none}
.ho-rail::-webkit-scrollbar{display:none}
.ho-tab{flex:0 0 76%;scroll-snap-align:center}
.ho-stage{grid-template-columns:1fr}
}
@media(max-width:560px){.ho-tab{flex:0 0 82%}}
.lp{display:grid;grid-template-columns:minmax(0,380px) minmax(0,1fr);gap:var(--s-8);
align-items:start}
.lp-left{display:grid;gap:var(--s-6);justify-items:start}
.lp-seg.is-done{stroke:rgba(255,255,255,.34)}
.lp-seg.is-on{stroke:var(--accent);stroke-width:8}
.lp-dial-mid{position:absolute;inset:0;display:grid;place-content:center;text-align:center;gap:1px}
.lp-dial-n{font-family:var(--font-d);font-weight:700;font-size:30px;letter-spacing:-.02em;color:var(--ink)}
.lp-dial-l{font-family:var(--font-m);font-size:10.5px;letter-spacing:.06em;color:var(--ink-4)}
.lp-steps{display:grid;gap:2px;width:100%}
.lp-step{display:grid;grid-template-columns:22px minmax(0,1fr) 14px;gap:var(--s-3);
-webkit-appearance:none;appearance:none;background:0;color:inherit;font:inherit;
align-items:start;padding:12px var(--s-3);border:1px solid transparent;
border-radius:var(--r-md);text-align:left;cursor:pointer;
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
@media (any-hover:hover){.lp-step:hover{background:rgba(255,255,255,.035)}}
.lp-step:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.lp-step.is-on{background:rgba(255,255,255,.045);border-color:var(--line)}
.lp-n{font-family:var(--font-m);font-size:11px;color:var(--ink-4);padding-top:2px;
transition:color var(--t) var(--ease)}
.lp-step.is-on .lp-n{color:var(--accent)}
.lp-tx{min-width:0;display:grid;gap:2px}
.lp-t{font-family:var(--font-d);font-weight:600;font-size:15px;color:var(--ink-3);
letter-spacing:0;word-spacing:.08em;transition:color var(--t) var(--ease)}
.lp-step.is-on .lp-t{color:var(--ink)}
.lp-lead{font-size:12.5px;line-height:1.45;color:var(--ink-4);
letter-spacing:0;word-spacing:.09em}
.lp-d{font-size:13px;line-height:1.55;color:var(--ink-3);
letter-spacing:0;word-spacing:.09em;
display:grid;grid-template-rows:1fr}
html.anim .lp-step .lp-d{grid-template-rows:0fr;opacity:0;
transition:grid-template-rows 320ms var(--ease),opacity 240ms var(--ease),margin 320ms var(--ease)}
html.anim .lp-step.is-on .lp-d{grid-template-rows:1fr;opacity:1;margin-top:4px}
.lp-d > *{overflow:hidden;min-height:0}
.lp-mk{width:14px;height:14px;margin-top:4px;border-radius:50%;
border:1px solid var(--line-2);
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.lp-step.is-on .lp-mk{background:var(--accent);border-color:var(--accent);
box-shadow:0 0 0 4px rgba(14,165,233,.14)}
.lp-stage{position:relative;border:1px solid var(--line);border-radius:var(--r-lg);
background:var(--bg-1);overflow:hidden;min-height:392px;
box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.lp-pane{display:grid;gap:var(--s-4);padding:var(--s-6);align-content:start;min-height:392px}
.lp-pane[hidden]{display:none !important}
.lp-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
padding-bottom:var(--s-3);border-bottom:1px solid var(--line)}
.lp-hk,.lp-hv{font-family:var(--font-m);font-size:10.5px;letter-spacing:.06em;color:var(--ink-4)}
.lp-hv.lp-live{color:var(--accent)}
.lp-foot{margin:auto 0 0;font-size:12.5px;color:var(--ink-4);
letter-spacing:0;word-spacing:.09em}
.lp-list,.lp-rank{display:grid;gap:8px}
.lp-r{display:flex;align-items:center;gap:var(--s-3);padding:8px var(--s-4);
border:1px solid var(--line);border-radius:var(--r-md);background:rgba(255,255,255,.02)}
.lp-ck{flex:none;width:15px;height:15px;border-radius:4px;border:1px solid var(--line-2)}
.lp-r.is-on .lp-ck{background:var(--accent);border-color:var(--accent);
box-shadow:inset 0 0 0 2px var(--bg-1)}
.lp-rn{font-size:13px;color:var(--ink-2);letter-spacing:0;word-spacing:.06em}
.lp-off{opacity:.6}
.lp-chat{display:grid;gap:8px}
.lp-m{padding:8px 12px;border-radius:10px;font-size:13px;line-height:1.5;color:var(--ink-2);
letter-spacing:0;word-spacing:.07em}
.lp-u{background:rgba(255,255,255,.045);margin-right:var(--s-8)}
.lp-b{background:rgba(14,165,233,.07);border:1px solid rgba(14,165,233,.16);margin-left:var(--s-7)}
.lp-b i{display:block;margin-top:4px;font-family:var(--font-m);font-size:10.5px;
font-style:normal;color:var(--ink-4)}
.lp-dim{opacity:.6}
.lp-ask{margin-left:var(--s-7);margin-top:2px;padding:12px;border-radius:10px;
border:1px dashed var(--line-2);background:rgba(255,255,255,.02);display:grid;gap:8px}
.lp-ask-t{font-size:13px;color:var(--ink);letter-spacing:0;word-spacing:.07em}
.lp-field{padding:8px 8px;border-radius:8px;border:1px solid var(--line);
background:rgba(0,0,0,.35);font-family:var(--font-m);font-size:11.5px;color:var(--ink-4)}
.lp-join{display:flex;align-items:center;gap:8px;margin-left:var(--s-7);padding:8px 12px;
border-radius:10px;border:1px solid rgba(14,165,233,.28);background:rgba(14,165,233,.08);
font-size:13px;color:var(--ink);letter-spacing:0;word-spacing:.07em}
.lp-av{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;
background:var(--accent);color:#04121b;font-family:var(--font-m);font-size:10.5px;font-weight:700}
.lp-carry{display:flex;flex-wrap:wrap;gap:8px}
.lp-carry i{padding:4px 8px;border-radius:999px;border:1px solid var(--line);
font-family:var(--font-m);font-size:10.5px;font-style:normal;color:var(--ink-4)}
.lp-q{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px var(--s-3);
padding:8px var(--s-4);border:1px solid var(--line);border-radius:var(--r-md);
background:rgba(255,255,255,.02)}
.lp-qt{font-size:13px;color:var(--ink-2);letter-spacing:0;word-spacing:.07em}
.lp-qn{font-family:var(--font-m);font-size:12px;color:var(--ink)}
.lp-qb{grid-column:1/-1;height:3px;border-radius:2px;background:rgba(255,255,255,.08);overflow:hidden}
.lp-qb i{display:block;height:100%;border-radius:2px;background:var(--ink-4)}
.lp-q:first-child .lp-qb i{background:var(--accent)}
.lp-qm{grid-column:1/-1;font-family:var(--font-m);font-size:10.5px;color:var(--ink-4)}
.lp-diff{display:grid;gap:4px;font-family:var(--font-m);font-size:12px}
.lp-dl{display:flex;gap:8px;padding:8px 12px;border-radius:8px;
letter-spacing:0;word-spacing:.05em}
.lp-sign{flex:none;width:10px;color:var(--ink-4)}
.lp-del{background:rgba(255,255,255,.03);color:var(--ink-4);text-decoration:line-through;
text-decoration-color:rgba(255,255,255,.25)}
.lp-add{background:rgba(14,165,233,.09);border:1px solid rgba(14,165,233,.2);color:var(--ink-2)}
.lp-result{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
padding:var(--s-4);border:1px solid var(--line-2);border-radius:var(--r-md);
background:rgba(255,255,255,.025)}
.lp-res-k{font-size:12.5px;color:var(--ink-3);letter-spacing:0;word-spacing:.08em}
.lp-res-v{font-family:var(--font-d);font-weight:700;font-size:30px;color:var(--accent);
letter-spacing:-.02em}
@media(max-width:992px){
.lp{grid-template-columns:1fr;gap:var(--s-6)}
.lp-left{justify-items:stretch;gap:var(--s-5)}
.lp-steps{gap:8px}
.lp-step{grid-template-columns:22px minmax(0,1fr) 14px;padding:var(--s-4);
border-color:var(--line);background:rgba(255,255,255,.015)}
.lp-step.is-on{background:rgba(255,255,255,.045);border-color:var(--line-2)}
.lp-mk{position:relative;border:0;border-radius:0;background:0;width:14px;height:14px}
.lp-step.is-on .lp-mk{background:0;box-shadow:none}
.lp-mk::before,.lp-mk::after{content:"";position:absolute;background:var(--ink-3);
transition:transform var(--t) var(--ease),background var(--t) var(--ease)}
.lp-mk::before{left:0;top:6.4px;width:14px;height:1.5px;border-radius:1px}
.lp-mk::after{left:6.24px;top:0;width:1.5px;height:14px;border-radius:1px}
.lp-step.is-on .lp-mk::before,.lp-step.is-on .lp-mk::after{background:var(--accent)}
.lp-step.is-on .lp-mk::after{transform:scaleY(0)}
.lp-stage{min-height:0}
.lp-pane{min-height:0;padding:var(--s-5)}
.lp-u{margin-right:var(--s-6)}
.lp-b,.lp-ask,.lp-join{margin-left:var(--s-5)}
}
@media(max-width:560px){
.lp-dial-n{font-size:24px}
.lp-step{padding:var(--s-3) var(--s-4)}
.lp-b,.lp-ask,.lp-join{margin-left:var(--s-3)}
.lp-u{margin-right:var(--s-3)}
}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){.lp-seg,.lp-d{transition:none}}
.lp-match{display:grid;gap:8px;padding:var(--s-4);border:1px solid var(--line);
border-radius:var(--r-md);background:rgba(255,255,255,.02)}
.lp-mrow{display:grid;grid-template-columns:minmax(0,84px) minmax(0,1fr) auto;
gap:var(--s-3);align-items:center}
.lp-mk-t{font-family:var(--font-m);font-size:11px;color:var(--ink-3)}
.lp-mbar{height:4px;border-radius:2px;background:rgba(255,255,255,.08);overflow:hidden}
.lp-mbar i{display:block;height:100%;border-radius:2px;background:var(--ink-4)}
.lp-mrow:first-child .lp-mbar i{background:var(--accent)}
.lp-mv{font-family:var(--font-m);font-size:11px;color:var(--ink-4);text-align:right;
white-space:nowrap;letter-spacing:0;word-spacing:.06em}
.lp-mnote{margin:2px 0 0;font-size:11.5px;color:var(--ink-4);
letter-spacing:0;word-spacing:.08em}
.lp-next{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.lp-nx-k{font-family:var(--font-m);font-size:10.5px;letter-spacing:.05em;color:var(--ink-4)}
.lp-next i{padding:4px 8px;border-radius:999px;border:1px solid var(--line);
background:rgba(255,255,255,.02);font-style:normal;font-size:12px;color:var(--ink-3);
letter-spacing:0;word-spacing:.07em}
.lp-pk{display:grid;gap:4px}
.lp-pkr{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
padding:8px 8px;border:1px solid var(--line);border-radius:8px;
background:rgba(255,255,255,.02)}
.lp-pk-k{font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-4);flex:none}
.lp-pk-v{font-size:12.5px;color:var(--ink-2);text-align:right;
letter-spacing:0;word-spacing:.05em}
.lp-cycle{display:grid;grid-template-columns:auto minmax(40px,1fr) auto;gap:var(--s-3);
align-items:center;padding:12px var(--s-4);border:1px solid rgba(14,165,233,.24);
border-radius:var(--r-md);background:rgba(14,165,233,.07)}
.lp-cy-a,.lp-cy-b{font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-2)}
.lp-cy-b{color:var(--accent)}
.lp-cy-path{position:relative;height:2px;border-radius:1px;background:rgba(255,255,255,.10);
overflow:hidden}
.lp-cy-path i{position:absolute;inset:0;width:36%;border-radius:1px;
background:linear-gradient(90deg,transparent,var(--accent),transparent);
transform:translateX(-120%)}
html.anim .lp[data-stage="improve"] .lp-cy-path i{animation:lpFlow 1600ms var(--ease) infinite}
@keyframes lpFlow{from{transform:translateX(-120%)}to{transform:translateX(320%)}}
.lp-fresh{margin-left:var(--s-3);padding:2px 8px;border-radius:4px;
font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;
background:rgba(14,165,233,.16);color:var(--accent);
opacity:0;transform:translateY(-2px);
transition:opacity 420ms var(--ease),transform 420ms var(--ease)}
.lp.is-fresh .lp-fresh{opacity:1;transform:none}
.lp.is-fresh [data-lp-freshrow]{border-color:rgba(14,165,233,.34);
background:rgba(14,165,233,.06)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
html.anim .lp[data-stage="improve"] .lp-cy-path i{animation:none;transform:none;width:100%}
}
:root{--roll-dur:7s}
.pring{flex:none;width:24px;height:24px;display:block}
.pring svg{display:block;width:24px;height:24px;transform:rotate(-90deg)}
.pring circle{fill:none;stroke-width:3}
.pring-t{stroke:rgba(255,255,255,.12)}
.pring-p{stroke:var(--accent);stroke-linecap:round;
stroke-dasharray:62.83;stroke-dashoffset:62.83}
html.anim [data-roll] .is-on .pring-p{
animation:pringFill var(--roll-dur,7s) linear forwards}
html.anim [data-roll].is-paused .is-on .pring-p{animation-play-state:paused}
html.anim [data-roll].is-held .is-on .pring-p{animation:none;stroke-dashoffset:0}
@keyframes pringFill{to{stroke-dashoffset:0}}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
html.anim [data-roll] .is-on .pring-p{animation:none;stroke-dashoffset:16}
}
.pring-p{transition:stroke var(--t) var(--ease)}
[data-roll] :not(.is-on) > .pring .pring-p{stroke-dashoffset:62.83}
.lp-left{gap:var(--s-5)}
.lp-step{grid-template-columns:22px minmax(0,1fr) 24px}
.lp-step .pring{margin-top:1px}
.ho-tab{grid-template-columns:24px minmax(0,1fr);column-gap:var(--s-3)}
.ho-tab .pring{grid-row:1/3;align-self:start;margin-top:1px}
.ho-tt,.ho-td{grid-column:2}
@media(max-width:992px){
.lp-step{grid-template-columns:22px minmax(0,1fr) 24px}
}
.lp-rv{margin-left:auto;font-family:var(--font-m);font-size:10.5px;color:var(--ink-4)}
.lp-off{opacity:.6}
.pv .psave{display:inline-flex;align-items:center;gap:8px;
padding:4px 12px;border-radius:999px;
border:1px solid var(--line);background:rgba(255,255,255,.03);
font-family:var(--font-m);font-size:11px;letter-spacing:.03em;
color:var(--ink-3)}
.pv .psave::before{content:"";width:5px;height:5px;border-radius:50%;
background:var(--accent);opacity:.7;flex:none}
@media (any-hover:hover) and (any-pointer:fine){
}
@media(max-width:1000px){}
@media(max-width:620px){
}
.fc-acts{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-4)}
.fc-panel{align-self:start;display:grid;gap:var(--s-4);padding:var(--s-6);
border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 24px 60px -38px rgba(0,0,0,.95)}
@media (any-hover:hover) and (any-pointer:fine){
.fc-panel{transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.fc-panel:hover{border-color:rgba(255,255,255,.24);background:rgba(255,255,255,.028)}
}
.fc-top{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
padding-bottom:var(--s-3);border-bottom:1px solid var(--line)}
.fc-k{font-family:var(--font-m);font-size:10.5px;letter-spacing:.06em;
text-transform:uppercase;color:var(--ink-4)}
.fc-state{display:inline-flex;align-items:center;gap:8px;
font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-3)}
.fc-state::before{content:"";width:5px;height:5px;border-radius:50%;
background:var(--accent);opacity:.8;flex:none}
.fc-flow{list-style:none;margin:0;padding:0 0 0 var(--s-5);display:grid;gap:var(--s-3);
position:relative}
.fc-flow::before{content:"";position:absolute;left:4px;top:8px;bottom:8px;width:1px;
background:linear-gradient(180deg,var(--line),var(--line-2))}
.fc-step{position:relative;display:grid;gap:2px}
.fc-step::before{content:"";position:absolute;left:calc(-1 * var(--s-5) + 1px);top:8px;
width:7px;height:7px;border-radius:50%;background:var(--ink-4)}
.fc-step.is-out::before{background:var(--accent)}
.fc-lab{font-family:var(--font-m);font-size:10px;letter-spacing:.06em;
text-transform:uppercase;color:var(--ink-4)}
.fc-val{font-size:13.5px;line-height:1.45;color:var(--ink-2);
letter-spacing:0;word-spacing:.07em}
.fc-step.is-out .fc-val{color:var(--ink)}
.fc-meta{font-family:var(--font-m);font-size:10.5px;letter-spacing:.03em;color:var(--ink-4)}
.fc-out{display:grid;gap:2px;padding:var(--s-4);border-radius:var(--r-md);
border:1px solid rgba(14,165,233,.22);background:rgba(14,165,233,.06)}
.fc-out-k{font-family:var(--font-m);font-size:10px;letter-spacing:.06em;
text-transform:uppercase;color:var(--accent)}
.fc-out-v{font-size:13.5px;line-height:1.45;color:var(--ink);
letter-spacing:0;word-spacing:.07em}
.fc-later{margin:0;font-size:12px;line-height:1.55;color:var(--ink-4);
letter-spacing:0;word-spacing:.12em}
@media(max-width:900px){
.fc-panel{padding:var(--s-5)}
.fc-acts{gap:var(--s-3)}
}
@media(max-width:560px){
.fc-acts .btn{flex:1 1 100%;justify-content:center}
.fc-acts .tlink{flex:1 1 100%}
}
.pb{display:grid;gap:var(--s-6)}
.pb-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-4)}
.pb-note{font-size:12.5px;color:var(--ink-4);letter-spacing:0;word-spacing:.08em}
.pb .ptoggle{border:1px solid var(--line);background:rgba(255,255,255,.02);border-radius:999px}
.pb .ptoggle button{padding:8px 16px;border-radius:999px;font-size:13px;color:var(--ink-4);
background:0;transition:color var(--t) var(--ease),background var(--t) var(--ease)}
.pb .ptoggle button[aria-pressed="true"]{background:rgba(255,255,255,.07);color:var(--ink)}
.pb .psave{display:inline-flex;align-items:center;gap:8px;padding:4px 12px;border-radius:999px;
border:1px solid var(--line);background:rgba(255,255,255,.03);
font-family:var(--font-m);font-size:11px;letter-spacing:.03em;color:var(--ink-3)}
.pb .psave::before{content:"";width:5px;height:5px;border-radius:50%;
background:var(--accent);opacity:.7;flex:none}
.pb-board{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.045)}
.pb-col{display:grid;align-content:start;gap:var(--s-4);padding:var(--s-6) var(--s-5);
border:1px solid transparent;border-left-color:var(--line);
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
.pb-col:first-child{border-left-color:transparent}
@media (any-hover:hover) and (any-pointer:fine){
.pb-col:hover{background:rgba(255,255,255,.022);border-color:rgba(255,255,255,.24)}
}
.pb-col.is-pick{background:rgba(255,255,255,.045)}
.pb-col.is-pick:hover{background:rgba(255,255,255,.055)}
.pb-head{display:grid;gap:4px}
.pb-top{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3)}
.pb-n{margin:0;font-family:var(--font-d);font-weight:600;font-size:16px;color:var(--ink);
letter-spacing:0;word-spacing:.07em}
.pb-flag{flex:none;padding:2px 8px;border-radius:999px;
background:rgba(14,165,233,.13);color:var(--accent);
font-family:var(--font-m);font-size:10px;letter-spacing:.04em;line-height:1.5;white-space:nowrap}
.pb-cr{font-family:var(--font-m);font-size:11px;letter-spacing:.03em;color:var(--ink-4)}
.pb-price{display:flex;align-items:baseline;gap:4px}
.pb-cur{font-family:var(--font-m);font-size:13px;color:var(--ink-4);align-self:flex-start;
margin-top:8px}
.pb-num{font-family:var(--font-d);font-weight:700;font-size:36px;letter-spacing:-.02em;
color:var(--ink);line-height:1}
.pb-per{margin-left:4px;font-family:var(--font-m);font-size:12px;color:var(--ink-4)}
.pb-act .btn{width:100%;justify-content:center}
.pb-list{list-style:none;margin:0;padding:var(--s-4) 0 0;display:grid;gap:8px;
border-top:1px solid var(--line)}
.pb-list li{position:relative;padding-left:var(--s-4);font-size:12.5px;line-height:1.45;
color:var(--ink-3);letter-spacing:0;word-spacing:.07em}
.pb-list li::before{content:"";position:absolute;left:0;top:8px;width:4px;height:4px;
border-radius:50%;background:var(--ink-4)}
.pb-col.is-pick .pb-list li::before{background:var(--accent)}
.pb-list li:first-child{color:var(--ink-2)}
.pb-foot{display:grid;gap:var(--s-4)}
.pb-fine{margin:0;max-width:74ch;font-size:12.5px;line-height:1.6;color:var(--ink-4);
letter-spacing:0;word-spacing:.07em}
@media(max-width:1040px){
.pb-board{grid-template-columns:repeat(2,minmax(0,1fr))}
.pb-col:nth-child(3){border-left-color:transparent}
.pb-col:nth-child(n+3){border-top-color:var(--line)}
}
@media(max-width:640px){
.pb-board{grid-template-columns:1fr}
.pb-col{border-left-color:transparent;border-top-color:var(--line)}
.pb-col:first-child{border-top-color:transparent}
.pb-num{font-size:32px}
.pb-note{flex-basis:100%}
}
.pb-board{position:relative;
background:
linear-gradient(180deg,rgba(255,255,255,.032),rgba(255,255,255,0) 220px),
var(--bg-1)}
.pb-col{border-left:0;position:relative}
.pb-col::before{content:"";position:absolute;left:-1px;top:var(--s-6);bottom:var(--s-6);
width:1px;pointer-events:none;
background:linear-gradient(180deg,transparent,var(--line) 12%,var(--line) 88%,transparent)}
.pb-col:first-child::before{display:none}
.pb-col.is-pick{background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.028))}
.pb-col.is-pick::after{content:"";position:absolute;left:0;right:0;top:0;height:1px;
background:linear-gradient(90deg,transparent,rgba(14,165,233,.5),transparent)}
.pb-head{gap:8px;padding-bottom:var(--s-4)}
.pb-n{font-size:17px;letter-spacing:-.01em}
.pb-cr{display:inline-flex;justify-self:start;padding:4px 8px;border-radius:999px;
border:1px solid var(--line);background:rgba(255,255,255,.025);
font-family:var(--font-m);font-size:10.5px;letter-spacing:.03em;color:var(--ink-4)}
.pb-flag{padding:0;border-radius:0;background:0;color:var(--ink-3);
display:inline-flex;align-items:center;gap:8px;
font-family:var(--font-m);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase}
.pb-flag::before{content:"";width:5px;height:5px;border-radius:50%;
background:var(--accent);flex:none}
.pb-price{padding-bottom:var(--s-4);border-bottom:1px solid var(--line);
margin-bottom:var(--s-1)}
.pb-act .btn{width:100%;justify-content:center}
.btn-pick{position:relative;background:rgba(255,255,255,.06);
border-color:rgba(14,165,233,.34);color:var(--ink)}
.btn-pick::before{content:"";width:6px;height:6px;border-radius:50%;
background:var(--accent);margin-right:8px;flex:none}
@media (any-hover:hover) and (any-pointer:fine){
.btn-pick:hover{background:rgba(255,255,255,.09);border-color:rgba(14,165,233,.5)}
}
.pb-list{padding-top:var(--s-4)}
@media(max-width:640px){
.pb-board{border:0;background:0;box-shadow:none;gap:var(--s-4);overflow:visible}
.pb-col{border:1px solid var(--line);border-radius:var(--r-lg);
background:var(--bg-1);padding:var(--s-5);
box-shadow:inset 0 1px 0 rgba(255,255,255,.045)}
.pb-col::before{display:none}
.pb-col.is-pick{border-color:var(--line-2);
background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.025))}
.pb-col.is-pick::after{left:var(--s-5);right:var(--s-5)}
.pb-list{gap:8px}
.pb-list li{font-size:13px}
.pb-num{font-size:34px}
}
.pb-board{--notch:10px;--cut:242px;position:relative;
-webkit-mask:
radial-gradient(circle var(--notch) at 0 var(--cut),transparent var(--notch),#000 calc(var(--notch) + .5px)),
radial-gradient(circle var(--notch) at 100% var(--cut),transparent var(--notch),#000 calc(var(--notch) + .5px));
-webkit-mask-composite:source-in;
mask:
radial-gradient(circle var(--notch) at 0 var(--cut),transparent var(--notch),#000 calc(var(--notch) + .5px)),
radial-gradient(circle var(--notch) at 100% var(--cut),transparent var(--notch),#000 calc(var(--notch) + .5px));
mask-composite:intersect}
.pb-board{box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 30px 70px -50px rgba(0,0,0,1)}
.pb-col{padding:var(--s-6) var(--s-5) var(--s-5)}
.pb-head{gap:4px;padding-bottom:var(--s-2)}
.pb-n{font-size:17px}
.pb-cr{font-size:11.5px;color:var(--ink-3)}
.pb-flag{padding:2px 8px;border-radius:5px;
background:rgba(255,255,255,.06);border:1px solid var(--line-2);
color:var(--ink-3);font-family:var(--font-m);font-size:9.5px;letter-spacing:.06em;
text-transform:uppercase;line-height:1.6}
.pb-col.is-pick .pb-flag{background:rgba(14,165,233,.10);border-color:rgba(14,165,233,.26);
color:var(--accent)}
.btn-pick{background:rgba(255,255,255,.06);border:1px solid rgba(14,165,233,.34);
color:var(--ink);position:relative}
.btn-pick::after{content:"";position:absolute;left:22%;right:22%;top:-1px;height:1px;
background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.85}
@media (any-hover:hover) and (any-pointer:fine){
.btn-pick:hover{background:rgba(255,255,255,.10);border-color:rgba(14,165,233,.5)}
}
.pb-col.is-pick{background:linear-gradient(180deg,rgba(255,255,255,.062),rgba(255,255,255,.028))}
.pb .psave{padding:4px 12px;font-family:var(--font);font-size:12px;letter-spacing:0;
word-spacing:.06em;color:var(--ink-3)}
.pb-col{border-left:0;position:relative}
.pb-col + .pb-col::before{content:"";position:absolute;left:-.4px;top:var(--s-5);
bottom:var(--s-5);width:1px;
background:linear-gradient(180deg,transparent,var(--line-2) 12%,var(--line-2) 88%,transparent)}
.pb-list{border-top:0;padding-top:var(--s-4);position:relative}
.pb-list::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;
background:linear-gradient(90deg,transparent,var(--line-2),transparent)}
@media(max-width:1040px){
.pb-board{--cut:242px}
.pb-col:nth-child(3)::before{display:none}
}
@media(max-width:640px){
.pb-board{grid-template-columns:1fr;gap:var(--s-4);border:0;background:0;
box-shadow:none;overflow:visible;-webkit-mask:none;mask:none}
.pb-col{--notch:9px;--cut:239px;
border:1px solid var(--line);border-radius:var(--r-lg);
background:var(--bg-1);padding:var(--s-6) var(--s-5) var(--s-5);
box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 18px 40px -34px rgba(0,0,0,1);
-webkit-mask:
radial-gradient(circle var(--notch) at 0 var(--cut),transparent var(--notch),#000 calc(var(--notch) + .5px)),
radial-gradient(circle var(--notch) at 100% var(--cut),transparent var(--notch),#000 calc(var(--notch) + .5px));
-webkit-mask-composite:source-in;
mask:
radial-gradient(circle var(--notch) at 0 var(--cut),transparent var(--notch),#000 calc(var(--notch) + .5px)),
radial-gradient(circle var(--notch) at 100% var(--cut),transparent var(--notch),#000 calc(var(--notch) + .5px));
mask-composite:intersect}
.pb-col:first-child{border-top:1px solid var(--line)}
.pb-col.is-pick{border-color:var(--line-2)}
.pb-col + .pb-col::before{display:none}
.pb-list li{font-size:13px}
.pb-num{font-size:34px}
}
.wf{display:grid;grid-template-columns:minmax(0,300px) minmax(0,1fr);gap:var(--s-6);
align-items:start}
.wf-list{display:grid;gap:8px}
.wf-case{display:flex;align-items:center;gap:var(--s-3);width:100%;
-webkit-appearance:none;appearance:none;background:0;color:inherit;font:inherit;
padding:12px var(--s-4);text-align:left;cursor:pointer;
border:1px solid transparent;border-radius:var(--r-md);
transition:background var(--t) var(--ease),border-color var(--t) var(--ease)}
@media (any-hover:hover) and (any-pointer:fine){
.wf-case:hover{background:rgba(255,255,255,.035)}
}
.wf-case:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.wf-case[aria-selected="true"]{background:rgba(255,255,255,.05);border-color:var(--line-2)}
.wf-c-tx{display:grid;gap:2px;min-width:0;flex:1}
.wf-c-n{font-family:var(--font-d);font-weight:600;font-size:14.5px;color:var(--ink-3);
letter-spacing:0;word-spacing:.07em;transition:color var(--t) var(--ease)}
.wf-case[aria-selected="true"] .wf-c-n{color:var(--ink)}
.wf-c-s{font-family:var(--font-m);font-size:10.5px;letter-spacing:.03em;color:var(--ink-4)}
.wf-case[aria-selected="true"] .wf-c-s{color:var(--accent)}
.wf-c-mk{flex:none;width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.14);
transition:background var(--t) var(--ease),box-shadow var(--t) var(--ease)}
.wf-case[aria-selected="true"] .wf-c-mk{background:var(--accent);
box-shadow:0 0 0 4px rgba(14,165,233,.14)}
.wf-report{position:relative;border:1px solid var(--line);border-radius:var(--r-lg);
background:var(--bg-1);padding:var(--s-6);
box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 26px 60px -46px rgba(0,0,0,1)}
.wf-pane{display:grid;gap:var(--s-4)}
.wf-pane:not([data-on]){display:none}
.wf-top{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
padding-bottom:var(--s-3);border-bottom:1px solid var(--line)}
.wf-k{font-family:var(--font-m);font-size:10.5px;letter-spacing:.06em;
text-transform:uppercase;color:var(--ink-4)}
.wf-site{font-family:var(--font-m);font-size:10.5px;letter-spacing:.04em;color:var(--ink-3)}
.wf-flow{display:grid;gap:var(--s-3);padding-left:var(--s-5);position:relative}
.wf-flow::before{content:"";position:absolute;left:4px;top:16px;bottom:16px;width:1px;
background:linear-gradient(180deg,var(--line-2),var(--line))}
.wf-step{position:relative;display:grid;gap:4px;padding:var(--s-4);
border:1px solid var(--line);border-radius:var(--r-md);
background:rgba(255,255,255,.018)}
.wf-step::before{content:"";position:absolute;left:calc(-1 * var(--s-5) + 1px);top:20px;
width:7px;height:7px;border-radius:50%;background:var(--ink-4)}
.wf-q::before{background:rgba(255,255,255,.28)}
.wf-act::before{background:var(--accent)}
.wf-lab{font-family:var(--font-m);font-size:10px;letter-spacing:.06em;
text-transform:uppercase;color:var(--ink-4)}
.wf-qv{margin:0;font-family:var(--font-d);font-weight:600;font-size:17px;line-height:1.35;
color:var(--ink);letter-spacing:0;word-spacing:.07em}
.wf-sv,.wf-av{margin:0;font-size:13.5px;line-height:1.5;color:var(--ink-2);
letter-spacing:0;word-spacing:.07em}
.wf-act{background:rgba(14,165,233,.055);border-color:rgba(14,165,233,.2)}
.wf-act .wf-av{color:var(--ink)}
.wf-src{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px}
.wf-src-k{font-family:var(--font-m);font-size:10px;letter-spacing:.05em;color:var(--ink-4);
font-style:normal;margin-right:2px}
.wf-src i{padding:4px 8px;border-radius:999px;border:1px solid var(--line);
background:rgba(255,255,255,.03);font-family:var(--font-m);font-size:10.5px;
font-style:normal;color:var(--ink-3)}
.wf-dest{display:flex;align-items:center;gap:var(--s-3);padding-top:var(--s-3);
border-top:1px solid var(--line)}
.wf-d-k{font-family:var(--font-m);font-size:10.5px;letter-spacing:.05em;color:var(--ink-4)}
.wf-d-v{margin-left:auto;padding:4px 12px;border-radius:999px;
border:1px solid var(--line-2);background:rgba(255,255,255,.04);
font-size:12.5px;color:var(--ink-2);letter-spacing:0;word-spacing:.06em}
@media(max-width:992px){
.wf{grid-template-columns:1fr;gap:var(--s-4)}
.wf-list{gap:8px}
.wf-case{border-color:var(--line);background:rgba(255,255,255,.015);padding:var(--s-4)}
.wf-case[aria-selected="true"]{background:rgba(255,255,255,.05)}
.wf-c-mk{position:relative;width:14px;height:14px;border-radius:0;background:0;box-shadow:none}
.wf-case[aria-selected="true"] .wf-c-mk{background:0;box-shadow:none}
.wf-c-mk::before,.wf-c-mk::after{content:"";position:absolute;background:var(--ink-3);
transition:transform var(--t) var(--ease),background var(--t) var(--ease)}
.wf-c-mk::before{left:0;top:6.4px;width:14px;height:1.5px;border-radius:1px}
.wf-c-mk::after{left:6.24px;top:0;width:1.5px;height:14px;border-radius:1px}
.wf-case[aria-selected="true"] .wf-c-mk::before,
.wf-case[aria-selected="true"] .wf-c-mk::after{background:var(--accent)}
.wf-case[aria-selected="true"] .wf-c-mk::after{transform:scaleY(0)}
.wf-report{padding:var(--s-5)}
.wf-qv{font-size:16px}
}
@media(max-width:560px){
.wf-dest{flex-wrap:wrap;gap:8px}
.wf-d-v{margin-left:0}
.wf-qv{font-size:15px}
}
@media (any-hover:hover) and (any-pointer:fine){
}
@media(max-width:1000px){
}
@media(max-width:640px){
}
.tsl{position:relative}
.tsl-viewport{position:relative;overflow:hidden;padding-block:var(--s-5);
touch-action:pan-y;perspective:1400px;perspective-origin:50% 50%}
.tsl-track{position:relative;height:var(--tsl-h,340px)}
.tsl-slide{position:absolute;top:0;bottom:0;left:50%;width:min(560px,86vw);
transform:translate3d(-50%,0,0);transform-style:preserve-3d;
transition:transform 620ms var(--ease),opacity 620ms var(--ease),filter 620ms var(--ease);
will-change:transform,opacity}
.tsl-slide[data-pos="0"]{transform:translate3d(-50%,0,0) scale(1);opacity:1;z-index:3;filter:none}
.tsl-slide[data-pos="-1"]{transform:translate3d(calc(-50% - 300px),0,-180px) rotateY(13deg) scale(.93);
opacity:.45;z-index:2;filter:brightness(.7)}
.tsl-slide[data-pos="1"]{transform:translate3d(calc(-50% + 300px),0,-180px) rotateY(-13deg) scale(.93);
opacity:.45;z-index:2;filter:brightness(.7)}
.tsl-slide[data-pos="-2"]{transform:translate3d(calc(-50% - 520px),0,-340px) rotateY(18deg) scale(.86);
opacity:.16;z-index:1;filter:brightness(.5)}
.tsl-slide[data-pos="2"]{transform:translate3d(calc(-50% + 520px),0,-340px) rotateY(-18deg) scale(.86);
opacity:.16;z-index:1;filter:brightness(.5)}
.tsl-slide[data-pos="far"]{transform:translate3d(-50%,0,-500px) scale(.8);opacity:0;z-index:0;
pointer-events:none}
.tsl-slide:not([data-pos="0"]) .tsl-card{pointer-events:none}
.tsl-card{height:100%;display:flex;flex-direction:column;justify-content:space-between;
gap:var(--s-6);padding:var(--s-7);background:var(--bg-1);border:1px solid var(--line-2);
border-radius:var(--r-lg);box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}
.tsl-card blockquote{display:block;margin:0;flex:1;font-size:16px;line-height:1.62;
color:var(--ink);letter-spacing:0;word-spacing:.05em}
.tsl-card figcaption{display:flex;align-items:center;gap:var(--s-4);
padding-top:var(--s-5);border-top:1px solid var(--line)}
.tsl-card img{width:48px;height:48px;border-radius:50%;object-fit:cover;object-position:center;
flex:none;border:1px solid var(--line-2);background:var(--bg-2);display:block}
.tsl-card .who{display:block;font-family:var(--font-d);font-size:15px;font-weight:600;
color:var(--ink);letter-spacing:0;word-spacing:.06em}
.tsl-card .role{display:block;margin-top:4px;font-size:13px;color:var(--ink-3);
letter-spacing:0;word-spacing:.05em}
.tsl-controls{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;
gap:var(--s-3);margin-top:var(--s-7)}
.tsl-btn{width:48px;height:48px;border-radius:999px;border:1px solid var(--line-2);
background:0;display:inline-flex;align-items:center;justify-content:center;
color:var(--ink-3);cursor:pointer;
transition:border-color var(--t) var(--ease),color var(--t) var(--ease),background var(--t) var(--ease)}
@media (any-hover:hover) and (any-pointer:fine){
.tsl-btn:hover{border-color:rgba(255,255,255,.24);color:var(--ink);background:rgba(255,255,255,.05)}
}
.tsl-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.tsl-prev .ic{transform:rotate(180deg)}
.tsl-btn .ic{width:15px;height:15px}
.tsl-count{font-family:var(--font-m);font-size:12px;color:var(--ink-3);letter-spacing:.08em;
font-variant-numeric:tabular-nums}
.tsl-dots{order:3;width:100%;display:flex;justify-content:center;gap:var(--s-2)}
.tsl-dot{width:32px;height:44px;border:0;padding:0;background:none;display:grid;
place-items:center;cursor:pointer;border-radius:var(--r-sm)}
.tsl-dot::before{content:"";display:block;width:28px;height:4px;border-radius:2px;
background:rgba(255,255,255,.22);
transition:background var(--t) var(--ease),width var(--t) var(--ease)}
.tsl-dot[aria-current="true"]::before{background:var(--accent);width:40px}
.tsl-dot:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media(max-width:900px){
.tsl-viewport{perspective:none;padding-block:var(--s-5)}
.tsl-slide[data-pos="-2"],.tsl-slide[data-pos="2"],
.tsl-slide[data-pos="-1"],.tsl-slide[data-pos="1"]{opacity:0;
transform:translate3d(-50%,0,0) scale(.96);pointer-events:none}
.tsl-slide{width:min(560px,92vw)}
.tsl-card{padding:var(--s-6)}
.tsl-card blockquote{font-size:15px}
}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.tsl-slide{transition:none}
}
.hero-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,560px);
gap:var(--s-8);align-items:center}
.hero-tx{display:grid;gap:var(--s-5);align-content:center}
.hero .hero-tx h1{margin:0;font-size:clamp(30px,3.4vw,46px);line-height:1.08;
letter-spacing:-.015em;word-spacing:.06em}
.hero-tx .lede{margin:0;max-width:52ch;font-size:15.5px;line-height:1.6;
letter-spacing:0;word-spacing:.05em}
.hero-cta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-4)}
.hero .hero-note{margin:0;font-size:12.5px;color:var(--ink-4);
letter-spacing:0;word-spacing:.06em}
.hd{display:grid;gap:var(--s-4)}
.hd-panel{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
overflow:hidden;box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 30px 70px -50px rgba(0,0,0,1)}
.hd-top{display:flex;align-items:center;gap:8px;padding:8px var(--s-5);
border-bottom:1px solid var(--line)}
.hd-dot{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.14);flex:none}
.hd-url{margin-left:8px;font-family:var(--font-m);font-size:10.5px;color:var(--ink-4)}
.hd-badge{margin-left:auto;padding:4px 8px;border-radius:999px;
border:1px solid var(--line);font-family:var(--font-m);font-size:10.5px;
letter-spacing:.04em;color:var(--ink-3);
transition:border-color var(--t) var(--ease),color var(--t) var(--ease),background var(--t) var(--ease)}
.hd[data-state="handoff"] .hd-badge{border-color:rgba(14,165,233,.34);
background:rgba(14,165,233,.10);color:var(--accent)}
.hd-body{position:relative;height:268px;padding:var(--s-5);
display:flex;flex-direction:column;overflow:hidden}
.hd-thread{display:grid;gap:8px;align-content:end}
.hd-m{padding:8px 12px;border-radius:10px;font-size:13px;line-height:1.5;color:var(--ink-2);
letter-spacing:0;word-spacing:.06em}
.hd-v{background:rgba(255,255,255,.045);margin-right:var(--s-7)}
.hd-b{background:rgba(14,165,233,.07);border:1px solid rgba(14,165,233,.16);margin-left:var(--s-6)}
.hd-src{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px}
.hd-src-k{font-family:var(--font-m);font-size:10px;letter-spacing:.05em;color:var(--ink-4);
font-style:normal}
.hd-src i{padding:2px 8px;border-radius:999px;border:1px solid var(--line);
background:rgba(255,255,255,.03);font-family:var(--font-m);font-size:10.5px;
font-style:normal;color:var(--ink-3)}
.hd-ask{margin-left:var(--s-6);padding:8px 12px;border-radius:10px;
border:1px dashed var(--line-2);background:rgba(255,255,255,.02);display:grid;gap:8px}
.hd-ask-t{font-size:13px;color:var(--ink);letter-spacing:0;word-spacing:.06em}
.hd-field{padding:8px 8px;border-radius:8px;border:1px solid var(--line);
background:rgba(0,0,0,.35);font-family:var(--font-m);font-size:11px;color:var(--ink-4)}
.hd-join{display:flex;align-items:center;gap:8px;margin-left:var(--s-6);padding:8px 12px;
border-radius:10px;border:1px solid rgba(14,165,233,.28);background:rgba(14,165,233,.08);
font-size:12.5px;color:var(--ink);letter-spacing:0;word-spacing:.06em}
.hd-av{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;
background:var(--accent);color:#04121b;font-family:var(--font-m);font-size:10.5px;font-weight:700}
.hd-signal{position:absolute;inset:var(--s-5);display:grid;gap:var(--s-3);align-content:start}
.hd-sig-top{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4)}
.hd-sig-k,.hd-sig-n{font-family:var(--font-m);font-size:10.5px;letter-spacing:.05em;color:var(--ink-4)}
.hd-sig-q{margin:0;font-family:var(--font-d);font-weight:600;font-size:17px;line-height:1.35;
color:var(--ink);letter-spacing:0;word-spacing:.06em}
.hd-fix{display:grid;gap:4px;padding:var(--s-4);border-radius:var(--r-md);
border:1px solid rgba(14,165,233,.22);background:rgba(14,165,233,.06)}
.hd-fix-k{font-family:var(--font-m);font-size:10px;letter-spacing:.06em;
text-transform:uppercase;color:var(--accent)}
.hd-fix-v{font-size:13.5px;color:var(--ink);letter-spacing:0;word-spacing:.06em}
.hd-sig-note{margin:0;font-size:12px;color:var(--ink-4);letter-spacing:0;word-spacing:.07em}
.hd-note{margin:0;padding:0 var(--s-5) var(--s-5);font-size:12px;color:var(--ink-4);
letter-spacing:0;word-spacing:.07em}
html.anim .hd [data-hd-at]{opacity:0;transform:translateY(5px);
transition:opacity 380ms var(--ease),transform 380ms var(--ease)}
html.anim .hd [data-hd-at].is-on{opacity:1;transform:none}
html.anim .hd-signal{opacity:0;pointer-events:none;
transition:opacity 380ms var(--ease)}
html.anim .hd[data-state="signal"] .hd-signal{opacity:1;pointer-events:auto}
html.anim .hd[data-state="signal"] .hd-thread,
html.anim .hd[data-state="signal"] .hd-ctx{opacity:0;pointer-events:none}
.hd-thread{transition:opacity 380ms var(--ease)}
.hd-pills{display:flex;flex-wrap:wrap;gap:8px}
.hd-pill{display:inline-flex;align-items:center;gap:8px;
-webkit-appearance:none;appearance:none;background:0;color:inherit;font:inherit;
padding:8px 12px 8px 8px;border:1px solid var(--line);border-radius:999px;cursor:pointer;
transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.hd-pill:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media (any-hover:hover) and (any-pointer:fine){.hd-pill:hover{background:rgba(255,255,255,.04)}}
.hd-pill[aria-selected="true"]{border-color:var(--line-2);background:rgba(255,255,255,.05)}
.hd-pl{font-size:12px;color:var(--ink-4);letter-spacing:0;word-spacing:.06em;
transition:color var(--t) var(--ease)}
.hd-pill[aria-selected="true"] .hd-pl{color:var(--ink)}
.hd-ring{flex:none;width:18px;height:18px;display:block}
.hd-ring svg{width:18px;height:18px;display:block;transform:rotate(-90deg)}
.hd-ring circle{fill:none;stroke-width:3}
.hd-rt{stroke:rgba(255,255,255,.12)}
.hd-rp{stroke:var(--accent);stroke-linecap:round;stroke-dasharray:62.83;stroke-dashoffset:62.83}
html.anim .hd:not(.is-held):not(.is-paused) [aria-selected="true"] .hd-rp{
animation:pringFill 4200ms linear forwards}
html.anim .hd.is-paused [aria-selected="true"] .hd-rp{animation-play-state:paused}
html.anim .hd.is-held [aria-selected="true"] .hd-rp{animation:none;stroke-dashoffset:0}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
html.anim .hd [aria-selected="true"] .hd-rp{animation:none;stroke-dashoffset:16}
html.anim .hd [data-hd-at],html.anim .hd-signal,.hd-thread{transition:none}
}
@media(max-width:1180px){
.hero-grid{grid-template-columns:minmax(0,1fr) minmax(0,430px);gap:var(--s-6)}
.hero .hero-tx h1{font-size:clamp(26px,3vw,34px)}
.hero-tx .lede{font-size:14.5px}
.hd-body{height:252px}
.hd-pl{font-size:11.5px}
}
@media(max-width:900px){
.hero-grid{grid-template-columns:1fr;gap:var(--s-6)}
.hero-tx{max-width:64ch}
.hd-body{height:250px}
}
@media(max-width:560px){
.hero-cta{gap:var(--s-3)}
.hero-cta .btn{flex:1 1 100%;justify-content:center}
.hero-cta .tlink{flex:1 1 100%}
.hd-body{height:262px;padding:var(--s-4)}
.hd-v{margin-right:var(--s-4)}
.hd-b,.hd-ask,.hd-join{margin-left:var(--s-3)}
.hd-signal{inset:var(--s-4)}
.hd-pl{font-size:11.5px}
}
.hd-ctx{display:flex;flex-wrap:wrap;align-items:center;gap:8px;
transition:opacity 380ms var(--ease);
padding-bottom:var(--s-4);margin-bottom:var(--s-4);
border-bottom:1px solid var(--line)}
.hd-ctx-k{font-family:var(--font-m);font-size:10px;letter-spacing:.05em;color:var(--ink-4)}
.hd-ctx-p{font-family:var(--font-m);font-size:10.5px;color:var(--ink-2);
padding:2px 8px;border-radius:5px;background:rgba(255,255,255,.05)}
.hd-ctx-tag{padding:2px 8px;border-radius:999px;
border:1px solid rgba(14,165,233,.26);background:rgba(14,165,233,.09);
font-family:var(--font-m);font-size:10px;letter-spacing:.04em;color:var(--accent)}
.hd-ctx-src{margin-left:auto;display:flex;gap:4px}
.hd-ctx-src i{font-family:var(--font-m);font-size:10px;font-style:normal;color:var(--ink-4)}
.hd-ctx-src i::before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;
background:var(--accent);opacity:.65;margin-right:4px;vertical-align:middle}
.hd-idx{margin-top:auto}
.hd-sig-src{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.hd-sig-src i{padding:2px 8px;border-radius:999px;border:1px solid var(--line);
background:rgba(255,255,255,.03);font-family:var(--font-m);font-size:10.5px;
font-style:normal;color:var(--ink-3)}
.hd-sig-src .hd-src-k{padding:0;border:0;background:0}
.hd-need{margin:0;font-size:12.5px;line-height:1.5;color:var(--ink-3);
letter-spacing:0;word-spacing:.06em}
.hd-need::before{content:"";display:inline-block;width:14px;height:1px;
background:var(--accent);opacity:.7;margin-right:8px;vertical-align:middle}
@media(max-width:1180px){
.hd-ctx-src{margin-left:0}
}
@media(max-width:900px){
.hd-body{height:250px}
.hd-ctx{gap:8px;padding-bottom:var(--s-3);margin-bottom:var(--s-3)}
.hd-m{font-size:12.5px;padding:8px 8px}
.hd-need{font-size:12px}
}
@media(max-width:560px){
.hd-body{height:262px;padding:var(--s-4)}
.hd-ctx-src{display:none}
.hd-sig-q{font-size:15.5px}
.hd-need::before{display:none}
}
.hd-idx{display:grid;gap:4px;margin-bottom:var(--s-4);
transition:opacity 380ms var(--ease),max-height 420ms var(--ease),margin 380ms var(--ease)}
.hd-ix{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
padding:8px 8px;border:1px solid var(--line);border-radius:8px;
background:rgba(255,255,255,.02)}
.hd-ix-n{font-family:var(--font-m);font-size:11px;color:var(--ink-2)}
.hd-ix-v{font-family:var(--font-m);font-size:10px;letter-spacing:.04em;color:var(--ink-4)}
.hd-ix-v::before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;
background:var(--accent);opacity:.7;margin-right:8px;vertical-align:middle}
.hd-ix-note{margin:2px 0 0;font-size:11.5px;color:var(--ink-4);
letter-spacing:0;word-spacing:.07em}
html.anim .hd:not([data-state="ask"]) .hd-idx{opacity:0;max-height:0;margin-bottom:0;
overflow:hidden;pointer-events:none}
html.anim .hd[data-state="ask"] .hd-idx{opacity:1;max-height:170px}
.hd-signal{align-content:space-between}
@media(max-width:560px){
.hd-ix{padding:8px 8px}
.hd-ix-note{font-size:11px}
}
.stars{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;contain:strict}
.stars::before{content:"";position:absolute;inset:0;
background:radial-gradient(ellipse 120% 80% at 50% 108%,rgba(30,28,38,.45),transparent 62%)}
.stars canvas{position:absolute;inset:0;opacity:0;transition:opacity 1.4s var(--ease)}
.stars canvas.is-live{opacity:.9}


/* ==========================================================================
   CREOGLYPH EDITORIAL SYSTEMS, PORTED
   Source: Creoglyph deploy bundle assets/css/main.css
   Families: .art-* .post-* .gl-* .blog-* .mast* .phead .crumbs .mod-*
             .figbox .cta-band .feat-* .share-*
   Nothing above this line was modified. Revert by deleting this block.
   --sweep is the only token Creoglyph used that Creobot lacked.
   ========================================================================== */
@property --sweep{syntax:'<angle>';inherits:false;initial-value:0deg}
@keyframes sweep{to{--sweep:360deg}}
/* Section header. One consistent shape everywhere, so rhythm never drifts. */
.shead{max-width:44rem;margin-bottom:var(--s-10)}
.shead .h2{margin-bottom:var(--s-4)}
@media (max-width:900px){
.shead{margin-bottom:var(--s-9)}
}
.tlink{display:inline-flex;align-items:center;gap:var(--s-2);font-size:15px;font-weight:600;padding-block:var(--s-1)}
.tlink .ic{width:12px;height:12px;fill:var(--ink-4)}
/* ---------- text links: the rule leaves to the right, the accent enters from
     the left. Both are absolutely positioned pseudo elements, so the link box
     never changes. ---------- */
.tlink{position:relative;border-bottom:0;padding-bottom:var(--s-3)}
.tlink::after,.tlink::before{content:"";position:absolute;left:0;right:0;bottom:0;height:1px}
.tlink::before{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
    background:var(--line-2);transform:scaleX(1);transform-origin:0 50%}
.tlink:hover .ic,.tlink:focus-visible .ic{fill:var(--ink-2);transform:translate(2px,-2px)}
.tlink .ic{transition:fill 200ms var(--ease),transform 300ms var(--ease)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.tlink::before{transform:scaleX(0) !important}
.tlink::after{transform:scaleX(1) !important}
.tlink:hover::after{background:var(--accent)}
}
/* ============================================================================
   1. HOME HERO
   Homepage header only. Every selector in this block starts with .home-hero or
   .hs-, and none of them matches an element on any other page. Other page
   openers are .phead, .app-hero, .art-hero and .blog-hero, all untouched.

   Two phases. The intro is a centered block in normal flow, so the opening
   state is exactly the required layout and nothing clever happens to it. The
   stage below it pins and runs the six beat sequence. Without JS or under
   reduced motion the stage does not pin, the canvas shows the fully composed
   system, and the six beats render as an ordered list. Motion is opt in: JS
   adds .is-motion and only then does anything hide.
   ============================================================================ */
.home-hero{padding-top:calc(var(--nav-h) + var(--s-9))}
.figbox{margin:0;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);padding:var(--pad);box-shadow:inset 0 1px 0 rgba(255,255,255,.035)}
.figbox > svg{width:100%;height:auto;display:block}
.figcap{margin-top:var(--s-6);font-size:13px;line-height:1.5;color:var(--ink-3)}
.mod{display:flex;flex-direction:column;padding:var(--pad);border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);box-shadow:inset 0 1px 0 rgba(255,255,255,.03);transition:border-color var(--t) var(--ease)}
.mod:hover{border-color:var(--line-2)}
.mod-gl{width:44px;height:44px;margin-bottom:var(--s-6);flex:none}
.mod .h4{margin-bottom:var(--s-2)}
.mod p{font-size:14px;line-height:1.58;color:var(--ink-2)}
.mod-tags{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:auto;padding-top:var(--s-5)}
.mod-tag{font-family:var(--font-m);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);border:1px solid var(--line);border-radius:var(--r-sm);padding:var(--s-1) var(--s-2)}
/* ============================================================================
   6. CREOBOT
   ============================================================================ */
.figbox-wide{margin:0}
.figbox-wide > svg{width:100%;height:auto;display:block}
/* module glyphs share one canvas and one stroke */
.gl{fill:none;stroke:var(--ink-3);stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}
.gl .a{stroke:var(--accent)}
.gl .f{fill:rgba(255,255,255,.05);stroke:none}
/* ============================================================================
   PAGE SYSTEM
   Everything below extends the approved homepage system for inner pages. No new
   colours, no new radii, no new easing. Same tokens, same spacing scale.
   ============================================================================ */

/* ---------- page head: the inner page equivalent of the hero ---------- */
.phead{padding-top:calc(var(--nav-h) + var(--s-12));padding-bottom:var(--s-11)}
@media (max-width:900px){
.phead{padding-top:calc(var(--nav-h) + var(--s-9));padding-bottom:var(--s-9)}
}
.phead-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--s-11);align-items:center}
.phead-grid.-wide{grid-template-columns:minmax(0,1fr) minmax(0,1.12fr)}
@media (max-width:960px){
.phead-grid,.phead-grid.-wide{grid-template-columns:1fr;gap:var(--s-9)}
}
.phead .display{font-size:clamp(30px,4.4vw,56px);max-width:16ch}
.phead .lead{margin-top:var(--s-6)}
.phead-cta{margin-top:var(--s-8);display:flex;flex-wrap:wrap;gap:var(--s-3)}
.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2);font-size:13px;color:var(--ink-4);margin-bottom:var(--s-6)}
.crumbs a{color:var(--ink-3)}
.crumbs a:hover{color:var(--ink)}
.crumbs .ic{width:10px;height:10px;fill:var(--ink-4)}
/* ---------- direct answer block. One paragraph an answer engine can quote. ---------- */
/* The rule is drawn on a pseudo element sized to the text, not on the box, so
   it can never run past the last line. */
.answer{position:relative;padding-left:var(--s-8);max-width:62ch}
.answer::before{content:"";position:absolute;left:0;top:.42em;bottom:.42em;
  width:2px;border-radius:1px;background:var(--accent)}
.answer .lbl{display:block;font-family:var(--font-m);font-size:10.5px;letter-spacing:.15em;
  text-transform:uppercase;color:var(--ink-3);margin-bottom:var(--s-3)}
.answer p{color:var(--ink-2);font-size:17px;line-height:1.62;text-wrap:pretty}
.answer strong{color:var(--ink);font-weight:600}
@media (max-width:600px){
.answer{padding-left:var(--s-5)}
}
.cta-band{border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--bg-1);
  padding:clamp(32px,5vw,64px);box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.cta-band .h2{max-width:20ch}
.cta-band .body{margin-top:var(--s-4)}
.cta-actions{margin-top:var(--s-8);display:flex;flex-wrap:wrap;gap:var(--s-3)}
.mod-tag{font-family:var(--font-m);font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--ink-2);border:1px solid rgba(255,255,255,.14);border-radius:var(--r-sm);
  padding:var(--s-1) var(--s-2);background:rgba(255,255,255,.025)}
.tcard .who{display:block;font-family:var(--font-d);font-size:14px;font-weight:600;color:var(--ink);line-height:1.3}
.tsl-card .who{display:block;font-family:var(--font-d);font-size:15px;font-weight:600;color:var(--ink)}
/* ============================================================================
   CTA PANEL, upgraded
   ============================================================================ */
.cta-band{position:relative}
/* The wash does not depend on the cursor, so it belongs on the element rather
   than on ::before. It used to occupy ::before and override .glow's proximity
   ring, which is why every CTA border was inert. */
.cta-band{background-image:radial-gradient(90% 140% at 12% 0%,rgba(var(--accent-rgb),.07),transparent 60%)}
.cta-band > *{position:relative;z-index:1}
.cta-band .h2{max-width:22ch}
.cta-band .body{max-width:56ch}
/* a slow edge sweep so the panel is never flat, independent of the cursor */
.cta-band::after{content:"";position:absolute;inset:-1px;border-radius:inherit;pointer-events:none;z-index:0;
  padding:1px;opacity:.55;
  background:conic-gradient(from var(--sweep,0deg) at 50% 50%,transparent 0deg,
    rgba(var(--accent-rgb),.75) 20deg,rgba(255,255,255,.5) 34deg,transparent 62deg);
  -webkit-mask:linear-gradient(#000,#000) content-box,linear-gradient(#000,#000);
  mask:linear-gradient(#000,#000) content-box,linear-gradient(#000,#000);
  -webkit-mask-composite:xor;mask-composite:exclude;
  animation:sweep 9s linear infinite}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.cta-band::after{animation:none;opacity:.3}
}
/* ---------- chips, final contrast pass ---------- */
.tag,.mod-tag,.cred-app{color:var(--ink-2)}
.mod-tag{font-size:11px;letter-spacing:.07em;padding:var(--s-1) var(--s-3);
  border-color:rgba(255,255,255,.18);background:rgba(255,255,255,.04)}
.fstep-n,.scrolly-prog + .figcap{color:var(--ink-2)}
.tlink{position:relative;padding-bottom:var(--s-3)}
.foot ul a::after,.tlink::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:linear-gradient(90deg,transparent,var(--accent),transparent);
  transform:scaleX(0);transform-origin:0 50%;
  transition:transform 340ms var(--ease)}
.foot ul a:hover::after,.foot ul a:focus-visible::after,
.tlink:hover::after,.tlink:focus-visible::after{transform:scaleX(1)}
.foot-mail .lbl{display:block;font-family:var(--font-m);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4);margin-bottom:var(--s-3)}
html.anim .phead-grid .art-fig > text,
/* figSettle loop removed; see CTA REVEAL, ONCE at end of file */
html.anim .phead-grid .art-fig > text:nth-of-type(n+3),

html.anim .phead-grid .art-fig > text:nth-of-type(n+5),


@media (prefers-reduced-motion:reduce){
.foot ul a::after,.tlink::after{transition:none}
}
/* ---------- external affordance ---------- */
.foot ul a[target="_blank"] .ic,.tlink[target="_blank"] .ic{opacity:.85}
/* ---------- CTA panel: copy plus a product signal, one conversion moment ---------- */
.cta-band{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,300px);
  gap:clamp(24px,4vw,64px);align-items:center}
.cta-copy{min-width:0}
.cta-band .cta-actions{margin-top:var(--s-7)}
@media (max-width:860px){
.cta-band{grid-template-columns:1fr}
}
/* ---------- CTA: a signature corner rule, so the panel is not a plain box ---------- */
.cta-band{border-color:rgba(255,255,255,.14)}
.cta-band .cta-copy{position:relative}
.cta-band .cta-copy::before{content:"";position:absolute;left:calc(var(--s-7) * -1);top:.1em;
  width:2px;height:2.2em;border-radius:1px;
  background:linear-gradient(180deg,var(--accent),rgba(var(--accent-rgb),0))}
@media (max-width:860px){
.cta-band .cta-copy::before{display:none}
}
.cta-band .cta-copy{padding-left:var(--s-7)}
@media (max-width:860px){
.cta-band .cta-copy{padding-left:0}
}
/* ============================================================================
   BREATHING ROOM PASS
   Text was sitting hard against rules, card edges and section dividers in
   several places. Every value below is on the spacing scale.
   ============================================================================ */

/* the direct answer block: the rule was close to the copy and the copy was
   close to the section divider underneath it */
.answer{padding-left:var(--s-9);padding-block:var(--s-2)}
.answer .lbl{margin-bottom:var(--s-4)}
.answer p + p{margin-top:var(--s-4)}
@media (max-width:600px){
.answer{padding-left:var(--s-6)}
}
/* module and mod cards: tags were close to the bottom edge */
.mod{padding:var(--pad)}
.mod-tags{padding-top:var(--s-6)}
/* ============================================================================
   GLOSSARY
   Search, an A to Z rail, and the terms. Everything is server rendered, so with
   JavaScript off every definition is present; the script only filters.
   ============================================================================ */
.glossary{display:grid;gap:var(--s-9)}
.gl-search{position:relative}
.gl-search input{width:100%;background:var(--bg-1);border:1px solid var(--line-2);
  border-radius:var(--r-lg);padding:var(--s-6) var(--s-6) var(--s-6) var(--s-12);
  font-family:var(--font-b);font-size:17px;color:var(--ink);
  transition:border-color var(--t-fast) var(--ease)}
.gl-search input::placeholder{color:var(--ink-4)}
.gl-search input:hover{border-color:var(--line-3)}
.gl-search input:focus{outline:2px solid var(--accent);outline-offset:2px;border-color:transparent}
.gl-search input::-webkit-search-cancel-button{filter:invert(1) opacity(.4)}
.gl-icon{position:absolute;left:var(--s-6);top:50%;transform:translateY(-50%);
  width:18px;height:18px;pointer-events:none}
.gl-icon .ic{width:18px;height:18px;fill:var(--ink-4)}
.gl-count{margin-top:var(--s-4);font-family:var(--font-m);font-size:11px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}
.gl-body{display:grid;grid-template-columns:minmax(0,64px) minmax(0,1fr);gap:var(--s-9)}
.gl-rail{position:sticky;top:calc(var(--nav-h) + var(--s-7));align-self:start;
  display:grid;gap:var(--s-1);max-height:70vh;overflow:auto}
.gl-letter{display:grid;place-items:center;width:36px;height:36px;border-radius:var(--r-sm);
  font-family:var(--font-m);font-size:12px;color:var(--ink-3);
  transition:color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.gl-letter:hover{color:var(--ink);background:rgba(255,255,255,.06)}
.gl-letter.is-empty{opacity:.3;pointer-events:none}
.gl-letter:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.gl-groups{display:grid;gap:var(--s-10);min-width:0}
.gl-group{scroll-margin-top:calc(var(--nav-h) + var(--s-7))}
.gl-group[hidden]{display:none}
.gl-initial{font-family:var(--font-d);font-size:clamp(28px,3vw,38px);font-weight:600;
  letter-spacing:-.03em;color:var(--ink-4);margin-bottom:var(--s-6);
  padding-bottom:var(--s-4);border-bottom:1px solid var(--line)}
.gl-list{display:grid;gap:var(--s-4);margin:0}
.gl-term{padding:var(--pad);border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--bg-1);box-shadow:inset 0 1px 0 rgba(255,255,255,.035);
  transition:border-color var(--t) var(--ease)}
.gl-term[hidden]{display:none}
.gl-term dt{font-family:var(--font-d);font-size:18px;font-weight:600;letter-spacing:-.02em;
  color:var(--ink);scroll-margin-top:calc(var(--nav-h) + var(--s-8))}
.gl-term dd{margin:var(--s-4) 0 0;font-size:15.5px;line-height:1.65;color:var(--ink-2);max-width:68ch}
.gl-term mark{background:rgba(var(--accent-rgb),.22);color:var(--ink);border-radius:2px;padding:0 2px}
.gl-empty{padding:var(--pad-lg);border:1px dashed var(--line-2);border-radius:var(--r-lg);
  color:var(--ink-2);text-align:center}
@media (any-hover:hover) and (any-pointer:fine){
.gl-term:hover{border-color:var(--line-2)}
}
@media (max-width:820px){
.gl-body{grid-template-columns:1fr;gap:var(--s-7)}
.gl-rail{position:static;display:flex;flex-wrap:wrap;max-height:none;
    padding-bottom:var(--s-4);border-bottom:1px solid var(--line)}
.gl-search input{padding:var(--s-5) var(--s-5) var(--s-5) var(--s-11);font-size:16px}
}
/* ============================================================================
   CONTENT SYSTEM: glossary, blog overview, article template
   ============================================================================ */

/* ---------- shared filter chips ---------- */
.gl-chips{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:var(--s-5)}
.gl-chip{display:inline-flex;align-items:center;gap:var(--s-2);min-height:40px;
  padding:var(--s-2) var(--s-5);border:1px solid var(--line);border-radius:var(--r-pill);
  background:rgba(255,255,255,.02);color:var(--ink-2);font-size:13.5px;font-weight:600;cursor:pointer;
  transition:color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.gl-chip:hover{color:var(--ink);border-color:var(--line-2)}
.gl-chip[aria-pressed="true"]{color:var(--ink);border-color:rgba(var(--accent-rgb),.5);background:rgba(var(--accent-rgb),.08)}
.gl-chip .n{font-family:var(--font-m);font-size:11px;color:var(--ink-3)}
.gl-chip[aria-pressed="true"] .n{color:var(--accent)}
.gl-chip:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.glossary{display:grid;gap:var(--s-8)}
.gl-search{position:relative}
.gl-search input{width:100%;background:var(--bg-1);border:1px solid var(--line-2);
  border-radius:var(--r-lg);padding:var(--s-6);font-family:var(--font-b);font-size:17px;color:var(--ink)}
.gl-search input::placeholder{color:var(--ink-4)}
.gl-search input:focus{outline:2px solid var(--accent);outline-offset:2px;border-color:transparent}
.gl-count{margin-top:var(--s-4);font-family:var(--font-m);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-3)}
.gl-body{display:grid;grid-template-columns:minmax(0,56px) minmax(0,1fr);gap:var(--s-8)}
.gl-rail{position:sticky;top:calc(var(--nav-h) + var(--s-7));align-self:start;display:grid;gap:2px;
  max-height:72vh;overflow:auto}
.gl-letter{display:grid;place-items:center;width:34px;height:32px;border-radius:var(--r-sm);
  font-family:var(--font-m);font-size:12px;color:var(--ink-3);
  transition:color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.gl-letter:hover{color:var(--ink);background:rgba(255,255,255,.06)}
.gl-letter.is-empty{opacity:.25;pointer-events:none}
/* letters the glossary holds no term for: present, dimmed, not focusable */
.gl-letter.is-off{color:var(--ink-4);opacity:.42;pointer-events:none;cursor:default}
.gl-letter.is-current{color:var(--ink);background:var(--accent-dim);
  box-shadow:inset 0 0 0 1px var(--accent-bd)}
.gl-letter:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* a deep linked term gets a brief mark so you can see where you landed */
.gl-term.is-target{box-shadow:inset 0 0 0 1px var(--accent-bd);
  background:var(--accent-dim);border-radius:var(--r-lg)}
@media (prefers-reduced-motion:no-preference){
.gl-term.is-target{transition:background var(--t-slow) var(--ease),box-shadow var(--t-slow) var(--ease)}
}
.gl-groups{display:grid;gap:var(--s-9);min-width:0}
.gl-group{scroll-margin-top:calc(var(--nav-h) + var(--s-7))}
.gl-group[hidden]{display:none}
.gl-initial{font-family:var(--font-d);font-size:clamp(26px,3vw,34px);font-weight:600;
  letter-spacing:-.03em;color:var(--ink-4);margin-bottom:var(--s-6);padding-bottom:var(--s-4);
  border-bottom:1px solid var(--line)}
.gl-list{display:grid;gap:var(--s-4);margin:0}
.gl-term{padding:var(--pad);border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--bg-1);box-shadow:inset 0 1px 0 rgba(255,255,255,.035)}
.gl-term[hidden]{display:none}
.gl-term dt{display:flex;align-items:baseline;gap:var(--s-4);flex-wrap:wrap;
  font-family:var(--font-d);font-size:18px;font-weight:600;letter-spacing:-.02em;color:var(--ink);
  scroll-margin-top:calc(var(--nav-h) + var(--s-8))}
.gl-cat{font-family:var(--font-m);font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink-3);border:1px solid var(--line);border-radius:var(--r-sm);padding:2px var(--s-3)}
.gl-term dd{margin:var(--s-4) 0 0}
.gl-def{font-size:15.5px;line-height:1.65;color:var(--ink-2);max-width:68ch}
.gl-matters{margin-top:var(--s-4);font-size:14.5px;line-height:1.6;color:var(--ink-2);max-width:68ch}
.gl-matters .lbl,.gl-rels .lbl,.gl-notice .lbl,.gl-mistake .lbl,.gl-note .lbl{display:block;font-family:var(--font-m);font-size:10px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-4);margin-bottom:var(--s-2)}
.gl-rels{margin-top:var(--s-5);display:flex;flex-wrap:wrap;gap:var(--s-2)}
.gl-rels .lbl{width:100%}
.gl-rel{font-size:12.5px;color:var(--ink-2);border:1px solid var(--line);border-radius:var(--r-pill);
  padding:var(--s-1) var(--s-4);transition:color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}
.gl-rel:hover{color:var(--ink);border-color:var(--line-2)}
.gl-rel:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.gl-link{display:inline-block;margin-top:var(--s-5)}
.gl-empty{padding:var(--pad-lg);border:1px dashed var(--line-2);border-radius:var(--r-lg);
  color:var(--ink-2);text-align:center}
@media (max-width:820px){
.gl-body{grid-template-columns:1fr;gap:var(--s-6)}
.gl-rail{position:static;display:flex;flex-wrap:wrap;max-height:none;
    padding-bottom:var(--s-4);border-bottom:1px solid var(--line)}
}
/* ---------- blog overview ---------- */
.blog-subhead{margin-bottom:var(--s-6)}
/* Full width hero article, then three balanced cards. Four children, four
   cells, nothing empty.
   The previous version left track 3 of row 2 empty at 362x629 because it had
   three children in a three track grid with the lead spanning all three.
   A two track version with the lead spanning both rows also failed: it made
   the lead 1349px tall against a natural content height of about 760, and a
   16:9 figure cannot grow to fill a 666px panel, so it traded an empty grid
   cell for 327px of dead panel plus 264px of stretched excerpt. */
.feat-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-4);
  align-items:stretch}
.feat-grid > li{display:flex;min-width:0}
.feat-grid > li > .post-card{width:100%}
.feat-grid > li:first-child{grid-column:span 3}
@media (max-width:900px){
.feat-grid{grid-template-columns:1fr}
.feat-grid > li:first-child{grid-column:span 1}
}
.blog-controls{margin-top:var(--s-11);padding-top:var(--s-9);border-top:1px solid var(--line);
  display:grid;gap:var(--s-5)}
.post-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-4);margin-top:var(--s-8)}
.post-grid.-three{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:980px){
.post-grid,.post-grid.-three{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:680px){
.post-grid,.post-grid.-three{grid-template-columns:1fr}
}
.post-grid > li[hidden]{display:none}
.blog-more{margin-top:var(--s-8);text-align:center}
.post-card{display:flex;flex-direction:column;height:100%;background:var(--bg-1);
  border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;
  transition:border-color var(--t-fast) var(--ease)}
.post-card:hover{border-color:var(--line-2)}
/* Figure panels were free height, so a small illustration sat in a tall box
   next to a large one. Fixed ratio and centred, so the row reads evenly. */
.post-shot{display:grid;place-items:center;background:var(--bg-2);
  border-bottom:1px solid var(--line);padding:var(--pad-xs);
  aspect-ratio:16/9;position:relative}
.post-shot svg{width:100%;height:auto;max-height:100%;display:block}
/* the accent is rationed: one hairline, only on pointer hover or keyboard focus */
.post-shot::after{content:"";position:absolute;left:0;right:0;top:0;height:1px;
  background:linear-gradient(90deg,var(--accent),transparent 62%);
  transform:scaleX(0);transform-origin:left;
  transition:transform var(--t) var(--ease)}
@media (any-hover:hover){
.post-card:hover .post-shot::after{transform:scaleX(1)}
}
.post-card:focus-within .post-shot::after{transform:scaleX(1)}
/* hero article: -wide gives the side by side split, -lead the type scale.
   The figure panel keeps its natural height here rather than a fixed ratio,
   because it is beside the copy rather than above it. */
.post-card.-lead .post-shot{aspect-ratio:auto;padding:var(--pad)}
.post-card.-lead .post-body{padding:var(--pad-lg);justify-content:center}
.post-card.-lead .post-excerpt{font-size:16px;line-height:1.65;flex:0 0 auto}
.post-card.-wide{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);align-items:center}
.post-card.-wide .post-shot{border-bottom:0;border-right:1px solid var(--line);height:100%}
@media (max-width:900px){
.post-card.-wide{grid-template-columns:1fr}
.post-card.-wide .post-shot{border-right:0;border-bottom:1px solid var(--line)}
}
.post-body{display:flex;flex-direction:column;gap:var(--s-3);padding:var(--pad);flex:1}
.post-meta{display:flex;align-items:center;gap:var(--s-3);font-family:var(--font-m);
  font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.post-cat{color:var(--accent)}
.post-dot{width:3px;height:3px;border-radius:50%;background:var(--ink-4)}
.post-title{font-family:var(--font-d);font-size:clamp(18px,1.8vw,21px);font-weight:600;
  letter-spacing:-.025em;line-height:1.3;color:var(--ink)}
.post-card.-wide .post-title{font-size:clamp(22px,2.4vw,30px)}
.post-card.-lead .post-title{font-size:clamp(24px,2.7vw,34px);line-height:1.22}
.post-title a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
.post-excerpt{font-size:14.5px;line-height:1.6;color:var(--ink-2);flex:1;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.post-card.-lead .post-excerpt{-webkit-line-clamp:4}
.post-tags{display:flex;flex-wrap:wrap;gap:var(--s-2);padding-top:var(--s-3)}
.post-by{display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:baseline;
  padding-top:var(--s-5);border-top:1px solid var(--line);margin-top:auto}
.post-by .who{font-size:13.5px;font-weight:600;color:var(--ink-2)}
.post-by .when{font-family:var(--font-m);font-size:11px;color:var(--ink-4)}
/* ---------- article ---------- */
.art-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.9fr);gap:var(--s-10);align-items:center}
@media (max-width:960px){
.art-hero{grid-template-columns:1fr;gap:var(--s-8)}
}
.art-title{max-width:20ch}
.art-figure{border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--bg-2);
  padding:var(--pad-sm);box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}
.art-figure svg,.art-fig{width:100%;height:auto;display:block}
.art-by{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-5);align-items:baseline;margin-top:var(--s-7)}
.art-by .who{font-family:var(--font-d);font-size:15px;font-weight:600;color:var(--ink)}
.art-by .role{font-size:13.5px;color:var(--ink-2)}
.art-by .when{font-family:var(--font-m);font-size:11px;color:var(--ink-4)}
.art-share{display:flex;align-items:center;gap:var(--s-3);margin-top:var(--s-7)}
.art-share .lbl{font-family:var(--font-m);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4)}
.share-btn{display:grid;place-items:center;width:40px;height:40px;border-radius:var(--r-pill);
  border:1px solid var(--line);color:var(--ink-2);font-size:12px;font-weight:600;cursor:pointer;
  background:none;transition:color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}
.share-btn:hover{color:var(--ink);border-color:var(--line-2)}
.share-btn:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.share-btn.is-copied{color:var(--accent);border-color:rgba(var(--accent-rgb),.5)}
/* TOC moved to the right rail. Body now starts at the wrap edge, so the
   article title and the first paragraph share a left edge and the hero stops
   reading as a detached block. */
.art-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,240px);gap:var(--s-10);
  padding-block:var(--s-10)}
.art-layout > .art-toc{grid-column:2;grid-row:1}
.art-layout > .art-body{grid-column:1;grid-row:1}
@media (max-width:960px){
.art-layout{grid-template-columns:1fr;gap:var(--s-7);padding-block:var(--s-8)}
.art-layout > .art-toc{grid-column:1;grid-row:1}
.art-layout > .art-body{grid-column:1;grid-row:2}
}
.art-toc{position:sticky;top:calc(var(--nav-h) + var(--s-7));align-self:start;
  max-height:calc(100vh - var(--nav-h) - var(--s-12));overflow-y:auto;
  overscroll-behavior:contain}
@media (max-width:960px){
.art-toc{position:static;max-height:none;overflow:visible;
  border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--pad-sm);background:var(--bg-1)}
}
.art-toc-h{font-family:var(--font-m);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-4);margin-bottom:var(--s-5)}
.art-toc ol{display:grid;gap:var(--s-3);counter-reset:toc;margin:0}
.art-toc li{list-style:none}
.art-toc a{display:block;font-size:14px;line-height:1.45;color:var(--ink-3);
  padding-left:var(--s-4);border-left:0;
  transition:color var(--t-fast) var(--ease)}
.art-toc li > a:hover{color:var(--ink-2)}
.art-toc a.is-current{color:var(--ink)}
.art-toc li > a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.art-toc-cta{margin-top:var(--s-8);padding-top:var(--s-6);border-top:1px solid var(--line)}
.art-toc-cta .tiny{margin-bottom:var(--s-4)}
/* Prose stays at 68ch. Block furniture breaks out to the full track via
   .art-bleed, which is what gives the page narrow prose and wider furniture. */
.art-body{min-width:0}
.art-body > *{max-width:68ch}
.art-body > .art-bleed,.art-body > .art-takeaways,
.art-body > .art-terms,.art-body > .art-author{max-width:none}
.art-body h2{font-family:var(--font-d);font-size:clamp(21px,2.4vw,27px);font-weight:600;
  letter-spacing:-.025em;line-height:1.28;color:var(--ink);
  margin-top:var(--s-10);margin-bottom:var(--s-5);scroll-margin-top:calc(var(--nav-h) + var(--s-7))}
.art-body h2:first-of-type{margin-top:var(--s-9)}
/* Section gaps were 48, 72 or 88px depending on which element happened to come
   before the heading. One value now, whatever precedes it. :not() is here to
   outrank .art-body h2:first-of-type, which otherwise wins at (0,2,1) and
   leaves the first section gap at 48 while every other gap is 64. */
.art-body > * + h2:not(.art-take-h){margin-top:var(--s-10)}
.art-body p{font-size:16.5px;line-height:1.72;color:var(--ink-2);margin-bottom:var(--s-5)}
.art-list{display:grid;gap:var(--s-3);margin:0 0 var(--s-6);padding-left:var(--s-6)}
.art-list li{font-size:16px;line-height:1.65;color:var(--ink-2)}
.art-list li::marker{color:var(--accent)}
.art-quote{margin:var(--s-8) 0;padding:var(--pad);padding-left:var(--pad-lg);border-left:2px solid var(--accent);
  background:rgba(255,255,255,.022);border-radius:0 var(--r-md) var(--r-md) 0}
.art-quote p{font-family:var(--font-d);font-size:clamp(17px,2vw,20px);line-height:1.5;
  color:var(--ink);margin:0;letter-spacing:-.015em}
.art-takeaways{border:1px solid var(--line-2);border-radius:var(--r-lg);padding:var(--pad-sm);
  background:var(--bg-1);box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
/* .art-take-h is an h2 inside .art-body, so the bare class (0,1,0) lost every
   shared property to .art-body h2 (0,1,1) regardless of source order. It was
   rendering at 27px display type with 48px of inherited section margin inside
   a 24px padded box. Element plus class here so the component rule wins. */
.art-body h2.art-take-h,.art-take-h{font-family:var(--font-m);font-size:10px;font-weight:500;
  line-height:1.2;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-4);margin:0 0 var(--s-4)}
.art-takeaways ol{display:grid;gap:var(--s-4);margin:0;padding-left:0;list-style:none;
  counter-reset:take}
.art-takeaways li{font-size:15.5px;line-height:1.6;color:var(--ink-2);
  display:grid;grid-template-columns:22px minmax(0,1fr);gap:var(--s-3);counter-increment:take}
.art-takeaways li::before{content:counter(take,decimal-leading-zero);
  font-family:var(--font-m);font-size:11px;letter-spacing:.06em;color:var(--accent);
  line-height:1.85}
.art-terms{margin-top:var(--s-10);padding-top:var(--s-7);border-top:1px solid var(--line)}
/* same collision as .art-take-h: a bare class on an h2 inside .art-body loses
   every shared property to .art-body h2. Found by measuring, not by reading. */
.art-body h2.art-terms-h,.art-terms-h{font-family:var(--font-m);font-size:10px;font-weight:500;
  line-height:1.2;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-4);margin:0 0 var(--s-5)}
.art-terms p{display:flex;flex-wrap:wrap;gap:var(--s-2)}
.art-author{margin-top:var(--s-9);padding:var(--pad);border:1px solid var(--line);
  border-radius:var(--r-lg);background:var(--bg-1)}
.art-author .lbl{font-family:var(--font-m);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4);margin-bottom:var(--s-4)}
.art-author .who{font-family:var(--font-d);font-size:17px;font-weight:600;color:var(--ink);margin-bottom:2px}
.art-author .role{font-size:13.5px;color:var(--accent);margin-bottom:var(--s-4)}
.art-author .bio{font-size:15px;line-height:1.65;color:var(--ink-2);margin:0}
.art-wrap{max-width:68ch}
/* ============================================================================
   V3 CONTENT SYSTEM: article furniture, blog masthead, glossary below fold
   Every selector below appears on blog.html, glossary.html or blog/* only.
   ========================================================================= */

/* ---------- article table ---------- */
.art-tablewrap{margin:var(--s-8) 0;overflow-x:auto;border:1px solid var(--line);
  border-radius:var(--r-lg);background:var(--bg-1)}
.art-tablewrap:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.art-table{width:100%;border-collapse:collapse;font-size:14.5px;line-height:1.55}
.art-table caption{caption-side:top;text-align:left;padding:var(--pad-sm) var(--pad-sm) 0;
  font-family:var(--font-m);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-4)}
.art-table th,.art-table td{padding:var(--s-4) var(--s-5);text-align:left;vertical-align:top;
  border-bottom:1px solid var(--line)}
.art-table thead th{font-family:var(--font-m);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--ink-3);font-weight:500;
  border-bottom:1px solid var(--line-2);white-space:nowrap}
.art-table tbody th{color:var(--ink);font-weight:600;font-size:14.5px;min-width:10ch}
.art-table td{color:var(--ink-2)}
.art-table tbody tr:last-child th,.art-table tbody tr:last-child td{border-bottom:0}
/* ---------- article checklist ---------- */
.art-check{margin:var(--s-8) 0;padding:var(--pad-sm);border:1px solid var(--line-2);
  border-radius:var(--r-lg);background:var(--bg-1);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.art-check-h{font-family:var(--font-m);font-size:10px;font-weight:500;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4);margin:0 0 var(--s-5)}
.art-check ul{display:grid;gap:var(--s-4);margin:0;padding:0;list-style:none}
.art-check li{display:grid;grid-template-columns:18px minmax(0,1fr);gap:var(--s-4);
  font-size:15.5px;line-height:1.6;color:var(--ink-2)}
.art-check li::before{content:"";width:12px;height:12px;margin-top:var(--s-1);border-radius:3px;
  border:1px solid var(--accent-bd);background:var(--accent-dim)}
/* ---------- blog hero masthead ---------- */
.phead-grid.-mast{grid-template-columns:minmax(0,1fr) minmax(0,.82fr);align-items:center;
  gap:var(--s-10)}
@media (max-width:900px){
.phead-grid.-mast{grid-template-columns:1fr;gap:var(--s-8)}
}
.blog-mast{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
  padding:var(--pad);display:grid;gap:var(--s-5)}
.mast-h{font-family:var(--font-m);font-size:10px;font-weight:500;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4);margin:0}
.mast-split{display:grid;gap:var(--s-4);margin:0;padding:0;list-style:none}
.mast-who{display:grid;gap:var(--s-4);align-items:baseline}
.mast-who .w{display:grid;gap:2px;min-width:0}
.mast-who .nm{font-family:var(--font-d);font-size:15px;font-weight:600;color:var(--ink)}
.mast-who .ln{font-size:13px;line-height:1.45;color:var(--ink-3)}
.mast-foot{margin:0;font-family:var(--font-m);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink-4)}
.phead.-hub{padding-bottom:var(--s-8)}
/* ---------- glossary below the fold ---------- */
/* The page used to run 54,000px as one undifferentiated column. Detail now
   collapses, letter groups carry a count and a way back up, and an active
   search force opens every match so nothing hides behind the control. */
.gl-ghead{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-5);
  padding-bottom:var(--s-4);border-bottom:1px solid var(--line);margin-bottom:var(--s-6);
  position:sticky;top:calc(var(--nav-h) + var(--s-2));z-index:2;
  background:linear-gradient(var(--bg) 72%,rgba(8,8,10,0))}
.gl-ghead .gl-initial{margin:0}
.gl-gmeta{display:flex;align-items:baseline;gap:var(--s-5);font-family:var(--font-m);
  font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-4)}
.gl-top{color:var(--ink-3)}
.gl-top:hover{color:var(--ink)}
.gl-top:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.gl-more{display:inline-flex;align-items:center;gap:var(--s-2);margin-top:var(--s-4);
  padding:0;background:none;border:0;cursor:pointer;
  font-family:var(--font-m);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-4);transition:color var(--t-fast) var(--ease)}
.gl-more:hover{color:var(--ink-2)}
.gl-more:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.gl-more .mk{width:7px;height:7px;border-right:1px solid currentColor;
  border-bottom:1px solid currentColor;transform:rotate(45deg) translate(-2px,-2px);
  transition:transform var(--t-fast) var(--ease)}
.gl-more[aria-expanded="true"] .mk{transform:rotate(-135deg) translate(-2px,-2px)}
.gl-detail[hidden]{display:none}
.gl-list{display:grid;gap:var(--s-4)}
@media (min-width:1100px){
.gl-list{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
.gl-term.is-open{grid-column:span 2}
}
.blog-subnote{margin:var(--s-3) 0 var(--s-7);font-size:14.5px;color:var(--ink-3);max-width:52ch}
.blog-feat{margin-bottom:var(--s-4)}
.blog-subhead{margin-bottom:0}
.blog-mast{gap:var(--s-4);padding:var(--pad-sm)}
/* ============================================================================
   SHARED CTA, BUTTON AND CARD SYSTEM
   These were scoped behind .-content in the content polish pass so that
   product pages could not move. That scoping is now removed: the fixes apply
   to the shared CTA, button and card components sitewide, and an expected-diff
   guard proves nothing outside those components moved.
   See SHARED_CTA_BUTTON_CARD_AUDIT.md.
   ========================================================================= */

/* ---------- full card click ---------- */
/* The card has one destination and no interactive descendants (tags are
   spans), which is the condition that makes card-as-anchor safe. */
.post-card{position:relative;cursor:pointer;color:inherit;text-decoration:none}
.post-card .post-body,.post-card .post-shot,.post-card .post-meta,
.post-card .post-tags,.post-card .post-by{display:flex}
.post-card .post-excerpt{display:-webkit-box}
/* The ring was drawn at inset:-1px, one pixel outside the border box, and the
   card's own overflow:hidden clipped it away. Moving the clip to .post-shot
   unclipped it and cost 48px of card height, which shifted everything below,
   so the clip stays on the card and the ring comes inside instead. A 1px band
   on the inside edge is visually equivalent and changes no geometry. */
/* The ring is a 1px band at inset:0, which is exactly where the card's own 1px
   border sits, so on hover two lines occupied one pixel and the corner radius
   clipped the overlap into a ragged edge. Fading the base border out while the
   ring is lit means one clean line at a time. border-color only, so nothing
   moves. */
.post-card.glow::before{inset:0;border-radius:var(--r-lg)}
.post-card:focus-visible{outline:2px solid var(--accent);outline-offset:3px;
  border-color:var(--line-3)}
/* focus must produce the same border treatment as hover, not a weaker one */
.post-card:focus-visible{--on:1}
.art-toc ol a:hover{color:var(--ink-2);border-left-color:var(--line-2)}
.art-toc ol a.is-current{color:var(--ink);border-left-color:var(--accent)}
/* ---------- the CTA panel ---------- */
/* The old accent was 2px wide, sized 2.2em and offset .1em against .cta-copy
   at 17px while the heading is 42px with a 47px line box, so it resolved
   against the wrong font entirely and floated 32px clear of the text. It now
   spans the copy block it marks, at every width. */
/* The accent bar is removed. It was a 2px rule floating 32px from the text and
   64px from the panel edge, anchored to nothing. Making it taller in the last
   pass made it more visible, not more intentional. The panel already carries a
   border, a radial wash, an idle sweep and a proximity ring; a fifth decorative
   element was decoration for its own sake. The copy now aligns to the panel
   padding like every other block on the site. */
.cta-band .cta-copy::before{display:none}
.cta-band .cta-copy{padding-left:0}
/* The figure was centred against a copy column up to 341px tall, leaving over
   100px of dead space above and below it. */
.cta-band{align-items:start}
.cta-band .cta-vis{align-self:stretch;display:grid;align-content:start}
.cta-band .cta-proof{max-width:none}
/* ---------- G4: three optional glossary detail blocks ---------- */
/* Same treatment as .gl-matters so a term with all three reads as one block
   rather than four competing paragraphs. */
.gl-notice,.gl-mistake,.gl-note{margin-top:var(--s-4);font-size:14.5px;
  line-height:1.6;color:var(--ink-3)}
/* No own typography. The existing .gl-detail .lbl rule already defines the
   label treatment, so these three inherit it and cannot drift from it. */

/* ---------- form status: one treatment per state ---------- */
/* Before this pass there were two, -ok and -err, and the 501 not-configured
   state borrowed -ok. Its words said nothing had been sent while its colour
   said the opposite. Every state that has not sent now reads as not sent. */
.form-status.-warn,.form-status.-config{border-color:rgba(255,196,84,.34);
  background:rgba(255,196,84,.07);color:var(--ink-2)}
/* ============================================================================
   SPACING AND CARD HEIGHT FIXES
   ============================================================================ */

/* .split is align-items:start, which is right when the two columns are a block
   of text beside a figure. When the children are cards it left them sized to
   their own content: 272px beside 250px on support. Cards in a split stretch. */
.split > .mod{align-self:stretch}
/* The two outliers. .appcard sat at 48px and .cta-band at a clamp topping out
   at 64px, so neither followed the rule below 992. They are cards, so they do
   now. Above 992 both keep the value they were designed with. --pad is already
   24px between 480 and 992 and 16px below it, so one rule covers both bands. */
@media (max-width:992px){
  .appcard{padding:var(--pad)}
  .cta-band{padding:var(--pad)}
  .cta-band .cta-copy{padding-left:0}
}

/* visually hidden, ported from Creoglyph. Was missed by the family extractor because the selector carries no family prefix. */
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}

/* ---------- plan comparison matrix, /pricing/ ---------- */
.pm-wrap{overflow-y:visible;margin-top:var(--s-7);overflow-x:auto;-webkit-overflow-scrolling:touch;
  border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
  /* a scroll container only contains its child if it cannot grow to fit it.
     Without max-width and min-width:0 the 620px table pushed the page 179px
     wide at 390 and 249px at 320. */
  max-width:100%;min-width:0;width:100%}
.pm-scrollnote{margin-top:var(--s-3);font-family:var(--font-m);font-size:10px;
  letter-spacing:.12em;text-transform:uppercase;color:var(--ink-4)}
@media(min-width:861px){.pm-scrollnote{display:none}}
.pm{width:100%;border-collapse:collapse;font-size:14px;min-width:720px}
.pm caption{text-align:left}
.pm th,.pm td{padding:16px 16px;text-align:left;vertical-align:middle;
  border-bottom:1px solid rgba(255,255,255,.06)}
.pm thead th{position:sticky;top:72px;z-index:2;background:var(--bg-1);/* 72px is the fixed nav height; sticking at 0 put the header under it */
  font-family:var(--font-d);font-size:15px;font-weight:700;color:var(--ink);
  border-bottom:1px solid var(--line-2);white-space:nowrap}
.pm thead th:first-child{font-family:var(--font-m);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4);font-weight:500}
.pm .pm-pop{display:inline-block;margin-left:8px;padding:2px 8px;border-radius:20px;
  font-family:var(--font-m);font-size:9px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--accent);background:rgba(var(--accent-rgb),.12);vertical-align:middle}
.pm .pm-price th,.pm .pm-price td{padding-top:0;padding-bottom:16px;color:var(--ink-2);
  font-weight:600;border-bottom:1px solid var(--line-2)}
.pm tbody th[scope=row]{font-weight:500;color:var(--ink-2);width:38%}
.pm tr.pm-group th{padding:16px 16px 8px;font-family:var(--font-m);font-size:10px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-4);font-weight:500;
  background:rgba(255,255,255,.02);border-bottom:1px solid var(--line)}
.pm td{color:var(--ink-2)}
.pm td[data-yes]{color:var(--accent)}
.pm td[data-yes] .ic{width:16px;height:16px}
.pm td[data-no] .mx{display:inline-block;width:10px;height:1px;background:var(--ink-5,#4a4a55)}
.pm tbody tr:hover td,.pm tbody tr:hover th{background:rgba(255,255,255,.02)}
.pm tbody tr:last-child th,.pm tbody tr:last-child td{border-bottom:0}
@media(max-width:860px){
  .pm thead th{position:static}
  .pm{min-width:620px;font-size:13px}
  .pm th,.pm td{padding:12px 12px}
  .pm tbody th[scope=row]{width:44%}
}

/* ---------- use case cards, /use-cases/ ----------
   Stretched-link pattern. Exactly ONE anchor per card. The old markup nested an
   <a> inside an <a>, which the parser auto closed, scattering the card, the link
   and an empty <p> as separate grid children. See VF-001. */
.uc-grid{list-style:none;padding:0;margin:var(--s-7) 0 0;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-6)}
.uc-card{position:relative;display:flex;flex-direction:column;align-items:stretch;
  height:100%;padding:var(--s-6);border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--bg-1);overflow:hidden;
  transition:border-color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.uc-card:hover{border-color:var(--line-2);background:rgba(255,255,255,.02)}
.uc-card:focus-within{border-color:var(--line-2)}
.uc-fig{display:block;margin:calc(var(--s-6) * -1) calc(var(--s-6) * -1) var(--s-5);
  padding:var(--s-5) var(--s-5) 0;border-bottom:1px solid rgba(255,255,255,.06);
  background:rgba(255,255,255,.015)}
.uc-fig .uc-mini{display:block;width:100%;height:auto}
.uc-kick{margin:0 0 var(--s-2);font-family:var(--font-m);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4)}
.uc-h{margin:0;font-family:var(--font-d);font-size:20px;line-height:1.28;font-weight:700;
  letter-spacing:-.01em}
.uc-link{color:var(--ink);text-decoration:none}
.uc-link::after{content:"";position:absolute;inset:0;z-index:1;border-radius:inherit}
.uc-link:focus-visible{outline:none}
.uc-card:has(.uc-link:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
.uc-p{margin:var(--s-3) 0 0;color:var(--ink-3);font-size:14.5px;line-height:1.62;flex:1}
.uc-go{display:inline-flex;align-items:center;gap:8px;margin-top:var(--s-5);
  font-size:14px;font-weight:600;color:var(--accent);
  transition:gap var(--t-fast) var(--ease)}
.uc-go .ic{width:14px;height:14px}
.uc-card:hover .uc-go{gap:12px}
.uc-grid li[hidden]{display:none}
@media(max-width:900px){.uc-grid{grid-template-columns:1fr;gap:var(--s-5)}}
@media(max-width:420px){
  .uc-card{padding:var(--s-5)}
  .uc-fig{margin:calc(var(--s-5) * -1) calc(var(--s-5) * -1) var(--s-4);padding:var(--s-4) var(--s-4) 0}
  .uc-h{font-size:18px}
}

/* who-is-this-for grid: h3 carried no bottom margin, so headings sat directly
   on their paragraph at every width. Caught at 390. */
.who-item h3{margin:0 0 var(--s-3);font-family:var(--font-d);font-size:17px;
  line-height:1.35;font-weight:700;color:var(--ink)}
.who-item p{margin:0}
.who-item + .who-item{margin-top:0}
@media(max-width:900px){.who-item + .who-item{margin-top:var(--s-6)}}
/* count sat tight under the chips */
.uc-grid + .gl-empty,.gl-chips + .gl-count{margin-top:var(--s-4)}

/* inline prose link. .tlink is inline-flex and breaks sentence flow at narrow
   widths; caught at 320 on /use-cases/. */
.plink{color:var(--accent);text-decoration:underline;text-underline-offset:3px;
  text-decoration-thickness:1px;text-decoration-color:rgba(var(--accent-rgb),.42)}
.plink:hover{text-decoration-color:var(--accent)}

/* ---------- solution detail pages, /use-cases/<slug>/ ---------- */
.prose-col{max-width:70ch}
.prose-col .lead + .lead{margin-top:var(--s-5)}

.ba-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-6);
  margin-top:var(--s-7)}
.ba-col{padding:var(--s-6);border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--bg-1)}
.ba-col.-after{border-color:rgba(var(--accent-rgb),.28)}
.ba-h{margin:0 0 var(--s-4);font-family:var(--font-m);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4)}
.ba-col.-after .ba-h{color:var(--accent)}
.ba-list{margin:0;padding:0;list-style:none;counter-reset:ba;display:grid;gap:var(--s-3)}
.ba-list li{position:relative;counter-increment:ba;padding-left:2.1em;
  color:var(--ink-2);font-size:15px;line-height:1.6}
.ba-list li::before{content:counter(ba);position:absolute;left:0;top:.12em;
  display:grid;place-items:center;width:1.45em;height:1.45em;border-radius:50%;
  border:1px solid var(--line-2);font-family:var(--font-m);font-size:10px;
  color:var(--ink-4);line-height:1}
.ba-col.-after .ba-list li::before{border-color:rgba(var(--accent-rgb),.45);color:var(--accent)}
.ba-col.-after .ba-list li::marker{color:var(--accent)}

.wf-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,400px);
  gap:var(--s-8);align-items:start;margin-top:var(--s-7)}
.wf-steps{display:grid;gap:var(--s-5)}
.wf-step{padding-left:var(--s-5);border-left:1px solid var(--line)}
.wf-step h3{margin:0 0 var(--s-2);font-family:var(--font-d);font-size:16px;
  line-height:1.35;font-weight:700;color:var(--ink)}
.wf-step p{margin:0}
.wf-fig{position:sticky;top:96px}
.wf-fig .art-fig{width:100%;height:auto}

.note-band{padding:var(--s-6);border:1px solid var(--line);border-left:2px solid var(--accent);
  border-radius:var(--r-lg);background:rgba(var(--accent-rgb),.03)}
.note-band .lead{margin:0;max-width:82ch}

.rel-list{list-style:none;padding:0;margin:var(--s-6) 0 0;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-4)}
.rel-list li{padding:var(--s-4) var(--s-5);border:1px solid var(--line);
  border-radius:var(--r-md);background:var(--bg-1);
  transition:border-color var(--t-fast) var(--ease)}
.rel-list li:hover{border-color:rgba(255,255,255,.22)}

@media(max-width:900px){
  .ba-grid,.rel-list{grid-template-columns:1fr}
  .wf-grid{grid-template-columns:1fr;gap:var(--s-6)}
  .wf-fig{position:static;order:-1}
}
@media(max-width:420px){
  .ba-col{padding:var(--s-5)}
  .wf-step{padding-left:var(--s-4)}
}

/* CTA band: the h2 carried no bottom margin, so on every .cta-band across the
   site the heading sat directly on its paragraph with zero gap. Creoglyph's own
   .cta-band markup pairs .h2 with .body rather than .lead, and only .body had
   spacing, so porting the family and using .lead lost it. Caught by opening the
   pricing bottom shot. */
.cta-band .h2{margin:0 0 var(--s-4)}
.cta-band .lead{margin:0;max-width:60ch}
.cta-band .cta-copy > *:last-child{margin-bottom:0}

/* Card hover parity. Creobot's own .card family lifts its border to
   rgba(255,255,255,.24), which is the value recorded in
   CREO_BRAND_INTERACTION_LOCK.md. The ported .post-card family and the new
   .uc-card family were lifting only to --line-2 (.12), so the site had two
   different hover strengths depending on which family a card belonged to.
   This is exactly the "new card family added without joining the shared
   registration" failure the interaction lock warns about. */
.post-card:hover,
.uc-card:hover,
.uc-card:focus-within{border-color:rgba(255,255,255,.24)}

/* ==========================================================================
   R1/R6 BUTTON SYSTEM LOCK
   .art-toc a{color:var(--ink-3)} (0,1,1) outranked .btn-primary{color:#fff}
   (0,1,0), so the TOC CTA rendered grey on blue at a 1.34:1 contrast ratio on
   all 32 blog articles. The button system must survive being placed inside any
   container that styles links.
   ========================================================================== */
a.btn, a.btn:link, a.btn:visited,
.art-toc a.btn, .art-body a.btn, .prose a.btn,
.rel-list a.btn, .uc-card a.btn{color:var(--ink);text-decoration:none}
a.btn-primary, a.btn-primary:link, a.btn-primary:visited,
.art-toc a.btn-primary, .art-body a.btn-primary,
.prose a.btn-primary{color:#fff}
a.btn .fx-a, a.btn .fx-b{color:inherit}
/* one size per semantic action: 48px default, 40px only for genuinely dense
   contexts, never both for the same action on different pages */
.btn{min-height:48px}
.btn-sm{min-height:40px}
.art-toc-cta .btn{min-height:44px;font-size:14.5px}

/* ---------- R3 CTA variants ---------- */
.cta-v{position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,430px);
  gap:var(--s-8);align-items:center;padding:var(--s-8);border:1px solid var(--line);
  border-radius:var(--r-lg);background:var(--bg-1);overflow:hidden;
  transition:border-color var(--t-fast) var(--ease)}
.cta-v:hover{border-color:rgba(255,255,255,.24)}
.cta-v .cta-copy{min-width:0}
.cta-kick{margin:0 0 var(--s-3);font-family:var(--font-m);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4)}
.cta-v .h2{margin:0 0 var(--s-4);max-width:22ch}
.cta-v .lead{margin:0 0 var(--s-6);max-width:56ch}
.cta-actions{display:flex;gap:var(--s-3);flex-wrap:wrap}
.cta-visual{min-width:0}
.cta-visual .cta-fig{width:100%;height:auto;display:block}
.cta-signal{background-image:radial-gradient(80% 130% at 88% 12%,rgba(var(--accent-rgb),.05),transparent 62%)}
.cta-launch{background-image:radial-gradient(80% 130% at 12% 88%,rgba(var(--accent-rgb),.05),transparent 62%)}
.cta-trust{background-image:linear-gradient(180deg,rgba(255,255,255,.02),transparent 55%)}
.cta-trust{border-left:2px solid rgba(var(--accent-rgb),.5)}
@media(max-width:900px){
  .cta-v{grid-template-columns:1fr;gap:var(--s-6);padding:var(--s-6)}
  .cta-visual{order:-1}
}
@media(max-width:420px){.cta-v{padding:var(--s-5)}.cta-actions .btn{width:100%}}

/* ---------- R8b card marks ---------- */
.card-mark{display:block;width:96px;height:48px;margin-bottom:var(--s-4)}
.gl-term .card-mark{width:72px;height:36px;margin-bottom:var(--s-3)}
.rel-list li .card-mark{width:72px;height:36px;margin-bottom:var(--s-3)}

/* ---------- R4 founder cards ---------- */
.fc-grid{list-style:none;padding:0;margin:var(--s-7) 0 0;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-6)}
.fc{position:relative;padding:var(--s-7);border:1px solid var(--line);
  border-radius:var(--r-lg);background:var(--bg-1);height:100%;
  transition:border-color var(--t-fast) var(--ease)}
.fc:hover{border-color:rgba(255,255,255,.24)}
.fc-mark{display:block;margin-bottom:var(--s-5)}
.fc-name{margin:0;font-family:var(--font-d);font-size:22px;font-weight:700;
  letter-spacing:-.01em;color:var(--ink)}
.fc-role{margin:var(--s-2) 0 var(--s-5);font-family:var(--font-m);font-size:10px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
.fc-bio{margin:0 0 var(--s-6);color:var(--ink-2);font-size:15px;line-height:1.65}
.fc-lbl{margin:0 0 var(--s-3);font-family:var(--font-m);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-4)}
.fc-owns{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:var(--s-2)}
.fc-owns li{padding:4px 12px;border:1px solid var(--line);border-radius:20px;
  font-size:12.5px;color:var(--ink-3)}
.fc:hover .fc-owns li{border-color:var(--line-2)}
@media(max-width:900px){.fc-grid{grid-template-columns:1fr}.fc{padding:var(--s-6)}}

/* ==========================================================================
   R7 EDITORIAL PROSE LAYOUT
   62 prose sections across compare, features, use-cases, about, security,
   contact and support rendered as a 700px column inside a 1200px wrap, leaving
   42% of the viewport empty. That is what "visually basic" looked like: not a
   missing component, a layout that never used the width.

   Fixed as an editorial two column: the section heading becomes a sticky left
   rail and the prose sits to its right. CSS only, applied by :has(), so no
   markup changes and no rebuild, which means [data-rise] survives untouched.
   ========================================================================== */
.sec > .wrap:has(> .shead + .prose-col):not(:has(> .dec-list)),
.sec > .wrap:has(> .shead + .prose-col + *):not(:has(> .dec-list)){
  display:grid;grid-template-columns:minmax(0,300px) minmax(0,1fr);
  gap:var(--s-8) var(--s-9);align-items:start}
.sec > .wrap:has(> .shead + .prose-col):not(:has(> .dec-list)) > .shead{
  position:sticky;top:104px;margin:0;font-size:30px;line-height:1.16;max-width:14ch}
.sec > .wrap:has(> .shead + .prose-col) > .prose-col{max-width:66ch}
/* anything after the prose column spans both tracks */
.sec > .wrap:has(> .shead + .prose-col) > *:nth-child(n+3){grid-column:1 / -1}
@media(max-width:900px){
  /* specificity must match the desktop rule (0,4,0): a media query adds none,
     so a bare 0,3,0 selector loses and the two-column grid survives at 390 */
  .sec > .wrap:has(> .shead + .prose-col):not(:has(> .dec-list)),
  .sec > .wrap:has(> .shead + .prose-col + *):not(:has(> .dec-list)){
    grid-template-columns:1fr;gap:var(--s-5)}
  .sec > .wrap:has(> .shead + .prose-col):not(:has(> .dec-list)) > .shead,
  .sec > .wrap:has(> .shead + .prose-col + *):not(:has(> .dec-list)) > .shead{
    position:static;font-size:26px;max-width:none}
}

/* ---------- tiered card visuals (U1, U13) ---------- */
.ci{color:var(--ink-4);flex:0 0 auto;
  transition:color var(--t-fast) var(--ease)}
/* card icons opt in to the block treatment; inline icons stay inline */
.grid > * > .ci,.card > .ci:first-child,.uc-card > .ci{display:block;margin-bottom:var(--s-4)}
/* an icon sitting beside text aligns to it, with no stray box margin */
.tlink .ci,.plink .ci,.uc-go .ci,.rel-list li > .ci{display:inline-flex;margin:0;
  align-self:center}
.uc-card:hover .ci,.card:hover .ci,.gl-term:hover .ci,.rel-list li:hover .ci{color:var(--accent)}
.gl-term dt .ci{display:inline-block;vertical-align:-4px;margin:0 8px 0 0}
.rel-list li .ci{display:inline-block;vertical-align:-4px;margin:0 8px 0 0}
.panel-fig{display:block;width:100%;max-width:262px;height:auto;margin-bottom:var(--s-5)}

/* ---------- U3 header CTA + U4 honest proof strip ---------- */
.phead-cta{display:flex;gap:var(--s-3);flex-wrap:wrap;margin-top:var(--s-6)}
/* F1: flex-wrap with a 30ch max-width produced rows of [1, 2] at 1440, which reads
   as an accident rather than a layout. A deliberate grid: as many equal columns as
   fit, one per row on mobile. Measured before: widths 300 / 197 / 231 across two
   uneven rows. */
.proof-strip{list-style:none;padding:0;margin:var(--s-7) 0 0;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--s-4) var(--s-5);
  max-width:none}
/* the strip is page-level context, not hero-column copy: span both hero tracks so
   three signals sit on one deliberate row instead of breaking [2,1] */
.phead-grid > .proof-strip{grid-column:1 / -1;margin-top:0}
/* the strip is a row-2 grid item, so the visible gap above it is the grid ROW gap
   plus its own margin. Measured 104px between the CTA pair it qualifies and the
   strip itself. Set the row gap explicitly rather than inheriting the section gap. */
.phead-grid{align-items:start;row-gap:var(--s-6)}
.proof-strip li{display:flex;align-items:flex-start;gap:8px;min-width:0}
.proof-strip .ci{margin:1px 0 0;color:var(--accent)}
.proof-strip span{display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:1.45}
.proof-strip b{color:var(--ink-2);font-weight:600}
.proof-strip span{color:var(--ink-4)}
@media(max-width:640px){
  .proof-strip{grid-template-columns:1fr;gap:var(--s-3);max-width:none}
  .phead-cta .btn{width:100%}
}
.pm.fit th[scope=row]{width:46%}
.pm.fit td[data-us]{color:var(--accent);font-weight:600}
.pm.fit .fit-why{color:var(--ink-4);font-size:13px}

/* related-article cards inside an article are navigation, tier 3. A full data
   graphic there repeated one article's figure up to 20 times site-wide (U2). */
.post-shot.-compact{display:flex;align-items:center;justify-content:flex-start;
  padding:var(--s-5) var(--s-5) 0;min-height:0;background:none;border-bottom:0}
.post-shot.-compact .ci{color:var(--ink-4);margin:0;width:22px;height:22px}
.post-card:hover .post-shot.-compact .ci{color:var(--accent)}


/* ==========================================================================
   SPACING TOKEN ENFORCEMENT
   Applied by TIER, not by page. Measured violations before this block:
   .card on /pricing/ heading-to-paragraph 0px, .fc 8px, and standard-tier
   padding varying 24 / 32px between routes.
   ========================================================================== */
.uc-card, .card, .ticket{padding:var(--sp-pad-standard)}
.gl-term, .rel-list li{padding:var(--sp-pad-micro)}
.fc, .cta-v{padding:var(--sp-pad-feature)}

.uc-card > h3, .uc-card > .uc-h,
.card > h3, .fc-name, .gl-term dt{margin-bottom:var(--sp-head-desc)}
.card > h3 + p, .card > h3 + .muted{margin-top:0}
.fc-name + .fc-role{margin-top:8px}
.fc-role{margin-bottom:var(--sp-head-desc)}
.uc-card .ci, .card .ci, .fc-mark{margin-bottom:var(--sp-icon-head)}
.uc-p, .fc-bio{margin-bottom:var(--sp-desc-action)}
.cta-v .h2{margin-bottom:var(--sp-cta-inner)}
.uc-grid, .fc-grid, .rel-list{gap:var(--sp-grid-gap)}
/* the grid gap owns this spacing; a second margin summed with it */
.faq-item + .faq-item{margin-top:0}
@media(max-width:900px){
  .uc-grid, .fc-grid, .rel-list{gap:var(--sp-card-gap-m)}
  .fc, .cta-v{padding:var(--sp-pad-standard)}
}


/* Sticky thead was defeated by the horizontal-scroll wrapper: any overflow
   ancestor clips a sticky child. Restrict overflow-x to the widths that need it
   so the header can stick at desktop, where the table is 10+ rows tall and the
   plan columns are otherwise unlabelled. Found by opening the screenshot after a
   computed-style probe gave a misleading answer. */
@media(min-width:901px){
  .pm-wrap{overflow:visible}
  .pm thead th{position:sticky;top:72px;z-index:3;background:var(--bg-1)}
  .pm thead th::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
    background:var(--line)}
}


/* F3: consecutive prose-only sections ran 3,251px, 3.85 screens at 390, with no
   visual rhythm. The first paragraph of each prose column now reads as a lead:
   larger, lighter, with an accent rule. That gives a scannable entry point every
   section instead of an undifferentiated wall. Applies at all widths; the rule is
   most valuable on mobile where the two-column editorial layout collapses. */
.prose-col > .lead:first-child{font-size:18px;line-height:1.6;color:var(--ink-2);
  padding-left:var(--s-5);border-left:2px solid rgba(var(--accent-rgb),.42)}
@media(max-width:900px){
  .prose-col > .lead:first-child{font-size:17px;padding-left:var(--s-4)}
  /* break up long runs: every prose section gets breathing room and a hairline */
  .sec + .sec > .wrap:has(> .shead + .prose-col){padding-top:var(--s-6)}
}

/* F3: compare procedure sections render as numbered decision cards so every
   mobile screen carries a structural break. The previous attempt styled the first
   paragraph, which a metric accepted and a screenshot rejected. */
.dec-list{list-style:none;padding:0;margin:var(--s-7) 0 0;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-grid-gap);grid-column:1/-1}
.dec{display:flex;gap:var(--s-4);height:100%;padding:var(--sp-pad-standard);
  border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
  transition:border-color var(--t-fast) var(--ease)}
.dec:hover{border-color:rgba(255,255,255,.24)}
.dec-n{flex:0 0 auto;display:grid;place-items:center;width:26px;height:26px;
  border-radius:50%;border:1px solid rgba(var(--accent-rgb),.45);color:var(--accent);
  font-family:var(--font-m);font-size:11px;line-height:1}
.dec-h{margin:0 0 var(--sp-head-desc);font-family:var(--font-d);font-size:16px;
  line-height:1.35;font-weight:700;color:var(--ink)}
.dec-p{margin:0;color:var(--ink-3);font-size:14.5px;line-height:1.6}
.dec-close{grid-column:1/-1;margin-top:var(--s-6);padding-left:var(--s-5);
  border-left:2px solid var(--line-2);max-width:68ch}
.dec-close .lead{margin:0}
@media(max-width:900px){
  .dec-list{grid-template-columns:1fr;gap:var(--sp-card-gap-m)}
  .dec{padding:var(--sp-pad-micro)}
  .dec-close{padding-left:var(--s-4)}
}


/* Plan-card CTAs measured 56px, off the locked 40/44/48 scale. The ticket body
   added vertical padding on top of the button's own. Pin to 48. */
.tk-body .btn, .tk-body .btn-block{min-height:48px;height:48px;padding-block:0}


/* A section holding decision cards must NOT use the sticky two-column editorial
   layout: the heading sits in column 1 and the card list spans 1/-1, so card 1
   renders underneath the heading. Caught by opening compare--desktop-mid.png.
   Cards get a full-width heading above them instead. */
.sec > .wrap:has(> .dec-list){display:block}
.sec > .wrap:has(> .dec-list) > .shead{position:static;max-width:24ch;
  margin:0 0 var(--s-5);font-size:30px;line-height:1.16}
.sec > .wrap:has(> .dec-list) > .prose-col{max-width:70ch;margin-bottom:var(--s-6)}

/* The fit table clipped its third column at 390 with no scroll affordance: the
   "Why" column was entirely off screen and nothing indicated it existed. A
   three-column comparison is not a mobile shape. Below 700px each row becomes a
   block: situation as the label, pick as an accent line, why as supporting text. */
@media(max-width:700px){
  .pm.fit{min-width:0}
  .pm-wrap:has(.pm.fit){overflow:visible}
  .pm.fit thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);
    white-space:nowrap}
  .pm.fit, .pm.fit tbody, .pm.fit tr, .pm.fit th, .pm.fit td{display:block;width:auto}
  .pm.fit tr{padding:var(--sp-pad-micro);border:1px solid var(--line);
    border-radius:var(--r-md);background:var(--bg-1);margin-bottom:var(--sp-card-gap-m)}
  .pm.fit th[scope=row]{width:auto;padding:0 0 var(--s-3);font-size:15px;line-height:1.45;
    color:var(--ink);font-weight:600}
  .pm.fit td{padding:0 0 8px;border:0}
  .pm.fit td[data-us]{color:var(--accent)}
  .pm.fit td::before{content:attr(data-lbl);display:block;font-family:var(--font-m);
    font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-4);
    margin-bottom:4px}
  .pm.fit .fit-why{padding-bottom:0}
}


/* Sticky article rail: the TOC list scrolls, the status note does not. Previously
   the whole rail was overflow:auto and a 13 heading list pushed the note past the
   cap, clipping it mid-sentence with no affordance. Caught by opening the article
   mid-page shot. */
.art-toc{display:flex;flex-direction:column;overflow:visible}
.art-toc > ol{overflow-y:auto;min-height:0;flex:1 1 auto;
  scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}
.art-toc > ol::-webkit-scrollbar{width:4px}
.art-toc > ol::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:4px}
.art-toc-cta{flex:0 0 auto}


/* A section heading followed directly by its own descriptive paragraph must use
   the heading-to-description token, not the section-to-content margin. Measured
   64px on all four resources groups where the contract is 12px, which made each
   blurb read as detached from its heading. */
.sec .wrap > .shead + p.lead{margin-top:0}
/* the gap scales with the heading rather than sitting at a fixed 12px: 0.45em is
   18px under a 40px section heading and still 12px under a 26px one */
/* Was max(--sp-head-desc, .45em), which resolved to 18px at the section
   heading size -- the only systematic off-grid gap left on the site, and the
   one Sachin asked to remove. .45em scaled with the heading, which was the
   argument for it, but 20px is already what 357 other heading-to-paragraph
   gaps use against 11 at 18px, so pinning it to the token makes the page MORE
   consistent, not less. On grid, and one relationship instead of two. */
.sec .wrap > .shead:has(+ p.lead){margin-bottom:var(--s-5)}

/* R-A: real founder photographs from Creoglyph. MengTo requires a photograph for
   every avatar and they exist; the ownership graphics were the wrong visual type.
   88px matches the card's scale, where Creoglyph uses 76px in a denser layout. */
.fc-photo{display:block;width:88px;height:88px;border-radius:50%;object-fit:cover;
  margin-bottom:var(--s-5);border:1px solid var(--line-2)}
.fc:hover .fc-photo{border-color:rgba(var(--accent-rgb),.5)}
@media(max-width:900px){.fc-photo{width:72px;height:72px}}


/* ==========================================================================
   R-D CLICKABLE CARD CONTRACT
   Cards were structurally correct, one anchor with a stretched link and no
   nesting, and every gate passed them. Measured, the card itself carried
   cursor:auto, so across 96% of the target the pointer signalled nothing.
   The gate proved the anchor existed and never asked whether the card feels
   like a link.
   ========================================================================== */
.uc-card:has(a), .post-card, .card:has(a), a.card,
.gl-term:has(a), .rel-list li:has(a){cursor:pointer}
.uc-card:has(a):hover, .post-card:hover, .card:has(a):hover, a.card:hover{
  border-color:rgba(255,255,255,.24)}
/* keyboard parity: the card shows the same state its anchor receives */
.uc-card:has(a:focus-visible), .post-card:focus-visible,
.card:has(a:focus-visible), a.card:focus-visible, .gl-term:has(a:focus-visible){
  outline:2px solid var(--accent);outline-offset:3px;
  border-color:rgba(var(--accent-rgb),.55)}
.uc-card a:focus-visible, .post-card a:focus-visible{outline:none}
@media(max-width:900px){
  .uc-card:has(a), .post-card, .rel-list li:has(a){min-height:44px}
}

/* R-B: related-article thumbnail band. Sized to the card rather than reserving a
   full editorial band for a 22px mark, which left 89% of the band empty. */
/* the band is sized to the thumbnail and the thumbnail is centred in it, rather
   than the band reserving a fixed height the figure does not fill */
.post-shot.-thumb{display:flex;align-items:center;justify-content:center;
  min-height:0;height:auto;padding:var(--s-4) 0;overflow:hidden;
  border-bottom:1px solid var(--line);background:var(--bg-2)}
.post-shot.-thumb svg{display:block;width:100%;height:auto;max-height:120px}


/* ==========================================================================
   R-C: a section whose only child is a heading is a LABEL for the section that
   follows, not a section in its own right. On pricing, "Plans" carried its own
   64px heading margin plus 96px section padding-bottom plus the next section's
   96px padding-top, giving a 256px void before the billing toggle. Four times
   the section token. Collapse the stack so the label sits with what it labels.
   ========================================================================== */
.sec:has(> .wrap > .shead:only-child){padding-bottom:0}
.sec:has(> .wrap > .shead:only-child) > .wrap > .shead{margin-bottom:0}
.sec:has(> .wrap > .shead:only-child) + .sec{padding-top:var(--s-7)}

/* Compare card decision signal: card-scale, not a 20px icon floating in a large
   card. Shows which way the decision splits before the reader clicks. */
.decision-signal{display:block;width:100%;max-width:272px;height:auto;margin-bottom:var(--s-5)}


/* Hero balance. Two measured imbalances behind Sachin's "too much empty space":
   the proof strip sat 104px below the CTA pair, and the right column ended 220px
   short of the left because the figure is fixed-height in a taller grid. Pull the
   strip closer to the actions it qualifies, and centre the figure in its track so
   the shortfall reads as deliberate rather than as a gap at the bottom. */
.phead-grid > .proof-strip{margin-top:var(--s-6)}
.phead-grid{align-items:center}
.phead-grid > div:last-of-type{align-self:center}
@media(max-width:900px){
  .phead-grid{align-items:start}
  .phead-grid > .proof-strip{margin-top:var(--s-6)}
}


/* A letter group with a single term rendered one card in a two-column grid,
   leaving half the row empty. On a 20-group glossary that is a recurring void
   down the page, which is the "too much empty space" note applied to rhythm
   rather than to one section. A one-term group spans the row instead. */
.gl-list:has(> .gl-term:only-child){grid-template-columns:1fr}


/* ==========================================================================
   WHOLE-CARD CLICKABLE, corrected.
   The stretched overlay existed and was measured as existing, which is why the
   old gate passed. It never worked: every card child carries
   `position:relative; z-index:1`, the SAME z-index as the overlay, so later
   siblings in DOM order paint above it and swallow the click across the whole
   card. Only the heading, which is inside the anchor itself, was clickable.
   That is exactly what Sachin reported.

   Apple's pattern: one anchor owns the destination and its ::after spans the
   card ABOVE the non-interactive content; anything genuinely interactive is
   raised above the overlay in turn.
   ========================================================================== */

/* 1. Overlay above the z-index:1 content layer. */
.uc-card{position:relative}
.uc-link::after{content:"";position:absolute;inset:0;z-index:2;border-radius:inherit}

/* 2. Resource list rows had no overlay at all. */
.rel-list li{position:relative}
.rel-list li > .plink::after{content:"";position:absolute;inset:0;z-index:2;
  border-radius:var(--r-md)}

/* 3. Related-article and post cards are already <a> elements, so every child is
      inside the anchor. Nothing to stretch, only the affordance to confirm. */

/* 4. Anything genuinely interactive inside a stretched card must sit ABOVE the
      overlay or the overlay steals its click. None today; the rule is here so a
      future nested control cannot silently break. */
.uc-card a:not(.uc-link),
.uc-card button,
.rel-list li a:not(.plink){position:relative;z-index:3}

/* 5. Affordance and keyboard parity on the card, not just the text. */
.uc-card:has(.uc-link),
.rel-list li:has(.plink){cursor:pointer}
.uc-card:has(.uc-link):hover,
.rel-list li:has(.plink):hover{border-color:rgba(255,255,255,.24)}
.uc-card:has(.uc-link:focus-visible),
.rel-list li:has(.plink:focus-visible){
  outline:2px solid var(--accent);outline-offset:3px;
  border-color:rgba(var(--accent-rgb),.55)}
.uc-link:focus-visible,.rel-list li > .plink:focus-visible{outline:none}


/* THE ACTUAL BUG. `.uc-link` sits inside `<h3 class="uc-h">`, which is
   position:relative. An absolutely positioned ::after resolves against the
   nearest POSITIONED ancestor, so inset:0 stretched to the 52px heading inside a
   552px card. The overlay was doing exactly what it was told and covering the
   heading only, which is precisely the reported symptom.

   The heading needs no positioning of its own; the card is the containing block.
   Making it static also stops it creating a stacking context, so the overlay at
   z-index 2 can sit above the sibling content at z-index 1. */
.uc-card > .uc-h{position:static}
.uc-card > .uc-h .uc-link::after{z-index:2}


/* `.uc-go` is the "Read the use case" affordance. It is a SPAN, not a control:
   it has no href and no handler, it only signals that the card navigates. Sitting
   at z-index:1 it painted after the overlay and swallowed clicks on the one part
   of the card that most looks clickable. Drop it below the overlay so the card's
   own anchor receives the click. It stays visible and still animates on hover. */
.uc-card > .uc-go{position:static}


/* Decorative, non-interactive card content must not intercept the pointer.
   `.uc-go` is a signpost span with no href and no handler, and the figure is a
   diagram. Marking them pointer-transparent lets the click reach the card's own
   stretched anchor from every point, which is what "whole card clickable" means.
   Interactive descendants are excluded so a real control is never disabled. */
.uc-card > .uc-go,
.uc-card > .uc-go *,
.uc-card > .uc-fig,
.uc-card > .uc-fig *,
.rel-list li > .plink + *{pointer-events:none}
.uc-card a:not(.uc-link),
.uc-card button,
.uc-card [tabindex]{pointer-events:auto}


/* ==========================================================================
   TOC ACTIVE STATE. The scroll spy has been toggling `.is-on` on TOC links
   since it was written and NO CSS rule ever styled it, so the active section
   was never visible. The gate counted anchors and matched ids and passed,
   because neither asks whether the reader can see where they are.
   ========================================================================== */
.art-toc li > a{position:relative;display:block;color:var(--ink-3);
  transition:color var(--t-fast) var(--ease)}
/* ONE rail for the whole list, not a bar per item. The grey line is the article;
   the accent fill is how far through it the reader is. This is the Creo TOC
   standard from here on. */
.art-toc ol,.art-toc ul{position:relative;padding-left:var(--s-5);margin:0;list-style:none}
.art-toc ol::before,.art-toc ul::before{content:"";position:absolute;left:0;top:0;bottom:0;
  width:2px;background:var(--line);border-radius:2px}
.art-toc ol::after,.art-toc ul::after{content:"";position:absolute;left:0;top:0;
  width:2px;height:var(--toc-progress,0%);background:var(--accent);border-radius:2px;
  transition:height 120ms linear}
.art-toc li{position:relative}
.art-toc li > a.is-on{color:var(--ink);font-weight:500}
.art-toc li:has(> a.is-on)::before{background:var(--accent)}
.art-toc li > a:hover{color:var(--ink-2)}
.art-toc li > a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;
  border-radius:var(--r-xs)}

.art-body h2[id],.art-body h3[id]{scroll-margin-top:104px}


/* A section heading followed by a BLOCK (card grid, decision list, prose column)
   uses the section gap, not the 20px the shared `.h2` rule supplies. Measured
   across ten routes: 19 sections at 64px and four at 20 or 32, and the four were
   the ones where `.h2` won over `.shead` because both are single-class rules and
   `.h2` is declared later. Stating the intent explicitly rather than relying on
   declaration order. The editorial two-column rule is more specific and still
   wins where it applies. */
.sec > .wrap > .shead:has(+ .dec-list),
.sec > .wrap > .shead:has(+ .grid),
.sec > .wrap > .shead:has(+ .uc-grid),
.sec > .wrap > .shead:has(+ .rel-list),
.sec > .wrap > .shead:has(+ .faq),
.sec > .wrap > .shead:has(+ .prose-col){margin-bottom:var(--s-10)}
.sec > .wrap > .shead + .dec-list{margin-top:0}


/* Icon scale by card tier. A 20px mark at 46% contrast reads as faint on a 357px
   card: it is a label above filled text rather than a mark stranded in emptiness,
   so the card is not broken, but the icon is underpowered for the space it holds.
   Standard cards get 28px in an accent-tinted well, which gives the icon presence
   without turning a label into an illustration. Micro rows and chips keep 20 and
   13, which are correct at their scale. */
/* Card icons follow the nav dropdown: muted at rest inside a neutral plate, and
   they take the accent only on hover, the same way `.tlink .ic` does. Scale is
   kept at 28px so the icon still reads on a standard card, which was the real
   problem the accent well was covering for. */
.grid.g-3 > * > svg.ci,
.grid.g-2 > * > svg.ci,
.card > svg.ci:first-child{width:20px;height:20px;padding:8px;box-sizing:content-box;
  border-radius:var(--r-md);background:rgba(255,255,255,.04);
  border:1px solid var(--line);
  color:var(--ink-3);stroke:currentColor;fill:none;
  margin-bottom:var(--s-4);
  transition:color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),
             background var(--t-fast) var(--ease)}

/* Accent on hover only, matching the dropdown link behaviour. */
.grid.g-3 > *:hover > svg.ci,
.grid.g-2 > *:hover > svg.ci,
.card:hover > svg.ci:first-child,
.rel-list li:hover > svg.ci{color:var(--accent);
  border-color:rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.08)}


/* The pricing matrix header pinned at exactly 72px, flush against the fixed nav
   with zero clearance, where every other sticky element on the site sits at 80 or
   104. Flush is not broken but it reads as a collision at a glance. Match the
   glossary group header at 80. */
.pm thead th{top:80px}   /* table class is .pm, not .pt-matrix */


/* Editorial thumbnail band sized to its thumbnail. Fixed 203px bands held
   thumbnails between 97 and 185px tall, so fill ranged 40 to 73 percent and the
   shorter ones sat in visible slack. A band that adapts to its content keeps the
   card reading as figure-then-text rather than figure-then-gap-then-text, which
   was the original R-B complaint at a smaller scale. */
.post-shot{height:auto;min-height:0;aspect-ratio:auto;display:flex;
  align-items:center;justify-content:center;padding:var(--s-5)}
/* One band height per row so the text below starts on a shared baseline.
   The card is a grid whose first track is the band; a fixed track height
   aligns every card in the row without stretching the thumbnail itself. */
.post-grid{align-items:stretch}
.post-grid .post-card{display:grid;grid-template-rows:168px auto 1fr auto}
.post-grid .post-card .post-shot{height:168px;overflow:hidden}
.post-grid .post-card.-wide{grid-template-rows:auto auto 1fr auto}
.post-grid .post-card.-wide .post-shot{height:auto}
.post-shot > svg{display:block;width:100%;height:auto;max-height:150px}
.post-card.-wide .post-shot > svg{max-height:210px}


/* Pricing tier CTA. The button sat at 170px inside a 220px content column, so
   "Ask about Creobot" wrapped onto two lines with 50px of the card unused beside
   it, in a card that already has generous padding. A tier CTA is the card's one
   action: it takes the full content width and its label stays on one line. */
/* The tier card carried 24px of padding and `.tk-body` inside it carried another
   24px, so content was inset 48px on each side: a 268px card gave a 170px column.
   "Ask about Creobot" does not fit on one line at 170px, so the CTA wrapped and
   the card read squeezed while looking generously padded. The inner padding is
   redundant; the card owns the inset. */
.ticket > .tk-body,.ticket > .tk-stub{padding-inline:0}
.ticket .btn,.ticket .btn-block{width:100%;white-space:nowrap}


/* A section's descriptive paragraph is followed by its content block at 24px,
   where a heading followed by the same block gets 64px. The paragraph therefore
   sat much closer to the cards than to the heading it belongs to, which reads as
   the paragraph labelling the grid rather than the section. Match the block gap. */
.sec > .wrap > p.lead:has(+ .rel-list),
.sec > .wrap > p.lead:has(+ .grid),
.sec > .wrap > p.lead:has(+ .uc-grid),
.sec > .wrap > p.lead:has(+ .dec-list),
.sec > .wrap > p.lead:has(+ .faq){margin-bottom:var(--s-10)}


/* The rail CTA is a button first: it keeps the shared button behaviour rather
   than inheriting the TOC link rule. */
.art-toc .btn{display:inline-flex;align-items:center;justify-content:center;
  text-align:center;min-height:44px}


/* Resource rows keep the icon beside its link, not above it: same muted plate and
   same hover accent as the card icons, laid out inline. */
.rel-list li > svg.ci{width:16px;height:16px;padding:8px;box-sizing:content-box;
  flex:none;border-radius:var(--r-sm);background:rgba(255,255,255,.04);
  border:1px solid var(--line);color:var(--ink-3);stroke:currentColor;fill:none;
  margin:0 var(--s-3) 0 0;vertical-align:middle;
  transition:color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),
             background var(--t-fast) var(--ease)}
.rel-list li{display:flex;align-items:flex-start;flex-wrap:wrap}
.rel-list li > svg.ci{margin-top:1px}
.rel-list li > a{flex:1 1 auto}
.rel-list li > p,.rel-list li > span{flex:1 0 100%;margin-left:calc(16px + 8px + var(--s-3))}


/* Match Creoglyph: 16px between FAQ items, one mechanism. */
.faq{gap:16px}


/* The MONTHLY price row sat at `padding: 0 16px 16px`: zero top padding, so the
   prices pressed against the plan-name row above with no separation at all,
   while carrying 16px below. Give it the same top inset as its bottom so the
   header block reads as two spaced lines rather than one crowded one. */
.pm .pm-price th,.pm .pm-price td{padding-top:16px}




/* ==========================================================================
   FOUNDER CARDS, ported verbatim from Creoglyph rather than reinvented.
   Same structure, same copy, same links, same 76px avatar, same 480px stacking
   rule with its original rationale: below 480 the avatar was holding horizontal
   space the bio needed, so avatar and identity share the top row and the bio
   spans the card underneath.
   ========================================================================== */
.people{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-4)}
@media (max-width:760px){.people{grid-template-columns:1fr}}
.person{display:flex;gap:var(--s-5);align-items:flex-start;padding:var(--s-7);
  border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1)}
.person img{width:76px;height:76px;border-radius:50%;object-fit:cover;flex:none;
  border:1px solid var(--line)}
.person .links{display:flex;flex-wrap:wrap;gap:var(--s-4);margin-top:var(--s-4)}
@media (max-width:480px){
  .person{display:grid;grid-template-columns:76px minmax(0,1fr);
    column-gap:var(--s-4);row-gap:0;align-items:start}
  .person > div{display:contents}
  .person img{grid-column:1;grid-row:1 / span 2}
  .person .h3{grid-column:2;grid-row:1;align-self:end}
  .person .tiny{grid-column:2;grid-row:2;align-self:start}
  .person .small{grid-column:1 / -1;grid-row:3}
  .person .links{grid-column:1 / -1;grid-row:4}
}


/* One icon rhythm, stated once. Box to glyph is 2:1 at every size and the corner
   radius is proportional to the box, so a 32px plate and a 40px plate read as the
   same object at two scales rather than two different treatments. */
:root{--icon-ratio:2}


/* ==========================================================================
   HERO AND CTA FIGURE ANIMATION, rebuilt.
   The first attempt was a node pulse plus a dashed connector, which read as a
   blinking box rather than a figure that explains itself. The homepage vocabulary
   is different and better: `lpFlow` sends a packet along a path, `pringFill`
   draws a ring by stroke-dashoffset, `lsfill` fills a bar. Motion there carries
   the sequence, it does not decorate it.

   So the figure now performs its own logic, once, on a slow loop:
     1. connectors DRAW from origin toward destination, in order
     2. each node settles as the line reaches it, staggered down the chain
     3. a light packet travels the path behind them
     4. the accent node, the one the caption is about, lands last and holds
   Every stage is one continuous 9s cycle so it never competes with reading.
   ========================================================================== */

@keyframes figDraw{
  from{stroke-dashoffset:var(--len,120)}
  to{stroke-dashoffset:0}
}
@keyframes figSettle{
  0%,8%{opacity:.35;transform:translateY(3px) scale(.985)}
  18%,92%{opacity:1;transform:none}
  100%{opacity:.35;transform:translateY(3px) scale(.985)}
}
@keyframes figPacket{
  0%{offset-distance:0%;opacity:0}
  8%{opacity:.9}
  46%{opacity:.9}
  56%{offset-distance:100%;opacity:0}
  100%{offset-distance:100%;opacity:0}
}
@keyframes figHold{
  0%,30%{stroke-opacity:.55;filter:none}
  46%{stroke-opacity:1;filter:drop-shadow(0 0 6px rgba(var(--accent-rgb),.55))}
  78%{stroke-opacity:1;filter:drop-shadow(0 0 3px rgba(var(--accent-rgb),.32))}
  100%{stroke-opacity:.55;filter:none}
}

/* REMOVED: figDraw / figSettle / figHold on a 9s infinite loop.
   Three rules used to run forever on every header and CTA figure, and they
   selected `line`, `rect` and `path[stroke]` generically -- which is to say
   they selected the very elements the once-only system drives, because
   `.b-draw` IS a <line> and `.b-fill` IS a <rect>. A 9s loop and a 620ms
   transition were animating the same properties on the same nodes, so the
   figures never came to rest: measured 2-4 properties still changing 2.5s
   after settle on /pricing/, /trust/, /contact/, /chatbase-alternative/ and
   /tools/ai-chatbot-quality-audit/.

   The stateful system replaces them. It is not a loop, it says something (the
   line draws, the current stage marks, the bar fills to its value), it runs
   once on reveal, and it stops. Measured after removal in
   source-checkpoint/qa/motion_proof.txt.

   The dangling `html.anim .phead-grid .art-fig > text,` selector list that
   used to sit here was left behind when the text loop was removed; a selector
   list ending in a comma swallows the next block, and the next block is the
   reduced-motion guard below. */

@media (prefers-reduced-motion:reduce){
  html.anim .phead-grid .art-fig *,
  html.anim .cta-fig *{animation:none !important;
    stroke-dashoffset:0 !important;opacity:1 !important;transform:none !important}
}


/* ==========================================================================
   CREOBOT LOGO, animated from the supplied Lottie.
   The Lottie has zero animated properties and no trim paths: all twelve shape
   layers carry static transforms and the motion is layer in/out timing. That
   reduces to twelve opacity keyframes, so the site renders it natively instead
   of shipping lottie_light.min.js at 164 KB. Inline SVG is 8 KB and the
   keyframes are under 2 KB, on a site whose whole point is zero third party
   script weight.

   Restraint: it plays ONCE on load in the nav, ONCE when the footer enters
   view, and otherwise only on hover or keyboard focus. It never loops.
   ========================================================================== */
.creo-lottie{display:block;flex:none}

/* The approved static Creobot mark, animated in place.

   I tried to convert the Lottie to SVG and got it wrong three times: I misread
   fills for strokes, misread the trim paths as absent, and shipped a solid blob
   and then a wrong glyph across 132 links. Hand-reconstructing vector geometry
   from a Lottie and verifying it by measurement rather than by looking is how
   that happened.

   So the mark on the page is the APPROVED one, unchanged, and the motion is a
   restrained draw-on applied to it. The Lottie remains the design reference for
   the FEEL, which is a quick build-on that settles, not a loop. */
.creo-lottie path,.creo-lottie circle,.creo-lottie rect{
  transform-box:fill-box;transform-origin:center}
@keyframes creoMark{
  0%{opacity:0;transform:translateY(2px) scale(.86)}
  55%{opacity:1;transform:translateY(0) scale(1.04)}
  100%{opacity:1;transform:none}
}
.creo-lottie.is-playing path:nth-of-type(1){animation:creoMark .52s var(--ease) 0s both}
.creo-lottie.is-playing path:nth-of-type(2){animation:creoMark .52s var(--ease) .07s both}
.creo-lottie.is-playing path:nth-of-type(3){animation:creoMark .52s var(--ease) .14s both}
.creo-lottie.is-playing path:nth-of-type(4){animation:creoMark .52s var(--ease) .21s both}

/* reduced motion and no JS both land on the resting logo, which is what the
   final frame already draws, so there is no flash and no layout shift */
@media (prefers-reduced-motion:reduce){
  .creo-lottie.is-playing path{animation:none !important;opacity:1 !important}
}


/* Micro tier floor. The glossary category chip glyph was 13px against a 20 to 32
   rule, the smallest mark on the site and visibly underpowered beside a 504px
   card. Raised to the bottom of the tier rather than past it: this is a chip, it
   should not compete with the term. */
.gl-term .gl-cat svg,.gl-term .gl-cat .ci{width:20px;height:20px}
.gl-term .gl-cat{gap:var(--s-2)}

/* Standard tier floor. Card plates measured 42px against a 44 minimum, two pixels
   short because the 1px border sits outside the 40px content box. Bring the plate
   itself to the floor so the measured object matches the rule. */
.grid.g-3 > * > svg.ci,
.grid.g-2 > * > svg.ci,
.card > svg.ci:first-child{width:22px;height:22px;padding:12px}


/* Card inner padding is 24px site-wide. Glossary terms were the single family at
   20px, so a term card read tighter than every other card for no reason. */
.gl-term{padding:24px}   /* --s-7 is 32px; the family value is 24 */


/* A `.uc-fig` holding a lone icon rather than a product visual must still meet the
   standard tier floor. Three product cards on About sat at 20px in a 548x240 card,
   which is the tiny-icon-in-a-large-card case the tier rules forbid. */
.uc-card > .uc-fig:has(> svg.ci:only-child) > svg.ci{
  width:26px;height:26px;padding:12px;box-sizing:content-box;
  border-radius:var(--r-md);background:rgba(255,255,255,.04);
  border:1px solid var(--line);color:var(--ink-3)}
.uc-card:hover > .uc-fig > svg.ci{color:var(--accent);
  border-color:rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.08)}


/* Resource cards are standard tier, not directory rows. The signal panel sits
   above the link as a compact mini UI showing what the resource contains, the
   link reads as a card heading rather than a 1998 hyperlink, and the whole card
   navigates. */
.rel-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-4)}
@media (max-width:760px){.rel-list{grid-template-columns:1fr}}
.rel-list li{display:flex;flex-direction:column;align-items:stretch;padding:var(--s-6);
  border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1)}
.rel-list li > .sig{margin-bottom:var(--s-5);opacity:.92;
  transition:opacity var(--t-fast) var(--ease)}
.rel-list li:hover > .sig{opacity:1}
.rel-list li > a{flex:0 0 auto;margin:0;font-size:17px;font-weight:600;
  color:var(--ink);text-decoration:none}
.rel-list li:hover > a{color:var(--accent)}
.rel-list li > p,.rel-list li > span:not(.sig){margin:var(--s-2) 0 0;color:var(--ink-3);
  font-size:14px;line-height:1.5}


/* Resource cards, stated last so the directory-row rules from earlier rounds do
   not win on order. This family is a standard card now: signal, then heading,
   then description, stacked. */
.rel-list li{display:flex !important;flex-direction:column !important;
  flex-wrap:nowrap !important;align-items:stretch !important;
  padding:var(--s-6) !important;gap:0}
.rel-list li > .sig{margin:0 0 var(--s-5);max-width:100%}
.rel-list li > a{order:2;margin:0;font-size:17px;font-weight:600;
  color:var(--ink);text-decoration:none;flex:0 0 auto}
.rel-list li > p,.rel-list li > span:not(.sig){order:3;flex:0 0 auto;
  margin:var(--s-2) 0 0 !important;color:var(--ink-3);font-size:14px;line-height:1.5}
.rel-list li > .sig{order:1}


/* Limit panels sit above the card heading with the same rhythm the icon plate
   used, so nothing else in the card moves. */
.grid.g-3 > .card > .lim{display:block;margin-bottom:var(--s-5);max-width:100%}


/* ==========================================================================
   HEADER AND CTA FIGURES GET A PRODUCT SURFACE.

   Judged against the homepage: its hero is a browser frame with a real question,
   a real answer and source chips. It reads as a product. Header and CTA figures
   carried the same KIND of content, a real argument in labelled nodes, but they
   floated on the page background with no frame, so they read as diagrams rather
   than as something you could point at in the product.

   The gap was surface, not meaning. One rule lifts every header and CTA at once
   rather than hand-authoring twenty figures, which is also how they stay
   consistent as more pages are added.
   ========================================================================== */
.phead-grid .art-fig,
.cta-fig{
  position:relative;
  padding:var(--s-7) var(--s-6) var(--s-6);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  background:
    linear-gradient(180deg, rgba(255,255,255,.035), rgba(255,255,255,.012)),
    var(--bg-1);
  box-shadow:0 1px 0 rgba(255,255,255,.04) inset;
  overflow:visible}

/* the chrome bar: three dots and a hairline, the same read as the homepage panel */
.phead-grid .art-fig::before,
.cta-fig::before{
  content:"";position:absolute;left:0;right:0;top:24px;height:1px;
  background:var(--line)}
.phead-grid .art-fig::after,
.cta-fig::after{
  content:"";position:absolute;left:16px;top:12px;width:6px;height:6px;
  border-radius:50%;background:rgba(255,255,255,.18);
  box-shadow:11px 0 0 rgba(255,255,255,.13), 22px 0 0 rgba(255,255,255,.09)}

/* the figure's own mono caption becomes the panel's label, sitting in the bar */
.phead-grid .art-fig > svg,
.cta-fig > svg{display:block;width:100%;height:auto;margin-top:var(--s-3)}

@media (max-width:760px){
  .phead-grid .art-fig,.cta-fig{padding:var(--s-6) var(--s-5) var(--s-5)}
}


/* 404 recovery cards are standard tier: the signal shows what each destination
   holds, replacing a glyph that only labelled it. */
.card > .sig{display:block;margin-bottom:var(--s-5);max-width:100%}


/* A bare heading followed by its paragraph gets the heading-to-description gap.
   The billing definitions live in `.grid > div`, an unclassed wrapper, which is
   why the first three selectors I guessed matched nothing. Card families own
   their own spacing and are untouched. */
.sec .wrap > .grid > div > h3 + p,
.sec .prose-col > h3 + p{margin-top:var(--s-3)}


/* The Plans heading sits in its own section with no bottom padding, so the gap
   to the billing toggle was 32px where every other section head gets 64px.
   State it on the pair rather than relying on a wrapper a rebuild can drop. */
.sec:has(> .wrap > .shead:only-child){padding-bottom:var(--s-8)}


/* Billing toggle active state, keyed off the accessibility attribute so it is
   correct wherever the control appears. */
.ptoggle button[aria-pressed="true"],
.ptoggle button.is-on{background:var(--accent);color:#fff;border-radius:var(--r-pill)}


/* Price pills on the switching path. A status chip beside a heading, not part of
   the heading, so it must read as a separate object at a glance. */
.dec-h .pm-pill{display:inline-block;margin-left:8px;padding:4px 8px;
  border-radius:var(--r-pill);border:1px solid var(--line-2);
  background:rgba(255,255,255,.04);color:var(--ink-3);
  font-family:var(--font-m);font-size:10px;font-weight:500;
  letter-spacing:.04em;text-transform:uppercase;vertical-align:middle;
  white-space:nowrap}
.dec-h:has(.pm-pill){display:flex;align-items:center;flex-wrap:wrap;gap:0}

/* ============================================================
   PRICING BOARD, SPACING REPAIR
   One appended block so it diffs and reverts whole.

   Every item below was found by measuring the rendered board, not by
   reading the token file. This is the failure mode the 4pt grid doc
   describes: the defect is never in what the token says, it is in what
   the cascade produced.

   1  .pb-col carried `border:1px solid transparent` so the declared
      24px top padding computed to 24.8px. The declaration is on grid,
      the box is not, and the grid gate reads declarations so it never
      saw it. The border now lives only at the breakpoints that draw it.
   2  .pb-price added margin-bottom:4px on top of the 16px column gap,
      so the rule under the price sat 20px above the button while the
      rule under the button sat 16px above the list. Same relationship,
      two values.
   3  .pb-cur set align-self:flex-start and margin-top:8px, cancelling
      the baseline alignment .pb-price asks for, then nudging it back by
      hand. The mark landed 7px below the figure's baseline.
   ============================================================ */

/* 1. Off-grid top inset. Scoped above the 640px card mode, which draws
      a real border and must keep it. */
@media(min-width:641px){
  .pb-col{border:0}
}
@media(min-width:641px) and (max-width:1040px){
  .pb-col:nth-child(n+3){border-top:1px solid var(--line)}
}

/* 2. One value for "divider to the next block". */
.pb-price{margin-bottom:0}

/* 3. Let the baseline alignment on .pb-price do its job. */
.pb-cur{align-self:auto;margin-top:0}

/* 4. The edge notches are a tear line, so they belong on the rule under
      the price. They were positioned by hand and drifted when the price
      block changed: --cut was 242px on the board and 239px on the mobile
      card, while the rule actually sits at 158px and 156px. They pointed
      at nothing. Re-tied to the rule, and the radius is now one value
      rather than 10px on the board and 9px on the card. */
.pb-board{--cut:160px;--notch:10px}
@media(max-width:640px){
  .pb-col{--cut:156px;--notch:10px}
}

/* ============================================================
   FOOTER AND BREADCRUMB LINK REPAIR
   Same appended-block convention as the pricing repair above.
   ============================================================ */

/* 5. `.foot ul a::after,.tlink::after` gives both links a position:absolute
      hover underline, but only .tlink was given position:relative. The footer
      link is static, so its underline resolved against .foot, the nearest
      positioned ancestor, and drew 1234px wide across the bottom edge of the
      footer instead of 61px under the link. Confirmed by forcing scaleX(1)
      and measuring: link 61px, underline 1234.4px. */
.foot ul a{position:relative}

/* 6. WCAG 2.5.8 target size. Footer and breadcrumb links render 21px tall,
      under the 24px minimum. sweep.py lists "tap targets" only as something a
      person eyeballs in the 390 and 320 screenshots, so no gate enforced it.
      The hit area is extended with a pseudo-element rather than padding or
      min-height, so no box grows and no spacing value moves off the 4pt grid.
      Footer links sit 43px apart, so 4px top and bottom leaves 14px clear and
      neighbours cannot overlap. ::after is taken by the underline, so ::before.
      Inline links inside prose are left alone: WCAG exempts links in a
      sentence, and padding them would break the text block. */
.crumbs a{position:relative}
.foot ul a::before,.crumbs a::before{content:"";position:absolute;
  top:-4px;bottom:-4px;left:0;right:0}

/* ============================================================
   SITE-WIDE SPACING REPAIR — COLLAPSED GAPS
   Appended as one block so it diffs and reverts whole.

   The 4pt gate cannot see any of these. Its probe reads

       const v = Math.round(parseFloat(raw) * 100) / 100;
       if (!v) return;                       // <- zero exits here

   so a 0px margin is discarded before the divisibility test ever runs.
   Zero is divisible by 4, so a missing gap passes the gate by
   construction. That is why "a 0px gap between a heading and its
   paragraph" is the first example in CREOBOT_4PT_GRID_SYSTEM.md and
   was still shipping on 35 pages.

   Every value below is taken from a rule that already exists for the
   same relationship. Nothing here invents a new spacing step.
   ============================================================ */

/* .kicker had NO rule anywhere in main.css: 77 uses across 35 pages, always a
   label sitting directly above a heading or a lead, always with 0px under it.
   .lead-in is the same relationship and already uses --s-5, so the eyebrow gap
   is now one value site-wide rather than two. */
.kicker{margin-bottom:var(--s-5)}

/* .post-meta is styled but carries no bottom margin, so the byline sat flush
   against the article title on all 28 article pages. Same relationship as
   .kicker, same value. */
.post-meta{margin-bottom:var(--s-5)}

/* .phead .lead{margin-top:var(--s-6)} never matched .lede, the sibling class
   the tools, migrate and security-questionnaire templates use. Seven pages had
   the H1 touching its standfirst. This extends the existing relationship to the
   class that was missed rather than introducing a second value. */
.phead .lede{margin-top:var(--s-6)}

/* .art-body gives p a bottom margin but never gives one to a list, so a list
   followed by a paragraph closed to 0 in 24 articles. Matches .art-body p. */
.art-body ul,.art-body ol{margin-bottom:var(--s-5)}

/* .sec-tight had NO rule, and it is the ONLY class on its section rather than a
   modifier beside .sec, so those 12 sections across 6 pages had no block
   padding at all instead of a reduced amount. --s-10 is the step below --sec. */
.sec-tight{padding-block:var(--s-10)}

/* .pm-note had no rule while .pb-note does, a one letter difference. The row
   description rendered as body copy running on after the row label. Type copied
   from .pb-note so the two notes match. */
.pm-note{display:block;margin-top:var(--s-1);
  font-size:12.5px;line-height:1.5;color:var(--ink-4)}

/* .art-body styles h2 and p but never gives h3 a bottom margin, so 34 article
   subheadings across 9 posts sat directly on their first paragraph. --sp-head-desc
   is the token this system already uses for heading-to-description, in
   `.card > h3` and in `.sec .prose-col > h3 + p`. Space above the h3 stays the
   20px it inherits from the preceding paragraph, so the subheading still groups
   downward with the text it introduces. */
.art-body h3{margin-bottom:var(--sp-head-desc)}

/* ============================================================
   BUTTON LABEL FLIP — WRAP DEFECT
   ============================================================
   fix_button_flip.py argues the flip is wrap-safe because ".fx-b is
   absolutely positioned so it cannot contribute to layout. Only .fx-a sizes
   the container ... so it is correct at any line count."

   That is true for .fx-a, which is a real text run. It is false for .fx-b.
   initGlitch()'s build() replaces that text with one inline-block span per
   character, each pinned to its own measured width. Splitting a run into
   per-character boxes discards the kerning between them, so the rebuilt label
   is always slightly WIDER than the run the container was sized from.

   Measured on "Read the comparisons", /glossary/, 1440px:
       .fx and .fx-a (text run)     159.29px
       sum of the 20 span widths    159.76px
       overflow                       0.47px

   0.47px is enough. .btn .fx-b inherits white-space:normal, so it wraps to a
   second line, doubles from 15px to 30px, and .fx{overflow:hidden} cuts it in
   half — the strip of clipped glyphs above the label.

   It only bites when the kerning loss crosses the container edge, so it fires
   on some labels and not others. That is why it reads as random.

   nowrap is the correct constraint here: the two layers must occupy the same
   box, and only .fx-a is entitled to define it. No button label on the site
   wraps today (11 buttons checked at 1440 and 600), so nothing regresses. If a
   genuinely two-line button label is ever introduced, .fx-b will render on one
   line and clip; the durable fix then is for build() to stop pinning
   per-character widths, not to re-enable wrapping here. */
.btn .fx-b{white-space:nowrap}

/* ============================================================
   BUTTON FLIP — THE PERCENTAGE CANNOT REACH
   ============================================================
   `.btn .fx` is a clip box built as: line box L, plus padding-block:4px on
   each side, pulled back with margin-block:-4px so it costs no layout. The
   two label layers are then parked outside that box with a percentage:

       .btn .fx-b { top:4px; transform:translateY(110%) }
       .btn:hover .fx.is-ready .fx-a { transform:translateY(-110%) }

   A percentage resolves against the ELEMENT'S OWN height, so it scales with
   the font. The distance actually needed does not: the layer starts 4px down
   (top:4px) and must clear a further 4px of bottom padding, so it must travel
   L + 4 regardless of what L is. 110% only travels 1.1L. The two agree only
   when 0.1L >= 4, i.e. a 40px line. Every real button is smaller, so every
   real button leaks.

   Measured on the HOMEPAGE, "Ask about Creobot", after one hover:
       clip box     24.6 -> 46.6   (14px line + 4 + 4)
       .fx-b        44.0 -> 58.0   (top:4 + translateY(15.4) = 110% of 14)
       needed                18.0
       leak                   2.6px of the hidden label, permanently visible

   The same arithmetic mirrored on .fx-a is the sliver that appears ABOVE the
   button while hovering. One defect, both symptoms.

   calc(100% + 8px) travels L + 8, which clears the 4px offset and the 4px
   padding with 4px to spare, so sub-pixel rounding cannot reopen it. 8px is
   --s-2, and this is a transform rather than spacing, so the grid gate is
   unaffected either way.

   Percentages are kept for .nav-link, whose .fx has no padding: there
   105% overshoots correctly and nothing leaks. */
.btn .fx-b{transform:translateY(calc(100% + 8px))}
.btn:hover .fx.is-ready .fx-a,
.btn:focus-visible .fx.is-ready .fx-a{transform:translateY(calc(-100% - 8px))}
.btn:hover .fx.is-ready .fx-b,
.btn:focus-visible .fx.is-ready .fx-b{transform:translateY(0)}

/* ============================================================
   MOTION PASS — Emil Kowalski's design-engineering lens
   ============================================================
   The system was already doing the hard parts right: --ease is
   cubic-bezier(.16,1,.3,1), a real ease-out; .btn:active already scales to
   .97; prefers-reduced-motion is honoured. These are the four places where
   the timing works against the feel.

   1  THE HOVER FLIP WAS 420ms. Hover feedback is a response to the cursor,
      and a response that takes 420ms reads as lag rather than as motion.
      260ms keeps the whole flip legible while landing before the eye starts
      waiting for it. Entrances can be slow; reactions cannot.

   2  THE ENTRANCE WAS 800ms AND BLURRED 10px. Two problems. 800ms is past
      the point where a reveal stops feeling like arrival and starts feeling
      like a page that has not finished loading. And filter:blur is not a
      compositor property: every frame repaints the element and its
      background, which on a page already running a starfield and beams is
      the most expensive thing in the transition. 460ms and a 4px blur keep
      the softness and give back the frames.

   3  TWO [data-enter] RULES DISAGREED, 16px then 18px. The later won and the
      earlier was dead weight. Same defect class as everything else in this
      stylesheet: a value stated twice is a value nobody owns.

   4  BUTTONS HAD NO HOVER LIFT. :active already presses to .97, so the press
      is right, but nothing acknowledged the pointer before the click. A 1px
      rise is the smallest change that reads as "this is live" without
      turning into decoration. :active keeps priority so press still wins.
   ============================================================ */

/* 1. reaction speed */
.btn .fx-a,.btn .fx-b{transition-duration:260ms}

/* 2 + 3. one entrance, faster, cheaper to paint */
html.anim [data-enter]{
  transform:translateY(16px);
  filter:blur(4px);
  transition-duration:460ms}

/* 4. acknowledge the pointer, then yield to the press */
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:translateY(0) scale(.97)}

/* Motion is a preference, not a default. Every value above collapses. */
@media (prefers-reduced-motion:reduce){
  .btn .fx-a,.btn .fx-b{transition-duration:1ms}
  html.anim [data-enter]{transform:none;filter:none;transition-duration:1ms}
  .btn:hover{transform:none}
}

/* ============================================================
   CALCULATOR TOOLS
   A real input panel and a live result panel. Built from the same
   tokens as everything else so a tool page is not a visual exception:
   --line for edges, --bg-1 for the card ground, --accent only on the
   number that answers the question.
   ============================================================ */
.calc{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.92fr);
  gap:var(--s-6);align-items:start;margin-top:var(--s-7)}
.calc-in,.calc-out{border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--bg-1);padding:var(--s-6);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.045)}
.calc-out{background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.018));
  border-color:var(--line-2);position:sticky;top:104px}
.calc-lab{font-family:var(--font-m);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--ink-4);margin:0 0 var(--s-5)}
.calc-f{display:grid;gap:var(--s-2);margin-bottom:var(--s-5)}
.calc-f:last-child{margin-bottom:0}
.calc-f > span{font-size:14px;color:var(--ink-2)}
.calc-f small{display:block;font-size:12.5px;color:var(--ink-4);line-height:1.5}
.calc-f input,.calc-f select{width:100%;min-height:44px;padding:0 var(--s-4);
  border:1px solid var(--line-2);border-radius:var(--r-sm);
  background:rgba(255,255,255,.03);color:var(--ink);
  font-family:var(--font);font-size:15px;
  transition:border-color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.calc-f input:focus-visible,.calc-f select:focus-visible{border-color:var(--accent);
  background:rgba(255,255,255,.05)}
.calc-f input[type=range]{padding:0;min-height:28px;accent-color:var(--accent);
  background:0;border:0}
.calc-v{font-family:var(--font-m);font-size:12px;color:var(--accent);
  font-variant-numeric:tabular-nums}
.calc-big{padding-bottom:var(--s-5);border-bottom:1px solid var(--line);
  margin-bottom:var(--s-5)}
.calc-big b{display:block;font-family:var(--font-d);font-weight:700;
  font-size:clamp(30px,4.4vw,44px);line-height:1;letter-spacing:-.03em;
  color:var(--ink);font-variant-numeric:tabular-nums}
.calc-big span{display:block;margin-top:var(--s-2);font-size:13.5px;color:var(--ink-3)}
.calc-rows{list-style:none;margin:0;padding:0;display:grid;gap:var(--s-3)}
.calc-rows li{display:flex;justify-content:space-between;gap:var(--s-4);
  font-size:14px;color:var(--ink-3)}
.calc-rows b{color:var(--ink-2);font-variant-numeric:tabular-nums;font-weight:600}
.calc-note{margin:var(--s-5) 0 0;padding-top:var(--s-4);border-top:1px solid var(--line);
  font-size:12.5px;line-height:1.6;color:var(--ink-4)}
.calc-out-text{width:100%;min-height:260px;padding:var(--s-4);
  border:1px solid var(--line-2);border-radius:var(--r-sm);
  background:rgba(0,0,0,.28);color:var(--ink-2);
  font-family:var(--font-m);font-size:12.5px;line-height:1.62;resize:vertical}
.calc-copy{margin-top:var(--s-4)}
@media(max-width:900px){
  .calc{grid-template-columns:1fr}
  .calc-out{position:static}
}

/* ============================================================
   MOTION PASS — PARTIAL REVERT
   ============================================================
   The motion pass above cut the button flip from 420ms to 260ms on the
   principle that hover feedback should feel immediate. That principle is
   right for a simple state change and wrong here, because this flip is not
   a state change: initGlitch() rebuilds the label as one span per character
   and scrambles each one through random glyphs before settling. The effect
   IS the scramble, and the scramble needs duration to be read. At 260ms it
   completes before the eye resolves it, so the button appears to do nothing.

   420ms was a considered value, not an oversight. Restored.

   The hover lift is also removed. It was added on general principle, was
   not asked for, and it competes with the label flip for attention on the
   same element at the same moment.

   What stays from that pass, because each fixed a real defect:
     - the entrance at 460ms with a 4px blur, instead of 800ms and 10px
     - one [data-enter] translate instead of two that disagreed
     - .fx-b parked with calc(100% + 8px), which is what stops 2.6px of the
       hidden label showing under every button
   ============================================================ */
.btn .fx-a,.btn .fx-b{transition-duration:420ms}
.btn:hover{transform:none}
.btn:active{transform:scale(.97)}
@media (prefers-reduced-motion:reduce){
  .btn .fx-a,.btn .fx-b{transition-duration:1ms}
}

/* ============================================================
   BUTTON FLIP — SAFETY NET
   ============================================================
   The flip hides .fx-a and shows .fx-b. If .fx-b is ever empty, that means
   the button hovers to blank. It happened: start() returned before build()
   whenever prefers-reduced-motion was set, so on any machine with animations
   turned off the label slid away and nothing replaced it. The JS is fixed,
   but the CSS should not be able to blank a button under any circumstance,
   whatever the script does or fails to do.

   :has(.fx-b:empty) keeps the real label in place until the second layer
   genuinely has content in it.

   Under reduced motion the flip still happens, because it is a label change
   and not an ornament. What reduced motion removes is the character scramble,
   which is handled in initGlitch(), and the travel, which is instant here. */
.btn .fx:has(.fx-b:empty) .fx-a{transform:none}
.btn:hover .fx:has(.fx-b:empty) .fx-a,
.btn:focus-visible .fx:has(.fx-b:empty) .fx-a{transform:none}

@media (prefers-reduced-motion:reduce){
  .btn .fx-a,.btn .fx-b{transition-duration:1ms}
}

/* ============================================================
   FLIP GUARD — UNIVERSAL, NO :has() REQUIRED
   ============================================================
   The button flip is gated on .is-ready. The nav flip never was:

       .nav-link:hover .fx.is-ready .fx-a { transform: translateY(-105%) }

   fires whether or not initGlitch() ever filled .fx-b. So on any browser
   where the second layer is empty, hovering a nav item slides "Pricing"
   out and leaves an empty pill. That is the bug, and it is a different
   code path from the buttons, which is why the buttons looked fine while
   the nav did not.

   The earlier guard used :has(.fx-b:empty). That is correct but it is not
   universally supported, and a fallback that needs a modern browser is not
   a fallback. .is-ready is a plain class, so this works everywhere.

   Rule: nothing may move a label out of view unless the layer replacing it
   is ready. Ready is set by build(), and build() now only sets it when it
   actually produced characters.
   ============================================================ */

/* Nav: hold the label until the replacement exists. */
.nav-link:hover .fx:not(.is-ready) .fx-a,
.nav-link:focus-visible .fx:not(.is-ready) .fx-a{transform:none}
.nav-link:hover .fx:not(.is-ready) .fx-b,
.nav-link:focus-visible .fx:not(.is-ready) .fx-b{transform:translateY(105%)}

/* Anything else that ever uses .fx, now or later. */
.fx:not(.is-ready) .fx-a{transform:none}


/* ============================================================
   HOVER STYLES, MIRRORED OFF THE MEDIA QUERY
   ============================================================
   Same laptop, same Chromium 152, opposite answers:

     Chrome  any-hover: hover  TRUE    any-pointer: fine  TRUE
     Edge    any-hover: hover  FALSE   any-pointer: fine  FALSE

   Edge is reporting the machine as touch-only while a mouse is in use.
   Whatever setting causes that, the conclusion is the same: a media query
   is not a reliable way to ask whether someone can hover, and 15 hover
   rules sat behind one.

   So every rule inside those @media blocks is repeated below under
   html.has-hover, a class main.js sets the first time a real mouse or pen
   event arrives. Evidence rather than prediction. The original blocks stay
   exactly as they are, so browsers that answer the query correctly keep
   working through the normal path and nothing regresses.
   ============================================================ */
html.has-hover .card:hover,
html.has-hover .card.glow:hover,
html.has-hover .bento-card:hover,
html.has-hover .bento-card.glow:hover,
html.has-hover .ticket:hover,
html.has-hover .ticket.glow:hover,
html.has-hover .qt:hover,
html.has-hover .qt.glow:hover,
html.has-hover .cc-left:hover,
html.has-hover .cc-panel:hover,
html.has-hover .faq-item:hover,
html.has-hover .faq-item.glow:hover,
html.has-hover .tsl-card:hover,
html.has-hover .ho-thread:hover,
html.has-hover .ho-packet:hover,
html.has-hover .wf-report:hover,
html.has-hover .cta-panel:hover,
html.has-hover .ig-node:hover,
html.has-hover .hand-ui:hover{border-color:rgba(255,255,255,.24);
box-shadow:inset 0 1px 0 rgba(255,255,255,.06),
0 0 0 1px rgba(14,165,233,.16),
0 18px 44px -28px rgba(0,0,0,.9)}
html.has-hover .ig-node:hover{border-color:rgba(255,255,255,.24);background:rgba(255,255,255,.03);
transform:translateY(-1px)}
html.has-hover .an-r:hover{background:rgba(255,255,255,.05);border-color:var(--line-2)}
html.has-hover .ho-tab:hover{border-color:var(--line-2);background:rgba(255,255,255,.04)}
html.has-hover .lp-step:hover{background:rgba(255,255,255,.035)}
html.has-hover .fc-panel{transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
html.has-hover .fc-panel:hover{border-color:rgba(255,255,255,.24);background:rgba(255,255,255,.028)}
html.has-hover .pb-col:hover{background:rgba(255,255,255,.022);border-color:rgba(255,255,255,.24)}
html.has-hover .btn-pick:hover{background:rgba(255,255,255,.09);border-color:rgba(14,165,233,.5)}
html.has-hover .btn-pick:hover{background:rgba(255,255,255,.10);border-color:rgba(14,165,233,.5)}
html.has-hover .wf-case:hover{background:rgba(255,255,255,.035)}
html.has-hover .tsl-btn:hover{border-color:rgba(255,255,255,.24);color:var(--ink);background:rgba(255,255,255,.05)}
html.has-hover .hd-pill:hover{background:rgba(255,255,255,.04)}
html.has-hover .gl-term:hover{border-color:var(--line-2)}
html.has-hover .post-card:hover .post-shot::after{transform:scaleX(1)}

/* ============================================================
   NATIVE SELECT — READABLE OPTIONS
   ============================================================
   `button,input,textarea,select{color:inherit}` hands the near-white --ink
   down to the <option> list. The native dropdown popup is drawn by the OS,
   not the page, and on Windows it opens on a white system background. White
   text on a white popup: the options were invisible, only the highlighted
   row could be read. Reported from Edge with a screenshot.

   color-scheme is already declared on :root but does not reach the control
   here, so set it on the element AND colour the options explicitly. The
   explicit colours are what actually fix it; color-scheme just makes the
   scrollbar and border match.

   Applies to every <select> on the site, not only the tool pages, so a
   future form cannot inherit the same problem.
   ============================================================ */
select{
  color-scheme:dark;
  background-color:rgba(255,255,255,.03);
  color:var(--ink);
  cursor:pointer;
}
select option,
select optgroup{
  background-color:#14161b;
  color:#e9ebef;
}
select option:checked,
select option:hover{
  background-color:rgba(14,165,233,.22);
  color:#fff;
}
select option:disabled{color:#697080}

/* The chevron: a select with no affordance reads as a text field. */
.calc-f select{
  appearance:none;
  padding-right:var(--s-9);
  background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),
                   linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);
  background-position:calc(100% - 20px) calc(50% + 2px),calc(100% - 15px) calc(50% + 2px);
  background-size:5px 5px,5px 5px;
  background-repeat:no-repeat;
}
.calc-f select:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:2px;
  border-color:var(--accent);
}

/* ============================================================
   WHOLE-CARD CLICK TARGET
   ============================================================
   .uc-card already does this: .uc-link::after stretches to inset:0 so the
   whole card is the hit area while the DOM still contains exactly one link.
   .card never got the same treatment, so on 36 cards only the title text was
   clickable and the rest of the card looked interactive but was not.

   Same pattern, not a second one. One <a>, so a screen reader announces one
   link with the title as its name, and keyboard order is unchanged. The card
   is not given a role or a click handler, which is what keeps it accessible:
   a div with onclick is not a link and does not behave like one.

   Verified before applying: all 36 .card elements contain zero absolutely
   positioned descendants, so introducing a containing block here cannot move
   anything.
   ============================================================ */
.card{position:relative}
.card > h3 > .plink::after{
  content:"";position:absolute;inset:0;z-index:1;border-radius:inherit;
}

/* The card must show focus, since the focus ring on the text alone is easy to
   miss when the whole card is the target. */
.card:focus-within{
  border-color:var(--accent);
  box-shadow:0 0 0 2px rgba(14,165,233,.32);
}
.card > h3 > .plink:focus-visible{outline:none}

/* The whole card is the target, description included. Apple's cards behave
   this way: the text is part of the control, not a separate selectable region.
   Keeping the copy above the overlay for selection meant a click on the blurb
   did nothing, which is worse than losing text selection inside a card. */

/* The heading carries position:relative from an earlier rule, so the stretched
   overlay resolved against the h3 and covered only the title row: 458x28
   instead of the whole card. .uc-card already solves this with
   `.uc-card > .uc-h{position:static}` — the pattern includes neutralising the
   intermediate containing block, and copying only the ::after half of it was
   the mistake. */
.card > h3{position:static}

/* ============================================================
   TABBED ANSWER GROUPS
   ============================================================
   Sixteen numbered cards in a row is a list wearing a costume: the numbers
   encode nothing, nobody reads card 11, and a procurement reviewer looking
   for the data question has to scan all sixteen.

   Grouping them by what a reviewer actually came for, and collapsing the
   answers, means the page opens as four decisions rather than sixteen
   paragraphs. The number of questions in each tab is shown, because that is
   real information: it tells you where the weight is.
   ============================================================ */
.qtabs{margin-top:var(--s-7)}
.qtablist{display:flex;flex-wrap:wrap;gap:var(--s-2);
  border-bottom:1px solid var(--line);padding-bottom:var(--s-4);margin-bottom:var(--s-6)}
.qtab{appearance:none;display:inline-flex;align-items:center;gap:var(--s-3);
  padding:var(--s-3) var(--s-4);border-radius:var(--r-pill);cursor:pointer;
  border:1px solid var(--line);background:rgba(255,255,255,.02);
  color:var(--ink-3);font:inherit;font-size:14px;
  transition:color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),
             background var(--t-fast) var(--ease)}
.qtab:hover{color:var(--ink-2);border-color:var(--line-2)}
.qtab[aria-selected="true"]{background:rgba(255,255,255,.06);
  border-color:var(--accent-bd,rgba(14,165,233,.36));color:var(--ink)}
.qtab .qn{font-family:var(--font-m);font-size:11px;color:var(--ink-4);
  font-variant-numeric:tabular-nums}
.qtab[aria-selected="true"] .qn{color:var(--accent)}
.qtab:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

.qpanel[hidden]{display:none}
.qpanel{display:grid;gap:var(--s-3)}

/* One answer. Closed it is a question; open it is a question with its answer
   underneath, which is the shape an assistant quotes and a reviewer scans. */
.qa{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
  overflow:hidden;transition:border-color var(--t) var(--ease)}
.qa:hover{border-color:var(--line-2)}
.qa.is-open{border-color:var(--line-2);background:rgba(255,255,255,.025)}
.qa-q{margin:0}
.qa-btn{appearance:none;width:100%;display:flex;align-items:flex-start;
  justify-content:space-between;gap:var(--s-4);text-align:left;cursor:pointer;
  padding:var(--s-5) var(--s-6);border:0;background:0;color:var(--ink-2);
  font:inherit;font-size:16px;line-height:1.4;
  transition:color var(--t-fast) var(--ease)}
.qa-btn:hover,.qa.is-open .qa-btn{color:var(--ink)}
.qa-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
/* The verdict, readable before the answer is opened. This is the column a
   reviewer is really scanning. */
.qa-v{flex:none;font-family:var(--font-m);font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;padding:var(--s-1) var(--s-2);border-radius:5px;border:1px solid;
  white-space:nowrap;margin-top:var(--s-1)}
.qa-v.no{color:#f0a5a5;background:rgba(240,120,120,.10);border-color:rgba(240,120,120,.30)}
.qa-v.yes{color:#7fd8b0;background:rgba(52,211,153,.10);border-color:rgba(52,211,153,.30)}
.qa-v.part{color:#f3c77a;background:rgba(251,191,36,.10);border-color:rgba(251,191,36,.30)}
.qa-wrap{display:grid;grid-template-rows:0fr;transition:grid-template-rows 280ms var(--ease)}
.qa.is-open .qa-wrap{grid-template-rows:1fr}
.qa-wrap > div{overflow:hidden;min-height:0}
.qa-a{padding:0 var(--s-6) var(--s-5);margin:0;color:var(--ink-3);
  font-size:14.5px;line-height:1.65;max-width:78ch}
@media(max-width:640px){
  .qa-btn{padding:var(--s-4) var(--s-5);font-size:15px;flex-wrap:wrap}
  .qa-a{padding:0 var(--s-5) var(--s-4)}
}

/* ============================================================
   SPEC ROWS — the replacement for numbered explainer cards
   ============================================================
   .dec-list put every explainer in a bordered card with a numbered badge.
   Used once it reads as a sequence. Used 266 times across 49 pages it reads
   as a template, and the numbers encode nothing: there is no order in which
   "Credits" comes before "Sources".

   This is the same content as a split row instead. The term sits in its own
   column, the explanation runs beside it, and a hairline separates them. No
   badge, no box, no icon unless the content earns one. It scans like a
   reference table, which is what an explainer list actually is, and it works
   at four items or twenty.

   The term column is what makes it scannable: a reader looking for "Storage"
   finds it down the left edge without reading a single paragraph.
   ============================================================ */
.spec{margin-top:var(--s-7);border-top:1px solid var(--line)}
.spec-row{display:grid;grid-template-columns:minmax(160px,.30fr) minmax(0,1fr);
  gap:var(--s-6);padding:var(--s-6) 0;border-bottom:1px solid var(--line);
  transition:background var(--t) var(--ease)}
.spec-row:hover{background:rgba(255,255,255,.014)}
.spec-t{margin:0;font-family:var(--font-d);font-size:17px;line-height:1.3;
  font-weight:600;letter-spacing:-.012em;color:var(--ink);
  display:flex;align-items:baseline;gap:var(--s-3)}
/* A short accent rule instead of a number. It marks the row without pretending
   to be an ordinal. */
.spec-t::before{content:"";flex:none;width:14px;height:1px;
  background:var(--accent);opacity:.55;transform:translateY(-5px)}
.spec-row:hover .spec-t::before{opacity:1}
.spec-p{margin:0;color:var(--ink-3);font-size:15px;line-height:1.68;max-width:74ch}
.spec-p + .spec-p{margin-top:var(--s-4)}
/* An optional trailing note, for rows that need a caveat rather than a card. */
.spec-note{margin:var(--s-3) 0 0;font-family:var(--font-m);font-size:11.5px;
  letter-spacing:.02em;color:var(--ink-4)}

@media(max-width:760px){
  .spec-row{grid-template-columns:1fr;gap:var(--s-3);padding:var(--s-5) 0}
  .spec-t{font-size:16px}
}

/* ---- Compact variant, for short label/value pairs where prose would be
   heavier than the fact it carries. ---- */
.spec.-tight .spec-row{padding:var(--s-4) 0;
  grid-template-columns:minmax(140px,.26fr) minmax(0,1fr)}
.spec.-tight .spec-t{font-size:15px}
.spec.-tight .spec-p{font-size:14.5px}

/* ============================================================
   TOOL INDEX — filterable, typed
   ============================================================
   Thirty-six tools in five stacked grids is a directory nobody reads to the
   bottom. The page had no way to answer "which of these takes my robots.txt"
   without scrolling all of it.

   So: a filter that narrows as you type, category pills, and a live count.
   Each card carries what it IS (calculator, analyser, generator, test kit)
   and what it WANTS from you (a number, a paste, a choice) — the two facts
   that decide whether a visitor clicks. That is information, not decoration,
   which is why it earns the space an icon would have wasted.
   ============================================================ */
.tf{position:sticky;top:calc(var(--nav-h) + 8px);z-index:5;
  padding:var(--s-5) 0;margin-bottom:var(--s-6);
  background:linear-gradient(180deg,var(--bg) 72%,transparent);
  border-bottom:1px solid var(--line)}
.tf-in{display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:center}
.tf-search{flex:1 1 260px;min-width:0;position:relative;display:flex;align-items:center}
.tf-search svg{position:absolute;left:var(--s-3);width:16px;height:16px;color:var(--ink-4);
  pointer-events:none}
.tf-search input{width:100%;min-height:44px;padding:0 var(--s-5) 0 var(--s-8);
  border:1px solid var(--line-2);border-radius:var(--r-pill);
  background:rgba(255,255,255,.03);color:var(--ink);font:inherit;font-size:15px;
  transition:border-color var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
.tf-search input::placeholder{color:var(--ink-4)}
.tf-search input:focus-visible{outline:none;border-color:var(--accent);
  background:rgba(255,255,255,.05)}
.tf-pill{appearance:none;cursor:pointer;font:inherit;font-size:13.5px;
  padding:var(--s-2) var(--s-4);border-radius:var(--r-pill);
  border:1px solid var(--line);background:rgba(255,255,255,.02);color:var(--ink-3);
  transition:color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),
             background var(--t-fast) var(--ease)}
.tf-pill:hover{color:var(--ink-2);border-color:var(--line-2)}
.tf-pill[aria-pressed="true"]{background:rgba(255,255,255,.07);
  border-color:rgba(14,165,233,.36);color:var(--ink)}
.tf-pill:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.tf-count{margin-left:auto;font-family:var(--font-m);font-size:11px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);
  font-variant-numeric:tabular-nums}

.tgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));
  gap:var(--s-4)}
.tcard{position:relative;display:flex;flex-direction:column;gap:var(--s-3);
  padding:var(--s-5) var(--s-6) var(--s-6);
  border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-1);
  transition:border-color var(--t) var(--ease),background var(--t) var(--ease)}
.tcard:hover{border-color:rgba(255,255,255,.24);background:rgba(255,255,255,.022)}
.tcard:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px rgba(14,165,233,.30)}
.tcard[hidden]{display:none}
.tcard-top{display:flex;align-items:center;gap:var(--s-3);
  font-family:var(--font-m);font-size:10px;letter-spacing:.1em;text-transform:uppercase}
.tcard-kind{color:var(--accent)}
.tcard-in{margin-left:auto;color:var(--ink-4)}
.tcard h3{margin:0;font-size:16.5px;line-height:1.3;letter-spacing:-.012em}
.tcard h3 a{color:var(--ink);text-decoration:none}
.tcard h3 a::after{content:"";position:absolute;inset:0;border-radius:inherit}
.tcard h3 a:focus-visible{outline:none}
.tcard p{margin:0;font-size:14px;line-height:1.6;color:var(--ink-3)}
.tcard-live{position:absolute;top:var(--s-5);right:var(--s-6);width:6px;height:6px;
  border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px rgba(14,165,233,.16)}

.tf-empty{padding:var(--s-9) 0;text-align:center;color:var(--ink-4);font-size:15px}
.tf-empty[hidden]{display:none}

@media(max-width:640px){
  .tf{position:static}
  .tgrid{grid-template-columns:1fr}
  .tf-count{margin-left:0;width:100%}
}


/* Four link columns now that migration guides have their own. Ten pages that
   had one inbound link each are the highest commercial-intent pages on the
   site; leaving them reachable only from /compare/ wasted them. */
.foot-grid{grid-template-columns:1fr}
@media(min-width:760px){.foot-grid{grid-template-columns:1.3fr repeat(3,1fr)}}
@media(min-width:1100px){.foot-grid{grid-template-columns:1.25fr repeat(4,.9fr)}}

/* ==========================================================================
   TOOL CARD FIGURES
   The 36 cards on /tools/ were text slabs: kind, needs, title, blurb, nothing
   else. Standard tier per creo-visual-direction wants a product signal in the
   44-96px band, so the figure is given a fixed 96px box and the card reads
   picture-first.

   aspect-ratio rather than height so the 300x96 viewBox never distorts, and a
   min-height on the card so a short blurb cannot collapse the art against the
   title. The hairline under the figure is the same --line the rest of the
   system uses; without it the drawing floats and the card loses its top edge.
   ========================================================================== */
.tcard{display:flex;flex-direction:column}
.tcard-fig{display:block;margin:calc(var(--s-4) * -1) calc(var(--s-5) * -1) var(--s-4);
  padding:var(--s-4) var(--s-5) var(--s-3);border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,rgba(255,255,255,.022),transparent)}
.tcard-fig svg{display:block;width:100%;height:auto;aspect-ratio:300/96}
.tcard-fig text{font-family:var(--font-m)}

/* The figure is the one thing on the card that should acknowledge the pointer.
   Mirrored under html.has-hover because Edge on a touchscreen laptop reports
   any-hover:none and would otherwise get no hover state at all. */
@media (hover:hover){
  .tcard:hover .tcard-fig{background:linear-gradient(180deg,rgba(14,165,233,.06),transparent)}
}
html.has-hover .tcard:hover .tcard-fig{
  background:linear-gradient(180deg,rgba(14,165,233,.06),transparent)}
.tcard-fig,html.has-hover .tcard-fig{transition:background 200ms cubic-bezier(.215,.61,.355,1)}
@media (prefers-reduced-motion:reduce){.tcard-fig{transition:none}}

/* ==========================================================================
   PAGE HEADER ART
   .phead-grid is two columns; the tool generator only filled the first, so 35
   of 36 tool pages shipped a header with an empty right half and a 200x112
   stub where the hero should be. The replacement is 520x300 and carries the
   same drawing as that tool's card on /tools/, so the reader recognises what
   they clicked.

   width:100% + height:auto on the svg, and aspect-ratio so the box is reserved
   before paint -- otherwise the header reflows when the figure lands and the
   reveal below it fires against a moving target.
   ========================================================================== */
.phead-art{display:block;min-width:0}
.phead-art > svg{display:block;width:100%;height:auto;aspect-ratio:520/300}
.phead-art text{font-family:var(--font-m)}
@media (max-width:900px){
  .phead-art{margin-top:var(--s-8)}
}

/* ==========================================================================
   NAV CLEARANCE, COUNTED ONCE
   body already carries padding-top:var(--nav-h) to clear the fixed nav
   (main.css line ~100). .phead and .home-hero then added var(--nav-h) a SECOND
   time inside their own padding-top calc, so every interior page opened with
   72 + 72 + 96 = 240px of empty space above the breadcrumb, and the homepage
   with 192px above the hero. That is the dark band at the top of every
   screenshot.

   The intended rhythm was nav, then one section step. Keeping the step and
   dropping the duplicated nav height gives 168px on interior pages and 120px
   on the homepage -- both still generous, both on the 4pt scale, and the void
   is gone. --s-12 and --s-9 are unchanged so the relationship between the two
   page types is preserved.
   ========================================================================== */
.phead{padding-top:var(--s-12)}
.home-hero{padding-top:var(--s-9)}
@media (max-width:900px){
  .phead{padding-top:var(--s-10)}
  .home-hero{padding-top:var(--s-8)}
}

/* ==========================================================================
   SECTION STAGGER
   [data-rise] sits on the section .wrap. Revealing that one node fades the
   heading, the lede and every card in the grid together -- one block, one
   curve, no sequence. That is the "mostly fade in and fade out" complaint.

   animations.js now walks each [data-rise], flattens one level into known grid
   containers, tags the children .rise-kid with a --rd delay, and tags the
   parent .rise-host. The host stops animating itself so the two do not stack
   into a mush; the children cascade at 55ms, capped so a nine-card grid does
   not take half a second to finish arriving.

   Classes are added by JS. With JS off no element ever gets .rise-kid, so
   nothing is hidden -- the same guarantee the existing reveal relies on.
   ========================================================================== */
html.anim [data-rise].rise-host,
html.anim [data-enter].rise-host{opacity:1;transform:none;filter:none;transition:none}
html.anim .rise-kid{opacity:0;transform:translateY(12px);filter:blur(6px);
  transition:opacity 560ms cubic-bezier(.215,.61,.355,1) var(--rd,0ms),
             transform 560ms cubic-bezier(.215,.61,.355,1) var(--rd,0ms),
             filter 560ms cubic-bezier(.215,.61,.355,1) var(--rd,0ms)}
html.anim .rise-host.is-in .rise-kid{opacity:1;transform:none;filter:none}

/* ==========================================================================
   FIGURE MOTION
   A finished bar states a number. A bar that runs out to its value states that
   the number was measured, which is the whole claim these figures make. Marks
   land after the bar they belong to, so the tick reads as a verdict on the row
   rather than as part of the furniture.

   transform-box:fill-box is required for transform-origin to resolve against
   the shape rather than the SVG viewport -- without it every bar grows from
   the far left of the drawing.
   ========================================================================== */
html.anim .art-fig .b-fill,html.anim .tfig .b-fill{
  transform:scaleX(0);transform-box:fill-box;transform-origin:left center;
  transition:transform 720ms cubic-bezier(.215,.61,.355,1) var(--fd,0ms)}
html.anim .art-fig.is-fx .b-fill,html.anim .tfig.is-fx .b-fill{transform:scaleX(1)}

html.anim .art-fig .b-mark,html.anim .tfig .b-mark{
  opacity:0;transform:scale(.6);transform-box:fill-box;transform-origin:center;
  transition:opacity 260ms ease var(--fd,0ms),
             transform 260ms cubic-bezier(.34,1.56,.64,1) var(--fd,0ms)}
html.anim .art-fig.is-fx .b-mark,html.anim .tfig.is-fx .b-mark{opacity:1;transform:none}

html.anim .art-fig .b-draw,html.anim .tfig .b-draw{
  stroke-dasharray:var(--dl,60);stroke-dashoffset:var(--dl,60);
  transition:stroke-dashoffset 620ms cubic-bezier(.215,.61,.355,1) var(--fd,0ms)}
html.anim .art-fig.is-fx .b-draw,html.anim .tfig.is-fx .b-draw{stroke-dashoffset:0}

@media (prefers-reduced-motion:reduce){
  html.anim .rise-kid{opacity:1;transform:none;filter:none;transition:none}
  html.anim .b-fill{transform:none;transition:none}
  html.anim .b-mark{opacity:1;transform:none;transition:none}
  html.anim .b-draw{stroke-dashoffset:0;transition:none}
}

/* ==========================================================================
   PRICING OFFER CARDS
   Replaces the last numbered 1-2-3-4-5 dec-list on the site. Standard tier: a
   260x72 product signal above the copy, so each offer is legible before its
   heading is read.

   Whole-card click uses the stretched-link pattern. The two rules that make it
   work and that were wrong the first time this was attempted elsewhere:
   .ocard is the only positioned ancestor, and .ocard-h is explicitly static --
   if the heading is positioned, the overlay resolves against the heading and
   only the title becomes clickable (measured at 458x28 last time). The card
   is measured in the rendered-QA pass, never assumed.
   ========================================================================== */
.ogrid{display:grid;gap:var(--s-5);margin-top:var(--s-8)}
@media (min-width:760px){.ogrid{grid-template-columns:repeat(2,1fr)}}
@media (min-width:1100px){.ogrid{grid-template-columns:repeat(3,1fr)}}
.ocard{position:relative;display:flex;flex-direction:column;
  border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);
  overflow:hidden;transition:border-color 200ms cubic-bezier(.215,.61,.355,1),
  background 200ms cubic-bezier(.215,.61,.355,1)}
.ocard-fig{display:block;padding:var(--s-5) var(--s-5) var(--s-3);
  border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,rgba(255,255,255,.022),transparent)}
.ocard-fig svg{display:block;width:100%;height:auto;aspect-ratio:260/72}
.ocard-fig text{font-family:var(--font-m)}
/* position:static is load-bearing. Something else in this stylesheet gives
   .ocard-b a relative position, which made it the containing block for the
   stretched link: measured coverage was 58% and a click anywhere over the
   figure missed the anchor entirely. Same defect as the .uc-h case. */
.ocard-b{position:static;padding:var(--s-5);display:flex;flex-direction:column;gap:var(--s-3);flex:1}
.ocard-top{margin:0}
.ocard-pill{display:inline-block;font-family:var(--font-m);font-size:11px;
  letter-spacing:.06em;text-transform:uppercase;color:var(--accent);
  background:rgba(14,165,233,.12);border:1px solid rgba(14,165,233,.30);
  border-radius:999px;padding:var(--s-1) var(--s-3)}
.ocard-h{position:static;margin:0;font-size:18px;line-height:1.3}
.ocard-h a{color:var(--ink-1);text-decoration:none}
.ocard-h a::after{content:"";position:absolute;inset:0;z-index:1}
.ocard-p{margin:0;color:var(--ink-3);font-size:14.5px;line-height:1.6}

@media (hover:hover){
  .ocard:hover{border-color:rgba(14,165,233,.42);background:rgba(255,255,255,.045)}
  .ocard:hover .ocard-fig{background:linear-gradient(180deg,rgba(14,165,233,.06),transparent)}
}
html.has-hover .ocard:hover{border-color:rgba(14,165,233,.42);background:rgba(255,255,255,.045)}
html.has-hover .ocard:hover .ocard-fig{
  background:linear-gradient(180deg,rgba(14,165,233,.06),transparent)}
.ocard:focus-within{outline:2px solid var(--accent);outline-offset:3px}
@media (prefers-reduced-motion:reduce){.ocard,.ocard-fig{transition:none}}

/* ==========================================================================
   :has() FALLBACK
   The R7 editorial layout is driven entirely by :has() -- a browser without it
   drops those rules whole, so .prose-col loses its max-width and paragraphs run
   the full 1200px wrap. That is a readability failure, not a cosmetic one.

   :has() landed in Chrome 105, Safari 15.4 and Firefox 121, so this is a small
   minority today. It still gets a floor: constrain the measure and keep the
   heading rhythm, without trying to reconstruct the two-column layout.

   Written as @supports not (selector(:has(*))) so it applies ONLY where the
   real rules could not.
   ========================================================================== */
@supports not (selector(:has(*))){
  .sec > .wrap > .prose-col{max-width:66ch}
  .sec > .wrap > .shead{max-width:24ch;margin:0 0 var(--s-5)}
  .uc-card:focus-within{outline:2px solid var(--accent);outline-offset:2px}
}

/* ==========================================================================
   REDUCED-TRANSPARENCY AND FORCED-COLOURS
   Windows high-contrast mode replaces authored colours. Without this the
   figures lose their hairlines entirely and read as empty boxes, and the
   accent-only distinction between the two panels in a benchmark figure
   disappears -- which is the whole content of that drawing.
   ========================================================================== */
@media (forced-colors: active){
  .art-fig, .tfig, .ofig{forced-color-adjust:none}
  .btn, .tcard, .ocard, .faq-item{border-color:CanvasText}
  .btn-primary{background:Highlight;color:HighlightText}
  :focus-visible{outline:2px solid Highlight;outline-offset:2px}
}

/* ==========================================================================
   FORMS
   Ported from the Creoglyph stylesheet in creoglyph_final_code_live.zip, which
   is the quality reference. Same field structure, same status card, same
   token vocabulary -- every custom property used here already exists in this
   file, so nothing new was invented to make the port fit.

   Two comments carried over because both record a real bug:

   1. .form-status is a flex row with the mark beside the body. The body must
      be min-width:0 or a long inbox address holds the page open at 320px.
   2. .err-msg:empty is display:none. Without it every field reserves a line
      for an error that is not there and the form grows a ragged rhythm.
   ========================================================================== */
.form{display:grid;gap:var(--s-5);max-width:66ch}
.form-wide{max-width:none}

/* This stylesheet already had a `.field` rule, used by an older figure and now
   referenced by nothing: mono type, 12px, a dashed border and 8px of padding.
   It does not conflict on the properties this block declares, so it silently
   won on the three it declares that this block did not, and every form field
   rendered as a small dashed monospace box.

   Scoping under .form raises specificity above it, and the three properties it
   sets are reset here explicitly rather than left to cascade order. The old
   rule is left in place because deleting a rule this file still contains is a
   separate decision from making the forms correct. */
.form .field{display:grid;gap:var(--s-2);
  font-family:var(--font);font-size:inherit;color:inherit;
  border:0;padding:0;border-radius:0}
.form .field label{font-size:14px;font-weight:600;color:var(--ink);line-height:1.4;
  font-family:var(--font)}
.form .field .req{color:var(--accent);margin-left:2px}
.form .field .help{font-size:13px;color:var(--ink-3);margin:0;line-height:1.5;
  font-family:var(--font)}
.form .field input,.form .field textarea,.form .field select{
  width:100%;box-sizing:border-box;background:var(--bg-1);
  border:1px solid var(--line-2);border-radius:var(--r-md);
  padding:var(--s-3) var(--s-4);font:inherit;font-size:15px;color:var(--ink);
  transition:border-color var(--t-fast) var(--ease)}
.form .field textarea{min-height:140px;resize:vertical;line-height:1.6}
.form .field select{appearance:none;cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),
                   linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);
  background-position:calc(100% - 20px) calc(50% + 2px),calc(100% - 15px) calc(50% + 2px);
  background-size:5px 5px,5px 5px;background-repeat:no-repeat;
  padding-right:var(--s-10)}
.form .field input::placeholder,.form .field textarea::placeholder{color:var(--ink-4)}
.form .field input:hover,.form .field textarea:hover,.form .field select:hover{border-color:var(--line-3)}
.form .field input:focus-visible,.form .field textarea:focus-visible,.form .field select:focus-visible{
  outline:2px solid var(--accent);outline-offset:1px;border-color:transparent}
.form .field[data-invalid="true"] input,.form .field[data-invalid="true"] textarea,
.form .field[data-invalid="true"] select{border-color:#ff8b6d}
.form .err-msg{font-size:13px;color:#ff8b6d;margin:0;line-height:1.5;font-family:var(--font)}
.form .err-msg:empty{display:none}

/* The honeypot. Off-screen rather than display:none, because some bots skip
   anything that is not rendered. aria-hidden and tabindex="-1" keep it away
   from assistive tech and the tab order. */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.form-note{border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--bg-1);padding:var(--s-5);font-size:14px;line-height:1.6;
  color:var(--ink-2);max-width:66ch}
.form-note a{color:var(--ink);text-decoration:underline;text-underline-offset:3px}

.form-status{display:flex;gap:var(--s-4);align-items:flex-start;
  border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-1);
  padding:var(--s-5);max-width:min(66ch,100%);box-sizing:border-box}
.form-status[hidden]{display:none}
.form-status .fs-mark{width:18px;height:18px;flex:none;margin-top:2px;
  border-radius:50%;display:grid;place-items:center;
  font:600 11px/1 var(--font-m);color:var(--bg)}
.form-status .fs-body{flex:1 1 auto;min-width:0;overflow-wrap:break-word}
.form-status .fs-title{margin:0 0 var(--s-2);font-size:15px;font-weight:600;
  color:var(--ink);line-height:1.35;overflow-wrap:break-word}
.form-status .fs-msg{margin:0;font-size:14px;line-height:1.6;color:var(--ink-2);
  overflow-wrap:break-word}
.form-status .fs-inbox{display:block;margin-top:var(--s-2);
  font-family:var(--font-m);font-size:13px;color:var(--ink);overflow-wrap:anywhere}
.form-status .fs-next{margin:var(--s-3) 0 0;font-size:13.5px;line-height:1.55}
.form-status .fs-next a{color:var(--ink);text-decoration:underline;
  text-underline-offset:3px}

.form-status.-ok{border-color:rgba(107,189,110,.45);background:rgba(107,189,110,.06)}
.form-status.-ok .fs-mark{background:#6bbd6e}
.form-status.-err{border-color:rgba(255,139,109,.45);background:rgba(255,139,109,.06)}
.form-status.-err .fs-mark{background:#ff8b6d}
.form-status.-warn .fs-mark,.form-status.-config .fs-mark,
.form-status.-spam .fs-mark{background:#e6b455}
.form-status.-warn,.form-status.-config,.form-status.-spam{
  border-color:rgba(230,180,85,.45);background:rgba(230,180,85,.06)}
.form-status.-fail .fs-mark,.form-status.-offline .fs-mark{background:#e08a7a}
.form-status.-fail,.form-status.-offline{
  border-color:rgba(224,138,122,.45);background:rgba(224,138,122,.06)}
.form-status.-busy .fs-mark{background:var(--ink-3)}

button[aria-disabled="true"],button:disabled{opacity:.6;cursor:not-allowed}

/* Two-column field rows on wide viewports. Single column is the base so a
   narrow screen never has to undo anything. */
.field-row{display:grid;gap:var(--s-5);align-items:start}
/* Labels line up because every .field starts with one and the control is
   always the second row. Help and error sit below, where a longer hint in
   one column cannot push the other column's input out of line. */
.form .field-row > .field{align-content:start}
@media (min-width:720px){.field-row{grid-template-columns:1fr 1fr}}

/* ==========================================================================
   RHYTHM REPAIRS
   Found by measuring the rendered gap between consecutive siblings on all 125
   routes (rhythm_audit.py), not by reading the stylesheet. Each one was a
   genuine 0px collision between a text block and a structure, which a "% 4"
   check passes trivially because 0 divides by 4.
   ========================================================================== */

/* A section lede sat flush against the form beneath it: 0px, against the
   form's own 20px internal rhythm. Reported from a screenshot of /contact/.
   32px is a section step, so the form reads as a new block rather than as the
   next paragraph. */
.sec .wrap > .lead + .form,
.sec .wrap > p + .form{margin-top:var(--s-7)}
.sec .wrap > .form + .form-note{margin-top:var(--s-6)}

/* On the five /legal/ documents the plain-language summary sat flush under the
   header grid. Same collision, same fix, one step smaller because it belongs
   to the header rather than starting a new section. */
.phead > .wrap + .wrap > .form-note{margin-top:var(--s-6)}

/* The three remaining zero-gap collisions, found by measuring every direct
   child pair of every section .wrap on all 125 routes. Each is a block sitting
   flush on the block above it with nothing between them. Targeted rather than
   general, because a blanket ".lead + *" would double the gap everywhere a
   following element already carries its own margin. */
.sec .wrap > .lead + .lead{margin-top:var(--s-5)}
.sec .wrap > .spec + .note-band{margin-top:var(--s-6)}
.sec .wrap > .lead + .tf{margin-top:var(--s-7)}

/* ==========================================================================
   MEGA MENU, ADAPTIVE WIDTH
   .mega-in is width:max-content, so the Solutions panel sized to its intrinsic
   1186px and never shrank. place() clamps the panel's POSITION but not its
   width, so from 1000px (where the mega menu activates) up to about 1210px the
   panel slid to x:0 and still ran off the right edge -- the BY CAPABILITY
   column was cut in half on any ordinary 1024, 1152 or 1180 laptop.

   --mega-max is written by place() from documentElement.clientWidth, which
   EXCLUDES the scrollbar. 100vw would include it and reintroduce a few pixels
   of overflow on any platform that reserves scrollbar space.

   The columns wrap rather than compress: three 200px columns squeezed into
   600px is unreadable, whereas two rows of three is just a taller panel.
   ========================================================================== */
.mega-in{max-width:var(--mega-max,100%)}
.mega-card{max-width:var(--mega-max,100%)}
.mg-cols{flex-wrap:wrap;row-gap:var(--s-7)}
/* min-width must be 0, not 200px. With a 200px floor the three columns
   computed to 203 each and 3x203 + two 32px gaps came to 673 inside a 672px
   track -- one rounding pixel of overflow that clipped the last column. The
   200px flex-basis still drives when they wrap; the floor only stopped them
   settling on a whole number. */
.mg-col{flex:1 1 200px;min-width:0}
@media (max-width:1240px){
  /* the side blurb column stops being a fixed 240px so the grid can breathe */
  .mega-in{grid-template-columns:minmax(0,200px) minmax(0,1fr)}
  .mg-side{max-width:none}
}

/* .mg-item was width:max-content with max-width:25ch, so every item sized to
   its own content and ignored the column it sits in -- 259px items inside a
   203px column. The card itself was already adapting by this point; the items
   were punching out of it.

   min(25ch,100%) keeps the original intent -- an item is as wide as its text,
   never wider than 25 characters -- and adds the one cap that was missing: it
   can never exceed its column. Same failure as .mega-in, one level down. */
/* min-width:auto is the actual blocker, and it is why max-width:min(25ch,100%)
   alone did nothing: on a flex or grid item, min-width:auto resolves to the
   min-content width, and min-width ALWAYS wins over max-width. The item's
   min-content was 259px, so it held that size inside a 202px column no matter
   what cap was declared above it.

   min-width:0 lets it shrink; the text wraps rather than the box overflowing. */
/* .mg-list is display:grid with an implicit auto track, so the track sized to
   the widest item's max-content (259px) and then the item's own max-width:100%
   resolved against that same 259px track. Circular: the cap could never bind.
   minmax(0,1fr) caps the track at the container, which makes 100% mean 202px
   and lets every cap below it finally apply. */
.mg-list{grid-template-columns:minmax(0,1fr)}
.mg-item{box-sizing:border-box;min-width:0}
.mg-tx{min-width:0;overflow-wrap:anywhere}
.mg-mark{flex:none}

/* ============================================================================
   SPACING TOKEN CONTRACT
   Named tokens for every boundary relationship, enforced by
   source-checkpoint/tools/rendered_spacing_gate.py and documented in
   CREOBOT_SPACING_TOKEN_CONTRACT.md.

   These exist because the site had correct 4pt values everywhere and still
   looked wrong: every gap divided by 4, and a proof strip's labels still sat on
   a section divider with zero air. A value being on the scale says nothing
   about whether the right relationship got a value at all.
   ========================================================================= */
:root{
  /* section rhythm */
  --sp-sec-t:var(--sec);            /* section top padding                    */
  --sp-sec-b:var(--sec);            /* section bottom padding                 */
  /* proof strip */
  --sp-hero-proof:var(--s-7);       /* hero copy to proof strip          32   */
  --sp-proof-t:var(--s-7);          /* proof strip top padding           32   */
  --sp-proof-b:var(--s-7);          /* proof strip bottom padding        32   */
  --sp-proof-boundary:var(--s-9);   /* proof strip to section boundary   48   */
  --sp-icon-label:var(--s-2);       /* icon to label                      8   */
  --sp-label-desc:var(--s-1);       /* label to description               4   */
  /* prose rhythm */
  --sp-chip-heading:var(--s-4);     /* chip to heading                   16   */
  --sp-heading-para:var(--s-3);     /* heading to paragraph              12   */
  --sp-para-cta:var(--s-6);         /* paragraph to CTA                  24   */
  /* cards */
  --sp-card-t:var(--s-6);           /* card top padding                  24   */
  --sp-card-b:var(--s-6);           /* card bottom padding               24   */
  --sp-card-x:var(--s-6);           /* card inline padding               24   */
  --sp-card-gap:var(--s-6);         /* card grid gap                     24   */
  --sp-box-outside:var(--s-6);      /* bordered box to adjacent prose    24   */
  /* bands and rails */
  --sp-cta-inner:var(--s-6);        /* CTA inner gap                     24   */
  --sp-foot-group:var(--s-8);       /* footer group gap                  40   */
  --sp-sticky-b:var(--s-8);         /* sticky rail bottom gap            40   */
}
@media (max-width:600px){
  :root{
    --sp-proof-boundary:var(--s-7); /* mobile proof to boundary          32   */
    --sp-sec-gap:var(--s-9);        /* mobile section gap                48   */
    --sp-card-gap:var(--s-5);       /* mobile card gap                   20   */
    --sp-card-t:var(--s-5);
    --sp-card-b:var(--s-5);
    --sp-card-x:var(--s-5);
  }
}

/* ---- proof strip to a section boundary.
   On 6 routes the strip is emitted as a bare `<div class="wrap">` directly
   inside <main> rather than inside a padded <section>, so its last line of text
   ended at exactly the y of the next section's border-top. Measured 0px. This
   is the reported defect: labels visually attached to the divider line. */
main > .wrap > .proof-strip:last-child{padding-bottom:var(--sp-proof-boundary)}
main > .wrap > .proof-strip:first-child{padding-top:var(--sp-proof-t)}

/* ---- label to description inside a proof signal.
   Was 2px, which is off the 4pt scale and read as a single smudged block at
   13px/1.45. */
.proof-strip span{gap:var(--sp-label-desc)}
.proof-strip li{gap:var(--sp-icon-label)}

/* ---- standard-tier card padding.
   .ocard and .pb-board inset their content by 20px, below the 24px the contract
   sets for standard cards. Changed on the family, not the instance. */
.ocard-b{padding:var(--sp-card-x)}
.ocard-fig{padding:var(--sp-card-x) var(--sp-card-x) var(--s-3)}

/* ---- a bordered callout must breathe from the prose around it.
   .art-takeaways has a 1px box and margin-bottom:0, so the paragraph after it
   started at 0px on 32 blog routes. rhythm_audit could not see it: it skips any
   sibling pair where one side has a border, on the reasoning that a border
   reads as air. For a box's own outline that is backwards. */
.art-takeaways{margin-block:var(--sp-box-outside)}
.art-takeaways + *{margin-top:var(--sp-box-outside)}

/* ---- bordered callouts, outside clearance.
   `.sec .wrap > .spec + .note-band{margin-top:24}` gave the note band air only
   when it followed a .spec. After a <p class="lead"> -- two instances on
   /trust/ -- there was no rule at all and margin-top computed to 0, so the
   paragraph sat flush on the band's border. That is the failure this contract
   exists to catch: a relationship that got a value for one adjacency and
   nothing for the rest. The clearance now belongs to the component. */
.note-band,
.art-takeaways,
.form-note{margin-block:var(--sp-box-outside)}
.note-band:first-child,
.art-takeaways:first-child,
.form-note:first-child{margin-top:0}

/* ---- standard-tier card padding, remaining families.
   .form-note on the four legal routes and .pb-board on / and /pricing/ inset
   their content by 20px against a 24px contract. */
.form-note{padding:var(--sp-card-x)}
.pb-col,.pb-head{padding-inline:var(--sp-card-x)}

/* .pb-col resolves to padding-bottom:20px through a later override, so the
   plan column's last feature sat 20px from the board edge against a 24px
   contract. Set both block sides from the token rather than chasing the
   override. */
.pb-col{padding-block:var(--sp-card-t) var(--sp-card-b)}

/* ============================================================================
   CTA REVEAL, ONCE
   The CTA figure's only motion was `figSettle 9s infinite` on its <text>: a
   nine second loop, running forever, triggered by nothing the reader did. It
   was decoration, and a looping figure in a conversion block competes with the
   button next to it.

   The figure now uses the same once-only state the rest of the illustration
   system uses. `.cta-fig` already carries `.art-fig`, so `.b-draw` and
   `.b-mark` inside it are driven by `.art-fig.is-fx` with no new machinery:
   the rollout line draws, then the current stage marks in behind it. The text
   settles once on the same state, staggered, and then stops.
   ========================================================================= */
/* The starting state is scoped to figures that actually contain a motion hook.
   build_motion's observer only registers a figure when it finds .b-fill,
   .b-mark or .b-draw inside it, so a CTA figure without one never receives
   .is-fx -- and an unscoped `opacity:0` left its text invisible for good. That
   shipped for the length of one measurement run on /security/, /tools/ and
   /about/, and it is the exact failure the no-JS rule below exists to prevent.
   Never hide content behind a state that may not arrive. */
html.anim .cta-fig:has(.b-fill,.b-mark,.b-draw) > text{
  opacity:0;transform:translateY(3px);transform-box:fill-box;
  transition:opacity 420ms cubic-bezier(.215,.61,.355,1) var(--fd,0ms),
             transform 420ms cubic-bezier(.215,.61,.355,1) var(--fd,0ms)}
html.anim .cta-fig:has(.b-fill,.b-mark,.b-draw).is-fx > text{opacity:1;transform:none}
html.anim .cta-fig > text:nth-of-type(n+3){--fd:180ms}
html.anim .cta-fig > text:nth-of-type(n+5){--fd:340ms}

/* Gecko below 121 has no :has(). There the selector above never matches, the
   text is never hidden, and the figure simply does not animate -- which is the
   correct way for this to degrade. Stated explicitly so it is not mistaken for
   an oversight. */
@supports not (selector(:has(*))){
  html.anim .cta-fig > text{opacity:1;transform:none;transition:none}
}

/* No JS, no observer, reduced motion: the figure must read at rest in all
   three. Content is never hidden behind a state that may not arrive. */
@media (prefers-reduced-motion:reduce){
  html.anim .cta-fig > text{opacity:1;transform:none;transition:none}
}
html:not(.anim) .cta-fig > text{opacity:1;transform:none}

/* Article code blocks: match .prose pre and scroll inside the column on narrow screens */
.art-body pre{background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--pad-sm);overflow-x:auto;max-width:100%;margin:1.25em 0}
.art-body pre code{background:0;border:0;padding:0;color:var(--ink-2);font-size:13px;line-height:1.6}
