:root{--bg:#f4f6f9;--panel:#ffffff;--border:#e4e8ee;--border-strong:#d2d9e3;--text:#16202c;--muted:#6b7688;--faint:#97a1b0;--accent:#2456d6;--accent-soft:#eef3fd;--danger:#c02626;--danger-soft:#fdf0f0;--ok:#17794a;--ok-soft:#eaf6ef;--warn:#96590a;--warn-soft:#fdf5e8;--shadow:0 1px 2px rgba(16,24,40,0.05);--shadow-lg:0 4px 16px rgba(16,24,40,0.08);--radius:10px}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1{font-size:24px;font-weight:650;letter-spacing:-.02em;margin:0 0 4px}h2{font-size:15px;margin:0 0 12px;letter-spacing:-.01em}h2,h3{font-weight:620}h3{font-size:13px;margin:0 0 8px}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;background:#eef1f5;border:1px solid var(--border);border-radius:4px;padding:1px 5px}.shell{display:flex;min-height:100vh}.sidebar{width:224px;flex-shrink:0;background:#0e1626;color:#b9c3d3;padding:18px 12px 14px;display:flex;flex-direction:column;gap:2px;position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow-y:auto}.sidebar .brand{color:#fff;font-weight:640;font-size:14px;letter-spacing:-.01em;padding:4px 10px 2px;display:flex;align-items:center;gap:8px}.sidebar .brand .dot{width:8px;height:8px;border-radius:50%;background:#3d7bfd;flex-shrink:0}.sidebar .brand-sub{color:#6b7789;font-size:11px;padding:0 10px 14px}.nav-group{font-size:10px;text-transform:uppercase;letter-spacing:.09em;color:#5d6a7d;padding:14px 10px 5px;font-weight:600}.sidebar a{color:#b9c3d3;padding:7px 10px;border-radius:7px;display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13.5px}.sidebar a:hover{background:#19233a;color:#fff;text-decoration:none}.sidebar a.active{background:#1d2b47;color:#fff;font-weight:550;box-shadow:inset 2px 0 0 #3d7bfd}.sidebar a .count{font-size:11px;color:#7d8798;background:#1a2439;border-radius:999px;padding:1px 7px}.sidebar a.active .count,.sidebar a:hover .count{color:#cdd6e4}.sidebar a .count.alert{background:#4a1f22;color:#f0a8a8}.sidebar-foot{margin-top:auto;padding-top:14px;border-top:1px solid #1c2537}.sidebar-foot .who{font-size:11px;color:#6b7789;padding:0 10px 8px;word-break:break-all}.main{flex:1 1;padding:26px 30px 60px;max-width:1180px;min-width:0}.page-head{margin-bottom:20px}.page-head .sub{color:var(--muted);font-size:13.5px;max-width:720px}.crumb{font-size:12.5px;color:var(--muted);margin-bottom:6px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:16px;box-shadow:var(--shadow)}.panel.flush{padding:0;overflow:hidden}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}.panel-head h2{margin:0}.panel.flush .panel-head{padding:16px 18px 12px;margin-bottom:0}.panel.flush table{border-top:1px solid var(--border)}.subtle{background:#fafbfc;border-style:dashed;box-shadow:none}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));grid-gap:12px;gap:12px;margin-bottom:16px}.stat{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.stat .label{font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--faint);font-weight:600;margin-bottom:6px}.stat .value{font-size:26px;font-weight:640;letter-spacing:-.02em;line-height:1.1}.stat .value.sm{font-size:18px}.stat .foot{font-size:12px;color:var(--muted);margin-top:4px}.stat.danger .value{color:var(--danger)}.stat.ok .value{color:var(--ok)}table{width:100%;border-collapse:collapse}th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--faint);font-weight:600;padding:9px 14px;background:#fbfcfd;white-space:nowrap}td,th{border-bottom:1px solid var(--border)}td{padding:11px 14px;vertical-align:top}tbody tr:last-child td{border-bottom:none}tbody tr:hover td{background:#fcfdfe}.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.table-scroll{overflow-x:auto}input,select,textarea{font:inherit;padding:8px 10px;border:1px solid var(--border-strong);border-radius:7px;background:#fff;color:var(--text);max-width:100%}textarea{line-height:1.55;resize:vertical;width:100%}input:focus,select:focus,textarea:focus{outline:3px solid #d8e3fb;outline-offset:0;border-color:var(--accent)}input[type=checkbox]{width:15px;height:15px;accent-color:var(--accent);vertical-align:-2px}button{font:inherit;font-weight:520;padding:8px 15px;border:1px solid var(--accent);border-radius:7px;background:var(--accent);color:#fff;cursor:pointer;white-space:nowrap}button:hover{filter:brightness(1.07)}button:active{filter:brightness(.96)}button.secondary{background:#fff;color:var(--text);border-color:var(--border-strong)}button.secondary:hover{background:#f7f9fb;filter:none}button.danger{background:#fff;color:var(--danger);border-color:#e9c2c2}button.danger:hover{background:var(--danger-soft);filter:none}button.link{background:none;border:none;color:var(--accent);padding:0;font-weight:500}button:disabled{opacity:.5;cursor:not-allowed}.row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}.row.center{align-items:center}.field{display:flex;flex-direction:column;gap:5px}.field label{font-size:12px;color:var(--muted);font-weight:520}.field.grow{flex:1 1;min-width:200px}.hint{font-size:12px;color:var(--faint)}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:520;border:1px solid var(--border);background:#f2f4f7;color:var(--muted);white-space:nowrap}.badge.active,.badge.ok{background:var(--ok-soft);border-color:#c3e4d1;color:var(--ok)}.badge.warming,.badge.warn{background:var(--warn-soft);border-color:#efd9b2;color:var(--warn)}.badge.critical,.badge.error,.badge.halted{background:var(--danger-soft);border-color:#eec9c9;color:var(--danger)}.badge.paused{background:#eef1f5}.badge.accent{background:var(--accent-soft);border-color:#c6d7f7;color:var(--accent)}a.badge:hover{text-decoration:none;filter:brightness(.97)}.notice{padding:11px 14px;border-radius:8px;margin-bottom:14px;border:1px solid;font-size:13.5px}.notice.ok{background:var(--ok-soft);border-color:#c3e4d1;color:var(--ok)}.notice.err{background:var(--danger-soft);border-color:#eec9c9;color:var(--danger)}.notice.warn{background:var(--warn-soft);border-color:#efd9b2;color:var(--warn)}.notice.info{background:var(--accent-soft);border-color:#c6d7f7;color:#1c47ad}.muted{color:var(--muted)}.small{font-size:12.5px}.kill{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;border-width:1px}.kill.live{border-color:#f0c9c9;background:linear-gradient(0deg,#fffafa,#fff)}.kill .state{font-size:17px;font-weight:640;letter-spacing:-.01em;display:flex;align-items:center;gap:9px}.kill .state .light{width:10px;height:10px;border-radius:50%;flex-shrink:0}.kill .state .light.on{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}.kill .state .light.off{background:var(--danger);box-shadow:0 0 0 3px var(--danger-soft)}button.stop{background:var(--danger);border-color:var(--danger);font-weight:620;padding:11px 22px;font-size:14px}.steps{display:flex;flex-direction:column;gap:0}.step-card{border:1px solid var(--border);border-radius:var(--radius);padding:16px;background:#fff;position:relative}.step-connector{display:flex;align-items:center;gap:8px;padding:8px 0 8px 22px;color:var(--muted);font-size:12.5px}.step-connector:before{content:"";position:absolute;margin-left:-22px;width:2px;height:34px;background:var(--border-strong);border-radius:2px}.step-head{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.step-num{width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:640;flex-shrink:0}.step-num.ghost{background:#fff;color:var(--faint);border:1px dashed var(--border-strong)}.preview{background:#fbfcfd;border:1px solid var(--border);border-radius:8px;padding:14px;margin-top:12px}.preview pre{margin:0;white-space:pre-wrap;word-wrap:break-word;font-family:inherit;font-size:13.5px;line-height:1.6}details>summary{cursor:pointer;color:var(--accent);font-size:13px;list-style:none;padding:6px 0;-webkit-user-select:none;-moz-user-select:none;user-select:none}details>summary::-webkit-details-marker{display:none}details>summary:before{content:"▸ ";color:var(--faint)}details[open]>summary:before{content:"▾ "}.empty{text-align:center;padding:34px 20px;color:var(--muted)}.empty .title{font-weight:600;color:var(--text);margin-bottom:5px;font-size:14.5px}.empty .body{max-width:420px;margin:0 auto 14px;font-size:13.5px}.check-item{display:flex;gap:11px;align-items:flex-start;padding:11px 0;border-bottom:1px solid var(--border)}.check-item:last-child{border-bottom:none}.check-mark{width:19px;height:19px;border-radius:50%;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;margin-top:1px}.check-mark.done{background:var(--ok);color:#fff}.check-mark.todo{background:#fff;border:1.5px dashed var(--border-strong);color:transparent}.check-body .t{font-weight:550}.check-body .d{font-size:13px}.check-body .d,.check-item.done .check-body .t{color:var(--muted)}.scroll-list{max-height:300px;overflow-y:auto;border:1px solid var(--border);border-radius:8px;padding:6px 10px;background:#fbfcfd}.scroll-list label{display:flex;align-items:center;gap:8px;padding:5px 4px;border-radius:5px}.scroll-list label:hover{background:#f1f4f8}.login-wrap{display:flex;min-height:100vh;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 0,#eaf0fb,var(--bg));padding:20px}.login-box{width:360px;max-width:100%;box-shadow:var(--shadow-lg);padding:26px}.login-box h1{font-size:19px}.login-box .field{margin-bottom:13px}.login-box input{width:100%}.login-box button{width:100%;padding:10px;margin-top:4px}@media (max-width:860px){.shell{flex-direction:column}.sidebar{width:100%;height:auto;position:static;flex-direction:row;flex-wrap:wrap;align-items:center;padding:12px;gap:4px}.nav-group,.sidebar .brand,.sidebar .brand-sub,.sidebar-foot .who{display:none}.sidebar-foot{margin:0;padding:0;border:none}.main{padding:18px 16px 50px}}.preflight{display:flex;flex-direction:column;gap:2px;margin-top:14px}.preflight-row{display:flex;gap:12px;align-items:flex-start;padding:12px;border-radius:8px;border-left:3px solid transparent;background:var(--panel-2,rgba(255,255,255,.02))}.preflight-row.blocker{border-left-color:var(--err,#e5484d);background:color-mix(in srgb,var(--err,#e5484d) 7%,transparent)}.preflight-row.warning{border-left-color:var(--warn,#f5a524);background:color-mix(in srgb,var(--warn,#f5a524) 6%,transparent)}.preflight-row.ok{opacity:.62}.preflight-mark{flex:0 0 22px;height:22px;border-radius:999px;display:grid;place-items:center;font-size:13px;font-weight:700;line-height:1}.preflight-mark.ok{color:var(--ok,#30a46c);background:color-mix(in srgb,var(--ok,#30a46c) 16%,transparent)}.preflight-mark.blocker{color:var(--err,#e5484d);background:color-mix(in srgb,var(--err,#e5484d) 16%,transparent)}.preflight-mark.warning{color:var(--warn,#f5a524);background:color-mix(in srgb,var(--warn,#f5a524) 16%,transparent)}.preflight-body{min-width:0;flex:1 1}.preflight-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:600;margin-bottom:2px}.preflight-title a{color:inherit;text-decoration:none}.preflight-title a:hover{text-decoration:underline}.preflight-row .hint{margin-top:6px}@media (max-width:640px){.preflight-row{padding:10px 8px}}.spinner{display:inline-block;width:12px;height:12px;margin-right:7px;vertical-align:-1px;border:2px solid;border-right:2px solid transparent;border-radius:999px;animation:spin .7s linear infinite;opacity:.8}.spinner.large{width:22px;height:22px;border-width:3px;margin-right:10px}@keyframes spin{to{transform:rotate(1turn)}}button[aria-busy=true]{opacity:.75;cursor:progress}.page-loading{display:flex;align-items:center;justify-content:center;gap:4px;min-height:40vh;font-size:15px}