:root{font-family:Avenir Next,Avenir,Helvetica Neue,sans-serif;line-height:1.5;font-weight:400;color:#dfe7ef;background-color:#0b0f14;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}html,body{margin:0;min-width:320px;min-height:100vh;background-color:#0b0f14;overflow:hidden}#root{height:100vh}.app{display:grid;grid-template-columns:minmax(220px,300px) 1fr;height:100%;background:radial-gradient(circle at top left,#1e2631,#0b0f14 55%,#07090c);color:#dfe7ef}.sidebar{padding:24px;border-right:1px solid rgba(255,255,255,.08);background:#07090cb3;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;flex-direction:column;gap:16px;overflow:auto;min-height:0}.sidebar h1{margin:0;font-size:1.4rem;letter-spacing:.04em;text-transform:uppercase}.project-link{margin-top:6px;display:inline-flex;align-items:center;gap:6px;font-size:.7rem;letter-spacing:.08em;text-transform:none;color:#aac4dcd9;text-decoration:none}.project-link:hover{color:#ebf1f8f2}.sidebar p{margin:0;font-size:.95rem;line-height:1.5;color:#dfe7efc7}.status{display:inline-flex;align-items:center;gap:10px;font-size:.9rem;color:#dfe7efbf}.dot{width:10px;height:10px;border-radius:50%;background:#59d185;box-shadow:0 0 8px #59d18599}.panel h2{margin:0 0 8px;font-size:.85rem;letter-spacing:.18em;text-transform:uppercase;color:#dfe7ef99}.palette{display:grid;gap:10px}.palette-search{border:1px solid rgba(255,255,255,.16);background:#0a0e14e6;color:#dfe7ef;padding:8px 10px;border-radius:10px;font-size:.9rem}.palette-search::placeholder{color:#dfe7ef80}.palette-group{display:grid;gap:8px;padding-bottom:8px;border-bottom:1px solid rgba(255,255,255,.06)}.palette-group-toggle{display:inline-flex;align-items:center;gap:8px;padding:0;border:none;background:none;color:inherit;cursor:pointer;text-align:left}.palette-group-caret{font-size:.75rem;color:#dfe7ef99}.palette-group:last-child{border-bottom:none}.palette-group-title{font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:#dfe7ef80}.palette-group-list{display:grid;gap:8px}.palette-button{border:1px solid rgba(255,255,255,.12);background:#10161ee6;color:#dfe7ef;padding:10px 12px;text-align:left;font-size:.9rem;border-radius:10px;transition:border-color .2s,transform .2s}.palette-button.compact{padding:4px 10px;font-size:.75rem;line-height:1.1;text-align:center}.palette-button:hover{border-color:#7abdffb3;transform:translateY(-1px)}.palette-button:disabled{opacity:.45;cursor:not-allowed;transform:none}.palette-button.danger{border-color:#ff6b6066;color:#ff9288e6}.button-row{display:grid;gap:8px;margin-top:10px}.palette-select{appearance:none;border-radius:10px;border:1px solid rgba(255,255,255,.12);background:#0c1018e6;color:#e6ebf2e0;padding:8px 10px;font-size:.75rem;cursor:pointer}.palette-input{width:100%;border-radius:10px;border:1px solid rgba(255,255,255,.12);background:#0c1018e6;color:#e6ebf2e0;padding:8px 10px;font-size:.75rem}.export-format{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:#080c1259;color:#dfe7efd1;font-size:.75rem}.export-format.disabled{opacity:.5}.slot-row{margin-top:8px;display:grid;grid-template-columns:1fr auto;align-items:center;gap:8px}.slot-actions{margin-top:6px;grid-template-columns:repeat(2,minmax(0,1fr))}.code-preview{margin:0;padding:12px;border-radius:12px;background:#090c12e6;border:1px solid rgba(255,255,255,.08);color:#dfe7efcc;font-size:.75rem;line-height:1.5;white-space:pre-wrap}.code-overlay{position:absolute;inset:0;box-sizing:border-box;background:#080c1238;border:none;border-radius:0;padding:24px;z-index:3;pointer-events:auto;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:grid;grid-template-rows:auto 1fr;gap:8px;min-height:0}.viewer-overlay{position:absolute;inset:0;box-sizing:border-box;background:#080c1238;border:none;border-radius:0;padding:24px;z-index:3;pointer-events:auto;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:grid;grid-template-rows:auto 1fr;gap:8px}.viewer-frame{display:block;width:100%;height:100%;border:1px solid rgba(255,255,255,.08);border-radius:12px;background:#05070a80}.code-overlay-header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:nowrap}.code-overlay-title-group{display:flex;align-items:center;gap:12px;flex:0 0 auto}.code-overlay-actions{display:flex;align-items:center;gap:10px;flex-wrap:nowrap;flex:1 1 auto}.code-overlay-select{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 10px;border-radius:999px;border:1px solid rgba(255,255,255,.08);background:#080c1259;color:#dfe7efcc;font-size:.65rem;letter-spacing:.08em;text-transform:uppercase}.code-overlay-select .palette-select{font-size:.65rem;height:24px;padding:0 8px}.code-overlay-title{font-size:.75rem;letter-spacing:.2em;text-transform:uppercase;color:#dfe7ef8c}.code-overlay .code-preview{height:100%;overflow:auto;background:#05070a80;border-radius:12px;min-height:0}.tsl-viewer{height:100%;border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.08);background:#05070a80}.tsl-export{height:100%;display:flex;flex-direction:column;min-height:0}.tsl-export-controls{display:flex;align-items:center;gap:8px}.tsl-export-controls .palette-button{width:auto;white-space:nowrap}.tsl-export-controls .export-format{flex:0 0 auto}.code-overlay-header .export-format{height:32px;padding:0 10px}.code-overlay-header .palette-select{height:26px;padding:0 10px}.code-overlay-header .palette-button{height:32px;padding:0 12px;display:inline-flex;align-items:center}.code-overlay-tabs{display:flex;gap:6px;margin-left:auto}.code-overlay-tab{display:inline-flex;align-items:center;height:32px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:#0c1018b3;color:#e6ebf2b8;font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;padding:0 12px;cursor:pointer}.code-overlay-tab.active{border-color:#64d2ff80;color:#d2ebffe6;background:#28507859}.toast{position:absolute;top:20px;right:20px;padding:10px 14px;border-radius:12px;background:#0c1016e6;border:1px solid rgba(255,123,87,.6);color:#ffc8b4f2;font-size:.8rem;z-index:4}.viewport{position:relative;min-height:0}.viewport canvas{display:block;width:100%;height:100%}.viewport-label{position:absolute;top:18px;left:20px;font-size:.8rem;letter-spacing:.2em;text-transform:uppercase;color:#dfe7ef99;pointer-events:none}.node-canvas{position:absolute;inset:0;pointer-events:auto;overflow:hidden;touch-action:none}.node-world{position:absolute;inset:0;transform-origin:0 0}.node-group{position:absolute;border-radius:14px;border:1px dashed rgba(120,190,255,.35);background:#18202c59;padding:10px;z-index:1;pointer-events:none}.node-group.collapsed{height:36px;overflow:hidden}.node-group-header{display:flex;align-items:center;justify-content:flex-start;width:100%;gap:8px;border:none;background:#0a0e1499;color:#e2ebf5d9;font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;padding:6px 10px;border-radius:999px;cursor:grab;pointer-events:auto}.node-group-header:active{cursor:grabbing}.node-group-spacer{flex:1}.node-group-rename{border:1px solid rgba(255,255,255,.18);background:#080c128c;color:#dfe7efbf;font-size:.55rem;letter-spacing:.08em;text-transform:uppercase;padding:2px 8px;border-radius:999px;cursor:pointer}.node-group-rename:hover{color:#ffffffe6;border-color:#ffffff59}.node-group-action{margin-top:8px;border:1px solid rgba(255,255,255,.18);background:#080c12a6;color:#dfe7efcc;font-size:.6rem;padding:4px 8px;border-radius:999px;pointer-events:auto}.node-group-title{text-align:left}.node-group-toggle{font-size:.8rem}.node-links{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}.node-links path{fill:none;stroke:#78beffb3;stroke-width:2;vector-effect:non-scaling-stroke}.node-links path.draft{stroke:#ffc878b3;stroke-dasharray:6 6}.node-stack-title{position:absolute;top:16px;right:24px;font-size:.75rem;letter-spacing:.2em;text-transform:uppercase;color:#dfe7ef8c;background:#080c12c7;padding:8px 12px;border-radius:999px;border:1px solid rgba(255,255,255,.08);pointer-events:auto}.node-empty{position:absolute;top:60px;right:24px;font-size:.85rem;color:#dfe7ef80;background:#080c12c7;padding:8px 12px;border-radius:12px;border:1px solid rgba(255,255,255,.08);pointer-events:auto}.node-card{position:absolute;width:200px;padding:10px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:#121821d9;cursor:grab;-webkit-user-select:none;user-select:none;pointer-events:auto}.node-card.node-hidden{visibility:hidden;pointer-events:none}.node-card.selected{border-color:#7abdffcc;box-shadow:0 0 0 1px #7abdff66}.node-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;border-bottom:1px solid rgba(255,255,255,.08)}.node-type{font-weight:600;font-size:.95rem}.node-title{display:flex;flex-direction:column;gap:2px}.node-subtitle{font-size:.65rem;letter-spacing:.04em;color:#becddccc}.node-actions{display:flex;gap:6px}.node-action{border:1px solid rgba(255,255,255,.12);background:#0a0e14d9;color:#dfe7efcc;font-size:.6rem;padding:4px 6px;border-radius:8px;cursor:pointer}.node-action.danger{border-color:#ff6b6066;color:#ff9288e6}.function-editor-title{margin-bottom:8px;font-size:.75rem;letter-spacing:.04em;color:#d2deebd9}.function-pin-editor{margin-top:12px;display:grid;gap:12px}.function-pin-section{padding:8px;border:1px solid rgba(255,255,255,.08);border-radius:10px;background:#0c101699;display:grid;gap:8px}.function-pin-title{font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;color:#c8d6e4d9}.function-pin-row{display:grid;gap:6px}.function-pin-input{width:100%;border:1px solid rgba(255,255,255,.12);background:#080c12bf;color:#ebf2faeb;font-size:.65rem;padding:6px 8px;border-radius:8px}.function-pin-actions{display:flex;gap:6px;flex-wrap:wrap}.function-pin-button{border:1px solid rgba(255,255,255,.12);background:#0a0e14bf;color:#dce6f0cc;font-size:.55rem;padding:4px 8px;border-radius:999px;cursor:pointer}.function-pin-button:disabled{opacity:.5;cursor:not-allowed}.function-pin-button.danger{border-color:#ff6b6066;color:#ff9288e6}.function-pin-empty{font-size:.6rem;color:#aabacab3}.node-io{display:flex;justify-content:space-between;gap:12px;padding-top:8px;min-height:48px}.node-inputs,.node-outputs{display:grid;gap:6px;font-size:.75rem;color:#dfe7efcc}.node-input-group{display:grid;gap:6px}.node-input-group-title{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:#dfe7ef73;margin-top:2px}.node-outputs{text-align:right}.node-pin-row{display:flex;align-items:center;gap:6px}.node-outputs .node-pin-row{justify-content:flex-end}.pin{width:10px;height:10px;border-radius:999px;border:1px solid rgba(255,255,255,.35)}.pin.dot-input,.pin.dot-output{padding:0;background:transparent;cursor:pointer}.pin-warning{border-color:#ff7b57e6;box-shadow:0 0 8px #ff7b5799}.pin-warning-text{margin-left:6px;font-size:.65rem;color:#ffa488e6}.dot-input{background:#5f89ff;box-shadow:0 0 6px #5f89ff99}.dot-output{background:#ff8b5f;box-shadow:0 0 6px #ff8b5f99}.pin-label{font-size:.75rem;color:#dfe7efb3}.node-id{margin-top:4px;font-size:.7rem;color:#dfe7ef80;word-break:break-all}.node-control{margin-top:10px;display:grid;gap:6px}.node-control-label{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:#dfe7ef80}.node-input{width:100%;padding:6px 8px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#0a0e14e6;color:#dfe7ef}.node-input.slider{padding:0}.node-toggle{display:flex;align-items:center;gap:8px;font-size:.7rem;color:#dfe7ef99}.file-row{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center}.file-name{font-size:.7rem;color:#dfe7efa6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-button{padding:6px 10px;font-size:.7rem}.file-input{display:none}.node-input[type=color]{padding:4px;height:32px}@media(max-width:860px){.app{grid-template-columns:1fr;grid-template-rows:auto 1fr}.sidebar{border-right:none;border-bottom:1px solid rgba(255,255,255,.08)}.node-canvas{position:static;inset:auto;margin:12px}.node-stack-title,.node-empty,.node-card{position:static;width:auto;transform:none!important}}
