:root{--bg-primary:#f0f2f5;--bg-secondary:#fff;--bg-tertiary:#e9ecef;--bg-surface:#f8f9fa;--bg-elevated:#fff;--bg-hover:#e9ecef;--text-primary:#212529;--text-secondary:#495057;--text-muted:#6c757d;--accent-event:#dc3545;--accent-data:#20c997;--accent-math:#17a2b8;--accent-logic:#ffc107;--accent-flow:#6f42c1;--accent-web:#e83e8c;--accent-default:#6610f2;--conn-data:#20c997;--conn-exec:#dc3545;--border-color:#dee2e6;--border-focus:#80bdff;--shadow-sm:0 1px 3px #00000014;--shadow-md:0 4px 12px #0000001f;--toolbar-height:40px;--sidebar-width:220px;--inspector-width:240px;--console-height:140px;--font-mono:"SF Mono","Cascadia Code","Fira Code","Consolas",monospace;--font-ui:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--font-size-xs:10px;--font-size-sm:12px;--font-size-base:13px;--font-size-lg:15px;--node-min-width:160px;--node-border-radius:8px;--port-size:12px;--transition-fast:.1s ease;--transition-normal:.2s ease}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg-primary);height:100%;color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-base);-webkit-font-smoothing:antialiased;overflow:hidden}#app{flex-direction:column;width:100vw;height:100vh;display:flex}.toolbar{height:var(--toolbar-height);background:var(--bg-secondary);border-bottom:1px solid var(--border-color);z-index:100;-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:4px;padding:0 8px;display:flex}.toolbar-brand{font-weight:700;font-size:var(--font-size-lg);color:var(--accent-default);letter-spacing:-.5px;margin-right:12px}.toolbar-btn{font-size:var(--font-size-sm);font-weight:500;font-family:var(--font-ui);color:#fff;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap;background-color:#6c757d;border:1px solid #6c757d;border-radius:4px;justify-content:center;align-items:center;padding:5px 12px;line-height:1.5;display:inline-flex}.toolbar-btn:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.toolbar-btn.active{color:#fff;background-color:#0275d8;border-color:#0275d8}.toolbar-btn[data-action=run]{background-color:#28a745;border-color:#28a745}.toolbar-btn[data-action=run]:hover{background-color:#218838;border-color:#1e7e34}.toolbar-btn[data-action=stop]{background-color:#dc3545;border-color:#dc3545}.toolbar-btn[data-action=stop]:hover{background-color:#c82333;border-color:#bd2130}.toolbar-btn[data-action=view-code]{background-color:#17a2b8;border-color:#17a2b8}.toolbar-btn[data-action=view-code]:hover{background-color:#138496;border-color:#117a8b}.toolbar-btn[data-action=playground-toggle]{background-color:#6f42c1;border-color:#6f42c1}.toolbar-btn[data-action=playground-toggle]:hover{background-color:#5a35a0;border-color:#512d91}.toolbar-btn[data-action=show-tutorial]{background-color:#fd7e14;border-color:#fd7e14}.toolbar-btn[data-action=show-tutorial]:hover{background-color:#e8690a;border-color:#dc5507}.toolbar-btn[data-action=new]{background-color:#17a2b8;border-color:#17a2b8}.toolbar-btn[data-action=new]:hover{background-color:#138496;border-color:#117a8b}.toolbar-separator{background:var(--border-color);width:1px;height:20px;margin:0 4px}.toolbar-spacer{flex:1}#workspace{flex:1;display:flex;overflow:hidden}.sidebar{width:var(--sidebar-width);background:var(--bg-secondary);border-right:1px solid var(--border-color);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.sidebar-header{border-bottom:1px solid var(--border-color);padding:10px 12px}.sidebar-search{background:var(--bg-surface);border:1px solid var(--border-color);width:100%;color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-sm);border-radius:4px;outline:none;padding:6px 8px}.sidebar-search:focus{border-color:var(--border-focus)}.sidebar-search::placeholder{color:var(--text-muted)}.sidebar-content{flex:1;padding:6px 0;overflow-y:auto}.sidebar-category{margin-bottom:2px}.sidebar-category-header{font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:6px 12px;font-weight:600;display:flex}.sidebar-category-header:hover{color:var(--text-secondary)}.sidebar-category-dot{border-radius:50%;width:6px;height:6px}.sidebar-node-item{font-size:var(--font-size-sm);color:var(--text-secondary);cursor:grab;transition:all var(--transition-fast);border-left:2px solid #0000;align-items:center;gap:8px;padding:5px 12px 5px 24px;display:flex}.sidebar-node-item:hover{background:var(--bg-hover);color:var(--text-primary)}.sidebar-node-item:active{cursor:grabbing}.canvas-container{background:var(--bg-primary);cursor:default;flex:1;position:relative;overflow:hidden}.canvas-container.panning{cursor:grab}.canvas-container.panning:active{cursor:grabbing}.connections-svg{pointer-events:none;z-index:1;width:100%;height:100%;position:absolute;top:0;left:0}.connections-svg path.conn{pointer-events:stroke;cursor:pointer}.connections-svg path.conn:hover{filter:brightness(1.4)}.canvas{z-index:2;width:100%;height:100%;position:absolute;top:0;left:0}.node{min-width:var(--node-min-width);background:var(--bg-elevated);border:1px solid var(--border-color);border-radius:var(--node-border-radius);box-shadow:var(--shadow-sm);cursor:move;-webkit-user-select:none;user-select:none;transition:box-shadow var(--transition-fast),border-color var(--transition-fast);z-index:10;position:absolute}.node:hover{box-shadow:var(--shadow-md)}.node.selected{border-color:var(--border-focus);box-shadow:0 0 0 2px var(--border-focus),var(--shadow-md)}.node.running{border-color:var(--accent-event);box-shadow:0 0 0 2px var(--accent-event),0 0 12px #dc354533}.node-header{border-radius:var(--node-border-radius) var(--node-border-radius) 0 0;font-size:var(--font-size-sm);color:#000;align-items:center;gap:6px;padding:6px 10px;font-weight:600;display:flex}.node-header-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.node-body{padding:8px 0}.node-port-row{font-size:var(--font-size-sm);color:var(--text-secondary);justify-content:space-between;align-items:center;padding:3px 10px;display:flex;position:relative}.node-port-label{pointer-events:none}.node-port{width:var(--port-size);height:var(--port-size);cursor:crosshair;z-index:20;transition:all var(--transition-fast);background:#fff;border:2px solid #adb5bd;border-radius:50%;flex-shrink:0;position:relative}.node-port:hover{border-color:var(--accent-default);background:var(--accent-default);transform:scale(1.3)}.node-port.input{margin-left:-16px}.node-port.output{margin-right:-16px}.node-port.connected{background:var(--conn-data);border-color:var(--conn-data)}.node-port.exec{border-color:var(--conn-exec)}.node-port.exec.connected{background:var(--conn-exec);border-color:var(--conn-exec)}.node-input-row{justify-content:flex-start;gap:8px}.node-output-row{justify-content:flex-end;gap:8px}.node-value-input{border:1px solid var(--border-color);color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size-sm);background:#f8f9fa;border-radius:3px;outline:none;width:80px;padding:2px 6px}.node-value-input:focus{border-color:var(--border-focus);box-shadow:0 0 0 2px #80bdff40}.inspector{width:var(--inspector-width);background:var(--bg-secondary);border-left:1px solid var(--border-color);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.inspector-header{border-bottom:1px solid var(--border-color);font-weight:600;font-size:var(--font-size-sm);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;padding:10px 12px}.inspector-content{flex:1;padding:10px 12px;overflow-y:auto}.inspector-empty{color:var(--text-muted);font-size:var(--font-size-sm);text-align:center;margin-top:40px}.inspector-field{margin-bottom:12px}.inspector-field-label{font-size:var(--font-size-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.3px;margin-bottom:4px}.inspector-field-input{border:1px solid var(--border-color);width:100%;color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size-sm);background:#f8f9fa;border-radius:4px;outline:none;padding:5px 8px}.inspector-field-input:focus{border-color:var(--border-focus);box-shadow:0 0 0 2px #80bdff40}.console-panel{height:var(--console-height);background:var(--bg-secondary);border-top:1px solid var(--border-color);flex-direction:column;flex-shrink:0;display:flex}.console-header{border-bottom:1px solid var(--border-color);font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);align-items:center;gap:8px;padding:6px 12px;font-weight:600;display:flex}.console-content{font-family:var(--font-mono);font-size:var(--font-size-sm);flex:1;padding:6px 12px;overflow-y:auto}.console-line{gap:8px;padding:2px 0;display:flex}.console-line .msg{color:var(--text-secondary)}.console-line.error .msg{color:var(--accent-event)}.console-line.success .msg{color:var(--accent-data)}.console-line.warn .msg{color:var(--accent-logic)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.selection-box{border:1px solid var(--accent-default);pointer-events:none;z-index:60;background:#6610f214;position:absolute}.tutorial-overlay{z-index:1000;background:#000000b3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.tutorial-card{background:var(--bg-elevated);border:1px solid var(--border-color);width:90%;max-width:520px;color:var(--text-primary);font-family:var(--font-ui);box-shadow:var(--shadow-md);border-radius:12px;padding:32px}.tutorial-card h2{margin-bottom:12px;font-size:20px}.tutorial-card p{color:var(--text-secondary);line-height:1.5;font-size:var(--font-size-base);margin-bottom:8px}.tutorial-card .step-indicator{color:var(--text-muted);font-size:var(--font-size-xs);margin-bottom:16px}.tutorial-card button{color:#fff;font-size:var(--font-size-base);cursor:pointer;background:#0d6efd;border:none;border-radius:6px;margin-top:12px;padding:8px 20px;font-weight:500}.tutorial-card button:hover{background:#0b5ed7}.tutorial-card button.secondary{color:#6c757d;background:0 0;border:1px solid #dee2e6;margin-left:8px}.tutorial-card button.secondary:hover{background:#f8f9fa}.context-menu{background:var(--bg-elevated);border:1px solid var(--border-color);box-shadow:var(--shadow-md);z-index:200;border-radius:6px;min-width:160px;padding:4px 0;position:fixed}.context-menu-item{font-size:var(--font-size-sm);color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast);justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.context-menu-item:hover{background:var(--bg-hover);color:var(--text-primary)}.context-menu-item .shortcut{font-size:var(--font-size-xs);color:var(--text-muted);margin-left:20px}.context-menu-separator{background:var(--border-color);height:1px;margin:4px 0}
