/* ===== FalconX v6 — motion & effects, fluid typography, article reader, form popup, toast =====
 * Ported from falconx_website_v6.html. Changes vs the source:
 *  - modal form class renamed .fx-form -> .fx-mform (the contact block already uses .fx-form)
 *  - v6 mobile menu dropped (the theme has its own hamburger, same 1040px breakpoint)
 *  - light-theme overrides live in theme-light.css
 */
/* ===== FalconX — Motion & Effects layer (Neo4j-inspired) ===== */
/* scroll progress */
.fx-progress{position:fixed;top:0;left:0;height:3px;width:0;background:linear-gradient(90deg,var(--red),var(--red2),#fff);z-index:500;box-shadow:0 0 12px rgba(255,90,99,.8);transition:width .08s linear}
/* nav shrink */
header.nav{transition:background .3s,box-shadow .3s,border-color .3s}
header.nav.scrolled{background:rgba(8,18,34,.92);box-shadow:0 10px 40px rgba(0,0,0,.45);border-bottom-color:rgba(255,255,255,.12)}
header.nav.scrolled .nav-inner{height:62px}
.nav-inner{transition:height .3s}
.nav-item>a{position:relative}
.nav-item>a::after{content:"";position:absolute;left:11px;right:11px;bottom:6px;height:2px;border-radius:2px;background:linear-gradient(90deg,var(--red2),#fff);transform:scaleX(0);transform-origin:left;transition:transform .28s cubic-bezier(.2,.7,.2,1)}
.nav-item:hover>a::after{transform:scaleX(1)}
/* hero graph canvas sits above gradient */
.hero .fx-net{opacity:1}
/* floating glow orbs (parallax) */
.fx-orb{position:absolute;border-radius:50%;filter:blur(60px);pointer-events:none;opacity:.55;mix-blend-mode:screen;will-change:transform}
.fx-orb.r{background:radial-gradient(circle,rgba(225,29,44,.55),transparent 65%)}
.fx-orb.b{background:radial-gradient(circle,rgba(127,178,255,.4),transparent 65%)}
.fx-orb.w{background:radial-gradient(circle,rgba(255,255,255,.18),transparent 65%)}
.hero,.loop-sec,.oss,.finalcta,.platform{position:relative;overflow:hidden}
/* word reveal */
.fx-words .w{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.08em;margin-bottom:-.08em}
.fx-words .w>span{display:inline-block;transform:translateY(110%);opacity:0;transition:transform .9s cubic-bezier(.2,.75,.2,1),opacity .6s;transition-delay:calc(var(--i)*.07s)}
.fx-words.on .w>span{transform:none;opacity:1}
.hero .fx-words .w>span{transition-delay:calc(.15s + var(--i)*.08s)}
/* reveal with blur + stagger */
.reveal{filter:blur(6px)}
.reveal.in{filter:blur(0)}
.fx-stagger>*{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}
.fx-stagger.in>*{opacity:1;transform:none}
.fx-stagger.in>*:nth-child(1){transition-delay:.05s}.fx-stagger.in>*:nth-child(2){transition-delay:.15s}.fx-stagger.in>*:nth-child(3){transition-delay:.25s}.fx-stagger.in>*:nth-child(4){transition-delay:.35s}.fx-stagger.in>*:nth-child(5){transition-delay:.45s}.fx-stagger.in>*:nth-child(6){transition-delay:.55s}
/* spotlight cards (mouse-follow radial light + gradient border glow) */
.fx-spot{position:relative;overflow:hidden;--mx:50%;--my:50%}
.fx-spot::after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(360px circle at var(--mx) var(--my),rgba(255,90,99,.16),transparent 60%);opacity:0;transition:opacity .35s}
.fx-spot:hover::after{opacity:1}
.fx-spot::before{content:"";position:absolute;inset:-1px;border-radius:inherit;padding:1px;background:radial-gradient(260px circle at var(--mx) var(--my),rgba(255,120,128,.9),rgba(127,178,255,.35) 40%,transparent 70%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .35s;pointer-events:none}
.fx-spot:hover::before{opacity:1}
.fx-spot>*{position:relative;z-index:1}
/* 3D tilt */
.fx-tilt{transform-style:preserve-3d;transition:transform .18s ease-out}
/* magnetic + shine buttons */
.btn-primary{position:relative;overflow:hidden}
.btn-primary::after{content:"";position:absolute;top:-50%;left:-70%;width:40%;height:200%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);transform:skewX(-20deg);transition:left .6s}
.btn-primary:hover::after{left:130%}
.fx-mag{transition:transform .25s cubic-bezier(.2,.7,.2,1),box-shadow .2s}
/* marquee for standards strip */
.std-row.fx-marquee{display:flex;flex-wrap:nowrap;justify-content:flex-start;gap:14px;width:max-content;animation:fxmarq 38s linear infinite}
.strip-inner:hover .std-row.fx-marquee{animation-play-state:paused}
.fx-marquee-wrap{overflow:hidden;position:relative;mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}
@keyframes fxmarq{to{transform:translateX(-50%)}}
.std{transition:.2s}.std:hover{border-color:var(--red2);transform:translateY(-2px);box-shadow:0 10px 24px rgba(225,29,44,.2)}
/* stat cards: subtle animated gradient border */
.stat{position:relative}
.stat::before{content:"";position:absolute;inset:-1px;border-radius:19px;padding:1px;background:conic-gradient(from var(--a,0deg),transparent 0 70%,rgba(255,90,99,.9) 85%,transparent 100%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:fxspin 6s linear infinite;opacity:.9;pointer-events:none}
@property --a{syntax:'<angle>';inherits:false;initial-value:0deg}
@keyframes fxspin{to{--a:360deg}}
/* loop core pulse + node hover */
.loop-svg .node{transition:transform .25s;transform-box:fill-box;transform-origin:center}
.loop-svg .node:hover{transform:scale(1.06)}
.fx-core-pulse{animation:fxcore 3.2s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
@keyframes fxcore{0%,100%{opacity:.55;transform:scale(1)}50%{opacity:1;transform:scale(1.035)}}
/* cursor glow */
.fx-cursor{position:fixed;left:0;top:0;width:420px;height:420px;border-radius:50%;pointer-events:none;z-index:1;background:radial-gradient(circle,rgba(255,90,99,.10),transparent 60%);transform:translate(-50%,-50%);transition:opacity .4s;opacity:0;mix-blend-mode:screen}
body.fx-has-cursor .fx-cursor{opacity:1}
/* back to top */
.fx-top{position:fixed;left:22px;bottom:22px;z-index:290;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.06);border:1px solid var(--line2);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;visibility:hidden;transform:translateY(10px);transition:.3s;backdrop-filter:blur(8px)}
.fx-top.show{opacity:1;visibility:visible;transform:none}
.fx-top:hover{border-color:var(--red2);color:var(--red2)}
.fx-top svg{width:18px;height:18px}
/* section headings underline sweep */
.shead h2{position:relative}
/* smooth icon micro-interactions */
.vp .ic,.feat .ic,.ip .ic{transition:transform .3s cubic-bezier(.2,.7,.2,1),box-shadow .3s}
.vp:hover .ic,.feat:hover .ic,.ip:hover .ic{transform:translateY(-3px) rotate(-4deg);box-shadow:0 10px 22px rgba(225,29,44,.3)}
/* codebox blinking caret */
.codebox .fx-caret{display:inline-block;width:8px;height:14px;background:#ff9e9e;vertical-align:-2px;margin-left:2px;animation:fxblink 1s steps(1) infinite}
@keyframes fxblink{50%{opacity:0}}
/* page load */
body{animation:fxpage .8s ease both}
@keyframes fxpage{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.fx-words .w>span{transform:none;opacity:1}.reveal{filter:none}.fx-stagger>*{opacity:1;transform:none}.std-row.fx-marquee{animation:none}.stat::before{animation:none}}
@media(max-width:980px){.fx-cursor{display:none}}


/* ===== TYPOGRAPHY FIT & UNIFICATION (v5) ===== */
html{font-size:16px}
body,button,input,textarea,select,.btn,.wordmark,.std,.tagchip,.eyebrow,.fxc,.fxc *{font-family:var(--font)}
svg text{font-family:var(--font)!important}
h1,h2,h3,h4,p,li,span,a,b,div{overflow-wrap:anywhere}
h1,h2,h3,h4{hyphens:auto}
.codebox,.codebox *,code,pre,kbd,.fxc-bub code,.fxc-bub pre{font-family:var(--mono)!important}
/* fluid type scale */
.hero h1{font-size:clamp(32px,4.6vw,60px)}
.hero p.sub{font-size:clamp(15px,1.5vw,19px)}
.shead h2{font-size:clamp(26px,3vw,38px)}
.shead p,.lead{font-size:clamp(14.5px,1.35vw,17.5px)}
.oss h2,.finalcta h2{font-size:clamp(26px,3vw,36px)}
.eyebrow{font-size:clamp(11px,.95vw,12.5px);letter-spacing:.14em}
/* nav: never overflow */
.nav-inner{gap:12px}
.brand{flex:none}
.nav-links{flex:1;min-width:0;justify-content:center;gap:0}
.nav-item>a{font-size:14px;padding:9px 9px}
.nav-cta{flex:none;gap:8px}
.nav-cta .btn{padding:10px 16px;font-size:14px}
.lang-btn{padding:7px 9px;font-size:13px}
@media(max-width:1180px){.nav-cta .btn-line{display:none}}

/* hero stats */
.stat{padding:22px 20px 18px}
.stat .n{font-size:clamp(30px,3.3vw,44px)}
.stat .l{font-size:clamp(12.5px,1.05vw,14.5px);line-height:1.35}
.stat .s{font-size:clamp(11px,.9vw,12.5px)}
/* product cards: pill in flow, smaller text */
.prod{padding:24px 22px}
.prod .pill{position:static;align-self:flex-start;margin-bottom:12px}
.prod .k{padding-right:0;font-size:11px}
.prod h3{font-size:clamp(17px,1.55vw,22px)}
.prod .tag{font-size:clamp(13px,1.05vw,14.5px);margin-bottom:14px}
.prod li{font-size:clamp(12.5px,1.05vw,14px)}
.prod .more{font-size:13.5px}
/* integration points & code */
.ip{padding:16px}
.ip h4{font-size:clamp(13.5px,1.1vw,15px)}
.ip p{font-size:clamp(12px,.95vw,13.5px)}
.codebox{font-size:clamp(11.5px,.95vw,13px);padding:16px 18px;overflow-x:auto}
/* loop section */
.loop-side h4{font-size:clamp(14px,1.15vw,16px)}
.loop-side p{font-size:clamp(12.5px,1.05vw,14px)}
.loop-side .pt{gap:12px;padding:13px 0}
.lk{padding:12px}
.lk b{font-size:clamp(14px,1.2vw,17px);line-height:1.2;margin-bottom:3px}
.lk span{font-size:clamp(11px,.9vw,12px);line-height:1.35}
@media(max-width:1180px){.loop-kpis{grid-template-columns:1fr}}
.loop-legend{font-size:12px}
/* value props & features */
.vp{padding:22px 18px}
.vp h3{font-size:clamp(15px,1.3vw,18px)}
.vp p{font-size:clamp(12.5px,1.05vw,14px)}
.feat{padding:22px 20px}
.feat h3{font-size:clamp(15px,1.25vw,17px)}
.feat p{font-size:clamp(12.5px,1.02vw,13.5px)}
/* platform, solutions, research */
.card{padding:22px 20px}
.card h3{font-size:clamp(15px,1.3vw,17.5px)}
.card p{font-size:clamp(12.5px,1.02vw,13.5px)}
.card .k{font-size:12.5px}
.sol{padding:20px}
.sol h3{font-size:clamp(15px,1.3vw,17px)}
.sol p{font-size:clamp(12.5px,1.02vw,13.5px)}
.res{padding:20px}
.res h3{font-size:clamp(15px,1.25vw,17px)}
.res p{font-size:clamp(12.5px,1.02vw,13.5px)}
/* partner block */
.partner{padding:32px}
.partner h3{font-size:clamp(19px,2vw,26px)}
.partner p,.partner li{font-size:clamp(13px,1.1vw,15px)}
.partner .box p{font-size:clamp(12.5px,1vw,14px)}
/* strip, announce, footer */
.std{font-size:13px;padding:9px 15px}
.announce{font-size:clamp(12px,1vw,13.5px)}
footer li{font-size:13.5px}
.foot-bottom{font-size:12.5px}
/* chat */
.fxc-hint{padding:9px 16px 9px 13px;width:max-content}
@media(max-width:1100px){.fxc-hint{display:none}}
.fxc-bub{font-size:13.5px}
/* mobile */
@media(max-width:600px){
  .wrap{padding:0 16px}
  .nav-cta .btn-primary{display:none}
  .nav-inner{height:64px;gap:8px}
  .nav-cta .btn{padding:9px 12px;font-size:13px}
  .section{padding:64px 0}
  .hero-inner{padding:64px 0 36px}
  .hero h1{font-size:clamp(28px,8.5vw,36px)}
  .stat .n{font-size:34px}
  .prod,.card,.sol,.res,.vp,.feat{padding:18px}
  .partner{padding:22px}
}


/* ===== Interactions layer CSS: reader, modal, forms, toast ===== */
.fx-reader{position:fixed;inset:0;z-index:400;background:#0A1628;display:flex;flex-direction:column;opacity:0;visibility:hidden;transform:translateY(24px);transition:.32s cubic-bezier(.2,.7,.2,1)}
body.fx-reader-open .fx-reader{opacity:1;visibility:visible;transform:none}
body.fx-reader-open,body.fx-modal-open{overflow:hidden}
.fx-reader-bar{position:relative;height:56px;display:flex;align-items:center;justify-content:flex-end;padding:0 18px;border-bottom:1px solid var(--line);background:rgba(8,18,34,.9);backdrop-filter:blur(12px)}
.fx-reader-prog{position:absolute;left:0;bottom:-1px;height:2px;width:0;background:linear-gradient(90deg,var(--red),var(--red2));transition:width .1s linear}
.fx-ib{width:36px;height:36px;border-radius:9px;border:1px solid var(--line2);background:transparent;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.fx-ib svg{width:18px;height:18px}.fx-ib:hover{border-color:var(--red2);color:var(--red2)}
.fx-reader-scroll{flex:1;overflow-y:auto;scroll-behavior:smooth}
.fx-article{max-width:1080px;margin:0 auto;padding:48px 28px 80px}
.fx-art-head{max-width:800px;margin:0 auto 40px;text-align:center}
.fx-art-cat{font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--red2)}
.fx-art-head h1{font-size:clamp(28px,3.6vw,44px);margin:14px 0 14px;line-height:1.12}
.fx-art-lead{font-size:clamp(15px,1.4vw,19px);color:var(--muted)}
.fx-art-tags{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:18px 0}
.fx-art-tags span{font-size:12px;font-weight:600;background:rgba(255,255,255,.05);border:1px solid var(--line2);border-radius:20px;padding:5px 11px;color:#fff}
.fx-art-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.fx-art-grid{display:grid;grid-template-columns:220px 1fr;gap:40px;align-items:start}
.fx-art-toc{position:sticky;top:10px;background:rgba(255,255,255,.035);border:1px solid var(--line);border-radius:14px;padding:16px}
.fx-art-toc b{display:block;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:10px}
.fx-art-toc a{display:block;font-size:13.5px;padding:6px 0;color:var(--text);border-left:2px solid transparent;padding-left:10px;margin-left:-10px}
.fx-art-toc a:hover{color:#fff;border-left-color:var(--red2)}
.fx-art-body{font-size:clamp(15px,1.15vw,17px);line-height:1.75;color:var(--text);max-width:720px}
.fx-art-body h2{font-size:clamp(20px,1.9vw,26px);margin:34px 0 12px;scroll-margin-top:20px}
.fx-art-body h3{font-size:clamp(16px,1.4vw,19px);margin:22px 0 8px;color:#fff}
.fx-art-body p{margin:0 0 14px}
.fx-art-body ul{margin:0 0 14px 20px}.fx-art-body li{margin-bottom:6px}
.fx-art-body code{font-family:var(--mono);font-size:.9em;background:rgba(0,0,0,.35);padding:2px 6px;border-radius:5px;color:#ff9e9e}
.fx-art-body pre{font-family:var(--mono);font-size:13px;background:#07111F;border:1px solid var(--line2);border-radius:12px;padding:14px 16px;overflow-x:auto;margin:14px 0;color:#BCD2EA;line-height:1.6;white-space:pre-wrap;word-break:break-word}
.fx-art-body table{width:100%;border-collapse:collapse;margin:14px 0;font-size:14px}
.fx-art-body th,.fx-art-body td{border:1px solid var(--line2);padding:9px 11px;text-align:left;vertical-align:top}
.fx-art-body th{background:rgba(255,255,255,.06);color:#fff}
.fx-art-body a{color:var(--red2);text-decoration:underline;text-underline-offset:3px}
.fx-art-body em{color:#fff;font-style:italic}
.fx-art-author{display:flex;gap:14px;align-items:center;margin-top:40px;padding:18px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.035)}
.fx-art-author img{width:46px;height:46px;border-radius:50%}
.fx-art-author b{display:block;color:#fff}.fx-art-author span{font-size:13px;color:var(--muted)}
.fx-art-nav{display:flex;justify-content:space-between;gap:16px;margin-top:40px;padding-top:24px;border-top:1px solid var(--line);flex-wrap:wrap}
.fx-art-nav a{font-weight:700;color:#fff;font-size:14.5px;max-width:48%}
.fx-art-nav a:hover{color:var(--red2)}
@media(max-width:900px){.fx-art-grid{grid-template-columns:1fr}.fx-art-toc{position:static}.fx-art-nav a{max-width:100%}}

.fx-modal-ov{position:fixed;inset:0;z-index:420;background:rgba(5,12,24,.72);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;padding:20px;opacity:0;visibility:hidden;transition:.22s}
body.fx-modal-open .fx-modal-ov{opacity:1;visibility:visible}
.fx-modal{position:relative;background:#0F2040;border:1px solid var(--line2);border-radius:20px;width:100%;max-width:620px;max-height:90vh;overflow:auto;box-shadow:0 30px 80px rgba(0,0,0,.6);transform:translateY(14px) scale(.98);transition:.26s cubic-bezier(.2,.7,.2,1)}
body.fx-modal-open .fx-modal{transform:none}
.fx-modal-x{position:absolute;top:14px;right:14px;z-index:2}
.fx-modal-body{padding:30px 30px 26px}
.fx-form-head h3{font-size:clamp(20px,2vw,24px);margin:8px 0 8px;padding-right:40px}
.fx-form-head p{font-size:14px;color:var(--muted);margin-bottom:18px}
.fx-mform{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px}
.fx-f{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}
.fx-f span i{color:var(--red2);font-style:normal}
.fx-f input,.fx-f textarea,.fx-f select{background:rgba(255,255,255,.05);border:1px solid var(--line2);border-radius:10px;color:#fff;padding:10px 12px;font-size:14px;font-family:var(--font);outline:none;transition:.15s;width:100%}
.fx-f input:focus,.fx-f textarea:focus,.fx-f select:focus{border-color:var(--red2);box-shadow:0 0 0 3px rgba(225,29,44,.18)}
.fx-f select option{background:#0F2040}
.fx-f:has(textarea),.fx-f.fx-check,.fx-form-actions,.fx-form-note,.fx-f:has(input[name=doc]){grid-column:1/-1}
.fx-check{flex-direction:row;align-items:flex-start;gap:10px}
.fx-check input{width:16px;height:16px;margin-top:3px;accent-color:var(--red)}
.fx-form-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}
.fx-form-note{font-size:12.5px;color:var(--faint)}.fx-form-note a{color:var(--red2)}
.fx-success{text-align:center;padding:10px 0}
.fx-success-ic{width:64px;height:64px;border-radius:50%;background:rgba(61,214,140,.15);color:var(--green);display:flex;align-items:center;justify-content:center;margin:0 auto 16px}
.fx-success-ic svg{width:30px;height:30px}
.fx-success h3{font-size:22px;margin-bottom:8px}.fx-success p{color:var(--muted);font-size:14.5px;margin-bottom:18px}
.fx-success .fx-form-actions{justify-content:center}
@media(max-width:560px){.fx-mform{grid-template-columns:1fr}.fx-modal-body{padding:22px 18px}}

.fx-toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,20px);background:#0F2040;border:1px solid var(--line2);color:#fff;padding:10px 16px;border-radius:12px;font-size:13.5px;font-weight:600;z-index:500;opacity:0;visibility:hidden;transition:.25s;box-shadow:0 14px 40px rgba(0,0,0,.5)}
.fx-toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}
.res:focus-visible,.prod:focus-visible{outline:2px solid var(--red2);outline-offset:3px}


/* ===== theme integration ===== */
/* nav collapses to the hamburger at the same width v6 uses */
@media(max-width:1040px){
  .nav-links{display:none}
  .nav-toggle{display:inline-flex}
  .nav-open .nav-links{display:flex;flex-direction:column;align-items:stretch;gap:2px;position:absolute;top:100%;left:0;right:0;background:#0B1A33;border-bottom:1px solid var(--line2);padding:12px 20px 20px;max-height:calc(100vh - 72px);overflow-y:auto;box-shadow:0 24px 50px rgba(0,0,0,.45)}
  .nav-open .nav-item>a{padding:12px 10px;font-size:16px}
  .nav-open .nav-item .caret{margin-left:auto}
  .nav-open .dropdown{position:static;opacity:1;visibility:visible;transform:none;box-shadow:none;border:0;background:transparent;min-width:0;padding:0 0 6px 10px}
  .nav-open .nav-item>a::after{display:none}
}
/* product pill is in the flow now (v6) — the earlier max-width workaround is not needed */
.prod .pill+.k{max-width:none}
/* new block types get the same motion treatment */
.fx-plan,.fx-quote{transition:.22s}
/* research cards that open the reader */
.res[data-article]{cursor:pointer}
/* reader logo */
.fx-art-author img{object-fit:cover}
/* single article page (same layout as the reader) */
.fx-single .fx-article{padding-top:56px}
.fx-art-thumb{max-width:960px;margin:0 auto 36px}
.fx-art-thumb img{width:100%;height:auto;border-radius:18px;border:1px solid var(--line2)}
.fx-art-comments{max-width:720px;margin:40px 0 0 auto}
.fx-art-nav span{display:inline}
.fx-mform .fx-form-msg{grid-column:1/-1;color:var(--red2);font-size:13.5px}
.fx-mform .fx-form-msg:empty{display:none}
body.fx-loading{cursor:progress}
