*{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%;overflow:hidden}body{font-family:Segoe UI,system-ui,-apple-system,PingFang SC,Microsoft YaHei,sans-serif;background:#0e1116;color:#e8ebf4;-webkit-user-select:none;user-select:none}button{font-family:inherit}.app{height:100%;display:flex;flex-direction:column}.canvas-host{flex:1;position:relative;min-height:0}.canvas-host .nm-canvas{width:100%;height:100%;display:block;cursor:default;touch-action:none}.empty-hint{fill:#5f6a82;font-size:15px;text-anchor:middle}.topbar{height:52px;flex:none;display:flex;align-items:center;gap:10px;padding:0 16px;background:#12151d;border-bottom:1px solid #1f2430;z-index:7}.logo{font-weight:700;font-size:15px;letter-spacing:.5px;color:#cdd5ea;cursor:pointer;white-space:nowrap}.logo em{color:#7d9bff;font-style:normal}.logo:hover em{text-decoration:underline}.crumb{position:relative;display:flex;align-items:center;gap:4px;font-size:13px;white-space:nowrap;min-width:0}.crumb .seg{color:#8fa0c9;cursor:pointer;padding:3px 6px;border-radius:6px;max-width:160px;overflow:hidden;text-overflow:ellipsis;display:inline-block}.crumb .seg:hover,.crumb .seg.on{color:#fff;background:#1c2333}.crumb .seg-root{color:#a8b6dc}.crumb .seg-more{color:#5f6a82;font-weight:700;letter-spacing:1px}.crumb .sep{color:#3a445e;flex:none}.crumb .cur{color:#e8ebf4;font-weight:600;padding:3px 8px;background:#1a2130;border-radius:6px;max-width:220px;overflow:hidden;text-overflow:ellipsis;display:inline-block}.crumb-drop{position:absolute;top:calc(100% + 8px);left:0;width:260px;max-height:320px;overflow-y:auto;background:#131722;border:1px solid #2a3040;border-radius:10px;box-shadow:0 14px 40px #0000008c;z-index:50;padding:6px}.drop-head{padding:6px 10px 4px;font-size:11px;color:#5f6a82}.back-btn{flex:none;width:30px;height:30px;padding:0;display:flex;align-items:center;justify-content:center;font-size:16px;line-height:1}.topbar-menu{position:relative;flex:none}.menu-drop{position:absolute;top:calc(100% + 8px);right:0;width:168px;background:#131722;border:1px solid #2a3040;border-radius:10px;box-shadow:0 14px 40px #0000008c;z-index:50;padding:5px;display:flex;flex-direction:column}.menu-item{background:none;border:none;text-align:left;width:100%;color:#c3cbdd;font-size:13px;padding:9px 11px;border-radius:7px;cursor:pointer;transition:.15s;white-space:nowrap}.menu-item:hover{background:#1c2333;color:#fff}.menu-item.danger{color:#ff9c9c}.menu-item.danger:hover{background:#2a1a1a;color:#ffc0c0}.topbar button{background:#171c28;border:1px solid #2a3040;color:#c3cbdd;font-size:13px;padding:6px 14px;border-radius:8px;cursor:pointer;transition:.15s;white-space:nowrap}.topbar button:hover:not(:disabled){border-color:#4a5a85;color:#fff;background:#1c2333}.topbar button:disabled{opacity:.35;cursor:default}.topbar button.danger:hover{border-color:#a05252;color:#ffb0b0}.stats{margin-left:auto;font-size:12px;color:#5f6a82;white-space:nowrap}.save-state{font-size:12px;color:#5f6a82;white-space:nowrap}.save-state.ok{color:#3ecf8e}.save-state.err{color:#ef6461}.search-wrap{position:relative}.search-input{width:190px;background:#0f131d;border:1px solid #262e40;border-radius:8px;color:#e8ebf4;font-size:13px;font-family:inherit;padding:6px 10px;outline:none;transition:border-color .15s,width .2s}.search-input:focus{border-color:#4a5a85;width:250px}.search-drop{position:absolute;top:calc(100% + 6px);left:0;width:350px;max-height:430px;overflow-y:auto;background:#131722;border:1px solid #2a3040;border-radius:10px;box-shadow:0 14px 40px #0000008c;z-index:50;padding:6px}.search-item{padding:8px 10px;border-radius:8px;cursor:pointer}.search-item:hover{background:#1c2333}.si-title{font-size:13px;color:#e8ebf4;font-weight:600}.si-sub{display:flex;gap:8px;margin-top:2px;font-size:11px;color:#5f6a82}.si-trail{color:#7d9bff;white-space:nowrap}.si-snip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-empty,.search-hint{padding:8px 10px;font-size:12px;color:#5f6a82}.search-hint{border-top:1px solid #1f2430;margin-top:4px;padding-top:7px}.node.ref rect{stroke-dasharray:5 3}.ghost{cursor:pointer}.ghost .ghost-rect{fill:#16182b;stroke:#a78bfa;stroke-width:1.5;stroke-dasharray:4 3;transition:filter .15s}.ghost:hover .ghost-rect{filter:brightness(1.6)}.ghost text{fill:#c9b8f5;font-size:12px;font-weight:600;pointer-events:none}.nm-cmenu{position:fixed;z-index:30;min-width:172px;display:none;background:#131722;border:1px solid #2a3040;border-radius:10px;box-shadow:0 14px 40px #0000008c;padding:5px;flex-direction:column}.nm-cmenu.open{display:flex}.cmenu-sep{height:1px;background:#232a3a;margin:4px 6px}.nm-connector{position:fixed;z-index:11;width:300px;transform:translate(-50%,-130%);display:none}.nm-connector.open{display:block}.nm-connector-input{width:100%;background:#1b2130;border:1px solid #7d9bff;border-radius:8px;color:#e8ebf4;font-size:13px;font-family:inherit;padding:8px 10px;outline:none;box-shadow:0 6px 28px #0000008c}.nm-connector-drop{position:absolute;top:calc(100% + 6px);left:0;width:100%;max-height:300px;overflow-y:auto;background:#131722;border:1px solid #2a3040;border-radius:10px;box-shadow:0 14px 40px #0000008c;padding:6px}.node rect{stroke-width:1.5;transition:filter .15s}.node:hover rect{filter:brightness(1.35)}.node.selected rect{stroke-width:2;filter:drop-shadow(0 0 9px rgba(125,155,255,.35))}.node text{fill:#e8ebf4;font-size:14px;font-weight:600;pointer-events:none}.node .anchor{fill:#0e1116;stroke-width:1.5;opacity:0;cursor:crosshair;transition:opacity .15s,r .1s}.node:hover .anchor{opacity:.6}.node .anchor:hover{opacity:1;r:7.5}.node .viewbtn{cursor:pointer}.node .viewbtn circle{fill:#0e1116;stroke-width:1.5;opacity:.85;transition:.15s}.node:hover .viewbtn circle{opacity:1}.node .viewbtn:hover circle{filter:brightness(1.7);r:10.5}.node .viewbtn text{font-size:10px;pointer-events:none}.edge .hit{stroke:transparent;stroke-width:16;fill:none;cursor:pointer}.edge .line{stroke:#4a5468;stroke-width:2;fill:none;transition:stroke .15s}.edge:hover .line{stroke:#7d9bff}.edge.selected .line{stroke:#7d9bff;filter:drop-shadow(0 0 5px rgba(125,155,255,.4))}.edge .edge-label{cursor:pointer}.edge .edge-label rect{fill:#141826;stroke:#2a3040;stroke-width:1;transition:stroke .15s}.edge:hover .edge-label rect,.edge.selected .edge-label rect{stroke:#55628f}.edge .edge-label text{fill:#98a2ba;font-size:12px}.preview{stroke:#7d9bff;stroke-width:2;stroke-dasharray:6 5;fill:none;opacity:.8}.hints{position:fixed;bottom:14px;left:50%;transform:translate(-50%);font-size:12px;color:#5f6a82;background:#12151dd9;border:1px solid #1f2430;border-radius:999px;padding:7px 18px;pointer-events:none;white-space:nowrap;z-index:5}.hints b{color:#8fa0c9;font-weight:600}.nm-editor{position:fixed;z-index:10;width:220px;transform:translate(-50%,-50%);padding:7px 10px;font-size:14px;font-family:inherit;text-align:center;color:#e8ebf4;background:#1b2130;border:1px solid #7d9bff;border-radius:8px;outline:none;box-shadow:0 6px 28px #0000008c;display:none}.panel{position:fixed;top:64px;right:12px;bottom:56px;width:296px;background:#131722f5;border:1px solid #232a3a;border-radius:14px;box-shadow:0 10px 40px #00000080;padding:16px;overflow-y:auto;z-index:6;-webkit-user-select:text;user-select:text}.p-head{display:flex;align-items:center;justify-content:space-between}.p-kind{font-size:12px;color:#7d9bff;font-weight:700;letter-spacing:3px}.p-close{background:none;border:none;color:#5f6a82;font-size:20px;line-height:1;cursor:pointer;padding:2px 6px}.p-close:hover{color:#fff}.p-label{display:block;font-size:12px;color:#5f6a82;margin:14px 0 6px}.p-input{width:100%;background:#0f131d;border:1px solid #262e40;border-radius:8px;color:#e8ebf4;font-size:13px;font-family:inherit;padding:8px 10px;outline:none;transition:border-color .15s}.p-input:focus{border-color:#4a5a85}textarea.p-input{resize:vertical;min-height:110px;line-height:1.6}.swatches{display:flex;gap:9px}.swatch{width:24px;height:24px;border-radius:50%;border:2px solid #2a3040;cursor:pointer;transition:transform .1s}.swatch:hover{transform:scale(1.15)}.swatch.on{border-color:#e8ebf4}.swatch.none{background:repeating-linear-gradient(45deg,#26304a,#26304a 4px,#1a2030 4px,#1a2030 8px)}.rel-item{padding:7px 9px;border:1px solid #232a3a;border-radius:8px;margin-bottom:6px;font-size:12px;color:#aab4cc;cursor:pointer;transition:border-color .15s}.rel-item:hover{border-color:#4a5a85}.rel-item .dir{color:#7d9bff;font-weight:700;margin-right:5px}.rel-item .rel-tag{display:block;color:#5f6a82;margin-top:3px}.p-dir-row{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;color:#aab4cc}.p-mini{background:#171c28;border:1px solid #2a3040;color:#c3cbdd;border-radius:8px;padding:6px 10px;cursor:pointer;font-size:12px;transition:.15s;white-space:nowrap}.p-mini:hover{border-color:#4a5a85;color:#fff}.p-mini.wide{width:100%}.p-enter{border-color:#3d5a3d;color:#9fe0af}.p-enter:hover{border-color:#3ecf8e;color:#c9ffd6}.p-danger{margin-top:18px;width:100%;background:#2a1a1a;border:1px solid #5a3030;color:#ff9c9c;border-radius:8px;padding:8px;cursor:pointer;font-size:13px;transition:.15s}.p-danger:hover{border-color:#a05252;background:#331f1f}.login-wrap{height:100%;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse 60% 45% at 30% 20%,#16203a55,transparent),radial-gradient(ellipse 50% 40% at 75% 80%,#1a2f2a44,transparent),#0e1116}.login-card{width:360px;padding:34px 32px;background:#131722;border:1px solid #232a3a;border-radius:16px;box-shadow:0 18px 60px #00000080}.login-card h1{font-size:20px;font-weight:700;margin-bottom:4px}.login-card h1 em{color:#7d9bff;font-style:normal}.login-card .sub{font-size:12px;color:#5f6a82;margin-bottom:24px}.login-card label{display:block;font-size:12px;color:#8fa0c9;margin:14px 0 6px}.login-card input{width:100%;background:#0f131d;border:1px solid #262e40;border-radius:8px;color:#e8ebf4;font-size:14px;font-family:inherit;padding:10px 12px;outline:none;transition:border-color .15s}.login-card input:focus{border-color:#7d9bff}.login-card .submit{margin-top:22px;width:100%;padding:10px;background:#2b3f78;border:1px solid #4a5a85;color:#fff;border-radius:8px;font-size:14px;cursor:pointer;transition:.15s}.login-card .submit:hover{background:#35508f}.login-card .submit:disabled{opacity:.5;cursor:default}.login-card .err{margin-top:12px;font-size:12px;color:#ff9c9c}.login-card .switch{margin-top:16px;font-size:12px;color:#5f6a82;text-align:center}.login-card .switch a{color:#7d9bff;cursor:pointer;text-decoration:none}.login-card .switch a:hover{text-decoration:underline}
