:root{--bg:#050505;--bg2:#0a0a0a;--surf:#111;--text:#F0F0F0;--muted:#606060;--dim:#3a3a3a;--y:#FFE600;--c:#00F5FF;--o:#FF5A00;--g:#3BFF1A;--mg:#FF00BB;--r:#FF2626;--br:#282828;--brbr:#404040;}
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{background:var(--bg);color:var(--text);font-family:'IBM Plex Mono',monospace;font-size:13px;line-height:1.7;overflow-x:clip;}

/* NAV */
nav{position:fixed;top:0;left:0;right:0;z-index:1000;height:46px;display:flex;align-items:center;justify-content:space-between;padding:0 2rem;background:rgba(5,5,5,.95);border-bottom:1px solid var(--br);backdrop-filter:blur(8px);}
.nav-brand{font-size:.72rem;letter-spacing:.14em;color:var(--y);text-decoration:none;}
.nav-brand::before{content:'▶ ';color:var(--c);font-size:.6rem;}
.nav-links{display:flex;align-items:center;gap:2rem;list-style:none;}
.nav-links a{font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);text-decoration:none;transition:color .15s;}
.nav-links a:hover{color:var(--text);}
.nav-links a.active{color:var(--y);}

/* HERO */
#hero{min-height:100vh;display:flex;flex-direction:column;justify-content:center;padding:80px 2rem 3.5rem;position:relative;overflow:hidden;border-bottom:1px solid var(--br);}
.hero-scanline{position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--c) 50%,transparent);opacity:.08;animation:scan 6s linear infinite;pointer-events:none;will-change:transform;}
@keyframes scan{from{transform:translateY(-1px);}to{transform:translateY(100vh);}}
#patcher-panel.open ~ #hero .hero-scanline{animation-play-state:paused;}
.hero-grid{position:absolute;inset:0;background-image:radial-gradient(circle,rgba(255,230,0,.07) 1px,transparent 1px);background-size:52px 52px;pointer-events:none;}
.hero-vign{position:absolute;inset:0;background:radial-gradient(ellipse 70% 100% at 20% 50%,transparent 30%,var(--bg) 72%);pointer-events:none;}
.hero-inner{position:relative;z-index:1;max-width:560px;}
.h-alias{font-size:.62rem;letter-spacing:.26em;text-transform:uppercase;color:var(--y);margin-bottom:1rem;opacity:0;animation:fup .5s ease .15s forwards;}
.h-name{font-size:clamp(3.2rem,8vw,7rem);font-weight:700;line-height:.88;letter-spacing:-.03em;margin-bottom:1.2rem;opacity:0;animation:fup .6s ease .3s forwards;}
.h-name .y{color:var(--y);}
.h-role{font-size:clamp(.74rem,1.3vw,.86rem);color:var(--muted);margin-bottom:1.4rem;opacity:0;animation:fup .6s ease .45s forwards;}
.h-bio{font-size:.77rem;color:var(--muted);line-height:1.9;margin-bottom:1.8rem;opacity:0;animation:fup .6s ease .6s forwards;}
.h-bio strong{color:var(--text);font-weight:500;}
.h-btns{display:flex;gap:.75rem;flex-wrap:wrap;opacity:0;animation:fup .6s ease .75s forwards;}
@keyframes fup{from{opacity:0;transform:translateY(14px);}to{opacity:1;transform:translateY(0);}}

/* PATCHER PANEL — foldable from nav */
/* Neon Radio widget */
.neon-radio{position:relative;display:flex;align-items:center;gap:0;background:var(--bg2);border:1px solid var(--br);border-radius:3px;height:28px;overflow:visible;}
.nr-btn{background:none;border:none;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;padding:0 6px;height:100%;}
.nr-btn:hover{color:var(--c);}
.nr-play{border-right:1px solid var(--br);}
.nr-play.playing{color:var(--c);}
.nr-play.playing:hover{color:var(--r);}
.nr-lcd{display:flex;align-items:center;justify-content:center;padding:0 8px;height:100%;min-width:72px;background:rgba(0,40,42,.25);border-right:1px solid var(--br);}
.nr-patch-name{font-family:'IBM Plex Mono',monospace;font-size:.5rem;letter-spacing:.1em;color:var(--c);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:90px;opacity:.85;text-shadow:0 0 6px rgba(0,245,255,.3);}
.nr-skip{border-right:1px solid var(--br);}
.nr-vol-wrap{position:relative;display:flex;align-items:center;height:100%;}
.nr-vol-btn{padding:0 7px;height:100%;border-right:1px solid var(--br);}
.nr-vol-btn.muted{color:var(--r);}
.nr-patcher{gap:4px;padding:0 8px;color:var(--c);font-family:'IBM Plex Mono',monospace;font-size:.5rem;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;}
.nr-patcher svg{fill:none;stroke:currentColor;stroke-width:1.5;}
.nr-patcher:hover{background:rgba(0,245,255,.06);}
.nr-vol-slider{position:absolute;top:100%;right:-8px;background:rgba(10,10,10,.95);border:1px solid var(--br);border-radius:3px;padding:8px 6px;display:none;backdrop-filter:blur(8px);z-index:1001;}
.nr-vol-slider.open{display:block;}
.nr-vol-slider input[type="range"]{writing-mode:vertical-lr;direction:rtl;width:4px;height:80px;appearance:none;background:var(--br);border-radius:2px;outline:none;cursor:pointer;}
.nr-vol-slider input[type="range"]::-webkit-slider-thumb{appearance:none;width:10px;height:10px;background:var(--c);border-radius:50%;cursor:pointer;}
.nr-vol-slider input[type="range"]::-moz-range-thumb{width:10px;height:10px;background:var(--c);border-radius:50%;border:none;cursor:pointer;}
.nr-tooltip{display:none;position:absolute;top:calc(100% + 10px);left:0;background:var(--surf);border:1px solid var(--brbr);border-radius:4px;padding:.6rem .8rem;font-family:'IBM Plex Mono',monospace;font-size:.7rem;color:var(--muted);line-height:1.55;white-space:normal;width:260px;text-align:center;z-index:1002;box-shadow:0 4px 16px rgba(0,0,0,.5);}
.nr-tooltip.show{display:block;animation:nr-tooltip-in .3s ease-out;}
.nr-tooltip strong{color:var(--c);}
.nr-tooltip-arrow{position:absolute;top:-6px;left:14px;width:10px;height:6px;overflow:hidden;}
.nr-tooltip-arrow::before{content:'';position:absolute;top:3px;left:50%;transform:translateX(-50%) rotate(45deg);width:8px;height:8px;background:var(--surf);border:1px solid var(--brbr);border-right:none;border-bottom:none;}
@keyframes nr-tooltip-in{from{opacity:0;translateY(4px);}to{opacity:1;transform:translateY(0);}}
.nr-patcher.pulse{animation:nr-pulse 2s ease-in-out infinite;}
.nr-patcher.open{background:rgba(0,245,255,.06);}
@keyframes nr-pulse{0%,100%{opacity:1;}50%{opacity:.35;}}
#patcher-panel{position:fixed;top:46px;left:0;right:0;height:0;overflow:hidden;background:#040404;border-bottom:1px solid var(--br);z-index:900;transition:height .3s cubic-bezier(.4,0,.2,1);}
#patcher-panel.open{height:calc(100vh - 46px);}
.patcher-inner{position:relative;width:100%;height:100%;overflow:hidden;}

/* NODE BOARD */
.nb{position:absolute;inset:0;overflow:hidden;cursor:default;}
.nb-grid-bg{position:absolute;inset:0;background-image:radial-gradient(circle,rgba(255,255,255,.04) 1px,transparent 1px);background-size:28px 28px;pointer-events:none;}
.nb-canvas{position:absolute;top:0;left:0;transform-origin:0 0;}
.nb svg{position:absolute;top:0;left:0;width:4000px;height:3000px;pointer-events:none;overflow:visible;z-index:10;}
.nb svg path.cable{fill:none;stroke-width:2.2;stroke-linecap:round;pointer-events:stroke;cursor:pointer;}
.nb svg path.cable-preview{fill:none;stroke-width:1.5;stroke-linecap:round;pointer-events:none;stroke-dasharray:5,3;opacity:.7;}

/* selection */
.nb-marquee{position:fixed;border:1px solid var(--y);background:rgba(255,230,0,.06);z-index:9998;pointer-events:none;display:none;}
.nd-selected{outline:1.5px solid var(--y);outline-offset:1px;box-shadow:0 0 8px rgba(255,230,0,.25);}

/* nodes */
.nd{position:absolute;min-width:110px;background:#0c0c0c;border:1px solid var(--br);user-select:none;z-index:2;}
.nd::before{content:'';display:block;height:2px;}
.nd-vco::before{background:var(--y);}
.nd-vcf::before{background:var(--c);}
.nd-adsr::before{background:var(--o);}
.nd-lfo::before{background:var(--mg);}
.nd-vca::before{background:var(--g);}
.nd-scope::before{background:var(--dim);}
.nd-scope{min-width:200px;}
.nd-tuner::before{background:#66ccaa;}
.nd-tuner{min-width:180px;}
.nd-tuner-cv{width:100%;height:90px;background:#080808;border:1px solid #1a2a22;display:block;}
.nd-meter::before{background:#88aacc;}
.nd-meter-cv{width:60px;height:180px;background:#080808;border:1px solid #1a2228;display:block;margin:0 auto;}
.nd-mmix::before{background:#cc88ff;}
.nd-mmix-grid{display:flex;flex-direction:column;gap:2px;padding:2px 0;}
.nd-mmix-ports-grid{flex-direction:column;gap:2px;}
.nd-mmix-ports-grid .nd-port-wrap{width:40px;}
.nd-mmix-row{display:flex;justify-content:center;gap:8px;}
.nd-mmix-center{display:flex;justify-content:center;}
.nd-mmix-knob{display:flex;flex-direction:column;align-items:center;gap:1px;width:40px;}
.nd-mmix-knob .nd-lbl{font-size:.38rem;color:var(--dim);}
.nd-mmix-knob .nd-val{font-size:.34rem;color:var(--dim);}
.nd-delay::before{background:#dd8833;}
.nd-delay-heads{display:flex;flex-direction:column;gap:2px;padding:2px 0;border-top:1px solid var(--br);margin-top:4px;}
.nd-delay-heads .nd-lbl{font-size:.36rem;}
.nd-noise::before{background:#cccccc;}
.nd-noise{min-width:80px;}
.nd-noise-outs{display:flex;flex-direction:column;gap:6px;padding:6px 4px;align-items:center;}
.nd-noise-out{display:flex;align-items:center;gap:6px;}
.nd-noise-out .nd-port-lbl{font-size:.42rem;min-width:24px;text-align:right;}
.nd-reverb-body{padding:2px 4px;}
.nd-reverb-ir{display:block;width:100%;border:1px solid var(--br);border-radius:2px;background:#080810;}
.nd-mixer::before{background:#aa44ff;}
.nd-metro::before{background:#ff4488;}
.nd-seq::before{background:#44ffaa;}
.nd-reverb::before{background:#6688cc;}
.nd-switch::before{background:#cc8844;}
.nd-drum::before{background:#4466dd;}
.nd-drum{min-width:240px;}
.nd-drum-grid{display:flex;flex-direction:column;gap:4px;padding:4px;}
.nd-drum-row{display:flex;justify-content:center;gap:6px;}
.nd-drum-voice{display:flex;flex-direction:column;align-items:center;gap:1px;min-width:48px;}
.nd-drum-voice-name{font-size:.45rem;font-weight:bold;letter-spacing:.12em;color:#4466dd;text-transform:uppercase;}
.nd-drum-led{width:6px;height:6px;border-radius:50%;background:#222;border:1px solid #333;transition:background .05s,box-shadow .05s;}
.nd-drum-led.on{background:#4466dd;box-shadow:0 0 6px #4466dd;}
.nd-drum-knob-pair{display:flex;gap:4px;}
.nd-drum-knob-cell{display:flex;flex-direction:column;align-items:center;gap:1px;}
.nd-drum-knob-cell .nd-lbl{font-size:.35rem;letter-spacing:.08em;color:var(--muted);text-transform:uppercase;}
.nd-drum-knob-cell .nd-val{font-size:.4rem;color:var(--dim);min-width:16px;text-align:center;}
.nd-drum-ports{flex-wrap:nowrap;gap:1px;padding:.3rem .5rem 0;margin-left:-.5rem;margin-right:-.5rem;}
.nd-euclid::before{background:#88ddaa;}
.nd-euclid{min-width:180px;}
.nd-euclid .nd-ports{flex-wrap:nowrap;gap:1px;padding:.3rem .2rem 0;}
.nd-euclid-lanes{display:flex;justify-content:center;gap:2px;padding:2px 4px;}
.nd-euclid-lane-btn{font-family:'IBM Plex Mono',monospace;font-size:.4rem;font-weight:bold;width:14px;height:14px;padding:0;border:1px solid var(--br);background:transparent;color:var(--dim);cursor:pointer;line-height:14px;text-align:center;border-radius:2px;transition:all .12s;}
.nd-euclid-lane-btn:hover{border-color:var(--lane-col);color:var(--lane-col);}
.nd-euclid-lane-btn.on{background:var(--lane-col);color:#000;border-color:var(--lane-col);box-shadow:0 0 4px var(--lane-col);}
.nd-euclid-knobs{display:flex;flex-direction:column;align-items:center;gap:2px;padding:2px 4px;}
.nd-euclid-knob-top{display:flex;justify-content:center;}
.nd-euclid-knob-bottom{display:flex;justify-content:center;gap:12px;}
.nd-euclid-knob-cell{display:flex;flex-direction:column;align-items:center;gap:1px;}
.nd-euclid-knob-cell .nd-lbl{font-size:.4rem;letter-spacing:.1em;color:var(--muted);text-transform:uppercase;}
.nd-euclid-knob-cell .nd-val{font-size:.45rem;color:var(--dim);min-width:20px;text-align:center;}
.nd-hd{font-size:.5rem;letter-spacing:.2em;text-transform:uppercase;padding:.3rem .5rem;border-bottom:1px solid var(--br);cursor:move;display:flex;justify-content:space-between;align-items:center;}
.nd-hd-knob-wrap{display:flex;align-items:center;gap:3px;}
.nd-hd-knob-lbl{font-size:.35rem;color:var(--muted);letter-spacing:.08em;}
.nd-master-btn{font-family:'IBM Plex Mono',monospace;font-size:.4rem;font-weight:bold;min-width:14px;height:14px;padding:0 2px;border:1px solid var(--br);background:transparent;color:var(--dim);cursor:pointer;line-height:14px;text-align:center;border-radius:2px;transition:all .1s;}
.nd-master-btn:hover{border-color:var(--brbr);color:var(--text);}
.nd-master-btn.on{background:var(--r);border-color:var(--r);color:#000;}
.nd-switch-led.on{background:#cc8844 !important;box-shadow:0 0 4px #cc884488;}
.nd-body{padding:.4rem .5rem;display:flex;flex-direction:column;gap:.35rem;}
.nd-row{display:flex;align-items:center;gap:.35rem;}
.nd-cv-col{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;flex-shrink:0;width:18px;}
.nd-port-left{width:18px;height:11px;flex-shrink:0;}
.nd-ctrl{display:flex;flex-direction:column;align-items:center;gap:1px;flex-shrink:0;}
.nd-ctrl .nd-lbl{flex:0;}
.nd-lbl{font-size:.44rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);line-height:1;flex:1;}
.nd-val{font-size:.44rem;color:var(--text);min-width:36px;text-align:right;}
.nd-knob{cursor:ns-resize;}
.nd-knob-input{position:fixed;z-index:9999;width:56px;padding:2px 4px;font-family:'IBM Plex Mono',monospace;font-size:10px;background:var(--bg);color:var(--text);border:1px solid var(--y);outline:none;text-align:center;}
.nd-sel{display:flex;gap:2px;margin-top:1px;}
.nd-sb{font-family:'IBM Plex Mono',monospace;font-size:.42rem;padding:1px 3px;border:1px solid var(--br);background:var(--surf);color:var(--muted);cursor:pointer;transition:all .1s;flex:1;text-align:center;}
.nd-sb:hover:not(.on){border-color:var(--brbr);color:var(--text);}
.nd-sb.on{background:var(--c);border-color:var(--c);color:#000;}
.nd-sb.q-on{background:var(--g);border-color:var(--g);color:#000;}
.nd-seq-scale-row[data-q="off"]{opacity:.3;pointer-events:none;}
.nd-seq-scale-row[data-q="on"]{opacity:1;pointer-events:auto;}
.nd-scope-cv{width:100%;height:110px;background:#010e01;border:1px solid #1a3a1a;display:block;}
.nd-scope-ctrl{display:flex;align-items:center;justify-content:center;gap:6px;padding:4px 0 2px;}
/* seq steps */
.nd-seq-steps{display:flex;gap:4px;}
.nd-seq-col{display:flex;flex-direction:column;gap:2px;}
.nd-seq-row{display:flex;align-items:center;gap:3px;width:100%;}
.nd-seq-num{font-size:.38rem;color:var(--dim);width:10px;text-align:right;flex-shrink:0;}
.nd-seq-cv-val{font-size:.4rem;color:var(--text);min-width:26px;text-align:right;flex-shrink:0;}
.nd-step{width:14px;height:14px;flex-shrink:0;background:var(--surf);border:1px solid var(--br);cursor:pointer;transition:background .1s;}
.nd-step.on{background:var(--g);border-color:var(--g);}
.nd-step.cur{outline:1px solid var(--y);}
/* mixer faders */
.nd-mixer{min-width:310px;}
.nd-mix-strip{display:flex;gap:4px;padding:4px 2px;align-items:flex-end;}
.nd-mix-ch{display:flex;flex-direction:column;align-items:center;gap:2px;flex-shrink:0;width:26px;}
.nd-mix-send-lbl{font-size:.32rem;color:var(--dim);line-height:1;letter-spacing:.05em;}
.nd-send-knob{cursor:grab;}
.nd-mix-fader-wrap{height:80px;width:20px;display:flex;align-items:center;justify-content:center;overflow:visible;position:relative;}
.nd-mix-fader{
  -webkit-appearance:none;appearance:none;
  width:80px;height:4px;
  background:var(--br);border-radius:2px;
  transform:rotate(-90deg);
  cursor:grab;outline:none;flex-shrink:0;
}
.nd-mix-fader::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:7px;background:var(--text);border-radius:1px;cursor:grab;border:none;}
.nd-mix-fader::-moz-range-thumb{width:14px;height:7px;background:var(--text);border-radius:1px;cursor:grab;border:none;}
.nd-mix-fader::-webkit-slider-runnable-track{height:4px;background:var(--br);border-radius:2px;}
.nd-mix-fader::-moz-range-track{height:4px;background:var(--br);border-radius:2px;}
.nd-mix-lbl{font-size:.38rem;color:var(--dim);line-height:1;}
.nd-mix-master{display:flex;flex-direction:column;align-items:center;gap:2px;flex-shrink:0;border-left:1px solid var(--br);padding-left:6px;margin-left:2px;}
.nd-mix-rtn-lbl{font-size:.36rem;color:var(--dim);font-weight:700;letter-spacing:.05em;line-height:1;}
.nd-mix-fader-rtn{height:60px;}
.nd-mix-fader-rtn .nd-mix-fader{width:60px;}
.nd-mix-rtn-fader-col{display:flex;flex-direction:column;align-items:center;gap:2px;}
.nd-mix-master-lbl{font-size:.38rem;color:var(--y);font-weight:700;letter-spacing:.1em;line-height:1;}
.nd-mix-fader-master{height:130px;}
.nd-mix-fader-master .nd-mix-fader{width:130px;}
.nd-pan-knob{cursor:grab;}
.nd-mix-ch-ports{display:flex;gap:2px;justify-content:center;margin-top:1px;}
.nd-mix-ch-ports .nd-port-wrap{display:flex;flex-direction:column;align-items:center;gap:0;}
.nd-mix-ch-ports .nd-port{width:8px;height:8px;}
.nd-mix-ch-ports .nd-port-lbl{font-size:.28rem;}
.nd-mix-sr{display:flex;gap:6px;align-items:flex-end;border-left:1px solid var(--br);padding-left:4px;margin-left:2px;}
.nd-mix-sr-strip{display:flex;flex-direction:column;align-items:center;gap:4px;}
.nd-mix-sr-col{display:flex;flex-direction:column;align-items:center;gap:2px;}
.nd-mix-sr-lbl{font-size:.32rem;color:var(--dim);font-weight:700;letter-spacing:.05em;line-height:1;}
.nd-mix-sr-col .nd-port-wrap{display:flex;flex-direction:column;align-items:center;gap:0;}
.nd-mix-sr-col .nd-port{width:9px;height:9px;}
.nd-mix-sr-col .nd-port-lbl{font-size:.28rem;}
.nd-dac::before{background:#ffffff;}
.nd-dac{min-width:90px;}
.nd-dac-body{display:flex;justify-content:center;padding:6px 4px;}
.nd-dac-speaker{display:block;}
.nd-port-wrap{display:flex;flex-direction:column;align-items:center;gap:2px;}
.nd-ports{display:flex;flex-direction:row;justify-content:space-around;padding:.3rem .4rem 0;border-top:1px solid var(--br);margin-top:.25rem;gap:3px;flex-wrap:wrap;}
.nd-port{width:11px;height:11px;border-radius:50%;cursor:pointer;border:1.5px solid;background:#000;transition:transform .1s,box-shadow .1s;flex-shrink:0;}
.nd-port:hover{transform:scale(1.3);}
.nd-port.pending{box-shadow:0 0 0 3px currentColor,0 0 6px currentColor;}
.nd-port.audio-out{border-color:var(--c);}
.nd-port.audio-in{border-color:#3a3a3a;}
.nd-port.cv-out{border-color:var(--mg);}
.nd-port.cv-in{border-color:#aa44aa;}
.nd-port.gate-in{border-color:#aa4400;}
.nd-port.gate-out{border-color:var(--o);}
.nd-port-lbl{font-size:.38rem;letter-spacing:.06em;color:var(--dim);text-transform:uppercase;}
.nd-cvamt-pole{font-size:.44rem;color:var(--muted);line-height:1;user-select:none;position:absolute;}
.nd-cvamt-wrap{position:relative;width:18px;height:18px;flex-shrink:0;}
.nd-cvamt-lo{bottom:-1px;left:-3px;}
.nd-cvamt-hi{bottom:-1px;right:-3px;}

/* patcher toolbar */
.nb-toolbar{position:absolute;top:.6rem;left:.6rem;display:flex;gap:.35rem;z-index:20;align-items:center;}
.nb-zoom-info{font-family:'IBM Plex Mono',monospace;font-size:.5rem;color:var(--c);padding:.22rem .55rem;border:1px solid rgba(0,245,255,.3);background:rgba(0,0,0,.7);pointer-events:none;text-shadow:0 0 8px var(--c);}
.nb-tool-btn{font-family:'IBM Plex Mono',monospace;font-size:.52rem;letter-spacing:.1em;text-transform:uppercase;background:rgba(0,0,0,.7);border:1px solid rgba(0,245,255,.25);color:rgba(0,245,255,.7);padding:.22rem .6rem;cursor:pointer;transition:all .15s;}
.nb-tool-btn:hover{border-color:var(--c);color:var(--c);box-shadow:0 0 8px rgba(0,245,255,.35),inset 0 0 8px rgba(0,245,255,.06);text-shadow:0 0 6px var(--c);}
.nb-tool-btn.on{border-color:var(--y);color:var(--y);box-shadow:0 0 8px rgba(255,230,0,.3),inset 0 0 8px rgba(255,230,0,.06);text-shadow:0 0 6px var(--y);}

/* perf monitor */
.nb-perf-btn{position:absolute;bottom:.6rem;right:.6rem;z-index:20;font-family:'IBM Plex Mono',monospace;font-size:.5rem;letter-spacing:.12em;text-transform:uppercase;background:rgba(0,0,0,.7);border:1px solid var(--dim);color:var(--dim);padding:.22rem .6rem;cursor:pointer;transition:all .15s;border-radius:2px;}
.nb-perf-btn:hover{border-color:var(--muted);color:var(--muted);}
.nb-perf-btn.on{border-color:var(--y);color:var(--y);text-shadow:0 0 6px var(--y);}
.nb-perf{display:none;position:absolute;bottom:2.2rem;right:.6rem;z-index:20;font-family:'IBM Plex Mono',monospace;font-size:.56rem;line-height:1.7;color:var(--muted);background:rgba(0,0,0,.8);border:1px solid var(--dim);border-radius:3px;padding:.4rem .7rem;white-space:nowrap;pointer-events:none;}
.nb-perf.open{display:block;}
.nb-perf span{color:var(--text);}
.nb-perf .perf-lbl{color:var(--dim);margin-right:.3rem;}

/* context menu */
.nb-ctx{position:fixed;background:#0a0a0a;border:1px solid var(--brbr);z-index:9999;min-width:140px;display:none;}
.nb-ctx.open{display:block;}
.nb-ctx-title{font-size:.48rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);padding:.4rem .7rem .2rem;border-bottom:1px solid var(--br);}
.nb-ctx-cat{position:relative;}
.nb-ctx-cat-lbl{font-family:'IBM Plex Mono',monospace;font-size:.52rem;color:var(--muted);padding:.35rem .7rem;cursor:pointer;letter-spacing:.08em;text-transform:uppercase;transition:background .1s,color .1s;}
.nb-ctx-cat:hover>.nb-ctx-cat-lbl{background:var(--surf);color:var(--text);}
.nb-ctx-sub{display:none;position:absolute;left:100%;top:-1px;background:#0a0a0a;border:1px solid var(--brbr);min-width:160px;z-index:10000;}
.nb-ctx-sub::before{content:'';position:absolute;top:0;bottom:0;width:10px;left:-10px;}
.nb-ctx-cat:hover>.nb-ctx-sub{display:block;}
.nb-ctx-sub.flip-h{left:auto;right:100%;}
.nb-ctx-sub.flip-h::before{left:auto;right:-10px;}
.nb-ctx-sub.flip-v{top:auto;bottom:-1px;}
.nb-ctx-item{font-family:'IBM Plex Mono',monospace;font-size:.58rem;color:var(--text);padding:.4rem .7rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:background .1s;white-space:nowrap;}
.nb-ctx-item:hover{background:var(--surf);}
.nb-ctx-item span{font-size:.45rem;color:var(--muted);}
.nb-ctx-colors{display:flex;gap:4px;padding:.4rem .7rem;flex-wrap:wrap;}
.nb-ctx-col{width:16px;height:16px;border-radius:3px;cursor:pointer;border:1px solid rgba(255,255,255,.15);transition:transform .1s;}
.nb-ctx-col:hover{transform:scale(1.3);border-color:rgba(255,255,255,.5);}
.nb-ctx-info{display:none;border-top:1px solid var(--br);padding:.6rem .7rem;gap:.6rem;align-items:flex-start;min-width:300px;max-width:380px;}
.nb-ctx-info.active{display:flex;}
.nb-ctx-info img{width:120px;height:auto;border-radius:3px;border:1px solid var(--br);flex-shrink:0;image-rendering:auto;}
.nb-ctx-info-text{font-family:'IBM Plex Mono',monospace;font-size:.58rem;color:var(--muted);line-height:1.5;white-space:normal;}

/* Module Info Panel */
.nd-info-panel{position:absolute;z-index:30;background:#0c0c0cf0;border:1px solid var(--brbr);min-width:220px;max-width:300px;font-family:'IBM Plex Mono',monospace;pointer-events:auto;backdrop-filter:blur(4px);}
.nd-info-hd{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;border-bottom:1px solid var(--br);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--c);}
.nd-info-close{background:none;border:none;color:var(--muted);cursor:pointer;font-size:13px;padding:0 4px;line-height:1;}
.nd-info-close:hover{color:var(--text);}
.nd-info-body{padding:6px 10px;max-height:400px;overflow-y:auto;}
.nd-info-sec{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);padding:6px 0 3px;border-bottom:1px solid var(--br);margin-top:6px;}
.nd-info-sec:first-child{margin-top:0;}
.nd-info-row{display:flex;justify-content:space-between;gap:8px;padding:2px 0;font-size:11px;}
.nd-info-k{color:var(--dim);text-transform:uppercase;}
.nd-info-v{color:var(--text);text-align:right;font-variant-numeric:tabular-nums;}

/* BUTTONS */
.btn{display:inline-block;font-family:'IBM Plex Mono',monospace;font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;text-decoration:none;padding:.6rem 1.3rem;cursor:pointer;border:none;transition:all .15s;}
.btn-fill{background:var(--y);color:#000;}
.btn-fill:hover{background:#fff;}
.btn-ghost{background:transparent;color:var(--text);border:1px solid var(--brbr);}
.btn-ghost:hover{border-color:var(--text);}
.btn-outline{background:transparent;color:var(--muted);border:1px solid var(--dim);}
.btn-outline:hover{color:var(--text);border-color:var(--muted);}
.btn-sm{font-size:.57rem;padding:.35rem .85rem;}

/* Focus — visible only on keyboard navigation */
:focus-visible{outline:1px solid var(--c);outline-offset:2px;}
.btn:focus-visible{outline-offset:3px;}
.nr-btn:focus-visible,.nb-tool-btn:focus-visible,.nb-perf-btn:focus-visible{outline:1px solid var(--c);outline-offset:1px;}

/* SECTIONS */
section{padding:4.5rem 2rem;}
.sl{font-size:.58rem;letter-spacing:.22em;text-transform:uppercase;color:var(--c);margin-bottom:.6rem;}
.sh{font-size:clamp(1.8rem,4.5vw,3.2rem);font-weight:700;letter-spacing:-.02em;margin-bottom:2.5rem;line-height:1;}

/* PROJECTS */
#projects{border-top:1px solid var(--br);}
.pf{display:flex;gap:0;margin-bottom:2rem;border-bottom:1px solid var(--br);}
.pfb{font-family:'IBM Plex Mono',monospace;font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:.45rem 1rem;cursor:pointer;margin-bottom:-1px;transition:all .15s;}
.pfb:hover{color:var(--text);}.pfb.on{color:var(--y);border-bottom-color:var(--y);}
.pscroll{overflow-x:auto;overflow-y:visible;scrollbar-width:none;-webkit-mask-image:linear-gradient(to right,transparent 0%,black 4%,black 96%,transparent 100%);mask-image:linear-gradient(to right,transparent 0%,black 4%,black 96%,transparent 100%);}
.pscroll::-webkit-scrollbar{display:none;}
.pgrid{display:flex;flex-direction:row;flex-wrap:nowrap;gap:1px;background:rgba(40,40,40,.25);}
.pcard{flex:0 0 280px;min-height:420px;background:var(--bg);display:flex;flex-direction:column;cursor:pointer;transition:background .15s;}
.pcard:hover{background:var(--surf);}
.pthumb{height:140px;min-height:140px;flex-shrink:0;background:var(--surf);overflow:hidden;position:relative;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--br);}
.pthumb img{width:100%;height:100%;object-fit:cover;opacity:.65;transition:opacity .3s;}
.pcard:hover .pthumb img{opacity:.9;}
.ptyp{position:absolute;top:.55rem;right:.55rem;font-size:.5rem;letter-spacing:.14em;text-transform:uppercase;padding:.13rem .45rem;border:1px solid;}
.tg{border-color:var(--c);color:var(--c);background:rgba(0,245,255,.05);}
.tt{border-color:var(--y);color:var(--y);background:rgba(255,230,0,.05);}
.ta{border-color:var(--o);color:var(--o);background:rgba(255,90,0,.05);}
.tw{border-color:var(--g);color:var(--g);background:rgba(59,255,26,.05);}
.pbody{padding:.9rem;flex:1;display:flex;flex-direction:column;}
.peng{font-size:.56rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:.3rem;flex-shrink:0;}
.ptitle{font-size:.88rem;font-weight:700;color:var(--text);margin-bottom:.4rem;line-height:1.2;flex-shrink:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.pdesc{font-size:.68rem;color:var(--muted);line-height:1.7;margin-bottom:.65rem;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;flex-shrink:0;}
.ptags{display:flex;flex-wrap:wrap;gap:.25rem;margin-bottom:.65rem;flex-shrink:0;}
.ptg{font-size:.5rem;letter-spacing:.07em;text-transform:uppercase;padding:.1rem .35rem;border:1px solid var(--br);color:var(--muted);}
.pacts{display:flex;gap:.4rem;flex-wrap:wrap;margin-top:auto;}

/* MODAL */
.modal-ov{position:fixed;inset:0;background:rgba(0,0,0,.94);z-index:2000;display:none;align-items:center;justify-content:center;padding:1.5rem;}
.modal-ov.open{display:flex;}
.modal-bx{background:var(--bg);border:1px solid var(--brbr);width:100%;max-width:920px;max-height:90vh;overflow-y:auto;scrollbar-width:none;}
.modal-bx::-webkit-scrollbar{display:none;}
.modal-hd{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1.25rem;border-bottom:1px solid var(--br);position:sticky;top:0;background:var(--bg);z-index:1;}
.modal-cat{font-size:.52rem;letter-spacing:.2em;text-transform:uppercase;padding:.12rem .5rem;border:1px solid var(--cat-col,var(--muted));color:var(--cat-col,var(--muted));margin-right:.75rem;flex-shrink:0;}
.modal-ttl{font-size:.88rem;font-weight:700;flex:1;}
.modal-x{background:none;border:none;color:var(--muted);font-size:1rem;cursor:pointer;font-family:'IBM Plex Mono',monospace;padding:0 .25rem;line-height:1;}
.modal-x:hover{color:var(--text);}
.modal-media{display:flex;flex-direction:column;gap:0;}
.mm-item{width:100%;border-bottom:1px solid var(--br);}
.mm-item iframe{width:100%;border:none;display:block;background:#000;}
.mm-item img{width:100%;display:block;object-fit:contain;max-height:500px;background:var(--bg);}
.mm-carousel{display:flex;flex-direction:column;}
.mm-carousel-content{min-height:0;transition:opacity .15s ease;}
.mm-carousel-nav{display:flex;align-items:center;justify-content:center;gap:12px;padding:6px 0;background:var(--bg2);border-bottom:1px solid var(--br);}
.mm-carousel-btn{background:none;border:1px solid var(--br);color:var(--text);font-size:1.2rem;line-height:1;width:28px;height:28px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color .15s,color .15s;}
.mm-carousel-btn:hover{border-color:var(--y);color:var(--y);}
.mm-carousel-counter{font-size:.65rem;color:var(--muted);letter-spacing:.08em;min-width:40px;text-align:center;}
.mm-label{font-size:.52rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);padding:.4rem .75rem;background:var(--bg2);border-bottom:1px solid var(--br);}
.mm-audio{padding:.9rem 1.1rem;background:var(--bg2);display:flex;flex-direction:column;gap:.5rem;}
.mm-audio-lbl{font-size:.55rem;letter-spacing:.16em;text-transform:uppercase;color:var(--c);}
.mm-audio audio{width:100%;height:32px;}
.mm-gallery{display:flex;overflow-x:auto;gap:1px;background:var(--br);}
.mm-gallery::-webkit-scrollbar{height:3px;}.mm-gallery::-webkit-scrollbar-thumb{background:var(--dim);}
.mm-gallery img{height:180px;width:auto;flex-shrink:0;object-fit:cover;cursor:zoom-in;opacity:.75;transition:opacity .2s;}
.mm-gallery img:hover{opacity:1;}
.modal-bd{padding:1.25rem;}
.modal-meta{display:flex;gap:1.5rem;margin-bottom:1rem;flex-wrap:wrap;}
.modal-meta-i{display:flex;flex-direction:column;gap:1px;}
.modal-meta-l{font-size:.5rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);}
.modal-meta-v{font-size:.72rem;color:var(--text);}
.modal-dsc{font-size:.72rem;color:var(--muted);line-height:1.7;white-space:pre-line;margin-bottom:1.1rem;}
/* team list */
.modal-team{margin-bottom:1.1rem;}
.modal-team-title{font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--text);margin:0 0 .4rem;padding-bottom:.3rem;border-bottom:1px solid var(--br);}
.modal-team-list{display:flex;flex-direction:column;gap:.2rem;}
.modal-team-member{font-size:.6rem;color:var(--muted);line-height:1.5;padding-left:.6rem;position:relative;}
.modal-team-member::before{content:'›';position:absolute;left:0;color:var(--y);}
/* sections (foldable & open) */
.modal-sections{margin-bottom:1.1rem;display:flex;flex-direction:column;gap:.5rem;}
.modal-sec-title{font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--text);margin:0 0 .4rem;padding-bottom:.3rem;border-bottom:1px solid var(--br);}
.modal-fold{border:1px solid var(--br);border-radius:4px;}
.modal-fold summary{font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--text);padding:.5rem .7rem;cursor:pointer;list-style:none;display:flex;align-items:center;gap:.5rem;border-bottom:1px solid transparent;transition:border-color .15s;}
.modal-fold summary::before{content:'▸';color:var(--y);font-size:.5rem;transition:transform .15s;}
.modal-fold[open] summary::before{transform:rotate(90deg);}
.modal-fold[open] summary{border-bottom-color:var(--br);}
.modal-fold summary::-webkit-details-marker{display:none;}
.modal-fold>:not(summary){padding:.5rem .7rem;}
/* section content: item list */
.modal-sec-list{display:flex;flex-direction:column;gap:.2rem;margin:.4rem 0;}
.modal-sec-item{font-size:.6rem;color:var(--muted);line-height:1.5;padding-left:.6rem;position:relative;}
.modal-sec-item::before{content:'›';position:absolute;left:0;color:var(--y);}
/* section content: module cards (Neon Patcher specific but rendered by Modal) */
.modal-sec-modules{display:flex;flex-direction:column;gap:1rem;margin:.4rem 0;}
.modal-sec-mod{display:flex;gap:.8rem;align-items:center;padding:.6rem;background:var(--bg2);border:1px solid var(--br);border-radius:4px;min-height:70px;}
.modal-sec-mod img{flex-shrink:0;border:1px solid var(--br);border-radius:2px;height:auto;max-height:140px;}
.modal-sec-mod-info{flex:1;min-width:0;}
.modal-sec-mod-name{font-size:.62rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;margin-bottom:.2rem;}
.modal-sec-mod-desc{font-size:.62rem;color:var(--muted);line-height:1.6;}
/* section content: signal list (Neon Patcher) */
.modal-sec-signals{display:flex;flex-direction:column;gap:.3rem;margin:.4rem 0;}
.modal-sec-signal{display:flex;align-items:center;gap:.4rem;font-size:.6rem;}
.modal-sec-signal-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}
.modal-sec-signal-type{font-weight:700;letter-spacing:.08em;text-transform:uppercase;min-width:50px;}
/* roadmap in sections */
.modal-roadmap{display:flex;flex-direction:column;gap:.1rem;margin:.2rem 0;}
.modal-roadmap-phase{display:flex;gap:.6rem;align-items:flex-start;padding:.4rem 0;border-left:2px solid var(--br);margin-left:5px;padding-left:.8rem;position:relative;}
.modal-roadmap-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;border:2px solid var(--br);position:absolute;left:-6px;top:.5rem;background:var(--bg);}
.modal-roadmap-dot.done{border-color:var(--g);background:var(--g);}
.modal-roadmap-dot.wip{border-color:var(--y);background:var(--y);}
.modal-roadmap-dot.todo{border-color:var(--dim);background:var(--bg);}
.modal-roadmap-phase.done{border-left-color:var(--g);}
.modal-roadmap-phase.wip{border-left-color:var(--y);}
.modal-roadmap-body{flex:1;min-width:0;}
.modal-roadmap-name{font-size:.58rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text);margin-bottom:.15rem;}
.modal-roadmap-status{font-size:.42rem;font-weight:400;letter-spacing:.12em;margin-left:.4rem;padding:1px 5px;border-radius:2px;}
.modal-roadmap-status.done{color:var(--g);border:1px solid var(--g);}
.modal-roadmap-status.wip{color:var(--y);border:1px solid var(--y);}
.modal-roadmap-status.todo{color:var(--dim);border:1px solid var(--dim);}
.modal-roadmap-items{font-size:.54rem;color:var(--muted);line-height:1.6;}
.modal-tags{display:flex;flex-wrap:wrap;gap:.3rem;margin-bottom:1.1rem;}
.modal-acts{display:flex;gap:.6rem;flex-wrap:wrap;}

/* ABOUT */
#about{border-top:1px solid var(--br);}
.about-wrap{display:grid;grid-template-columns:1.35fr .65fr;gap:4rem;align-items:start;}
.tline{position:relative;padding-left:1.5rem;}
.tline::before{content:'';position:absolute;top:0;left:0;width:1px;height:100%;background:var(--br);}
.ti{position:relative;margin-bottom:2rem;opacity:0;transform:translateX(-10px);transition:opacity .4s,transform .4s;}
.ti.vis{opacity:1;transform:translateX(0);}
.ti::before{content:'';position:absolute;left:-1.5rem;top:.45rem;width:5px;height:5px;background:var(--y);}
.tyr{font-size:.58rem;letter-spacing:.18em;color:var(--y);margin-bottom:.15rem;}
.trl{font-size:.82rem;font-weight:700;color:var(--text);margin-bottom:.12rem;}
.tdc{font-size:.7rem;color:var(--muted);line-height:1.8;}
.tdc strong{color:var(--text);font-weight:500;}
.aside-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1px;background:var(--br);}
.aside-c{background:var(--bg);padding:.7rem .8rem;}
.aside-lbl{font-size:.55rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:.25rem;}
.aside-val{font-size:1.1rem;font-weight:700;color:var(--y);line-height:1;}
.aside-sub{font-size:.58rem;color:var(--muted);margin-top:.15rem;}

/* FOOTER */
footer{border-top:1px solid var(--br);padding:1.25rem 2rem;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;}
.ft-brand{font-size:.68rem;letter-spacing:.1em;color:var(--y);}
.ft-brand::before{content:'▶ ';color:var(--c);font-size:.55rem;}
.ft-links{display:flex;gap:1.5rem;}
.ft-links a{font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);text-decoration:none;transition:color .15s;}
.ft-links a:hover{color:var(--text);}
.ft-copy{font-size:.55rem;color:var(--dim);}

/* REVEAL */
.rev{opacity:0;transform:translateY(11px);transition:opacity .5s,transform .5s;}
.rev.vis{opacity:1;transform:translateY(0);}

/* TOAST */
.toast{position:fixed;bottom:2rem;left:50%;transform:translateX(-50%) translateY(1rem);opacity:0;background:var(--surf);border:1px solid var(--br);color:var(--text);font-family:'IBM Plex Mono',monospace;font-size:.62rem;letter-spacing:.08em;padding:.6rem 1.2rem;z-index:9999;pointer-events:none;transition:opacity .3s,transform .3s;white-space:nowrap;}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

/* HAMBURGER */
.nav-hamburger{display:none;background:none;border:none;color:var(--muted);cursor:pointer;padding:4px;line-height:0;}
.nav-hamburger svg{width:20px;height:20px;stroke:currentColor;stroke-width:2;stroke-linecap:round;}
.nav-hamburger:hover{color:var(--text);}
.nav-mobile-menu{display:none;position:fixed;top:46px;left:0;right:0;background:rgba(5,5,5,.97);border-bottom:1px solid var(--br);backdrop-filter:blur(8px);z-index:999;flex-direction:column;padding:.75rem 1.5rem;gap:.5rem;}
.nav-mobile-menu.open{display:flex;}
.nav-mobile-menu a{font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);text-decoration:none;padding:.4rem 0;transition:color .15s;}
.nav-mobile-menu a:hover{color:var(--text);}

/* RESPONSIVE */
@media(max-width:768px){
  section{padding:3rem 1.25rem;}
  .about-wrap{grid-template-columns:1fr;gap:2rem;}
  .aside-grid{grid-template-columns:1fr 1fr 1fr;}
  .neon-radio{display:none !important;}
  footer{flex-direction:column;align-items:flex-start;}
  .modal-ov{padding:.75rem;}
  .modal-bx{max-height:95vh;}
  .modal-bd{padding:1rem;}
  .modal-meta{gap:1rem;}
  .modal-sec-mod{flex-direction:column;align-items:flex-start;}
  .modal-sec-mod img{max-height:100px;max-width:100%;}
  .pcard{flex:0 0 260px;min-height:380px;}
}
@media(max-width:480px){
  nav{padding:0 1rem;}
  .nav-links{display:none;}
  .nav-hamburger{display:block;}
  #hero{padding-left:1.25rem;padding-right:1.25rem;}
  .pf{flex-wrap:wrap;gap:0;}
  .pfb{padding:.35rem .7rem;font-size:.52rem;}
  .aside-grid{grid-template-columns:1fr 1fr;}
  .pcard{flex:0 0 240px;min-height:360px;}
  .modal-sec-mod-desc{font-size:.56rem;}
  .nr-tooltip{width:200px;font-size:.6rem;left:-4px;}
  .nr-tooltip-arrow{left:10px;}
}
