:root{color-scheme:dark;--bg:#090b10;--panel:#0f131b;--panel2:#141a24;--panel3:#1a2230;--line:#273244;--line2:#35445d;--text:#eef3fb;--muted:#8793a7;--blue:#63a7ff;--cyan:#5ce1e6;--green:#60d394;--yellow:#f6c85f;--red:#ff6b6b;--purple:#b69cff;--flow:#ffb454;--r:10px;--mono:ui-monospace,SFMono-Regular,Consolas,monospace;--sans:Inter,system-ui,-apple-system,Segoe UI,sans-serif}
*{box-sizing:border-box}html,body,#app{height:100%;margin:0;overflow:hidden}body{background:var(--bg);color:var(--text);font-family:var(--sans);font-size:13px}button,input,select,textarea{font:inherit}button{color:var(--text);background:#151b25;border:1px solid var(--line);border-radius:7px;min-height:32px;padding:6px 10px;cursor:pointer}button:hover{background:#1d2633;border-color:var(--line2)}button:disabled{opacity:.4;cursor:not-allowed}input,select,textarea{width:100%;background:#0b0f16;color:var(--text);border:1px solid var(--line);border-radius:7px;padding:8px;outline:0}input:focus,select:focus,textarea:focus{border-color:var(--blue);box-shadow:0 0 0 2px #63a7ff22}textarea{min-height:100px;resize:vertical;font-family:var(--mono);font-size:11px}.topbar{height:56px;display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line);background:#0b0e14;position:relative;z-index:50}.brand{display:flex;align-items:center;gap:8px;min-width:180px;color:inherit;text-decoration:none}.brand .logo{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;font:bold 16px var(--mono);background:linear-gradient(135deg,#5ce1e6,#7b8cff);color:#071018;box-shadow:0 0 30px #5ce1e61c}.brand span:last-child{display:flex;flex-direction:column;line-height:1.05}.brand b{font-size:14px;letter-spacing:.02em}.brand small,.panel-head small{font-size:9px;color:var(--muted);margin-top:3px}.project-strip{flex:1;display:flex;align-items:center;gap:8px;min-width:0;max-width:420px}.project-strip input{border:0;background:transparent;font-weight:600;padding:6px 8px;min-width:0}.project-strip #saveState{font-size:9px;color:var(--muted);white-space:nowrap}.toolbar{margin-left:auto;display:flex;gap:5px}.toolbar button{min-width:34px;height:34px;padding:5px 9px}.toolbar .run{background:#153328;border-color:#246848;color:#a9f2c8}.toolbar .stop{color:#ffaaa9}.menu{display:none;position:absolute;right:10px;top:50px;width:210px;padding:5px;border:1px solid var(--line2);border-radius:10px;background:#101620;box-shadow:0 18px 60px #0009;z-index:100}.menu.open{display:grid}.menu button{text-align:left;border:0;background:transparent}.menu button:hover{background:#1b2533}.danger-text{color:#ff8e8e!important}.studio{height:calc(100% - 82px);display:grid;grid-template-columns:240px minmax(0,1fr) 280px}.panel{background:var(--panel);min-width:0;overflow:hidden;z-index:30}.library{border-right:1px solid var(--line)}.inspector{border-left:1px solid var(--line)}.panel-head{height:53px;padding:10px 12px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.panel-head>div{display:flex;flex-direction:column}.search{margin:10px;display:flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:8px;background:#0b0f16;padding-left:8px}.search input{border:0;box-shadow:none;padding:7px;background:transparent}.search span{color:var(--muted)}.node-library{height:calc(100% - 125px);overflow:auto;padding:0 8px 12px}.lib-category{margin-bottom:12px}.lib-category h3{font-size:9px;text-transform:uppercase;letter-spacing:.12em;color:#6f7d91;margin:10px 5px 5px}.lib-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;margin:4px 0;min-height:38px;background:#111720}.lib-item i{width:9px;height:9px;border-radius:3px;background:var(--blue);box-shadow:0 0 10px currentColor}.lib-item span{display:flex;flex-direction:column}.lib-item b{font-size:11px}.lib-item small{font-size:9px;color:var(--muted);margin-top:2px}.library-foot{height:50px;border-top:1px solid var(--line);padding:9px 11px;color:#718097;font-size:9px;line-height:1.4}.viewport{position:relative;overflow:hidden;outline:0;touch-action:none;background:#0a0d13}.grid{position:absolute;inset:-200px;background-image:linear-gradient(#202a391f 1px,transparent 1px),linear-gradient(90deg,#202a391f 1px,transparent 1px),linear-gradient(#2c3a5024 1px,transparent 1px),linear-gradient(90deg,#2c3a5024 1px,transparent 1px);background-size:20px 20px,20px 20px,100px 100px,100px 100px;pointer-events:none}.world{position:absolute;left:0;top:0;width:5000px;height:3500px;transform-origin:0 0;z-index:10}.wires{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:15;overflow:visible}.wires path{fill:none;stroke:#72819a;stroke-width:2.2;pointer-events:stroke;cursor:pointer}.wires path.flow{stroke:var(--flow);stroke-width:2.5}.wires path.selected{stroke:var(--red);stroke-width:4}.temp-wires path{stroke-dasharray:6 5;opacity:.8;pointer-events:none}.node{position:absolute;width:190px;border:1px solid #334055;border-radius:10px;background:#111720;box-shadow:0 10px 24px #0005;overflow:visible;user-select:none}.node.selected{border-color:var(--blue);box-shadow:0 0 0 2px #63a7ff22,0 14px 30px #0007}.node.running{box-shadow:0 0 0 2px #60d39466,0 0 28px #60d39422}.node-head{height:38px;padding:8px 10px;display:flex;align-items:center;gap:7px;border-radius:9px 9px 0 0;background:#18202c;cursor:grab;border-bottom:1px solid #273244}.node-head:active{cursor:grabbing}.node-head i{width:8px;height:8px;border-radius:3px;background:var(--node-color,var(--blue));box-shadow:0 0 12px var(--node-color,var(--blue))}.node-head b{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.node-head code{margin-left:auto;font-size:8px;color:#6d7a8f}.ports{padding:5px 0}.port-row{min-height:27px;display:grid;grid-template-columns:1fr 1fr;align-items:center}.port-side{display:flex;align-items:center;gap:5px;min-width:0;font-size:9px;color:#93a1b6}.port-side.out{justify-content:flex-end;text-align:right}.port-side span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.port{width:12px;height:12px;min-height:12px;padding:0;border-radius:50%;border:2px solid var(--port-color,#8895a8);background:#0a0d13;box-shadow:none;flex:0 0 auto}.port:hover,.port.pending{background:var(--port-color,#8895a8);transform:scale(1.2)}.port.connected{background:var(--port-color,#8895a8)}.node-summary{border-top:1px solid #232d3d;padding:7px 9px;font:9px/1.35 var(--mono);color:#8f9db0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.empty-hint{position:absolute;left:50%;top:50%;width:min(360px,calc(100% - 40px));transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;color:var(--muted);pointer-events:none;z-index:5}.empty-hint.hidden{display:none}.empty-hint .empty-icon{font-size:28px;color:#4f6079}.empty-hint b{color:#c7d1df;font-size:14px}.empty-hint span{font-size:10px}.empty-hint button{pointer-events:auto;margin-top:5px}.canvas-controls{position:absolute;left:10px;bottom:10px;display:flex;align-items:center;border:1px solid var(--line);border-radius:8px;background:#0e141de8;z-index:25;overflow:hidden}.canvas-controls button{border:0;border-radius:0;min-width:32px}.canvas-controls span{font:9px var(--mono);color:var(--muted);min-width:45px;text-align:center}.minimap{position:absolute;right:10px;bottom:10px;width:130px;height:82px;border:1px solid var(--line);border-radius:7px;background:#0b0f16dc;z-index:25;overflow:hidden;pointer-events:none}.mini-node{position:absolute;width:8px;height:5px;background:#5f789d;border-radius:1px}.mini-view{position:absolute;border:1px solid #63a7ff80}.runtime-badge{position:absolute;left:50%;top:10px;transform:translateX(-50%);display:flex;align-items:center;gap:6px;padding:5px 9px;border:1px solid var(--line);border-radius:999px;background:#0d131ce8;z-index:25;font-size:9px;color:var(--muted)}.runtime-badge span{width:6px;height:6px;border-radius:50%;background:#657086}.runtime-badge.running span{background:var(--green);box-shadow:0 0 9px var(--green)}.runtime-badge.error span{background:var(--red)}.tabs{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid var(--line)}.tab{border:0;border-radius:0;background:#0e131b;color:var(--muted);font-size:10px}.tab.active{color:var(--text);background:#151c27;box-shadow:inset 0 -2px var(--blue)}.tab-page{display:none;height:calc(100% - 91px);overflow:auto;padding:11px}.tab-page.active{display:block}.empty-panel{color:var(--muted);font-size:10px;line-height:1.5;padding:8px 2px}.field{margin-bottom:11px}.field label{display:flex;justify-content:space-between;gap:8px;margin-bottom:5px;color:#9aa8bb;font-size:9px}.field label code{color:#607086}.field input[type=checkbox]{width:auto}.node-meta{padding:8px;border:1px solid var(--line);border-radius:8px;margin-bottom:12px;background:#0c1118}.node-meta b{font-size:12px}.node-meta p{font-size:9px;color:var(--muted);margin:4px 0 0}.connection-list{display:grid;gap:5px}.connection{display:grid;grid-template-columns:1fr auto;gap:5px;align-items:center;padding:6px;border:1px solid var(--line);border-radius:7px;font-size:9px;color:#9aa8bb}.connection button{min-height:24px;padding:2px 6px}.inspector-actions{display:flex;gap:6px;margin-bottom:12px}.inspector-actions button{flex:1;font-size:9px}.var-row{display:grid;grid-template-columns:1fr 1fr auto;gap:5px;margin-bottom:6px}.var-row button{padding:4px 7px}.add-var{width:100%;margin-top:6px}.console-page{padding:0}.console-tools{height:38px;display:flex;align-items:center;justify-content:space-between;padding:5px 8px;border-bottom:1px solid var(--line)}.console-tools button{min-height:26px;font-size:9px}.console-tools label{font-size:9px;color:var(--muted)}.console-tools input{width:auto}.console{height:calc(100% - 38px);overflow:auto;padding:8px;font:10px/1.5 var(--mono);background:#090d13}.log-line{display:grid;grid-template-columns:55px 38px 1fr;gap:6px;padding:3px 2px;border-bottom:1px solid #151d28}.log-line time{color:#536176}.log-line .level{color:var(--blue);text-transform:uppercase}.log-line.warn .level{color:var(--yellow)}.log-line.error .level{color:var(--red)}.log-line.success .level{color:var(--green)}.log-line pre{margin:0;white-space:pre-wrap;word-break:break-word;font:inherit;color:#aeb9c8}.statusbar{height:26px;display:flex;align-items:center;gap:18px;padding:0 10px;border-top:1px solid var(--line);background:#0b0e14;color:#6f7d91;font:9px var(--mono)}.statusbar span:first-child{color:#9aa9bd}.mobile-only{display:none}.close{min-width:30px;padding:0;font-size:18px}.toast{position:fixed;left:50%;bottom:42px;transform:translateX(-50%);z-index:200;padding:8px 12px;border:1px solid var(--line2);border-radius:8px;background:#151d28;box-shadow:0 10px 30px #0008;font-size:10px;animation:toastIn .18s ease}@keyframes toastIn{from{opacity:0;transform:translate(-50%,8px)}}
@media(max-width:980px){.studio{grid-template-columns:210px minmax(0,1fr) 245px}.brand{min-width:145px}.project-strip #saveState{display:none}.toolbar button{padding:5px 7px}.minimap{width:110px;height:70px}}
@media(max-width:760px){.mobile-only{display:inline-flex}.desktop-only{display:none}.topbar{height:54px;padding:7px}.brand{min-width:0}.brand small{display:none}.brand b{font-size:12px}.brand .logo{width:32px;height:32px}.project-strip{display:none}.toolbar{gap:3px}.toolbar button{min-width:31px;height:32px;font-size:10px}.toolbar #newBtn,.toolbar #undoBtn,.toolbar #redoBtn,.toolbar #fitBtn{display:none}.studio{height:calc(100% - 80px);display:block}.viewport{width:100%;height:100%}.panel{position:absolute;top:54px;bottom:26px;width:min(86vw,310px);z-index:60;box-shadow:0 20px 60px #000b;transition:transform .2s ease}.library{left:0;transform:translateX(-105%)}.inspector{right:0;transform:translateX(105%)}.panel.open{transform:translateX(0)}.node-library{height:calc(100% - 125px)}.node{width:180px}.minimap{display:none}.statusbar{font-size:8px;justify-content:space-between}.statusbar span:nth-child(3){display:none}.canvas-controls{bottom:8px}.runtime-badge{top:8px}.menu{right:6px;top:47px}.empty-hint{top:46%}}
@media(max-width:420px){.toolbar #inspectorBtn{font-size:0}.toolbar #inspectorBtn:after{content:"ⓘ";font-size:14px}.toolbar .run{padding-inline:8px}.toolbar .stop{display:none}.brand span:last-child{display:none}.statusbar{gap:6px}.runtime-badge{left:auto;right:8px;transform:none}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}