:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--space-xs:4px;--space-sm:8px;--space-md:16px;--space-lg:24px;--space-xl:32px;--bg:#0f1115;--bg-canvas:#111217;--bg-workspace:#0a0b0e;--surface-0:#181b22;--surface-1:#21242c;--surface-2:#2b2f3a;--surface-3:#363b48;--surface-hover:#3d4454;--surface-active:#474d5c;--border:#2e3440;--border-hi:#3f4756;--grid-line:#ffffff0d;--text:#e8eaef;--text-2:#b0b8c4;--text-3:#9aa3b2;--accent:#6366f1;--accent-hover:#818cf8;--accent-muted:#6366f126;--accent-text:#c7c7ff;--danger:#ef4444;--danger-hover:#f87171;--danger-muted:#ef444426;--font-ui:"Geist Sans", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--dur-instant:0s;--radius-input:6px;--radius-node:12px;--radius-panel:16px;--toolbar-h:56px;--bento-gap:var(--space-sm);--bento-pad:var(--space-sm);--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px);--safe-right:env(safe-area-inset-right,0px);--shadow-sm:0 4px 12px #0000004d;--shadow-md:0 6px 16px #0006;--shadow-lg:0 12px 24px #00000080;--shadow-xl:0 24px 80px #00000059;--scrim:#0f1115e0;--z-base:1;--z-overlay:3;--z-port:4;--z-block:5;--z-drag:10;--z-panel:12;--z-toolbar:30;--z-modal:40;--z-popover:100;--z-toast:200;--z-logs:1000;--z-ghost:9999}*,:before,:after{box-sizing:border-box;margin:0;padding:0}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}html,body{background:var(--bg-workspace);height:100%;color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}body{gap:var(--bento-gap);padding:max(var(--bento-pad), var(--safe-top)) max(var(--bento-pad), var(--safe-right)) max(var(--bento-pad), var(--safe-bottom)) max(var(--bento-pad), var(--safe-left));flex-direction:column;display:flex;overflow:hidden}button,input,select,textarea{font:inherit}button{appearance:none;cursor:pointer;background:0 0;border:none}input,select,textarea{outline:none}:where(button,a,input,select,textarea,[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:2px}#root{flex:1;min-height:0;display:flex}.bento-shell{gap:var(--bento-gap);flex:1;min-height:0;display:flex;overflow:hidden}.bento-panel{background:var(--surface-0);border:1px solid var(--border);border-radius:var(--radius-panel);overflow:hidden}.bento-divider{width:var(--space-sm);cursor:ew-resize;border-radius:var(--radius-input);transition:background var(--dur-instant);background:0 0;flex-shrink:0}.bento-divider:hover{background:var(--surface-2)}.toolbar{justify-content:space-between;align-items:center;gap:var(--space-xs);padding:max(var(--space-xs), var(--safe-top)) var(--space-md);min-height:var(--toolbar-h);background:var(--surface-0);border:1px solid var(--border);border-radius:var(--radius-panel);height:auto;z-index:var(--z-toolbar);flex-wrap:nowrap;flex-shrink:0;display:flex;overflow:hidden}.toolbar-left,.toolbar-right{align-items:center;gap:var(--space-sm);display:flex}.brand{align-items:center;gap:var(--space-sm);padding:0 var(--space-xs);white-space:nowrap;-webkit-user-select:none;user-select:none;display:flex}.logo{width:var(--space-xl);height:var(--space-xl);border-radius:var(--radius-node);background:var(--surface-2);border:1px solid var(--border-hi);color:var(--accent);flex-shrink:0;place-items:center;display:grid}.brand-name{letter-spacing:-.02em;color:var(--text);font-size:.875rem;font-weight:600}.brand-accent{color:var(--accent-text)}.toolbar-sep{width:1px;height:var(--space-lg);background:var(--border);margin:0 var(--space-xs);flex-shrink:0}.toolbar-group{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-node);align-items:center;gap:2px;padding:2px;display:flex}.toolbar-group .tb-btn{border-radius:var(--radius-input)}.tb-btn{justify-content:center;align-items:center;gap:var(--space-xs);min-width:44px;height:44px;padding:0 var(--space-sm);border-radius:var(--radius-input);color:var(--text-2);white-space:nowrap;background:0 0;border:1px solid #0000;font-size:.8125rem;font-weight:500;transition:all .12s;display:inline-flex}.tb-btn svg{flex-shrink:0}.tb-btn:hover,.tb-btn:active{background:var(--surface-hover);color:var(--text)}.tb-btn--primary{background:var(--accent-muted);border-color:var(--border-hi);color:var(--accent-text);font-weight:600}.tb-btn--primary:hover,.tb-btn--primary:active{background:var(--surface-2);color:var(--accent-hover)}.tb-btn--danger{color:var(--text-2)}.tb-btn--danger:hover,.tb-btn--danger:active{background:var(--danger-muted);color:var(--danger-hover)}.tb-btn.tb-btn--icon{width:44px;padding:0;font-size:1rem;font-weight:600}.tb-btn.tb-btn--snap{width:44px;min-width:44px;height:44px}.tb-btn.tb-btn--active{color:var(--accent-text);background:var(--accent-muted);border-color:var(--border-hi)}.status{min-width:44px;height:40px;padding:0 var(--space-sm);font-family:var(--font-mono);color:var(--text-2);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:.8125rem;display:inline-flex}.user-account{background:var(--surface-1);border:1px solid var(--border-hi);cursor:pointer;border-radius:50%;flex-shrink:0;place-items:center;width:44px;height:44px;transition:background .12s,border-color .12s;display:grid;overflow:hidden}.toolbar-link{height:44px;color:var(--text-2);letter-spacing:.3px;border-radius:var(--radius-input);transition:color var(--dur-fast) ease, background var(--dur-fast) ease;place-items:center;padding:0 10px;font-size:12px;text-decoration:none;display:grid}.toolbar-link:hover{color:var(--text);background:var(--surface-hover)}.user-account:hover,.user-account:active{background:var(--surface-hover);border-color:var(--border)}.user-account .cl-userButtonTrigger{background:0 0;border:none;border-radius:0;width:100%;height:100%;margin:0;padding:0}.user-account .cl-userButtonTrigger:focus-visible{box-shadow:inset 0 0 0 2px var(--accent);outline:none}.user-account .cl-userButtonAvatarBox,.user-account .cl-userButtonAvatarImage,.user-account img{object-fit:cover;width:100%!important;height:100%!important}.auth-gate{min-height:0;padding:var(--space-md);flex:1;justify-content:center;align-items:center;display:flex}.auth-gate__card{align-items:center;gap:var(--space-lg);text-align:center;width:100%;max-width:420px;padding:var(--space-xl);background:var(--surface-0);border:1px solid var(--border);border-radius:var(--radius-panel);box-shadow:var(--shadow-xl);flex-direction:column;display:flex}.auth-gate__brand{align-items:center;gap:var(--space-md);flex-direction:column;display:flex}.auth-gate__logo{width:56px;height:56px}.auth-gate__title{letter-spacing:-.02em;color:var(--text);font-size:1.5rem;font-weight:600}.auth-gate__description{color:var(--text-2);font-size:.9375rem;line-height:1.6}.auth-gate__actions{justify-content:center;align-items:center;gap:var(--space-sm);flex-wrap:wrap;display:flex}.auth-gate__actions .tb-btn{justify-content:center;min-width:110px}.auth-gate__legal{margin:var(--space-md) 0 0;text-align:center;color:var(--text-2);font-size:12px}.auth-gate__legal a{color:var(--accent-text);text-decoration:none}.auth-gate__legal a:hover{color:var(--accent-hover);text-decoration:underline}.parental-gate{align-items:stretch;gap:var(--space-sm);text-align:left;flex-direction:column;display:flex}.parental-gate__title{color:var(--text);text-align:center;margin:0;font-size:1.0625rem;font-weight:600;animation:.3s ease-out both pg-fade-in}.parental-gate__text{margin:0 0 var(--space-xs);color:var(--text-2);font-size:.9375rem;line-height:1.6;animation:.3s ease-out 60ms both pg-fade-in}.parental-gate__text a{color:var(--accent-text);text-decoration:none}.parental-gate__text a:hover{color:var(--accent-hover);text-decoration:underline}.parental-gate__row{justify-content:center;align-items:center;gap:var(--space-sm);flex-wrap:wrap;animation:.3s ease-out .12s both pg-fade-in;display:flex}.parental-gate__row .tb-btn,.parental-gate .tb-btn{justify-content:center;min-width:110px}.parental-gate>.tb-btn{animation:.3s ease-out .18s both pg-fade-in}.parental-gate__math{gap:var(--space-sm);flex-direction:column;align-items:stretch;animation:.3s ease-out .12s both pg-fade-in;display:flex}.parental-gate__prompt{color:var(--text);text-align:center;font-size:1rem}.parental-gate__input{width:120px;font-family:var(--font-mono);color:var(--text);background:var(--surface-1);border:1px solid var(--border-hi);border-radius:var(--radius-input);text-align:center;align-self:center;padding:8px 10px;font-size:1rem}.parental-gate__input:focus{border-color:var(--accent);outline:none}.parental-gate__error{text-align:center;color:var(--danger,#ef4444);margin:0;font-size:.8125rem}.parental-gate__check{color:var(--text);cursor:pointer;align-items:flex-start;gap:10px;font-size:.9375rem;animation:.3s ease-out .12s both pg-fade-in;display:flex}.parental-gate__check input{flex-shrink:0;margin-top:3px}.parental-gate__glow{color:#fff;border-color:var(--accent);background:#6366f129}.parental-gate__glow:hover{background:#6366f142}.parental-gate--fullpage{gap:var(--space-md);padding:var(--space-sm) 4px}@keyframes pg-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.parental-gate__title,.parental-gate__text,.parental-gate__row,.parental-gate>.tb-btn,.parental-gate__math,.parental-gate__check{animation:none}}.app{gap:var(--space-xs);flex-direction:column;flex:1;min-height:0;max-height:100dvh;display:flex;overflow:hidden}.workspace{flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.canvas-host{flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.canvas-shell{min-height:0}.sidebar{touch-action:pan-y;-webkit-user-select:none;user-select:none;flex-direction:column;flex-shrink:0;width:auto;min-width:220px;min-height:0;transition:width .18s cubic-bezier(.25,.46,.45,.94),min-width .18s cubic-bezier(.25,.46,.45,.94),transform .18s cubic-bezier(.25,.46,.45,.94);display:flex;overflow:hidden}.sidebar.insert-mode{border-color:var(--accent)}.sidebar.hidden{border-width:0;overflow:hidden;width:0!important;min-width:0!important}.sidebar-scrim{display:none}.sidebar-inner{gap:var(--space-sm);padding:var(--space-sm);flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.sidebar-header{padding:0 var(--space-xs)}.sidebar-title{text-transform:uppercase;letter-spacing:.1em;color:var(--text-3);font-size:.625rem;font-weight:600}.palette-search{position:relative}.search-icon{left:var(--space-sm);color:var(--text-3);pointer-events:none;width:12px;height:12px;position:absolute;top:50%;transform:translateY(-50%)}.palette-search input{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-input);width:100%;color:var(--text);padding:var(--space-xs) var(--space-xs) var(--space-xs) var(--space-lg);font-size:.75rem;transition:border-color .12s,background .12s}.palette-search input::placeholder{color:var(--text-3)}.palette-search input:focus{border-color:var(--border-hi);background:var(--surface-2)}.palette-list{gap:var(--space-xs);touch-action:pan-y;-webkit-overflow-scrolling:touch;flex-direction:column;flex:1;display:flex;overflow-y:auto}.palette-list::-webkit-scrollbar{width:var(--space-xs)}.palette-list::-webkit-scrollbar-track{background:0 0}.palette-list::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-input)}.palette-category{flex-direction:column;display:flex}.palette-category-header{min-height:44px;padding:2px var(--space-xs);border-radius:var(--radius-input);color:var(--text-3);text-transform:uppercase;letter-spacing:.08em;cursor:pointer;touch-action:pan-y;justify-content:space-between;align-items:center;font-size:.625rem;font-weight:600;transition:all .12s;display:flex}.palette-category-header:hover,.palette-category-header:active{background:var(--surface-hover);color:var(--text-2)}.palette-category-title{align-items:center;gap:var(--space-xs);display:flex}.category-dot{border-radius:var(--radius-input);flex-shrink:0;width:6px;height:6px}.palette-category-count{background:var(--surface-2);border-radius:var(--radius-input);padding:1px var(--space-xs);color:var(--text-3);font-size:.5625rem}.palette-blocks{flex-direction:column;gap:2px;padding:2px 0;display:flex}.palette-block{border-radius:var(--radius-input);min-height:44px;color:var(--text-2);-webkit-user-select:none;user-select:none;cursor:grab;text-align:left;touch-action:pan-y;white-space:nowrap;background:0 0;border:1px solid #0000;align-items:center;width:max-content;min-width:100%;font-size:.75rem;line-height:1.25;transition:all .12s;display:flex}.palette-block>span{align-items:center;gap:var(--space-xs);padding:var(--space-xs);white-space:nowrap;width:max-content;display:flex}.palette-block:hover,.palette-block:active{background:var(--surface-hover);border-color:var(--border);color:var(--text)}.palette-block:active{cursor:grabbing}.palette-block--locked{opacity:.45;cursor:not-allowed;filter:grayscale(.6)}.palette-block--locked:hover,.palette-block--locked:active{color:var(--text-2);cursor:not-allowed;background:0 0;border-color:#0000}.palette-lock{opacity:.8;margin-left:auto;font-size:.75rem}.chip-icon{width:22px;height:22px;color:var(--text);border-radius:5px;flex-shrink:0;place-items:center;font-size:.8125rem;font-weight:600;display:grid}.palette-block.drag-ghost{z-index:var(--z-ghost);pointer-events:none;opacity:.96;background:var(--surface-2);border:1px solid var(--border-hi);color:var(--text);min-width:120px;font-size:.75rem;position:fixed}.palette-empty{padding:var(--space-md) var(--space-sm);text-align:center;color:var(--text-3);font-size:.75rem;line-height:1.5}.canvas-shell{background:var(--bg-canvas);touch-action:none;-webkit-user-select:none;user-select:none;flex:1;position:relative;overflow:hidden}.canvas-view{position:absolute;inset:0;overflow:hidden}.canvas-area{transform-origin:0 0;cursor:grab;background-color:var(--bg-canvas);background-image:radial-gradient(var(--grid-line) 1px, transparent 1px);background-size:var(--space-lg) var(--space-lg);touch-action:none;-webkit-user-select:none;user-select:none;background-position:-1px -1px;width:12000px;height:12000px;position:absolute;top:50%;left:50%}#blocksLayer{z-index:var(--z-overlay);position:absolute;inset:0}.canvas-area.dragging,.canvas-shell.dragging{cursor:grabbing}.canvas-hint{bottom:var(--space-md);align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-input);background:var(--surface-1);border:1px solid var(--border);color:var(--text-3);white-space:nowrap;pointer-events:none;z-index:var(--z-overlay);font-size:.6875rem;display:flex;position:absolute;left:50%;transform:translate(-50%)}.canvas-hint kbd{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-input);padding:var(--space-xs) var(--space-sm);font-family:var(--font-mono);color:var(--text-2);font-size:.625rem}.svg-overlay{pointer-events:none;z-index:1;position:absolute;inset:0}.wire-path,.wire-temporary{fill:none;stroke-linecap:round;stroke-linejoin:round}.wire-path{stroke-width:2.5px;opacity:.58;pointer-events:stroke;cursor:pointer;stroke:var(--accent);transition:stroke-width .12s}.wire-path a{pointer-events:none}.wire-path.hovered{opacity:.92;stroke-width:3px}.wire-path.selected{opacity:1;stroke-width:3px}.wire-temporary{stroke:var(--text-3);stroke-width:2px;stroke-dasharray:4 3;opacity:.62;pointer-events:none}.wire-actions{gap:var(--space-xs);padding:var(--space-xs);border-radius:var(--radius-node);background:var(--surface-1);border:1px solid var(--border);box-shadow:var(--shadow-md);z-index:var(--z-popover);display:flex;position:fixed}.wire-actions.hidden{display:none}.wire-actions button{border-radius:var(--radius-input);width:44px;height:44px;color:var(--text-2);background:0 0;place-items:center;transition:background .12s,color .12s;display:grid}.wire-actions button:hover,.wire-actions button:active{background:var(--surface-hover);color:var(--accent-text)}.wire-actions button:last-child:hover,.wire-actions button:last-child:active{background:var(--danger-muted);color:var(--danger-hover)}.wire-hit-path{cursor:pointer}.canvas-block-wrapper{transform-origin:50%;position:absolute}.canvas-block{border-radius:var(--radius-node);background:var(--surface-1);border:1px solid var(--border);-webkit-user-select:none;user-select:none;width:max-content;min-width:180px;max-width:300px;z-index:var(--z-block);transform-origin:50%;box-shadow:var(--shadow-sm);transition:border-color .12s,background .12s,box-shadow .12s;position:absolute}.canvas-block:hover{border-color:var(--border-hi);background:var(--surface-2);box-shadow:var(--shadow-md)}.canvas-block.selected{border-color:var(--accent);background:var(--surface-2);box-shadow:0 0 0 2px var(--accent-muted), var(--shadow-md)}.canvas-block.is-dragging{border-color:var(--border-hi);background:var(--surface-3);z-index:var(--z-drag);box-shadow:var(--shadow-lg)}.block-header{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--border);border-radius:var(--radius-node) var(--radius-node) 0 0;border-left:4px solid var(--node-color,var(--accent));background:var(--surface-0);min-height:38px;display:flex}.block-icon{border-radius:var(--radius-input);background:var(--surface-2);width:28px;height:28px;color:var(--node-color,var(--accent));flex-shrink:0;place-items:center;font-size:.9375rem;font-weight:700;display:grid}.block-title{color:var(--text);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.8125rem;font-weight:600;overflow:hidden}.block-body{padding:var(--space-sm) var(--space-md) var(--space-md);gap:var(--space-sm);flex-direction:column;display:flex}.block-body:empty{display:none}.block-field{gap:var(--space-xs);flex-direction:column;display:flex}.block-field span{color:var(--text-3);text-transform:uppercase;letter-spacing:.05em;font-size:.6875rem;font-weight:600}.block-field input,.block-field select,.block-field textarea{background:var(--surface-0);border:1px solid var(--border);border-radius:var(--radius-input);width:100%;min-width:0;color:var(--text);padding:var(--space-xs) var(--space-sm);font-size:.8125rem;font-family:var(--font-mono);transition:border-color .12s,background .12s}.block-field textarea{resize:vertical;min-height:56px}.block-field input:focus,.block-field select:focus,.block-field textarea:focus{border-color:var(--border-hi);background:var(--surface-2)}.switch-case-controls{gap:var(--space-xs);padding:var(--space-xs) 0 0;display:flex}.switch-case-controls button{border:1px solid var(--border);border-radius:var(--radius-input);background:var(--surface-1);color:var(--text-2);cursor:pointer;flex:1;padding:4px 8px;font-size:.75rem;font-weight:600;transition:background .12s,border-color .12s}.switch-case-controls button:hover,.switch-case-controls button:active{background:var(--surface-2);border-color:var(--border-hi);color:var(--text)}.switch-case-controls button:disabled{opacity:.4;cursor:not-allowed}.block-ports{pointer-events:none;position:absolute;inset:0}.port{border:2px solid var(--surface-1);background:var(--accent);pointer-events:auto;cursor:crosshair;width:16px;height:16px;z-index:var(--z-port);border-radius:50%;transition:transform .12s,background .12s;position:absolute;transform:translateY(-50%)}.port:before{content:"";border-radius:inherit;position:absolute;inset:-14px}.port:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.port.flow-port{width:16px;height:16px}.port.data-port{border-radius:var(--radius-input);width:16px;height:16px}.port:hover,.port:active{background:var(--surface-active);transform:scale(1.3)translateY(-50%)}.port-label{color:var(--text-3);white-space:nowrap;pointer-events:none;font-size:.6875rem;position:absolute;transform:translateY(-50%)}.port-label-output{right:var(--space-md);text-align:right}.port-label-input{left:var(--space-md);text-align:left}.input-port{left:-8px}.output-port{right:-8px}.port.pulse{outline:2px solid var(--accent);outline-offset:1px;animation:2s infinite pulse-border}@keyframes pulse-border{0%{outline-color:var(--accent)}50%{outline-color:#0000}to{outline-color:var(--accent)}}.port.valid-target{outline:2px solid var(--accent-text);outline-offset:2px;background:var(--accent)}.port.invalid-target{background:var(--danger)}.port.flow-port{background:var(--text-3)}.port.flow-port.valid-target{background:var(--accent)}.panel{border-left:1px solid var(--border);background:var(--surface-0);opacity:0;pointer-events:none;width:272px;min-width:272px;z-index:var(--z-panel);flex-direction:column;transition:transform .18s cubic-bezier(.25,.46,.45,.94),opacity .18s;display:flex;position:absolute;top:0;bottom:0;right:0;transform:translate(100%)}.panel.visible{opacity:1;pointer-events:auto;transform:translate(0)}.panel-header{padding:var(--space-md);border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.panel-header h2{text-transform:uppercase;letter-spacing:.1em;color:var(--text-3);font-size:.6875rem;font-weight:600}.panel-close-btn{border-radius:var(--radius-input);width:44px;height:44px;color:var(--text-3);place-items:center;transition:background .12s,color .12s;display:grid}.panel-close-btn:hover,.panel-close-btn:active{background:var(--surface-hover);color:var(--text)}.tray{padding:var(--space-sm) var(--space-md) var(--space-md);flex-direction:column;flex:1;display:flex;overflow-y:auto}.tray::-webkit-scrollbar{width:var(--space-xs)}.tray::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-input)}.properties-header{padding:var(--space-sm) var(--space-md);margin:var(--space-xs) 0 var(--space-sm);border-radius:var(--radius-node);background:var(--surface-1);border:1px solid var(--border);border-left:4px solid var(--node-color,var(--accent))}.properties-title{color:var(--text);font-size:.875rem;font-weight:600}.properties-subtitle{color:var(--text-3);text-transform:uppercase;letter-spacing:.05em;margin-top:var(--space-xs);font-size:.6875rem;font-weight:500}.property-row{gap:var(--space-xs);padding:var(--space-sm) 0;border-bottom:1px solid var(--border);flex-direction:column;display:flex}.property-row:last-child{border-bottom:none}.property-row label{text-transform:uppercase;letter-spacing:.06em;color:var(--text-3);font-size:.6875rem;font-weight:600}.property-row input,.property-row select,.property-row textarea{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-input);width:100%;color:var(--text);padding:var(--space-sm);font-size:.8125rem;font-family:var(--font-mono);transition:border-color .12s,background .12s}.property-row input:focus,.property-row select:focus,.property-row textarea:focus{border-color:var(--border-hi);background:var(--surface-2)}.empty-state{padding:var(--space-lg) var(--space-md);text-align:center;color:var(--text-3);font-size:.8125rem;line-height:1.6}.context-menu{min-width:152px;padding:var(--space-xs);border-radius:var(--radius-node);background:var(--surface-1);border:1px solid var(--border);box-shadow:var(--shadow-md);z-index:var(--z-popover);opacity:0;transition:opacity .12s,transform .12s;position:fixed;transform:scale(.96)}.context-menu.is-open{opacity:1;transform:scale(1)}.context-menu.hidden{display:none}.context-menu button{align-items:center;gap:var(--space-sm);width:100%;min-height:44px;padding:var(--space-sm);border-radius:var(--radius-input);color:var(--text);font-size:.8125rem;transition:background .12s;display:flex}.context-menu button:hover,.context-menu button:active{background:var(--surface-hover)}.context-menu button.ctx-danger:hover,.context-menu button.ctx-danger:active{background:var(--danger-muted);color:var(--danger-hover)}.code-modal{padding:var(--space-lg);background:var(--scrim);z-index:var(--z-modal);opacity:0;pointer-events:none;place-items:center;display:grid;position:fixed;inset:0}.code-modal.visible{pointer-events:auto}.code-sheet{width:min(960px, calc(100% - var(--space-xl)));border-radius:var(--radius-panel);border:1px solid var(--border);background:var(--surface-0);flex-direction:column;max-height:88dvh;display:flex;overflow:hidden;transform:translateY(16px)}.code-sheet-header{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-md);border-bottom:1px solid var(--border);display:flex}.code-sheet-title{align-items:center;gap:var(--space-sm);display:flex}.code-title-icon{width:var(--space-xl);height:var(--space-xl);border-radius:var(--radius-input);background:var(--surface-2);border:1px solid var(--border);color:var(--accent-text);place-items:center;display:grid}.code-sheet-header h3{color:var(--text);font-size:.875rem;font-weight:600}.code-sheet-actions{align-items:center;gap:var(--space-sm);display:flex}.code-action-btn{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-input);background:var(--surface-1);border:1px solid var(--border);min-height:44px;color:var(--text-2);font-size:.8125rem;font-weight:500;transition:all .12s;display:inline-flex}.code-action-btn:hover,.code-action-btn:active{background:var(--surface-hover);color:var(--text)}.code-action-btn--primary{background:var(--accent-muted);border-color:var(--border-hi);color:var(--accent-text)}.code-action-btn--primary:hover,.code-action-btn--primary:active{background:var(--surface-2);color:var(--accent-hover)}.code-close-btn{border-radius:var(--radius-input);width:44px;height:44px;color:var(--text-3);place-items:center;transition:background .12s,color .12s;display:grid}.code-close-btn:hover,.code-close-btn:active{background:var(--surface-hover);color:var(--text)}.code-close-btn--locked{opacity:.4;cursor:not-allowed}.code-close-btn--locked:hover,.code-close-btn--locked:active{color:var(--text-3);cursor:not-allowed;background:0 0}.code-banner{padding:var(--space-md);background:var(--danger-muted);border-bottom:1px solid var(--border);color:var(--danger-hover);font-size:.8125rem;font-family:var(--font-mono);white-space:pre-wrap}.code-output{background:var(--bg-workspace);flex:1;overflow-y:auto}.code-output pre{padding:var(--space-md) var(--space-lg);font-family:var(--font-mono);color:var(--text-2);white-space:pre-wrap;overflow-wrap:break-word;margin:0;font-size:.8125rem;line-height:1.65}.code-output::-webkit-scrollbar{width:var(--space-sm)}.code-output::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-input)}.toolbar-credits{height:40px;padding:0 var(--space-sm);background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-input);color:var(--text-2);white-space:nowrap;align-items:center;font-size:.75rem;font-weight:500;display:inline-flex}.toast{left:50%;bottom:var(--space-lg);border-radius:var(--radius-node);background:var(--surface-2);border:1px solid var(--border);color:var(--text);padding:var(--space-sm) var(--space-md);z-index:var(--z-toast);opacity:0;pointer-events:none;white-space:nowrap;font-size:.8125rem;font-weight:500;position:fixed;transform:translate(-50%)}.toast.visible{pointer-events:auto}.toast-info{border-color:var(--border);color:var(--text)}.toast-warn{border-color:var(--accent);color:var(--accent-text);background:var(--accent-muted)}.toast-error{border-color:var(--danger);color:var(--danger-hover);background:var(--danger-muted)}.block-error{border-color:var(--danger)!important}.block-warn-icon{cursor:help;color:var(--danger-hover);margin-left:auto;font-size:.75rem;font-weight:700;line-height:1;position:relative}.block-warn-text{background:var(--danger);color:var(--surface-0);border-radius:var(--radius-input);white-space:nowrap;z-index:var(--z-popover);pointer-events:none;padding:2px 6px;font-size:.65rem;font-weight:500;position:absolute;top:1.2em;left:0;box-shadow:0 2px 4px #0000004d}.live-logs{bottom:var(--safe-bottom);right:var(--safe-right);background:var(--surface-0);border:1px solid var(--border);border-top-left-radius:var(--radius-node);width:min(400px,100vw);max-width:100vw;max-height:300px;z-index:var(--z-logs);border-top-right-radius:0;flex-direction:column;transition:transform .2s,opacity .2s;display:flex;position:fixed;box-shadow:-4px -4px 16px #0006}.live-logs.hidden{opacity:0;pointer-events:none;transform:translateY(100%)}.logs-header{padding:var(--space-sm) var(--space-md);background:var(--surface-1);border-bottom:1px solid var(--border);border-top-left-radius:var(--radius-node);justify-content:space-between;align-items:center;display:flex}.logs-title{text-transform:uppercase;letter-spacing:.1em;color:var(--text-3);font-size:.6875rem;font-weight:600}.logs-close-btn{color:var(--text-3);place-items:center;min-width:44px;min-height:44px;font-size:1.25rem;line-height:1;transition:color .12s;display:grid}.logs-close-btn:hover,.logs-close-btn:active{color:var(--text)}.logs-content{padding:var(--space-sm) var(--space-md);font-family:var(--font-mono);color:var(--text-2);flex:1;max-height:250px;font-size:.75rem;line-height:1.4;overflow-y:auto}.log-entry{margin-bottom:var(--space-xs);gap:var(--space-sm);display:flex}.log-time{color:var(--text-3);opacity:.6}.log-msg{flex:1}.log-error{color:var(--danger-hover)}.log-warn{color:var(--accent-text)}.log-info{color:var(--text-2)}.app-loader{justify-content:center;align-items:center;gap:var(--space-md);background:var(--bg-workspace);width:100%;height:100dvh;color:var(--text-2);flex-direction:column;font-size:.875rem;display:flex}.app-loader__spinner{width:var(--space-xl);height:var(--space-xl);border:3px solid var(--surface-2);border-top-color:var(--accent);border-radius:50%;animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.app-error{gap:var(--space-md);padding:var(--space-xl);max-width:640px;color:var(--text);background:var(--surface-0);border:1px solid var(--danger);border-radius:var(--radius-panel);flex-direction:column;margin:auto;display:flex}.app-error p{color:var(--danger-hover);font-weight:600}.app-error pre{font-family:var(--font-mono);color:var(--text-2);background:var(--surface-1);padding:var(--space-md);border-radius:var(--radius-input);white-space:pre-wrap;word-break:break-word;font-size:.8125rem;overflow-x:auto}@media (width<=900px){.tb-btn{padding:var(--space-sm)}.toolbar-sep{margin:0 var(--space-xs)}.btn-label{display:none}}@media (width<=768px){body{padding:max(var(--space-xs), var(--safe-top)) max(var(--space-xs), var(--safe-right)) max(var(--space-xs), var(--safe-bottom)) max(var(--space-xs), var(--safe-left))}.brand-name{display:none}.toolbar{gap:var(--space-xs);min-height:48px}.toolbar-left,.toolbar-right{gap:var(--space-xs)}.toolbar-credits{display:none}.sidebar{z-index:20;border-radius:0 var(--radius-panel) var(--radius-panel) 0;width:220px;min-width:220px;position:absolute;top:0;bottom:0;left:0}.sidebar.hidden{transform:translate(-100%);width:220px!important;min-width:220px!important}.sidebar-scrim{z-index:19;background:#0006;display:block;position:absolute;inset:0}.panel{width:100%;min-width:100%;max-width:100%}.code-sheet{width:100%;max-height:calc(100dvh - var(--safe-bottom) - var(--space-lg));border-radius:var(--radius-panel) var(--radius-panel) 0 0}.code-modal{padding:0 0 var(--safe-bottom) 0;align-items:flex-end}.port{width:18px;height:18px}.port:before{inset:-16px}.port.flow-port,.port.data-port{width:18px;height:18px}.input-port{left:-9px}.output-port{right:-9px}.sidebar-title,.palette-category-header,.palette-category-count,.canvas-hint,.canvas-hint kbd,.block-field span,.port-label,.panel-header h2,.properties-subtitle,.property-row label,.logs-content,.block-warn-text{font-size:.875rem}}@media (width<=480px){.toolbar{padding:var(--space-xs)}.toolbar-group{gap:0;padding:1px}.tb-btn{min-width:36px;height:36px}.tb-btn span:not(.btn-label):not(.tb-btn__label--primary){display:none}.tb-btn__label--primary{display:inline}.tb-btn svg{margin:0}.view-group .status,.code-action-label{display:none}.code-action-btn{padding:var(--space-xs)}.code-sheet-header{gap:var(--space-xs);flex-wrap:wrap}.code-sheet-title{flex:100%}}@media (pointer:coarse){.port:before{inset:-16px}.tb-btn,.tb-btn--snap,.panel-close-btn,.code-close-btn,.context-menu button,.wire-actions button,.palette-block,.palette-category-header,.switch-case-controls button{min-width:44px;min-height:44px}}@media (any-pointer:coarse) and (any-pointer:fine){.tb-btn,.tb-btn--snap,.panel-close-btn,.code-close-btn,.context-menu button,.wire-actions button,.palette-block,.palette-category-header,.switch-case-controls button{min-width:44px;min-height:44px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}.port.pulse{outline:2px solid var(--accent);animation:none}}
