/* AlarmFront web UI 2026. Светлая тема по умолчанию, тёмная - html[data-theme="dark"].
   Шаблоны страниц - только ASCII (их читает LoadPageFromFile как ANSI), этот файл отдаётся бинарно. */

@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/ibm-plex-sans-cyrillic-400-normal.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/ibm-plex-sans-latin-400-normal.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/ibm-plex-sans-cyrillic-500-normal.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/ibm-plex-sans-latin-500-normal.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/ibm-plex-sans-cyrillic-600-normal.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/ibm-plex-sans-latin-600-normal.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/ibm-plex-mono-cyrillic-400-normal.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/ibm-plex-mono-latin-400-normal.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/ibm-plex-mono-cyrillic-500-normal.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/ibm-plex-mono-latin-500-normal.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* ---------- Токены ---------- */
:root{
  --bg:#F4F6F9;--top:#FFFFFF;--sf:#FFFFFF;--sf2:#F1F4F8;--in:#FFFFFF;
  --bd:#E2E7EE;--bd2:#CBD3DE;--row:#EDF0F4;--hov:#F6F8FB;
  --tx:#121821;--mu:#5A6677;--ac:#2563EB;--acbg:rgba(37,99,235,.08);--link:#1D4ED8;--pri:#2563EB;
  --al:#B42318;--albg:#FDECEA;--alrow:#FFF5F4;
  --ok:#0F7A55;--okbg:#E3F5EE;
  --on:#1D4ED8;--onbg:#E8EFFD;
  --off:#4B5768;--offbg:#EEF1F5;
  --wa:#8A5300;--wabg:#FDF1DC;
  --nl:#5B3FC4;--nlbg:#EFEBFD;
  --c-in:#1E40AF;--c-out:#6B6400;--c-mar:#9A3412;--c-req:#BE185D;
  --shadow:0 1px 2px rgba(16,24,40,.04),0 1px 3px rgba(16,24,40,.06);
  --font:'IBM Plex Sans','Segoe UI',system-ui,-apple-system,sans-serif;
  --mono:'IBM Plex Mono',Consolas,'Courier New',monospace;
  color-scheme:light;
}
html[data-theme="dark"]{
  --bg:#0E1116;--top:#12161C;--sf:#151A21;--sf2:#1B222B;--in:#0F1318;
  --bd:#232B36;--bd2:#2A3442;--row:#1E2630;--hov:#18202A;
  --tx:#E6EAF0;--mu:#8B97A8;--ac:#4C8DFF;--acbg:rgba(76,141,255,.12);--link:#7FB0FF;--pri:#2F6FE0;
  --al:#FF8A80;--albg:rgba(255,90,78,.14);--alrow:rgba(255,90,78,.07);
  --ok:#5FD4AC;--okbg:rgba(47,191,143,.14);
  --on:#8DB4FF;--onbg:rgba(76,141,255,.14);
  --off:#AAB4C3;--offbg:rgba(139,151,168,.14);
  --wa:#F5BD66;--wabg:rgba(242,169,59,.14);
  --nl:#BCA4FF;--nlbg:rgba(160,120,255,.14);
  --c-in:#8DB4FF;--c-out:#D6CF7A;--c-mar:#F5A97F;--c-req:#F48FC1;
  --shadow:none;
  color-scheme:dark;
}

/* ---------- База ---------- */
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
body.af{min-height:100vh;background:var(--bg);color:var(--tx);font-family:var(--font);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased}
body.af a{color:var(--link)}
body.af a:hover{color:var(--tx)}
.af-mono{font-family:var(--mono);font-size:13px}
.af-mu{color:var(--mu)}
.af-hide{display:none!important}

/* ---------- Шапка ---------- */
.af-top{display:flex;flex-wrap:wrap;align-items:center;gap:0 14px;padding:0 20px;min-height:60px;background:var(--top);border-bottom:1px solid var(--bd)}
.af-brand{display:flex;align-items:center;padding:10px 0;text-decoration:none}
.af-brand img{display:block;max-height:34px;width:auto}
.af-brand .af-logo-d{display:none}
html[data-theme="dark"] .af-brand .af-logo-l{display:none}
html[data-theme="dark"] .af-brand .af-logo-d{display:block}
.af-srv{height:36px;max-width:170px;background:var(--in);border:1px solid var(--bd2);border-radius:8px;color:var(--tx);padding:0 10px;font:inherit;font-size:13px}
.af-nav{display:flex;flex-wrap:wrap;flex:1 1 auto;margin:0;padding:0;list-style:none}
.af-nav a{display:flex;align-items:center;gap:7px;min-height:60px;padding:0 10px;color:var(--mu)!important;text-decoration:none;font-weight:500;border-bottom:2px solid transparent;white-space:nowrap}
.af-nav a:hover{color:var(--tx)!important}
.af-nav a svg{flex:none}
.af-nav a.is-active{color:var(--tx)!important;border-bottom-color:var(--ac)}
.af-nav a.is-active svg{color:var(--ac)}
.af-right{display:flex;align-items:center;gap:6px;padding:8px 0;margin-left:auto}
.af-user{display:flex;flex-direction:column;align-items:flex-end;line-height:1.25;padding-right:6px;font-weight:500}
.af-user .af-bal{font-size:12px;font-weight:400;color:var(--mu)}
.af-user a.af-bal{color:var(--al)!important;font-weight:500;text-decoration:none}
.af-ib{width:40px;height:40px;display:grid;place-items:center;border-radius:10px;color:var(--mu)!important;border:0;background:transparent;text-decoration:none;cursor:pointer;padding:0}
.af-ib:hover{background:var(--sf2);color:var(--tx)!important}
.af-ib .af-sun{display:none}
html[data-theme="dark"] .af-ib .af-sun{display:block}
html[data-theme="dark"] .af-ib .af-moon{display:none}

/* ---------- Страница ---------- */
.af-page{max-width:1640px;margin:0 auto;padding:24px}
.af-ph{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:16px}
.af-h1{display:flex;align-items:center;gap:12px;margin:0;font-size:22px;font-weight:600;letter-spacing:-.2px;color:var(--tx)}
.af-hic{width:40px;height:40px;border-radius:10px;background:var(--acbg);color:var(--ac);display:grid;place-items:center;flex:none}
.af-sub{color:var(--mu);font-size:13px;margin-top:4px}
.af-sub strong{color:var(--tx);font-weight:600}
.af-card{background:var(--sf);border:1px solid var(--bd);border-radius:12px;box-shadow:var(--shadow)}
.af-card-h{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--bd);font-weight:600}
.af-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;padding:16px 24px;color:var(--mu);font-size:12px;border-top:1px solid var(--bd);margin-top:8px}
.af-foot a{color:var(--mu)!important}

/* ---------- Формы ---------- */
.af-filters{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;padding:14px;margin-bottom:16px}
.af-fld{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--mu)}
.af-rng{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.af-in,body.af .af-filters input[type=text],body.af .af-filters select,body.af .af-form select,body.af .af-form textarea,body.af .af-form input[type=text],body.af .af-form input[type=password]{height:40px;background:var(--in);border:1px solid var(--bd2);border-radius:8px;color:var(--tx);padding:0 12px;font:inherit;font-size:14px;max-width:100%}
body.af textarea.af-in,body.af .af-form textarea{height:auto;padding:10px 12px}
.af-in:focus,body.af input:focus,body.af select:focus,body.af textarea:focus{outline:2px solid var(--ac);outline-offset:1px}
.af-in::placeholder{color:var(--mu)}
.af-date{width:118px;font-family:var(--mono)!important;font-size:13px!important}
.af-time{width:72px;font-family:var(--mono)!important;font-size:13px!important}
.af-btn,body.af input[type=submit].af-btn{height:40px;padding:0 14px;border-radius:8px;border:1px solid var(--bd2);background:var(--sf2);color:var(--tx)!important;font:inherit;font-weight:500;display:inline-flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;text-decoration:none;white-space:nowrap}
.af-btn:hover{border-color:var(--mu)}
.af-btn.af-pri,body.af input[type=submit].af-pri{background:var(--pri);border-color:var(--pri);color:#fff!important}
.af-btn.af-dng{background:#D93A2F;border-color:#D93A2F;color:#fff!important}
.af-chk{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 12px;border:1px solid var(--bd2);border-radius:8px;cursor:pointer;color:var(--tx);font-size:14px}
.af-chk input{width:16px;height:16px;accent-color:var(--ac);margin:0}
.af-grow{flex:1 1 auto}

/* ---------- Список объектов слева (select multiple + надстройка af.js) ---------- */
.af-split{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start}
.af-split>.af-main{flex:999 1 640px;min-width:0}
.af-side{flex:0 0 auto;width:260px;min-width:200px;max-width:100%;display:flex;flex-direction:column;overflow:hidden}
.af-side .af-side-h{padding:12px;border-bottom:1px solid var(--bd);display:flex;flex-direction:column;gap:8px}
.af-side select[multiple]{width:100%;min-height:420px;border:0;background:var(--sf);color:var(--tx);font:inherit;padding:6px}
.af-ol{list-style:none;margin:0;padding:6px;max-height:640px;overflow:auto}
.af-ol label{display:flex;align-items:center;gap:10px;min-height:38px;padding:0 10px;border-radius:8px;cursor:pointer;color:var(--tx)}
.af-ol label:hover{background:var(--hov)}
.af-ol label.is-on{background:var(--acbg)}
.af-ol input{width:16px;height:16px;accent-color:var(--ac);margin:0;flex:none}

/* ---------- Таблицы, которые собирает сервер ---------- */
.af-scroll{overflow-x:auto}
.af-table{width:100%;border-collapse:collapse;margin:0}
.af-table th{font-size:12px;font-weight:500;color:var(--mu)!important;text-align:left;padding:10px 12px;border-bottom:1px solid var(--bd);white-space:nowrap;background:var(--sf);width:auto!important}
.af-table td{padding:10px 12px;border-bottom:1px solid var(--row);vertical-align:top;color:inherit}
.af-table tr:last-child td{border-bottom:0}
.af-table tbody tr:hover td{background:var(--hov)}
.af-table img{vertical-align:middle}
/* Цвета строк из WebServer.inc (BodyTR1*) - смысл тот же, палитра новая */
.af-table tr[style*="navy"]{color:var(--c-in)!important}
.af-table tr[style*="olive"]{color:var(--c-out)!important}
.af-table tr[style*="red"]{color:var(--al)!important}
.af-table tr[style*="red"] td{background:var(--alrow)}
.af-table tr[style*="maroon"]{color:var(--c-mar)!important}
.af-table tr[style*="green"]{color:var(--ok)!important}
.af-table tr[style*="255, 0, 140"]{color:var(--c-req)!important}
.af-table tr[style*="silver"],.af-table tr[style*="grey"]{color:var(--mu)!important}
.af-table tr[style*="170, 170, 0"]{color:var(--wa)!important}
/* Кнопка действия в журнале (BodyTD14: showAlarmWindow) */
.af-table a[onclick*="showAlarmWindow"]{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 10px;border-radius:8px;border:1px solid var(--bd2);background:var(--sf2);color:var(--tx)!important;text-decoration:none;font-size:13px;font-weight:500;white-space:nowrap}
.af-table a[onclick*="showAlarmWindow"]:hover{border-color:var(--mu)}
.af-table a[onclick*="showAlarmWindow"] img{width:16px;height:16px}
.af-table tr[style*="red"] a[onclick*="showAlarmWindow"]{background:#D93A2F;border-color:#D93A2F;color:#fff!important}
.af-table a[onclick*="openImageWindow"]{color:inherit}
/* Отчёт о маршруте */
.af-table tr[style*="border-bottom"]{border:0!important}
.af-table td[style*="text-align: right"] a{font-weight:500}

/* ---------- Параметры плитками ---------- */
.af-tiles,.af-tiles tbody{display:block}
.af-tiles tbody{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.af-tiles tr{display:flex;flex-direction:column;gap:6px;background:var(--sf);border:1px solid var(--bd);border-radius:12px;padding:16px;min-height:100px;box-shadow:var(--shadow)}
.af-tiles td{display:block;padding:0;border:0}
.af-tiles td:first-child{color:var(--mu);font-size:13px}
.af-tiles td:first-child a{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--mu)!important;text-decoration:none}
.af-tiles td:first-child a::after{content:"";width:18px;height:18px;flex:none;background:var(--link);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 17l5-5 4 4 8-8'/%3E%3Cpath d='M15 8h5v5'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 17l5-5 4 4 8-8'/%3E%3Cpath d='M15 8h5v5'/%3E%3C/svg%3E") center/contain no-repeat}
.af-tiles td:first-child a:hover{color:var(--tx)!important}
.af-tiles a img,.af-cmds a img{display:none}
.af-tiles td:last-child{font-family:var(--mono);font-size:22px;font-weight:500;letter-spacing:-.4px;color:var(--tx);word-break:break-word}
.af-tiles tr:has(a):hover{border-color:var(--ac)}

/* ---------- Команды карточками ---------- */
.af-cmds,.af-cmds tbody{display:block}
.af-cmds tbody{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:12px}
.af-cmds tr{display:flex;flex-direction:column;gap:8px;background:var(--sf);border:1px solid var(--bd);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow)}
.af-cmds td{display:block;padding:0;border:0}
.af-cmds td:first-child a{display:flex;align-items:center;gap:10px;font-weight:600;font-size:15px;color:var(--tx)!important;text-decoration:none}
.af-cmds td:first-child a::before{content:"";width:36px;height:36px;flex:none;border-radius:10px;background:var(--pri) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M8 5.5v13l11-6.5z'/%3E%3C/svg%3E") center/16px no-repeat}
.af-cmds td:first-child a:hover::before{filter:brightness(1.1)}
.af-cmds td:last-child{font-family:var(--mono);font-size:12px;color:var(--mu);background:var(--sf2);border-radius:6px;padding:4px 8px;align-self:flex-start;word-break:break-all}
.af-cmds tr:hover{border-color:var(--ac)}

/* ---------- Состояния (пилюли) ---------- */
.af-pill{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:500;white-space:nowrap;line-height:1}
.af-pill i{width:7px;height:7px;border-radius:50%;background:currentColor;display:block}
.af-p-al{background:var(--albg);color:var(--al)}
.af-p-ok{background:var(--okbg);color:var(--ok)}
.af-p-on{background:var(--onbg);color:var(--on)}
.af-p-off{background:var(--offbg);color:var(--off)}
.af-p-wa{background:var(--wabg);color:var(--wa)}
.af-p-nl{background:var(--nlbg);color:var(--nl)}
.af-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:8px;vertical-align:middle;background:var(--mu)}

/* Фильтры-счётчики над списком объектов */
.af-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
.af-chip{display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 14px;border:1px solid var(--bd2);border-radius:999px;background:var(--sf);color:var(--tx);font:inherit;font-size:14px;cursor:pointer}
.af-chip b{font-family:var(--mono);font-weight:500;color:var(--mu)}
.af-chip.is-on{border-color:var(--ac);background:var(--acbg)}
.af-chip.is-on b{color:var(--tx)}
.af-chip .af-dot{margin:0}

/* ---------- w2ui (список объектов): только цвета, геометрию считает сам w2ui ---------- */
body.af .w2ui-grid{border:1px solid var(--bd)!important;border-radius:12px;background:var(--sf);font-family:var(--font)}
body.af .w2ui-grid .w2ui-grid-toolbar{background:var(--sf);border-bottom:1px solid var(--bd);box-shadow:none}
body.af .w2ui-grid .w2ui-grid-body{background:var(--sf)}
body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-columns,body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-fcolumns{box-shadow:none;border-bottom:1px solid var(--bd)}
body.af .w2ui-grid .w2ui-grid-body table td.w2ui-head,body.af .w2ui-grid .w2ui-col-header{background:var(--sf)!important;color:var(--mu)!important;border-color:var(--bd)!important;font-weight:500;font-size:12px}
body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-records table tr.w2ui-odd,body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-records table tr.w2ui-even,body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-frecords table tr.w2ui-odd,body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-frecords table tr.w2ui-even{background-color:var(--sf);color:var(--tx);border-bottom:1px solid var(--row)}
body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-records table tr.w2ui-odd:hover,body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-records table tr.w2ui-even:hover{background-color:var(--hov)}
body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-records table tr.w2ui-selected,body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-records table tr.w2ui-selected td{background-color:var(--acbg)!important;color:var(--tx)!important}
body.af .w2ui-grid .w2ui-grid-body table td{border-right-color:var(--row)!important;border-bottom-color:var(--row)!important;font-size:14px}
body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-records table tr.af-alarm td{background-color:var(--alrow)}
body.af .w2ui-grid .w2ui-grid-toolbar .w2ui-grid-search-input .w2ui-search-all{background:var(--in)!important;color:var(--tx)!important;border-color:var(--bd2)!important;border-radius:8px!important}
body.af .w2ui-grid .w2ui-grid-toolbar .w2ui-tb-button,body.af .w2ui-toolbar .w2ui-tb-button .w2ui-tb-text{color:var(--tx)}
body.af .w2ui-grid .w2ui-grid-toolbar .w2ui-grid-searches{background:var(--sf2);border-color:var(--bd)}
body.af .w2ui-grid .w2ui-grid-body .w2ui-grid-empty-msg{background:var(--sf);color:var(--mu)}
.af-obj{display:inline-flex;align-items:center;gap:8px;color:var(--tx)!important;font-weight:600;text-decoration:none}
.af-obj:hover{text-decoration:underline}
.af-obj img{width:18px;height:18px}
html[data-theme="dark"] .w2ui-overlay,html[data-theme="dark"] .w2ui-overlay .w2ui-grid-search-advanced,html[data-theme="dark"] .w2ui-menu{background:var(--sf2)!important;color:var(--tx)!important}

/* ---------- jQuery UI: вкладки и календарь ---------- */
body.af .ui-widget{font-family:var(--font)}
body.af .ui-datepicker{background:var(--sf);border:1px solid var(--bd);border-radius:10px;color:var(--tx);box-shadow:0 8px 24px rgba(16,24,40,.12);padding:6px}
body.af .ui-datepicker .ui-widget-header{background:var(--sf2);border:0;border-radius:8px;color:var(--tx)}
body.af .ui-datepicker select{background:var(--in);color:var(--tx);border:1px solid var(--bd2);border-radius:6px}
body.af .ui-datepicker .ui-state-default{background:var(--sf);border:1px solid var(--bd);color:var(--tx);border-radius:6px;text-align:center}
body.af .ui-datepicker .ui-state-highlight{border-color:var(--ac)}
body.af .ui-datepicker .ui-state-active,body.af .ui-datepicker .ui-state-hover{background:var(--pri);border-color:var(--pri);color:#fff}
body.af .ui-datepicker th{color:var(--mu)}

/* Собственные вкладки (карточка объекта, окно тревоги) */
.af-tabs{display:flex;gap:4px;border-bottom:1px solid var(--bd);padding:0 8px;margin:0;list-style:none;background:var(--sf)}
.af-tabs a{display:flex;align-items:center;gap:8px;min-height:46px;padding:0 14px;color:var(--mu)!important;text-decoration:none;font-weight:500;border-bottom:2px solid transparent}
.af-tabs a.is-active{color:var(--tx)!important;border-bottom-color:var(--ac)}
.af-tabs a.is-active svg{color:var(--ac)}
.af-tabpane{display:none}
.af-tabpane.is-active{display:block}
.af-frame{display:block;width:100%;border:0;background:var(--sf)}
.af-photo{max-width:100%;height:auto;display:block;border-radius:10px}

/* ---------- Карточка объекта (objectinfo.html внутри iframe) ---------- */
.af-kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1px;background:var(--bd);margin:0}
.af-kv>div{background:var(--sf);padding:14px 18px}
.af-kv dt{font-size:12px;color:var(--mu);margin-bottom:4px}
.af-kv dd{margin:0;font-weight:500;word-break:break-word}
.af-note{margin:18px;padding:16px 18px;border-radius:10px;background:var(--wabg);color:var(--tx)}
.af-note h3{margin:0 0 6px;font-size:13px;font-weight:600;color:var(--wa)}

/* ---------- Карта ---------- */
.af-maps td b{display:block;margin-bottom:6px}
.af-maps iframe{border:1px solid var(--bd)!important;border-radius:10px;display:block;background:var(--sf2)}

/* ---------- Графики (jscharts рисует на canvas фиксированного размера) ---------- */
.af-chart{overflow-x:auto;padding:12px}
.af-charts{display:grid;grid-template-columns:repeat(auto-fit,minmax(520px,1fr));gap:16px;margin-top:16px}
html[data-theme="dark"] .af-chart>div{filter:invert(.9) hue-rotate(180deg)}

/* ---------- Всплывающие окна ---------- */
body.af-pop{padding:16px}
.af-pop-h{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}
.af-pop-t{font-size:20px;font-weight:600}
.af-band{display:flex;align-items:center;gap:12px;background:#B4231B;color:#fff;padding:16px 20px;font-size:13px;font-weight:600;letter-spacing:.8px;text-transform:uppercase}
.af-band svg{flex:none}
.af-alarmtext{margin:18px 20px;background:var(--albg);border-radius:10px;padding:14px 16px;font-size:15px;color:var(--tx)}
.af-cancel{border-top:1px solid var(--bd);background:var(--sf);padding:16px 20px}
.af-cancel form{display:flex;flex-wrap:wrap;gap:10px;align-items:stretch;margin:0}
.af-cancel select{flex:1 1 220px}
.af-cancel textarea{flex:1 1 100%;order:2;min-height:72px;float:none!important;margin:0!important;width:100%}
.af-cancel input[type=submit]{order:3;flex:1 1 100%;height:46px;font-size:15px}

/* ---------- Вход и служебные страницы ---------- */
.af-auth{display:flex;flex-wrap:wrap;min-height:100vh}
.af-auth-side{flex:1 1 420px;background:#1E3A8A;color:#fff;padding:48px;display:flex;flex-direction:column;justify-content:space-between;gap:40px}
html[data-theme="dark"] .af-auth-side{background:#10233F}
.af-auth-side img{max-height:48px;width:auto;display:block}
.af-auth-t{font-size:32px;font-weight:600;line-height:1.2;letter-spacing:-.5px}
.af-auth-s{font-size:17px;color:#DCE6FA;margin-top:12px;max-width:460px}
.af-feat{display:flex;flex-direction:column;gap:12px;margin-top:32px}
.af-feat div{display:flex;align-items:center;gap:12px;color:#DCE6FA}
.af-feat i{width:36px;height:36px;border-radius:10px;background:rgba(255,255,255,.12);display:grid;place-items:center;flex:none;color:#fff}
.af-auth-copy{font-size:12px;color:#C5D3EE}
.af-auth-copy a{color:#fff!important}
.af-auth-main{flex:1 1 480px;display:flex;flex-direction:column;padding:24px 32px}
.af-auth-form{width:100%;max-width:380px;margin:auto;display:flex;flex-direction:column;gap:18px}
.af-auth-form h3{margin:0;font-size:24px;font-weight:600}
.af-auth-form label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:500}
.af-auth-form input[type=text],.af-auth-form input[type=password]{width:100%;height:48px;font-size:15px;padding:0 14px}
.af-auth-form .af-btn{height:48px;font-size:15px;font-weight:600;width:100%}
.af-auth-hint{font-size:13px;color:var(--mu);border-top:1px solid var(--bd);padding-top:16px}
.af-msg{max-width:520px;margin:12vh auto;padding:32px;text-align:center}
.af-msg p{margin:0 0 16px;font-size:16px}

/* ---------- Телефон ---------- */
@media (max-width:760px){
  .af-top{padding:0 12px;gap:0 8px}
  .af-srv{max-width:120px}
  .af-nav{position:fixed;left:0;right:0;bottom:0;z-index:50;flex-wrap:nowrap;overflow-x:auto;background:var(--top);border-top:1px solid var(--bd);padding:4px 4px calc(6px + env(safe-area-inset-bottom))}
  .af-nav a{flex:1 0 72px;flex-direction:column;gap:3px;min-height:52px;justify-content:center;font-size:11px;padding:0 4px;border-bottom:0}
  .af-nav a.is-active{color:var(--ac)!important}
  body.af{padding-bottom:72px}
  .af-page{padding:16px}
  .af-side{width:100%!important;flex-basis:100%}
  .af-side select[multiple]{min-height:160px}
  .af-ol{max-height:220px}
  .af-cmds tbody,.af-tiles tbody{grid-template-columns:1fr}
  .af-charts{grid-template-columns:1fr}
  .af-auth-side{padding:28px 24px;flex-basis:100%}
  .af-auth-main{padding:20px}
}
@media print{.af-top,.af-foot,.af-nav{display:none}}
