:root{--bg:#f4f6f8;--panel:#fff;--ink:#0f1c2e;--ink2:#42546b;--ink3:#7688a0;--line:#e4e9ef;--line2:#eef2f6;--sidebar:#0f1c2e;--sidebar2:#182a41;--sidebarink:#aebdd0;--accent:#1f6feb;--accent-soft:#e8f0fe;--teal:#0d9488;--teal-soft:#d9f2ee;--crit:#c0392b;--crit-soft:#fce8e6;--warn:#b76e00;--warn-soft:#fdf0d9;--ok:#137a4b;--ok-soft:#e0f3e9;--mono:"SF Mono",ui-monospace,"Cascadia Code",Consolas,monospace;--src:#64748b;--src-soft:#f1f4f8;--ai:#6b3fb5;--ai-soft:#efe8fb;--shadow:0 1px 2px rgba(15,28,46,.06),0 6px 20px rgba(15,28,46,.06);--radius:12px}*{box-sizing:border-box}body,html{margin:0;height:100%}body{background:var(--bg);color:var(--ink);font-size:14px;line-height:1.45;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit}.app{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.side{background:var(--sidebar);color:var(--sidebarink);display:flex;flex-direction:column;padding:18px 14px;gap:2px;position:-webkit-sticky;position:sticky;top:0;height:100vh}.brand{gap:11px;padding:6px 8px 14px}.brand,.brand .mark{display:flex;align-items:center}.brand .mark{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,#1f6feb,#0d9488);justify-content:center;font-weight:700}.brand .mark,.brand b{color:#fff;font-size:14px}.brand b{display:block;line-height:1.2}.brand span{font-size:11px;color:#6f83a0}.rollout{margin:2px 8px 12px;padding:8px 10px;border-radius:9px;background:rgba(183,110,0,.16);border:1px solid rgba(183,110,0,.35);color:#f0c07a;font-size:11px;font-weight:600;display:flex;align-items:center;gap:7px}.rollout .d{width:7px;height:7px;border-radius:50%;background:#f0a53c;flex:none}.navsec{font-size:10px;text-transform:uppercase;letter-spacing:.09em;color:#5f728c;padding:12px 10px 4px;font-weight:700}.nav a{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:8px;color:var(--sidebarink);cursor:pointer;font-size:13px;font-weight:500;transition:.12s}.nav a:hover{background:var(--sidebar2);color:#fff}.nav a.on{background:var(--accent);color:#fff}.nav a .ic{width:17px;text-align:center}.nav a .ct{margin-left:auto;font-size:11px;background:hsla(0,0%,100%,.14);padding:1px 7px;border-radius:20px;min-width:20px;text-align:center}.nav a .ct.crit{background:var(--crit);color:#fff}.side .foot{margin-top:auto;font-size:11px;color:#5f728c;padding:10px 8px 0;border-top:1px solid var(--sidebar2)}.side .foot b{color:#8ea3c2}.main{min-width:0}.top{position:-webkit-sticky;position:sticky;top:0;z-index:20;background:rgba(244,246,248,.86);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);padding:14px 26px;display:flex;align-items:center;gap:14px}.top h1{font-size:17px;margin:0;font-weight:650}.top .sub{font-size:12px;color:var(--ink3)}.spacer{flex:1 1}.pill{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--ink2);background:var(--panel);border:1px solid var(--line);padding:6px 11px;border-radius:20px}.dot{width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}.dot.off{background:var(--ink3);box-shadow:0 0 0 3px var(--src-soft)}.dot.warn{background:var(--warn);box-shadow:0 0 0 3px var(--warn-soft)}.wrap{padding:24px 26px 70px;max-width:1280px}h2.sec{font-size:13px;text-transform:uppercase;letter-spacing:.06em;margin:26px 2px 12px;font-weight:700}.muted,h2.sec{color:var(--ink3)}.mono{font-family:var(--mono)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.panelpad{padding:17px 18px}.panelpad h3{margin:0 0 13px;font-size:14px;font-weight:700;display:flex;gap:9px}.btn,.panelpad h3{align-items:center}.btn{display:inline-flex;gap:8px;border:1px solid var(--line);background:var(--panel);color:var(--ink);padding:9px 15px;border-radius:9px;font-size:13px;font-weight:600;cursor:pointer;transition:.12s;font-family:inherit;text-decoration:none}.btn:hover{border-color:#c7d2e0;background:#fafbfd}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:#175bd0}.btn.ghost{background:transparent;border-color:transparent;color:var(--accent)}.btn.sm{padding:6px 11px;font-size:12px}.btn.danger{color:var(--crit)}.btn:disabled{opacity:.5;cursor:default}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:3px 9px;border-radius:20px;white-space:nowrap}.badge .d{width:6px;height:6px;border-radius:50%}.b-crit{background:var(--crit-soft);color:var(--crit)}.b-warn{background:var(--warn-soft);color:var(--warn)}.b-ok{background:var(--ok-soft);color:var(--ok)}.b-mon{background:var(--accent-soft);color:var(--accent)}.b-neu{background:var(--src-soft);color:var(--src)}.b-ai{background:var(--ai-soft);color:var(--ai)}.tag{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;border-radius:5px}.tag-src{background:var(--src-soft);color:var(--src)}.tag-ai{background:var(--ai-soft);color:var(--ai)}.kpis{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:14px;gap:14px}.kpi{padding:16px 17px;position:relative;overflow:hidden}.kpi.click{cursor:pointer}.kpi.click:hover{border-color:#cdd8e6}.kpi .lab{font-size:12px;color:var(--ink3);font-weight:600}.kpi .num{font-size:30px;font-weight:700;letter-spacing:-.02em;margin-top:7px;line-height:1}.kpi .cap{font-size:11.5px;color:var(--ink3);margin-top:6px}.kpi .bar{position:absolute;left:0;top:0;bottom:0;width:4px}.kpi.k-crit .num{color:var(--crit)}.kpi.k-crit .bar{background:var(--crit)}.kpi.k-warn .num{color:var(--warn)}.kpi.k-warn .bar{background:var(--warn)}.kpi.k-ai .num{color:var(--ai)}.kpi.k-ai .bar{background:var(--ai)}.kpi.k-ok .num{color:var(--ok)}.kpi.k-ok .bar{background:var(--ok)}.kpi.k-mon .num{color:var(--accent)}.kpi.k-mon .bar{background:var(--accent)}.tablewrap{overflow:auto;border-radius:var(--radius)}table{width:100%;border-collapse:collapse;font-size:13px;background:var(--panel)}thead th{position:-webkit-sticky;position:sticky;top:0;background:#f8fafc;text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink3);font-weight:700;padding:11px 13px;border-bottom:1px solid var(--line);white-space:nowrap;z-index:2}tbody td{padding:11px 13px;border-bottom:1px solid var(--line2);vertical-align:middle}tbody tr.click{cursor:pointer}tbody tr.click:hover{background:#f7faff}.rowitem{font-weight:600;max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.divcol{border-left:2px solid var(--ai)!important}td.aicol,th.aicol{background:#faf8ff}.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;align-items:center}.chip{font-size:12.5px;font-weight:600;padding:7px 13px;border-radius:20px;border:1px solid var(--line);background:var(--panel);cursor:pointer;color:var(--ink2)}.chip:hover{border-color:#c7d2e0}.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}.searchbox{margin-left:auto;position:relative}.searchbox input{border:1px solid var(--line);border-radius:9px;padding:8px 12px 8px 32px;font-size:13px;width:230px;font-family:inherit;background:var(--panel)}.searchbox span{position:absolute;left:11px;top:8px;color:var(--ink3)}.drop{border:2px dashed #c7d2e0;border-radius:14px;padding:40px 24px;text-align:center;background:var(--panel);transition:.15s;cursor:pointer}.drop.over,.drop:hover{border-color:var(--accent);background:#f7faff}.drop .big{font-size:34px}.drop h3{margin:12px 0 4px;font-size:16px}.toggle{position:relative;width:42px;height:24px;border-radius:20px;background:var(--line);cursor:pointer;transition:.15s;flex:none;border:none}.toggle.on{background:var(--ok)}.toggle i{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:.15s;box-shadow:0 1px 2px rgba(0,0,0,.2)}.toggle.on i{left:21px}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field label{font-size:12px;font-weight:600;color:var(--ink2)}.field input,.field select,.field textarea{border:1px solid var(--line);border-radius:9px;padding:9px 12px;font-size:13px;font-family:inherit;width:100%;background:#fff}.field textarea{resize:vertical;min-height:90px;line-height:1.5}.row{gap:10px;align-items:center}.note,.row{display:flex}.note{background:var(--warn-soft);border:1px solid #f4dfb8;color:#7a4d00;border-radius:9px;padding:11px 13px;font-size:12.5px;gap:9px}.note.info{background:var(--accent-soft);border-color:#c9def9;color:#1a4c9e}.note.ok{background:var(--ok-soft);border-color:#bfe5cf;color:#0e5f3b}.note.crit{background:var(--crit-soft);border-color:#f2c7c1;color:#7a2b22}.empty{text-align:center;padding:60px 20px;color:var(--ink3)}.grid2{display:grid;grid-template-columns:1fr 1fr;grid-gap:14px;gap:14px}.reasonlist{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.reasonlist li{display:flex;gap:9px;align-items:flex-start;font-size:13px}.reasonlist .ic{width:18px;flex:none;text-align:center;margin-top:1px}.log{font-family:var(--mono);font-size:12px;line-height:1.5}.log .e{display:grid;grid-template-columns:74px 1fr;grid-gap:14px;gap:14px;padding:7px 0;border-bottom:1px solid var(--line2)}.log .e .t{color:var(--ink3)}.log .e.warn .m{color:var(--warn)}.log .e.error .m{color:var(--crit)}.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:12px 20px;border-radius:11px;font-size:13px;font-weight:600;box-shadow:0 12px 40px rgba(15,28,46,.3);z-index:100;opacity:0;transition:.22s;pointer-events:none}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}.scrim{position:fixed;inset:0;background:rgba(15,28,46,.42);z-index:60;opacity:0;pointer-events:none;transition:.2s}.scrim.show{opacity:1;pointer-events:auto}.drawer{position:fixed;top:0;right:0;height:100vh;width:min(860px,94vw);background:var(--bg);z-index:70;box-shadow:-16px 0 50px rgba(15,28,46,.22);transform:translateX(102%);transition:transform .26s cubic-bezier(.4,0,.1,1);display:flex;flex-direction:column;overflow:auto}.drawer.show{transform:none}.dhead{background:var(--panel);border-bottom:1px solid var(--line);padding:16px 22px;display:flex;align-items:flex-start;gap:14px;position:-webkit-sticky;position:sticky;top:0}.dhead .x{margin-left:auto;font-size:20px;color:var(--ink3);cursor:pointer;border:none;background:none}.spin{width:15px;height:15px;border:2px solid hsla(0,0%,100%,.4);border-top-color:#fff;border-radius:50%;display:inline-block;animation:sp .7s linear infinite}@keyframes sp{to{transform:rotate(1turn)}}@media(max-width:820px){.app{grid-template-columns:1fr}.side{display:none}.kpis{grid-template-columns:repeat(2,1fr)}.grid2{grid-template-columns:1fr}}