:root{--bg:#f8f9fa;--surface:#fff;--surface-2:#f8f9fa;--line:#f3f4f6;--line-strong:#e5e7eb;--fg:#1a1a2e;--muted:#6c757d;--faint:#9ca3af;--primary:#1a1a2e;--primary-fg:#fff;--accent:#e94560;--accent-soft:#fff5f5;--radar:#0f766e;--success:#16a34a;--warning:#d97706;--danger:#dc2626;--health-healthy:#16a34a;--health-normal:#9ca3af;--health-watch:#d97706;--health-retire:#dc2626;--tier1-bg:#1a1a2e;--tier1-fg:#fff;--tier15-bg:#0f3460;--tier15-fg:#fff;--tier2-bg:#e5e7eb;--tier2-fg:#374151;--tier3-bg:#f3f4f6;--tier3-fg:#6b7280;--shadow-card:0 2px 8px #00000014;--scrollbar:#d1d5db}:root[data-theme=dark]{--bg:#070b14;--surface:#0d1424;--surface-2:#111b2e;--line:#94a3b824;--line-strong:#94a3b83d;--fg:#e6edf3;--muted:#94a3b8;--faint:#64748b;--primary:#22d3ee;--primary-fg:#06121e;--accent:#ff5c7a;--accent-soft:#ff5c7a1a;--radar:#2dd4bf;--success:#34d399;--warning:#fbbf24;--danger:#f87171;--health-healthy:#34d399;--health-normal:#64748b;--health-watch:#fbbf24;--health-retire:#f87171;--tier1-bg:#164e63;--tier1-fg:#a5f3fc;--tier15-bg:#1e3a5f;--tier15-fg:#bfdbfe;--tier2-bg:#1f2a3d;--tier2-fg:#94a3b8;--tier3-bg:#16202f;--tier3-fg:#64748b;--shadow-card:0 2px 12px #00000080;--scrollbar:#334155}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background-color:var(--bg);color:var(--fg);font-family:Inter,Noto Sans SC,PingFang SC,system-ui,sans-serif;font-size:14px;line-height:1.6}a{color:inherit}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--scrollbar);border-radius:4px}.tnum{font-variant-numeric:tabular-nums}.app-shell{flex-direction:column;min-height:100vh;display:flex}.topbar{z-index:20;background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line-strong);align-items:center;gap:16px;padding:12px 20px;display:flex;position:sticky;top:0}.brand{align-items:center;gap:8px;font-size:15px;font-weight:700;display:flex}.brand .dot{background:var(--accent);border-radius:50%;width:10px;height:10px}.nav{flex-wrap:wrap;gap:4px;display:flex}.nav button{color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:8px;padding:6px 12px;font-family:inherit;font-size:13px}.nav button:hover{background:var(--surface-2);color:var(--fg)}.nav button.active{background:var(--primary);color:var(--primary-fg)}.topbar-right{align-items:center;gap:8px;margin-left:auto;display:flex}.container{width:100%;max-width:1080px;margin:0 auto;padding:24px 20px 64px}.page-head{margin-bottom:20px}.page-head h1{margin:0 0 6px;font-size:22px;font-weight:700}.page-head p{color:var(--muted);margin:0;font-size:13px}.card{background:var(--surface);border:1px solid var(--line-strong);box-shadow:var(--shadow-card);border-radius:12px;overflow:hidden}.card+.card{margin-top:16px}.card-head{border-bottom:1px solid var(--line-strong);flex-wrap:wrap;align-items:center;gap:10px;padding:12px 16px;display:flex}.card-head .count{color:var(--faint);margin-left:auto;font-size:12px}.divide>*+*{border-top:1px solid var(--line)}.badge{white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:1px 8px;font-size:11px;font-weight:600;line-height:1.6;display:inline-flex}.badge-tier1{background:var(--tier1-bg);color:var(--tier1-fg)}.badge-tier15{background:var(--tier15-bg);color:var(--tier15-fg)}.badge-tier2{background:var(--tier2-bg);color:var(--tier2-fg)}.badge-tier3{background:var(--tier3-bg);color:var(--tier3-fg)}.badge-soft{background:var(--surface-2);color:var(--muted);border:1px solid var(--line-strong)}.badge-accent{background:var(--accent-soft);color:var(--accent)}.badge-warn{background:color-mix(in srgb, var(--warning) 14%, transparent);color:var(--warning)}.badge-danger{background:color-mix(in srgb, var(--danger) 14%, transparent);color:var(--danger)}.badge-ok{background:color-mix(in srgb, var(--success) 14%, transparent);color:var(--success)}.origin-seed{background:var(--surface-2);color:var(--muted);border:1px solid var(--line-strong)}.origin-adopted{background:color-mix(in srgb, var(--radar) 16%, transparent);color:var(--radar)}.origin-override{background:var(--accent-soft);color:var(--accent)}.hdot{border-radius:50%;width:9px;height:9px;display:inline-block}.dot-healthy{background:var(--health-healthy)}.dot-normal{background:var(--health-normal)}.dot-watch{background:var(--health-watch)}.dot-retire{background:var(--health-retire)}.dot-empty{border:1px solid var(--faint);background:0 0}.txt-healthy{color:var(--health-healthy)}.txt-normal{color:var(--health-normal)}.txt-watch{color:var(--health-watch)}.txt-retire{color:var(--health-retire)}.row{flex-wrap:wrap;align-items:center;gap:16px;padding:12px 16px;display:flex}.row:hover{background:var(--surface-2)}.row-main{flex:240px;min-width:0}.row-name{flex-wrap:wrap;align-items:center;gap:8px;font-weight:600;display:flex}.row-sub{color:var(--muted);word-break:break-all;margin-top:2px;font-size:12px}.row-metrics{flex-wrap:wrap;align-items:center;gap:18px;display:flex}.metric{flex-direction:column;align-items:flex-end;min-width:56px;display:flex}.metric .v{font-size:13px;font-weight:700}.metric .l{color:var(--faint);font-size:10px}.row-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.muted{color:var(--muted)}.faint{color:var(--faint)}.link{color:var(--muted);text-decoration:none}.link:hover{color:var(--accent);text-decoration:underline}.field{flex-direction:column;gap:4px;margin-bottom:14px;display:flex}.field label{color:var(--muted);font-size:12px;font-weight:600}.field .hint{color:var(--faint);font-size:11px}input[type=text],input[type=number],input[type=password],textarea,select{width:100%;color:var(--fg);background:var(--surface);border:1px solid var(--line-strong);border-radius:8px;padding:8px 10px;font-family:inherit;font-size:13px;line-height:1.4}input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}textarea{resize:vertical;min-height:72px}.form-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:0 16px;display:grid}.btn{cursor:pointer;border:1px solid var(--line-strong);background:var(--surface);color:var(--fg);border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:8px 14px;font-family:inherit;font-size:13px;font-weight:600;line-height:1;transition:background .15s,opacity .15s;display:inline-flex}.btn:hover{background:var(--surface-2)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:var(--primary-fg);border-color:#0000}.btn-primary:hover{opacity:.9;background:var(--primary)}.btn-accent{background:var(--accent);color:#fff;border-color:#0000}.btn-accent:hover{opacity:.9;background:var(--accent)}.btn-danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 40%, transparent)}.btn-danger:hover{background:color-mix(in srgb, var(--danger) 10%, transparent)}.btn-sm{padding:5px 10px;font-size:12px}.switch{cursor:pointer;background:var(--faint);border:none;border-radius:999px;width:40px;height:22px;padding:0;transition:background .15s;position:relative}.switch[data-on=true]{background:var(--success)}.switch:disabled{opacity:.5;cursor:not-allowed}.switch .knob{background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .15s;position:absolute;top:2px;left:2px}.switch[data-on=true] .knob{transform:translate(18px)}.interval-input{width:74px}.banner{background:color-mix(in srgb, var(--warning) 12%, var(--surface));border:1px solid color-mix(in srgb, var(--warning) 40%, transparent);color:var(--fg);border-radius:10px;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 16px;font-size:13px;display:flex}.banner .btn{margin-left:auto}.note{background:var(--accent-soft);color:var(--accent);border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);border-radius:8px;padding:8px 10px;font-size:12px}.cost{margin:12px 0}.cost-head{color:var(--muted);justify-content:space-between;margin-bottom:4px;font-size:12px;display:flex}.cost-bar{background:var(--surface-2);border:1px solid var(--line-strong);border-radius:999px;height:8px;overflow:hidden}.cost-fill{background:var(--radar);height:100%;transition:width .3s}.cost-fill[data-over=true]{background:var(--danger)}.state{text-align:center;color:var(--muted);padding:40px 16px}.state.error{color:var(--danger)}.spinner{border:2px solid var(--line-strong);border-top-color:var(--accent);vertical-align:-3px;border-radius:50%;width:18px;height:18px;margin-right:6px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg, var(--surface-2), var(--line), var(--surface-2));background-size:200% 100%;border-radius:8px;height:56px;margin:8px 0;animation:1.4s ease-in-out infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){.spinner,.skeleton{animation:none}}.table-wrap{overflow-x:auto}table.audit{border-collapse:collapse;width:100%;font-size:13px}table.audit th,table.audit td{text-align:left;white-space:nowrap;padding:8px 12px}table.audit th{color:var(--muted);border-bottom:1px solid var(--line-strong);font-size:12px;font-weight:600}table.audit td{border-bottom:1px solid var(--line)}table.audit tr:hover td{background:var(--surface-2)}.login-wrap{justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.login-card{width:100%;max-width:360px}.login-card .card{padding:28px 24px}.login-card h1{align-items:center;gap:8px;margin:0 0 4px;font-size:18px;display:flex}.login-card p{color:var(--muted);margin:0 0 20px;font-size:12px}.stack>*+*{margin-top:8px}.chips{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.chip{border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;align-items:center;gap:6px;padding:6px 12px;display:flex}.chip .n{font-weight:700}.section-title{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:20px 0 8px;font-size:13px;font-weight:700}.err-text{color:var(--danger);margin-top:6px;font-size:12px}.ok-text{color:var(--success);margin-top:6px;font-size:12px}
