:root{--ink:#f8f6ff;--muted:#aaa4be;--cyan:#58f4e2;--pink:#ff5bdf;--violet:#8a5cff;--panel:rgba(5,4,16,.68);--line:rgba(255,255,255,.18)}
*{box-sizing:border-box}
html,body{width:100%;height:100%;margin:0;overflow:hidden;background:#03020a;color:var(--ink)}
body{font:16px/1.4 Syne,Arial,sans-serif}
button,input{font:inherit}
button,.file-button{color:inherit}
#visualizer-canvas{position:fixed;inset:0;width:100%;height:100%;display:block;background:#03020a}
.visualizer-grain{position:fixed;z-index:1;inset:0;pointer-events:none;opacity:.12;background:repeating-linear-gradient(0deg,transparent 0,transparent 3px,rgba(255,255,255,.035) 4px),radial-gradient(circle at 50% 45%,transparent 25%,rgba(0,0,0,.55) 100%);mix-blend-mode:screen}
.viz-header{position:fixed;z-index:5;top:0;left:0;right:0;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:1rem;padding:max(1rem,env(safe-area-inset-top)) clamp(1rem,3vw,2.5rem) 1rem;background:linear-gradient(180deg,rgba(3,2,10,.72),transparent)}
.viz-logo{color:#fff;text-decoration:none;font:700 1.4rem/1 Syne;letter-spacing:-.06em}.viz-logo span{color:var(--pink)}
.signal-state{display:flex;align-items:center;gap:.6rem;font:500 .75rem DM Mono;text-transform:uppercase;letter-spacing:.1em;color:#ddd8ed}.signal-state i{width:7px;height:7px;border-radius:50%;background:#817a91;box-shadow:0 0 0 transparent;transition:.3s}.signal-state.live i{background:var(--cyan);box-shadow:0 0 16px var(--cyan)}
.header-actions{justify-self:end;display:flex;gap:.5rem}.header-actions button{padding:.62rem .8rem;border:1px solid var(--line);background:rgba(5,4,16,.42);color:#fff;font:500 .72rem DM Mono;text-transform:uppercase;letter-spacing:.07em;cursor:pointer;backdrop-filter:blur(12px)}
.viz-stage{position:relative;z-index:3;height:100%;pointer-events:none}
.title-block{position:absolute;left:clamp(1rem,4vw,4rem);top:16%;text-shadow:0 5px 32px #000;transition:opacity .35s,transform .35s}.title-block p,.title-block span{font:500 .75rem DM Mono;text-transform:uppercase;letter-spacing:.12em}.title-block p{margin:0 0 1rem;color:#d9d4e8}.title-block h1{margin:0;font:600 clamp(3.4rem,9vw,8.5rem)/.78 Syne;text-transform:uppercase;letter-spacing:-.075em}.title-block span{display:block;margin-top:1.4rem;color:var(--cyan)}
.control-panel{position:absolute;right:clamp(1rem,3vw,2.5rem);bottom:clamp(3.8rem,7vh,5.5rem);width:min(560px,calc(100vw - 2rem));padding:1rem;border:1px solid var(--line);background:var(--panel);box-shadow:0 24px 80px rgba(0,0,0,.48);backdrop-filter:blur(24px);pointer-events:auto;transition:opacity .35s,transform .35s}
.control-group+.control-group{margin-top:1rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,.11)}
.control-label{margin:0 0 .65rem;font:500 .75rem DM Mono;text-transform:uppercase;letter-spacing:.12em;color:#beb7d3}
.choice-row{display:flex;flex-wrap:wrap;gap:.45rem}.choice-row button,.file-button,.stream-form button{min-height:38px;padding:.58rem .75rem;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.045);font:500 .75rem DM Mono;text-transform:uppercase;letter-spacing:.055em;cursor:pointer;transition:border-color .2s,color .2s,background .2s}.choice-row button:hover,.choice-row button:focus-visible,.file-button:hover,.file-button:focus-visible,.stream-form button:hover,.stream-form button:focus-visible{border-color:var(--cyan);color:var(--cyan)}.choice-row button.active{border-color:var(--pink);background:rgba(255,91,223,.14);color:#fff}.file-button{display:inline-flex;align-items:center}
#audio-file{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.stream-form{margin-top:.8rem}.stream-form>label{display:block;margin-bottom:.4rem;font:500 .75rem DM Mono;text-transform:uppercase;letter-spacing:.08em;color:#aaa4be}.stream-form>div{display:grid;grid-template-columns:1fr auto}.stream-form input{min-width:0;padding:.62rem .7rem;border:1px solid rgba(255,255,255,.19);border-right:0;background:rgba(0,0,0,.3);color:#fff;font:400 .75rem DM Mono;outline:none}.stream-form input:focus{border-color:var(--cyan)}.stream-form button{border-color:rgba(255,255,255,.19)}.stream-form p{margin:.35rem 0 0;color:#8e879f;font:400 .75rem DM Mono}
.player-row{display:grid;grid-template-columns:1fr 70px;gap:.75rem;align-items:center;margin-top:1rem}.player-row audio{width:100%;height:34px;filter:invert(1) hue-rotate(160deg) saturate(.65)}.live-input-label{display:none;margin:0;font:500 .75rem DM Mono;text-transform:uppercase;letter-spacing:.08em;color:var(--cyan)}.player-row.capture-mode{grid-template-columns:1fr}.player-row.capture-mode audio{display:none}.player-row.capture-mode .live-input-label{display:block}.player-row.capture-mode .meter{width:100%}.meter{height:5px;background:rgba(255,255,255,.12);overflow:hidden}.meter span{display:block;width:0;height:100%;background:linear-gradient(90deg,var(--cyan),var(--pink));box-shadow:0 0 14px var(--pink);transition:width 80ms linear}
.status-message{margin:.75rem 0 0;color:#b8b1c9;font:400 .75rem/1.5 DM Mono}
.viz-footer{position:fixed;z-index:5;left:clamp(1rem,3vw,2.5rem);right:clamp(1rem,3vw,2.5rem);bottom:max(1rem,env(safe-area-inset-bottom));display:flex;justify-content:space-between;pointer-events:none;color:#aaa4ba;font:500 .72rem DM Mono;text-transform:uppercase;letter-spacing:.08em;transition:opacity .35s}.viz-footer a{color:var(--cyan);text-decoration:none;pointer-events:auto}
body.interface-hidden .control-panel{opacity:0;transform:translateY(2rem);pointer-events:none}body.interface-hidden .title-block{opacity:0;transform:translateY(-1rem)}body.interface-hidden .viz-footer{opacity:0}.interface-hidden #toggle-interface{border-color:var(--cyan);color:var(--cyan)}
button:focus-visible,.file-button:focus-visible,a:focus-visible{outline:2px solid #fff;outline-offset:3px}
@media(max-width:760px){.viz-header{grid-template-columns:auto 1fr}.signal-state{justify-self:end}.header-actions{position:fixed;right:1rem;top:4.2rem}.title-block{top:13%}.title-block h1{font-size:clamp(3rem,16vw,5rem)}.control-panel{left:1rem;right:1rem;bottom:3.2rem;width:auto;max-height:52vh;overflow:auto;padding:.85rem}.player-row{grid-template-columns:1fr}.meter{display:none}.viz-footer{font-size:.68rem}.preset-row,.source-row{flex-wrap:nowrap;overflow-x:auto;padding-bottom:.35rem}.preset-row>*,.source-row>*{flex:0 0 auto}.stream-form p{display:none}}
@media(max-height:680px){.title-block{top:13%}.title-block h1{font-size:3.1rem}.control-panel{max-height:58vh;overflow:auto}}
@media(prefers-reduced-motion:reduce){.title-block,.control-panel,.viz-footer,.meter span{transition:none}}
