@import "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Hanken+Grotesk:wght@400;500;600;700&family=Courier+Prime:wght@400;700&display=swap";:root{--ink-950:#1b1b1b;--ink-900:#202020;--ink-850:#262626;--ink-800:#2c2c2c;--ink-750:#333;--ink-700:#3b3b3b;--ink-650:#454545;--ink-600:#525252;--bg:var(--ink-850);--surface:var(--ink-750);--surface-2:var(--ink-800);--surface-raised:var(--ink-700);--sidebar:var(--ink-900);--terminal-bg:#1a1a1a;--border:#ffffff17;--border-strong:#ffffff29;--text:#ededed;--text-muted:#a0a0a0;--text-dim:#6f6f6f;--accent:#69f;--accent-hover:#82adff;--accent-press:#4f86f5;--accent-soft:#6699ff24;--accent-border:#6699ff61;--online:#4ec77f;--online-soft:#4ec77f24;--warning:#e8b84b;--warning-soft:#e8b84b24;--error:#ec6a5e;--error-soft:#ec6a5e24;--font-head:"Gravesend Sans", "Space Grotesk", system-ui, sans-serif;--font-body:"Semplicita Pro", "Hanken Grotesk", system-ui, sans-serif;--font-mono:"Courier", "Courier Prime", ui-monospace, "SF Mono", monospace;--r-sm:6px;--r:9px;--r-lg:13px;--sidebar-w:232px;--shadow:0 1px 2px #0000004d, 0 8px 24px #00000038}*{box-sizing:border-box}html,body{height:100%;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:14px;line-height:1.5}#root{height:100%}h1,h2,h3,h4{font-family:var(--font-head);letter-spacing:-.01em;color:var(--text);margin:0;font-weight:600}::selection{background:var(--accent-soft)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--ink-650);border:2px solid var(--bg);border-radius:99px}::-webkit-scrollbar-thumb:hover{background:var(--ink-600)}.mono{font-family:var(--font-mono)}.muted{color:var(--text-muted)}.dim{color:var(--text-dim)}.row{align-items:center;display:flex}.col{flex-direction:column;display:flex}.gap-1{gap:4px}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-6{gap:24px}.grow{flex:1}.wrap{flex-wrap:wrap}.tnum{font-variant-numeric:tabular-nums}.btn{font-family:var(--font-body);border-radius:var(--r-sm);background:var(--surface-raised);height:36px;color:var(--text);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:0 14px;font-size:13.5px;font-weight:600;line-height:1;transition:background .14s,border-color .14s,color .14s,transform 40ms;display:inline-flex}.btn:active{transform:translateY(1px)}.btn svg{width:15px;height:15px}.btn-primary{background:var(--accent);color:#11203f;border-color:var(--accent)}.btn-primary:hover{background:var(--accent-hover)}.btn-primary:active{background:var(--accent-press)}.btn-ghost{border-color:var(--border);color:var(--text);background:0 0}.btn-ghost:hover{background:var(--surface-raised);border-color:var(--border-strong)}.btn-subtle{background:var(--surface-raised);border-color:var(--border)}.btn-subtle:hover{background:var(--ink-650)}.btn-danger{border-color:var(--error);color:var(--error);background:0 0}.btn-danger:hover{background:var(--error-soft)}.btn-danger-solid{background:var(--error);border-color:var(--error);color:#2a0f0c}.btn-danger-solid:hover{filter:brightness(1.08)}.btn-sm{height:30px;padding:0 10px;font-size:12.5px}.btn-lg{height:42px;padding:0 20px;font-size:14.5px}.btn-icon{width:36px;padding:0}.btn-icon.btn-sm{width:30px}.btn:disabled{opacity:.45;cursor:not-allowed}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r)}.card-pad{padding:18px}.app-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;padding:0;transition:border-color .15s,background .15s,transform .12s;overflow:hidden}.app-card:hover{border-color:var(--border-strong);background:var(--ink-700);transform:translateY(-2px)}.badge{letter-spacing:.02em;text-transform:capitalize;border:1px solid #0000;border-radius:99px;align-items:center;gap:6px;padding:3px 9px;font-size:11.5px;font-weight:600;display:inline-flex}.badge-online{color:var(--online);background:var(--online-soft);border-color:#4ec77f47}.badge-warning{color:var(--warning);background:var(--warning-soft);border-color:#e8b84b47}.badge-error{color:var(--error);background:var(--error-soft);border-color:#ec6a5e47}.badge-stopped,.badge-neutral{color:var(--text-muted);border-color:var(--border);background:#ffffff0d}.dot{border-radius:99px;flex:none;width:8px;height:8px;position:relative}.dot-online{background:var(--online);animation:2.4s infinite pulse-online}.dot-warning{background:var(--warning)}.dot-error{background:var(--error)}.dot-stopped{background:var(--text-dim)}@keyframes pulse-online{0%{box-shadow:0 0 #4ec77f73}70%{box-shadow:0 0 0 6px #4ec77f00}to{box-shadow:0 0 #4ec77f00}}.field{flex-direction:column;gap:7px;display:flex}.label{color:var(--text-muted);letter-spacing:.01em;font-size:12.5px;font-weight:600}.hint{color:var(--text-dim);font-size:12px}.input,.select,.textarea{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);width:100%;color:var(--text);font-family:var(--font-body);outline:none;height:38px;padding:0 12px;font-size:13.5px;transition:border-color .14s,box-shadow .14s}.textarea{resize:vertical;height:auto;padding:10px 12px;line-height:1.55}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent-border);box-shadow:0 0 0 3px var(--accent-soft)}.input::placeholder,.textarea::placeholder{color:var(--text-dim)}.input-mono{font-family:var(--font-mono);font-size:13px}.input-prefix{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);align-items:center;display:flex;overflow:hidden}.input-prefix:focus-within{border-color:var(--accent-border);box-shadow:0 0 0 3px var(--accent-soft)}.input-prefix .input{box-shadow:none;background:0 0;border:none}.input-prefix .affix{font-family:var(--font-mono);color:var(--text-dim);border-right:1px solid var(--border);white-space:nowrap;background:#0000002e;align-items:center;height:38px;padding:0 11px;font-size:13px;display:flex}.input-prefix .affix-suffix{border-right:none;border-left:1px solid var(--border)}.segmented{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);gap:2px;padding:3px;display:inline-flex}.segmented button{appearance:none;color:var(--text-muted);font-family:var(--font-body);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:7px;padding:6px 14px;font-size:13px;font-weight:600;transition:background .14s,color .14s;display:inline-flex}.segmented button.active{background:var(--accent);color:#11203f}.segmented button:not(.active):hover{color:var(--text)}.switch{background:var(--ink-650);border:1px solid var(--border);cursor:pointer;border-radius:99px;flex:none;width:38px;height:22px;transition:background .16s;position:relative}.switch:after{content:"";background:#d8d8d8;border-radius:99px;width:16px;height:16px;transition:transform .16s,background .16s;position:absolute;top:2px;left:2px}.switch.on{background:var(--accent)}.switch.on:after{background:#fff;transform:translate(16px)}.shell{height:100%;display:flex}.sidebar{width:var(--sidebar-w);background:var(--sidebar);border-right:1px solid var(--border);flex-direction:column;flex:none;padding:0;display:flex}.brand{border-bottom:1px solid var(--border);align-items:center;gap:11px;padding:19px 18px 17px;display:flex}.brand-mark{background:var(--accent);border-radius:7px;flex:none;place-items:center;width:30px;height:30px;display:grid}.brand-mark svg{width:18px;height:18px}.brand-logo{flex:none;width:30px;height:30px;display:block}.brand-name{font-family:var(--font-head);letter-spacing:-.01em;font-size:15.5px;font-weight:600}.brand-name b{color:var(--accent);font-weight:600}.nav{flex-direction:column;gap:2px;padding:12px;display:flex}.nav-section{letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);padding:14px 10px 7px;font-size:10.5px;font-weight:700}.nav-item{border-radius:var(--r-sm);color:var(--text-muted);cursor:pointer;border:1px solid #0000;align-items:center;gap:11px;padding:9px 10px;font-size:13.5px;font-weight:500;transition:background .12s,color .12s;display:flex}.nav-item svg{flex:none;width:17px;height:17px}.nav-item:hover{color:var(--text);background:#ffffff0a}.nav-item.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-border)}.nav-spacer{flex:1}.user-chip{border-top:1px solid var(--border);align-items:center;gap:10px;margin-top:auto;padding:12px 14px;display:flex}.avatar{background:linear-gradient(135deg, var(--accent), #3f6fd6);color:#11203f;border-radius:99px;flex:none;place-items:center;width:30px;height:30px;font-size:12px;font-weight:700;display:grid}.main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.topbar{border-bottom:1px solid var(--border);background:var(--bg);flex:none;align-items:center;gap:14px;height:58px;padding:0 26px;display:flex}.crumbs{color:var(--text-muted);align-items:center;gap:8px;font-size:13.5px;display:flex}.crumbs .sep{color:var(--text-dim)}.crumbs .cur{color:var(--text);font-weight:600}.crumb-link{cursor:pointer}.crumb-link:hover{color:var(--text)}.content{flex:1;padding:28px 30px 60px;overflow-y:auto}.content-narrow{max-width:1180px;margin:0 auto}.page-head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:22px;display:flex}.page-title{font-size:23px}.page-sub{color:var(--text-muted);margin-top:4px;font-size:13.5px}.table{border-collapse:collapse;width:100%;font-size:13.5px}.table th{text-align:left;letter-spacing:.05em;text-transform:uppercase;color:var(--text-dim);border-bottom:1px solid var(--border);padding:10px 14px;font-size:11px;font-weight:700}.table td{border-bottom:1px solid var(--border);vertical-align:middle;padding:13px 14px}.table tr:last-child td{border-bottom:none}.table tbody tr{transition:background .12s}.table tbody tr:hover{background:#ffffff06}.table-apps td{vertical-align:top;padding-top:15px;padding-bottom:15px}.row-click{cursor:pointer}.row-arrow{color:var(--text-dim);transition:transform .15s,color .15s;display:inline-flex}.row-click:hover .row-arrow{color:var(--accent);transform:translate(2px)}.env-toggle{cursor:pointer;color:var(--text-muted);font:inherit;background:0 0;border:none;align-items:center;gap:6px;padding:2px 0;display:inline-flex}.env-toggle:hover{color:var(--text)}.env-toggle svg{color:var(--text-dim);flex:none}.env-secret{color:var(--warning);background:#d4a03c1f;border-radius:99px;align-items:center;gap:3px;margin-left:2px;padding:1px 6px;font-size:11px;display:inline-flex}.env-list{border:1px solid var(--border);background:#0000002e;border-radius:7px;flex-direction:column;gap:4px;min-width:220px;margin-top:4px;padding:8px 10px;display:flex}.envq-row{gap:10px;font-size:11.5px;line-height:1.5;display:flex}.envq-key{color:var(--accent);flex:none}.envq-val{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.version-tag{color:var(--text-muted);background:var(--surface-2);border:1px solid var(--border);white-space:nowrap;border-radius:99px;padding:1px 8px;font-size:11.5px;font-weight:500}.type-tag{white-space:nowrap;border-radius:99px;align-items:center;gap:5px;padding:2px 9px;font-size:11.5px;font-weight:600;display:inline-flex}.type-tag svg{flex:none}.type-web{color:var(--accent);background:var(--accent-soft);border:1px solid var(--accent-border)}.type-service{color:#c79be8;background:#c79be81f;border:1px solid #c79be847}.filter-tab{background:var(--surface);border:1px solid var(--border);height:32px;color:var(--text-muted);font:inherit;cursor:pointer;border-radius:99px;align-items:center;gap:8px;padding:0 13px;font-size:12.5px;font-weight:600;transition:all .12s;display:inline-flex}.filter-tab:hover{color:var(--text);border-color:var(--border-strong)}.filter-tab.active{color:var(--accent);background:var(--accent-soft);border-color:var(--accent-border)}.filter-count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--text-muted);text-align:center;background:#ffffff12;border-radius:99px;min-width:18px;padding:0 6px;font-size:11px}.filter-tab.active .filter-count{background:var(--accent-border);color:var(--accent)}.logo-drop{border:1.5px dashed var(--border-strong);border-radius:var(--r);cursor:pointer;place-items:center;height:76px;padding:8px;transition:border-color .12s;display:grid}.logo-drop:hover{border-color:var(--accent-border)}.link-btn{cursor:pointer;color:var(--accent);font:inherit;background:0 0;border:none;padding:0;font-size:11.5px;font-weight:600}.link-btn:hover{text-decoration:underline}.swatch{cursor:pointer;width:30px;height:30px;box-shadow:0 0 0 1px var(--border) inset;border:2px solid #0000;border-radius:8px;padding:0;transition:transform .1s;position:relative}.swatch:hover{transform:scale(1.08)}.swatch.sel{border-color:var(--text);box-shadow:0 0 0 2px var(--bg), 0 0 0 4px var(--text)}.swatch-custom{background:var(--surface-2);color:var(--text-muted);place-items:center;display:grid;overflow:hidden}.swatch-custom input[type=color]{opacity:0;cursor:pointer;border:none;padding:0;position:absolute;inset:0}.terminal{background:var(--terminal-bg);border:1px solid var(--border);border-radius:var(--r);font-family:var(--font-mono);flex-direction:column;font-size:12.5px;line-height:1.7;display:flex;overflow:hidden}.terminal-bar{border-bottom:1px solid var(--border);font-family:var(--font-body);color:var(--text-muted);background:#00000040;align-items:center;gap:10px;padding:9px 14px;font-size:12.5px;display:flex}.tdots{gap:6px;display:flex}.tdot{border-radius:99px;width:10px;height:10px}.terminal-body{flex:1;padding:12px 16px;overflow-y:auto}.log-line{white-space:pre-wrap;word-break:break-word;gap:12px;padding:1px 0;display:flex}.log-time{color:#5e6470;flex:none}.log-lvl{flex:none;width:44px;font-weight:700}.lvl-info{color:#69f}.lvl-warn{color:var(--warning)}.lvl-error{color:var(--error)}.lvl-ok{color:var(--online)}.lvl-debug{color:#8a8f99}.log-msg{color:#cfd2d6}.log-line.fresh{animation:.35s logIn}@keyframes logIn{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}.cursor-blink{background:var(--online);vertical-align:-2px;width:8px;height:15px;animation:1.1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.metric{flex-direction:column;gap:8px;display:flex}.metric-top{justify-content:space-between;align-items:baseline;display:flex}.metric-label{color:var(--text-muted);font-size:12px;font-weight:600}.metric-val{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:19px;font-weight:500}.meter{background:#ffffff12;border-radius:99px;height:6px;overflow:hidden}.meter-fill{background:var(--accent);border-radius:99px;height:100%;transition:width .6s cubic-bezier(.4,0,.2,1)}.meter-fill.warn{background:var(--warning)}.meter-fill.hot{background:var(--error)}.tabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:24px;display:flex}.tab{appearance:none;font-family:var(--font-body);color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:8px;margin-bottom:-1px;padding:11px 15px;font-size:13.5px;font-weight:600;transition:color .12s,border-color .12s;display:inline-flex}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent)}.tab.danger.active{border-bottom-color:var(--error);color:var(--error)}.wizard-wrap{max-width:720px;margin:0 auto}.steps{align-items:center;margin-bottom:32px;display:flex}.step{align-items:center;gap:11px;display:flex}.step-num{border:1.5px solid var(--border-strong);width:30px;height:30px;color:var(--text-muted);background:var(--surface);border-radius:99px;flex:none;place-items:center;font-size:13px;font-weight:700;transition:all .2s;display:grid}.step.active .step-num{border-color:var(--accent);background:var(--accent);color:#11203f}.step.done .step-num{border-color:var(--online);background:var(--online);color:#0c2417}.step-label{color:var(--text-muted);font-size:13px;font-weight:600}.step.active .step-label,.step.done .step-label{color:var(--text)}.step-bar{background:var(--border);border-radius:2px;flex:1;height:2px;margin:0 14px;overflow:hidden}.step-bar-fill{background:var(--online);width:0;height:100%;transition:width .4s}.login-wrap{background:radial-gradient(900px 500px at 50% -10%, #6699ff14, transparent 60%), var(--bg);place-items:center;height:100%;padding:24px;display:grid}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);width:100%;max-width:396px;box-shadow:var(--shadow);padding:32px 30px}.kv{flex-direction:column;gap:5px;display:flex}.kv .k{color:var(--text-dim);letter-spacing:.03em;text-transform:uppercase;font-size:11.5px;font-weight:600}.kv .v{font-size:14px}.divider{background:var(--border);height:1px;margin:20px 0}.danger-card{background:linear-gradient(0deg, var(--error-soft), transparent);border-radius:var(--r);border:1px solid #ec6a5e4d}.chip{font-family:var(--font-mono);background:var(--surface-2);border:1px solid var(--border);color:var(--text-muted);white-space:nowrap;border-radius:5px;align-items:center;gap:6px;padding:3px 8px;font-size:12px;display:inline-flex}.env-row{grid-template-columns:1fr 1.3fr auto;align-items:center;gap:8px;display:grid}.empty{text-align:center;color:var(--text-dim);padding:50px 20px}.overlay{z-index:50;background:#0a0a0a9e;place-items:center;padding:24px;animation:.15s fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.modal{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-lg);width:100%;max-width:440px;box-shadow:var(--shadow);padding:24px;animation:.16s pop}@keyframes pop{0%{opacity:.6;transform:scale(.97)}}.fade-in{animation:.26s cubic-bezier(.4,0,.2,1) both fadeIn}@keyframes fadeIn{0%{transform:translateY(7px)}to{transform:none}}a.link{color:var(--accent);cursor:pointer;text-decoration:none}a.link:hover{text-decoration:underline}
