:root{--bg:#111316;--panel:#181b20;--panel2:#1f232a;--line:#2b3038;--text:#e6e8eb;--muted:#8a929e;--orig:#ff5a4f;--impr:#3fa7ff;--src:#b8bec8;--good:#3ecf8e;--bad:#ff7a59;--warn:#f5b84a;color:var(--text);background:var(--bg);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:13px}*{box-sizing:border-box}body{flex-direction:column;height:100vh;margin:0;display:flex;overflow:hidden}.muted{color:var(--muted)}.small{font-size:11.5px}h3{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:16px 0 8px;font-size:12px;font-weight:600}header{border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap;align-items:center;gap:18px;padding:8px 14px;display:flex}.brand{flex-direction:column;line-height:1.25;display:flex}.brand strong{font-size:15px}.source{align-items:center;gap:8px;display:flex}.source input[type=number]{width:52px}.status{color:var(--muted);text-align:right;min-width:160px;margin-left:auto;font-size:12px}.status.busy:before{content:"⟳ ";animation:1s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}button,.btn,select,input[type=number]{background:var(--panel2);color:var(--text);border:1px solid var(--line);font:inherit;cursor:pointer;border-radius:6px;padding:5px 10px}button:hover,.btn:hover{border-color:#4a5260}input[type=number]{cursor:text;padding:4px 6px}.seg{border:1px solid var(--line);border-radius:7px;display:inline-flex;overflow:hidden}.seg button{background:0 0;border:0;border-radius:0;padding:5px 11px}.seg button+button{border-left:1px solid var(--line)}.seg button.on{color:#fff;background:#2d3440}#modes button.on{background:#34404f}main{flex:1;grid-template-columns:300px 1fr 400px;min-height:0;display:grid}aside{background:var(--panel);padding:6px 14px 30px;overflow-y:auto}#params{border-right:1px solid var(--line)}#right{border-left:1px solid var(--line)}.group h4{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:14px 0 6px;font-size:11px}.param{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:2px 8px;padding:4px 0;display:grid}.param label,.param .ctl{align-items:center;gap:6px;display:flex}.param input[type=range]{accent-color:#6aa6ff;grid-column:1/-1;width:100%}.param input[type=number]{text-align:right;width:72px}.param select{max-width:150px}#params{overflow-x:hidden}.param .hint{color:var(--muted);grid-column:1/-1;font-size:11px}.param .presets{grid-column:1/-1;gap:4px;display:flex}.param .presets button{padding:1px 7px;font-size:11px}.scope{text-transform:uppercase;letter-spacing:.05em;border-radius:4px;padding:1px 5px;font-size:9.5px}.scope.improved{color:var(--impr);background:#3fa7ff26}.scope.original{color:var(--orig);background:#ff5a4f26}.param .help{cursor:help;color:var(--muted);border:1px solid var(--line);border-radius:50%;place-items:center;width:15px;height:15px;font-size:10px;display:inline-grid}#viewport{flex-direction:column;min-width:0;min-height:0;display:flex}.toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:12px;padding:8px 12px;display:flex}#canvasWrap{background:#0b0c0e;flex:1;min-height:0;position:relative}#canvas2d,#view3d,#latheCanvas{width:100%;height:100%;position:absolute;inset:0}#canvas2d{cursor:grab}#canvas2d.dragging{cursor:grabbing}#modeBlurb{border-top:1px solid var(--line);padding:6px 12px}#player{grid-template-columns:1fr auto;align-items:center;gap:6px;display:grid}#player .row{display:contents}#player button.play{text-align:left;align-items:center;gap:8px;min-width:210px;display:flex}#player button.play.playing{background:#22303f;border-color:#6aa6ff}.dot{border-radius:50%;flex:none;width:9px;height:9px;display:inline-block}#spectrum{border:1px solid var(--line);background:#0e1013;border-radius:6px;width:100%}table#stats{border-collapse:collapse;width:100%;font-size:12px}#stats th{text-align:left;color:var(--muted);border-bottom:1px solid var(--line);padding:4px;font-weight:600}#stats td{vertical-align:top;border-bottom:1px solid #22262d;padding:4px}#stats td:first-child{color:var(--muted);width:34%}#stats .bad{color:var(--bad)}#stats .good{color:var(--good)}#stats th.o{color:var(--orig)}#stats th.i{color:var(--impr)}#warnings .w{border-left:3px solid var(--warn);background:#f5b84a12;border-radius:0 6px 6px 0;margin:6px 0;padding:6px 8px;font-size:12px}#warnings .w.o{border-color:var(--orig);background:#ff5a4f12}#warnings .w.i{border-color:var(--impr);background:#3fa7ff12}#warnings .err{color:var(--bad)}#exports{flex-wrap:wrap;gap:6px;display:flex}#tab-learn ol{padding-left:18px}#tab-learn li{margin-bottom:12px;line-height:1.45}#tab-learn li b{color:#fff}#tab-learn .try{color:var(--impr);margin-top:2px;font-size:12px;display:block}#tab-learn code{background:#262b33;border-radius:3px;padding:0 4px;font-size:12px}.tabs{margin-top:10px}.live-row{align-items:center;gap:8px;margin:6px 0;display:flex}button.primary.on,button.cut.on{color:#ffb3ad;background:#3a1f22;border-color:#ff5a4f}button.cut{color:#ff8f86;background:#2a1416;border-color:#6b2a2a;min-width:92px;font-weight:600}button.cut:disabled,button:disabled{opacity:.45;cursor:default}.meter{border:1px solid var(--line);background:#0e1013;border-radius:4px;height:8px;overflow:hidden}.meter>div{background:var(--good);width:0;height:100%;transition:width 60ms linear}.lamp{color:var(--muted);border:1px solid var(--line);background:#1c1f24;border-radius:4px;padding:2px 7px}.lamp.hot{color:#ffd1cc;background:#5a1d1d;border-color:#ff5a4f}.cutbar{background:#0e1013;border-radius:3px;height:5px;margin-top:4px;overflow:hidden}.cutbar>div{background:#ff5a4f;width:0;height:100%}#liveSpec{border:1px solid var(--line);background:#0e1013;border-radius:6px;width:100%}#liveInfo div{margin:3px 0}#tone{max-width:290px}a{color:var(--impr)}.m-only{display:none}@media (width<=1200px){main{grid-template-columns:260px 1fr 340px}#player button.play{min-width:0}}@media (width<=860px),(height<=500px) and (pointer:coarse){body{height:auto;min-height:100svh;overflow:visible}header{padding:8px 10px;padding-top:max(8px, env(safe-area-inset-top));gap:6px 10px}.brand{flex-direction:row;flex:auto;align-items:baseline;gap:8px}.brand .desc{display:none}.brand .tagline{font-size:11px}header button,header .btn,.toolbar .seg button{min-height:32px;padding:5px 9px;font-size:12.5px}header select{min-height:32px;padding:3px 8px}header input[type=number]{padding:3px 6px;font-size:16px}#modes button{white-space:nowrap}.status{order:1;min-width:0;margin-left:auto;font-size:11px}#sourceInfo{display:none}#modes{flex-basis:100%;order:3;display:flex}#modes button{flex:1}.source{flex-wrap:wrap;flex-basis:100%;order:4}#tone{flex:140px;min-width:0;max-width:none}main{flex-direction:column;display:flex}aside{padding:4px 12px 24px;overflow:visible}#params,#right{border:0}#viewport{z-index:5;background:var(--bg);border-bottom:1px solid var(--line);order:1;height:46svh;min-height:230px;position:sticky;top:0}.toolbar{scrollbar-width:none;flex-wrap:nowrap;gap:6px;padding:5px 8px;overflow-x:auto}.toolbar .seg{flex:none}#exagWrap{white-space:nowrap;flex:none}#hover,#modeBlurb{display:none}#canvas2d,#latheCanvas,#view3d{touch-action:none}#right{display:contents}.tabs{border-left:0;border-right:0;border-radius:0;order:2;margin:0}#tab-compare,#tab-live,#tab-learn{background:var(--panel);order:3;padding:4px 12px 28px}#params{order:3;padding-top:0;display:none}body.show-params #params{display:block}.m-only{display:inline-block}.tabs{z-index:4;background:var(--panel);width:100%;display:flex;position:sticky;top:max(46svh,230px)}.tabs button{white-space:nowrap;flex:1;padding:8px 4px;font-size:12px}#player{grid-template-columns:1fr auto}#stats td:first-child{width:40%}#liveMon{display:flex}#liveMon button{flex:1}}@media (height<=500px) and (pointer:coarse){#viewport{height:88svh;position:relative}.tabs{position:static}}@media (pointer:coarse){button,.btn,select{min-height:36px;padding:8px 12px}.seg button{padding:8px 12px}input[type=number],select{font-size:16px}.param{padding:7px 0}.param input[type=range]{height:26px}.param .presets button{min-height:30px;padding:4px 10px;font-size:12px}.param .help{width:22px;height:22px;font-size:12px}}@media (width<=860px),(height<=500px) and (pointer:coarse){.d-only{display:none}span.m-only{display:inline}}#liveInput{min-width:0}
