:root{--ease-out:cubic-bezier(0.23,1,0.32,1);--ease-io:cubic-bezier(0.77,0,0.175,1)}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:#F5F5F2;color:#111214}
a{color:inherit;text-decoration:none;transition:opacity 160ms ease}
@media (hover:hover) and (pointer:fine){a:hover{opacity:.75}.chip:hover{border-color:rgba(255,255,255,.22);color:#fff}}
button{font:inherit;cursor:pointer}
button:focus-visible,a:focus-visible{outline:2px solid #1E5BFF;outline-offset:3px;border-radius:6px}
.skip{position:absolute;left:12px;top:-60px;z-index:100;padding:10px 16px;border-radius:999px;background:#111214;color:#fff;font:500 14px Inter,system-ui,sans-serif}
.skip:focus{top:12px}
.press{transition:transform 160ms var(--ease-out),opacity 160ms ease}
.press:active{transform:scale(.97)}
canvas.bg{display:block;animation:drift 38s ease-in-out infinite alternate;will-change:transform}
@keyframes drift{from{transform:scale(1.04) translate3d(-1%,0,0)}to{transform:scale(1.12) translate3d(1.5%,-1%,0)}}
.grain{position:absolute;inset:0;pointer-events:none;background-image:var(--grain);background-size:180px 180px;mix-blend-mode:overlay;opacity:.55}
.rise{animation:rise 1000ms var(--ease-out) both}
@keyframes rise{from{opacity:0;transform:translateY(18px);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
.swap{animation:swap 260ms var(--ease-out) both}
@keyframes swap{from{opacity:0;transform:translateY(6px) scale(.98);filter:blur(3px)}to{opacity:1;transform:none;filter:none}}
/* scroll reveals */
.js .reveal{opacity:0;transform:translateY(28px);transition:opacity 900ms var(--ease-out),transform 900ms var(--ease-out);transition-delay:var(--d,0ms)}
.js .reveal.in{opacity:1;transform:none}
.js .stagger>*{opacity:0;transform:translateY(18px);transition:opacity 800ms var(--ease-out),transform 800ms var(--ease-out);transition-delay:var(--d,0ms)}
.js .stagger.in>*{opacity:1;transform:none}
/* tunnel */
.js .ring{opacity:0;transform:scale(1.08);transition:opacity 1100ms var(--ease-out),transform 1300ms var(--ease-out);transition-delay:var(--d,0ms)}
.js .tunnel.in .ring{opacity:1;transform:none}
.pulse{position:absolute;left:50%;top:50%;width:84%;aspect-ratio:1/1;border-radius:28px;border:1px solid rgba(157,182,255,.55);transform:translate(-50%,-50%) scale(.08);opacity:0;animation:pulse 4s var(--ease-out) infinite;pointer-events:none}
@keyframes pulse{0%{transform:translate(-50%,-50%) scale(.08);opacity:0}15%{opacity:.9}100%{transform:translate(-50%,-50%) scale(1.15);opacity:0}}
.inf{animation:glow 4s ease-in-out infinite}
@keyframes glow{0%,100%{opacity:.92}50%{opacity:1;filter:brightness(1.25)}}
/* canvas map */
.wire{stroke-dasharray:1;stroke-dashoffset:0}
.js .map .wire{stroke-dashoffset:1;transition:stroke-dashoffset 1200ms var(--ease-io);transition-delay:var(--d,300ms)}
.js .map.in .wire{stroke-dashoffset:0}
.js .map .node{opacity:0;transform:translateY(10px) scale(.97);transition:opacity 700ms var(--ease-out),transform 700ms var(--ease-out);transition-delay:var(--d,0ms)}
.js .map.in .node{opacity:1;transform:none}
/* chart */
.line{stroke-dasharray:1;stroke-dashoffset:0}
.js .chart .line{stroke-dashoffset:1;transition:stroke-dashoffset 1600ms var(--ease-io) 200ms}
.js .chart .area{opacity:0;transition:opacity 1200ms ease 900ms}
.js .chart.in .line{stroke-dashoffset:0}
.js .chart.in .area{opacity:1}
/* floating nav */
.float{position:fixed;z-index:50;left:50%;top:12px;transform:translate(-50%,-140%);display:flex;align-items:center;gap:22px;height:48px;padding:0 6px 0 14px;border-radius:999px;background:rgba(250,250,247,.78);backdrop-filter:saturate(160%) blur(18px);-webkit-backdrop-filter:saturate(160%) blur(18px);border:1px solid rgba(17,18,20,.08);box-shadow:0 10px 30px -12px rgba(17,18,20,.25);font:500 14px Inter,system-ui,sans-serif;color:#111214;transition:transform 500ms var(--ease-out),opacity 300ms ease,visibility 0s linear 500ms;opacity:0;visibility:hidden;white-space:nowrap}
.float.show{transform:translate(-50%,0);opacity:1;visibility:visible;transition:transform 500ms var(--ease-out),opacity 200ms ease,visibility 0s}
.float-brand{display:flex;align-items:center;gap:8px;font-family:'Inter Tight',Inter,sans-serif;font-size:16px}
.float-links{display:flex;gap:18px;color:#4A4D54}
.float-dl{display:inline-flex;align-items:center;height:36px;padding:0 16px;border-radius:999px;background:#111214;color:#fff}
@media (max-width:900px){.win-side{display:none!important}.hero-side{display:none!important}.hero-main{grid-column:1/-1!important}}
@media (max-width:720px){.nav-links{display:none!important}.float-links{display:none}}
@media (max-width:560px){.hide-sm{display:none!important}.prow{flex-direction:column;gap:4px!important}.prow>span{flex:none!important}}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  canvas.bg,.pulse,.inf{animation:none}
  .pulse{display:none}
  .rise,.swap{animation:fade 200ms ease both}
  .js .reveal,.js .stagger>*,.js .ring,.js .map .node{transform:none!important;transition:opacity 300ms ease}
  .js .map .wire,.js .chart .line{transition:none;stroke-dashoffset:0}
  .press:active{transform:none}
}
@keyframes fade{from{opacity:0}to{opacity:1}}
a.press{white-space:nowrap}
