:root{--shell:#0b3a66;--shell-2:#0e4a82;--shell-text:#e8f0f8;--accent:#0a6ed1;--accent-hover:#0858a8;--accent-soft:#e5f0fb;--bg:#eef1f4;--surface:#fff;--surface-2:#f6f8fa;--header-row:#e9edf1;--border:#c9d1d9;--border-soft:#dde3e9;--text:#1d2d3e;--text-2:#556b82;--text-3:#8396a8;--ok:#107e3e;--ok-bg:#e6f4ea;--warn:#b95000;--warn-bg:#fef3e2;--err:#b00;--err-bg:#fdecea;--info:#0a6ed1;--info-bg:#e5f0fb;--neutral-bg:#eceff2;--font:"Segoe UI", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;--mono:"SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--radius:3px;--row-h:30px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--font);color:var(--text);background:var(--bg);font-size:13px;line-height:1.4}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{margin:0;font-weight:600}code,pre,.mono{font-family:var(--mono);font-size:12px}button,input,select,textarea{font:inherit;color:inherit}.shell{grid-template-rows:40px 1fr 24px;grid-template-columns:220px 1fr;height:100%;display:grid}.shell-header{background:var(--shell);color:var(--shell-text);border-bottom:3px solid var(--accent);grid-column:1/-1;align-items:center;gap:16px;padding:0 14px;display:flex}.shell-brand{letter-spacing:.04em;align-items:center;gap:8px;font-size:14px;font-weight:700;display:flex}.shell-brand .logo{width:22px;height:22px;color:var(--shell);background:#fff;border-radius:3px;place-items:center;font-size:13px;font-weight:800;display:grid}.shell-brand small{opacity:.7;letter-spacing:0;font-weight:400}.shell-header .spacer{flex:1}.shell-user{align-items:center;gap:10px;font-size:12px;display:flex}.shell-user button{color:var(--shell-text);border-radius:var(--radius);cursor:pointer;background:0 0;border:1px solid #ffffff59;padding:3px 10px}.shell-user button:hover{background:#ffffff1a}.shell-nav{background:var(--surface);border-right:1px solid var(--border);padding:8px 0;overflow-y:auto}.nav-group{text-transform:uppercase;color:var(--text-3);letter-spacing:.06em;padding:10px 14px 4px;font-size:11px;font-weight:700}.nav-link{color:var(--text);border-left:3px solid #0000;align-items:center;gap:8px;padding:6px 14px 6px 12px;display:flex}.nav-link:hover{background:var(--surface-2);text-decoration:none}.nav-link.active{background:var(--accent-soft);border-left-color:var(--accent);color:var(--accent);font-weight:600}.nav-link .nav-icon{color:var(--text-3);flex-shrink:0}.nav-link:hover .nav-icon{color:var(--text-2)}.nav-link.active .nav-icon{color:var(--accent)}.nav-link .code{font-family:var(--mono);color:var(--text-3);margin-left:auto;font-size:10px}.shell-main{flex-direction:column;min-width:0;display:flex;overflow-y:auto}.shell-status{background:var(--header-row);border-top:1px solid var(--border);color:var(--text-2);grid-column:1/-1;align-items:center;gap:18px;padding:0 12px;font-size:11px;display:flex}.shell-status .spacer{flex:1}.status-msg{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:5px;min-width:0;font-weight:600;display:inline-flex;overflow:hidden}.status-msg.ok{color:var(--ok)}.status-msg.err{color:var(--err)}.status-msg.warn{color:var(--warn)}.status-msg.info{color:var(--info)}.toasts{z-index:80;flex-direction:column;gap:8px;width:min(380px,100vw - 32px);display:flex;position:fixed;top:52px;right:16px}.toast{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--info);border-radius:var(--radius);align-items:flex-start;gap:10px;padding:10px 12px;font-size:12px;animation:.15s ease-out toast-in;display:flex;box-shadow:0 6px 20px #0000002e}.toast>svg{flex-shrink:0;margin-top:1px}.toast.ok{border-left-color:var(--ok)}.toast.ok>svg{color:var(--ok)}.toast.err{border-left-color:var(--err)}.toast.err>svg{color:var(--err)}.toast.warn{border-left-color:var(--warn)}.toast.warn>svg{color:var(--warn)}.toast.info>svg{color:var(--info)}.toast-body{word-break:break-word;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.toast-body span{color:var(--text-2)}.toast button{cursor:pointer;color:var(--text-3);background:0 0;border:none;padding:0}@keyframes toast-in{0%{opacity:0;transform:translateY(-6px)}}.command{width:300px;position:relative}.command-box{border-radius:var(--radius);background:#ffffff1f;border:1px solid #ffffff40;align-items:center;gap:6px;height:26px;padding:0 8px;display:flex}.command-box:focus-within{background:#fff;border-color:#fff}.command-box.invalid{border-color:#ff8a80}.command-box input{min-width:0;font-family:var(--mono);color:var(--shell-text);text-transform:none;background:0 0;border:none;outline:none;flex:1;font-size:12px}.command-box input::placeholder{color:#e8f0f899;font-family:var(--font)}.command-box:focus-within input{color:var(--text)}.command-box:focus-within input::placeholder{color:var(--text-3)}.command-hint{font-family:var(--mono);color:#e8f0f8b3;flex-shrink:0;font-size:10px}.command-box:focus-within .command-hint{color:var(--text-3)}kbd.command-hint{border:1px solid #ffffff4d;border-radius:3px;padding:0 4px}.command-box:focus-within kbd.command-hint{border-color:var(--border)}.command-list,.command-error{z-index:60;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);position:absolute;top:calc(100% + 4px);left:0;right:0;box-shadow:0 6px 20px #0000002e}.command-list{max-height:320px;margin:0;padding:4px 0;list-style:none;overflow-y:auto}.command-list li{cursor:pointer;align-items:center;gap:8px;padding:5px 10px;font-size:12px;display:flex}.command-list li svg{color:var(--text-3);flex-shrink:0}.command-list li.active{background:var(--accent-soft)}.command-list li.active svg{color:var(--accent)}.command-list .code{font-family:var(--mono);color:var(--accent);width:36px;font-size:11px;font-weight:600}.command-list .arg{color:var(--text-3);margin-left:auto;font-size:11px}.command-error{color:var(--err);border-left:3px solid var(--err);padding:7px 10px;font-size:12px}.page-sticky{z-index:30;position:sticky;top:0;box-shadow:0 2px 6px #0f1e2d0f}.page-head{background:var(--surface);border-bottom:1px solid var(--border);padding:10px 16px 0}.breadcrumb{color:var(--text-3);margin-bottom:2px;font-size:11px}.breadcrumb a{color:var(--text-2)}.page-title{align-items:baseline;gap:10px;padding-bottom:8px;display:flex}.page-title h1{font-size:17px}.page-title .subtitle{color:var(--text-2);font-size:12px}.toolbar{background:var(--surface-2);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:4px;padding:6px 16px;display:flex}.toolbar .sep{background:var(--border);width:1px;height:20px;margin:0 6px}.toolbar .spacer{flex:1}.content{flex-direction:column;gap:14px;padding:14px 16px 24px;display:flex}.btn{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;height:26px;padding:0 12px;font-size:12px;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--text-3)}.btn:disabled{opacity:.5;cursor:default}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.btn.primary:hover:not(:disabled){background:var(--accent-hover)}.btn.danger{color:var(--err);border-color:#e7b3b3}.btn.danger:hover:not(:disabled){background:var(--err-bg)}.btn.ghost{background:0 0;border-color:#0000}.btn.ghost:hover:not(:disabled){border-color:var(--border)}.btn .key{font-family:var(--mono);opacity:.7;font-size:10px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.panel-head{background:var(--header-row);border-bottom:1px solid var(--border);text-transform:uppercase;letter-spacing:.03em;color:var(--text-2);align-items:center;gap:8px;padding:7px 12px;font-size:12px;font-weight:600;display:flex}.panel-head .spacer{flex:1}.panel-body{padding:12px}.panel-body.flush{padding:0}.provider-apps-info{border-bottom:1px solid var(--border);flex-direction:column;gap:8px;padding:10px 12px;display:flex}.provider-apps-summary{color:var(--text-2);flex-wrap:wrap;align-items:center;gap:6px 16px;font-size:12px;display:flex}.provider-apps-summary span{white-space:nowrap}.provider-apps-summary strong{color:var(--text);font-variant-numeric:tabular-nums}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;display:grid}.kpis{grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;display:grid}.kpi{background:var(--surface);border:1px solid var(--border);border-top:3px solid var(--accent);border-radius:var(--radius);padding:10px 12px}.kpi .label{text-transform:uppercase;color:var(--text-2);letter-spacing:.04em;font-size:11px}.kpi .value{font-variant-numeric:tabular-nums;margin-top:2px;font-size:26px;font-weight:300}.kpi.ok{border-top-color:var(--ok)}.kpi.err{border-top-color:var(--err)}.kpi.warn{border-top-color:var(--warn)}.table-wrap{overflow-x:auto}table.grid{border-collapse:collapse;width:100%;font-size:12px}table.grid th{text-align:left;background:var(--header-row);color:var(--text-2);border-bottom:1px solid var(--border);height:var(--row-h);white-space:nowrap;padding:0 10px;font-weight:600}table.grid td{height:var(--row-h);border-bottom:1px solid var(--border-soft);white-space:nowrap;padding:0 10px}table.grid tbody tr:nth-child(2n) td{background:#fafbfc}table.grid tbody tr:hover td{background:var(--accent-soft)}table.grid tbody tr.clickable{cursor:pointer}table.grid td.num,table.grid th.num{text-align:right;font-variant-numeric:tabular-nums}table.grid td.actions{text-align:right}.empty{text-align:center;color:var(--text-3);padding:28px}.badge{background:var(--neutral-bg);color:var(--text-2);white-space:nowrap;border-radius:10px;align-items:center;gap:5px;padding:1px 8px;font-size:11px;font-weight:600;display:inline-flex}.badge:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.err{background:var(--err-bg);color:var(--err)}.badge.info{background:var(--info-bg);color:var(--info)}.badge.running:before{animation:1s infinite pulse}@keyframes pulse{50%{opacity:.2}}.meter{align-items:center;gap:6px;min-width:110px;display:flex}.meter .bar{background:var(--neutral-bg);border-radius:3px;flex:1;height:6px;overflow:hidden}.meter .fill{background:var(--ok);height:100%}.meter .fill.warn{background:var(--warn)}.meter .fill.err{background:var(--err)}.meter span{text-align:right;font-variant-numeric:tabular-nums;width:32px;font-size:11px}.form{grid-template-columns:170px 1fr;align-items:center;gap:8px 12px;display:grid}.form label{text-align:right;color:var(--text-2);font-size:12px}.form label.req:after{content:" *";color:var(--err)}.form .hint{color:var(--text-3);grid-column:2;margin-top:-4px;font-size:11px}.form .full{grid-column:1/-1}.input,select.input,textarea.input{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);width:100%;max-width:420px;height:26px;padding:0 8px}textarea.input{height:auto;padding:6px 8px}.input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.input[readonly]{background:var(--surface-2);color:var(--text-2)}.checkbox{align-items:center;gap:6px;display:inline-flex}fieldset.group{border:1px solid var(--border-soft);border-radius:var(--radius);margin:0;padding:10px 12px 12px}fieldset.group legend{text-transform:uppercase;color:var(--text-2);letter-spacing:.04em;padding:0 6px;font-size:11px;font-weight:700}.msg{border-radius:var(--radius);border-left:4px solid;padding:8px 12px;font-size:12px}.msg.err{background:var(--err-bg);border-color:var(--err);color:#7a0000}.msg.ok{background:var(--ok-bg);border-color:var(--ok);color:#0a5429}.msg.warn{background:var(--warn-bg);border-color:var(--warn);color:#7a3500}.msg.info{background:var(--info-bg);border-color:var(--info);color:#06427d}.msg ul{margin:4px 0 0;padding-left:18px}.tabs{background:var(--surface);border-bottom:1px solid var(--border);gap:0;padding:0 16px;display:flex}.tab{cursor:pointer;color:var(--text-2);background:0 0;border:none;border-bottom:3px solid #0000;margin-bottom:-1px;padding:8px 14px;font-size:12px}.tab:hover{color:var(--text)}.tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.modal-backdrop{z-index:50;background:#0f1e2d73;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border-radius:var(--radius);flex-direction:column;width:min(640px,100%);max-height:90vh;display:flex;box-shadow:0 10px 40px #00000040}.modal-head{background:var(--shell);color:var(--shell-text);padding:9px 14px;font-weight:600;display:flex}.modal-head .spacer{flex:1}.modal-head button{color:inherit;cursor:pointer;background:0 0;border:none;font-size:16px;line-height:1}.modal-body{flex-direction:column;gap:12px;padding:14px;display:flex;overflow-y:auto}.modal-foot{background:var(--surface-2);border-top:1px solid var(--border);justify-content:flex-end;gap:6px;padding:8px 14px;display:flex}.props{grid-template-columns:150px 1fr;gap:6px 12px;font-size:12px;display:grid}.props dt{color:var(--text-2);text-align:right}.props dd{margin:0;font-weight:500}.console{color:#d7e1ea;font-family:var(--mono);white-space:pre-wrap;word-break:break-word;border-radius:0 0 var(--radius) var(--radius);background:#101a24;max-height:60vh;padding:10px 12px;font-size:12px;line-height:1.55;overflow:auto}.console .ln{grid-template-columns:70px 100px 1fr;gap:10px;display:grid}.console .t{color:#6f8499}.console .s{color:#7fa6cc}.console .debug{color:#8fa3b5}.console .success{color:#7fdc9a}.console .warning{color:#ffc46b}.console .error{color:#ff8a80}.steps{flex-wrap:wrap;gap:2px;display:flex}.step{text-align:center;background:var(--neutral-bg);min-width:80px;color:var(--text-3);letter-spacing:.03em;flex:1;padding:6px 4px;font-size:10px;font-weight:600}.step.done{background:var(--ok-bg);color:var(--ok)}.step.current{background:var(--accent);color:#fff}.step.failed{background:var(--err);color:#fff}.step:first-child{border-radius:var(--radius) 0 0 var(--radius)}.step:last-child{border-radius:0 var(--radius) var(--radius) 0}.check-list{grid-template-columns:repeat(2,1fr);gap:4px 16px;margin:0;padding:0;list-style:none;display:grid}.check-list li{align-items:center;gap:6px;display:flex}.check-list .y{color:var(--ok);font-weight:700}.check-list .n{color:var(--err);font-weight:700}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);text-align:center;color:var(--text-2);background:var(--surface-2);cursor:pointer;padding:22px}.dropzone.over{border-color:var(--accent);background:var(--accent-soft)}.dropzone strong{color:var(--text)}.login-page{background:linear-gradient(160deg, var(--shell) 0 45%, var(--bg) 45%);place-items:center;min-height:100%;padding:16px;display:grid}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:min(360px,100%);box-shadow:0 8px 30px #0000002e}.login-card .head{background:var(--shell);color:var(--shell-text);border-bottom:3px solid var(--accent);padding:16px 18px}.login-card .head h1{letter-spacing:.05em;font-size:16px}.login-card .head p{opacity:.75;margin:2px 0 0;font-size:12px}.login-card form{flex-direction:column;gap:10px;padding:18px;display:flex}.login-card label{color:var(--text-2);flex-direction:column;gap:4px;font-size:12px;display:flex}.login-card .input{max-width:none;height:30px}.login-card .btn{justify-content:center;height:30px}.muted{color:var(--text-3)}.nowrap{white-space:nowrap}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}@media (width<=1100px){.kpis{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-3{grid-template-columns:1fr}}@media (width<=800px){.shell{grid-template-rows:40px auto 1fr 24px;grid-template-columns:1fr}.shell-nav{border-right:none;border-bottom:1px solid var(--border);padding:0;display:flex;overflow-x:auto}.nav-group{display:none}.nav-link{white-space:nowrap;border-bottom:3px solid #0000;border-left:none}.nav-link.active{border-bottom-color:var(--accent)}.nav-link .nav-icon{color:var(--text-3);flex-shrink:0}.nav-link:hover .nav-icon{color:var(--text-2)}.nav-link.active .nav-icon{color:var(--accent)}.nav-link .code{display:none}.grid-2{grid-template-columns:1fr}.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.form{grid-template-columns:1fr}.form label{text-align:left}.form .hint{grid-column:1}.props{grid-template-columns:110px 1fr}.shell-brand small,.shell-user .who{display:none}.command{flex:1;width:auto}.shell-header{gap:10px}.check-list{grid-template-columns:1fr}}.console-term{cursor:text;min-height:420px;max-height:calc(100vh - 330px)}.term-entry{margin-bottom:8px}.term-prompt{color:#7fdc9a;white-space:nowrap;font-weight:600}.term-cmd{color:#fff}.term-out{white-space:pre-wrap;word-break:break-word;font:inherit;color:#d7e1ea;margin:2px 0 0}.term-out.error{color:#ffb3ab}.term-meta{margin-top:2px;font-size:10px}.term-meta.success{color:#6f8f7a}.term-meta.error{color:#ff8a80}.term-input{align-items:center;gap:8px;display:flex}.term-input input{color:#fff;min-width:0;font:inherit;caret-color:#7fdc9a;background:0 0;border:none;outline:none;flex:1;padding:2px 0}.term-input input::placeholder{color:#6f8499}.app-actions{align-items:center;gap:3px;display:inline-flex}.icon-btn{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);width:24px;height:22px;color:var(--text-2);cursor:pointer;place-items:center;padding:0;display:inline-grid}.icon-btn:hover:not(:disabled){background:var(--surface-2);color:var(--text);border-color:var(--text-3)}.icon-btn:disabled{opacity:.35;cursor:default}.icon-btn.go{color:var(--ok)}.icon-btn.warn{color:var(--warn)}.icon-btn.stop{color:var(--err)}.diag-list{flex-direction:column;gap:4px;display:flex}.diag-check{border:1px solid var(--border-soft);border-radius:var(--radius)}.diag-head{background:var(--surface);cursor:pointer;text-align:left;border:none;align-items:center;gap:8px;width:100%;padding:7px 10px;font-size:12px;display:flex}.diag-head:disabled{cursor:default}.diag-head strong{white-space:nowrap}.diag-summary{color:var(--text-2);flex:1}.diag-details{border-radius:0 0 var(--radius) var(--radius);max-height:260px;margin:0;font-size:11px}.dns-box{border-left:3px solid var(--border);background:var(--surface-2);flex-direction:column;gap:3px;max-width:420px;margin-top:6px;padding:7px 10px;font-size:12px;display:flex}.dns-box.info{border-color:var(--info);background:var(--info-bg)}.dns-box.ok{border-color:var(--ok);background:var(--ok-bg)}.dns-box.warn{border-color:var(--warn);background:var(--warn-bg)}table.grid th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}table.grid th.sortable:hover{color:var(--text);background:#dfe5eb}table.grid th.sorted{color:var(--accent)}table.grid th .sort-ind{opacity:.45;font-size:10px}table.grid th.sorted .sort-ind{opacity:1}.project-chip{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.chip-name{text-overflow:ellipsis;border:1px solid;border-radius:10px;align-items:center;gap:5px;max-width:240px;padding:1px 7px;font-size:11px;font-weight:600;display:inline-flex;overflow:hidden}.chip-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.chip-count{opacity:.7;font-weight:700}.chip-role{text-transform:uppercase;letter-spacing:.03em;background:var(--neutral-bg);color:var(--text-2);border-radius:3px;padding:1px 6px;font-size:10px;font-weight:700}.chip-role.role-frontend{color:#0a5ab0;background:#e5f0fb}.chip-role.role-backend{color:#0c6b34;background:#e6f4ea}.chip-role.role-worker{color:#9a4400;background:#fef3e2}.chip-role.role-storage{color:#6b2fb0;background:#f1e8fb}table.grid.grouped tr.group-row td{height:34px}table.grid.grouped tr.group-row.open td{background:var(--accent-soft);font-weight:500}table.grid.grouped tr.group-children>td{height:auto;padding:0;background:#f7f9fb!important}.group-children-inner{padding:6px 10px 10px 30px}.group-children-inner table.grid{background:var(--surface);border:1px solid var(--border-soft)}.parts{flex-wrap:wrap;gap:3px;display:inline-flex}.chip-role.off{opacity:.45;text-decoration:line-through}.group-flag{border-radius:3px;align-items:center;gap:3px;margin-left:6px;padding:0 5px;font-size:10px;font-weight:600;display:inline-flex}.group-flag.warn{background:var(--warn-bg);color:var(--warn)}.cpu-meter{min-width:150px}.cpu-meter span{width:38px}.cpu-meter small{text-align:right;font-variant-numeric:tabular-nums;width:52px;font-size:10px}.live-dot{background:var(--text-3);border-radius:50%;width:8px;height:8px;display:inline-block}.live-dot.on{background:#e5352b;box-shadow:0 0 0 3px #e5352b2e}.live-dot.on.busy{animation:.8s infinite pulse}.btn.live-on{color:#b3261e;background:#fff5f4;border-color:#e5352b;font-weight:600}.cpu-meter.live .fill{transition:width .6s}.live-host{text-transform:none;color:var(--text-2);font-size:11px;font-weight:500}.live-host strong{color:var(--text)}
