.app-shell[data-v-b36e641a]{height:100%;display:flex;flex-direction:column}.route-host[data-v-b36e641a]{flex:1;min-height:0}.skip-link[data-v-b36e641a]{position:fixed;left:12px;top:8px;z-index:1000;padding:7px 11px;border-radius:6px;background:var(--accent);color:#0d1117;transform:translateY(-160%)}.skip-link[data-v-b36e641a]:focus{transform:translateY(0)}.top-nav[data-v-b36e641a]{height:46px;flex:none;display:flex;align-items:center;gap:6px;padding:0 12px;background:color-mix(in srgb,var(--bg-panel) 88%,transparent);border-bottom:1px solid var(--border);box-shadow:0 1px #ffffff05,0 8px 24px #00000020;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);z-index:20}.brand[data-v-b36e641a]{display:flex;align-items:center;gap:8px;font-weight:650;letter-spacing:-.02em;margin-right:14px;cursor:pointer;color:var(--text);border:0;padding:0;background:transparent}.brand-mark[data-v-b36e641a]{display:grid;place-items:center;width:25px;height:25px;border-radius:7px;background:linear-gradient(145deg,#8b5cf6,#4f7cff);color:#fff;font:700 12px/1 Inter,system-ui;box-shadow:0 0 0 1px #ffffff20 inset,0 4px 14px #6758ff30;font-style:normal}.nav-link[data-v-b36e641a]{padding:6px 10px;border-radius:6px;color:var(--text-dim)}.nav-link[data-v-b36e641a]:hover{color:var(--text);background:var(--surface-hover)}.nav-link.active[data-v-b36e641a]{background:var(--surface-selected);color:var(--text);box-shadow:0 0 0 1px #ffffff0b inset}.spacer[data-v-b36e641a]{flex:1}.user-badge[data-v-b36e641a]{color:var(--text-muted);font-size:11px}.logout-btn[data-v-b36e641a]{border:0;background:transparent;color:var(--text-dim);cursor:pointer}.logout-btn[data-v-b36e641a]:hover{color:var(--red)}.hw-badge[data-v-b36e641a]{padding:3px 9px;border-radius:6px;font-size:11px;border:1px solid var(--green);color:var(--green);white-space:pre-line;cursor:default}.hw-badge.red[data-v-b36e641a]{border-color:var(--red);color:var(--red)}.hw-badge.warn[data-v-b36e641a]{border-color:var(--yellow);color:var(--yellow)}.hw-badge.offline[data-v-b36e641a]{border-color:var(--border);color:var(--text-dim)}@media (max-width: 760px){.top-nav[data-v-b36e641a]{height:auto;min-height:46px;overflow-x:auto;padding:6px 8px;gap:4px;scrollbar-width:none}.top-nav[data-v-b36e641a]::-webkit-scrollbar{display:none}.brand[data-v-b36e641a]{margin-right:4px}.brand span[data-v-b36e641a]{display:none}.nav-link[data-v-b36e641a],.logout-btn[data-v-b36e641a]{min-height:44px;display:flex;align-items:center;padding:0 10px;white-space:nowrap}.user-badge[data-v-b36e641a]{display:none}.hw-badge[data-v-b36e641a]{white-space:nowrap}.route-host[data-v-b36e641a]{min-width:0}}:root{--bg: #0b0c0f;--bg-panel: #111318;--bg-card: #171a21;--surface-hover: #1b1e26;--surface-selected: #252936;--border: #282c35;--border-strong: #3a3f4b;--text: #f0f1f3;--text-dim: #a3a7b2;--text-muted: #747984;--accent: #7c83ff;--green: #3fb950;--red: #f85149;--yellow: #d29922;--blue: #58a6ff;--purple: #bc8cff;--teal: #39c5cf}*{box-sizing:border-box}html,body,#app{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:Inter,PingFang SC,Microsoft YaHei,Noto Sans CJK SC,system-ui,sans-serif;font-size:13px;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}button,input,select,textarea{font:inherit}button,input,select,textarea{outline:none}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent);border-color:var(--accent)!important}button,a,input,select,textarea{transition:color .16s ease,background-color .16s ease,border-color .16s ease,box-shadow .16s ease,opacity .16s ease}::selection{background:#6169ff55;color:#fff}*{scrollbar-width:thin;scrollbar-color:#363b47 transparent}.state-block{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;height:100%;min-height:240px;color:var(--text-dim)}.state-block .state-icon{font-size:34px}.state-block.error{color:var(--red)}.state-block .retry-btn{padding:6px 16px;border:1px solid var(--border);border-radius:6px;background:var(--bg-panel);color:var(--text);cursor:pointer}.state-block .retry-btn:hover{border-color:var(--accent)}.btn{padding:6px 11px;border:1px solid var(--border);border-radius:7px;background:var(--bg-card);color:var(--text);cursor:pointer;font-size:13px}.btn:hover{border-color:var(--border-strong);background:var(--surface-hover);color:var(--text)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#0d1117}.btn.primary:hover{filter:brightness(1.1);color:#0d1117}.page{height:calc(100vh - 46px);display:flex;flex-direction:column}.vue-flow{background:var(--bg)}.vue-flow__minimap{background:var(--bg-panel)}.vue-flow__controls{box-shadow:none}.vue-flow__controls-button{background:var(--bg-panel);border-bottom:1px solid var(--border);fill:var(--text)}.vue-flow__controls-button:hover{background:var(--bg-card)}.vue-flow__edge-path{stroke-width:1.6}.vue-flow__edge.derive .vue-flow__edge-path{stroke:var(--accent)}.vue-flow__edge.sequence .vue-flow__edge-path{stroke:#4a5568}.vue-flow__edge.reference .vue-flow__edge-path{stroke:var(--purple);stroke-dasharray:6 4}.vue-flow__handle{background:var(--text-dim);width:6px;height:6px}.badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;border:1px solid var(--border);color:var(--text-dim)}.badge.local{color:var(--green);border-color:var(--green)}.badge.cloud{color:var(--purple);border-color:var(--purple)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media (max-width: 760px){.page{height:calc(100dvh - 56px)}.btn{min-height:44px;padding:9px 12px}input,select,textarea{font-size:16px;min-height:44px}}.vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}:root{--vf-node-bg: #fff;--vf-node-text: #222;--vf-connection-path: #b1b1b7;--vf-handle: #555}.vue-flow__edge.updating .vue-flow__edge-path{stroke:#777}.vue-flow__edge-text{font-size:10px}.vue-flow__edge-textbg{fill:#fff}.vue-flow__connection-path{stroke:var(--vf-connection-path)}.vue-flow__node{cursor:grab}.vue-flow__node.selectable:focus,.vue-flow__node.selectable:focus-visible{outline:none}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{padding:10px;border-radius:3px;width:150px;font-size:12px;text-align:center;border-width:1px;border-style:solid;color:var(--vf-node-text);background-color:var(--vf-node-bg);border-color:var(--vf-node-color)}.vue-flow__node-default.selected,.vue-flow__node-default.selected:hover,.vue-flow__node-input.selected,.vue-flow__node-input.selected:hover,.vue-flow__node-output.selected,.vue-flow__node-output.selected:hover{box-shadow:0 0 0 .5px var(--vf-box-shadow)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node-default .vue-flow__handle,.vue-flow__node-input .vue-flow__handle,.vue-flow__node-output .vue-flow__handle{background:var(--vf-handle)}.vue-flow__node-default.selectable:hover,.vue-flow__node-input.selectable:hover,.vue-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.vue-flow__node-input{--vf-node-color: var(--vf-node-color, #0041d0);--vf-handle: var(--vf-node-color, #0041d0);--vf-box-shadow: var(--vf-node-color, #0041d0);background:var(--vf-node-bg);border-color:var(--vf-node-color, #0041d0)}.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible{outline:none;border:1px solid var(--vf-node-color, #0041d0)}.vue-flow__node-default{--vf-handle: var(--vf-node-color, #1a192b);--vf-box-shadow: var(--vf-node-color, #1a192b);background:var(--vf-node-bg);border-color:var(--vf-node-color, #1a192b)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible{outline:none;border:1px solid var(--vf-node-color, #1a192b)}.vue-flow__node-output{--vf-handle: var(--vf-node-color, #ff0072);--vf-box-shadow: var(--vf-node-color, #ff0072);background:var(--vf-node-bg);border-color:var(--vf-node-color, #ff0072)}.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid var(--vf-node-color, #ff0072)}.vue-flow__nodesselection-rect,.vue-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible,.vue-flow__selection:focus,.vue-flow__selection:focus-visible{outline:none}.vue-flow__handle{width:6px;height:6px;background:var(--vf-handle);border:1px solid #fff;border-radius:100%}.vue-flow__controls{box-shadow:0 0 2px 1px #00000014}.vue-flow__controls-button{background:#fefefe;border:none;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:5px}.vue-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.vue-flow__controls-button:hover{background:#f4f4f4}.vue-flow__controls-button:disabled{pointer-events:none}.vue-flow__controls-button:disabled svg{fill-opacity:.4}.vue-flow__minimap{background-color:#fff}.vue-flow__minimap.pannable{cursor:grab}.vue-flow__minimap.dragging{cursor:grabbing}.vue-flow__minimap-mask.pannable{cursor:grab}
