:root{--primary:#1B4D3E;--primary-hover:#163F33;--primary-tint:#E8F0ED;--primary-accent:#2E7D5B;--bg:#F8F9FA;--surface:#FFFFFF;--text:#1F2329;--text-secondary:#646A73;--text-muted:#9CA3AF;--border:#E5E7EB;--border-strong:#D1D5DB;--success:#1F7A4D;--warning:#B45309;--error:#B42318;--info:#175CD3;--error-tint:#FDF1F0;--warning-tint:#FCF4E8;--info-tint:#EFF4FC;--font:"IBM Plex Sans",-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--font-mono:"IBM Plex Mono","SF Mono",Consolas,monospace;--radius:8px;--radius-sm:6px;--shadow:0 1px 2px rgba(16,24,40,.05)}*{margin:0;padding:0;box-sizing:border-box}html{font-size:14px}body{font-family:var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}button{font-family:inherit;cursor:pointer}::selection{background:var(--primary-tint);color:var(--primary)}.app{display:grid;grid-template-rows:56px 1fr;grid-template-columns:240px 1fr;height:100vh}.app.nav-collapsed{grid-template-columns:48px 1fr}.topbar{grid-column:1/3;display:flex;align-items:center;background:var(--surface);border-bottom:1px solid var(--border);padding:0 16px;gap:16px;z-index:20}.sidebar{grid-row:2;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto}.main{grid-row:2;overflow-y:auto;position:relative}.logo{display:flex;align-items:center;gap:9px;padding-right:4px}.logo-mark{width:26px;height:26px;border-radius:7px;background:var(--primary);display:grid;place-items:center;flex:none}.logo-mark svg{display:block}.logo-name{font-weight:600;font-size:15px;letter-spacing:.2px}.logo-name span{color:var(--primary-accent)}.topbar-divider{width:1px;height:22px;background:var(--border)}.ws-switch{display:flex;align-items:center;gap:7px;border:1px solid transparent;background:none;border-radius:var(--radius-sm);padding:5px 10px;font-size:13px;color:var(--text);transition:.15s;white-space:nowrap;flex:none}.ws-switch:hover{background:var(--bg);border-color:var(--border)}.ws-switch .caret{color:var(--text-muted);font-size:10px}.search{flex:1;min-width:0;max-width:420px;display:flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 10px;color:var(--text-muted);font-size:13px;transition:.15s;cursor:text;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search kbd{flex:none}.search:hover{border-color:var(--border-strong)}.search kbd{margin-left:auto;font-family:var(--font-mono);font-size:11px;background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:1px 5px;color:var(--text-muted)}.topbar-right{margin-left:auto;display:flex;align-items:center;gap:18px}.res-stats{display:flex;align-items:center;gap:18px}.res-item{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 2px;border-radius:6px;border:none;background:none}.res-item:hover .res-label{color:var(--text)}.res-label{font-size:12px;color:var(--text-secondary);transition:.15s}.res-bar{width:52px;height:5px;border-radius:3px;background:#edeff2;overflow:hidden}.res-bar i{display:block;height:100%;border-radius:3px;background:var(--primary-accent)}.res-bar.warn i{background:var(--warning)}.res-bar.error i{background:var(--error)}.res-pct{font-family:var(--font-mono);font-size:11.5px;color:var(--text-secondary);min-width:30px}.res-credit{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-secondary);cursor:pointer;border:none;background:none}.res-credit b{font-family:var(--font-mono);font-weight:500;color:var(--text)}.res-credit .hex{color:var(--primary-accent);font-size:13px}.avatar{width:30px;height:30px;border-radius:50%;background:var(--primary);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:600;cursor:pointer;letter-spacing:.5px}.nav{padding:12px 8px;flex:1}.nav-group{margin-bottom:2px}.nav-item{display:flex;align-items:center;gap:10px;width:100%;border:none;background:none;text-align:left;padding:7px 10px;border-radius:var(--radius-sm);font-size:13.5px;color:var(--text);position:relative;transition:background .15s}.nav-item:hover{background:var(--bg)}.nav-item .ico{width:17px;height:17px;flex:none;color:var(--text-secondary);display:grid;place-items:center}.nav-item .caret{margin-left:auto;color:var(--text-muted);font-size:9px;transition:transform .2s}.nav-group.open>.nav-item .caret{transform:rotate(90deg)}.nav-item.active{background:var(--primary-tint);color:var(--primary);font-weight:500}.nav-item.active .ico{color:var(--primary)}.nav-item.active:before{content:"";position:absolute;left:-8px;top:6px;bottom:6px;width:3px;border-radius:0 2px 2px 0;background:var(--primary)}.nav-sub{display:none;padding:2px 0 4px}.nav-group.open .nav-sub{display:block}.nav-sub .nav-item{padding-left:37px;font-size:13px;color:var(--text-secondary)}.nav-sub .nav-item:hover{color:var(--text)}.nav-sub .nav-item.active{color:var(--primary)}.nav-tag{margin-left:auto;font-size:10px;padding:1px 6px;border-radius:99px;background:var(--bg);border:1px solid var(--border);color:var(--text-muted);font-weight:400}.nav-badge{margin-left:auto;min-width:16px;height:16px;border-radius:99px;background:var(--error);color:#fff;font-size:10.5px;display:grid;place-items:center;padding:0 5px;font-weight:500}.nav-item[disabled]{opacity:.45;cursor:not-allowed}.sidebar-foot{border-top:1px solid var(--border);padding:10px 12px}.account{display:flex;align-items:center;gap:10px;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer;transition:.15s;border:none;background:none;width:100%}.account:hover{background:var(--bg)}.account .avatar{width:28px;height:28px;font-size:11px}.account-info{line-height:1.25;text-align:left}.account-info b{display:block;font-size:12.5px;font-weight:500}.account-info span{font-size:11.5px;color:var(--text-muted);font-family:var(--font-mono)}.sidebar.collapsed{width:48px}.sidebar.collapsed .nav-item span:not(.ico),.sidebar.collapsed .account-info,.sidebar.collapsed .nav-tag,.sidebar.collapsed .nav-badge,.sidebar.collapsed .caret{display:none}.sidebar.collapsed .nav-sub{display:none!important}.view{max-width:1280px;margin:0 auto;padding:28px 32px 64px}.view>*{animation:rise .35s cubic-bezier(.22,.9,.36,1) both}.view>*:nth-child(2){animation-delay:.04s}.view>*:nth-child(3){animation-delay:.08s}.view>*:nth-child(4){animation-delay:.12s}.view>*:nth-child(5){animation-delay:.16s}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.crumbs{font-size:12.5px;color:var(--text-muted);margin-bottom:10px;display:flex;gap:6px;align-items:center}.crumbs a{color:var(--text-secondary);text-decoration:none;cursor:pointer}.crumbs a:hover{color:var(--primary)}.page-head{display:flex;align-items:flex-start;gap:14px;margin-bottom:24px}.page-title{font-size:20px;font-weight:600;letter-spacing:.1px}.page-sub{font-size:13px;color:var(--text-secondary);margin-top:4px}.page-actions{margin-left:auto;display:flex;gap:8px;align-items:center}.btn{display:inline-flex;align-items:center;gap:6px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;padding:7px 14px;border:1px solid transparent;transition:.15s;line-height:1.4}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-ghost{background:var(--surface);border-color:var(--border);color:var(--text)}.btn-ghost:hover:not(:disabled){border-color:var(--border-strong);background:var(--bg)}.btn-danger{background:var(--surface);border-color:var(--border);color:var(--error)}.btn-danger:hover:not(:disabled){background:var(--error-tint);border-color:#ebc8c4}.btn-sm{padding:4px 10px;font-size:12.5px}.btn-spin{width:13px;height:13px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .7s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.card-head{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}.card-head h3{font-size:15px;font-weight:600}.card-head .hint{font-size:12px;color:var(--text-muted)}.card-body{padding:18px}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none}.dot.run{background:var(--success);box-shadow:0 0 0 3px #1f7a4d24}.dot.idle{background:var(--text-muted)}.dot.err{background:var(--error);box-shadow:0 0 0 3px #b423181f}.dot.deploy{background:var(--warning);box-shadow:0 0 0 3px #b4530924}.status{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--text-secondary)}.badge{display:inline-flex;align-items:center;font-size:11.5px;padding:2px 8px;border-radius:99px;font-weight:500;line-height:1.5}.badge.private{background:var(--bg);color:var(--text-secondary);border:1px solid var(--border)}.badge.org{background:var(--info-tint);color:var(--info)}.badge.public{background:var(--primary-tint);color:var(--primary)}.mono{font-family:var(--font-mono);font-size:12.5px}.copy-chip{display:inline-flex;align-items:center;gap:6px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:3px 8px;font-family:var(--font-mono);font-size:12px;color:var(--text-secondary);cursor:pointer;transition:.15s}.copy-chip:hover{border-color:var(--primary-accent);color:var(--primary)}.copy-chip svg{opacity:.55}.alert{display:flex;align-items:center;gap:12px;border-radius:var(--radius);padding:12px 16px;margin-bottom:20px;font-size:13px;border:1px solid}.alert.error{background:var(--error-tint);border-color:#f1d2ce}.alert.warning{background:var(--warning-tint);border-color:#f1dfc0}.alert.info{background:var(--info-tint);border-color:#cbddf6}.alert .dot{margin-top:0}.alert b{font-weight:600}.alert a{margin-left:auto;font-weight:500;text-decoration:none;white-space:nowrap;cursor:pointer;color:inherit}.alert a:hover{text-decoration:underline}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow);transition:.15s}.stat-card:hover{border-color:var(--border-strong)}.stat-label{font-size:12px;color:var(--text-secondary);display:flex;align-items:center;gap:6px}.stat-num{font-size:28px;font-weight:600;letter-spacing:-.5px;margin-top:8px;font-variant-numeric:tabular-nums}.stat-num small{font-size:14px;font-weight:500;color:var(--text-secondary);margin-left:2px}.stat-delta{font-size:12px;margin-top:6px;font-family:var(--font-mono)}.stat-delta.up{color:var(--success)}.stat-delta.flat{color:var(--text-muted)}.stat-delta.warn{color:var(--warning)}.two-col{display:grid;grid-template-columns:1fr 340px;gap:14px;align-items:start}.chart-wrap{padding:6px 10px 2px}.chart-legend{display:flex;gap:16px;padding:0 18px 8px;font-size:12px;color:var(--text-secondary)}.chart-legend i{width:10px;height:3px;border-radius:2px;display:inline-block;margin-right:6px;vertical-align:middle}.recent-list{display:flex;flex-direction:column}.recent-item{display:flex;align-items:center;gap:12px;padding:11px 18px;border-bottom:1px solid var(--border);transition:.15s;cursor:pointer}.recent-item:last-child{border-bottom:none}.recent-item:hover{background:var(--bg)}.app-ico{width:34px;height:34px;border-radius:8px;display:grid;place-items:center;font-size:17px;flex:none;background:var(--primary-tint)}.recent-item .meta{line-height:1.3;flex:1;min-width:0}.recent-item .meta b{font-size:13px;font-weight:500;display:block}.recent-item .meta span{font-size:11.5px;color:var(--text-muted)}.recent-item .go{color:var(--text-muted);opacity:0;transition:.15s;font-size:13px}.recent-item:hover .go{opacity:1;color:var(--primary)}.app-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.app-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);transition:.18s;cursor:pointer;position:relative}.app-card:hover{border-color:var(--primary-accent);transform:translateY(-1px);box-shadow:0 4px 12px #10182812}.app-card.disabled{cursor:not-allowed}.app-card.disabled:hover{border-color:var(--border);transform:none;box-shadow:var(--shadow)}.app-card-top{display:flex;align-items:flex-start;gap:12px}.app-card .app-ico{width:40px;height:40px;font-size:20px;border-radius:10px}.app-card h4{font-size:14.5px;font-weight:600}.app-card .dev{font-size:12px;color:var(--text-muted);margin-top:2px}.kebab{margin-left:auto;border:none;background:none;color:var(--text-muted);font-size:16px;padding:2px 6px;border-radius:5px;letter-spacing:1px}.kebab:hover{background:var(--bg);color:var(--text)}.app-card-foot{display:flex;align-items:center;margin-top:16px;font-size:12px;color:var(--text-muted)}.app-card-foot .status{font-size:12px}.app-card-foot time{margin-left:auto}.corner-flag{position:absolute;top:-7px;right:-7px;background:var(--error);color:#fff;font-size:10.5px;border-radius:99px;padding:2px 8px;font-weight:500;box-shadow:0 2px 6px #b423184d}.conflict-note{margin-top:10px;background:var(--error-tint);color:var(--error);font-size:12px;border-radius:6px;padding:6px 10px}.table{width:100%;border-collapse:collapse}.table th{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--text-muted);font-weight:500;text-align:left;padding:10px 16px;border-bottom:1px solid var(--border);background:#fbfcfc}.table td{padding:0 16px;height:44px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:middle}.table tbody tr{transition:background .12s;cursor:pointer}.table tbody tr:hover{background:var(--bg)}.table tbody tr:last-child td{border-bottom:none}.table .num{font-family:var(--font-mono);font-size:12.5px;font-variant-numeric:tabular-nums}.spark{vertical-align:middle}.detail-head{display:flex;align-items:center;gap:14px;margin-bottom:6px}.detail-head .app-ico{width:44px;height:44px;font-size:22px;border-radius:10px}.detail-title-row{display:flex;align-items:center;gap:12px}.detail-title-row h2{font-size:20px;font-weight:600}.url-row{margin-top:5px;display:flex;gap:8px;align-items:center}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin:18px 0 22px}.tab{border:none;background:none;padding:9px 14px;font-size:13.5px;color:var(--text-secondary);border-bottom:2px solid transparent;margin-bottom:-1px;transition:.15s;border-radius:6px 6px 0 0}.tab:hover{color:var(--text);background:var(--bg)}.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:500}.tabpane{animation:rise .3s cubic-bezier(.22,.9,.36,1) both}.mini-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:14px}.mini-stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:13px 16px}.mini-stat .k{font-size:11.5px;color:var(--text-muted)}.mini-stat .v{font-size:19px;font-weight:600;margin-top:4px;font-variant-numeric:tabular-nums}.mini-stat .v small{font-size:12px;color:var(--text-secondary);font-weight:400}.ver-item{display:flex;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid var(--border);font-size:13px}.ver-item:last-child{border-bottom:none}.ver-item .mono{font-weight:500;color:var(--text)}.ver-cur{font-size:11px;background:var(--primary-tint);color:var(--primary);padding:1px 8px;border-radius:99px;font-weight:500}.ver-item time{color:var(--text-muted);font-size:12px;margin-left:auto}.mcp-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.mcp-chip{font-family:var(--font-mono);font-size:12px;background:var(--bg);border:1px solid var(--border);padding:3px 10px;border-radius:99px;color:var(--text-secondary)}.kv{display:flex;padding:9px 0;font-size:13px;border-bottom:1px dashed var(--border)}.kv:last-child{border-bottom:none}.kv .k{width:110px;color:var(--text-muted);flex:none}.log-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:12px}.toggle{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--text-secondary);cursor:pointer}.toggle .tk{width:34px;height:19px;border-radius:99px;background:var(--border-strong);position:relative;transition:.2s}.toggle .tk:after{content:"";position:absolute;width:15px;height:15px;border-radius:50%;background:#fff;top:2px;left:2px;transition:.2s;box-shadow:0 1px 2px #0003}.toggle input{display:none}.toggle input:checked+.tk{background:var(--primary)}.toggle input:checked+.tk:after{left:17px}.logbox{background:#0d1117;border-radius:var(--radius);padding:16px 18px;font-family:var(--font-mono);font-size:12.5px;line-height:1.85;color:#c9d1d9;overflow-x:auto;max-height:420px;overflow-y:auto}.logbox .t{color:#6e7681}.logbox .ok{color:#3fb27f}.logbox .warn{color:#d29922}.logbox .err{color:#f85149}.logbox .dim{color:#8b949e}.form-row{display:flex;align-items:center;padding:15px 0;border-bottom:1px solid var(--border);gap:20px}.form-row:last-of-type{border-bottom:none}.form-label{width:230px;flex:none}.form-label b{display:block;font-size:13.5px;font-weight:500}.form-label span{font-size:12px;color:var(--text-muted);display:block;margin-top:2px;line-height:1.5}.input{height:34px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:0 10px;font-size:13px;font-family:var(--font-mono);color:var(--text);width:140px;outline:none;transition:.15s;background:var(--surface)}.input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1b4d3e1f}.input.wide{width:100%}.input.err{border-color:var(--error)}.field-err{font-size:12px;color:var(--error);margin-top:4px}.unit{font-size:12.5px;color:var(--text-muted);margin-left:-12px}.env-val{color:var(--text-muted);letter-spacing:2px}.cname-box{background:var(--bg);border:1px dashed var(--border-strong);border-radius:var(--radius);padding:14px 16px;font-family:var(--font-mono);font-size:12.5px;color:var(--text-secondary);margin-top:12px;line-height:2}.cname-box b{color:var(--text);font-weight:500}.vis-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.vis-card{border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;cursor:pointer;transition:.15s;position:relative;background:none;text-align:left;width:100%}.vis-card:hover{border-color:var(--border-strong)}.vis-card.sel{border-color:var(--primary);background:var(--primary-tint)}.vis-card.sel:after{content:"✓";position:absolute;top:10px;right:12px;color:var(--primary);font-weight:600;font-size:13px}.vis-card b{font-size:13.5px;font-weight:600;display:block}.vis-card span{font-size:12px;color:var(--text-secondary);margin-top:4px;display:block;line-height:1.5}.vis-card.sel span{color:var(--primary)}.check-row{display:flex;align-items:center;gap:10px;padding:10px 0;font-size:13.5px}.check-row input{accent-color:var(--primary);width:15px;height:15px}.check-row span{color:var(--text-muted);font-size:12.5px}.danger-zone{border-color:#f1d2ce}.danger-zone .card-head{border-bottom-color:#f1d2ce}.danger-zone .card-head h3{color:var(--error)}.empty{display:flex;flex-direction:column;align-items:center;padding:80px 0;text-align:center}.empty svg{margin-bottom:18px}.empty h3{font-size:15px;font-weight:600}.empty p{font-size:13px;color:var(--text-muted);margin:6px 0 18px;max-width:340px;line-height:1.6}.toast-stack{position:fixed;top:68px;right:20px;z-index:99;display:flex;flex-direction:column;gap:8px;align-items:flex-end}.toast{background:var(--text);color:#fff;font-size:13px;padding:10px 16px;border-radius:var(--radius-sm);box-shadow:0 8px 24px #1018282e;opacity:0;transform:translateY(-6px);transition:.25s;display:flex;align-items:center;gap:10px;max-width:360px}.toast.show{opacity:1;transform:none}.toast.error{background:var(--error)}.toast a{color:#fff;text-decoration:underline;white-space:nowrap;cursor:pointer}.toast .x{margin-left:6px;opacity:.7;cursor:pointer;border:none;background:none;color:inherit;font-size:14px}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#10182873;display:flex;align-items:center;justify-content:center;z-index:200}.modal{width:480px;max-width:calc(100vw - 32px);background:var(--surface);border-radius:var(--radius);box-shadow:0 20px 50px #10182840}.modal-head{padding:16px 20px;border-bottom:1px solid var(--border);font-size:15px;font-weight:600}.modal-body{padding:20px}.modal-foot{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}.totp-boxes{display:flex;gap:8px;justify-content:center;margin:18px 0}.totp-boxes input{width:38px;height:46px;text-align:center;font-size:19px;font-family:var(--font-mono);border:1px solid var(--border-strong);border-radius:var(--radius-sm);outline:none}.totp-boxes input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1b4d3e1f}
