*{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%;overflow:hidden}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:#04060f;color:#dfe7ff;user-select:none;-webkit-user-select:none}code,kbd,.chain-code,.code-view,.label,.label-input,.chip-label{font-family:ui-monospace,Cascadia Code,Consolas,monospace}.canvas{position:relative;width:100%;height:100%;overflow:hidden;cursor:grab;background:radial-gradient(ellipse 120% 80% at 70% 20%,#0b1230 0%,transparent 60%),radial-gradient(ellipse 100% 90% at 20% 85%,#140b2e 0%,transparent 55%),#04060f;touch-action:none}.canvas:active{cursor:grabbing}.starfield{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background-repeat:repeat}.starfield.far{background-image:radial-gradient(1px 1px at 25px 35px,rgba(255,255,255,.5),transparent),radial-gradient(1px 1px at 170px 90px,rgba(255,255,255,.35),transparent),radial-gradient(1px 1px at 90px 210px,rgba(255,255,255,.45),transparent),radial-gradient(1px 1px at 300px 160px,rgba(255,255,255,.3),transparent),radial-gradient(1px 1px at 240px 290px,rgba(255,255,255,.4),transparent),radial-gradient(1px 1px at 350px 40px,rgba(255,255,255,.3),transparent);background-size:380px 340px}.starfield.near{background-image:radial-gradient(1.5px 1.5px at 60px 120px,rgba(200,220,255,.55),transparent),radial-gradient(1.5px 1.5px at 210px 40px,rgba(255,240,210,.45),transparent),radial-gradient(1.5px 1.5px at 320px 240px,rgba(200,220,255,.5),transparent),radial-gradient(1px 1px at 130px 300px,rgba(255,255,255,.35),transparent);background-size:420px 380px}.bg-shader{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:.17;filter:blur(14px) saturate(1.25);pointer-events:none;transition:opacity .4s ease}.bg-shader.hidden{opacity:0}.world{position:absolute;top:0;left:0;transform-origin:0 0}.edges{position:absolute;top:0;left:0;overflow:visible;pointer-events:none}.loop-region{fill:#f093420b;stroke:#f2a15a4d;stroke-width:1.2;stroke-dasharray:3 9;stroke-linecap:round}.chain-line polyline{fill:none;stroke-linecap:round;stroke-linejoin:round}.chain-line .halo{stroke:#96b9ff1f;stroke-width:9}.chain-line .wire{stroke:#96b9ff8c;stroke-width:1.6}.chain-line.err .halo{stroke:#ff5a6e24}.chain-line.err .wire{stroke:#ff6e82b3}.chain-line.fixed .halo{stroke:#ffc36e21}.chain-line.fixed .wire{stroke:#ffc882a6}.link-radius{fill:#96b9ff08;stroke:#96b9ff40;stroke-width:1;stroke-dasharray:5 6}.ghost-link{stroke:#96dcffb3;stroke-width:1.6;stroke-dasharray:4 5}.chain-tag{position:absolute;top:0;left:0;display:flex;align-items:center;gap:8px;padding-top:38px;padding-left:0;pointer-events:none;white-space:nowrap}.chain-no{pointer-events:auto;min-width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;font-size:11px;color:#bed2fae6;background:#141e3cd9;border:1px solid rgba(140,170,255,.35);border-radius:999px;cursor:grab}.chain-no:active{cursor:grabbing}.chain-code{font-size:12px;color:#a0bef0bf;text-shadow:0 1px 4px rgba(0,0,0,.9)}.chain-tag.err .chain-no{border-color:#ff6e8299;color:#ffb4c0}.chain-tag.err .chain-code{color:#ff8c9be6}.chain-tag.in-loop .chain-no{border-color:#f2a15a8c;color:#f9ca94}.chain-tag.fixed .chain-no{border-color:#ffc88299;color:#ffd9a0}.chain-tag.fixed .chain-code{color:#ffd296d9}.node{position:absolute;top:0;left:0;width:0;height:0;cursor:grab;--hue: 210;--sat: 90%}.node:active{cursor:grabbing}.node .hit{position:absolute;width:40px;height:40px;translate:-50% -50%;border-radius:50%}.cat-input{--hue: 190}.cat-fn{--hue: 262}.cat-value{--hue: 45}.cat-flow{--hue: 22}.cat-op{--hue: 220;--sat: 12%}.star-r{--hue: 353}.star-g{--hue: 135}.star-b{--hue: 215}.star-var{--hue: 300}.star-rgbi .core{background:conic-gradient(#ff7080,#7dff9a,#7db2ff,#ff7080)!important}.node .swirl{position:absolute;translate:-50% -50%;border-radius:50%;pointer-events:none;background:conic-gradient(from 0deg,transparent 0deg,hsla(30,95%,72%,.85) 34deg,hsla(38,90%,65%,.25) 72deg,transparent 105deg,transparent 125deg,hsla(28,95%,68%,.8) 160deg,hsla(35,90%,62%,.22) 198deg,transparent 230deg,transparent 248deg,hsla(33,95%,70%,.8) 284deg,hsla(30,90%,64%,.24) 320deg,transparent 352deg);-webkit-mask:radial-gradient(circle,#000 16%,rgba(0,0,0,.8) 40%,rgba(0,0,0,.35) 60%,transparent 74%);mask:radial-gradient(circle,#000 16%,rgba(0,0,0,.8) 40%,rgba(0,0,0,.35) 60%,transparent 74%);animation:galaxy-spin 10s linear infinite}.star-repeat .swirl{width:58px;height:58px}.star-end .swirl{width:38px;height:38px;animation-duration:7.5s;animation-direction:reverse}@keyframes galaxy-spin{to{rotate:360deg}}.star-repeat .core,.star-end .core{width:7px!important;height:7px!important}.star-repeat .label,.star-end .label{top:30px}.node .core{position:absolute;width:var(--size, 11px);height:var(--size, 11px);translate:-50% -50%;border-radius:50%;background:radial-gradient(circle,#fff,hsl(var(--hue),var(--sat),85%) 55%,hsl(var(--hue),var(--sat),68%));box-shadow:0 0 6px 1px hsla(var(--hue),var(--sat),80%,.9),0 0 18px 4px hsla(var(--hue),var(--sat),70%,.45)}.node .glow{position:absolute;width:calc(var(--size, 11px) * 4);height:calc(var(--size, 11px) * 4);translate:-50% -50%;border-radius:50%;background:radial-gradient(circle,hsla(var(--hue),var(--sat),75%,.25) 0%,transparent 70%);animation:twinkle 3.4s ease-in-out infinite}@keyframes twinkle{0%,to{opacity:.75}50%{opacity:1}}.node:hover .glow{opacity:1.6;animation:none}.node .core{transition:scale .15s ease,box-shadow .15s ease}.node:hover .core{scale:1.12}.node.grabbed .core{scale:1.3;box-shadow:0 0 10px 2px hsla(var(--hue),var(--sat),82%,1),0 0 30px 8px hsla(var(--hue),var(--sat),70%,.6)}.node.grabbed .label{opacity:.55}.node.link-candidate .core{scale:1.22;box-shadow:0 0 10px 2px hsla(var(--hue),var(--sat),85%,1),0 0 26px 7px hsla(var(--hue),var(--sat),72%,.55)}.node.link-candidate .glow{opacity:1.8;animation:none}.node.selected .core{outline:1.5px solid rgba(190,215,255,.9);outline-offset:4px}.node .label{position:absolute;top:calc(var(--size, 11px) / 2 + 7px);left:0;translate:-50%;white-space:nowrap;font-size:13px;letter-spacing:.04em;color:hsla(var(--hue),70%,86%,.95);text-shadow:0 1px 4px rgba(0,0,0,.9);pointer-events:none}.cat-op .label{color:#e1e8faf2}.node .label-input{position:absolute;top:calc(var(--size, 11px) / 2 + 5px);left:0;translate:-50%;width:110px;padding:4px 8px;font-size:14px;text-align:center;color:#eaf0ff;background:#0a1026f7;border:1.5px solid rgba(150,180,255,.85);border-radius:7px;outline:none;box-shadow:0 0 14px #78a0ff59}.node .var-options{position:absolute;top:calc(var(--size, 11px) / 2 + 38px);left:0;translate:-50%;display:flex;gap:4px;max-width:260px;flex-wrap:wrap;justify-content:center}.node .var-options button{padding:2px 9px;font-size:12px;font-family:ui-monospace,Cascadia Code,Consolas,monospace;color:#e7c7ff;background:#321446eb;border:1px solid rgba(220,140,255,.45);border-radius:999px;cursor:pointer}.node .var-options button:hover{background:#5a237df2}.node .var-options button.current{border-color:#dc8cffe6;color:#fff}.node .edit-btn{position:absolute;top:calc(-1 * var(--size, 11px) / 2 - 22px);left:24px;translate:-50%;width:18px;height:18px;line-height:1;font-size:11px;color:#bcd2ff;background:#0e1630d9;border:1px solid rgba(140,170,255,.5);border-radius:50%;cursor:pointer}.node .edit-btn:hover{background:#1e2d5af2}.node .delete{position:absolute;top:calc(-1 * var(--size, 11px) / 2 - 22px);left:0;translate:-50%;width:18px;height:18px;line-height:1;font-size:13px;color:#ffb4c0;background:#1e0c18d9;border:1px solid rgba(255,120,150,.5);border-radius:50%;cursor:pointer}.node .delete:hover{background:#501228f2}.ui-panel{background:#0b1024d1;border:1px solid rgba(120,150,220,.22);border-radius:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.ui-panel button{color:#cdd9ff;background:transparent;border:1px solid transparent;border-radius:8px;cursor:pointer;font-size:13px}.ui-panel button:hover{background:#7896dc26;border-color:#7896dc4d}.ui-panel button.active{background:#7896dc38;border-color:#7896dc66}.palette-wrap{position:absolute;top:12px;bottom:12px;left:12px;width:224px}.palette{position:relative;height:100%;display:flex;flex-direction:column;overflow:hidden}.palette-head{padding:12px 14px 8px}.palette-title{display:block;font-size:13px;font-weight:600;letter-spacing:.1em;color:#e8eeff}.palette-sub{font-size:11px;color:#b4c3e68c}.palette-scroll{flex:1;overflow-y:auto;padding:4px 12px 12px;scrollbar-width:thin;scrollbar-color:rgba(120,150,220,.35) transparent}.palette-section{margin-top:10px}.section-title{font-size:10px;text-transform:uppercase;letter-spacing:.14em;color:#96aad799;margin-bottom:6px}.chip-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px}.chip{display:flex;align-items:center;gap:7px;padding:5px 8px;border-radius:8px;background:#7896dc12;border:1px solid rgba(120,150,220,.14);cursor:grab;--hue: 210;--sat: 90%;transition:background .12s,transform .08s}.chip:hover{background:#7896dc29;transform:translateY(-1px)}.chip:active{cursor:grabbing}.chip-dot{flex:none;width:9px;height:9px;border-radius:50%;background:radial-gradient(circle,#fff,hsl(var(--hue),var(--sat),78%));box-shadow:0 0 7px 1.5px hsla(var(--hue),var(--sat),72%,.8)}.star-rgbi .chip-dot{background:conic-gradient(#ff7080,#7dff9a,#7db2ff,#ff7080)}.chip-label{font-size:12px;color:#d7e2fceb;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trash-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:13px;color:#ffb4c0;background:#3c0a188c;border:2px dashed rgba(255,120,150,.6);border-radius:12px;pointer-events:none}.palette.trash{border-color:#ff789680}.preview-panel{position:absolute;top:12px;left:50%;translate:-50%;width:480px;overflow:hidden;transition:width .18s ease;z-index:5}.preview-panel.big{width:780px}.shader-canvas{display:block;width:100%;aspect-ratio:16 / 9;background:#000}.gl-missing{position:absolute;top:0;left:0;right:0;aspect-ratio:16 / 9;display:flex;align-items:center;justify-content:center;font-size:13px;color:#ffb4c0}.preview-bar{display:flex;align-items:center;gap:4px;padding:6px 8px}.preview-bar button{min-width:28px;padding:3px 7px}.time-readout{font-size:11px;min-width:44px;color:#b4c3e699;font-variant-numeric:tabular-nums}.err-badge{font-size:11px;padding:2px 8px;border-radius:999px;color:#ffb4c0;background:#dc506e24;border:1px solid rgba(220,80,110,.4)}.bar-spring{flex:1}.code-view{max-height:240px;overflow:auto;padding:10px 14px;font-size:11.5px;line-height:1.65;color:#bed2fae6;border-top:1px solid rgba(120,150,220,.18);white-space:pre;-webkit-user-select:text;user-select:text}.right-col{position:absolute;top:12px;right:12px;width:240px;display:flex;flex-direction:column;gap:10px;max-height:calc(100% - 24px);z-index:4;pointer-events:none}.right-col>*{pointer-events:auto}.presets{flex:none;overflow:hidden}.skies{display:flex;flex-direction:column;min-height:0;overflow:hidden}.skies-save-row{display:flex;gap:6px;padding:4px 10px 8px}.skies-save-row input{flex:1;min-width:0;padding:5px 9px;font-size:12px;color:#eaf0ff;background:#7896dc14;border:1px solid rgba(120,150,220,.25);border-radius:8px;outline:none}.skies-save-row input:focus{border-color:#8caaff8c}.skies-save-row button{padding:4px 11px;border:1px solid rgba(120,150,220,.3)!important}.skies-list{overflow-y:auto;min-height:0;padding:0 8px 6px;scrollbar-width:thin;scrollbar-color:rgba(120,150,220,.35) transparent}.skies-empty{padding:10px 8px 12px;font-size:12px;color:#aab9dc80;text-align:center}.sky-item{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:8px;cursor:pointer;transition:background .12s}.sky-item:hover{background:#7896dc1f}.sky-thumb{flex:none;width:48px;height:27px;border-radius:4px;object-fit:cover;background:#000;border:1px solid rgba(120,150,220,.25)}.sky-thumb.placeholder{background:radial-gradient(circle at 40% 40%,#101a3a,#04060f)}.sky-meta{flex:1;min-width:0}.sky-name{font-size:12.5px;color:#dfe8ff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sky-sub{font-size:10.5px;color:#aab9dc8c}.sky-btn{flex:none;min-width:22px;padding:2px 4px!important;font-size:12px}.sky-btn.danger:hover,.sky-btn.danger.armed{color:#ffb4c0;background:#dc506e2e;border-color:#dc506e73!important}.skies-foot{padding:4px 10px 10px;display:flex}.skies-foot button{flex:1;padding:5px 0;font-size:12px;border:1px dashed rgba(120,150,220,.3)!important}.presets-head{width:100%;display:flex;justify-content:space-between;align-items:center;padding:10px 14px!important;font-size:13px;font-weight:600;letter-spacing:.08em;color:#e8eeff!important;border-radius:0!important}.presets-list{padding:2px 8px 4px;max-height:42vh;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:rgba(120,150,220,.35) transparent}.presets-more{display:block;width:calc(100% - 16px);margin:0 8px 8px;padding:5px 0;font-size:11.5px;color:#aac3f5bf!important;border:1px dashed rgba(120,150,220,.3)!important;border-radius:8px}.preset-pop{position:fixed;right:262px;width:232px;z-index:30;pointer-events:none;background:#0b1024eb;border:1px solid rgba(120,150,220,.35);border-radius:12px;overflow:hidden;box-shadow:0 14px 44px #0000008c}.preset-pop.hidden{display:none}.preset-pop canvas{display:block;width:100%;aspect-ratio:16 / 9;background:#000}.pop-name{padding:6px 11px;font-size:12px;color:#dfe8ff;letter-spacing:.05em}.preset-item{padding:8px;border-radius:8px;cursor:pointer;transition:background .12s}.preset-item:hover{background:#7896dc1f}.preset-name{display:flex;align-items:center;justify-content:space-between;font-size:13px;color:#dfe8ff}.preset-grab{font-size:13px;padding:1px 6px;border-radius:6px;color:#aac3f5b3;cursor:grab}.preset-grab:hover{background:#7896dc33;color:#fff}.preset-desc{font-size:11px;color:#aab9dc99;margin-top:1px}.toolbar{position:absolute;bottom:16px;left:50%;translate:-50%;display:flex;align-items:center;gap:6px;padding:8px 12px}.toolbar button{min-width:30px;padding:5px 10px}.toolbar button.danger:hover{color:#ffb4c0;background:#dc506e1f;border-color:#dc506e59}.toolbar button.danger.armed{color:#fff;background:#dc506e59;border-color:#ff7896b3;animation:arm-pulse .9s ease-in-out infinite}@keyframes arm-pulse{0%,to{box-shadow:0 0 #ff789666}50%{box-shadow:0 0 0 5px #ff789600}}.zoom-level{min-width:46px;text-align:center;font-size:12px;color:#becdf0bf;font-variant-numeric:tabular-nums}.sep{width:1px;height:18px;background:#7896dc40;margin:0 4px}.count{margin-left:4px;font-size:12px;color:#b4c3e68c}.ghost{position:fixed;top:0;left:0;pointer-events:none;z-index:50}.ghost .node{position:static;cursor:grabbing}.ghost-preset{translate:-50% -50%;padding:6px 12px;font-size:13px;color:#e8eeff;background:#0e142ce6;border:1px dashed rgba(140,170,255,.5);border-radius:999px;white-space:nowrap}.marquee{position:fixed;border:1px dashed rgba(150,200,255,.75);background:#96b9ff14;border-radius:4px;pointer-events:none;z-index:40}.toast-stack{position:absolute;bottom:72px;left:50%;translate:-50%;display:flex;flex-direction:column;align-items:center;gap:6px;pointer-events:none;z-index:45}.toast{padding:7px 16px;font-size:12.5px;color:#dfe8ff;border-radius:999px;animation:toast-in .22s ease}@keyframes toast-in{0%{opacity:0;transform:translateY(8px) scale(.95)}to{opacity:1;transform:none}}.empty-hint{position:absolute;top:46%;left:50%;translate:-50% -50%;text-align:center;pointer-events:none;color:#aabeeb80;font-size:14px;line-height:1.9}.empty-title{font-size:22px;letter-spacing:.2em;color:#c8d7faa6}.help{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#02040c99;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:60}.help-card{width:min(520px,92vw);max-height:84vh;overflow-y:auto;padding:24px 28px;background:#0c1228f5;border:1px solid rgba(120,150,220,.3);border-radius:14px;box-shadow:0 20px 60px #0009}.help-card h2{font-size:15px;letter-spacing:.08em;margin-bottom:14px;color:#e8eeff}.help-card ul{list-style:none;display:flex;flex-direction:column;gap:9px;font-size:13px;color:#cddafad9}.help-card b{color:#fff}.help-card code{padding:0 4px;font-size:12px;background:#7896dc24;border-radius:4px}.help-card kbd{padding:1px 5px;font-size:11px;background:#7896dc2e;border:1px solid rgba(120,150,220,.35);border-radius:4px}.help-note{margin-top:14px;font-size:12px;color:#aab9dc8c}
