:root{--ground:#F3F5F7;--surface:#FFFFFF;--ink:#0F1B24;--muted:#5A6B78;--line:#E1E6EA;--line2:#EEF1F4;
--nav:#0F1B24;--nav-hi:#1F3A5F;--nav-ink:#B9C4CE;--accent:#1D4FB8;--ok:#157F4A;--ok-bg:#DDF1E6;--warn:#8A4B06;--warn-bg:#FCEFD9;
--crit:#A51F17;--crit-ink:#A51F17}
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:#133A8A}
.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(min(210px,100%),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)}.s-sync{background:#2563EB}.s-dis{background:#111827}
.chip .dot{width:9px;height:9px;margin-right:2px}.chip .cnt{font-weight:600;opacity:.8}
/* раздел ONU: сводка-плитки, группы по PON, строки с цветной полосой */
.osum{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:8px;margin:4px 0 10px}
.ost{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 12px;border:1px solid var(--line);border-left-width:4px;border-radius:10px;background:#fff;font:inherit;cursor:pointer;text-align:left;color:var(--ink)}
.ost b{font-size:20px;font-weight:600;line-height:1.1}.ost span{font-size:12.5px;color:#5F6B76}
.ost.on{background:#EEF3FF;border-color:#C7D8F5}
.ost.s-ok{border-left-color:var(--ok);background:#fff}.ost.s-warn{border-left-color:var(--warn);background:#fff}.ost.s-crit{border-left-color:var(--crit);background:#fff}
.ost.s-off{border-left-color:var(--muted);background:#fff}.ost.s-dis{border-left-color:#111827;background:#fff}.ost.s-crit2{border-left-color:#D85A30}.ost.on{background:#EEF3FF}
.onul2{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.ol-head{display:flex;align-items:center;padding:6px 12px;border-bottom:1px solid var(--line);background:#FAFBFC}.ol-all{display:flex;align-items:center;gap:6px;cursor:pointer}
.og{display:flex;align-items:center;gap:10px;padding:7px 12px;background:#F6F8FA;border-bottom:1px solid var(--line);font-size:12.5px}
.og b{font-weight:600;font-size:13px}.og i{font-style:normal;font-size:12px}.og i.s-ok{color:var(--ok);background:none}.og i.s-warn{color:var(--warn);background:none}.og i.s-crit{color:var(--crit);background:none}.og i.s-off{color:var(--muted);background:none}.og i.s-dis{color:#111827;background:none}
.og .og-rx{margin-left:auto}
.orow{display:grid;grid-template-columns:18px 22px minmax(0,1fr) 120px 110px 74px 150px 160px 92px 64px;gap:10px;align-items:center;padding:6px 12px 6px 10px;border-bottom:1px solid var(--line);font-size:13px}
.ol-cols{background:#FAFBFC;font-size:11.5px;letter-spacing:.3px;text-transform:uppercase;color:#5F6B76;padding:7px 12px 7px 10px;cursor:default}.ol-cols:hover{background:#FAFBFC}
.ozone,.otype{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.oport{font-size:12px}
.ocfg .mono{font-size:12px}
.orow:hover{background:#F8FAFC}.orow:last-child{border-bottom:0}
.orail{display:flex;align-items:center;justify-content:center;width:22px;height:30px}.sti{display:block}
.onm{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.osub{font-size:12px;color:#5F6B76;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.osig{white-space:nowrap;display:flex;align-items:center;gap:6px}.osig svg{vertical-align:middle}
.ocfg{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.osvcs{display:flex;gap:4px}.osvc{font-size:11px;padding:1px 6px;border-radius:999px;border:1px solid var(--line);color:#9AA3AF}.osvc.on{color:#1D4FB8;border-color:#C7D8F5;background:#EEF3FF}
.osvc.ok{color:#fff;border-color:#0F6E56;background:#0F6E56}.osvc.off{color:#fff;border-color:#A32D2D;background:#A32D2D}.osvc.na{color:#B4B2A9;border-style:dashed}
.osvc.warn{color:#fff;border-color:#854F0B;background:#854F0B;animation:blink 1.2s ease-in-out infinite}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.35}}
.pill.warn{background:#FAEEDA;color:#633806}
.oago{font-size:12px;text-align:right;white-space:nowrap}
@media (max-width:1250px){.orow{grid-template-columns:18px 22px minmax(0,1fr) 110px 74px 140px 150px 64px}.otype,.osvcs{display:none}}
@media (max-width:900px){.orow{grid-template-columns:18px 22px minmax(0,1fr) 80px}.ozone,.otype,.oport,.ocfg,.osvcs,.oago{display:none}.og .og-rx{display:none}.ol-cols{display:none}}
.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(min(200px,100%),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 #D5DCE2;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 #D5DCE2;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 #D5DCE2;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 #D5DCE2;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:#F7F9FB}
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(min(320px,100%),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}
/* вкладка VLAN: плотные строки, узкие колонки флагов, мелкие кнопки */
table.vlt th,table.vlt td{padding:4px 8px;font-size:13px;vertical-align:middle}
table.vlt .ck{width:1%;text-align:center}
table.vlt .ck input{margin:0;vertical-align:middle}
table.vlt .act{width:1%;white-space:nowrap}
table.vlt .btn.sm2{min-height:26px;padding:0 8px;font-size:12px;border-radius:6px}
table.vlt .rmark.bad{white-space:normal}
.qh{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;border:1px solid var(--line);color:var(--muted);font-size:12px;cursor:help}
form.row1{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-bottom:10px;padding:8px 10px;border:1px solid var(--line2);border-radius:10px}
form.row1 .inp,form.row1 select{min-height:30px;padding:3px 8px;font-size:13px}form.row1 select{width:auto;flex:0 0 auto}
form.row1 label,.row1 label{display:inline-flex;align-items:center;gap:4px;font-size:13px;white-space:nowrap}
/* запись в OLT во вкладках: спиннер на кнопке → ✓/✗ в строке + тост (переживают перерисовку) */
.btn.is-busy{position:relative;color:transparent!important;pointer-events:none}
.btn.is-busy::after{content:"";position:absolute;inset:0;margin:auto;width:12px;height:12px;border-radius:50%;border:2px solid rgba(29,79,184,.25);border-top-color:var(--accent);animation:spin .9s linear infinite}
.btn.primary.is-busy::after{border-color:rgba(255,255,255,.35);border-top-color:#fff}
tr.row-busy>td{opacity:.5}
tr.row-ok>td{animation:rowok 5s ease-out}tr.row-bad>td{background:#FBEAEA}
@keyframes rowok{0%,40%{background:var(--ok-bg)}100%{background:transparent}}
.rmark{font-weight:700;color:var(--ok);font-size:12.5px}.rmark.bad{display:block;color:var(--crit);font-weight:500}
@media (prefers-reduced-motion:reduce){.btn.is-busy::after,tr.row-ok>td{animation:none}}
.sm{font-size:12px;margin-top:2px}
/* страница ONU как в SmartOLT */
.onu-top{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),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}}
.sub3{font-size:15px;margin:16px 0 6px;font-weight:600}
.btn.danger{color:#B42318;border-color:#F3C3BE}
.btn.danger:hover{background:#FEF3F2}
.vlchk{max-height:320px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:6px 12px}
.trwrap{display:flex;flex-direction:column;gap:6px}
.trsec{background:#fff;border:1px solid var(--line);border-radius:10px}
.trsec>summary{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;font-weight:600;background:#F4F5F7;border-radius:10px;list-style:none}
.trsec[open]>summary{border-bottom:1px solid var(--line);border-radius:10px 10px 0 0}
.trsec>summary::-webkit-details-marker{display:none}
.trsec .tri{width:18px;text-align:center;color:var(--muted)}
.trbody{padding:12px 14px;overflow-x:auto}
.trkv td{padding:5px 8px;vertical-align:top}
.trkv tr:nth-child(odd){background:#FAFAFB}

.onul td{padding:6px 8px;vertical-align:top;font-size:13px}
.onul th{font-size:12px;padding:8px}
.onul .xs{font-size:12px;line-height:1.35}
.onul .vbtn{min-height:28px;padding:0 12px;font-size:12.5px;text-decoration:none;display:inline-flex;align-items:center}
.bdg{display:inline-block;color:#fff;font-size:10.5px;font-weight:700;padding:2px 6px;border-radius:4px;white-space:nowrap;letter-spacing:.2px}
body.wide main{max-width:none}
/* все страницы панели — во всю ширину экрана; узкие формы ограничивают себя сами */
main{max-width:none}
@media (max-width:700px){.tbl table{font-size:12.5px}.tbl th,.tbl td{padding:7px 8px}.head{flex-wrap:wrap;gap:10px}.filters{flex-wrap:wrap}}
.onul{width:100%}
.vlt{width:100%}.vlt td,.vlt th{padding-left:8px;padding-right:8px}.vlt td:nth-child(3){max-width:220px;overflow:hidden;text-overflow:ellipsis}
.langs{display:inline-flex;gap:2px;background:rgba(127,140,150,.15);border-radius:8px;padding:2px}
.lang{font:inherit;font-size:12px;font-weight:600;letter-spacing:.3px;border:0;background:transparent;color:inherit;opacity:.7;padding:6px 10px;border-radius:6px;cursor:pointer;min-height:30px}
.lang.on{background:#1D5FD1;color:#fff;opacity:1}

/* olt.am: знак, меню с иконками, страница входа */
.brand b{font-size:19px;letter-spacing:-.3px}.brand b i{font-style:normal;color:#5B8CFF}
.menu a .ic{display:inline-flex;align-items:center;gap:11px}.menu a svg{flex:none;opacity:.85}
.menu a.on{box-shadow:inset 3px 0 0 #5B8CFF}
.login2{display:flex;flex-wrap:wrap;min-height:100vh;background:#0F1B24}
.login2 .hero{flex:1 1 460px;padding:56px 64px;display:flex;flex-direction:column;justify-content:space-between;gap:40px;color:#fff}
.login2 .hero h1{font-size:44px;line-height:1.1;letter-spacing:-.8px;max-width:560px}
.login2 .hero p{font-size:18px;line-height:1.55;color:#B9C4CE;max-width:560px;margin:18px 0 0}
.login2 .facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;max-width:560px;font-size:14px;color:#B9C4CE}
.login2 .facts b{display:block;font:500 15px 'IBM Plex Mono',monospace;color:#fff}
.login2 .side{flex:1 1 400px;background:var(--ground);display:flex;align-items:center;justify-content:center;padding:40px 20px}
.login2 form{width:100%;max-width:380px;display:flex;flex-direction:column;gap:14px}
.login2 label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:#3A4A56}
.login2 .inp{min-height:48px;font-size:15px}
.login2 .btn.primary{min-height:48px;font-size:15px;font-weight:600}
@media (max-width:700px){.login2 .hero{padding:32px 20px}.login2 .hero h1{font-size:30px}.login2 .facts{grid-template-columns:1fr}}
/* узкие экраны: ничего не вылезает вбок */
@media (max-width:700px){.card{padding:16px}.head h1{font-size:22px}.kvl{grid-template-columns:1fr}.filters>.btn,.filters>a.btn{flex:1 1 auto;justify-content:center}}
main>*{max-width:100%;min-width:0}

/* публичный сайт olt.am */
.site{background:#fff;color:var(--ink)}
.sw{max-width:1200px;margin:0 auto;padding:0 24px;box-sizing:border-box}
.sh{background:#0F1B24;color:#fff;position:sticky;top:0;z-index:5}
.sh-in{display:flex;flex-wrap:wrap;gap:14px 24px;align-items:center;justify-content:space-between;padding-top:16px;padding-bottom:16px}
.snav{display:flex;flex-wrap:wrap;gap:10px 22px;align-items:center}
.snav>a:not(.btn){color:#D5DEE6;text-decoration:none;font-size:15px}.snav>a:not(.btn):hover{color:#fff}
.snav .langs{color:#fff}
.sbtn-ghost{background:transparent;color:#fff;border-color:#3A4B58;display:inline-flex;align-items:center;text-decoration:none}
a.btn{display:inline-flex;align-items:center;text-decoration:none}
.sbig{min-height:52px;padding:0 24px;font-size:16px;font-weight:600}
.hero2{background:#0F1B24;color:#fff}
.hero2-in{display:flex;flex-wrap:wrap;gap:48px;align-items:center;padding-top:64px;padding-bottom:88px}
.hero2 h1{font-size:52px;line-height:1.06;letter-spacing:-1.2px;margin:14px 0 0;max-width:640px}
.hero2 p{font-size:19px;line-height:1.6;color:#B9C4CE;max-width:580px;margin:20px 0 0}
.hero2-pic{flex:1 1 420px;min-width:0}
.hp-card{background:#F3F5F7;border-radius:14px;padding:18px;color:var(--ink);box-shadow:0 30px 60px rgba(0,0,0,.35)}
.hp-row{display:flex;justify-content:space-between;align-items:baseline}
.hp-kpi{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:14px 0}
.hp-kpi>div{background:#fff;border-radius:8px;padding:10px}.hp-kpi small{display:block;font-size:11px;color:var(--muted)}.hp-kpi b{font-size:18px;letter-spacing:2px;color:#157F4A}
.hp-line{display:grid;grid-template-columns:12px 1fr 80px;gap:10px;align-items:center;padding:9px 4px;border-top:1px solid var(--line2);font-size:13px}
.hp-line .mono:last-child{text-align:right}
.ss{padding:88px 0}.ss.dark{background:#F3F5F7}
.ss h2{font-size:38px;letter-spacing:-.6px;margin:0 0 40px;max-width:760px}
.slead{font-size:17px;line-height:1.6;color:#4A5A66;margin:0;max-width:440px}
.sgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:40px 48px}
.sfeat h3,.ssteps h3{margin:14px 0 6px;font-size:18px}.sfeat p,.ssteps p{margin:0;font-size:15px;line-height:1.6;color:#4A5A66}
.sfi{display:block;width:44px;height:44px;border-radius:10px;background:#E5ECF8 radial-gradient(circle,#1D4FB8 6px,transparent 7px)}
.ssteps{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(250px,100%),1fr));gap:20px}
.ssteps li{background:#fff;border:1px solid var(--line);border-radius:14px;padding:24px}.ssteps .mono{color:#1D4FB8}
.slist{list-style:none;padding:0;margin:0;display:grid;gap:14px;font-size:16px;max-width:820px}.slist li{border-top:1px solid var(--line);padding-top:14px}
.sfaq{display:grid;gap:10px;max-width:820px}
.sfaq details{border:1px solid var(--line);border-radius:12px;padding:16px 18px;background:#fff}
.sfaq summary{cursor:pointer;font-weight:600;font-size:16px}.sfaq p{margin:10px 0 0;color:#4A5A66;line-height:1.6}
.apply{display:flex;flex-wrap:wrap;gap:40px;align-items:flex-start}.apply h2{margin-bottom:14px}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.sfoot{display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;padding-top:32px;padding-bottom:40px;font-size:14px;color:var(--muted)}
@media (max-width:700px){.hero2 h1{font-size:32px}.ss{padding:56px 0}.ss h2{font-size:28px;margin-bottom:24px}.hero2-in{padding-top:36px;padding-bottom:56px}.sh{position:static}}
/* Компактный режим для ноутбуков (до 1440px): меньше отступы и шрифты, узкая боковая панель, кнопки и поля ниже */
@media (max-width:1440px){
  body{font-size:14px}
  nav.side{flex-basis:190px;max-width:210px;padding:14px 10px;gap:14px}
  main{padding:14px 18px 28px;gap:14px}
  h1{font-size:21px}h2{font-size:16px}
  .card{padding:14px}
  .tiles{gap:10px}.big{font-size:30px}.big small{font-size:16px}
  th{padding:7px 8px;font-size:11px}td{padding:6px 8px;font-size:13px}
  .kv,.row{padding:6px 0;font-size:13px}.kvl{padding:3px 0;font-size:13px;gap:8px}
  .onu-sec{grid-template-columns:96px 1fr;gap:8px}.onu-top{gap:12px}.grid3{gap:12px}
  select,.inp,.search{min-height:34px;font-size:13px}.btn{min-height:34px;padding:0 12px;font-size:13px}.chip{min-height:30px;padding:0 10px;font-size:13px}
  .badge{font-size:12px;padding:2px 8px}.note{padding:8px 12px;font-size:13px}
  .dlg-body{padding:12px 16px}
}
/* оверлей ожидания OLT */
@keyframes spin{to{transform:rotate(360deg)}}
/* языки — правый верхний угол панели, с флагами */
.lang-top{position:fixed;top:10px;right:14px;z-index:60}
.lang-top .langs{background:#fff;border:1px solid var(--line);box-shadow:0 2px 8px rgba(15,27,36,.08)}
.lang{display:inline-flex;align-items:center;gap:6px}.lang svg{border-radius:2px;box-shadow:0 0 0 1px rgba(0,0,0,.12)}
@media (max-width:700px){.lang-top{position:static;padding:8px 16px 0;text-align:right}}

/* переключатели и карточки сервисов в карточке ONU */
.swl{display:inline-flex;align-items:center;gap:10px;cursor:pointer;user-select:none}
.sw-in{position:absolute;opacity:0;width:0;height:0}
.sw-ui{width:40px;height:22px;border-radius:999px;background:#C9D2DB;position:relative;transition:background .2s;flex:none}
.sw-ui::after{content:'';position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .2s}
.sw-in:checked+.sw-ui{background:#16A34A}.sw-in:checked+.sw-ui::after{transform:translateX(18px)}.sw-in:focus-visible+.sw-ui{outline:2px solid #1D5FD1;outline-offset:2px}
.svc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(230px,100%),1fr));gap:12px;max-width:820px}
.svc{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:#fff;position:relative}
.svc.on{border-color:#BBE5CC;background:linear-gradient(180deg,#F3FBF6,#fff)}
.svc-h{display:flex;align-items:center;gap:8px;margin-bottom:8px}.svc-h b{font-size:14px}.svc-h .lnk,.svc-h .swl{margin-left:auto}
.svc-i{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;background:#EEF3FF;font-size:15px}
.svc-v{font-size:13.5px;color:var(--ink)}
.pill{display:inline-block;padding:2px 9px;border-radius:999px;background:#EEF0F2;color:#4A5A66;font-size:12.5px;font-weight:600}.pill.ok{background:#DCF5E6;color:#157F4A}

/* два графика в карточке ONU */
.charts2{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:14px}
.chart-card{padding:12px 14px}.chart-card h3{margin:0 0 6px;font-size:14px;text-align:center}
.chart-legend{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:12px;color:#4A5A66;margin-top:6px}.chart-legend i{display:inline-block;width:12px;height:12px;border-radius:2px;vertical-align:-2px;margin-right:6px}.chart-legend b{font-weight:500;color:var(--ink);margin:0 6px}
/* карточка ONU — компактнее: меньше рамок и отступов, графики ниже, кнопки мельче */
.onu-top{gap:12px;margin-top:8px}.onu-top .kvbox{padding:6px 14px}.onu-top .kvl{padding:3px 0;font-size:13.5px;gap:10px}
.onu-sec{gap:10px;margin-top:10px}.onu-sec>.lbl{padding-top:7px;font-size:12.5px;letter-spacing:.2px}
.onu-sec .card{padding:10px 12px;border-radius:10px}.onu-sec .kvbox{padding:6px 14px;border-radius:10px}.onu-sec .tbl{border-radius:10px}
.onu-sec table.compact td{padding:5px 8px;font-size:13px}.onu-sec table.compact th{padding:6px 8px;font-size:12.5px}
.charts2{gap:10px}.chart-card h3{font-size:13px;margin-bottom:2px}.chart-card svg{max-height:140px}.chart-legend{font-size:11.5px;margin-top:4px}
.svc-grid{gap:8px}.svc{padding:8px 12px;border-radius:10px}.svc-h{margin-bottom:5px}.svc-i{width:24px;height:24px;font-size:13px}.svc-v{font-size:13px}
.onu-sec .btn,.onu-top .btn,.onu-sec .btn.sm2{min-height:32px;padding:0 11px;font-size:13px;border-radius:7px}
.onu-sec .lnk{font-size:13px}

/* обзор: сворачиваемый блок «Требует внимания», иллюстрация OLT, компактные PON-плитки */
details.att>summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:12px}
details.att>summary::-webkit-details-marker{display:none}
details.att>summary h2::before{content:'▾';display:inline-block;margin-right:8px;color:#8FA3B3;transition:transform .15s}
details.att:not([open])>summary h2::before{transform:rotate(-90deg)}
details.att:not([open])>summary{margin-bottom:0}
.olt-pic{width:120px;height:48px;object-fit:contain;flex:none;border-radius:8px;background:#F3F5F7;padding:4px;box-sizing:border-box}
.pons{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.pon{padding:8px 10px;border-radius:9px}.pon .mono{font-size:12.5px}.pon .bar{height:5px;margin-top:5px}
.pon>div:nth-child(2){font-size:17px!important;margin-top:3px!important}.pon>div:nth-child(2) .muted{font-size:12px!important}
.pon>div:last-child{font-size:11.5px!important;margin-top:5px!important}
/* обзор: карточки OLT рядом, блок «Требует внимания» */
.olts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:14px;margin:14px 0}
.olt-card{padding:14px 16px}.olt-card-h{display:flex;gap:14px;align-items:center;margin-bottom:10px}
.olt-card .olt-pic{width:150px;height:60px;padding:4px}
.olt-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:4px 0 6px}
.olt-kpis div{background:#F3F5F7;border-radius:9px;padding:7px 10px;min-width:0}.olt-kpis b{display:block;font-size:17px;letter-spacing:-.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.olt-kpis small{display:block;color:#6B7A88;font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
details.att{margin-top:14px;padding:12px 16px}details.att>summary{margin:0;padding:2px 0}details.att>summary h2{margin:0;font-size:16px}
.att-body{margin-top:8px;padding-left:4px}.att-body .row{padding:8px 0}
@media (max-width:700px){.olt-kpis{grid-template-columns:repeat(2,1fr)}.olt-card .olt-pic{width:110px;height:44px}}
/* PON-плитки на обзоре — ещё компактнее */
.pons{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:6px}
.pon{padding:6px 8px;border-radius:8px}.pon .mono{font-size:11.5px}.pon .bar{height:4px;margin-top:4px}
.pon>div:nth-child(2){font-size:15px!important;margin-top:2px!important}.pon>div:nth-child(2) .muted{font-size:11px!important}
.pon>div:last-child{font-size:10.5px!important;margin-top:4px!important}
/* карточки OLT на обзоре — компактнее */
.olts-grid{gap:10px;margin:10px 0}.olt-card{padding:10px 12px}.olt-card-h{gap:10px;margin-bottom:6px}
.olt-card .olt-pic{width:110px;height:44px;padding:3px}.olt-card h2{font-size:15px!important}
.olt-kpis{gap:6px;margin:2px 0 4px}.olt-kpis div{padding:5px 8px;border-radius:7px}.olt-kpis b{font-size:15px}.olt-kpis small{font-size:11px}
.olt-card .kv{padding:3px 0!important;font-size:12.5px}
.olt-card .chart-legend{font-size:11px;margin-top:2px}.olt-card svg{max-height:110px}
/* обзор: рамки и поля всех блоков компактнее */
.tiles{gap:8px!important}.tiles .tile{padding:8px 12px!important;border-radius:9px}.tiles .tile .big{font-size:24px!important;line-height:1.1}.tiles .tile .lbl{font-size:11.5px}.tiles .tile .muted{font-size:11.5px!important}
details.att{margin-top:10px;padding:8px 12px;border-radius:9px}details.att>summary h2{font-size:14.5px}.att-body{margin-top:4px}.att-body .row{padding:5px 0;font-size:13px}
.card:has(.pons){margin-top:10px!important;padding:8px 12px;border-radius:9px}.card:has(.pons) .head{margin-bottom:6px}.card:has(.pons) h2{font-size:14.5px!important}
.olt-card{border-radius:9px}.olt-kpis div{border-radius:6px}
.head{margin-bottom:10px}.head h1{font-size:22px}
/* обзор: карточки OLT не растягиваются на всю ширину — фиксированная компактная ширина, график на всю карточку */
.olts-grid{grid-template-columns:repeat(auto-fill,minmax(340px,520px));justify-content:start}
.olt-card{max-width:520px}.olt-card svg{max-height:150px;width:100%;display:block}
.tiles{grid-template-columns:repeat(auto-fill,minmax(180px,260px))!important;justify-content:start}
/* обзор: сводные плитки в один ряд, компактные */
.tiles{grid-template-columns:repeat(auto-fit,minmax(150px,215px))!important;gap:6px!important}
.tiles .tile{padding:6px 10px!important;border-radius:8px}.tiles .tile .big{font-size:21px!important}.tiles .tile .lbl{font-size:10.5px;letter-spacing:.2px}.tiles .tile .muted{font-size:11px!important}
.olt-total{margin-left:auto;text-align:right;flex:none;padding-left:10px}.olt-total b{display:block;font-size:24px;letter-spacing:-.5px;line-height:1.1}.olt-total small{display:block;font-size:11px;color:#6B7A88}
.pon-card-row td{background:#F3F5F7;font-size:13px;padding:7px 12px!important;border-top:2px solid var(--line)}
form.fan-on{border-left:3px solid #16A34A;padding-left:10px}
#fanbox .grid3>*{min-width:0}#fanbox .kv{flex-wrap:wrap}#fanbox .kv>span:last-child{text-align:right;flex:1 1 auto}#fanbox .swl{justify-content:flex-end;flex-wrap:wrap}
/* карточка ONU: верхние два блока компактно — левый в две колонки, правый не растягивается до высоты левого */
.onu-top{align-items:start}
.onu-top .kvbox:first-child{column-count:2;column-gap:18px}
.onu-top .kvbox:first-child .kvl{break-inside:avoid;grid-template-columns:minmax(84px,36%) 1fr;gap:8px}
.onu-top .kvl{padding:2px 0;font-size:13px;line-height:1.35}
@media (max-width:900px){.onu-top .kvbox:first-child{column-count:1}}
/* палитра состояний (три оттенка одного цвета: полоса / подложка / текст) */
.orow.t-warn{background:#FAEEDA}.orow.t-crit{background:#FCEBEB}.orow.t-off{background:#F1EFE8}.orow.t-dis{background:#E8E6DF}.orow.t-sync{background:#E6F1FB}
.orow.t-warn:hover{background:#F6E3C4}.orow.t-crit:hover{background:#F7DADA}.orow.t-off:hover{background:#E8E5DB}.orow.t-dis:hover{background:#DCD9D0}
.ost.on.s-ok{background:#E1F5EE;border-color:#9FE1CB}.ost.on.s-warn{background:#FAEEDA;border-color:#FAC775}.ost.on.s-crit{background:#FCEBEB;border-color:#F7C1C1}
.ost.on.s-off{background:#F1EFE8;border-color:#D3D1C7}.ost.on.s-dis{background:#E8E6DF;border-color:#B4B2A9}.ost.on.s-crit2{background:#FAECE7;border-color:#F5C4B3}
.osvc.on{color:#3C3489;border-color:#CECBF6;background:#EEEDFE}
.v-third{color:#993C1D}

/* карточка ONU: шапка, три блока, порты и Wi-Fi рядом, история свёрнута */
.ohd{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:14px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px 14px 10px 12px;margin:8px 0 10px}
.orail2{display:flex;align-items:center;justify-content:center;width:30px;height:46px}
.ohn{font-size:19px;margin:0;display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;line-height:1.25}.ohn .mono{font-size:13px;font-weight:400}
.ohs{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:13px;margin-top:4px;color:#5F6B76;align-items:center}.ohs b{color:var(--ink);font-weight:600}
.acts{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;align-items:center;max-width:560px}.acts-sep{width:10px}
.note.third{background:#FAECE7;border-color:#F5C4B3;color:#712B13;margin:0 0 10px}
.onu-top.g3{grid-template-columns:1.15fr 1fr 1fr;align-items:start}
.bh{font-size:12px;letter-spacing:.3px;text-transform:uppercase;color:#5F6B76;margin:4px 0 6px;column-span:all}
.onu-top .kvbox:first-child .bh{column-span:all}
.svcbox .svc-grid{grid-template-columns:1fr;gap:6px}.svcbox .svc{padding:8px 10px}.svcbox .kvbox.inner{padding:4px 10px;border:0;background:none}
.onu-grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:10px}.onu-grid2 .onu-sec{grid-template-columns:1fr;gap:6px;margin-top:0}.onu-grid2 .onu-sec>.lbl{text-align:left;padding-top:0;font-size:12px;letter-spacing:.3px;text-transform:uppercase}
.card.hist{margin-top:10px;padding:10px 14px}.card.hist summary{cursor:pointer;font-weight:600;font-size:13px}
@media (max-width:1100px){.onu-top.g3{grid-template-columns:1fr 1fr}.onu-grid2{grid-template-columns:1fr}}
@media (max-width:760px){.onu-top.g3{grid-template-columns:1fr}.ohd{grid-template-columns:30px 1fr}.acts{justify-content:flex-start;max-width:none}}
.onu-top.g3 .kvbox:not(:first-child) .kvl{grid-template-columns:104px 1fr;gap:8px}.onu-top.g3 .kvbox:not(:first-child) .kvl>span:first-child{text-align:left}
.ol-sigh{margin-left:auto}

/* страница OLT, вкладка «Детали»: таблица настроек + «Состояние» справа */
.olt-det{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;align-items:start}
.olt-det .olt-st h2{margin:0 0 8px}
.olt-det .olt-st .kv{padding:5px 0}
#oltdet table.trkv td{padding:4px 8px;font-size:13px;line-height:1.35}
#oltdet table.trkv td:first-child{width:230px}
#oltdet .btn{min-height:32px;padding:4px 10px;font-size:13px}
@media (max-width:1100px){.olt-det{grid-template-columns:1fr}#oltdet table.trkv td:first-child{width:auto}}
/* компактная таблица настроек OLT */
#oltdet{padding:12px 14px}
#oltdet table.trkv thead{display:none}
#oltdet table.trkv td{padding:2px 8px;font-size:12.5px;line-height:1.3}
#oltdet table.trkv td:first-child{width:200px}
#oltdet table.trkv .btn,#oltdet table.trkv .btn.sm2{min-height:22px;padding:1px 8px;font-size:12px;line-height:1.2}
#oltdet table.trkv select{min-height:24px;height:24px;padding:0 6px;font-size:12px}
#oltdet table.trkv .muted.sm{font-size:11.5px;line-height:1.25}
#oltdet table.trkv .filters{gap:6px;margin:0;flex-wrap:nowrap}
#oltdet > .filters{margin-bottom:8px!important;gap:6px}
#oltdet > .filters .btn{min-height:28px;padding:2px 10px;font-size:12.5px}
.olt-st table.trkv{width:100%;table-layout:fixed}
.olt-st table.trkv th,.olt-st table.trkv td{padding:3px 4px;font-size:12px;overflow:hidden;text-overflow:ellipsis}
.olt-st table.trkv th{font-size:10.5px;letter-spacing:0}
.olt-st table.trkv th:first-child,.olt-st table.trkv td:first-child{width:34%}
.olt-det{grid-template-columns:minmax(0,1fr) 440px}
.olt-st table.trkv th,.olt-st table.trkv td{font-size:12.5px;padding:3px 6px}
.olt-st table.trkv th:first-child,.olt-st table.trkv td:first-child{width:38%}
@media (max-width:1100px){.olt-det{grid-template-columns:1fr}}

/* компактный диалог (Edit OLT settings) */
dialog.dlg-compact .dlg-body{padding-top:8px;padding-bottom:8px}
dialog.dlg-compact .kvl{padding:2px 0;gap:10px;font-size:13px;align-items:center;grid-template-columns:200px 1fr}
dialog.dlg-compact .kvl .inp,dialog.dlg-compact .kvl select{min-height:30px;height:30px;padding:3px 8px;font-size:13px}
dialog.dlg-compact .kvl .rad{font-size:12.5px;line-height:1.5}
dialog.dlg-compact .btn{min-height:30px;padding:3px 12px;font-size:13px}
dialog.dlg-compact .ctest td{padding:2px 6px;font-size:12.5px;white-space:normal}
dialog.dlg-compact .ctest td:first-child{width:18px;font-weight:700}
dialog.dlg-compact .ctest td:nth-child(2){white-space:nowrap;font-weight:600}
dialog.dlg-compact .ctest td:nth-child(3){white-space:nowrap}
@media (max-width:700px){dialog.dlg-compact .kvl{grid-template-columns:1fr}}

.olt-st h3{margin:12px 0 4px;font-size:13.5px}
.olt-st .stal{font-size:12.5px;padding:3px 6px;border-radius:6px;margin:2px 0;line-height:1.35}
.olt-st .stal.crit{background:#FCEBEB;color:#8A1F1F}.olt-st .stal.warn{background:#FFF4E0;color:#7A4B00}
.olt-st table.trkv th:first-child,.olt-st table.trkv td:first-child{width:30%}
/* диалог Edit OLT settings — не растягивать вправо */
dialog#dlg.dlg-compact{width:min(640px,96vw)}
dialog.dlg-compact .kvl{grid-template-columns:180px minmax(0,1fr)}
dialog.dlg-compact .kvl .inp,dialog.dlg-compact .kvl select{max-width:380px}
.olt-st table.trkv th:first-child,.olt-st table.trkv td:first-child{width:28%}
.olt-st table.trkv th:nth-child(2),.olt-st table.trkv td:nth-child(2){width:15%}

/* ожидание ответа OLT и итог записи — одна плашка по центру экрана (popover: в верхнем слое, поверх dlg()), клики проходят сквозь */
#busy{inset:auto;position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2000;display:flex;flex-direction:column;gap:10px;
  width:min(560px,calc(100vw - 32px));margin:0;padding:0;border:0;background:transparent;overflow:visible;pointer-events:none;color:inherit}
#busy:empty{display:none}
#busy .bj{background:#14202B;color:#fff;border-radius:14px;padding:16px 20px;box-shadow:0 18px 50px rgba(0,0,0,.4),0 0 0 1px rgba(255,255,255,.06);font-size:15px}
#busy .bj-h{display:flex;align-items:center;gap:12px}#busy .bj-h b{flex:1;font-weight:700;font-size:16px}#busy .bj-h .mono{color:#C9D6E2;font-size:14px;white-space:nowrap}
#busy .spin{width:20px;height:20px;flex:0 0 20px;border-radius:50%;border:3px solid rgba(255,255,255,.25);border-top-color:#fff;animation:spin .9s linear infinite}
#busy .bj-bar{height:6px;background:rgba(255,255,255,.15);border-radius:3px;margin-top:12px;overflow:hidden}
#busy .bj-bar>div{height:100%;background:#5B8CFF;border-radius:3px;transition:width .5s linear}
#busy .bj-bar.ind>div{animation:bjind 1.4s ease-in-out infinite}
@keyframes bjind{0%{margin-left:-40%}100%{margin-left:100%}}
#busy .bj-n{margin-top:8px;color:#F0C97E;font-size:14px}
#busy .bj-n2{margin-top:6px;color:#DCE5EE;font-size:15px;line-height:1.4}
#busy .bj.ok{background:#0F5132}#busy .bj.bad{background:#7A1F1F}
#busy .bj-i{width:20px;text-align:center;font-weight:700;font-size:18px}
@media (max-width:600px){#busy{width:calc(100vw - 16px)}#busy .bj{padding:14px 16px}}
@media (prefers-reduced-motion:reduce){#busy .spin,#busy .bj-bar.ind>div{animation:none}}

.olt-st .st-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.olt-st .st-head h2{margin:0}
/* Отчёты → Графики (T21): подсказка по наведению */
.gtip{position:absolute;top:10px;background:#14202B;color:#fff;font-size:12.5px;line-height:1.5;padding:7px 10px;border-radius:8px;pointer-events:none;white-space:nowrap;box-shadow:0 6px 18px rgba(0,0,0,.2)}
.gtip i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px}.gtip b{display:block;margin-bottom:2px}
.gsvg .ghit{cursor:crosshair}
