/* site.css — ObserverLauncher landing. Field Station / Signal Lab DNA: black/cyan, hairline
   borders, tiny radii, mono eyebrows. Signature web-native touches: WebGL signal field, boot
   sequence, section rail, choreographed hero, cursor spotlight, corner-bracket focus. */

:root{
  --bg:#05070A; --bg-2:#0A0E13;
  --panel:#0F141A; --panel-raised:#141B22; --panel-hover:#18202B;
  --field:#080A0D; --field-border:#1E2A36;
  --border:#1A2735; --border-strong:#223449; --border-hover:#2A4158;
  --text:#FFFFFF; --text-muted:#E6EDF3; --text-dim:#B8C2CC;
  --accent:#00E5FF; --accent-dim:#00B8CC; --accent-weak:rgba(0,229,255,.12); --accent-glow:rgba(0,229,255,.45); --accent-ink:#00141A;
  --danger:#FF3B5C; --success:#00E5A0; --warning:#FFD23F;
  --font-ui:Inter, system-ui, -apple-system, sans-serif;
  --font-mono:'JetBrains Mono', ui-monospace, monospace;
  --r-sm:2px; --r:3px; --r-lg:4px;
  --ease-out:cubic-bezier(.2,.7,.3,1);
  --ease-emph:cubic-bezier(.34,1.4,.64,1);
  --dur-fast:120ms; --dur-mid:220ms; --dur-slow:420ms;
  --maxw:1180px; --mx:50%; --my:30%;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-ui);
  font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden}
body.is-booting{overflow:hidden}
a{color:inherit;text-decoration:none}
h1,h2,h3,p,ul{margin:0}
ul{padding:0;list-style:none}
b{font-weight:600}
::selection{background:var(--accent-weak);color:#fff}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--r-sm)}

.eyebrow{display:flex;align-items:center;gap:9px;font:700 11px var(--font-mono);letter-spacing:.18em;color:var(--accent);text-transform:uppercase}
.eyebrow-tick{width:14px;height:1px;background:var(--accent);box-shadow:0 0 6px var(--accent-glow)}

/* ============ BOOT SEQUENCE ============ */
.boot{position:fixed;inset:0;z-index:200;background:var(--bg);display:grid;place-items:center;overflow:hidden;
  transition:opacity .55s var(--ease-out),visibility .55s}
.boot.done{opacity:0;visibility:hidden}
.boot::before{content:'';position:absolute;inset:0;background:radial-gradient(600px 300px at 50% 46%, rgba(0,229,255,.10), transparent 62%);animation:bootGlow 2.6s var(--ease-out) infinite}
@keyframes bootGlow{0%,100%{opacity:.55}50%{opacity:1}}
.boot::after{content:'';position:absolute;left:0;right:0;height:1px;top:0;background:linear-gradient(90deg,transparent,var(--accent-glow),transparent);animation:bootScan 2.4s linear infinite}
@keyframes bootScan{from{top:8%}to{top:92%}}
.boot-inner{position:relative;display:flex;flex-direction:column;align-items:center;gap:18px;width:min(80vw,420px)}
.boot-mark{font:700 15px var(--font-mono);letter-spacing:.32em;color:var(--text);opacity:0;animation:bootMark .55s var(--ease-out) .1s forwards}
.boot-mark span{color:var(--accent);margin-left:.4em}
@keyframes bootMark{from{opacity:0;letter-spacing:.5em}to{opacity:1;letter-spacing:.32em}}
.boot-bar{width:100%;height:2px;background:var(--border);border-radius:2px;overflow:hidden;opacity:0;animation:bootMark .4s var(--ease-out) .3s forwards}
.boot-bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent-dim),var(--accent));box-shadow:0 0 10px var(--accent-glow);transition:width .45s var(--ease-out)}
.boot-status{font:600 10px var(--font-mono);letter-spacing:.12em;color:var(--text-dim);text-transform:uppercase;opacity:0;animation:bootMark .4s var(--ease-out) .45s forwards;min-height:12px}
.boot-skip{position:absolute;bottom:26px;font:600 10px var(--font-mono);letter-spacing:.1em;color:var(--text-dim);opacity:.5;text-transform:uppercase}

/* ============ SIGNAL FIELD + SCANLINE ============ */
#field{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:.5;transition:opacity .6s var(--ease-out)}
.field-fallback{position:fixed;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(1200px 700px at 18% -10%, rgba(0,229,255,.06), transparent 60%),radial-gradient(1000px 800px at 100% 110%, rgba(0,229,255,.04), transparent 55%)}
#field[data-on="1"] + .field-fallback{display:none}
.scanline{position:fixed;inset:0;z-index:1;pointer-events:none;opacity:.16;
  background:repeating-linear-gradient(to bottom, rgba(0,229,255,.028) 0 1px, transparent 1px 3px);
  -webkit-mask-image:radial-gradient(80% 70% at 50% 40%, #000, transparent 90%);mask-image:radial-gradient(80% 70% at 50% 40%, #000, transparent 90%)}

/* cursor spotlight (JS sets --mx/--my on body) */
body::after{content:'';position:fixed;inset:0;z-index:1;pointer-events:none;opacity:0;transition:opacity .4s;
  background:radial-gradient(420px 420px at var(--mx) var(--my), rgba(0,229,255,.03), transparent 60%)}
body.spotlight::after{opacity:1}

/* ============ SECTION RAIL ============ */
.rail{position:fixed;right:26px;top:50%;transform:translateY(-50%);z-index:40;display:flex;flex-direction:column;align-items:flex-end;gap:14px;pointer-events:none}
.rail-idx{font:700 10px var(--font-mono);letter-spacing:.12em;color:var(--text-dim);opacity:.7}
.rail-list{display:flex;flex-direction:column;gap:9px;align-items:flex-end}
.rail-list li{display:flex;align-items:center;gap:9px;pointer-events:auto;cursor:pointer;color:var(--text-dim);transition:color var(--dur-fast)}
.rail-list li .rl-name{font:600 10px var(--font-mono);letter-spacing:.08em;text-transform:uppercase;opacity:0;transform:translateX(6px);transition:opacity var(--dur-mid),transform var(--dur-mid);white-space:nowrap}
.rail-list li .rl-bar{width:16px;height:1px;background:var(--border-strong);transition:width var(--dur-mid) var(--ease-out),background var(--dur-mid)}
.rail-list li:hover .rl-name{opacity:1;transform:none}
.rail-list li:hover .rl-bar,.rail-list li.active .rl-bar{background:var(--accent)}
.rail-list li.active{color:var(--text)}
.rail-list li.active .rl-bar{width:26px;box-shadow:0 0 8px var(--accent-glow)}
.rail-list li.active .rl-name{opacity:1;transform:none;color:var(--accent)}
.rl-dot{width:4px;height:4px;border-radius:50%;background:var(--border-strong);transition:background var(--dur-fast),box-shadow var(--dur-fast)}
.rail-list li.active .rl-dot{background:var(--accent);box-shadow:0 0 8px var(--accent-glow)}

/* software marquee */
.marquee{margin-top:22px;overflow:hidden;border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:14px 0;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.marquee-track{display:flex;gap:38px;width:max-content;animation:marquee 34s linear infinite}
.marquee:hover .marquee-track{animation-play-state:paused}
.marquee-track span{font:600 13px var(--font-mono);letter-spacing:.06em;color:var(--text-dim);white-space:nowrap;transition:color var(--dur-fast)}
.marquee-track span:hover{color:var(--accent)}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){.marquee-track{animation:none}}
@media(max-width:1100px){.rail{display:none}}

/* ============ HEADER ============ */
.site-head{position:fixed;top:0;left:0;right:0;z-index:50;display:flex;align-items:center;gap:24px;
  padding:0 clamp(16px,4vw,40px);height:64px;
  background:rgba(5,7,10,.72);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);
  transform:translateY(-100%);transition:transform .6s var(--ease-out) .1s}
body.booted .site-head{transform:none}
.brand{display:flex;align-items:center;gap:11px;flex-shrink:0}
.brand-mark{width:34px;height:34px;display:grid;place-items:center;border:1px solid var(--border);border-radius:var(--r-sm);color:var(--accent);background:var(--panel)}
.brand-mark svg,.brand-mark img{width:22px;height:22px;object-fit:contain;display:block}
.brand-text b{display:block;font-size:15px;letter-spacing:-.01em;line-height:1.1}
.brand-text small{display:block;font:700 8.5px var(--font-mono);letter-spacing:.2em;color:var(--text-dim);margin-top:3px}
.site-nav{display:flex;gap:22px;margin-left:auto}
.site-nav a{font-size:13.5px;color:var(--text-muted);transition:color var(--dur-fast);position:relative}
.site-nav a:hover{color:var(--text)}
.site-nav a::after{content:'';position:absolute;left:0;right:100%;bottom:-4px;height:1px;background:var(--accent);transition:right var(--dur-mid) var(--ease-out)}
.site-nav a:hover::after{right:0}
.head-actions{display:flex;align-items:center;gap:10px;flex-shrink:0}

/* mobile nav toggle + menu */
.nav-toggle{display:none;width:38px;height:34px;flex-direction:column;justify-content:center;gap:5px;padding:0 9px;background:var(--panel);border:1px solid var(--border);border-radius:var(--r-sm);cursor:pointer;transition:border-color var(--dur-fast)}
.nav-toggle:hover{border-color:var(--border-strong)}
.nav-toggle span{display:block;height:2px;background:var(--text-muted);border-radius:2px;transition:transform .25s var(--ease-out),opacity .25s var(--ease-out)}
.nav-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.nav-toggle[aria-expanded="true"] span:nth-child(2){opacity:0}
.nav-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
.mobile-menu{position:fixed;top:64px;left:0;right:0;z-index:49;background:rgba(8,11,15,.98);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);padding:10px 16px 18px;display:flex;flex-direction:column;transform:translateY(-14px);opacity:0;pointer-events:none;transition:opacity .2s var(--ease-out),transform .2s var(--ease-out)}
.mobile-menu.open{opacity:1;transform:none;pointer-events:auto}
.mobile-menu a{padding:13px 6px;font-size:15px;color:var(--text-muted);border-bottom:1px solid var(--border);transition:color var(--dur-fast),padding-left var(--dur-fast)}
.mobile-menu a:last-child{border-bottom:0}
.mobile-menu a:hover,.mobile-menu a:active{color:var(--accent);padding-left:12px}
@media (max-width:900px){.nav-toggle{display:flex}.site-nav{display:none}}

/* language */
.lang{position:relative}
.lang-btn{position:relative;display:flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--border);color:var(--text-muted);
  font:600 12px var(--font-mono);letter-spacing:.06em;padding:7px 10px;border-radius:var(--r-sm);cursor:pointer;transition:border-color var(--dur-fast),color var(--dur-fast)}
.lang-btn svg{flex-shrink:0}
.lang-btn:hover{border-color:var(--border-strong);color:var(--text)}
.lang-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:180px;background:var(--panel-raised);border:1px solid var(--border-strong);
  border-radius:var(--r);padding:5px;box-shadow:0 18px 40px -16px rgba(0,0,0,.7);z-index:60;animation:menuIn var(--dur-mid) var(--ease-out)}
@keyframes menuIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.lang-menu li{display:flex;justify-content:space-between;gap:14px;padding:8px 11px;border-radius:var(--r-sm);cursor:pointer;font-size:13.5px;color:var(--text-muted);transition:background var(--dur-fast),color var(--dur-fast)}
.lang-menu li:hover{background:var(--panel-hover);color:var(--text)}
.lang-menu li[aria-selected="true"]{color:var(--accent)}
.lang-menu li span{font:600 10px var(--font-mono);color:var(--text-dim)}

/* ============ BUTTONS ============ */
.btn{display:inline-flex;align-items:center;gap:8px;font:600 13.5px var(--font-ui);padding:9px 16px;border:1px solid var(--border-strong);border-radius:var(--r-sm);
  background:var(--panel);color:var(--text);cursor:pointer;transition:background var(--dur-fast),border-color var(--dur-fast),box-shadow var(--dur-fast),color var(--dur-fast);position:relative}
.btn:hover{background:var(--panel-hover);border-color:var(--border-hover)}
.btn:active{transform:scale(.985)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.primary:hover{background:#4defff;border-color:#4defff;box-shadow:0 0 24px -6px var(--accent-glow)}
.btn.ghost{background:transparent}
.btn.lg{padding:13px 24px;font-size:15px}

/* ============ HERO ============ */
main{position:relative;z-index:1}
/* readability scrim: darkens the centre column so text always sits on a calm field, above the
   WebGL/scanline layers but below the content. The ambient effect stays at the edges. */
main::before{content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(120% 85% at 50% 22%, rgba(5,7,10,.42), rgba(5,7,10,.86) 74%)}
.hero{max-width:var(--maxw);margin:0 auto;padding:150px clamp(16px,4vw,40px) 40px;min-height:100vh;display:flex;flex-direction:column;justify-content:center;position:relative}
@supports (height:100svh){.hero{min-height:100svh}}
.hero-grid{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.hero-grid span{position:absolute;background:var(--border);opacity:.28}
.hero-grid span:nth-child(1){left:20%;top:0;bottom:0;width:1px}
.hero-grid span:nth-child(2){left:60%;top:0;bottom:0;width:1px}
.hero-grid span:nth-child(3){top:32%;left:0;right:0;height:1px}
.hero-grid span:nth-child(4){top:68%;left:0;right:0;height:1px}
/* two-column hero: text left, app right. Grid (not absolute) so they can never overlap. */
.hero-main{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,0.85fr);gap:48px;align-items:center;width:100%;position:relative;z-index:1}
.hero-inner{max-width:720px;position:relative}
/* one-shot opening sweep across the hero after boot */
.hero-sweep{position:absolute;inset:0;pointer-events:none;z-index:3;overflow:hidden}
.hero-sweep::after{content:'';position:absolute;top:0;bottom:0;width:2px;left:-12%;opacity:0;background:linear-gradient(180deg,transparent,var(--accent),transparent);box-shadow:0 0 34px var(--accent-glow)}
body.booted .hero-sweep::after{animation:sweepAcross 1.15s var(--ease-out) .3s 1}
@keyframes sweepAcross{0%{left:-12%;opacity:0}12%{opacity:.95}100%{left:112%;opacity:0}}
.hero h1{font-size:clamp(38px,6.4vw,76px);line-height:1.02;letter-spacing:-.035em;margin:20px 0 22px;font-weight:700;
  clip-path:inset(0 100% 0 0);transition:opacity .7s var(--ease-out),transform .7s var(--ease-out),clip-path 1s var(--ease-out) .1s}
body.booted .hero h1{clip-path:inset(0 0 0 0)}
.hero-lead{font-size:clamp(16px,1.9vw,19px);color:var(--text-muted);max-width:640px;line-height:1.65}
.hero-cta{display:flex;flex-wrap:wrap;gap:12px;margin:32px 0 26px}
.hero-facts{display:flex;flex-wrap:wrap;gap:8px}
.hero-facts li{font:600 11px var(--font-mono);letter-spacing:.06em;color:var(--text-dim);border:1px solid var(--border);border-radius:999px;padding:5px 12px;background:var(--field);transition:border-color var(--dur-fast),color var(--dur-fast)}
.hero-facts li:hover{border-color:var(--accent);color:var(--text)}

/* hero floating app (3D) */
.hero-app{position:relative;justify-self:end;width:100%;max-width:620px;pointer-events:none;perspective:1400px;
  opacity:0;transform:translateX(36px) scale(.96);transition:opacity 1s var(--ease-out) .5s,transform 1.1s var(--ease-out) .5s}
body.booted .hero-app{opacity:1;transform:none}
.hero-app-frame{position:relative;border:1px solid var(--border-strong);border-radius:6px;overflow:hidden;background:var(--field);box-shadow:0 60px 140px -50px rgba(0,0,0,.9),0 0 90px -40px var(--accent-glow);transform:rotateY(-16deg) rotateX(6deg) rotateZ(-1.5deg);transition:transform .18s var(--ease-out);will-change:transform}
.hero-app-frame img{display:block;width:100%;height:auto;opacity:.94}
.hero-app-bar{display:flex;align-items:center;gap:6px;padding:9px 13px;background:var(--panel);border-bottom:1px solid var(--border)}
.ha-dot{width:9px;height:9px;border-radius:50%;background:var(--border-strong)}
.ha-title{margin-left:8px;font:600 11px var(--font-mono);color:var(--text-dim)}
.ha-live{margin-left:auto;font:700 9.5px var(--font-mono);letter-spacing:.1em;color:var(--success)}
@media(max-width:1080px){.hero-main{grid-template-columns:1fr;gap:34px}.hero-app{justify-self:center;max-width:560px}}

/* choreography: elements fade up once body.booted is set, staggered by --d */
.choreo{opacity:0;transform:translateY(18px);transition:opacity .7s var(--ease-out),transform .7s var(--ease-out)}
body.booted .choreo{opacity:1;transform:none}
body.booted .choreo[data-choreo="0"]{transition-delay:.05s}
body.booted .choreo[data-choreo="1"]{transition-delay:.16s}
body.booted .choreo[data-choreo="2"]{transition-delay:.30s}
body.booted .choreo[data-choreo="3"]{transition-delay:.42s}
body.booted .choreo[data-choreo="4"]{transition-delay:.54s}
body.booted .choreo[data-choreo="5"]{transition-delay:.70s}

/* instrument strip */
.instrument{margin-top:56px;border:1px solid var(--border);border-radius:var(--r);background:linear-gradient(180deg,var(--panel-raised),var(--panel));
  padding:16px 18px;display:flex;align-items:center;gap:26px;flex-wrap:wrap}
.pulse-wave{display:flex;gap:3px;align-items:flex-end;height:22px}
.pulse-wave i{width:3px;height:6px;background:var(--border-strong);display:block;border-radius:1px;transition:height var(--dur-fast) var(--ease-out),background var(--dur-fast)}
.pulse-wave i.on{background:var(--accent);height:20px;box-shadow:0 0 8px var(--accent-glow)}
.readouts{display:flex;gap:26px;flex-wrap:wrap;margin-left:auto}
.readout{display:flex;flex-direction:column;gap:2px;min-width:64px}
.ro-label{font:600 9.5px var(--font-mono);letter-spacing:.14em;color:var(--text-dim)}
.readout b{font:700 20px var(--font-mono);letter-spacing:-.01em;transition:color var(--dur-fast)}
.readout b.ok{color:var(--success)} .readout b.warn{color:var(--warning)} .readout b.bad{color:var(--danger)}

/* scroll cue */
.scroll-cue{position:absolute;left:50%;bottom:26px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--text-dim);z-index:2}
.scroll-cue-line{width:1px;height:34px;background:linear-gradient(180deg,transparent,var(--accent));position:relative;overflow:hidden}
.scroll-cue-line::after{content:'';position:absolute;left:0;top:-50%;width:100%;height:50%;background:var(--accent);animation:cueRun 1.8s var(--ease-out) infinite}
@keyframes cueRun{0%{top:-50%}100%{top:100%}}
.scroll-cue-label{font:700 9px var(--font-mono);letter-spacing:.2em}

/* ============ BANDS / SECTIONS ============ */
.band{max-width:var(--maxw);margin:0 auto;padding:110px clamp(16px,4vw,40px);border-top:1px solid var(--border);position:relative}
.band-head{max-width:740px;margin-bottom:48px}
.band-head h2{font-size:clamp(26px,3.8vw,42px);line-height:1.08;letter-spacing:-.025em;margin:16px 0 12px}
.band-sub{color:var(--text-dim);font-size:15px}

/* console band */
.console{max-width:960px;margin:0 auto;background:var(--field);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;box-shadow:0 30px 90px -40px rgba(0,0,0,.85);position:relative}
.console::before{content:'';position:absolute;inset:0;pointer-events:none;border-radius:var(--r);box-shadow:inset 0 0 0 1px rgba(0,229,255,.06)}
.console-head{display:flex;align-items:center;gap:10px;padding:11px 15px;border-bottom:1px solid var(--border);background:var(--panel);font-size:12.5px}
.console-head b{font-weight:600}
.console-src{margin-left:auto;font:700 9.5px var(--font-mono);letter-spacing:.14em;color:var(--accent)}
.live-dot{width:7px;height:7px;border-radius:50%;background:var(--success);box-shadow:0 0 8px var(--success);animation:blip 1.8s var(--ease-out) infinite}
@keyframes blip{0%,100%{opacity:1}50%{opacity:.35}}
.console-body{margin:0;padding:16px;font:500 12.5px var(--font-mono);line-height:1.75;color:var(--text-muted);height:300px;overflow-y:auto;white-space:pre-wrap}
.console-body .lvl{color:var(--text-dim)} .console-body .inf{color:var(--accent-dim)} .console-body .ok{color:var(--success)} .console-body .wrn{color:var(--warning)} .console-body .cmd{color:var(--accent)}
.console-input{display:flex;align-items:center;gap:8px;padding:11px 15px;border-top:1px solid var(--border);background:var(--panel)}
.console-input .prompt{color:var(--accent);font:700 14px var(--font-mono)}
.console-input input{flex:1;background:transparent;border:0;outline:0;color:var(--text);font:500 13px var(--font-mono)}
.console-input input::placeholder{color:var(--text-dim)}
.caret{width:8px;height:15px;background:var(--accent);opacity:.7;animation:caretBlink 1.1s steps(1) infinite}
@keyframes caretBlink{0%,50%{opacity:.7}51%,100%{opacity:0}}

/* ============ INTRO ============ */
.intro-grid{display:grid;grid-template-columns:1fr 1fr;gap:36px}
.intro-grid p{color:var(--text-muted);font-size:16.5px;line-height:1.7}

/* ============ FEATURES ============ */
.feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
.feat-card{background:var(--panel);padding:26px;transition:background var(--dur-fast),transform var(--dur-fast);position:relative;overflow:hidden}
.feat-card::after{content:'';position:absolute;left:0;top:0;height:1px;width:0;background:var(--accent);transition:width var(--dur-slow) var(--ease-out)}
.feat-card:hover{background:var(--panel-raised)}
.feat-card:hover::after{width:100%}
.feat-card .fc-icon{width:36px;height:36px;display:grid;place-items:center;border:1px solid var(--border);border-radius:var(--r-sm);color:var(--accent);margin-bottom:16px;transition:border-color var(--dur-fast),box-shadow var(--dur-fast)}
.feat-card:hover .fc-icon{border-color:var(--accent);box-shadow:0 0 16px -6px var(--accent-glow)}
.feat-card .fc-icon svg{width:18px;height:18px}
.feat-card h3{font-size:15.5px;margin-bottom:8px}
.feat-card p{font-size:13.5px;color:var(--text-dim);line-height:1.6}

/* ============ SOFTWARE ============ */
.soft-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
.soft-card{display:flex;align-items:center;gap:12px;padding:14px 16px;border:1px solid var(--border);border-radius:var(--r-sm);background:var(--panel);transition:border-color var(--dur-fast),background var(--dur-fast),transform var(--dur-fast)}
.soft-card:hover{border-color:var(--accent);background:var(--panel-raised);transform:translateY(-2px)}
.soft-card .sc-name{font-weight:600;font-size:14px}
.soft-card .sc-tag{margin-left:auto;font:600 9px var(--font-mono);letter-spacing:.08em;color:var(--text-dim);border:1px solid var(--border);border-radius:999px;padding:2px 8px}
.soft-card .sc-tag.tps{color:var(--success);border-color:rgba(0,229,160,.3)}

/* ============ AI ============ */
.ai-band{background:linear-gradient(180deg,rgba(0,229,255,.03),transparent 40%)}
.ai-inner{display:grid;grid-template-columns:1.05fr 1fr;gap:48px;align-items:center}
.ai-copy h2{font-size:clamp(26px,3.8vw,42px);line-height:1.08;letter-spacing:-.025em;margin:16px 0 16px}
.ai-copy p{color:var(--text-muted);font-size:16px;line-height:1.7;max-width:520px}
.ai-list{margin-top:24px;display:flex;flex-direction:column;gap:13px}
.ai-list li{position:relative;padding-left:26px;font-size:14.5px;color:var(--text-dim)}
.ai-list li::before{content:'';position:absolute;left:0;top:7px;width:9px;height:9px;border:1.5px solid var(--accent);border-radius:2px;transform:rotate(45deg);transition:box-shadow var(--dur-fast)}
.ai-list li:hover::before{box-shadow:0 0 10px var(--accent-glow)}
.ai-tiers{margin-top:26px;display:flex;flex-direction:column;gap:10px}
.ai-tier{display:flex;align-items:flex-start;gap:12px;font-size:13.5px;color:var(--text-dim);line-height:1.55}
.at-tag{flex-shrink:0;font:700 9px var(--font-mono);letter-spacing:.1em;border:1px solid var(--border);border-radius:2px;padding:3px 7px;min-width:66px;text-align:center}
.at-tag.read{color:var(--success);border-color:rgba(0,229,160,.3)}
.at-tag.write{color:var(--warning);border-color:rgba(255,210,63,.3)}
.at-tag.destroy{color:var(--danger);border-color:rgba(255,59,92,.3)}
.ai-term{background:var(--field);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;box-shadow:0 30px 90px -40px rgba(0,0,0,.85)}
.ai-term-head{display:flex;align-items:center;gap:6px;padding:10px 14px;border-bottom:1px solid var(--border);background:var(--panel)}
.ai-term-head .dot{width:9px;height:9px;border-radius:50%}
.ai-term-head .dot.r{background:#ff5f57}.ai-term-head .dot.y{background:#febc2e}.ai-term-head .dot.g{background:#28c840}
.ai-term-title{margin-left:8px;font:600 11px var(--font-mono);color:var(--text-dim)}
.ai-term-body{margin:0;padding:16px;font:500 12px var(--font-mono);line-height:1.85;color:var(--text-muted);height:320px;white-space:pre-wrap;overflow-y:auto}
.ai-term-body .k{color:var(--accent)} .ai-term-body .ok{color:var(--success)} .ai-term-body .d{color:var(--text-dim)}

/* ============ PRIVACY ============ */
.privacy-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.priv-card{border:1px solid var(--border);border-radius:var(--r);padding:24px;background:var(--panel);transition:border-color var(--dur-fast),transform var(--dur-fast);position:relative}
.priv-card:hover{border-color:var(--border-strong);transform:translateY(-3px)}
.priv-num{display:block;font:700 11px var(--font-mono);letter-spacing:.14em;color:var(--accent-dim);margin-bottom:12px}
.priv-card b{display:block;font-size:15px;margin-bottom:8px}
.priv-card p{font-size:13px;color:var(--text-dim);line-height:1.6}

/* ============ DOWNLOAD ============ */
.download-band{border-bottom:1px solid var(--border)}
.dl-inner{text-align:center;max-width:780px;margin:0 auto}
.dl-inner .eyebrow{justify-content:center}
.dl-inner h2{font-size:clamp(26px,3.8vw,42px);letter-spacing:-.025em;margin:16px 0 34px}
.dl-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.dl-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:28px;border:1px solid var(--border-strong);border-radius:var(--r);background:var(--panel);color:var(--text);transition:border-color var(--dur-fast),background var(--dur-fast),box-shadow var(--dur-fast);position:relative;overflow:hidden}
.dl-card::before{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,229,255,.05),transparent 60%);opacity:0;transition:opacity var(--dur-mid)}
.dl-card:hover{border-color:var(--accent);box-shadow:0 0 40px -16px var(--accent-glow)}
.dl-card:hover::before{opacity:1}
.dl-card svg{color:var(--accent)}
.dl-card b{font-size:16px}
.dl-card span{font:500 11px var(--font-mono);color:var(--text-dim)}
.dl-note{margin-top:22px;font-size:13.5px;color:var(--text-dim)}
.dl-src{margin-top:18px;background:var(--field);border:1px solid var(--border);border-radius:var(--r-sm);padding:14px;font:500 12.5px var(--font-mono);color:var(--text-muted);text-align:left;overflow-x:auto}

/* ============ FOOTER ============ */
.site-foot{position:relative;z-index:2;background:var(--bg);border-top:1px solid var(--border);padding:56px clamp(16px,4vw,40px) 40px;max-width:var(--maxw);margin:0 auto}
.foot-main{display:flex;justify-content:space-between;gap:40px;flex-wrap:wrap;padding-bottom:32px;border-bottom:1px solid var(--border)}
.foot-brand b{font-size:15px}
.foot-brand p{margin-top:8px;font-size:13.5px;color:var(--text-muted);max-width:320px}
.foot-cols{display:flex;gap:56px;flex-wrap:wrap}
.foot-cols>div{display:flex;flex-direction:column;gap:9px}
.foot-cols b{font:700 10px var(--font-mono);letter-spacing:.14em;color:var(--accent);text-transform:uppercase;margin-bottom:3px}
.foot-cols a{font-size:13.5px;color:var(--text-muted);transition:color var(--dur-fast)}
.foot-cols a:hover{color:var(--accent)}
.foot-legal{margin-top:24px;display:flex;flex-direction:column;gap:8px}
.foot-legal p{font-size:12px;color:var(--text-muted);max-width:760px;line-height:1.7}

/* ============ SCROLL REVEAL (scroll-driven, no JS) ============ */
@supports (animation-timeline: view()){
  @media (prefers-reduced-motion: no-preference){
    .band-head,.intro-grid,.ai-inner,.privacy-grid,.dl-inner,.instrument{
      animation:reveal linear both;animation-timeline:view();animation-range:entry 6% cover 26%;
    }
    .feat-grid,.soft-grid{animation:clipIn linear both;animation-timeline:view();animation-range:entry 4% cover 30%}
    .feat-card,.soft-card{animation:cellIn linear both;animation-timeline:view();animation-range:entry 4% cover 34%}
  }
}
@keyframes reveal{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}
@keyframes clipIn{from{clip-path:inset(0 100% 0 0);opacity:.4}to{clip-path:inset(0 0 0 0);opacity:1}}
@keyframes cellIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
/* JS fallback when scroll-driven is unsupported */
.no-sda .reveal-init{opacity:0;transform:translateY(26px);transition:opacity .7s var(--ease-out),transform .7s var(--ease-out)}
.no-sda .reveal-in{opacity:1;transform:none}

/* ============ VIEW TRANSITIONS (language switch) ============ */
@view-transition{navigation:auto}
::view-transition-old(root),::view-transition-new(root){animation-duration:.32s;animation-timing-function:var(--ease-out)}

/* ============ RESPONSIVE ============ */
@media (max-width:900px){
  .site-nav{display:none}
  .intro-grid,.ai-inner{grid-template-columns:1fr}
  .feat-grid{grid-template-columns:1fr 1fr}
  .privacy-grid{grid-template-columns:1fr 1fr}
  .stats-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:620px){
  .hero{padding-top:120px}
  .feat-grid{grid-template-columns:1fr}
  .dl-grid{grid-template-columns:1fr}
  .privacy-grid{grid-template-columns:1fr}
  .foot-cols{gap:32px}
  .readouts{gap:18px;margin-left:0;width:100%}
  .brand-text small{display:none}
  .stats-grid{grid-template-columns:1fr}
  .hero-facts{gap:6px}
  .band{padding:72px clamp(16px,4vw,40px)}
  .foot-main{flex-direction:column;gap:28px}
}
@media (max-width:480px){
  .site-head{gap:10px;padding:0 14px}
  .head-actions{gap:8px}
  .lang-btn{padding:6px 8px}
  .btn{padding:8px 12px;font-size:13px}
  .btn.lg{padding:11px 18px;font-size:14px}
  .hero h1{letter-spacing:-.02em}
  .ai-tier{flex-direction:column;gap:6px}
  .at-tag{min-width:0}
}

/* ============ SCROLL PROGRESS ============ */
.progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:120;pointer-events:none;background:transparent}
.progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent-dim),var(--accent));box-shadow:0 0 10px var(--accent-glow);transition:width .1s linear}

/* ============ STATS ============ */
.stats-band{padding-top:70px;padding-bottom:70px}
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
.stat{background:var(--panel);padding:30px 24px;display:flex;flex-direction:column;gap:6px}
.stat-num{font:700 clamp(34px,5vw,52px)/1 var(--font-mono);letter-spacing:-.02em;color:var(--accent);text-shadow:0 0 24px var(--accent-weak)}
.stat span{font:600 10px var(--font-mono);letter-spacing:.16em;color:var(--text-dim)}

/* ============ HOW IT WORKS ============ */
.how-grid{display:grid;grid-template-columns:1fr 120px;gap:40px;align-items:start}
.how-steps{display:flex;flex-direction:column;gap:26px;counter-reset:s}
.how-step{display:flex;gap:20px;align-items:flex-start;opacity:.35;transition:opacity var(--dur-slow) var(--ease-out),transform var(--dur-slow) var(--ease-out)}
.how-step.active{opacity:1}
.hs-num{font:700 14px var(--font-mono);color:var(--text-dim);border:1px solid var(--border);border-radius:var(--r-sm);width:42px;height:42px;display:grid;place-items:center;flex-shrink:0;transition:border-color var(--dur-mid),color var(--dur-mid),box-shadow var(--dur-mid)}
.how-step.active .hs-num{border-color:var(--accent);color:var(--accent);box-shadow:0 0 16px -6px var(--accent-glow)}
.how-step b{display:block;font-size:17px;margin-bottom:6px}
.how-step p{font-size:14px;color:var(--text-dim);line-height:1.65;max-width:520px}
.how-visual{position:sticky;top:140px;align-self:start;display:flex;justify-content:center}
.how-line{width:1px;height:200px;background:var(--border-strong);position:relative}
.how-line i{position:absolute;left:-1px;top:0;width:3px;height:0;background:var(--accent);box-shadow:0 0 10px var(--accent-glow);transition:height var(--dur-slow) var(--ease-out)}
@media(max-width:820px){.how-grid{grid-template-columns:1fr}.how-visual{display:none}}

/* ============ SCREENSHOTS ============ */
.shots-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}
.shot{display:flex;flex-direction:column;gap:10px}
.shot:nth-child(even){margin-top:52px}
.shot-frame{position:relative;border:1px solid var(--border);border-radius:var(--r);overflow:hidden;background:var(--field);box-shadow:0 30px 80px -40px rgba(0,0,0,.85);transform-style:preserve-3d;transition:border-color var(--dur-fast),transform .1s linear;will-change:transform}
.shot-frame::after{content:'';position:absolute;inset:0;border-radius:var(--r);box-shadow:inset 0 0 0 1px rgba(0,229,255,.05);pointer-events:none}
.shot-frame:hover{border-color:var(--border-strong)}
.shot-frame img{display:block;width:100%;height:auto}
.shot figcaption{font:600 11px var(--font-mono);letter-spacing:.1em;color:var(--text-dim);text-transform:uppercase;display:flex;align-items:center;gap:8px}
.shot figcaption::before{content:'';width:12px;height:1px;background:var(--accent)}
@media(max-width:760px){.shots-grid{grid-template-columns:1fr}.shot:nth-child(even){margin-top:0}}

/* ============ REQUIREMENTS ============ */
.req-table{border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
.req-row{display:grid;grid-template-columns:1.1fr 1.4fr 1.4fr;gap:1px;background:var(--border)}
.req-row>span{background:var(--panel);padding:14px 18px;font-size:13.5px;color:var(--text-muted)}
.req-row>span:first-child{font-weight:600;color:var(--text)}
.req-head>span{background:var(--panel-raised);font:700 10px var(--font-mono);letter-spacing:.14em;color:var(--text-dim);text-transform:uppercase}
.req-note{margin-top:18px;font-size:13.5px;color:var(--text-dim);max-width:720px}
@media(max-width:640px){.req-row{grid-template-columns:1fr}.req-row>span:first-child{background:var(--panel-raised)}}

/* ============ LANGUAGE CHIPS ============ */
.lang-chips{display:flex;flex-wrap:wrap;gap:10px}
.lang-chip{font:600 13.5px var(--font-ui);color:var(--text-muted);border:1px solid var(--border);border-radius:var(--r-sm);padding:10px 16px;background:var(--panel);transition:border-color var(--dur-fast),color var(--dur-fast),transform var(--dur-fast)}
.lang-chip:hover{border-color:var(--accent);color:var(--text);transform:translateY(-2px)}

/* ============ LIMITATIONS ============ */
.limits-list{display:grid;grid-template-columns:1fr 1fr;gap:14px 32px}
.limits-list li{display:flex;gap:12px;font-size:14px;color:var(--text-dim);line-height:1.6}
.lim-dot{flex-shrink:0;width:8px;height:8px;margin-top:7px;border:1.5px solid var(--warning);border-radius:2px;transform:rotate(45deg)}
@media(max-width:760px){.limits-list{grid-template-columns:1fr}}

/* ============ OPEN SOURCE ============ */
.oss-inner{display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}
.oss-copy h2{font-size:clamp(26px,3.8vw,42px);line-height:1.08;letter-spacing:-.025em;margin:16px 0 16px}
.oss-copy p{color:var(--text-muted);font-size:15.5px;line-height:1.7;max-width:520px}
.oss-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:26px}
.oss-diagram{display:flex;flex-direction:column;gap:10px;align-items:center}
.oss-layer{width:100%;display:flex;flex-direction:column;gap:4px;border:1px solid var(--border);border-radius:var(--r);padding:16px 18px;background:var(--panel);transition:border-color var(--dur-fast),box-shadow var(--dur-fast)}
.oss-layer:hover{border-color:var(--accent);box-shadow:0 0 24px -14px var(--accent-glow)}
.ol-tag{font:700 12px var(--font-mono);letter-spacing:.14em;color:var(--accent)}
.ol-note{font-size:12px;color:var(--text-dim)}
.oss-arrow{color:var(--text-dim);font-size:14px}
@media(max-width:820px){.oss-inner{grid-template-columns:1fr}}

/* split-text word reveal */
.split-w .w{display:inline-block;opacity:0;transform:translateY(18px);transition:opacity .6s var(--ease-out),transform .6s var(--ease-out)}
.split-w.in .w{opacity:1;transform:none}

/* ============ CORNER-BRACKET FOCUS (signature) ============ */
.cb{position:absolute;inset:-1px;pointer-events:none;border:1.5px solid transparent;border-radius:inherit;opacity:0;transition:opacity var(--dur-fast)}
.cb::before,.cb::after{content:'';position:absolute;width:6px;height:6px;border:1.5px solid var(--accent);opacity:0;transition:opacity var(--dur-fast)}
.cb::before{left:-1px;top:-1px;border-right:0;border-bottom:0}
.cb::after{right:-1px;bottom:-1px;border-left:0;border-top:0}
:is(.btn,.lang-btn,.dl-card,.rail-list li,.site-nav a):focus-visible{outline:none;box-shadow:none}
:is(.btn,.lang-btn,.dl-card,.rail-list li,.site-nav a):focus-visible .cb{opacity:1}
:is(.btn,.lang-btn,.dl-card,.rail-list li,.site-nav a):focus-visible .cb::before,
:is(.btn,.lang-btn,.dl-card,.rail-list li,.site-nav a):focus-visible .cb::after{opacity:1}

/* ============ REDUCED MOTION ============ */
@media (prefers-reduced-motion:reduce){
  .boot,.scanline{display:none}
  body{overflow:auto}
  .choreo,.site-head{opacity:1!important;transform:none!important;transition:none!important}
  .hero h1{clip-path:none!important}
  .hero-app{opacity:1!important;transform:none!important}
  .hero-sweep{display:none}
  *{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
}
