/* ============================================================
   UNITYPAD DESIGN SYSTEM · unitypad.org
   Extracted from approved concept C-hybrid ("Aave blocks").
   White base · tint #f6fafa · ink #0b0d10 dark blocks (radius 38,
   viewport inset) · sky #7CC4FF · seafoam #7FE3BB · Hanken Grotesk
   · pill buttons · hairlines · expo-out motion cubic-bezier(.16,1,.3,1)
   · tabular-nums on every figure · no kickers · no icon-card grids
   · no glassmorphism on flat surfaces · max ONE gradient-text
   signature element per page · no em dashes anywhere.

   RING LOGOMARK (inline SVG snippet · encodes the 25/75 split):
   Use currentColor for the 25% arc so it adapts to context
   (ink on light, #fff on dark). Gradient id must be unique per
   instance on a page (lgn, lgf, lgb, ...).

   <svg class="mark" viewBox="0 0 36 36" aria-hidden="true">
     <defs><linearGradient id="lgn" x1="0" y1="0" x2="1" y2="1">
       <stop offset="0" stop-color="#7cc4ff"/>
       <stop offset="1" stop-color="#7fe3bb"/>
     </linearGradient></defs>
     <circle cx="18" cy="18" r="12" fill="none" stroke="url(#lgn)"
       stroke-width="7" stroke-linecap="round"
       stroke-dasharray="52.5 22.9" transform="rotate(-97 18 18)"/>
     <circle cx="18" cy="18" r="12" fill="none" stroke="currentColor"
       stroke-width="7" stroke-linecap="round"
       stroke-dasharray="14.4 61" stroke-dashoffset="-56.5"
       transform="rotate(-97 18 18)"/>
   </svg>
   ============================================================ */

/* ============ TOKENS ============ */
:root{
  /* color */
  --paper:#ffffff;
  --paper-2:#f6fafa;
  --ink:#0b0d10;
  --ink-2:#14171c;
  --mut:#5b6672;
  --mut-d:#9aa4af;
  --sky:#7cc4ff;
  --sky-soft:#d9edff;
  --foam:#7fe3bb;
  --foam-soft:#dcf6ea;
  --pos:#17b877;
  --pos-deep:#0d7a4f;
  --line:rgba(11,13,16,.09);
  --line-d:rgba(255,255,255,.12);
  --glass-l:rgba(255,255,255,.66);
  --grad:linear-gradient(120deg,var(--sky),var(--foam));

  /* radii */
  --r-block:38px;
  --r-card:24px;
  --r-app:20px;
  --r-pill:999px;

  /* layout + rhythm */
  --wrap:1200px;
  --gut:32px;
  --block-inset-y:14px;
  --block-inset-x:12px;
  --sp-sec:clamp(110px,13vw,170px);   /* default section */
  --sp-sec-lg:clamp(120px,14vw,190px);/* statement blocks */
  --sp-sec-sm:clamp(84px,10vw,124px); /* connected/quiet blocks */

  /* type scale (mobile-first clamps) */
  --fs-h1:clamp(2.9rem,7vw,6.2rem);          /* single-line display */
  --fs-h1-statement:clamp(1.9rem,3.4vw + 1rem,3.6rem); /* multi-line hero statement */
  --fs-h2:clamp(2.5rem,4.6vw,3.875rem);
  --fs-h3:1.32rem;
  --fs-lede:clamp(1.05rem,1.5vw,1.28rem);
  --fs-body:17px;

  /* motion */
  --ease:cubic-bezier(.16,1,.3,1); /* expo-out everywhere */
  --t-fast:.22s;
  --t-rv:.65s;
}

/* ============ RESET / BASE ============ */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{
  font-family:'Hanken Grotesk',system-ui,-apple-system,sans-serif;
  background:var(--paper);
  color:var(--ink);
  font-size:var(--fs-body);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
body.no-scroll{overflow:hidden}
a{color:inherit;text-decoration:none}
button{font-family:inherit;color:inherit}
img,svg,video{display:block;max-width:100%}
ul[role="list"],ol[role="list"]{list-style:none}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--gut)}
@media(max-width:640px){.wrap{padding:0 20px}}
::selection{background:var(--foam);color:var(--ink)}

.skip-link{
  position:absolute;left:16px;top:-60px;z-index:300;
  padding:10px 18px;border-radius:var(--r-pill);
  background:var(--ink);color:#fff;font-weight:600;font-size:.92rem;
  transition:top .2s var(--ease);
}
.skip-link:focus{top:16px}

:is(a,button):focus-visible{outline:2px solid var(--sky);outline-offset:3px;border-radius:6px}
.btn:focus-visible{border-radius:var(--r-pill)}

/* ============ TYPE ============ */
h1,h2,h3{font-weight:600;letter-spacing:-.03em;line-height:1.04;text-wrap:balance}
.h1{font-size:var(--fs-h1);letter-spacing:-.04em;line-height:1.01}
.h1-statement{font-size:var(--fs-h1-statement);letter-spacing:-.032em;line-height:1.14}
.h1-statement>span{display:block}
.h2{font-size:var(--fs-h2);letter-spacing:-.03em;line-height:1.06}
.h3{font-size:var(--fs-h3);letter-spacing:-.015em;line-height:1.25}
.lede{font-size:var(--fs-lede);color:var(--mut);max-width:54ch;line-height:1.65;font-weight:400}
.dark .lede{color:var(--mut-d);line-height:1.7}
.sf{color:var(--foam);font-variant-numeric:tabular-nums}
.num,.tnum{font-variant-numeric:tabular-nums}
/* the ONE allowed gradient-text signature element per page */
.grad-text{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}

/* ============ PILL BUTTONS ============ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  padding:14px 26px;border-radius:var(--r-pill);
  font-family:inherit;font-size:1rem;font-weight:600;letter-spacing:-.01em;
  border:1px solid transparent;cursor:pointer;white-space:nowrap;
  transition:transform var(--t-fast) var(--ease),background-color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease);
}
.btn:hover{transform:translateY(-2px)}
.btn:active{transform:translateY(0)}
.btn-ink{background:var(--ink);color:#fff;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}
.btn-ink:hover{background:#161a20}
.btn-ghost{background:transparent;color:var(--ink);border-color:rgba(11,13,16,.18)}
.btn-ghost:hover{border-color:rgba(11,13,16,.42);background:rgba(11,13,16,.03)}
.btn-white{background:#fff;color:var(--ink);box-shadow:inset 0 0 0 1px rgba(11,13,16,.05)}
.btn-white:hover{background:#f0f6f3}
.btn-glass{background:transparent;color:#f2f5f7;border-color:rgba(255,255,255,.22)}
.btn-glass:hover{border-color:rgba(255,255,255,.45);background:rgba(255,255,255,.05)}
.btn-sm{padding:10px 20px;font-size:.92rem}
.arrow{transition:transform var(--t-fast) var(--ease)}
.btn:hover .arrow{transform:translateX(3px)}
.cta-row{display:flex;gap:12px;flex-wrap:wrap}
.cta-row.center{justify-content:center}

/* quiet inline text links */
.tlink{font-weight:600;display:inline-flex;align-items:center;gap:6px;transition:color .2s}
.tlink:hover{color:var(--pos-deep)}
.dark .tlink{color:#fff}
.dark .tlink:hover{color:var(--foam)}

/* ============ CHIPS / TAGS / DOTS ============ */
.chip{
  display:inline-flex;align-items:center;gap:7px;
  padding:7px 13px;border-radius:var(--r-pill);
  font-size:.82rem;font-weight:600;color:var(--mut);
  background:rgba(11,13,16,.045);border:1px solid var(--line);
  white-space:nowrap;
}
.dark .chip{background:rgba(255,255,255,.055);border-color:var(--line-d);color:var(--mut-d)}
.dot{width:7px;height:7px;border-radius:50%;background:var(--pos);flex:none}
.dot.pulse{animation:pulse 2.4s ease-in-out infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(23,184,119,.45)}50%{box-shadow:0 0 0 5px rgba(23,184,119,0)}}
@media(prefers-reduced-motion:reduce){.dot.pulse{animation:none}}
.tag{
  font-size:.78rem;font-weight:700;letter-spacing:.02em;
  padding:6px 12px;border-radius:var(--r-pill);
  background:rgba(11,13,16,.06);color:var(--mut);
}
.tag.live{background:rgba(23,184,119,.12);color:var(--pos-deep);display:inline-flex;align-items:center;gap:6px}
.dark .tag{background:rgba(255,255,255,.08);color:var(--mut-d)}
.dark .tag.live{background:rgba(23,184,119,.16);color:var(--foam)}
.pb-chip{
  display:inline-flex;align-items:center;gap:7px;
  padding:6px 12px;border-radius:var(--r-pill);
  font-size:.78rem;font-weight:600;color:var(--mut);
  background:rgba(255,255,255,.8);border:1px solid var(--line);
}
.pb-chip .mark{width:14px;height:14px}

/* ============ HAIRLINE FACT ROWS ============ */
.factrow{display:flex;flex-wrap:wrap;row-gap:18px}
.factrow>div{padding:2px 26px;border-left:1px solid var(--line)}
.factrow>div:first-child{border-left:0;padding-left:0}
.factrow b{display:block;font-size:1.3rem;font-weight:600;letter-spacing:-.02em;line-height:1.2;font-variant-numeric:tabular-nums;white-space:nowrap}
.factrow b a:hover{color:var(--pos-deep)}
.factrow span{display:block;font-size:12.5px;font-weight:500;color:var(--mut);margin-top:3px}
.factrow b span{display:inline;font-size:inherit;font-weight:inherit;color:inherit;margin:0}
.factrow .pos{color:var(--pos)}
.factrow b span.pos{color:var(--pos)}
.dark .factrow>div{border-color:var(--line-d)}
.dark .factrow b{color:#fff}
.dark .factrow span{color:var(--mut-d)}
.dark .factrow b a:hover{color:var(--foam)}
.factrow.lg{justify-content:center;margin-top:76px}
.factrow.lg>div{padding:4px 38px}
.factrow.lg b{font-size:clamp(1.6rem,2.6vw,2.1rem)}
@media(max-width:640px){
  .factrow>div{padding:2px 18px}
  .factrow.lg{margin-top:56px}
  .factrow.lg>div{padding:4px 18px}
}

/* ============ HAIRLINE DEFINITION ROWS ============ */
.rows{max-width:820px}
.row{display:grid;grid-template-columns:230px 1fr;gap:28px;padding:26px 0;border-top:1px solid var(--line)}
.row:last-child{border-bottom:1px solid var(--line)}
.row b{font-size:1.18rem;font-weight:600;letter-spacing:-.015em;line-height:1.3}
.row p{color:var(--mut);font-size:1rem;max-width:52ch}
.dark .row{border-color:var(--line-d)}
.dark .row:last-child{border-color:var(--line-d)}
.dark .row b{color:#fff}
.dark .row p{color:var(--mut-d)}
@media(max-width:640px){.row{grid-template-columns:1fr;gap:6px;padding:22px 0}}

/* numbered hairline steps (no icon cards) */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:0 44px;margin-top:56px}
.step-item{padding:26px 0 8px;border-top:1px solid var(--line)}
.step-item .n{
  display:block;font-size:13px;font-weight:600;color:var(--mut);
  font-variant-numeric:tabular-nums;margin-bottom:14px;
}
.step-item b{display:block;font-size:1.18rem;font-weight:600;letter-spacing:-.015em;margin-bottom:8px}
.step-item p{font-size:.98rem;color:var(--mut);max-width:34ch}
.dark .step-item{border-color:var(--line-d)}
.dark .step-item b{color:#fff}
.dark .step-item p,.dark .step-item .n{color:var(--mut-d)}
@media(max-width:820px){.steps{grid-template-columns:1fr;gap:0}}

/* ============ CARDS ============ */
.card{
  border-radius:var(--r-card);
  border:1px solid var(--line);
  background:#fff;
  padding:34px;
  position:relative;overflow:clip;
  transition:transform var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease);
}
.card:hover{transform:translateY(-2px);border-color:rgba(11,13,16,.2)}
.dark .card{background:rgba(255,255,255,.045);border-color:var(--line-d)}
.dark .card:hover{border-color:rgba(255,255,255,.26)}
.card.quiet{background:var(--paper-2)}
.card.quiet:hover{transform:none}
@media(max-width:640px){.card{padding:26px}}

/* ============ SECTIONS / BLOCKS ============ */
/* deliberate rhythm: vary --sp via .sec-lg / .sec-sm per block */
.sec{padding:var(--sp-sec) 0}
.sec-lg{padding:var(--sp-sec-lg) 0}
.sec-sm{padding:var(--sp-sec-sm) 0}
.block{
  margin:var(--block-inset-y) var(--block-inset-x);
  border-radius:var(--r-block);
  overflow:clip;
  position:relative;
}
.block.dark{background:var(--ink);color:#f2f5f7}
.block.tint{background:var(--paper-2);border:1px solid var(--line)}
@media(max-width:640px){
  .block{margin:10px 8px;border-radius:26px}
  .sec{padding:76px 0}
  .sec-lg{padding:88px 0}
  .sec-sm{padding:72px 0}
}
.dark-wash{
  position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(46% 34% at 18% 0%,rgba(124,196,255,.10) 0%,rgba(124,196,255,0) 70%),
    radial-gradient(44% 32% at 84% 100%,rgba(127,227,187,.08) 0%,rgba(127,227,187,0) 70%);
}
.sec-head{max-width:760px}
.sec-head .lede{margin-top:20px}

/* ============ REVEAL ON SCROLL ============ */
/* No-JS-visible pattern: hiding requires html.js, set by an inline
   <script>document.documentElement.classList.add('js')</script> in <head>.
   site.js adds .in via IntersectionObserver + anchor-jump guard + 350ms safety. */
html.js .rv{opacity:0;transform:translateY(14px)}
html.js .rv.in{opacity:1;transform:none;transition:opacity var(--t-rv) var(--ease),transform var(--t-rv) var(--ease)}
html.js .rv.d1.in{transition-delay:.08s}
html.js .rv.d2.in{transition-delay:.16s}
@media(prefers-reduced-motion:reduce){
  html.js .rv{opacity:1;transform:none}
}

/* ============ NAV (floating glass pill) ============ */
.nav{
  position:fixed;top:16px;left:50%;transform:translateX(-50%);
  width:min(calc(100% - 24px),1240px);z-index:100;
  display:flex;align-items:center;gap:10px;
  padding:10px 12px 10px 20px;border-radius:var(--r-pill);
  background:var(--glass-l);
  backdrop-filter:blur(18px) saturate(1.4);-webkit-backdrop-filter:blur(18px) saturate(1.4);
  border:1px solid var(--line);
  box-shadow:0 8px 40px -16px rgba(11,13,16,.14);
}
.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:1.12rem;letter-spacing:-.02em;color:var(--ink)}
.brand .mark{width:26px;height:26px}
.nav-links{display:flex;gap:2px;margin-left:8px;list-style:none;align-items:center}
.nav-item{position:relative;display:flex;align-items:center}
.nav-link{
  padding:8px 6px 8px 14px;border-radius:var(--r-pill);
  font-size:.95rem;font-weight:500;color:var(--mut);
  transition:color .2s,background-color .2s;
}
.nav-item>.nav-link:only-child{padding-right:14px}
.nav-link:hover{color:var(--ink)}
.nav-item:hover>.nav-link,.nav-item.open>.nav-link{color:var(--ink)}
.mega-toggle{
  display:inline-flex;align-items:center;justify-content:center;
  width:22px;height:26px;margin-right:6px;
  background:transparent;border:0;cursor:pointer;border-radius:var(--r-pill);
  color:var(--mut);
}
.mega-toggle svg{width:10px;height:10px;transition:transform var(--t-fast) var(--ease)}
.nav-item.open .mega-toggle svg{transform:rotate(180deg)}
.nav-item.open .mega-toggle,.mega-toggle:hover{color:var(--ink)}
.nav-cta{margin-left:10px}
.nav-dapp{margin-left:auto}

/* megamenu panel */
.mega{
  position:absolute;top:calc(100% + 16px);left:50%;
  transform:translateX(-50%) translateY(6px);
  width:max-content;min-width:284px;max-width:340px;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-app);
  padding:10px;z-index:110;
  box-shadow:0 30px 80px -30px rgba(11,13,16,.28);
  opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity var(--t-fast) var(--ease),transform var(--t-fast) var(--ease),visibility 0s linear var(--t-fast);
}
.nav-item.open>.mega,
html:not(.js) .nav-item:hover>.mega,
html:not(.js) .nav-item:focus-within>.mega{
  opacity:1;visibility:visible;pointer-events:auto;
  transform:translateX(-50%) translateY(0);
  transition:opacity var(--t-fast) var(--ease),transform var(--t-fast) var(--ease),visibility 0s;
}
.mega-link{display:block;padding:11px 14px;border-radius:12px;transition:background-color .18s}
.mega-link:hover{background:var(--paper-2)}
.mega-link b{display:block;font-size:.95rem;font-weight:600;letter-spacing:-.01em}
.mega-link span{display:block;font-size:.84rem;color:var(--mut);line-height:1.45;margin-top:2px}

/* burger (mobile) */
.nav-burger{
  display:none;align-items:center;justify-content:center;
  width:42px;height:42px;border-radius:var(--r-pill);
  background:transparent;border:1px solid var(--line);cursor:pointer;
  flex:none;
}
.nav-burger svg{width:17px;height:17px}
.nav-burger .x{display:none}
.nav-burger[aria-expanded="true"] .bars{display:none}
.nav-burger[aria-expanded="true"] .x{display:block}
@media(max-width:1019px){
  .nav-links{display:none}
  .nav-burger{display:inline-flex}
  .nav{padding:9px 10px 9px 16px;gap:8px}
  .nav-cta{margin-left:8px}
  .nav-dapp{margin-left:auto}
}
@media(max-width:640px){
  .nav-dapp{display:none}
}
@media(max-width:390px){
  .nav-cta{padding:10px 14px;font-size:.88rem}
}

/* mobile drawer */
.drawer{
  position:fixed;inset:0;z-index:200;
  background:var(--paper);
  display:flex;flex-direction:column;
  padding:14px 20px 28px;
  overflow-y:auto;
  opacity:0;transform:translateY(-8px);
  transition:opacity .28s var(--ease),transform .28s var(--ease);
}
.drawer.open{opacity:1;transform:none}
.drawer[hidden]{display:none}
.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:6px 0 18px}
.drawer-close{
  width:42px;height:42px;border-radius:var(--r-pill);
  background:transparent;border:1px solid var(--line);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
}
.drawer-close svg{width:15px;height:15px}
.drawer-group{border-top:1px solid var(--line)}
.drawer-group:last-of-type{border-bottom:1px solid var(--line)}
.drawer-group>summary{
  list-style:none;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;
  padding:18px 2px;font-size:1.25rem;font-weight:600;letter-spacing:-.02em;
}
.drawer-group>summary::-webkit-details-marker{display:none}
.drawer-group>summary svg{width:12px;height:12px;color:var(--mut);transition:transform var(--t-fast) var(--ease)}
.drawer-group[open]>summary svg{transform:rotate(180deg)}
.drawer-sub{padding:0 2px 16px}
.drawer-sub a{display:block;padding:9px 0;font-size:1rem;color:var(--mut)}
.drawer-sub a b{color:var(--ink);font-weight:600}
.drawer-sub a span{display:block;font-size:.86rem;line-height:1.45}
.drawer-cta{margin-top:24px;display:grid;gap:10px}
@media(prefers-reduced-motion:reduce){.drawer{transition:none}}

/* ============ HERO ============ */
.hero{
  position:relative;
  padding:172px 0 clamp(72px,9vw,110px);
  overflow:clip;
  background:var(--paper);
}
.hero-wash{
  position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(52% 44% at 26% 22%,var(--sky-soft) 0%,rgba(217,237,255,0) 70%),
    radial-gradient(50% 42% at 76% 30%,var(--foam-soft) 0%,rgba(220,246,234,0) 70%),
    radial-gradient(60% 46% at 50% 96%,#eef7f3 0%,rgba(238,247,243,0) 72%);
}
html.js .hero-wash{animation:wash 26s ease-in-out infinite alternate}
@keyframes wash{
  0%{transform:translate3d(0,0,0) scale(1)}
  100%{transform:translate3d(0,-26px,0) scale(1.06)}
}
@media(prefers-reduced-motion:reduce){html.js .hero-wash{animation:none}}
.hero-inner{position:relative;text-align:center;display:flex;flex-direction:column;align-items:center}
.eyebrow{
  display:inline-flex;align-items:center;gap:8px;
  padding:7px 14px;border-radius:var(--r-pill);
  background:rgba(255,255,255,.72);border:1px solid var(--line);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  font-size:.8rem;font-weight:600;color:var(--ink);
  margin-bottom:28px;
}
.eyebrow em{font-style:normal;color:var(--mut);font-weight:500}
.hero .h1,.hero .h1-statement{max-width:24ch;margin:0 auto 26px}
.hero .lede{margin:0 auto 38px;max-width:52ch}
.hero .cta-row{justify-content:center;margin-bottom:56px}
.hero-media{position:relative;margin:46px auto -6px;width:min(560px,86%)}
.hero-media::after{
  content:"";position:absolute;left:50%;bottom:-30px;transform:translateX(-50%);
  width:76%;height:64px;pointer-events:none;
  background:radial-gradient(50% 50% at 50% 50%,rgba(11,13,16,.14),rgba(11,13,16,0) 72%);
}
.hero-media video{width:100%;height:auto;mix-blend-mode:multiply;animation:hfFloat 9s ease-in-out infinite alternate}
@keyframes hfFloat{from{transform:translateY(-6px)}to{transform:translateY(6px)}}
@media(prefers-reduced-motion:reduce){.hero-media video{animation:none}}
.hero .factrow{justify-content:center;margin-top:64px}
@media(max-width:640px){.hero{padding:150px 0 64px}}

/* ============ EDGE-BLEED RENDERS ============ */
.bleed-right{
  position:absolute;top:50%;right:calc((100% - 100vw)/2 - 6vw);
  transform:translateY(-50%);
  width:min(720px,58vw);opacity:.5;
  mix-blend-mode:lighten;pointer-events:none;z-index:0;
}
.bleed-right img{width:100%;height:auto}
.tint .bleed-right,.bleed-right.multiply{mix-blend-mode:multiply;opacity:.9}
.bleed-right.solid{mix-blend-mode:normal;opacity:.85}
.bleed-right.solid img{border-radius:24px}
@media(max-width:960px){.bleed-right{display:none}}
.z1{position:relative;z-index:1}

/* ============ DISTRIBUTION STRIP (10/65/20/5) ============ */
.dist{margin-top:56px;max-width:900px}
.dist-bar{display:flex;height:56px;border-radius:16px;overflow:hidden;border:1px solid var(--line)}
.dist-seg{
  display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:.98rem;letter-spacing:-.01em;
  font-variant-numeric:tabular-nums;min-width:0;
}
.dist-seg.s10{flex:10;background:var(--sky-soft);color:#1d4d75}
.dist-seg.s65{flex:65;background:var(--ink);color:#fff;position:relative}
.dist-seg.s20{flex:20;background:var(--foam-soft);color:var(--pos-deep)}
.dist-seg.s5{flex:5;background:rgba(11,13,16,.06);color:var(--mut)}
.dist-legend{margin-top:8px}
.dist-legend .row{grid-template-columns:150px 1fr;padding:18px 0}
.dist-legend .row b{font-size:1.05rem;font-variant-numeric:tabular-nums}
@media(max-width:640px){
  .dist-bar{height:46px}
  .dist-seg{font-size:.85rem}
  .dist-seg.s5{font-size:0}
  .dist-legend .row{grid-template-columns:1fr}
}

/* ============ NAME WALL (text, no logo boxes) ============ */
.wall{display:flex;flex-wrap:wrap;gap:14px 0;margin-top:48px;max-width:980px}
.wall span{
  font-size:clamp(1.05rem,1.6vw,1.3rem);font-weight:600;letter-spacing:-.015em;
  color:var(--mut);padding:2px 22px;border-left:1px solid var(--line);
  white-space:nowrap;
}
.wall span:first-child{border-left:0;padding-left:0}
.wall .more{color:var(--ink)}
@media(max-width:640px){.wall span{padding:2px 14px;font-size:1rem}}

/* ============ VENTURE SHOWCASE ============ */
.v-grid{display:grid;grid-template-columns:2fr 1fr;gap:18px;margin-top:64px}
@media(max-width:900px){.v-grid{grid-template-columns:1fr}}
.v-hero-card{
  background:
    radial-gradient(120% 90% at 100% 0%,var(--foam-soft) 0%,rgba(220,246,234,0) 55%),
    radial-gradient(110% 90% at 0% 100%,var(--sky-soft) 0%,rgba(217,237,255,0) 55%),
    #fff;
  display:flex;flex-direction:column;min-height:520px;padding:40px;
  color:var(--ink);
}
/* keep the venture showcase card LIGHT even inside a dark block
   (must out-rank the .dark .card override above) */
.dark .v-hero-card{
  background:
    radial-gradient(120% 90% at 100% 0%,var(--foam-soft) 0%,rgba(220,246,234,0) 55%),
    radial-gradient(110% 90% at 0% 100%,var(--sky-soft) 0%,rgba(217,237,255,0) 55%),
    #fff;
  border-color:rgba(255,255,255,.16);
}
.dark .v-hero-card:hover{border-color:rgba(255,255,255,.3)}
.dark .v-hero-card .v-desc,.dark .v-hero-card .oven-row p{color:var(--mut)}
.dark .v-hero-card .tag{background:rgba(11,13,16,.06);color:var(--mut)}
.dark .v-hero-card .tag.live{background:rgba(23,184,119,.12);color:var(--pos-deep)}
.dark .v-hero-card .not-a-raise{background:rgba(11,13,16,.04);border-color:var(--line);color:var(--mut)}
@media(max-width:640px){.v-hero-card{padding:30px;min-height:0}}
.v-top{display:flex;align-items:center;gap:10px;margin-bottom:28px;flex-wrap:wrap}
.v-name{font-size:clamp(2rem,3.4vw,2.9rem);font-weight:700;letter-spacing:-.03em;line-height:1;margin-bottom:10px}
.v-tagline{font-size:1.16rem;font-weight:600;letter-spacing:-.015em;margin-bottom:12px;color:var(--ink)}
.v-desc{color:var(--mut);max-width:46ch;margin-bottom:30px}
.v-visual{margin:auto auto 34px;width:100%;height:auto;border-radius:18px;display:block}
.dark .v-hero-card .factrow>div{border-color:var(--line)}
.dark .v-hero-card .factrow b{color:var(--ink)}
.dark .v-hero-card .factrow span{color:var(--mut)}
.oven{background:var(--paper-2);display:flex;flex-direction:column;padding:30px 30px 12px;border-radius:var(--r-card);border:1px solid var(--line)}
.dark .oven{background:rgba(255,255,255,.045);border-color:var(--line-d)}
.oven-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:18px}
.dark .oven-head .h3{color:#fff}
.oven-row{display:grid;grid-template-columns:32px 1fr;gap:14px;padding:20px 0 22px;border-top:1px solid var(--line)}
.dark .oven-row{border-color:var(--line-d)}
.oven-row:last-child{flex:1}
.oven-row .num{font-size:13px;font-weight:600;color:var(--mut);font-variant-numeric:tabular-nums;margin-top:3px}
.oven-row b{display:block;font-size:15.5px;font-weight:600;letter-spacing:-.01em;margin-bottom:4px}
.oven-row p{font-size:14px;color:var(--mut);line-height:1.55;max-width:34ch}
.dark .oven-row .num,.dark .oven-row p{color:var(--mut-d)}
.dark .oven-row b{color:#fff}
.not-a-raise{
  margin-top:22px;padding:14px 18px;border-radius:14px;
  background:rgba(11,13,16,.04);border:1px solid var(--line);
  font-size:.9rem;font-weight:600;color:var(--mut);
}
.dark .not-a-raise{background:rgba(255,255,255,.055);border-color:var(--line-d);color:var(--mut-d)}

/* ============ CONTRACT ROW ============ */
.contract{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  margin-top:44px;padding:18px 22px;
  border:1px solid var(--line);border-radius:18px;background:#fff;
}
.dark .contract{background:rgba(255,255,255,.045);border-color:var(--line-d)}
.contract code{
  font-family:ui-monospace,'SF Mono',Menlo,monospace;
  font-size:clamp(.72rem,1.6vw,.95rem);letter-spacing:-.01em;
  color:var(--ink);word-break:break-all;
}
.dark .contract code{color:#fff}
.copy-btn{
  display:inline-flex;align-items:center;gap:7px;
  padding:9px 16px;border-radius:var(--r-pill);
  background:var(--ink);color:#fff;border:0;cursor:pointer;
  font-size:.85rem;font-weight:600;
  transition:background-color .2s,transform var(--t-fast) var(--ease);
}
.copy-btn:hover{transform:translateY(-1px)}
.copy-btn.copied{background:var(--pos-deep)}
.dark .copy-btn{background:#fff;color:var(--ink)}

/* ============ FAQ ============ */
.faq{margin-top:56px;max-width:820px}
.faq details{border-top:1px solid var(--line)}
.faq details:last-child{border-bottom:1px solid var(--line)}
.faq summary{
  list-style:none;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:24px 2px;font-size:1.18rem;font-weight:600;letter-spacing:-.015em;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary svg{width:13px;height:13px;flex:none;color:var(--mut);transition:transform var(--t-fast) var(--ease)}
.faq details[open] summary svg{transform:rotate(45deg)}
.faq .a{padding:0 2px 26px;color:var(--mut);max-width:64ch}
.faq .a a{font-weight:600;color:var(--ink)}
.faq .a a:hover{color:var(--pos-deep)}

/* ============ FINAL CTA ============ */
.cta-sec{text-align:center}
.cta-sec .h2{
  max-width:22ch;margin:0 auto 28px;
  font-size:clamp(3rem,6.4vw,5.4rem);
  letter-spacing:-.04em;line-height:1.02;
  font-variant-numeric:tabular-nums;
}
.cta-sec .lede{margin:0 auto 44px}
@media(max-width:640px){.cta-sec .h2{font-size:clamp(2.4rem,11vw,3.2rem)}.cta-sec .h2 br{display:none}}

/* ============ FOOTER ============ */
.site-foot{padding:clamp(96px,11vw,150px) 0 48px;border-top:1px solid var(--line)}
.f-top{display:grid;grid-template-columns:minmax(260px,340px) 1fr;gap:56px;margin-bottom:64px}
@media(max-width:900px){.f-top{grid-template-columns:1fr;gap:44px}}
.f-brand p{font-size:.95rem;color:var(--mut);margin-top:16px}
.pb-badge{
  display:inline-flex;align-items:center;gap:9px;
  padding:9px 18px;border-radius:var(--r-pill);
  background:var(--ink);color:#fff;
  font-size:.84rem;font-weight:600;
  margin-top:20px;
}
.pb-badge .mark{width:16px;height:16px}
.f-cols{display:grid;grid-template-columns:repeat(4,1fr);gap:32px}
@media(max-width:760px){.f-cols{grid-template-columns:1fr 1fr;gap:40px 24px}}
@media(max-width:420px){.f-cols{grid-template-columns:1fr}}
.f-col b{display:block;font-size:13px;font-weight:700;letter-spacing:.02em;margin-bottom:14px}
.f-col a{display:block;font-size:.92rem;color:var(--mut);padding:5px 0;transition:color .2s}
.f-col a:hover{color:var(--ink)}
.f-col .f-demoted{font-size:.86rem}
.f-legal{max-width:78ch;font-size:.82rem;color:var(--mut);margin-bottom:24px;line-height:1.65}
.f-bottom{
  border-top:1px solid var(--line);padding-top:28px;
  display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;
  font-size:.84rem;color:var(--mut);
}

/* ============ UTILITIES ============ */
.mt-0{margin-top:0}.mt-20{margin-top:20px}.mt-36{margin-top:36px}
.mt-44{margin-top:44px}.mt-56{margin-top:56px}.mt-64{margin-top:64px}
.center{text-align:center}
.maxw-52{max-width:52ch}
.white{color:#fff}

/* ================================================================
   ================================================================
   MOTION · shared motion-library component styles (motion.js)
   Everything below pairs with /assets/js/motion.js. Rules:
   transform / opacity / stroke-dash only; expo-out var(--ease);
   reduced-motion always resolves to a legible final frame; no-JS
   (html without .js) always renders complete content.
   ================================================================
   ================================================================ */

/* ---------- M1 · count-up [data-countup] ---------- */
[data-countup]{font-variant-numeric:tabular-nums}

/* ---------- M3 · particle flow band ---------- */
/* Place inside a .block.dark:
   <div class="flow-stage" aria-hidden="true">
     <canvas data-flow="ink"></canvas>
     <svg class="flow-static">…final frame…</svg>
     <span class="flow-label fl-in"><span class="tick"></span>Venture revenue</span>
     <span class="flow-label fl-split">1 in 4 diverts to the pad</span>
     <span class="flow-label fl-team">75% stays with teams<span class="tick"></span></span>
     <span class="flow-label fl-pool">the ecosystem pool</span>
   </div>                                                          */
.flow-stage{
  position:relative;
  height:min(52vh,520px);min-height:340px;
  pointer-events:none;
}
canvas[data-flow]{position:absolute;inset:0;width:100%;height:100%}
.flow-static{display:none;position:absolute;inset:0;width:100%;height:100%}
html:not(.js) canvas[data-flow]{display:none}
html:not(.js) .flow-static{display:block}
@media(prefers-reduced-motion:reduce){
  canvas[data-flow]{display:none}
  .flow-static{display:block}
}
.flow-label{
  position:absolute;font-size:.78rem;color:var(--mut-d);letter-spacing:.02em;
  display:flex;align-items:center;gap:7px;white-space:nowrap;
}
.flow-label .tick{width:22px;height:1px;background:linear-gradient(90deg,transparent,rgba(154,164,175,.6))}
.fl-in{left:4%;top:31%}
.fl-split{left:52.5%;top:54%;transform:translateX(-50%)}
.fl-team{right:3.5%;top:27%}
.fl-pool{
  left:74%;top:60%;transform:translate(-50%,-50%);
  padding:8px 16px;border-radius:var(--r-pill);
  background:rgba(127,227,187,.08);
  border:1px solid rgba(127,227,187,.28);
  color:#dcf6ea;font-size:.82rem;font-weight:600;letter-spacing:.01em;
  box-shadow:0 0 34px rgba(127,227,187,.18);
}
@media(max-width:760px){
  .flow-stage{min-height:280px}
  .fl-split,.fl-team{display:none}
  .fl-in{top:24%}
}

/* ---------- M4 · word reveal [data-word-reveal] ---------- */
/* <div class="seq" data-word-reveal>
     <div class="seq-sticky"><div class="seq-inner wrap">
       <p class="rwline"><span class="rw hl sky tnum">25</span> …</p>
       <p class="seq-cap">…</p>
     </div></div>
   </div>
   Sticky runway 240vh (the ONE sticky sequence per page).       */
html.js [data-word-reveal]{height:240vh}
html.js [data-word-reveal] .seq-sticky{position:sticky;top:0;min-height:100vh;display:flex;align-items:center}
[data-word-reveal] .seq-sticky{padding:80px 0}
.seq-inner{text-align:center;width:100%}
.rwline{
  font-size:clamp(2.5rem,6.4vw,5.4rem);
  font-weight:600;letter-spacing:-.032em;line-height:1.06;
  font-variant-numeric:tabular-nums;color:#fff;
}
.rw{display:inline-block}
html.js .rw{opacity:.13}
/* highlight words: solid accents (the page's single gradient-text
   signature stays reserved for the hero) */
.rw.hl{color:var(--foam)}
.rw.hl.sky{color:var(--sky)}
.seq-cap{margin-top:34px;color:var(--mut-d);font-size:1.05rem;max-width:52ch;margin-left:auto;margin-right:auto}
@media(prefers-reduced-motion:reduce){
  html.js [data-word-reveal]{height:auto}
  html.js [data-word-reveal] .seq-sticky{position:static;min-height:0}
  html.js .rw{opacity:1 !important}
}

/* ---------- M5 · marquee [data-marquee] ---------- */
/* <div class="marquee" data-marquee data-speed="55" aria-label="…">
     <div class="marquee-row"><span>Name</span>…</div>
   </div>
   No-JS + reduced motion: the row wraps as a static name wall.  */
[data-marquee]{position:relative;overflow:hidden}
[data-marquee] .marquee-row{display:flex;flex-wrap:wrap;gap:14px 0}
[data-marquee] .marquee-row>*{
  font-size:clamp(1.05rem,1.6vw,1.3rem);font-weight:600;letter-spacing:-.015em;
  color:var(--mut);padding:2px 26px;border-left:1px solid var(--line);
  white-space:nowrap;
}
.dark [data-marquee] .marquee-row>*{color:var(--mut-d);border-color:var(--line-d)}
[data-marquee] .marquee-row a{color:var(--ink)}
[data-marquee] .marquee-row a:hover{color:var(--pos-deep)}
.dark [data-marquee] .marquee-row a{color:#fff}
.mq-on .marquee-track{
  display:flex;width:max-content;
  animation:mq-scroll var(--mq-dur,40s) linear infinite;
  will-change:transform;
}
.mq-on .marquee-row{flex-wrap:nowrap;flex:none}
@keyframes mq-scroll{to{transform:translateX(-50%)}}
.mq-on:hover .marquee-track,
.mq-off .marquee-track,
.mq-hidden .marquee-track{animation-play-state:paused}
/* soft edge fades while looping */
.mq-on::before,.mq-on::after{
  content:"";position:absolute;top:0;bottom:0;width:72px;z-index:1;pointer-events:none;
}
.mq-on::before{left:0;background:linear-gradient(90deg,var(--paper),rgba(255,255,255,0))}
.mq-on::after{right:0;background:linear-gradient(270deg,var(--paper),rgba(255,255,255,0))}
.dark .mq-on::before{background:linear-gradient(90deg,var(--ink),rgba(11,13,16,0))}
.dark .mq-on::after{background:linear-gradient(270deg,var(--ink),rgba(11,13,16,0))}
.tint .mq-on::before{background:linear-gradient(90deg,var(--paper-2),rgba(246,250,250,0))}
.tint .mq-on::after{background:linear-gradient(270deg,var(--paper-2),rgba(246,250,250,0))}
@media(prefers-reduced-motion:reduce){.marquee-track{animation:none}}

/* ---------- M6 · split bar [data-split-bar] ---------- */
/* The 25/75 explainer, scrubbed by scrolling via --p (0..1):
   phase 1 (--p1)  bar fills left to right as "venture revenue"
   phase 2 (--p2)  the 25 segment detaches and travels to .sb-node
                   (travel vector --sb-dx/--sb-dy measured by JS)
   phase 3 (--p3)  node pulses + three chips appear
   Defaults resolve to the FINAL frame (--p:1) for reduced motion;
   without JS the split is suppressed so the bar reads complete.  */
.sb{
  --p:1;
  --p1:clamp(0,calc(var(--p)/.38),1);
  --p2:clamp(0,calc((var(--p) - .44)/.3),1);
  --p3:clamp(0,calc((var(--p) - .74)/.26),1);
  --f75:clamp(0,calc(var(--p1)/.72),1);
  --f25:clamp(0,calc((var(--p1) - .72)/.28),1);
  max-width:900px;margin-top:64px;
}
html:not(.js) .sb{--p2:0;--p3:1}
.sb-cap{
  font-size:.78rem;color:var(--mut-d);letter-spacing:.02em;
  display:flex;align-items:center;gap:7px;margin-bottom:14px;
}
.sb-cap .tick{width:22px;height:1px;background:linear-gradient(90deg,transparent,rgba(154,164,175,.6))}
.sb-bar{display:flex;height:68px}
.sb-seg{
  position:relative;display:flex;align-items:baseline;justify-content:center;gap:9px;
  overflow:hidden;padding:0 10px;
  align-items:center;
}
.sb-seg i{position:absolute;inset:0;z-index:0}
.sb-75{
  flex:75;border:1px solid var(--line-d);border-right-width:0;
  border-radius:18px 0 0 18px;
}
.sb-25{
  flex:25;border:1px solid rgba(127,227,187,.45);
  border-radius:0 18px 18px 0;z-index:2;
  transform:
    translate(calc(var(--sb-dx,0px) * var(--p2)),calc(var(--sb-dy,0px) * var(--p2)))
    scale(calc(1 - .2 * var(--p2)));
}
.sb-75 i{
  background:linear-gradient(90deg,rgba(124,196,255,.3),rgba(124,196,255,.16));
  transform:translateX(calc((var(--f75) - 1) * 100%));
}
.sb-25 i{
  background:linear-gradient(90deg,rgba(127,227,187,.36),rgba(127,227,187,.22));
  transform:translateX(calc((var(--f25) - 1) * 100%));
}
.sb-val{
  position:relative;z-index:1;
  font-size:1.5rem;font-weight:700;letter-spacing:-.02em;color:#fff;
  font-variant-numeric:tabular-nums;
}
.sb-lbl{position:relative;z-index:1;font-size:.85rem;font-weight:600;color:var(--mut-d);white-space:nowrap}
.sb-75 .sb-val,.sb-75 .sb-lbl{opacity:var(--f75);transform:translateY(calc((1 - var(--f75)) * 6px))}
.sb-25 .sb-val,.sb-25 .sb-lbl{opacity:var(--f25);transform:translateY(calc((1 - var(--f25)) * 6px))}
.sb-route{display:block;width:100%;height:96px;margin:2px 0 4px}
.sb-route path{
  stroke:rgba(127,227,187,.5);stroke-width:2;fill:none;
  stroke-dasharray:1;stroke-dashoffset:calc(1 - var(--p2));
  vector-effect:non-scaling-stroke;
}
.sb-eco{display:flex;flex-direction:column;align-items:center;gap:20px}
.sb-node{
  position:relative;display:inline-flex;align-items:center;gap:10px;
  padding:13px 24px;border-radius:var(--r-pill);
  background:rgba(127,227,187,.08);border:1px solid rgba(127,227,187,.3);
  color:#dcf6ea;font-weight:600;font-size:.95rem;
  transform:scale(calc(.92 + .08 * var(--p3)));
}
.sb-node .mark{width:18px;height:18px}
.sb-node-glow{
  position:absolute;inset:-26px;border-radius:50%;pointer-events:none;
  background:radial-gradient(50% 50% at 50% 50%,rgba(127,227,187,.3),rgba(127,227,187,0) 70%);
  opacity:var(--p3);
  animation:sb-pulse 2.6s ease-in-out infinite;
}
@keyframes sb-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.16)}}
@media(prefers-reduced-motion:reduce){.sb-node-glow{animation:none}}
.sb-chips{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}
.sb-chip{
  padding:8px 16px;border-radius:var(--r-pill);
  border:1px solid var(--line-d);background:rgba(255,255,255,.05);
  font-size:.85rem;font-weight:600;color:var(--mut-d);white-space:nowrap;
  opacity:var(--c,1);transform:translateY(calc((1 - var(--c,1)) * 10px));
}
.sb-chip:nth-child(1){--c:clamp(0,calc(var(--p3)/.55),1)}
.sb-chip:nth-child(2){--c:clamp(0,calc((var(--p3) - .2)/.55),1)}
.sb-chip:nth-child(3){--c:clamp(0,calc((var(--p3) - .4)/.55),1)}
@media(max-width:640px){
  .sb-bar{height:56px}
  .sb-val{font-size:1.15rem}
  .sb-lbl{display:none}
  .sb-route{height:64px}
}

/* light-surface variant: <div class="sb sb-light" data-split-bar> */
.sb-light .sb-75{border-color:var(--line)}
.sb-light .sb-val{color:var(--ink)}
.sb-light .sb-lbl,.sb-light .sb-cap,.sb-light .sb-chip{color:var(--mut)}
.sb-light .sb-chip{border-color:var(--line);background:rgba(11,13,16,.03)}
.sb-light .sb-node{color:var(--pos-deep);background:rgba(127,227,187,.14)}

/* ---------- M7 · tier path [data-tier-path] ---------- */
/* Three-beat access explainer. Default (no-JS / reduced motion)
   = final frame: everything lit, door open, replay hidden.
   JS arms it (.tp-armed = initial state) then plays (.is-play).  */
.tier-path{position:relative;margin-top:64px;max-width:840px}
.tier-path .tp-svg{width:100%;height:auto;overflow:visible}
.tp-txt{font-size:14px;font-weight:600;fill:var(--mut);letter-spacing:-.01em}
.tp-txt.on{fill:var(--ink)}
.dark .tp-txt{fill:var(--mut-d)}
.dark .tp-txt.on{fill:#fff}
.tp-replay{
  display:none;position:absolute;right:0;top:-6px;
  align-items:center;gap:7px;
  padding:8px 16px;border-radius:var(--r-pill);
  background:transparent;border:1px solid var(--line);cursor:pointer;
  font-size:.82rem;font-weight:600;color:var(--mut);
  transition:color .2s,border-color .2s;
}
.tp-replay:hover{color:var(--ink);border-color:rgba(11,13,16,.4)}
.dark .tp-replay{border-color:var(--line-d);color:var(--mut-d)}
.dark .tp-replay:hover{color:#fff;border-color:rgba(255,255,255,.4)}
.tp-armed .tp-replay{display:inline-flex}
/* wires draw with stroke-dash (markup must set pathLength="1") */
.tp-wire{stroke-dasharray:1;stroke-dashoffset:0}
/* door panel: open is the resting state */
.tp-panel{transform:rotate(-64deg);transform-box:fill-box;transform-origin:6% 50%}
/* --- armed (initial) state, JS only --- */
.tp-armed:not(.is-play) .tp-b1{opacity:0;transform:translateY(8px)}
.tp-armed:not(.is-play) .tp-wire1{stroke-dashoffset:1}
.tp-armed:not(.is-play) .tp-step{opacity:0;transform:translateY(10px)}
.tp-armed:not(.is-play) .tp-steplight{opacity:0}
.tp-armed:not(.is-play) .tp-wire2{stroke-dashoffset:1}
.tp-armed:not(.is-play) .tp-b3{opacity:0}
.tp-armed:not(.is-play) .tp-panel{transform:rotate(0deg)}
.tp-armed:not(.is-play) .tp-glow{opacity:0}
/* --- play: three beats via transition delays --- */
.tp-armed.is-play .tp-b1{opacity:1;transform:none;transition:opacity .6s var(--ease),transform .6s var(--ease)}
.tp-armed.is-play .tp-wire1{stroke-dashoffset:0;transition:stroke-dashoffset .55s var(--ease) .4s}
.tp-armed.is-play .tp-step{opacity:1;transform:none;transition:opacity .5s var(--ease),transform .5s var(--ease)}
.tp-armed.is-play .tp-step.s1{transition-delay:.75s}
.tp-armed.is-play .tp-step.s2{transition-delay:1s}
.tp-armed.is-play .tp-step.s3{transition-delay:1.25s}
.tp-armed.is-play .tp-steplight{opacity:1;transition:opacity .45s var(--ease)}
.tp-armed.is-play .tp-step.s1 .tp-steplight,.tp-armed.is-play .tp-steplight.s1{transition-delay:.95s}
.tp-armed.is-play .tp-step.s2 .tp-steplight,.tp-armed.is-play .tp-steplight.s2{transition-delay:1.2s}
.tp-armed.is-play .tp-step.s3 .tp-steplight,.tp-armed.is-play .tp-steplight.s3{transition-delay:1.45s}
.tp-armed.is-play .tp-wire2{stroke-dashoffset:0;transition:stroke-dashoffset .5s var(--ease) 1.55s}
.tp-armed.is-play .tp-b3{opacity:1;transition:opacity .5s var(--ease) 1.8s}
.tp-armed.is-play .tp-panel{transform:rotate(-64deg);transition:transform .9s var(--ease) 2.05s}
.tp-armed.is-play .tp-glow{opacity:1;transition:opacity .8s var(--ease) 2.25s}
@media(prefers-reduced-motion:reduce){
  /* belt and braces: if JS armed before the media query flipped */
  .tp-armed:not(.is-play) .tp-b1,.tp-armed:not(.is-play) .tp-step,
  .tp-armed:not(.is-play) .tp-steplight,.tp-armed:not(.is-play) .tp-b3,
  .tp-armed:not(.is-play) .tp-glow{opacity:1;transform:none}
  .tp-armed:not(.is-play) .tp-wire1,.tp-armed:not(.is-play) .tp-wire2{stroke-dashoffset:0}
  .tp-armed:not(.is-play) .tp-panel{transform:rotate(-64deg)}
  .tp-replay{display:none !important}
}

/* ---------- M8 · micro-interactions (JS adds classes) ---------- */
/* pointer-tracking sheen + max 3px translate on primary buttons */
.has-sheen{position:relative;overflow:hidden}
.has-sheen::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(130px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.28),rgba(255,255,255,0) 62%);
  opacity:0;transition:opacity .3s var(--ease);
}
.btn-white.has-sheen::after{
  background:radial-gradient(130px circle at var(--mx,50%) var(--my,50%),rgba(124,196,255,.3),rgba(124,196,255,0) 62%);
}
.has-sheen:hover::after{opacity:1}
.btn.has-sheen{transform:translate(var(--btx,0px),var(--bty,0px))}
.btn.has-sheen:hover{transform:translate(var(--btx,0px),calc(var(--bty,0px) - 2px))}
.btn.has-sheen:active{transform:translate(var(--btx,0px),var(--bty,0px))}
/* card tilt, max 1.5deg */
.card.tiltable{
  transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(var(--tty,0px));
  transition:transform .18s var(--ease),border-color var(--t-fast) var(--ease);
}
.card.tiltable:hover{
  --tty:-2px;
  transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(var(--tty,0px));
}
@media(prefers-reduced-motion:reduce){
  .has-sheen::after{display:none}
  .btn.has-sheen,.card.tiltable{transform:none}
}

/* ---------- homepage flow band section ---------- */
.flow-band .seq-cap{color:var(--mut-d)}
.flow-band .flow-stage{margin-top:-4vh}

/* ================================================================
   MOTION · ROUND 2 (pairs with motion.js modules 9-15 + megamenu)
   ================================================================ */

/* ---------- M9 · reveal lines [data-reveal-lines] ---------- */
/* JS wraps rendered lines in .rl-line > .rl-seg, plays once, then
   restores the original markup. No-JS / reduced motion never see
   these classes: the heading stays static and visible. */
html.js .rl-on .rl-line{display:block;overflow:hidden;padding:.14em 0;margin:-.14em 0}
html.js .rl-on .rl-seg{
  display:inline-block;transform:translateY(110%);
  transition:transform .85s var(--ease);
}
html.js .rl-on.rl-in .rl-seg{transform:translateY(0)}
@media(prefers-reduced-motion:reduce){
  html.js .rl-on .rl-seg{transform:none;transition:none}
}

/* ---------- M10 · parallax [data-parallax] ---------- */
[data-parallax]{will-change:transform}
/* the hero wash trades its ambient keyframe for scroll parallax
   (one ambient budget slot back); other pages' washes keep it */
html.js .hero-wash[data-parallax]{animation:none}
@media(prefers-reduced-motion:reduce){
  [data-parallax]{transform:none !important;will-change:auto}
}

/* ---------- M11 · spotlight [data-spotlight] ---------- */
/* JS feeds --mx/--my per card; halo painted here (WebKit-safe px
   radial-gradient). Fine pointers only: JS never mounts on touch. */
.spot-card{position:relative}
.spot-card::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(230px circle at var(--mx,50%) var(--my,50%),rgba(124,196,255,.13),rgba(124,196,255,0) 70%);
  opacity:0;transition:opacity .35s var(--ease);
}
.dark .spot-card::after{
  background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.07),rgba(255,255,255,0) 70%);
}
.spot-on.spot-live .spot-card::after{opacity:1}
@media(prefers-reduced-motion:reduce){.spot-card::after{display:none}}

/* ---------- M12 · block reveal [data-block-reveal] ---------- */
/* Armed by JS only when the block starts below the fold; classes
   are removed after the play, so the resting state is the plain
   .block. No-JS / reduced motion: never armed. */
html.js .br-armed{
  clip-path:inset(4.5% 4% round 52px);
  opacity:.35;
  transition:clip-path .95s var(--ease),opacity .7s var(--ease);
}
html.js .br-armed.br-in{clip-path:inset(0 0 round var(--r-block));opacity:1}
@media(max-width:640px){
  html.js .br-armed{clip-path:inset(4.5% 4% round 34px)}
  html.js .br-armed.br-in{clip-path:inset(0 0 round 26px)}
}
@media(prefers-reduced-motion:reduce){
  html.js .br-armed{clip-path:none;opacity:1;transition:none}
}

/* ---------- M13 · orbit [data-orbit] ---------- */
.has-orbit{position:relative}
.orbit-svg{
  position:absolute;left:50%;top:50%;
  height:118%;aspect-ratio:1/1;width:auto;
  transform:translate(-50%,-50%);
  pointer-events:none;overflow:visible;
}
.orbit-ring{
  fill:none;stroke:currentColor;opacity:.13;stroke-width:1;
  stroke-dasharray:2 7;stroke-linecap:round;vector-effect:non-scaling-stroke;
}
.orbit-spin{
  transform-box:view-box;transform-origin:50% 50%;
  animation:orbit-rot 48s linear infinite;
}
@keyframes orbit-rot{to{transform:rotate(360deg)}}
.orbit-off .orbit-spin,.orbit-hidden .orbit-spin{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){.orbit-spin{animation:none}}

/* ---------- M14 · unlock hover [data-unlock-hover] ---------- */
/* Locked rows: redaction (.redact / .lock-veil) lifts ~40% on
   hover or keyboard focus; the lock chip nudges. Pages can also
   key custom redactions off --unlock (0 idle, 1 engaged). */
.unlockable{--unlock:0}
.unlockable:hover,.unlockable:focus-within,.unlockable:focus-visible{--unlock:1}
.unlockable .redact,.unlockable .lock-veil{transition:opacity .4s var(--ease)}
.unlockable:hover .redact,.unlockable:focus-within .redact,.unlockable:focus-visible .redact,
.unlockable:hover .lock-veil,.unlockable:focus-within .lock-veil,.unlockable:focus-visible .lock-veil{opacity:.6}
.unlockable .lock-chip{transition:transform .3s var(--ease)}
.unlockable:hover .lock-chip,.unlockable:focus-within .lock-chip,.unlockable:focus-visible .lock-chip{transform:translateY(-2px)}
@media(prefers-reduced-motion:reduce){
  .unlockable .redact,.unlockable .lock-veil,.unlockable .lock-chip{transition:none}
  .unlockable .lock-chip{transform:none !important}
}

/* ---------- M15 · underline draw .u-draw (CSS only) ---------- */
/* Applied by motion.js mount() to #main p/li links that are not
   buttons or .tlink. Draws left-to-right in, exits to the right. */
.u-draw{position:relative}
.u-draw::after{
  content:"";position:absolute;left:0;right:0;bottom:-2px;height:1px;
  background:currentColor;opacity:.55;
  transform:scaleX(0);transform-origin:100% 50%;
  transition:transform .35s var(--ease);
}
.u-draw:hover::after,.u-draw:focus-visible::after{transform:scaleX(1);transform-origin:0 50%}
@media(prefers-reduced-motion:reduce){.u-draw::after{transition:none}}

/* ---------- M16 · megamenu motion + nav ring rotation ---------- */
/* Panels: 8px rise + fade, 240ms. Links stagger 40ms, driven by
   [aria-expanded] on the toggle (set by site.js). No-JS keeps the
   hover fallback (rules below are html.js-gated). */
html.js .mega{
  transform:translateX(-50%) translateY(8px);
  transition:opacity .24s var(--ease),transform .24s var(--ease),visibility 0s linear .24s;
}
html.js .nav-item.open>.mega{
  transition:opacity .24s var(--ease),transform .24s var(--ease),visibility 0s;
}
html.js .mega .mega-link{
  opacity:0;transform:translateY(5px);
  transition:opacity .28s var(--ease),transform .28s var(--ease),background-color .18s;
}
html.js .mega-toggle[aria-expanded="true"]+.mega .mega-link{opacity:1;transform:none}
html.js .mega .mega-link:nth-child(1){transition:opacity .28s var(--ease) .04s,transform .28s var(--ease) .04s,background-color .18s}
html.js .mega .mega-link:nth-child(2){transition:opacity .28s var(--ease) .08s,transform .28s var(--ease) .08s,background-color .18s}
html.js .mega .mega-link:nth-child(3){transition:opacity .28s var(--ease) .12s,transform .28s var(--ease) .12s,background-color .18s}
html.js .mega .mega-link:nth-child(4){transition:opacity .28s var(--ease) .16s,transform .28s var(--ease) .16s,background-color .18s}
@media(prefers-reduced-motion:reduce){
  html.js .mega{transform:translateX(-50%);transition:none}
  html.js .mega .mega-link{opacity:1;transform:none;transition:background-color .18s}
}
/* nav ring logomark: very slow continuous rotation (60s) */
@media(prefers-reduced-motion:no-preference){
  html.js .nav .brand .mark{animation:brand-rot 60s linear infinite}
}
@keyframes brand-rot{to{transform:rotate(360deg)}}

/* ================================================================
   MOTION · ROUND 3 (pairs with motion.js module 17)
   ================================================================ */

/* ---------- M17 · venture streams [data-streams] ---------- */
/* <div class="streams" data-streams data-scroll-progress …>
     <div class="st-caprow"> cap + counter </div>
     <div class="st-grid">
       <ol class="st-list"> 4 × <li class="st-item st-bN">
         <div class="st-block">…</div><svg class="st-drop">…</svg>
       </li> </ol>
       <svg class="st-svg"> wires (pathLength=1) + dash flows </svg>
       <div class="st-pool"> glow + hit ring + mark + labels </div>
     </div>
     <p class="st-beat">…</p>
   </div>
   Venture blocks land one by one, each drawing a stream wire and
   a running dash flow into the single ecosystem pool; the counter
   ticks (JS) and the pool pulses as streams attach. All visual
   motion is CSS keyed to --p (module 2). Default --p:1 = FINAL
   frame, so no-JS and reduced motion render every block visible
   and every stream drawn. Designed for dark blocks. Mobile:
   vertical stack, .st-drop connectors replace the curved svg.   */
.streams{
  --p:1;
  --b1:clamp(0,calc((var(--p) - .06)/.16),1);
  --b2:clamp(0,calc((var(--p) - .26)/.16),1);
  --b3:clamp(0,calc((var(--p) - .46)/.16),1);
  --b4:clamp(0,calc((var(--p) - .66)/.16),1);
  --bt:clamp(0,calc((var(--p) - .86)/.14),1);
  margin-top:64px;
}
.st-caprow{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px}
.st-cap{
  font-size:.78rem;color:var(--mut-d);letter-spacing:.02em;
  display:flex;align-items:center;gap:7px;
}
.st-cap .tick{width:22px;height:1px;background:linear-gradient(90deg,transparent,rgba(154,164,175,.6))}
.st-count{display:flex;align-items:baseline;gap:8px}
.st-count b{
  font-size:1.5rem;font-weight:700;letter-spacing:-.02em;line-height:1;
  color:var(--foam);font-variant-numeric:tabular-nums;
}
.st-count span{font-size:.78rem;color:var(--mut-d);letter-spacing:.02em}
.st-grid{position:relative}
.st-list{display:grid;grid-auto-rows:1fr;width:46%}
.st-item{display:flex;align-items:center;padding:9px 0}
.st-block{
  width:100%;
  border:1px solid var(--line-d);border-radius:18px;
  background:rgba(255,255,255,.045);
  padding:18px 22px;
  opacity:var(--b,1);transform:translateY(calc((1 - var(--b,1)) * 14px));
}
.st-b1{--b:var(--b1)}
.st-b2{--b:var(--b2)}
.st-b3{--b:var(--b3)}
.st-b4{--b:var(--b4)}
.st-b4 .st-block{opacity:calc(var(--b,1) * .55);border-style:dashed}
.st-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.st-num{font-size:13px;font-weight:600;color:var(--mut-d);font-variant-numeric:tabular-nums}
.st-chip{
  padding:4px 11px;border-radius:var(--r-pill);
  font-size:.72rem;font-weight:700;letter-spacing:.02em;white-space:nowrap;
  border:1px solid var(--line-d);background:rgba(255,255,255,.05);color:var(--mut-d);
}
.st-chip.consumer{background:rgba(124,196,255,.12);border-color:rgba(124,196,255,.35);color:#cfe7ff}
.st-chip.affiliate{background:rgba(127,227,187,.12);border-color:rgba(127,227,187,.35);color:#dcf6ea}
.st-chip.news{background:rgba(255,255,255,.09);border-color:rgba(255,255,255,.26);color:#e8edf2}
.st-block b{display:block;font-size:1.06rem;font-weight:600;letter-spacing:-.015em;color:#fff;margin-bottom:4px}
.st-block p{font-size:14px;color:var(--mut-d);line-height:1.55;max-width:44ch}
.st-svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.st-wire{
  fill:none;stroke:rgba(124,196,255,.26);stroke-width:1.5;
  vector-effect:non-scaling-stroke;
  stroke-dasharray:1;stroke-dashoffset:calc(1 - var(--w,1));
}
.st-flow{
  fill:none;stroke:rgba(127,227,187,.8);stroke-width:1.5;
  vector-effect:non-scaling-stroke;
  stroke-dasharray:1.5 8;
  opacity:calc(clamp(0,calc((var(--w,1) - .7)/.3),1) * .9);
  animation:st-dash 2s linear infinite;
}
@keyframes st-dash{to{stroke-dashoffset:-9.5}}
.st-w1,.st-f1{--w:var(--b1)}
.st-w2,.st-f2{--w:var(--b2)}
.st-w3,.st-f3{--w:var(--b3)}
.st-w4,.st-f4{--w:var(--b4)}
.st-drop{display:none;flex:none}
.st-drop .st-wire,.st-drop .st-flow{--w:var(--b,1)}
.st-drop .st-flow{stroke-dasharray:2 7.5}
.st-pool{
  position:absolute;right:0;top:50%;
  transform:translateY(-50%) scale(calc(.92 + .08 * var(--b1)));
  opacity:calc(.35 + .65 * var(--b1));
  display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;
  padding:24px 30px;border-radius:22px;
  background:#10151b;border:1px solid rgba(127,227,187,.32);
  box-shadow:0 0 44px rgba(127,227,187,.14);
}
.st-pool .mark{width:24px;height:24px;margin-bottom:6px}
.st-pool b{font-size:.98rem;font-weight:600;color:#dcf6ea;letter-spacing:-.01em}
.st-pool span{font-size:.78rem;color:var(--mut-d)}
.st-pool .st-pool-line{font-size:.82rem;font-weight:600;color:var(--foam);margin-top:6px}
.st-pool-glow{
  position:absolute;inset:-30px;border-radius:50%;pointer-events:none;
  background:radial-gradient(50% 50% at 50% 50%,rgba(127,227,187,.26),rgba(127,227,187,0) 70%);
  opacity:calc(.25 + .75 * var(--b4));
  animation:sb-pulse 2.8s ease-in-out infinite;
}
.st-pool-hit{
  position:absolute;inset:-6px;border-radius:26px;pointer-events:none;
  border:1px solid rgba(127,227,187,.55);opacity:0;
}
.st-pool.st-hit .st-pool-hit{animation:st-hitring .65s var(--ease)}
@keyframes st-hitring{0%{opacity:.9;transform:scale(.97)}100%{opacity:0;transform:scale(1.12)}}
.st-beat{
  margin-top:48px;text-align:center;
  font-size:clamp(1.15rem,2vw,1.45rem);font-weight:600;letter-spacing:-.02em;color:#fff;
  opacity:var(--bt);transform:translateY(calc((1 - var(--bt)) * 10px));
}
@media(max-width:820px){
  .st-svg{display:none}
  .st-list{width:100%;grid-auto-rows:auto}
  .st-item{flex-direction:column;align-items:stretch;padding:0}
  .st-drop{display:block;width:4px;height:40px;margin:2px auto}
  .st-pool{
    position:relative;right:auto;top:auto;margin:2px auto 0;
    transform:scale(calc(.92 + .08 * var(--b1)));
    max-width:300px;
  }
  .st-beat{margin-top:40px}
}
@media(prefers-reduced-motion:reduce){
  .st-flow{animation:none}
  .st-pool-glow{animation:none}
  .st-pool-hit{display:none}
  .st-block,.st-beat{transform:none}
}


/* perf: <picture> wrappers must not affect layout (webp swap) */
picture{display:contents}
