:root{color:#e5e7eb;font-synthesis:none;text-rendering:optimizelegibility;background:#111;font-family:Inter,ui-sans-serif,system-ui,sans-serif}*{box-sizing:border-box}html,body{width:100%;height:100%;margin:0;overflow:hidden}body{background:#111}button{font:inherit}.app{grid-template-rows:52px 1fr 28px;width:100vw;height:100vh;display:grid}.topbar{background:#151515;border-bottom:1px solid #292929;justify-content:space-between;align-items:center;padding:0 16px;display:flex}.brand{letter-spacing:.08em;font-size:13px;font-weight:600}.controls{gap:6px;display:flex}button{color:#ddd;cursor:pointer;background:#1d1d1d;border:1px solid #333;border-radius:5px;padding:5px 10px}button:hover{background:#272727}.workspace{grid-template-columns:minmax(0,1fr) 320px;min-height:0;display:grid;overflow:hidden}.canvas{-webkit-user-select:none;user-select:none;background-color:#101010;background-image:radial-gradient(#292929 1px,#0000 1px);background-size:24px 24px;width:100%;height:100%;position:relative;overflow:hidden}.connections{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.connection{fill:none;stroke:#777;stroke-width:2px}.world-node{cursor:grab;background:#181818;border:1px solid #3a3a3a;border-radius:7px;flex-direction:column;width:160px;height:110px;display:flex;position:absolute;overflow:hidden;box-shadow:0 8px 20px #0000004d}.world-node:active{cursor:grabbing}.world-node.selected{border-color:#aaa}.node-header{text-transform:uppercase;letter-spacing:.08em;border-bottom:1px solid #303030;justify-content:space-between;align-items:center;height:34px;min-height:34px;padding:0 10px;font-size:11px;font-weight:600;display:flex}.node-body{font-variant-numeric:tabular-nums;text-align:center;flex:1;justify-content:center;align-items:center;padding:8px 12px;font-size:24px;display:flex;overflow:hidden}.node-value-text{text-overflow:ellipsis;white-space:nowrap;color:#ddd;max-width:100%;line-height:1.2;overflow:hidden}.node-value-text.text-sm{font-size:15px}.node-value-text.text-xs{font-size:12px}.node-body span{color:#ddd}.port{cursor:crosshair;background:#888;border:2px solid #111;border-radius:50%;width:12px;height:12px;margin-top:-6px;padding:0;position:absolute;top:50%}.port:hover{background:#ddd;transform:scale(1.25)}.input-port{left:-6px}.output-port{right:-6px}.connection.temporary{stroke-dasharray:6 6;opacity:.6}.side-panel{border-left:1px solid #292929;min-height:0;overflow:hidden auto}.output-panel{min-height:0}.panel-title{letter-spacing:.08em;border-bottom:1px solid #292929;padding:14px 16px;font-size:11px;font-weight:600}.current-output{padding:20px 16px}.output-value{justify-content:space-between;align-items:baseline;padding-bottom:20px;display:flex}.output-value span{color:#777;font-size:12px}.output-value strong{font-variant-numeric:tabular-nums;font-size:32px;font-weight:400}.history{border-top:1px solid #292929}.history-title{color:#777;letter-spacing:.08em;padding:12px 16px;font-size:10px}.history-row{font-variant-numeric:tabular-nums;border-top:1px solid #202020;justify-content:space-between;padding:7px 16px;font-size:12px;display:flex}.history-row span:first-child{color:#666}.statusbar{color:#666;background:#151515;border-top:1px solid #292929;align-items:center;gap:20px;padding:0 12px;font-size:10px;display:flex}.node-palette{background:#151515f2;border:1px solid #292929;border-radius:6px;flex-wrap:wrap;gap:4px;max-width:calc(100% - 24px);padding:6px;display:flex;position:absolute;bottom:12px;left:12px}.node-palette button{font-size:10px}.inspector{background:#131313;border-bottom:1px solid #2a2a2a}.inspector-header{border-bottom:1px solid #262626;justify-content:space-between;align-items:center;padding:14px 18px 10px;display:flex}.inspector-header .panel-title{letter-spacing:.08em;color:#888;background:0 0;border:none;padding:0;font-size:11px;font-weight:600}.node-type-badge{text-transform:uppercase;letter-spacing:.04em;color:#aaa;background:#222;border:1px solid #333;border-radius:12px;padding:2px 12px;font-size:10px;font-weight:600;display:inline-block}.node-type-badge.input{color:#7ab7ff;background:#1a2a3a;border-color:#1a3a5a}.node-type-badge.output{color:#ff7ab7;background:#2a1a2a;border-color:#4a1a3a}.node-type-badge.constant{color:#7aff7a;background:#1a2a1a;border-color:#1a4a1a}.node-type-badge.and{color:#ffd77a;background:#2a2a1a;border-color:#4a3a1a}.node-type-badge.or{color:#d77aff;background:#2a1a2a;border-color:#3a1a4a}.node-type-badge.not{color:#ff7a7a;background:#2a1a1a;border-color:#4a1a1a}.node-type-badge.custom{color:#7affd7;background:#1a2a2a;border-color:#1a4a3a}.inspector-content{flex-direction:column;gap:14px;padding:16px 18px 20px;display:flex}.field{flex-direction:column;gap:4px;display:flex}.field label{letter-spacing:.06em;text-transform:uppercase;color:#666;font-size:10px;font-weight:500}.readonly-value{font-variant-numeric:tabular-nums;color:#ddd;background:#1a1a1a;border:1px solid #282828;border-radius:6px;padding:8px 12px;font-size:13px;transition:border-color .15s}.readonly-value:hover{border-color:#3a3a3a}.field select,.field input[type=text],.field input[type=number]{color:#ddd;appearance:none;background:#1a1a1a;border:1px solid #2a2a2a;border-radius:6px;outline:none;width:100%;padding:8px 12px;font-family:inherit;font-size:13px;transition:border-color .2s,box-shadow .2s}.field select{cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23666'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding-right:34px}.field select:hover,.field input[type=text]:hover,.field input[type=number]:hover{border-color:#3a3a3a}.field select:focus,.field input[type=text]:focus,.field input[type=number]:focus{border-color:#666;box-shadow:0 0 0 3px #ffffff0a}.checkbox-wrapper{align-items:center;gap:10px;padding:4px 0;display:flex}.checkbox-wrapper label{text-transform:none;color:#bbb;cursor:pointer;font-size:13px}.field input[type=checkbox]{accent-color:#888;cursor:pointer;background:#1a1a1a;border:1px solid #2a2a2a;border-radius:4px;flex-shrink:0;width:18px;height:18px}.field input[type=checkbox]:hover{border-color:#444}.node-id{color:#555;letter-spacing:.02em;-webkit-user-select:all;user-select:all;word-break:break-all;background:#141414;border:1px solid #222;border-radius:6px;padding:6px 12px;font-family:JetBrains Mono,Fira Code,monospace;font-size:11px;transition:border-color .15s}.node-id:hover{border-color:#333}.inspector-divider{background:#222;height:1px;margin:2px 0}.inspector.empty{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:200px;padding:32px 20px;display:flex}.inspector.empty .panel-title{color:#555;border:none;padding-bottom:6px}.inspector.empty p{color:#444;letter-spacing:.02em;margin:0;font-size:13px}.empty-icon{opacity:.3;margin-bottom:8px;font-size:32px}@keyframes nodeAppear{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes nodeDisappear{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}.world-node.node-added{animation:.25s ease-out forwards nodeAppear}.world-node.node-removing{pointer-events:none;animation:.25s ease-in forwards nodeDisappear}.world-node.has-error{outline:2px solid #ef4444;box-shadow:0 0 16px #ef444466}.world-node .error-badge{color:#fff;background:#ef4444;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;font-size:11px;font-weight:800;display:inline-flex}.world-node .node-body.error-text{color:#ef4444;letter-spacing:.5px;font-size:12px;font-weight:700}.world-node .node-error-banner{color:#fca5a5;background:#ef444426;border-radius:4px;margin-top:4px;padding:4px 6px;font-size:10px;line-height:1.2}.port.port-error{box-shadow:0 0 6px #ef4444;background:#ef4444!important}.node-type-badge.concat,.node-type-badge.length,.node-type-badge.slice,.node-type-badge.includes,.node-type-badge.char_at{color:#a5b4fc;background:#1f2937;border-color:#374151}.canvas-viewport{transform-origin:0 0;will-change:transform;width:100%;height:100%;position:absolute;top:0;left:0}.zoom-controls{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:100;-webkit-user-select:none;user-select:none;background:#151515d9;border:1px solid #2d2d2d;border-radius:6px;align-items:center;gap:4px;padding:4px 6px;display:flex;position:absolute;top:14px;right:14px}.zoom-controls button{color:#bbb;cursor:pointer;background:#1a1a1a;border:1px solid #333;border-radius:4px;padding:3px 8px;font-size:11px}.zoom-controls button:hover{color:#fff;background:#2a2a2a}.zoom-level-text{font-variant-numeric:tabular-nums;color:#888;text-align:center;min-width:44px;padding:0 6px;font-size:11px}.canvas-dock{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:100;-webkit-user-select:none;user-select:none;background:#161616e6;border:1px solid #333;border-radius:8px;align-items:center;gap:4px;padding:4px 6px;display:flex;position:absolute;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #00000080}.dock-btn{color:#a0a0a0;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:500;transition:all .15s;display:flex}.dock-btn:hover{color:#fff;background:#2a2a2a}.dock-btn.active{color:#38bdf8;background:#333;border-color:#4a4a4a}.dock-divider{background:#333;width:1px;height:20px;margin:0 4px}.zoom-controls{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:100;-webkit-user-select:none;user-select:none;background:#161616e6;border:1px solid #333;border-radius:8px;align-items:center;gap:4px;padding:4px 6px;display:flex;position:absolute;top:auto;bottom:20px;right:20px;box-shadow:0 8px 24px #0006}.palette-modal-backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1500;background:#0009;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.palette-modal{background:#181818;border:1px solid #333;border-radius:10px;flex-direction:column;width:480px;max-height:80vh;display:flex;overflow:hidden;box-shadow:0 20px 50px #000000b3}.palette-header{background:#1c1c1c;border-bottom:1px solid #282828;justify-content:space-between;align-items:center;padding:12px 18px;display:flex}.palette-header h3{letter-spacing:.06em;color:#ddd;margin:0;font-size:13px;font-weight:600}.palette-body{flex-direction:column;gap:16px;padding:16px;display:flex;overflow-y:auto}.palette-group{flex-direction:column;gap:8px;display:flex}.palette-group-title{letter-spacing:.08em;text-transform:uppercase;color:#666;font-size:10px;font-weight:700}.palette-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:6px;display:grid}.palette-item-btn{color:#ccc;text-align:center;cursor:pointer;background:#202020;border:1px solid #2f2f2f;border-radius:6px;padding:8px 10px;font-size:11px;transition:all .15s}.palette-item-btn:hover{color:#fff;background:#2a2a2a;border-color:#444;transform:translateY(-1px)}.controls{align-items:center;gap:8px;display:flex}.control-group{background:#1b1b1b;border:1px solid #2d2d2d;border-radius:6px;align-items:center;gap:2px;padding:2px;display:inline-flex}.control-group button{color:#bbb;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;padding:4px 10px;font-size:11px;font-weight:500;line-height:1.2;transition:all .15s}.control-group button:hover{color:#fff;background:#282828}.control-group button.active{color:#fff;background:#2563eb;border-color:#3b82f6}.control-group button.danger:hover{color:#fca5a5;background:#7f1d1d}.topbar-divider{background:#282828;width:1px;height:20px;margin:0 4px}.connection-hitbox{fill:none;stroke:#0000;stroke-width:16px;cursor:pointer;pointer-events:stroke}.connection.wire-cutting,.connection-hitbox:hover+.connection{filter:drop-shadow(0 0 6px #ef4444cc);stroke:#ef4444!important;stroke-width:3px!important}.dock-btn.cut-active{color:#fca5a5;background:#7f1d1d;border-color:#ef4444}.selection-marquee{pointer-events:none;z-index:99;background:#38bdf81f;border:1px dashed #38bdf8;border-radius:2px;position:absolute}.port-label{text-transform:lowercase;pointer-events:none;-webkit-user-select:none;user-select:none;letter-spacing:.2px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:8.5px;font-weight:700;line-height:1;position:absolute}.input-port-label{color:#94a3b8;left:12px;transform:translateY(-50%)}.output-port-label{color:#38bdf8;right:12px;transform:translateY(-50%)}.type-num{color:#60a5fa}.type-str{color:#34d399}.type-bool{color:#f472b6}.type-arr{color:#fbbf24}.type-rec{color:#a78bfa}.type-any{color:#94a3b8}node-canvas.stage-dimmed world-node:not(.spotlight-active):not(.spotlight-connected),node-canvas.stage-dimmed .world-node:not(.spotlight-active):not(.spotlight-connected){filter:grayscale(.7)blur(.3px);pointer-events:none;transition:opacity .35s,filter .35s;opacity:.12!important}node-canvas.stage-dimmed .connection-wire:not(.wire-active){transition:opacity .35s;opacity:.08!important}world-node.spotlight-active,.world-node.spotlight-active{z-index:50;transition:opacity .3s,transform .3s cubic-bezier(.16,1,.3,1);transform:translateZ(0)scale(1.02);opacity:1!important}world-node.spotlight-connected,.world-node.spotlight-connected{z-index:40;transition:opacity .3s;opacity:.85!important}@keyframes wireDataStream{0%{stroke-dashoffset:40px}to{stroke-dashoffset:0}}.connection-wire.wire-active{stroke-dasharray:6 4;filter:drop-shadow(0 0 6px #34d3998c);z-index:45;animation:.65s linear infinite wireDataStream;opacity:1!important;stroke:#34d399!important;stroke-width:2.5px!important}node-canvas.director-progressive-reveal world-node{pointer-events:none;transition:opacity .45s cubic-bezier(.16,1,.3,1),transform .45s cubic-bezier(.16,1,.3,1);transform:scale(.85);opacity:0!important}node-canvas.director-progressive-reveal .connection-group{transition:opacity .4s;opacity:0!important}@keyframes nodeMaterializePop{0%{opacity:0;filter:drop-shadow(0 0 #34d39900);transform:scale(.82)}65%{opacity:1;filter:drop-shadow(0 0 16px #34d399a6);transform:scale(1.04)}to{opacity:1;filter:drop-shadow(0 0 #34d39900);transform:scale(1)}}node-canvas.director-progressive-reveal world-node.node-materialized{pointer-events:auto;animation:.5s cubic-bezier(.16,1,.3,1) forwards nodeMaterializePop;transform:scale(1);opacity:1!important}node-canvas.director-progressive-reveal .connection-group.wire-materialized{opacity:1!important}node-canvas.director-progressive-reveal .connection-group.wire-materialized .connection-wire{stroke-dasharray:4 2;animation:.8s linear infinite wireDataStream;stroke:#34d399!important}
