:root{--bg:#131316;--bg-canvas:#17171b;--grid-dot:#2b2b31;--panel:#202027;--panel-2:#26262e;--node-bg:#26262cee;--node-border:#3d3d46;--node-border-sel:#8f8fa3;--text:#e6e6ea;--text-dim:#9a9aa6;--accent:#00b341;--accent-hover:#00c94a;--danger:#ff5252;--dtype-text:#e8c34c;--dtype-image:#4da3ff;--dtype-video:#b06ef7;--dtype-media:#7dd3a8;--radius:8px;--font:"Hiragino Kaku Gothic ProN","Noto Sans JP",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--mono:"SF Mono",ui-monospace,Menlo,monospace}*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%;background:var(--bg);color:var(--text);font-size:14px}body,button,html{font-family:var(--font)}button{cursor:pointer}input,select,textarea{font-family:var(--font)}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 20% 20%,#1d2440 0,transparent 50%),radial-gradient(circle at 80% 80%,#24173a 0,transparent 50%),var(--bg)}.login-card{width:360px;background:var(--panel);border:1px solid var(--node-border);border-radius:14px;padding:32px}.login-card h1{font-size:20px;margin-bottom:4px}.login-card .sub{margin-bottom:24px}.login-card .sub,.login-card label{color:var(--text-dim);font-size:12px}.login-card label{display:block;margin:12px 0 4px}.login-card input{width:100%;background:var(--bg);border:1px solid var(--node-border);border-radius:8px;padding:10px 12px;color:var(--text);font-size:14px}.login-card input:focus{outline:none;border-color:var(--dtype-image)}.login-card .btn-primary{width:100%;margin-top:20px}.login-error{margin-top:12px;color:var(--danger);font-size:12px}.btn-primary{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:9px 18px;font-size:14px;font-weight:700;transition:background .15s}.btn-primary:hover{background:var(--accent-hover)}.btn-primary:disabled{background:#3a3a41;color:var(--text-dim);cursor:not-allowed}.btn-ghost{background:var(--panel-2);color:var(--text);border:1px solid var(--node-border);border-radius:8px;padding:8px 14px;font-size:13px}.btn-ghost:hover{border-color:var(--node-border-sel)}.editor-root{height:100vh;display:flex;flex-direction:column}.topbar{height:52px;background:var(--panel);border-bottom:1px solid var(--node-border);display:flex;align-items:center;gap:10px;padding:0 14px;z-index:20}.topbar .logo{font-weight:800;font-size:15px;letter-spacing:.5px;background:linear-gradient(90deg,#4da3ff,#b06ef7);-webkit-background-clip:text;background-clip:text;color:transparent;white-space:nowrap}.topbar .wf-name{background:var(--bg);border:1px solid var(--node-border);border-radius:8px;color:var(--text);padding:7px 10px;font-size:13px;width:220px}.topbar .spacer{flex:1 1}.topbar .status-text{font-size:12px;color:var(--text-dim);max-width:340px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.canvas-wrap{flex:1 1;position:relative}.react-flow{background:var(--bg-canvas)}.react-flow__attribution{background:transparent;color:#55555f}.react-flow__controls{box-shadow:none;border:1px solid var(--node-border);border-radius:8px;overflow:hidden}.react-flow__controls-button{background:var(--panel);border-bottom:1px solid var(--node-border);fill:var(--text-dim)}.react-flow__controls-button:hover{background:var(--panel-2)}.react-flow__minimap{background:var(--panel);border:1px solid var(--node-border);border-radius:8px}.react-flow__edge-path{stroke:#6b6b78;stroke-width:2.5}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:hover .react-flow__edge-path{stroke:#b9b9c9}.react-flow__connection-path{stroke:#b9b9c9;stroke-width:2.5}.react-flow__handle{width:11px;height:11px;border:2px solid #16161a}.gnode{min-width:230px;max-width:300px;background:var(--node-bg);border:1px solid var(--node-border);border-radius:var(--radius);font-size:12px;box-shadow:0 4px 14px rgba(0,0,0,.45);transition:box-shadow .2s,border-color .2s}.gnode.selected{border-color:var(--node-border-sel)}.gnode.running{border-color:var(--accent);box-shadow:0 0 0 2px rgba(0,179,65,.35),0 4px 18px rgba(0,179,65,.25)}.gnode.error{border-color:var(--danger)}.gnode-header{display:flex;align-items:center;gap:7px;padding:7px 10px;border-radius:var(--radius) var(--radius) 0 0;font-weight:700;font-size:12.5px;color:#f2f2f6}.gnode-header .badge{margin-left:auto;font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;background:rgba(0,0,0,.3);color:var(--text-dim)}.gnode-header .badge.running{color:#6dffa2}.gnode-header .badge.error{color:var(--danger)}.gnode-header .badge.done{color:#8fd3ff}.gnode-body{padding:8px 0 10px}.gnode-row{position:relative;display:flex;align-items:center;min-height:24px;padding:2px 14px;color:var(--text-dim);font-size:11.5px}.gnode-row.out{justify-content:flex-end}.gnode-fields{padding:6px 12px 2px;display:flex;flex-direction:column;gap:7px}.gnode-fields label{font-size:10.5px;color:var(--text-dim);display:block;margin-bottom:3px}.gnode-fields textarea{width:100%;background:#1b1b20;border:1px solid var(--node-border);border-radius:6px;color:var(--text);font-size:12px;padding:7px 8px;resize:vertical;min-height:60px;line-height:1.5}.gnode-fields select:focus,.gnode-fields textarea:focus{outline:none;border-color:var(--dtype-image)}.gnode-fields select{width:100%;background:#1b1b20;border:1px solid var(--node-border);border-radius:6px;color:var(--text);font-size:12px;padding:6px 8px}.gnode-fields .file-btn{width:100%;background:#1b1b20;border:1px dashed var(--node-border);border-radius:6px;color:var(--text-dim);font-size:11.5px;padding:10px 8px;text-align:center}.gnode-fields .file-btn:hover{border-color:var(--dtype-image);color:var(--text)}.gnode-media{margin:8px 12px 2px;border-radius:6px;overflow:hidden;background:#101013;border:1px solid var(--node-border)}.gnode-media img,.gnode-media video{display:block;width:100%;max-height:240px;object-fit:contain}.gnode-media .dl{display:block;text-align:center;padding:5px;font-size:11px;color:var(--dtype-image);text-decoration:none;border-top:1px solid var(--node-border)}.gnode-err{color:var(--danger);line-height:1.5;word-break:break-all}.gnode-err,.gnode-progress{margin:6px 12px 0;font-size:11px}.gnode-progress{color:#6dffa2}.ctx-menu{position:fixed;z-index:100;width:240px;max-height:420px;overflow-y:auto;background:var(--panel);border:1px solid var(--node-border);border-radius:10px;box-shadow:0 10px 34px rgba(0,0,0,.6);padding:6px}.ctx-menu .cat{font-size:10.5px;color:var(--text-dim);padding:7px 10px 3px;text-transform:uppercase;letter-spacing:.6px}.ctx-menu .item{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;color:var(--text);font-size:12.5px;padding:7px 10px;border-radius:6px;text-align:left}.ctx-menu .item:hover{background:var(--panel-2)}.ctx-menu .dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:200;display:flex;align-items:center;justify-content:center}.modal{width:460px;max-height:70vh;overflow-y:auto;background:var(--panel);border:1px solid var(--node-border);border-radius:14px;padding:20px}.modal h2{font-size:15px;margin-bottom:14px}.modal .wf-item{display:flex;align-items:center;gap:10px;width:100%;background:var(--panel-2);border:1px solid var(--node-border);border-radius:8px;padding:10px 12px;margin-bottom:8px;color:var(--text);font-size:13px;text-align:left}.modal .wf-item:hover{border-color:var(--node-border-sel)}.modal .wf-item .date{margin-left:auto;font-size:11px;color:var(--text-dim);flex-shrink:0}.modal .wf-item .del{background:none;border:none;color:var(--text-dim);font-size:14px;padding:2px 6px}.modal .wf-item .del:hover{color:var(--danger)}.modal .empty{color:var(--text-dim);font-size:13px;padding:20px 0;text-align:center}.modal .close-row{display:flex;justify-content:flex-end;margin-top:10px}.canvas-hint{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);background:rgba(32,32,39,.9);border:1px solid var(--node-border);border-radius:20px;color:var(--text-dim);font-size:12px;padding:8px 18px;z-index:10;pointer-events:none;white-space:nowrap}