:root{--ground:#F4F5F2;--surface:#FFFFFF;--ink:#15191E;--muted:#5B636E;--line:#E2E5E0;--line2:#EEF0EC;
--nav:#13202B;--nav-hi:#24394A;--nav-ink:#C9D3DB;--accent:#1D5FD1;--ok:#0F7A55;--ok-bg:#E3F2EA;--warn:#A35408;--warn-bg:#FFF6E8;
--crit:#B42318;--crit-ink:#8A2A1E}
body.admin{--ground:#F2F1EE;--nav:#2A221C;--nav-hi:#45372D;--nav-ink:#D9D2C7;--line:#E4E1DA}
*{box-sizing:border-box}
body{margin:0;background:var(--ground);color:var(--ink);font:15px/1.45 'IBM Plex Sans',system-ui,sans-serif}
a{color:var(--accent)}a:hover{color:#123F8F}
.mono{font-family:'IBM Plex Mono',ui-monospace,monospace}
.muted{color:var(--muted)}
.shell{display:flex;flex-wrap:wrap;min-height:100vh}
nav.side{flex:1 1 220px;max-width:260px;background:var(--nav);padding:20px 14px;display:flex;flex-direction:column;gap:20px}
.brand{display:flex;align-items:center;gap:10px;padding:0 6px;color:#fff}
.brand b{font-size:16px}.brand small{display:block;color:#8FA0AE;font-size:12px}
body.admin .brand small{color:#F0B37E;font-weight:600}
.menu{display:flex;flex-direction:column;gap:2px}
.menu a{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;border-radius:8px;color:var(--nav-ink);text-decoration:none;font-size:14px}
.menu a:hover{background:rgba(255,255,255,.07);color:#fff}
.menu a.on{background:var(--nav-hi);color:#fff}
.pill{font:500 12px 'IBM Plex Mono',monospace;padding:2px 8px;border-radius:10px;background:rgba(255,255,255,.12)}
.pill.red{background:var(--crit-ink);color:#fff}.pill.blue{background:var(--accent);color:#fff}
.side-foot{margin-top:auto;border-top:1px solid var(--nav-hi);padding:14px 6px 0;font-size:13px;color:#8FA0AE}
.side-foot button{background:none;border:0;color:#C9D3DB;font:inherit;text-decoration:underline;cursor:pointer;padding:0;margin-top:6px}
main{flex:999 1 560px;min-width:0;padding:24px 32px 40px;display:flex;flex-direction:column;gap:20px;max-width:1200px}
h1{margin:0;font-size:26px;font-weight:600}h2{margin:0;font-size:18px;font-weight:600}
.head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px}
.sub{font-size:14px;color:var(--muted);margin-top:4px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:20px}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px}
.tile{display:flex;flex-direction:column;gap:8px;text-decoration:none;color:var(--ink)}
.lbl{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:600}
.big{font-size:40px;font-weight:600;line-height:1}
.big small{font-size:20px;color:var(--muted)}
.cols{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start}
.row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px 0;border-top:1px solid var(--line2);font-size:14px}
.kv{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-top:1px solid var(--line2);font-size:14px}
.kv>span:first-child{color:var(--muted)}
.sq{display:inline-block;width:10px;height:10px;border-radius:3px;flex:none;margin-top:5px}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%}
.s-ok{background:var(--ok)}.s-crit{background:var(--crit)}.s-warn{background:var(--warn)}.s-off{background:var(--muted)}
.badge{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:4px 10px;border-radius:14px}
.badge.ok{color:#0F6B4B;background:var(--ok-bg)}.badge.warn{color:#6B3D06;background:var(--warn-bg)}.badge.crit{color:#fff;background:var(--crit-ink)}
.v-crit{color:var(--crit);font-weight:600}.v-warn{color:var(--warn);font-weight:600}.v-ok{color:var(--ok)}
.pons{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:14px}
.pon{border:1px solid #CFE3D8;background:#F3FAF6;border-radius:10px;padding:14px}
.bar{height:6px;background:var(--line);border-radius:3px;margin-top:10px}.bar>div{height:6px;background:var(--ok);border-radius:3px}
.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.search{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #D5D9D2;border-radius:8px;padding:0 12px;min-height:42px;flex:1 1 260px}
.search input{border:0;outline:0;font:inherit;font-size:14px;width:100%;background:transparent}
select,.inp{min-height:42px;border:1px solid #D5D9D2;border-radius:8px;background:#fff;font:inherit;font-size:14px;padding:0 10px;color:var(--ink)}
.chip{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 14px;border-radius:18px;border:1px solid #D5D9D2;background:#fff;font:inherit;font-size:14px;cursor:pointer;color:var(--ink)}
.chip.on{background:var(--nav);color:#fff;border-color:var(--nav)}
.btn{min-height:44px;padding:0 18px;border-radius:8px;border:1px solid #D5D9D2;background:#fff;font:inherit;font-size:14px;cursor:pointer;color:var(--ink)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:500}
.btn[disabled]{color:var(--muted);background:var(--ground);cursor:not-allowed}
.tbl{background:#fff;border:1px solid var(--line);border-radius:12px;overflow-x:auto}
table{border-collapse:collapse;width:100%}
th{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:600;text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:10px 12px;border-bottom:1px solid var(--line2);font-size:14px;white-space:nowrap}
tbody tr:hover td{background:#F8F9F7}
tbody tr.click{cursor:pointer}
.note{background:var(--warn-bg);border:1px solid #F0D7AE;border-radius:10px;padding:12px 16px;font-size:14px;color:#6B3D06}
.diag{border-color:#CFE3D8;background:#F6FBF8}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:20px}
.empty{padding:40px 20px;text-align:center;color:var(--muted)}
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px}
.login form{width:100%;max-width:380px;display:flex;flex-direction:column;gap:14px}
.login label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:500;color:#3D444D}
.err{color:var(--crit);font-size:14px;min-height:20px}
.spin{opacity:.6}
@media (max-width:700px){main{padding:16px}nav.side{max-width:none}.big{font-size:32px}}
.f{display:flex;flex-direction:column;gap:6px}
form .inp,form select{width:100%}
.filters .inp,.filters select{width:auto}
table.compact td{padding:7px 10px;font-size:13.5px;white-space:normal;vertical-align:top}
table.compact th{padding:8px 10px}
.sm{font-size:12px;margin-top:2px}
/* страница ONU как в SmartOLT */
.onu-top{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:20px}
.kvbox{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 18px}
.kvl{display:grid;grid-template-columns:minmax(120px,40%) 1fr;gap:12px;padding:5px 0;font-size:14px;align-items:baseline}
.kvl>span:first-child{text-align:right;font-weight:600;color:#3D444D}
.lnk{background:none;border:0;padding:0;font:inherit;color:var(--accent);cursor:pointer;text-align:left}
.lnk:hover{text-decoration:underline;color:#123F8F}
.onu-sec{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:start}
.onu-sec>.lbl{text-align:right;padding-top:12px}
.sm2{min-height:36px;padding:0 14px;font-size:13.5px}
.warnb{background:#F0A02B;border-color:#F0A02B;color:#fff}.warnb[disabled]{background:#F6CF8F;border-color:#F6CF8F;color:#fff}
.delb{background:#D63B2F;border-color:#D63B2F;color:#fff}
.rad{display:inline-flex;align-items:center;gap:6px;margin-right:14px}
dialog#dlg{border:0;border-radius:12px;padding:0;width:min(560px,94vw);box-shadow:0 20px 60px rgba(0,0,0,.25)}
dialog#dlg.wide{width:min(860px,96vw)}
dialog#dlg::backdrop{background:rgba(15,23,32,.45)}
.dlg-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line2)}
.dlg-body{padding:16px 20px;max-height:70vh;overflow:auto}
.dlg-foot{display:flex;justify-content:flex-end;gap:10px;padding:12px 20px;border-top:1px solid var(--line2)}
.rawpre{font-size:12px;background:#0F1720;color:#D6E2EC;padding:12px;border-radius:8px;white-space:pre;overflow:auto;max-height:60vh;margin:0}
@media (max-width:700px){.onu-sec{grid-template-columns:1fr}.onu-sec>.lbl{text-align:left;padding-top:0}.kvl{grid-template-columns:1fr}.kvl>span:first-child{text-align:left}}
