/* ============================================================
   FLUX — marketing site design system (Obsidian Flux)
   Shared by every page: index, download, ai, research,
   trade-ideas, markets, pricing.
   ============================================================ */
:root{
  color-scheme:dark;
  --bg:#020617;
  --glass:rgba(15,23,42,.6);
  --glass-2:rgba(20,28,50,.45);
  --well:rgba(0,0,0,.32);
  --line:rgba(255,255,255,.10);
  --line-2:rgba(255,255,255,.06);
  --cyan:#00f2ff;
  --violet:#8b5cf6;
  --emerald:#10b981;
  --crimson:#ef4444;
  --amber:#f5b544;
  --text:#dce1fb;
  --text-dim:#9aa8c7;
  --text-faint:#6b7a9c;
  --grad:linear-gradient(120deg,var(--cyan),var(--violet));
  --f-sans:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;
  --f-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --maxw:1180px;
  --gutter:clamp(20px,5vw,56px);
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;overflow-x:clip}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation-duration:.001s!important;transition-duration:.001s!important}}
body{
  margin:0;color:var(--text);font-family:var(--f-sans);font-size:16px;line-height:1.6;
  -webkit-font-smoothing:antialiased;overflow-x:clip;
  background:
    radial-gradient(760px 480px at 8% -8%, rgba(0,242,255,.09), transparent 60%),
    radial-gradient(820px 520px at 104% 4%, rgba(139,92,246,.11), transparent 60%),
    radial-gradient(900px 700px at 50% 118%, rgba(0,242,255,.05), transparent 65%),
    var(--bg);
}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4{margin:0;font-weight:700;letter-spacing:-.02em;text-wrap:balance}
p{margin:0}
img,svg,canvas{max-width:100%;display:block}
.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.up{color:var(--emerald)} .down{color:var(--crimson)}
.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
.section{padding-block:clamp(60px,8vw,110px)}
.section-sm{padding-block:clamp(40px,5vw,70px)}
.center{text-align:center}
.grad-text{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.eyebrow{font-family:var(--f-mono);font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--cyan);
  display:inline-flex;align-items:center;gap:10px;font-weight:600}
.eyebrow::before{content:"";width:22px;height:1px;background:var(--cyan);opacity:.6}
.eyebrow.c{justify-content:center}
.lede{color:var(--text-dim);font-size:clamp(1.05rem,1rem + .4vw,1.2rem);max-width:58ch;line-height:1.55}
.muted{color:var(--text-dim)} .faint{color:var(--text-faint)}
.h1{font-size:clamp(2.4rem,1.6rem + 3.4vw,3.9rem);line-height:1.05;font-weight:750;letter-spacing:-.03em}
.h2{font-size:clamp(1.8rem,1.3rem + 2vw,2.7rem)}
.h3{font-size:1.15rem}

/* ---------- glass ---------- */
.glass{position:relative;background:var(--glass);backdrop-filter:blur(20px);border:1px solid var(--line);
  border-radius:18px;box-shadow:inset 0 1px 0 rgba(255,255,255,.06), 0 24px 50px -36px #000}
.glass::after{content:"";position:absolute;inset:0;border-radius:18px;pointer-events:none;
  background:linear-gradient(135deg,rgba(255,255,255,.05),transparent 42%)}
.glass-hover{transition:transform .2s,border-color .2s}
.glass-hover:hover{transform:translateY(-4px);border-color:rgba(0,242,255,.35)}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;font-weight:700;font-size:15px;
  padding:14px 26px;border-radius:100px;border:1px solid transparent;cursor:pointer;
  transition:transform .12s,box-shadow .2s,border-color .2s;color:#03202a;white-space:nowrap;font-family:var(--f-sans)}
.btn:active{transform:scale(.975)}
.btn-primary{background:var(--grad);box-shadow:inset 0 1px 0 rgba(255,255,255,.5), 0 10px 30px -10px rgba(0,242,255,.5)}
.btn-primary:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.5), 0 14px 40px -10px rgba(0,242,255,.6)}
.btn-ghost{background:rgba(0,242,255,.06);border-color:rgba(0,242,255,.35);color:var(--cyan);backdrop-filter:blur(10px)}
.btn-ghost:hover{border-color:var(--cyan);box-shadow:0 0 18px rgba(0,242,255,.2)}
.btn-lg{padding:16px 30px;font-size:16px}
.btn-sm{padding:10px 18px;font-size:13.5px}
.btn-row{display:flex;gap:12px;flex-wrap:wrap}

/* ---------- pills ---------- */
.pill{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;border-radius:100px;
  border:1px solid rgba(0,242,255,.35);background:rgba(0,242,255,.07);color:var(--cyan);
  font-family:var(--f-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;font-weight:600}
.pill i{width:7px;height:7px;border-radius:50%;background:var(--cyan);box-shadow:0 0 10px var(--cyan);
  animation:blink 1.6s infinite;font-style:normal}
.pill-violet{border-color:rgba(139,92,246,.45);background:rgba(139,92,246,.1);color:#c4abff}
.pill-violet i{background:var(--violet);box-shadow:0 0 10px var(--violet)}
.tag{font-family:var(--f-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;
  padding:3px 9px;border-radius:6px;background:rgba(0,242,255,.1);color:var(--cyan)}

/* ---------- nav ---------- */
.nav{position:sticky;top:0;z-index:60;transition:background .3s,border-color .3s;border-bottom:1px solid transparent}
.nav.scrolled{background:rgba(2,6,23,.85);backdrop-filter:blur(20px);border-color:var(--line-2)}
.nav-inner{display:flex;align-items:center;gap:24px;height:68px;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter)}
.brand{display:flex;align-items:center;gap:11px;font-weight:700;font-size:1.1rem;letter-spacing:-.01em;flex:none}
.glyph{width:30px;height:30px;border-radius:9px;border:1px solid var(--line);flex:none;
  box-shadow:0 0 18px -4px rgba(0,242,255,.6);
  background:#020617 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cg stroke-width='2.6' stroke-linecap='round'%3E%3Cline x1='11' y1='13' x2='11' y2='19' stroke='%2300f2ff'/%3E%3Cline x1='16' y1='9' x2='16' y2='23' stroke='%236ab8ff'/%3E%3Cline x1='21' y1='13' x2='21' y2='19' stroke='%238b5cf6'/%3E%3C/g%3E%3C/svg%3E") center/cover no-repeat}
.nav-links{display:flex;gap:22px;margin-left:4px;align-items:center}
.nav-links a{color:var(--text-dim);font-size:.94rem;font-weight:500;position:relative;padding:4px 0}
.nav-links a:hover{color:var(--cyan)}
.nav-links a.on{color:var(--text)}
.nav-links a.on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-2px;
  width:5px;height:5px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan)}
.nav-cta{margin-left:auto;display:flex;gap:12px;align-items:center}
.nav-toggle{display:none;width:40px;height:40px;border-radius:10px;border:1px solid var(--line);
  background:var(--glass);color:var(--text-dim);cursor:pointer;margin-left:auto}
@media(max-width:960px){
  .nav-links{display:none}
  .nav-cta{display:none}
  .nav-toggle{display:grid;place-items:center}
  .nav-links.open{display:flex;position:absolute;top:68px;left:0;right:0;flex-direction:column;gap:0;
    background:rgba(2,6,23,.97);backdrop-filter:blur(20px);border-bottom:1px solid var(--line);padding:8px 0}
  .nav-links.open a{padding:14px var(--gutter);width:100%;font-size:1rem}
}

/* ---------- footer ---------- */
.footer{border-top:1px solid var(--line-2);background:rgba(3,8,20,.6);padding-block:52px 34px;margin-top:20px}
.footer-grid{display:grid;grid-template-columns:1.7fr repeat(4,1fr);gap:36px}
@media(max-width:860px){.footer-grid{grid-template-columns:1fr 1fr;gap:28px}}
.footer h4{font-size:.76rem;letter-spacing:.12em;text-transform:uppercase;color:var(--text-faint);margin:0 0 14px;font-weight:600}
.footer a{display:block;color:var(--text-dim);font-size:.9rem;padding:5px 0}
.footer a:hover{color:var(--cyan)}
.footer-bottom{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;
  margin-top:40px;padding-top:22px;border-top:1px solid var(--line-2);color:var(--text-faint);font-size:.84rem}
.disclaimer{color:var(--text-faint);font-size:.76rem;line-height:1.6;max-width:80ch}

/* ---------- grids ---------- */
.grid{display:grid;gap:18px}
.g-2{grid-template-columns:repeat(2,1fr)}
.g-3{grid-template-columns:repeat(3,1fr)}
.g-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:980px){.g-4{grid-template-columns:repeat(2,1fr)}.g-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.g-2,.g-3,.g-4{grid-template-columns:1fr}}
.split{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}
.split.wide-l{grid-template-columns:1.15fr .85fr}
@media(max-width:900px){.split,.split.wide-l{grid-template-columns:1fr;gap:32px}}

/* ---------- feature cards ---------- */
.feat{padding:24px}
.feat .ic{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;font-family:var(--f-mono);
  font-size:20px;color:var(--cyan);background:rgba(0,242,255,.07);border:1px solid rgba(0,242,255,.25);margin-bottom:16px}
.feat h3{font-size:1.12rem}
.feat p{color:var(--text-dim);font-size:.92rem;margin-top:8px}
.feat .meta{display:flex;gap:14px;margin-top:16px;font-family:var(--f-mono);font-size:.72rem;color:var(--text-faint)}
.feat .meta b{color:var(--cyan);font-weight:600}
.flist{display:flex;flex-direction:column;gap:18px;margin-top:26px}
.fi{display:flex;gap:14px}
.fi .k{width:34px;height:34px;flex:none;border-radius:10px;background:rgba(0,242,255,.08);
  border:1px solid rgba(0,242,255,.25);color:var(--cyan);display:grid;place-items:center;font-weight:700;
  font-family:var(--f-mono);font-size:14px}
.fi b{display:block;margin-bottom:3px}
.fi p{color:var(--text-dim);font-size:.92rem}

/* ---------- stat band ---------- */
.band{border-block:1px solid var(--line-2);background:rgba(5,10,24,.5);backdrop-filter:blur(10px)}
.band .wrap{display:flex;align-items:center;gap:14px;padding-block:20px;flex-wrap:wrap;justify-content:center}
.band span{font-family:var(--f-mono);font-size:.82rem;color:var(--text-faint)}
.band b{color:var(--text-dim);font-weight:600}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;text-align:center}
@media(max-width:700px){.stats{grid-template-columns:1fr 1fr}}
.stat .v{font-family:var(--f-mono);font-size:clamp(1.6rem,1.2rem + 1.6vw,2.4rem);font-weight:700;letter-spacing:-.02em;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.stat .k{color:var(--text-dim);font-size:.84rem;margin-top:6px}

/* ---------- steps ---------- */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
@media(max-width:880px){.steps{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.steps{grid-template-columns:1fr}}
.step{position:relative;padding:22px;border-radius:16px;border:1px solid var(--line-2);background:var(--well)}
.step::before{content:"";position:absolute;inset:0 0 auto 0;height:2px;border-radius:16px 16px 0 0;background:var(--grad);opacity:.7}
.step .n{font-family:var(--f-mono);font-size:.8rem;color:var(--cyan);font-weight:700}
.step h3{font-size:1.03rem;margin:10px 0 8px}
.step p{color:var(--text-dim);font-size:.89rem}

/* ---------- signal row (shared demo component) ---------- */
.sig{display:flex;align-items:center;gap:12px;padding:11px 13px;border:1px solid var(--line-2);
  border-radius:13px;background:var(--well)}
.sig .av{width:36px;height:36px;border-radius:50%;flex:none;display:grid;place-items:center;
  font-family:var(--f-mono);font-weight:700;font-size:11px;border:1px solid var(--line);
  background:radial-gradient(circle at 30% 30%,rgba(0,242,255,.18),rgba(139,92,246,.12))}
.sig .mid{flex:1;min-width:0}
.sig .tk{font-family:var(--f-mono);font-weight:700;font-size:13.5px}
.sig .tk span{color:var(--text-faint);font-weight:400;font-size:11.5px}
.sig .lbl{font-size:11.5px;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sig .bar{height:3px;border-radius:2px;background:rgba(255,255,255,.08);margin-top:6px;overflow:hidden}
.sig .bar i{display:block;height:100%}
.sig .conf{font-family:var(--f-mono);font-weight:700;font-size:13.5px;text-align:right}
.sig .cl{font-size:8.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);text-align:right}

/* ---------- faq ---------- */
.faq{max-width:760px;margin-inline:auto;display:flex;flex-direction:column;gap:12px}
details{border:1px solid var(--line);border-radius:14px;background:var(--glass);backdrop-filter:blur(14px);overflow:hidden}
summary{cursor:pointer;padding:18px 20px;font-weight:600;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:16px}
summary::-webkit-details-marker{display:none}
summary::after{content:"+";font-family:var(--f-mono);color:var(--cyan);font-size:1.3rem;transition:transform .2s}
details[open] summary::after{transform:rotate(45deg)}
details p{padding:0 20px 20px;color:var(--text-dim);font-size:.93rem}

/* ---------- cta ---------- */
.cta{position:relative;overflow:hidden;border-radius:24px;border:1px solid rgba(0,242,255,.3);
  background:radial-gradient(700px 340px at 50% -30%, rgba(0,242,255,.14), transparent 60%), var(--glass);
  backdrop-filter:blur(20px);padding:clamp(40px,6vw,68px);text-align:center;
  box-shadow:0 0 80px -30px rgba(0,242,255,.35), inset 0 1px 0 rgba(255,255,255,.08)}

/* ---------- page hero ---------- */
.phero{padding-top:clamp(36px,5vw,64px);position:relative}
.phero .lede{margin-top:18px}

/* ---------- reveal ---------- */
.reveal{opacity:0;transform:translateY(20px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}
.reveal.in{opacity:1;transform:none}

/* ---------- device frame ---------- */
.device{position:relative;max-width:380px;margin-inline:auto;border-radius:34px;padding:13px;
  background:rgba(9,14,30,.8);border:1px solid var(--line);backdrop-filter:blur(24px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), 0 40px 90px -40px rgba(0,242,255,.35), 0 30px 70px -40px #000}
.device-screen{border-radius:24px;background:#030814;border:1px solid var(--line-2);overflow:hidden;position:relative}

/* ---------- neural orb ---------- */
.orb{position:relative;display:grid;place-items:center;width:var(--sz,110px);height:var(--sz,110px);margin-inline:auto}
.orb .rg{position:absolute;border-radius:50%;border:1px solid rgba(0,242,255,.25)}
.orb .rg.a{inset:0}
.orb .rg.b{inset:14%;border-style:dashed;border-color:rgba(139,92,246,.35);animation:spin 22s linear infinite}
.orb .rg.p{inset:26%;border-color:var(--cyan);animation:ripple 3s ease-out infinite;opacity:0}
.wave{display:flex;align-items:center;gap:4px;height:36%;filter:drop-shadow(0 0 8px rgba(0,242,255,.6))}
.wave i{width:4px;border-radius:2px;background:var(--grad);animation:eq 1.1s ease-in-out infinite}
.wave i:nth-child(1){height:40%}
.wave i:nth-child(2){height:74%;animation-delay:.15s}
.wave i:nth-child(3){height:100%;animation-delay:.3s}
.wave i:nth-child(4){height:63%;animation-delay:.45s}
.wave i:nth-child(5){height:34%;animation-delay:.6s}

@keyframes eq{0%,100%{transform:scaleY(.55)}50%{transform:scaleY(1)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes ripple{0%{transform:scale(.72);opacity:.6}100%{transform:scale(1.55);opacity:0}}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.3}}
@keyframes pop{from{opacity:0;transform:translateY(-8px)}to{opacity:1}}
@keyframes fadein{from{opacity:0}to{opacity:1}}

/* ============================================================
   FX — motion utilities (aurora, gradient anim, float, marquee,
   live dot, sheen, scroll progress, tilt). Reduced-motion safe:
   the global rule at top clamps animation/transition durations.
   ============================================================ */

/* animated aurora backdrop — injected once into <body> by flux-site.js */
.fx-aurora{position:fixed;left:0;right:0;top:-20%;width:100%;height:80vh;z-index:-2;pointer-events:none;
  overflow:hidden;filter:blur(90px);opacity:.5;will-change:transform,opacity}
.fx-aurora b{position:absolute;display:block;border-radius:50%;mix-blend-mode:screen}
.fx-aurora b:nth-child(1){width:46vw;height:46vw;left:-6vw;top:-8vw;
  background:radial-gradient(circle at 30% 30%,rgba(0,242,255,.55),transparent 62%);animation:auroraA 20s ease-in-out infinite}
.fx-aurora b:nth-child(2){width:42vw;height:42vw;right:-8vw;top:-4vw;
  background:radial-gradient(circle at 60% 40%,rgba(139,92,246,.55),transparent 62%);animation:auroraB 26s ease-in-out infinite}
.fx-aurora b:nth-child(3){width:34vw;height:34vw;left:32vw;top:6vw;
  background:radial-gradient(circle at 50% 50%,rgba(16,185,129,.4),transparent 64%);animation:auroraC 32s ease-in-out infinite}
@keyframes auroraA{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(6vw,4vw) scale(1.15)}}
@keyframes auroraB{0%,100%{transform:translate(0,0) scale(1.05)}50%{transform:translate(-5vw,3vw) scale(.9)}}
@keyframes auroraC{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-4vw,-3vw) scale(1.2)}}

/* scroll progress bar — injected by flux-site.js */
.fx-progress{position:fixed;left:0;top:0;height:2px;width:0;z-index:1000;
  background:linear-gradient(90deg,var(--cyan),var(--violet));box-shadow:0 0 12px rgba(0,242,255,.6);
  transition:width .08s linear}

/* animated gradient text/underlays */
.grad-anim{background:linear-gradient(120deg,var(--cyan),var(--violet),var(--emerald),var(--cyan));
  background-size:280% 280%;-webkit-background-clip:text;background-clip:text;color:transparent;
  animation:gradShift 8s ease infinite}
@keyframes gradShift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}

/* gentle float */
.fx-float{animation:floaty 6s ease-in-out infinite}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}

/* live dot — prefix a pulsing green dot before the element's content */
.live{position:relative;display:inline-flex;align-items:center;gap:8px}
.live::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--emerald);
  box-shadow:0 0 0 0 rgba(16,185,129,.6);animation:livePulse 1.8s ease-out infinite;flex:none}
@keyframes livePulse{0%{box-shadow:0 0 0 0 rgba(16,185,129,.55)}70%{box-shadow:0 0 0 9px rgba(16,185,129,0)}100%{box-shadow:0 0 0 0 rgba(16,185,129,0)}}

/* marquee ticker */
.marquee{overflow:hidden;white-space:nowrap;-webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
.marquee-track{display:inline-flex;gap:34px;align-items:center;padding-block:12px;
  animation:marq 34s linear infinite;will-change:transform}
.marquee:hover .marquee-track{animation-play-state:paused}
@keyframes marq{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* card hover sheen — add .sheen to any element with position:relative/overflow */
.sheen{position:relative;overflow:hidden}
.sheen::after{content:"";position:absolute;top:0;left:-140%;width:60%;height:100%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.10),transparent);
  transform:skewX(-18deg);transition:left .7s ease;pointer-events:none}
.sheen:hover::after{left:150%}

/* shimmering skeleton bar */
.shimmer{background:linear-gradient(90deg,rgba(255,255,255,.04),rgba(255,255,255,.12),rgba(255,255,255,.04));
  background-size:200% 100%;animation:shim 1.6s linear infinite;border-radius:6px}
@keyframes shim{from{background-position:200% 0}to{background-position:-200% 0}}

/* reveal variants */
.reveal.rl{transform:translateX(-26px)} .reveal.rr{transform:translateX(26px)}
.reveal.rl.in,.reveal.rr.in{transform:none}
.reveal.zoom{transform:scale(.94)} .reveal.zoom.in{transform:none}

/* subtle 3d tilt target (JS sets --rx/--ry) */
.tilt{transform:perspective(800px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));
  transition:transform .18s ease;transform-style:preserve-3d}

/* count-flash used by live tick numbers */
.flash-up{animation:flU .6s ease} .flash-dn{animation:flD .6s ease}
@keyframes flU{0%{color:var(--emerald)}100%{}} @keyframes flD{0%{color:var(--crimson)}100%{}}
