:root { --bg:#f4f6f8; --card:#fff; --ink:#1b2430; --mut:#667085; --line:#e1e5ea; --acc:#1f6feb; --ok:#1a7f37; --warn:#b54708; --bad:#c62828;
  --soft:#fafbfc; --bd:#c5ccd6; --hover:#f0f3f7; --pre:#f1f3f6; --nav:#17202b; --navon:#243244; --chip:#e8eef7; --chipink:#234;
  --okbg:#dcf3e3; --warnbg:#fdebd0; --badbg:#fde0e0; --bannerbg:#fff4e5; --bannerbd:#f5c98a; --bannerink:#7a4a00; --notset:#fff8ee;
  --shadow:0 1px 2px rgba(16,24,40,.05),0 4px 14px rgba(16,24,40,.06); --mark:#5b5bd6; }
:root[data-theme="dark"] { --bg:#0b111b; --card:#121b29; --ink:#e4e9f0; --mut:#8795a8; --line:#22304a; --acc:#4f8cff; --ok:#34c88a; --warn:#f5a524; --bad:#ff6b6b;
  --soft:#16202f; --bd:#2c3b55; --hover:#1a2638; --pre:#0e1623; --nav:#0a0f18; --navon:#172234; --chip:#1b2a42; --chipink:#cfe0ff;
  --okbg:#10311f; --warnbg:#38280d; --badbg:#3a1618; --bannerbg:#33280f; --bannerbd:#6b5420; --bannerink:#f3d79a; --notset:#2f2410;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 6px 18px rgba(0,0,0,.35); --mark:#9a9bff; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --bg:#0b111b; --card:#121b29; --ink:#e4e9f0; --mut:#8795a8; --line:#22304a; --acc:#4f8cff; --ok:#34c88a; --warn:#f5a524; --bad:#ff6b6b;
  --soft:#16202f; --bd:#2c3b55; --hover:#1a2638; --pre:#0e1623; --nav:#0a0f18; --navon:#172234; --chip:#1b2a42; --chipink:#cfe0ff;
  --okbg:#10311f; --warnbg:#38280d; --badbg:#3a1618; --bannerbg:#33280f; --bannerbd:#6b5420; --bannerink:#f3d79a; --notset:#2f2410;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 6px 18px rgba(0,0,0,.35); --mark:#9a9bff; } }
* { box-sizing: border-box; }
body { margin:0; font:14px/1.45 "Segoe UI", system-ui, sans-serif; background:var(--bg); color:var(--ink); }
.layout { display:grid; grid-template-columns: 210px minmax(0,1fr); min-height:100vh; }
nav { background:var(--nav); color:#cfd8e3; padding:14px 0; }
nav h1 { font-size:16px; margin:0 16px 12px; color:#fff; }
nav a { display:block; padding:8px 16px; color:#cfd8e3; text-decoration:none; cursor:pointer; }
nav a.on, nav a:hover { background:var(--navon); color:#fff; }
main { padding:0 20px 30px; min-width:0; }
.top { display:flex; gap:12px; align-items:center; flex-wrap:wrap; padding:10px 0; border-bottom:1px solid var(--line); margin-bottom:14px; }
.badge { display:inline-block; padding:2px 9px; border-radius:10px; font-size:12px; font-weight:600; background:var(--chip); color:var(--chipink); }
.badge.ok { background:var(--okbg); color:var(--ok); } .badge.warn { background:var(--warnbg); color:var(--warn); } .badge.bad { background:var(--badbg); color:var(--bad); }
.card { background:var(--card); border:1px solid var(--line); border-radius:8px; padding:14px 16px; margin-bottom:14px; }
.card h2 { margin:0 0 10px; font-size:15px; }
.grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,210px),1fr)); gap:12px; }
.grid2 { display:grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,260px),1fr)); gap:10px 16px; }
.tablewrap { max-width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; }
table { border-collapse:collapse; width:100%; font-size:13px; }
th, td { text-align:left; padding:5px 8px; border-bottom:1px solid var(--line); vertical-align:top; }
th { color:var(--mut); font-weight:600; background:var(--soft); }
td.num, th.num { text-align:right; font-variant-numeric: tabular-nums; }
button { font:inherit; padding:6px 12px; border:1px solid var(--bd); background:var(--card); color:var(--ink); border-radius:6px; cursor:pointer; }
button:hover { background:var(--hover); } button.pri { background:var(--acc); color:#fff; border-color:var(--acc); }
button.bad { background:var(--bad); color:#fff; border-color:var(--bad); } button.sm { padding:2px 8px; font-size:12px; }
input, select, textarea { font:inherit; padding:6px 8px; border:1px solid var(--bd); border-radius:6px; width:100%; background:var(--card); color:var(--ink); }
input.notset, select.notset { border-color:var(--warn); background:var(--notset); }
label { display:block; font-size:12px; color:var(--mut); margin-bottom:2px; }
label.check { display:flex; align-items:center; gap:8px; margin:8px 0; color:var(--ink); font-size:13px; }
label.check input { width:auto; flex:none; }
button:disabled { opacity:.45; cursor:not-allowed; }
summary { cursor:pointer; padding:8px 0; font-weight:600; }
.row { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin:6px 0; }
.msg { padding:8px 12px; border-radius:6px; margin:8px 0; background:var(--chip); color:var(--ink); } .msg.err { background:var(--badbg); color:var(--bad); } .msg.okk { background:var(--okbg); color:var(--ok); } .msg.warn { background:var(--warnbg); color:var(--warn); }
.auth { max-width:380px; margin:8vh auto; } .muted { color:var(--mut); } .small { font-size:12px; }
canvas { width:100%; height:300px; background:var(--card); border:1px solid var(--line); border-radius:6px; }
pre { background:var(--pre); padding:8px; border-radius:6px; overflow:auto; font-size:12px; margin:4px 0; }
.banner { background:var(--bannerbg); border:1px solid var(--bannerbd); color:var(--bannerink); padding:8px 12px; border-radius:6px; margin-bottom:12px; }
.pos { color:var(--ok); } .neg { color:var(--bad); }
.tabs { display:flex; gap:4px; margin-bottom:10px; } .tabs button.on { background:var(--acc); color:#fff; border-color:var(--acc); }

/* ---------- обзор платформы ---------- */
.off { display:none !important; }
.dhero { display:flex; justify-content:space-between; align-items:flex-end; gap:12px; flex-wrap:wrap; margin:4px 0 12px; }
.dh1 { margin:0 0 2px; font-size:22px; letter-spacing:-.01em; }
.kpis { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,150px),1fr)); gap:10px; margin-bottom:10px; }
button.kpi { text-align:left; padding:10px 14px; border-radius:12px; box-shadow:var(--shadow); border:1px solid var(--line); }
button.kpi.on { border-color:var(--acc); outline:2px solid var(--acc); outline-offset:-2px; }
.kpi .kv { display:block; font-size:26px; font-weight:700; line-height:1.1; font-variant-numeric:tabular-nums; }
.kpi .kl { display:block; font-size:12px; color:var(--mut); margin-top:2px; }
.dgrid { display:grid; grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr)); gap:14px; align-items:start; margin-bottom:16px; }
.dcard { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:12px 14px; box-shadow:var(--shadow); display:flex; flex-direction:column; gap:8px; min-width:0; }
.dhead { display:flex; justify-content:space-between; align-items:flex-start; gap:8px; }
.dtitle { margin:0; font-size:17px; line-height:1.25; overflow-wrap:anywhere; letter-spacing:-.01em; }
.dpills { display:flex; gap:4px; flex-wrap:wrap; justify-content:flex-end; }
.pill { flex:none; padding:2px 10px; border-radius:999px; font-size:12px; font-weight:600; background:var(--chip); color:var(--chipink); white-space:nowrap; }
.pill.ok { background:var(--okbg); color:var(--ok); } .pill.warn { background:var(--warnbg); color:var(--warn); }
.pill.bad { background:var(--badbg); color:var(--bad); } .pill.info { background:var(--chip); color:var(--acc); } .pill.mute { background:var(--soft); color:var(--mut); border:1px solid var(--line); }
.dtags { display:flex; gap:6px; flex-wrap:wrap; }
.tag { font-size:11px; padding:1px 8px; border-radius:6px; background:var(--soft); border:1px solid var(--line); color:var(--mut); }
.tag.strong { color:var(--ink); font-weight:700; } .tag.demo { color:var(--acc); border-color:var(--acc); }
.dchart { min-width:0; }
.dchart canvas { display:block; width:100%; max-width:100%; height:auto; aspect-ratio:640/300; border-radius:10px; border:1px solid var(--line); }
.dsrc { font-size:11px; margin-top:4px; padding-left:14px; position:relative; color:var(--mut); line-height:1.3; }
.dsrc::before { content:""; position:absolute; left:2px; top:4px; width:7px; height:7px; border-radius:50%; background:var(--mut); }
.dsrc.ok::before { background:var(--ok); } .dsrc.warn::before { background:var(--warn); } .dsrc.warn { color:var(--warn); }
.dmid { display:flex; justify-content:space-between; align-items:flex-end; gap:10px; flex-wrap:wrap; }
.pv { font-size:24px; font-weight:700; font-variant-numeric:tabular-nums; line-height:1.1; }
.dlevels { display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end; }
.lvl { font-size:12px; padding:3px 9px; border-radius:8px; background:var(--chip); color:var(--mark); font-weight:600; font-variant-numeric:tabular-nums; }
.lvl.none { color:var(--mut); font-weight:400; }
.dsay { display:flex; gap:10px; background:var(--soft); border:1px solid var(--line); border-radius:10px; padding:8px 10px; font-size:12.5px; line-height:1.4; }
.swatch { flex:none; width:4px; border-radius:3px; background:var(--mut); }
.swatch.ok { background:var(--ok); } .swatch.warn { background:var(--warn); } .swatch.bad { background:var(--bad); } .swatch.info { background:var(--acc); }
.stext p { margin:0 0 4px; } .stext p:last-child { margin:0; }
.stext .strong { font-weight:700; } .stext .muted { color:var(--mut); font-size:12px; }
.dwhy-box { border:1px solid var(--line); border-radius:10px; padding:0 10px; background:var(--card); font-size:12.5px; }
.dwhy-box summary { padding:6px 0; font-size:12.5px; color:var(--acc); }
.dwhy-box[open] summary { border-bottom:1px solid var(--line); margin-bottom:6px; }
.dwhy p { margin:0 0 6px; } .dwhy .muted { color:var(--mut); } .dwhy .hint { color:var(--ink); }
.pv.stale { color:var(--mut); text-decoration:line-through; text-decoration-thickness:1px; }
.stext .hint { color:var(--mut); }
.dact { display:flex; gap:6px; flex-wrap:wrap; margin-top:2px; }
.dempty { padding:24px; text-align:center; color:var(--mut); border:1px dashed var(--bd); border-radius:12px; margin-bottom:16px; }
button:focus-visible, a:focus-visible, summary:focus-visible { outline:2px solid var(--acc); outline-offset:2px; }
@media (max-width: 760px) {
  .layout { grid-template-columns:minmax(0,1fr); }
  nav { display:flex; overflow-x:auto; padding:6px 8px; white-space:nowrap; }
  nav h1 { margin:6px 10px 6px 4px; } nav a { padding:8px 12px; }
  main { padding:0 10px 24px; }
  .kpis { grid-template-columns:repeat(2,minmax(0,1fr)); }
  nav { min-width:0; max-width:100vw; }
}
