@font-face{font-family:Twemoji Mozilla;src:url(/fonts/Twemoji.Mozilla.ttf)format("truetype");unicode-range:U+1F1E6-1F1FF;font-display:swap}:root{--bg:#fafaf8;--surface:#fff;--text:#2b2b2b;--text-muted:#6f6f6f;--border:#e4e4e0;--accent:#8a6d3b;--accent-dark:#6e5730;--danger:#c0392b;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font:16px/1.7 -apple-system,Segoe UI,PingFang SC,Microsoft YaHei,Roboto,Twemoji Mozilla,Segoe UI Emoji,sans-serif}*{box-sizing:border-box}body{margin:0}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-dark)}h1{margin:24px 0 16px;font-size:28px;font-weight:600}h2{margin:0 0 8px;font-size:20px;font-weight:600}.container{box-sizing:border-box;width:100%;max-width:1280px;margin:0 auto;padding:24px 28px 64px}.container.narrow{max-width:460px}.container.wide{max-width:1280px}.tabs{border-bottom:1px solid var(--border);gap:8px;margin-bottom:16px;padding-bottom:10px;display:flex}.tabs button{border:1px solid var(--border);background:var(--surface);color:var(--text-muted);cursor:pointer;border-radius:20px;padding:8px 18px;font-size:15px}.tabs button.active{background:var(--accent);border-color:var(--accent);color:#fff}table.tbl{border-collapse:collapse;width:100%;font-size:14px}table.tbl th,table.tbl td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:10px}table.tbl th{color:var(--text-muted);font-weight:500}.btn{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 14px;font-size:13px}.btn:hover{border-color:var(--accent);color:var(--accent)}.btn-danger{color:var(--danger)}.btn-danger:hover{border-color:var(--danger);color:var(--danger)}.node-chip{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:12px;margin:2px;padding:2px 10px;font-size:12px;display:inline-block}.node-chip.assigned{background:var(--accent);border-color:var(--accent);color:#fff}.sub-row{align-items:center;gap:10px;margin-bottom:10px;display:flex}.sub-label{color:var(--text-muted);flex:0 0 90px;font-size:13px}.sub-url{font-family:var(--mono,ui-monospace, Consolas, monospace);word-break:break-all;background:var(--bg);border:1px solid var(--border);border-radius:4px;flex:1;padding:6px 8px;font-size:12px}.form-ok{color:#1e7d32;margin:0;font-size:14px}.radio-row{flex-wrap:wrap;gap:18px;display:flex}.radio{color:var(--text);cursor:pointer;align-items:center;gap:6px;font-size:14px;display:flex}.radio input{width:auto}.agent-note{background:var(--bg);border:1px dashed var(--border);color:var(--text-muted);border-radius:8px;padding:10px 12px;font-size:13px;line-height:1.6}.name-flag{gap:8px;display:flex}.name-flag select{flex:0 0 130px}.name-flag input{flex:1}.flag-name{align-items:center;gap:6px;display:inline-flex}.flag-img{object-fit:cover;vertical-align:middle;border-radius:2px;flex-shrink:0;width:20px;height:14px}.row{gap:12px;display:flex}.row label{flex:1}.ssh-box{border:1px dashed var(--border);border-radius:8px;flex-direction:column;gap:10px;padding:10px 12px;display:flex}.ssh-box .row{gap:12px}.hop-row{align-items:center;gap:8px;margin-bottom:8px;display:flex}.hop-row select{border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;flex:1;padding:8px 10px;font-size:14px}.hop-row input{border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;flex:0 0 100px;padding:8px 10px;font-size:14px}.hop-row .btn{padding:6px 10px}.mono{font-family:ui-monospace,Consolas,Courier New,monospace;font-size:13px;line-height:1.5}.probe-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;display:grid}.probe-card{flex-direction:column;gap:8px;display:flex}.probe-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.probe-name{color:var(--text);font-size:15px;font-weight:600}.probe-dot{color:#fff;white-space:nowrap;border-radius:10px;padding:2px 10px;font-size:12px}.probe-dot.ok{background:#2e7d32}.probe-dot.down{background:#c62828}.probe-addr{font-size:12px}.probe-row{align-items:center;gap:10px;font-size:13px;display:flex}.probe-label{color:var(--text-muted);flex:0 0 40px}.bar{background:var(--border);border-radius:4px;flex:1;height:8px;overflow:hidden}.bar-fill{background:var(--accent);border-radius:4px;height:100%}.probe-val{color:var(--text);white-space:nowrap;flex:none}.probe-meta{flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px;display:flex}.probe-meta .warn{color:var(--accent)}table.tbl td.svc-cell{color:var(--text-muted);font-family:-apple-system,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:12px;line-height:1.4}.modal-mask{z-index:100;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:12px;width:min(420px,100vw - 40px);padding:24px;box-shadow:0 20px 50px #0003}.modal-title{margin:0 0 10px;font-size:17px}.modal-message{color:var(--text-muted);white-space:pre-line;margin:0 0 16px;font-size:14px;line-height:1.6}.modal-input{border:1px solid var(--border);background:var(--bg);width:100%;color:var(--text);border-radius:6px;margin-bottom:16px;padding:10px 12px;font-size:15px}.modal-input:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:#0000}.modal-actions{justify-content:flex-end;gap:10px;display:flex}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.modal-wide{width:min(680px,100vw - 40px)}.modal-title-row{align-items:center;gap:10px;display:flex}.task-badge{color:#fff;border-radius:10px;padding:2px 10px;font-size:12px}.task-badge.running{background:#1976d2}.task-badge.success{background:#2e7d32}.task-badge.failed{background:#c62828}.task-command{background:var(--bg);border:1px solid var(--border);word-break:break-all;white-space:pre-wrap;border-radius:6px;margin:10px 0;padding:10px 12px;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:13px}.task-log{color:#d4d4d4;white-space:pre-wrap;word-break:break-all;background:#16171d;border-radius:8px;max-height:320px;margin:0 0 12px;padding:12px 14px;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:13px;line-height:1.55;overflow-y:auto}.btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark);color:#fff}.muted{color:var(--text-muted);font-size:13px}.danger-zone{background:#fdf6f4;border:1px solid #f0d0c8;border-radius:8px;margin-top:16px;padding:14px}.nav{border-bottom:1px solid var(--border);background:var(--surface)}.nav-inner{justify-content:space-between;align-items:center;max-width:1280px;height:56px;margin:0 auto;padding:0 28px;display:flex}.brand{color:var(--text);font-size:20px;font-weight:700}.nav-links{align-items:center;gap:20px;display:flex}.nav-links a{color:var(--text-muted);font-size:15px}.nav-links a:hover{color:var(--text)}.nav-links .router-link-active{color:var(--accent)}.container.blog{max-width:760px}.blog-head{padding:8px 0 24px}.blog-title{margin:0 0 4px;font-size:30px}.blog-sub{margin:0}.post-list{flex-direction:column;gap:16px;display:flex}.post-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:20px 24px}.post-card:hover{border-color:#c9c9c4}.post-head{cursor:pointer;-webkit-user-select:none;user-select:none}.post-meta{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px;display:flex}.post-date{color:var(--text-muted);font-size:13px}.tag{color:var(--text-muted);background:var(--bg);border:1px solid var(--border);white-space:nowrap;border-radius:10px;padding:1px 8px;font-size:12px}.post-title{margin:0}.markdown-body{border-top:1px dashed var(--border);color:var(--text);overflow-wrap:break-word;margin-top:16px;padding-top:16px;font-size:15px;line-height:1.8}.markdown-body>:first-child{margin-top:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{margin:1.4em 0 .6em;line-height:1.4}.markdown-body h1{font-size:22px}.markdown-body h2{font-size:19px}.markdown-body h3{font-size:17px}.markdown-body p{margin:0 0 1em}.markdown-body ul,.markdown-body ol{margin:0 0 1em;padding-left:1.6em}.markdown-body li{margin:.2em 0}.markdown-body code{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-family:ui-monospace,SF Mono,Consolas,Menlo,monospace;font-size:.9em}.markdown-body pre{color:#e8e8e8;background:#2b2b2b;border-radius:8px;margin:0 0 1em;padding:14px 16px;overflow-x:auto}.markdown-body pre code{color:inherit;background:0 0;border:none;padding:0;font-size:13px}.markdown-body blockquote{border-left:3px solid var(--accent);color:var(--text-muted);background:var(--bg);border-radius:0 6px 6px 0;margin:0 0 1em;padding:4px 16px}.markdown-body hr{border:none;border-top:1px solid var(--border);margin:1.5em 0}.markdown-body img{max-width:100%}.markdown-body table{border-collapse:collapse;width:100%;margin:0 0 1em}.markdown-body th,.markdown-body td{border:1px solid var(--border);text-align:left;padding:6px 12px}.card-form{background:var(--surface);border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:14px;padding:24px;display:flex}.card-form label{color:var(--text-muted);flex-direction:column;gap:6px;font-size:14px;display:flex}.card-form input,.card-form textarea,.card-form select{border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;padding:10px 12px;font-family:inherit;font-size:15px}.card-form textarea{resize:vertical;min-height:90px}.card-form input:focus,.card-form textarea:focus,.card-form select:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:#0000}.card-form button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:11px;font-size:15px}.card-form button:hover{background:var(--accent-dark)}.card-form button:disabled{opacity:.6;cursor:not-allowed}.form-error{color:var(--danger);margin:0;font-size:14px}.form-hint{color:var(--text-muted);margin:0;font-size:14px}.footer{text-align:left;color:var(--text-muted);border-top:1px solid var(--border);padding:24px 28px 40px;font-size:13px}.toast-container{z-index:200;flex-direction:column;align-items:flex-start;gap:8px;display:flex;position:fixed;top:16px;left:16px}.toast{color:#fff;border-radius:8px;max-width:min(420px,80vw);padding:10px 18px;font-size:14px;box-shadow:0 6px 20px #0003}.toast-success{background:#2e7d32}.toast-error{background:#c62828}.toast-info{background:#37474f}.toast-enter-active,.toast-leave-active{transition:all .25s}.toast-enter-from,.toast-leave-to{opacity:0;transform:translateY(-8px)}
