/* Оформление портала. Раньше эти 55 КБ ехали ВНУТРИ каждой страницы: браузеру
   негде было их держать, и касса получала их заново при каждом открытии
   (владелец 09.09: страница 250 КБ, 92 брошенных загрузки за сутки).
   Отдельным файлом они кешируются на неделю (nginx: expires 7d), а в адресе
   стоит номер сборки — после выкладки браузер возьмёт свежие, а не старые. */
    /* === Шрифты ФОК: самохостинг woff2 (152-ФЗ, без Google CDN; cyrillic+latin) === */
    @font-face{font-family:'Golos Text';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/golos-text-400-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}
    @font-face{font-family:'Golos Text';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/golos-text-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Golos Text';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/golos-text-500-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}
    @font-face{font-family:'Golos Text';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/golos-text-500-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Golos Text';font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/golos-text-600-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}
    @font-face{font-family:'Golos Text';font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/golos-text-600-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Montserrat';font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/montserrat-700-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}
    @font-face{font-family:'Montserrat';font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/montserrat-700-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Montserrat';font-style:normal;font-weight:800;font-display:swap;src:url(../fonts/montserrat-800-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}
    @font-face{font-family:'Montserrat';font-style:normal;font-weight:800;font-display:swap;src:url(../fonts/montserrat-800-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Spline Sans Mono';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/spline-sans-mono-500-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Spline Sans Mono';font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/spline-sans-mono-600-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    /* === Дизайн-система ФОК (перенос из FOK APP/fok.css, ADR 0023) === */
    :root{
      --bg:oklch(0.984 0.004 250); --surface:#fff; --sidebar:oklch(0.991 0.004 250);
      --line:oklch(0.912 0.006 250); --line-soft:oklch(0.944 0.005 250);
      --ink:#20294e; --ink-2:oklch(0.46 0.03 262); --ink-3:oklch(0.60 0.025 262); --ink-4:oklch(0.72 0.02 262);
      --navy:#20294e; --brand:#3a78c2; --brand-ink:#2b5b97;
      --brand-bg:oklch(0.955 0.028 250); --brand-bg2:oklch(0.92 0.05 250); --cyan:#1ec7f8;
      --h-amber:#e8920f; --h-green:#4fa950; --h-teal:#16b6e8; --h-blue:#3a78c2; --h-violet:#9700d3; --h-coral:#e4194c;
      --amber-bg:oklch(0.955 0.045 80); --green-bg:oklch(0.955 0.045 150); --teal-bg:oklch(0.957 0.04 225);
      --blue-bg:oklch(0.955 0.04 250); --coral-bg:oklch(0.955 0.045 18); --hover:oklch(0.95 0.006 250);
      --radius:12px; --radius-s:8px; --radius-l:18px;
      --shadow-sm:0 1px 2px oklch(0.4 0.02 60/0.06),0 1px 1px oklch(0.4 0.02 60/0.04);
      --shadow-md:0 4px 14px oklch(0.4 0.02 60/0.08),0 1px 3px oklch(0.4 0.02 60/0.05);
      --shadow-lg:0 18px 48px oklch(0.35 0.02 60/0.18),0 4px 12px oklch(0.35 0.02 60/0.08);
      --sidebar-w:264px; --topbar-h:60px;
      --font:"Golos Text",-apple-system,"Segoe UI",Roboto,sans-serif;
      --display:"Montserrat","Golos Text",sans-serif;
      --mono:"Spline Sans Mono",ui-monospace,"SF Mono",monospace;
      --ease:cubic-bezier(.22,.61,.36,1);
    }
    /* === Тёмная тема (только внутренний портал .has-nav; витрина остаётся светлой) === */
    html[data-theme="dark"] .app.has-nav{
      color-scheme:dark;
      --bg:oklch(0.205 0.012 262); --surface:oklch(0.252 0.014 262); --sidebar:oklch(0.183 0.012 262);
      --line:oklch(0.33 0.014 262); --line-soft:oklch(0.285 0.013 262);
      --ink:oklch(0.95 0.012 250); --ink-2:oklch(0.80 0.02 250); --ink-3:oklch(0.64 0.02 250); --ink-4:oklch(0.52 0.02 250);
      --navy:oklch(0.95 0.012 250); --brand:#5b95d6; --brand-ink:#8bb6e9;
      --brand-bg:oklch(0.31 0.05 255); --brand-bg2:oklch(0.36 0.07 255); --cyan:#46d4fb;
      --amber-bg:oklch(0.33 0.055 80); --green-bg:oklch(0.33 0.05 150); --teal-bg:oklch(0.33 0.05 225);
      --blue-bg:oklch(0.33 0.05 255); --coral-bg:oklch(0.33 0.055 18);
      --hover:oklch(0.30 0.014 262);
      --shadow-sm:0 1px 2px oklch(0 0 0/0.4); --shadow-md:0 4px 14px oklch(0 0 0/0.45),0 1px 3px oklch(0 0 0/0.35);
      --shadow-lg:0 18px 48px oklch(0 0 0/0.6),0 4px 12px oklch(0 0 0/0.4);
    }
    html[data-theme="dark"] .app.has-nav .topbar{background:oklch(0.205 0.012 262/.85);}
    html[data-theme="dark"] .app.has-nav .botnav{background:oklch(0.183 0.012 262/.95);}
    *{box-sizing:border-box;}
    /* обводка иконок (symbol через <use> наследует stroke по CSS) */
    .nav-item svg,.botnav svg,.ac-ic svg,.icon-btn svg,.sidebar-foot svg{fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
    html,body{margin:0;height:100%;}
    body{font-family:var(--font);background:var(--bg);color:var(--ink);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased;}
    /* === Версия для слабовидящих (ГОСТ Р 52872-2019) ===
       Раньше «режим» только увеличивал шрифт на полтора пункта — по сути ничего не
       давал. Теперь настоящая версия: размер, цветовая схема, межбуквенный интервал,
       отключение картинок. Настройки — на <body> в data-атрибутах, хранятся в
       localStorage; включается ссылкой в подвале (владелец 09.08: «или сделать
       чтобы работало, или убрать совсем»).
       Масштаб — через `zoom`: почти все размеры в этой таблице стилей в пикселях,
       и менять их поштучно на em пришлось бы во всём файле; zoom увеличивает всё
       разом, включая поля ввода и кнопки. */
    body.a11y{font-size:16px;}
    body.a11y[data-a11y-size="2"]{zoom:1.25;}
    body.a11y[data-a11y-size="3"]{zoom:1.5;}
    body.a11y[data-a11y-space="2"]{letter-spacing:.06em;word-spacing:.12em;}
    body.a11y[data-a11y-space="3"]{letter-spacing:.12em;word-spacing:.24em;}
    /* Цветовые схемы. Переопределяем токены на body — их наследует всё внутри. */
    body.a11y{--bg:#fff;--surface:#fff;--sidebar:#fff;--line:#000;--line-soft:#000;
      --ink:#000;--ink-2:#000;--ink-3:#000;--ink-4:#000;--navy:#000;
      --brand:#000;--brand-ink:#000;--brand-bg:#fff;--brand-bg2:#fff;--hover:#e8e8e8;
      --amber-bg:#fff;--green-bg:#fff;--teal-bg:#fff;--blue-bg:#fff;--coral-bg:#fff;
      --shadow-sm:none;--shadow-md:none;--shadow-lg:none;}
    body.a11y[data-a11y-scheme="bw"]{--bg:#000;--surface:#000;--sidebar:#000;--line:#fff;--line-soft:#fff;
      --ink:#fff;--ink-2:#fff;--ink-3:#fff;--ink-4:#fff;--navy:#fff;--brand:#fff;--brand-ink:#fff;
      --brand-bg:#000;--brand-bg2:#000;--hover:#333;
      --amber-bg:#000;--green-bg:#000;--teal-bg:#000;--blue-bg:#000;--coral-bg:#000;}
    body.a11y[data-a11y-scheme="bb"]{--bg:#f7f3d6;--surface:#f7f3d6;--sidebar:#f7f3d6;--line:#4a3c1f;--line-soft:#4a3c1f;
      --ink:#4a3c1f;--ink-2:#4a3c1f;--ink-3:#4a3c1f;--ink-4:#4a3c1f;--navy:#4a3c1f;--brand:#4a3c1f;--brand-ink:#4a3c1f;
      --brand-bg:#f7f3d6;--brand-bg2:#f7f3d6;--hover:#e8e0b8;
      --amber-bg:#f7f3d6;--green-bg:#f7f3d6;--teal-bg:#f7f3d6;--blue-bg:#f7f3d6;--coral-bg:#f7f3d6;}
    body.a11y[data-a11y-scheme="cb"]{--bg:#9dd1ff;--surface:#9dd1ff;--sidebar:#9dd1ff;--line:#063462;--line-soft:#063462;
      --ink:#063462;--ink-2:#063462;--ink-3:#063462;--ink-4:#063462;--navy:#063462;--brand:#063462;--brand-ink:#063462;
      --brand-bg:#9dd1ff;--brand-bg2:#9dd1ff;--hover:#7fbdf2;
      --amber-bg:#9dd1ff;--green-bg:#9dd1ff;--teal-bg:#9dd1ff;--blue-bg:#9dd1ff;--coral-bg:#9dd1ff;}
    /* Убираем украшательства: цветные подложки, градиенты, тени, скруглённые «таблетки»
       со своим фоном — в этих режимах они съедают контраст. */
    body.a11y .sc-hero,body.a11y .hero,body.a11y .sc-tile,body.a11y .svc-card-top,
    body.a11y .lk-slide,body.a11y .lk-slide-item{background:var(--surface)!important;color:var(--ink)!important;}
    body.a11y .card,body.a11y .pill,body.a11y button,body.a11y .btn,body.a11y input,
    body.a11y select,body.a11y textarea{background:var(--surface);color:var(--ink);border:1px solid var(--line);
      box-shadow:none;background-image:none;}
    body.a11y a{text-decoration:underline;}
    /* Цветные плашки (тестовый режим, «заявка принята») в схемах становятся нечитаемыми:
       у них свой фон инлайном. Приводим к схеме. */
    body.a11y [style*="background"]:not(.sw),body.a11y .sc-notice,body.a11y [role="status"]{
      background:var(--surface)!important;background-image:none!important;color:var(--ink)!important;
      border-color:var(--line)!important;}
    body.a11y .sc-notice a,body.a11y [role="status"] a{color:var(--ink)!important;}
    /* Полупрозрачные подложки шапок заданы не токенами — иначе в тёмной схеме они
       остаются светлыми полосами. */
    body.a11y .pubhead,body.a11y .topbar,body.a11y .botnav,body.a11y .sidebar{
      background:var(--surface)!important;backdrop-filter:none;}
    body.a11y .av{background:var(--surface);color:var(--ink);border:1px solid var(--line);}
    /* Картинки по требованию отключаются (сами SVG-иконки и QR-пропуск — не картинки). */
    body.a11y[data-a11y-images="off"] img{display:none;}
    /* Панель настроек версии. */
    .a11ybar{display:none;align-items:center;gap:14px;flex-wrap:wrap;padding:10px 16px;
      background:var(--surface);color:var(--ink);border-bottom:2px solid var(--line);font-size:15px;}
    body.a11y .a11ybar{display:flex;}
    .a11ybar b{font-weight:700;}
    .a11ybar .g{display:flex;align-items:center;gap:6px;}
    .a11ybar .g>span{font-size:13px;}
    .a11ybar button{background:var(--surface);color:var(--ink);border:1px solid var(--line);
      border-radius:0;padding:4px 10px;font-size:15px;font-weight:600;cursor:pointer;box-shadow:none;}
    .a11ybar button[aria-pressed="true"]{background:var(--ink);color:var(--bg);}
    .a11ybar .sw{width:30px;height:26px;font-size:13px;font-weight:700;}
    .a11ybar .off{margin-left:auto;text-decoration:underline;}
    a{color:var(--brand-ink);text-decoration:none;} a:hover{text-decoration:underline;}
    h1{font-family:var(--display);font-size:26px;font-weight:700;letter-spacing:-.02em;margin:0 0 4px;color:var(--navy);}
    h2{font-size:15px;font-weight:700;margin:22px 0 12px;}
    .muted{color:var(--ink-3);font-size:13px;} .errors{color:var(--h-coral);font-weight:600;font-size:13px;margin:4px 0;}
    p{margin:8px 0;} ul{margin:8px 0;padding-left:20px;}

    /* shell */
    .app{height:100%;}
    .app.has-nav{display:grid;grid-template-columns:var(--sidebar-w) 1fr;overflow:hidden;}
    .sidebar{background:var(--sidebar);border-right:1px solid var(--line);display:flex;flex-direction:column;height:100vh;overflow:hidden;}
    .brand{display:flex;align-items:center;gap:11px;padding:14px 16px;height:var(--topbar-h);border-bottom:1px solid var(--line-soft);}
    .brand .logo svg{height:28px;width:auto;display:block;}
    .brand .org b{display:block;font-family:var(--display);font-size:13.5px;font-weight:800;letter-spacing:.01em;text-transform:uppercase;color:var(--navy);}
    .brand .org span{display:block;font-size:11px;color:var(--ink-3);}
    .nav{flex:1;overflow-y:auto;padding:8px 10px 12px;min-height:0;}
    .nav-sep{border-top:1px solid var(--line-soft);margin:10px 6px 4px;}
    /* вкладки хаба «Документооборот» + чипы-фильтры видов приказов */
    .dtabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:0 0 16px;flex-wrap:wrap;}
    .dtabs a{padding:8px 13px;font-size:13.5px;font-weight:500;color:var(--ink-2);border-bottom:2px solid transparent;margin-bottom:-1px;}
    .dtabs a:hover{color:var(--ink);text-decoration:none;}
    .dtabs a.active{color:var(--brand-ink);border-color:var(--brand);font-weight:600;}
    .pillrow{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 14px;}
    .pillrow a{font-size:12.5px;padding:4px 12px;border-radius:14px;border:1px solid var(--line);color:var(--ink-2);}
    .pillrow a:hover{background:var(--hover);text-decoration:none;}
    .pillrow a.active{background:var(--brand-bg);border-color:var(--brand-bg);color:var(--brand-ink);font-weight:600;}
    /* сворачиваемые группы меню: заголовок — кнопка, стрелка поворачивается */
    .nav-group-toggle{display:flex;align-items:center;width:100%;background:transparent;border:0;cursor:pointer;text-align:left;box-shadow:none;font-weight:600;}
    .nav-group-toggle:hover{background:transparent;border:0;box-shadow:none;color:var(--ink-2);}
    .nav-group-toggle svg{width:11px;height:11px;margin-left:auto;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:.7;transition:transform .15s var(--ease);}
    .nav-group.collapsed .nav-group-toggle svg{transform:rotate(-90deg);}
    .nav-group.collapsed .nav-group-items{display:none;}
    .nav-group-title{font-family:var(--mono);font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-4);padding:14px 10px 6px;}
    .nav-item{display:flex;align-items:center;gap:11px;padding:8px 10px;border-radius:var(--radius-s);color:var(--ink-2);font-size:13.5px;font-weight:500;transition:background .12s,color .12s;}
    .nav-item:hover{background:var(--hover);color:var(--ink);text-decoration:none;}
    .nav-item.active{background:var(--brand-bg);color:var(--brand-ink);font-weight:600;}
    .nav-item svg{width:18px;height:18px;flex:none;}
    .nav-item .count{margin-left:auto;font-family:var(--mono);font-size:11px;font-weight:700;background:var(--brand);color:#fff;border-radius:20px;padding:1px 7px;min-width:20px;text-align:center;}
    /* Сумма бейджей раздела — только на СВЁРНУТОМ заголовке: раскрытый показывает свои (23.09). */
    .nav-group-toggle .count{display:none;margin-left:auto;margin-right:6px;font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:0;background:var(--brand);color:#fff;border-radius:20px;padding:0 6px;min-width:18px;text-align:center;}
    .nav-group.collapsed .nav-group-toggle .count{display:inline-block;}
    .nav-group.collapsed .nav-group-toggle .count + svg{margin-left:0;}
    .sidebar-user{border-top:1px solid var(--line-soft);padding:8px;}
    /* Вкладки пункта меню наверху страницы (23.09). На телефоне — прокрутка вбок. */
    .page-tabs{display:flex;gap:0;border-bottom:1px solid var(--line);margin:0 0 18px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
    .page-tabs::-webkit-scrollbar{display:none;}
    .page-tabs a{flex:none;white-space:nowrap;padding:9px 12px;font-size:13.5px;color:var(--ink-3);border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:6px;}
    .page-tabs a:hover{color:var(--ink);text-decoration:none;}
    .page-tabs a.on{color:var(--brand-ink);border-bottom-color:var(--brand-ink);font-weight:600;}
    .page-tabs .count{font-family:var(--mono);font-size:11px;font-weight:700;background:var(--brand);color:#fff;border-radius:20px;padding:0 6px;min-width:18px;text-align:center;}

    .main{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--bg);}
    .topbar{height:var(--topbar-h);flex:none;border-bottom:1px solid var(--line);background:oklch(0.991 0.004 250/.85);backdrop-filter:blur(8px);display:flex;align-items:center;gap:12px;padding:0 18px;}
    .topbar .spacer{flex:1;}
    .crumbs{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:13px;min-width:0;}
    .crumbs a{color:var(--ink-3);font-weight:500;}
    .crumbs a:hover{color:var(--brand-ink);}
    .crumbs span{color:var(--ink-3);}
    .crumbs .crumb-sep{color:var(--ink-4);}
    .crumbs .crumb-cur{color:var(--ink);font-weight:600;}
    .icon-btn{width:36px;height:36px;border-radius:9px;border:1px solid transparent;background:transparent;color:var(--ink-2);display:grid;place-items:center;position:relative;transition:background .12s;}
    .icon-btn:hover{background:var(--hover);text-decoration:none;}
    .icon-btn .nd{position:absolute;top:6px;right:6px;min-width:15px;height:15px;padding:0 3px;border-radius:9px;background:var(--h-coral);color:#fff;font-size:9.5px;font-weight:700;line-height:15px;text-align:center;border:1.5px solid var(--sidebar);}
    .av{border-radius:50%;display:grid;place-items:center;font-weight:700;color:#fff;font-size:11px;width:30px;height:30px;flex:none;background:var(--brand);}
    /* меню пользователя: низ сайдбара (раскрытие ВВЕРХ) + аватар в шапке на мобиле */
    .usermenu{position:relative;}
    .usermenu-btn{display:flex;align-items:center;gap:9px;background:transparent;border:0;cursor:pointer;border-radius:var(--radius-s);}
    .usermenu-btn:hover{background:var(--hover);box-shadow:none;}
    .usermenu-pop{position:absolute;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:6px;z-index:70;display:flex;flex-direction:column;gap:2px;min-width:190px;}
    .usermenu-pop[hidden]{display:none;}
    /* Меню клиента в шапке витрины: кружок с инициалами + имя (владелец 07.08). */
    .pubnav .usermenu-btn{padding:3px 6px 3px 3px;color:var(--ink-2);font-size:13.5px;font-weight:600;}
    .pubnav .usermenu-name{white-space:nowrap;}
    .pubnav .usermenu-pop{right:0;top:calc(100% + 6px);}
    /* Меню отделений: попап от левого края кнопки, В СПИСКЕ названия целиком —
       ради этого меню и делали. На КНОПКЕ длинное название («Главное отделение
       (ул. Карла Маркса, 21)») режем многоточием, иначе оно наезжает на логотип
       и вылезает за экран; полное — в подсказке и в раскрытом списке. */
    .branchmenu .usermenu-btn{padding:5px 8px;color:var(--ink-2);font-size:13.5px;font-weight:500;
      border:1px solid var(--line);border-radius:9px;background:var(--surface);
      max-width:min(300px,42vw);}
    .branchmenu .usermenu-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
    .branchmenu .usermenu-btn>span[aria-hidden],.branchmenu .usermenu-caret{flex:none;}
    .branchmenu .usermenu-pop{left:0;top:calc(100% + 6px);min-width:220px;max-width:min(320px,90vw);}
    .branchmenu .usermenu-pop a{white-space:normal;}
    .branchmenu .usermenu-pop a.active{background:var(--brand-bg);color:var(--brand-ink);font-weight:600;}
    /* На телефоне шапка переносится на две строки — кнопке отдаём остаток строки. */
    @media (max-width:560px){ .branchmenu .usermenu-btn{max-width:calc(100vw - 150px);} }
    @media (max-width:560px){ .pubnav .usermenu-name{display:none;} }
    .usermenu-pop a,.usermenu-pop button{display:flex;align-items:center;gap:9px;width:100%;justify-content:flex-start;text-align:left;background:transparent;border:0;color:var(--ink-2);font-size:13.5px;font-weight:500;padding:9px 11px;border-radius:var(--radius-s);cursor:pointer;}
    .usermenu-pop a:hover,.usermenu-pop button:hover{background:var(--brand-bg);color:var(--brand-ink);text-decoration:none;box-shadow:none;}
    .usermenu-pop form{margin:0;}
    .usermenu-org{margin-bottom:4px;padding-bottom:6px;border-bottom:1px solid var(--line-soft);}
    .usermenu-org select{width:100%;font-size:12.5px;padding:7px 9px;}
    .sidebar-user .usermenu-btn{width:100%;padding:7px 8px;text-align:left;}
    .sidebar-user .me{display:flex;flex-direction:column;align-items:flex-start;line-height:1.2;flex:1;min-width:0;}
    .sidebar-user .me b{font-size:13px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:138px;}
    .sidebar-user .me span{font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:138px;}
    .sidebar-user .usermenu-caret{color:var(--ink-4);flex:none;}
    .sidebar-user .usermenu-pop{left:8px;right:8px;bottom:calc(100% + 4px);}
    .topbar-user{display:none;}
    .topbar-user .usermenu-btn{padding:3px;}
    .topbar-user .usermenu-pop{right:0;top:calc(100% + 6px);}
    .content{flex:1;overflow-y:auto;min-height:0;}
    /* break-word: длинная неразрывная строка (URL в статье, e-mail в таблице) не должна
       распирать страницу вбок на телефоне (аудит 27.08). */
    .page{max-width:1080px;margin:0 auto;padding:24px 26px 90px;overflow-wrap:break-word;}

    /* page header */
    .ph{margin-bottom:18px;}
    .ph .eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand-ink);font-weight:600;}

    /* cards / components */
    .card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:18px;margin-bottom:16px;}
    .card>p:first-child{margin-top:0;}
    .actions-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;}
    .action-card{display:flex;align-items:center;gap:13px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:15px;box-shadow:var(--shadow-sm);transition:transform .14s var(--ease),box-shadow .14s,border-color .14s;}
    .action-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--ink-4);text-decoration:none;}
    .action-card .ac-ic{width:42px;height:42px;border-radius:11px;display:grid;place-items:center;flex:none;background:var(--brand-bg);color:var(--brand-ink);}
    .action-card .ac-ic svg{width:21px;height:21px;}
    .action-card b{font-size:14px;font-weight:600;color:var(--ink);letter-spacing:-.01em;}
    .summary-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;align-items:start;}
    .widget{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden;margin-bottom:16px;}
    .widget .wh{display:flex;align-items:center;gap:9px;padding:13px 16px;border-bottom:1px solid var(--line-soft);font-size:13px;font-weight:700;}
    .widget .wb{padding:10px 16px 14px;}

    /* buttons (наши + дизайн) */
    button,.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid var(--brand);background:var(--brand);color:#fff;font-family:inherit;font-weight:600;font-size:13.5px;padding:9px 15px;border-radius:9px;cursor:pointer;transition:background .12s,border-color .12s,box-shadow .12s;white-space:nowrap;}
    button:hover,.btn:hover{background:var(--brand-ink);border-color:var(--brand-ink);box-shadow:var(--shadow-sm);text-decoration:none;}
    button.secondary{background:var(--surface);border-color:var(--line);color:var(--ink);}
    button.secondary:hover{background:var(--bg);border-color:var(--ink-4);}
    button.danger{background:var(--surface);border-color:var(--line);color:var(--h-coral);}
    .btnlike-accent{display:inline-block;padding:7px 12px;font-size:12.5px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--brand);cursor:pointer;}
    .btnlike-accent:hover{background:var(--brand-bg);border-color:var(--brand);}
    button.danger:hover{background:var(--coral-bg);border-color:var(--h-coral);}
    button.inline{padding:7px 12px;font-size:12.5px;}
    .actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px;}
    .actions form{margin:0;}

    /* forms */
    label{display:block;margin:12px 0 5px;font-size:11px;font-family:var(--mono);text-transform:uppercase;letter-spacing:.05em;color:var(--ink-4);font-weight:600;}
    /* Витрина и кабинет — не рабочее место оператора: подписи полей капсом моноширинным
       там читаются тяжело, а на галочках («ФАКТИЧЕСКИЙ АДРЕС СОВПАДАЕТ С…») превращаются
       в сплошной крик. Внутренний портал стиль сохраняет (разбор интерфейса 09.08). */
    body.sc label{font-family:var(--font);font-size:12.5px;text-transform:none;letter-spacing:0;
      color:var(--ink-3);font-weight:600;}
    /* Подпись рядом с галочкой — обычная фраза в строку, а не заголовок над полем. */
    body.sc label.cbx{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--ink);font-weight:400;}
    /* №268: width:auto схлопывал единый рисованный чекбокс (appearance:none) в «палочку» — ширина обязана остаться 19px из общего правила. */
    body.sc label.cbx input{margin:0;}
    input[type=text],input[type=tel],input[type=email],input[type=password],input[type=date],input[type=datetime-local],input[type=time],input[type=number],input[type=search],select,textarea{
      width:100%;padding:10px 12px;font-size:14px;font-family:var(--font);color:var(--ink);background:var(--surface);
      border:1px solid var(--line);border-radius:9px;box-sizing:border-box;}
    /* Единая высота однострочных контролов: time/date/select рисуются браузером по-разному. */
    input[type=text],input[type=tel],input[type=email],input[type=password],input[type=date],input[type=datetime-local],input[type=time],input[type=number],input[type=search],select{
      height:41px;}
    input:focus,select:focus,textarea:focus{outline:0;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-bg);}
    /* Глазок пароля (№536, pw.js): кнопка справа внутри поля, зона нажатия 44×44. */
    .pw-wrap{position:relative;display:block;}
    .pw-wrap > input{padding-right:46px;}
    .pw-eye{position:absolute;right:0;top:50%;transform:translateY(-50%);width:44px;height:44px;
      display:flex;align-items:center;justify-content:center;padding:0;margin:0;border:0;
      background:transparent;box-shadow:none;color:var(--ink-3);cursor:pointer;border-radius:9px;}
    .pw-eye:hover{color:var(--ink);background:transparent;border:0;box-shadow:none;}
    .pw-eye:focus-visible{outline:2px solid var(--brand);outline-offset:-4px;}
    /* Единый чекбокс на всю систему (владелец 20.08: «не нравится, что разные чек-боксы»).
       Было три вида сразу: браузерный по умолчанию, `.cbx` в кабинете и свой квадрат в блоке
       согласий — на одной странице они стояли рядом и выглядели как разные элементы.
       Рисуем сами: браузеры отдают нативный чекбокс каждый по-своему, а `accent-color` не
       чинит ни размер, ни радиус. */
    input[type=checkbox]{
      appearance:none;-webkit-appearance:none;width:19px;height:19px;flex:none;margin:0 2px 0 0;
      border:2px solid var(--ink-4);border-radius:5px;background:var(--surface);
      cursor:pointer;position:relative;vertical-align:-4px;transition:background .12s,border-color .12s;}
    input[type=checkbox]:hover{border-color:var(--brand);}
    input[type=checkbox]:checked{background:var(--brand);border-color:var(--brand);}
    input[type=checkbox]:checked:after{content:"";position:absolute;left:5px;top:1px;
      width:5px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);}
    input[type=checkbox]:disabled{opacity:.5;cursor:default;}
    input[type=checkbox]:focus-visible{outline:0;box-shadow:0 0 0 3px var(--brand-bg);}

    /* tables (наша table → дизайн .tbl) */
    table{width:100%;border-collapse:collapse;font-size:13.5px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm);}
    th{text-align:left;padding:10px 14px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4);font-weight:600;}
    td{text-align:left;padding:11px 14px;border-top:1px solid var(--line-soft);vertical-align:top;}

    /* pills (наши .pill.<status> → дизайн badge) */
    .pill,.badge{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:20px;white-space:nowrap;line-height:1.3;background:var(--bg);color:var(--ink-3);border:1px solid var(--line);}
    /* Подпись из двух строк («Приём заявок откроется» + дата) в «таблетке» не помещалась
       из-за nowrap — разрешаем перенос там, где он задан явно (владелец 08.08). */
    .pill.two-line{white-space:normal;text-align:center;border-radius:12px;padding:6px 10px;}
    .badge.st-prep{background:var(--blue-bg);color:var(--ink);border-color:transparent;}
    .badge.st-recruiting{background:var(--amber-bg);color:var(--ink);border-color:transparent;}
    .badge.st-working{background:var(--green-bg);color:var(--ink);border-color:transparent;}
    .badge.st-graduated{background:var(--teal-bg);color:var(--ink);border-color:transparent;}
    .badge.st-closed{background:var(--coral-bg);color:var(--ink);border-color:transparent;}
    .pill.in_review,.pill.submitted,.pill.pending,.pill.draft,.pill.planned,.pill.in_progress{background:var(--amber-bg);color:#9a5e02;border-color:transparent;}
    .pill.approved,.pill.done,.pill.published,.pill.active{background:var(--green-bg);color:#2f7a31;border-color:transparent;}
    .pill.rejected,.pill.cancelled,.pill.archived{background:var(--coral-bg);color:#c01038;border-color:transparent;}
    /* Статусы меддопуска (отзыв №260): коды valid/expiring/expired/none не совпадали ни с
       одним классом выше, и все четыре состояния рисовались одинаковым серым — «действует»
       было не отличить от «нет допуска». */
    .pill.valid{background:var(--green-bg);color:#2f7a31;border-color:transparent;}
    .pill.expiring{background:var(--amber-bg);color:#9a5e02;border-color:transparent;}
    .pill.expired,.pill.none{background:var(--coral-bg);color:#c01038;border-color:transparent;}
    /* Широкая таблица (напр. документы-основания с кнопкой отзыва) не помещается на
       ноутбуке, а у `table` стоит overflow:hidden — лишнее не прокручивалось, а обрезалось,
       и кнопка становилась недостижимой (отзыв №261). */
    .tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}

    /* checklist (онбординг) */
    .check{display:flex;align-items:center;gap:10px;padding:9px 0;font-size:13.5px;}
    .check+.check{border-top:1px solid var(--line-soft);}
    .check .box{width:20px;height:20px;border-radius:6px;border:1.5px solid var(--line);flex:none;display:grid;place-items:center;color:#fff;font-size:12px;}
    .check.done .box{background:var(--h-green);border-color:var(--h-green);}
    .check.done .ct{color:var(--ink-4);text-decoration:line-through;}

    /* bottom nav (мобайл) */
    .botnav{display:none;}
    .login-wrap{max-width:380px;margin:9vh auto;padding:0 16px;}
    .login-wrap svg{height:44px;width:auto;}

    /* публичная витрина без логина (TБA.2) */
    /* Полоса шапки — во всю ширину (суженная читалась бы как оторвавшаяся карточка),
       а начинка — в той же колонке 1080px, что и контент (владелец 12.08). */
    .pubhead{position:sticky;top:0;z-index:40;background:oklch(0.991 0.004 250/.9);
      backdrop-filter:blur(8px);border-bottom:1px solid var(--line);}
    .pubhead-in{max-width:1080px;margin:0 auto;padding:8px 26px;box-sizing:border-box;
      min-height:var(--topbar-h);display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
    .pubhead .brandlink{display:flex;align-items:center;gap:10px;}
    .pubhead .logo svg{height:26px;width:auto;display:block;}
    .pubnav{display:flex;gap:4px;flex-wrap:wrap;margin-left:auto;align-items:center;}
    .pubnav a{padding:7px 11px;border-radius:9px;font-size:13px;font-weight:600;color:var(--ink-2);}
    .pubnav a:hover{background:var(--hover);text-decoration:none;}
    .pubnav a.active{background:var(--brand-bg);color:var(--brand-ink);}
    /* Разделы витрины — единственная сквозная навигация: есть на каждой странице,
       поэтому не переносятся в две строки, а прокручиваются вбок. */
    .pubtabs{display:flex;gap:2px;align-items:center;overflow-x:auto;scrollbar-width:none;
      margin-left:14px;}
    .pubtabs::-webkit-scrollbar{display:none;}
    .pubtabs a{padding:8px 11px;font-size:14px;font-weight:600;color:var(--ink-2);
      white-space:nowrap;border-radius:9px;}
    .pubtabs a:hover{color:var(--brand-ink);background:var(--hover);text-decoration:none;}
    .pubtabs a.active{color:var(--brand-ink);background:var(--brand-bg);}
    /* На телефоне четвёрка разделов вместе с логотипом и входом в строку не влезает —
       уезжает вторым этажом во всю ширину и прокручивается вбок. */
    @media (max-width:900px){
      .pubtabs{order:3;flex-basis:100%;margin:2px -26px 0;padding:0 26px 4px;}
    }
    @media (max-width:560px){
      /* На телефоне логотип, отделение и «Вход» должны уместиться в ОДНУ строку —
         иначе шапка съедает три этажа. Ужимаем отступы и название отделения. */
      .pubhead-in{padding:8px 14px;gap:8px;}
      .pubhead .logo svg{height:22px;}
      .branchmenu .usermenu-name{max-width:30vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
      .pubtabs{margin:2px -14px 0;padding:0 14px 4px;}
      .pubtabs a{padding:8px 9px;font-size:13.5px;}
    }
    .pubfoot{border-top:1px solid var(--line-soft);margin-top:26px;padding-top:18px;color:var(--ink-3);font-size:13px;}
    /* Вход в версию для слабовидящих — ссылкой в подвале (ГОСТ Р 52872-2019). */
    .pubfoot .a11y-open{background:transparent;border:0;padding:0;color:var(--brand-ink);
      font:inherit;text-decoration:underline;cursor:pointer;box-shadow:none;}
    .appfoot{border-top:1px solid var(--line-soft);margin-top:26px;padding-top:14px;color:var(--ink-3);font-size:12px;display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;}
    .appfoot .ver{font-variant-numeric:tabular-nums;}
    .appfoot .muted{color:var(--ink-3);opacity:.8;}
    .hero{background:linear-gradient(180deg,var(--brand-bg),transparent);border:1px solid var(--line-soft);border-radius:var(--radius-l);padding:26px;margin-bottom:18px;}
    /* --- Витрина (публичные страницы) --- */
    .sc-hero{background:linear-gradient(135deg,var(--navy),var(--brand-ink));color:#fff;border-radius:var(--radius-l);padding:38px 34px;margin-bottom:18px;box-shadow:var(--shadow-md);}
    .sc-hero .eyebrow{color:var(--cyan);}
    .sc-hero h1{color:#fff;font-size:38px;line-height:1.05;max-width:18ch;margin:6px 0 0;}
    .sc-hero p{color:oklch(0.9 0.02 250);font-size:15px;max-width:54ch;margin:12px 0 20px;}
    .sc-hero .btn.secondary{background:rgba(255,255,255,.13);border-color:rgba(255,255,255,.3);color:#fff;}
    .sc-hero .btn.secondary:hover{background:rgba(255,255,255,.22);border-color:rgba(255,255,255,.45);}
    .sc-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px;margin-bottom:22px;}
    .sc-stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:15px 18px;box-shadow:var(--shadow-sm);}
    .sc-stat b{display:block;font-family:var(--display);font-size:30px;font-weight:800;color:var(--brand-ink);line-height:1;}
    .sc-stat span{font-size:12.5px;color:var(--ink-3);}
    .sc-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(176px,1fr));gap:12px;margin-bottom:22px;}
    .sc-tile{border-radius:var(--radius);padding:16px 18px;height:132px;display:flex;flex-direction:column;justify-content:flex-end;color:#fff;font-family:var(--display);font-weight:700;font-size:17px;box-shadow:var(--shadow-sm);transition:transform .14s var(--ease),box-shadow .14s;}
    .sc-tile:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);text-decoration:none;color:#fff;}
    /* Длинное название (напр. ОВЗ с диагнозами) — в 3 строки с «…», полное имя в подсказке (title). */
    .sc-tile .sc-name{display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.2;}
    .sc-tile small{display:block;font-family:var(--font);font-weight:500;font-size:12px;opacity:.85;margin-top:3px;}
    .sc-tile.t-teal,.svc-card-top.t-teal{background:linear-gradient(150deg,var(--h-teal),oklch(0.55 0.13 230));}
    .sc-tile.t-coral,.svc-card-top.t-coral{background:linear-gradient(150deg,var(--h-coral),oklch(0.5 0.19 18));}
    .sc-tile.t-amber,.svc-card-top.t-amber{background:linear-gradient(150deg,var(--h-amber),oklch(0.62 0.16 55));}
    .sc-tile.t-green,.svc-card-top.t-green{background:linear-gradient(150deg,var(--h-green),oklch(0.52 0.14 152));}
    .sc-tile.t-violet,.svc-card-top.t-violet{background:linear-gradient(150deg,var(--h-violet),oklch(0.45 0.21 300));}
    .sc-tile.t-blue,.svc-card-top.t-blue{background:linear-gradient(150deg,var(--h-blue),var(--brand-ink));}
    .action-card.a-green .ac-ic{background:var(--green-bg);color:#2f7a31;}
    .action-card.a-blue .ac-ic{background:var(--blue-bg);color:var(--brand-ink);}
    .action-card.a-amber .ac-ic{background:var(--amber-bg);color:#9a5e02;}
    .action-card.a-violet .ac-ic{background:oklch(0.955 0.05 310);color:var(--h-violet);}
    /* витрина: сетка расписания по дням + цветные чипы по виду */
    .sched{display:flex;flex-direction:column;gap:10px;}
    .sched-day{display:grid;grid-template-columns:128px 1fr;gap:14px;align-items:start;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 16px;box-shadow:var(--shadow-sm);}
    .sched-date{font-family:var(--display);font-weight:700;color:var(--navy);text-transform:capitalize;font-size:14px;padding-top:3px;}
    .sched-date span{display:block;font-family:var(--mono);font-size:12px;color:var(--ink-3);font-weight:500;}
    .sched-chips{display:flex;flex-wrap:wrap;gap:8px;}
    .chip{border-radius:10px;padding:7px 11px;font-size:12.5px;color:#fff;display:inline-flex;flex-direction:column;line-height:1.3;box-shadow:var(--shadow-sm);transition:transform .12s var(--ease);}
    .chip:hover{transform:translateY(-1px);text-decoration:none;color:#fff;}
    .chip b{font-family:var(--mono);font-weight:700;font-size:12.5px;}
    .chip small{opacity:.92;font-size:11px;}
    .chip.t-teal{background:var(--h-teal);} .chip.t-coral{background:var(--h-coral);} .chip.t-amber{background:var(--h-amber);}
    .chip.t-green{background:var(--h-green);} .chip.t-violet{background:var(--h-violet);} .chip.t-blue{background:var(--h-blue);}
    /* витрина: каталог услуг карточками с цветной шапкой по виду */
    .sc-catalog{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:16px;margin-bottom:18px;}
    .svc-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden;display:flex;flex-direction:column;transition:transform .14s var(--ease),box-shadow .14s;}
    .svc-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);}
    .svc-card-top{padding:15px 18px;color:#fff;}
    .svc-card-top b{display:block;font-family:var(--display);font-weight:700;font-size:17px;letter-spacing:-.01em;}
    .svc-card-top span{font-size:12px;opacity:.9;}
    .svc-body{padding:4px 18px 12px;}
    .tariff-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:11px 0;border-top:1px solid var(--line-soft);}
    .tariff-row:first-child{border-top:0;}
    .tariff-row .tr-meta b{font-weight:600;font-size:13.5px;color:var(--ink);}
    .tariff-row .tr-meta span{display:block;font-size:12px;color:var(--ink-3);margin-top:1px;}
    .tariff-row .tr-price{font-family:var(--mono);font-weight:700;font-size:15.5px;color:var(--brand-ink);white-space:nowrap;text-align:right;}
    .tariff-row .tr-price small{display:block;font-family:var(--font);font-weight:500;font-size:10px;color:var(--ink-4);}
    .svc-empty{padding:12px 18px 14px;color:var(--ink-3);font-size:13px;}
    /* адресная книга: панель, вкладки, дерево, карточки */
    .ab-toolbar{display:flex;flex-direction:column;gap:8px;align-items:stretch;margin-bottom:14px;max-width:680px;}
    .ab-toolbar input[type=search]{width:100%;}
    .ab-filters{display:flex;gap:8px;}
    .ab-filters select{flex:1 1 0;min-width:0;}
    @media (max-width:560px){.ab-filters{flex-direction:column;}}
    .ab-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px;}
    /* Вкладка бывает и кнопкой, и ссылкой: у «Клиентов» отбор ушёл на сервер (09.09). */
    .ab-tab{display:inline-block;text-decoration:none;background:transparent;border:0;border-bottom:2px solid transparent;border-radius:0;color:var(--ink-3);font-weight:600;font-size:13.5px;padding:9px 14px;cursor:pointer;}
    .ab-tab:hover{color:var(--ink);background:transparent;box-shadow:none;}
    .ab-tab.active{color:var(--brand-ink);border-bottom-color:var(--brand);}
    .ab-branch{margin-bottom:6px;}
    .ab-branch>summary{font-family:var(--display);font-weight:700;font-size:16px;color:var(--navy);padding:9px 8px;cursor:pointer;border-radius:var(--radius-s);list-style:none;}
    .ab-branch>summary::-webkit-details-marker{display:none;}
    .ab-branch>summary:hover{background:var(--brand-bg);}
    .ab-dept{margin:2px 0 8px 18px;}
    .ab-dept>summary{font-weight:600;font-size:13.5px;color:var(--ink-2);padding:6px 8px;cursor:pointer;border-radius:var(--radius-s);}
    .ab-dept>summary:hover{background:var(--hover);}
    .ab-count{font-family:var(--mono);font-size:11px;color:var(--ink-4);font-weight:600;margin-left:4px;}
    .ab-letter>h3{font-family:var(--display);font-size:17px;color:var(--brand-ink);margin:14px 0 8px;border-bottom:1px solid var(--line-soft);padding-bottom:4px;}
    .org-node{margin:1px 0;}
    .org-row{display:flex;align-items:center;gap:10px;padding:6px 8px;border-radius:var(--radius-s);}
    .org-d>summary.org-row{cursor:pointer;list-style:none;}
    .org-d>summary.org-row::-webkit-details-marker{display:none;}
    .org-d>summary.org-row:hover,.org-leaf:hover{background:var(--hover);}
    .org-twist{flex:none;width:10px;color:var(--ink-4);font-size:11px;transition:transform .12s;}
    .org-d[open]>summary .org-twist{transform:rotate(90deg);}
    .org-ava{width:34px;height:34px;flex:none;border-radius:50%;overflow:hidden;background:var(--brand-bg);display:grid;place-items:center;font-family:var(--display);font-weight:700;font-size:12.5px;color:var(--brand-ink);}
    .org-ava img{width:100%;height:100%;object-fit:cover;}
    .org-info{min-width:0;display:flex;flex-direction:column;}
    .org-name{font-weight:600;font-size:13.5px;color:var(--ink);letter-spacing:-.01em;}
    .org-name:hover{color:var(--brand-ink);}
    .org-pos{font-size:12px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px;}
    .org-dept{font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px;}
    .org-count{margin-left:auto;flex:none;font-family:var(--mono);font-size:11px;color:var(--ink-3);font-weight:600;background:var(--bg);border:1px solid var(--line-soft);border-radius:20px;padding:1px 9px;}
    .org-children{margin-left:18px;border-left:1px solid var(--line);padding-left:5px;}
    /* auto-fill вместо жёстких 9 колонок: на 375px девятая часть строки — 30px, и подписи
       годов («2026») наезжали друг на друга; 56px — min-content кнопки (аудит 27.08). */
    .year-buttons{display:grid;grid-template-columns:repeat(auto-fill,minmax(56px,1fr));gap:6px;margin:2px 0 10px;max-width:560px;}
    .year-buttons button{padding:5px 11px;font-size:13px;font-family:var(--mono);border:1px solid var(--line);border-radius:var(--radius-s);background:var(--surface);color:var(--ink-2);cursor:pointer;box-shadow:none;}
    .year-buttons button:hover{background:var(--hover);color:var(--ink);}
    .year-buttons button.active{background:var(--brand);color:#fff;border-color:var(--brand);font-weight:600;}
    /* min-width колонкам + собственная прокрутка на телефоне: семь 1fr-колонок на 375px
       сминались в ~40px, а их min-content переливался горизонтальной прокруткой во всю
       страницу (мобильный аудит 27.08). Полный «день-режим» — отдельным шагом. */
    .sch-board{display:grid;grid-template-columns:repeat(7,minmax(96px,1fr));gap:6px;margin-top:6px;overflow-x:auto;-webkit-overflow-scrolling:touch;}
    .sch-col{background:var(--bg);border:1px solid var(--line-soft);border-radius:var(--radius-s);padding:5px;min-height:54px;}
    .sch-day{font-weight:700;font-size:11.5px;color:var(--ink-3);text-align:center;margin-bottom:4px;}
    .sch-free{font-size:10.5px;color:var(--ink-4);text-align:center;padding:6px 0;}
    .sch-slot{font-family:var(--mono);font-size:11px;border-radius:5px;padding:3px 5px;margin-bottom:4px;display:flex;flex-direction:column;line-height:1.25;}
    .sch-slot small{font-family:var(--font);font-size:9.5px;opacity:.9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
    .sch-slot.busy{background:var(--coral-bg);color:var(--ink);}
    .sch-slot.own{background:var(--green-bg);color:var(--ink);}
    .sch-counter{display:flex;gap:12px;flex-wrap:wrap;margin:12px 0 16px;}
    .sch-stat{flex:1 1 150px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:14px 16px;}
    .sch-num{font-size:28px;font-weight:700;line-height:1;color:var(--brand);font-variant-numeric:tabular-nums;}
    .sch-lab{margin-top:6px;font-size:11.5px;color:var(--ink-3);}
    .bulk-bar{position:sticky;bottom:0;display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:10px 16px;margin-top:12px;z-index:20;}
    .bulk-bar b{font-variant-numeric:tabular-nums;}
    .bulk-bar[hidden]{display:none;}
    /* №299: панель «выбрать все» и сортируемые заголовки — единый вид во всех списках. */
    .pick-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 6px;font-size:12.5px;}
    .pick-bar .muted{margin-left:auto;}
    th.th-sort{cursor:pointer;user-select:none;}
    th.th-sort:hover{color:var(--brand-ink);}
    th.th-sort::after{content:"↕";opacity:.35;margin-left:5px;font-size:10px;}
    th.th-sort.on::after{opacity:.9;}
    th.th-sort.on[data-dir="asc"]::after{content:"↑";}
    th.th-sort.on[data-dir="desc"]::after{content:"↓";}  /* hidden должен скрывать плашку (перебивает display:flex) */
    /* Постраничный вывод длинных списков (09.09). Заголовок серверной сортировки —
       ссылка, а не кнопка со скриптом: сортируется вся выборка, а не текущая страница. */
    a.th-sort-link{color:inherit;text-decoration:none;display:inline-block;white-space:nowrap;}
    a.th-sort-link:hover{color:var(--brand-ink);text-decoration:underline;}
    th.on a.th-sort-link{color:var(--brand-ink);font-weight:700;}
    .pager{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:12px 0 4px;}
    .pager .pager-count{font-size:12.5px;font-variant-numeric:tabular-nums;}
    .pager .pager-more{white-space:nowrap;}
    .pager .pager-all{font-size:12.5px;}
    /* «Показано X из Y» под коротким списком тоже нужен: человек должен отличать
       «список кончился» от «список обрезали». */
    .pager-total{font-size:12.5px;color:var(--ink-3);margin:8px 0 0;}
    /* Подсказка с числом у графиков и полос (отзыв №393). Одна плашка на страницу,
       текст ставит static/portal/hint.js. Живёт здесь, а не в шаблоне экрана: механизм
       общий, и второй такой же тултип по соседству через месяц разошёлся бы видом. */
    /* Верхним слоем: на телефоне у правого края плашку перекрывала вкладка «Отзыв»
       (z-index 9998) — число было не дочитать. Перехватить клик она не может,
       pointer-events:none, поэтому наверху никому не мешает. */
    .hint-tip{position:fixed;z-index:10000;max-width:260px;padding:6px 9px;border-radius:7px;
      background:var(--surface);color:var(--ink);border:1px solid var(--line);
      box-shadow:var(--shadow-lg);font-size:12.5px;line-height:1.35;white-space:nowrap;
      pointer-events:none;}
    /* Длинную подпись (день + час + единица) переносим, а не режем. */
    .hint-tip{white-space:normal;}
    .hint-tip::after{content:"";position:absolute;left:var(--hint-arrow,50%);margin-left:-5px;
      border:5px solid transparent;border-top-color:var(--line);top:100%;}
    .hint-tip::before{content:"";position:absolute;left:var(--hint-arrow,50%);margin-left:-4px;
      border:4px solid transparent;border-top-color:var(--surface);top:100%;z-index:1;}
    /* Плашка ушла вниз (не влезла сверху) — стрелка разворачивается. */
    .hint-tip.below::after{top:auto;bottom:100%;border-top-color:transparent;
      border-bottom-color:var(--line);}
    .hint-tip.below::before{top:auto;bottom:100%;border-top-color:transparent;
      border-bottom-color:var(--surface);}
    .hint-tip[hidden]{display:none;}
    /* Курсор говорит, что тут есть что посмотреть. */
    [data-hint]{cursor:default;}
    /* Живая подсказка поиска в реестре клиентов (№381). Опирается на .addr-pop —
       он приезжает вместе со страницей (portal/_client_addr.html). */
    .cl-pop div{display:flex;gap:6px;align-items:baseline;flex-wrap:wrap;}
    .cl-pop div.on{background:var(--brand-bg);color:var(--brand-ink);}
    .cl-pop .muted{font-size:12px;}
    .cl-pop .cl-pop-all{border-top:1px solid var(--line);font-size:12.5px;color:var(--brand-ink);font-weight:600;}
    label.cbx[hidden],body.sc label.cbx[hidden]{display:none;}  /* та же грабля, что .bulk-bar: display:flex у body.sc label.cbx перебивал hidden (№286) */
    .gch-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:15px;}
    .gch-title{font-family:var(--display);font-size:24px;font-weight:700;margin:3px 0 0;letter-spacing:-.01em;line-height:1.1;}
    .gch-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:15px 24px;}
    .gch-l{font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;color:var(--ink-4);margin-bottom:3px;}
    .gch-v{font-size:14px;color:var(--ink);font-weight:500;}
    .emp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:12px;margin:4px 0 12px 18px;}
    .emp-card{display:flex;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow-sm);}
    .emp-photo{width:54px;height:54px;flex:none;border-radius:50%;overflow:hidden;background:var(--brand-bg);display:grid;place-items:center;}
    .emp-photo img{width:100%;height:100%;object-fit:cover;}
    .emp-ini{font-family:var(--display);font-weight:700;font-size:18px;color:var(--brand-ink);}
    .emp-info{min-width:0;display:flex;flex-direction:column;}
    .emp-name{font-weight:600;font-size:14px;color:var(--ink);letter-spacing:-.01em;}
    .emp-name:hover{color:var(--brand-ink);}
    .emp-pos{font-size:12.5px;color:var(--ink-2);}
    .emp-org{font-size:11.5px;}
    .emp-contacts{display:flex;flex-direction:column;margin-top:5px;}
    .emp-contacts a{font-size:12px;color:var(--brand-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:230px;}
    @media (max-width:680px){.emp-grid{margin-left:0;grid-template-columns:1fr;}.ab-dept{margin-left:10px;}}
    @media (max-width:680px){.sched-day{grid-template-columns:1fr;gap:8px;}}
    @media (max-width:860px){.pubnav a{padding:6px 8px;font-size:12px;}}

    /* --- Телефон: таблицы (ЛК фаза 5) -------------------------------------------
       Данные в кабинете лежат в таблицах на 4 колонки — на экране 375px они распирали
       страницу вбок. Обычные таблицы прокручиваем внутри себя (страница остаётся по
       ширине экрана), а таблицы с классом `stack-sm` разбираем в карточки: строка =
       карточка, подпись колонки берётся из data-label. */
    @media (max-width:640px){
      table:not(.stack-sm){display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;}
      th,td{padding:9px 10px;}
      /* Палец промахивается по кнопке 36px; 16px в поле — чтобы iOS не зумил при фокусе. */
      button,.btn{min-height:42px;}
      /* Точки слайдера и стрелки — не кнопки-действия, им высота ни к чему (иначе овалы). */
      .lk-dot,.sc-dot,.sc-arrow{min-height:0;}
      input[type=text],input[type=tel],input[type=email],input[type=password],
      input[type=date],input[type=datetime-local],input[type=time],input[type=number],
      input[type=search],select,textarea{font-size:16px;}
      input[type=text],input[type=tel],input[type=email],input[type=password],
      input[type=date],input[type=datetime-local],input[type=time],input[type=number],
      input[type=search],select{height:44px;}
      /* Мультивыбор (группы в приказах) сжимался этой высотой в одну строку — листбоксу
         высота нужна своя (аудит 27.08). */
      select[multiple]{height:auto;min-height:120px;}
      /* Второстепенные колонки реестров-простыней (клиенты — 9 колонок, группы — 12,
         дашборд спорта — 14): на телефоне скрываем размеченное .hide-sm, чтобы ключевое
         читалось без елозанья по горизонтали (аудит 27.08). На десктопе всё как было.
         (Текст комментария не должен содержать слов, которые тесты ищут в HTML страниц.) */
      .hide-sm{display:none !important;}
    }
    @media (max-width:560px){
      table.stack-sm{display:block;width:100%;border:0;background:transparent;box-shadow:none;}
      table.stack-sm thead{display:none;}
      /* tbody тоже блок: иначе браузер оборачивает строки в анонимную таблицу и та
         сжимается по содержимому — карточки выходили в половину экрана. */
      table.stack-sm tbody{display:block;width:100%;}
      table.stack-sm tr{display:block;background:var(--surface);border:1px solid var(--line);
        border-radius:12px;margin-bottom:8px;padding:4px 0;}
      table.stack-sm td{display:flex;justify-content:space-between;align-items:baseline;gap:12px;
        border:0;padding:7px 13px;text-align:right;}
      table.stack-sm td::before{content:attr(data-label);flex:none;text-align:left;
        font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;
        color:var(--ink-4);font-weight:600;}
    }

    /* responsive: мобайл — прячем сайдбар, нижняя навигация */
    @media (max-width:860px){
      .app.has-nav{grid-template-columns:1fr;}
      .sidebar{display:none;}
      .topbar-user{display:block;}
      .page{padding:18px 14px 92px;}
      .summary-grid{grid-template-columns:1fr;}
      h1{font-size:23px;}
      .botnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:50;background:oklch(0.995 0.003 250/.95);backdrop-filter:blur(12px);border-top:1px solid var(--line-soft);padding:6px 6px max(10px,env(safe-area-inset-bottom));}
      .botnav a,.botnav button{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;padding:5px 0;color:var(--ink-4);font-size:10.5px;font-weight:600;border-radius:12px;}
      .botnav a:hover{text-decoration:none;}
      .botnav a.active{color:var(--brand-ink);}
      .botnav svg{width:23px;height:23px;}
      .botnav button{background:transparent;border:0;box-shadow:none;min-height:0;font-family:inherit;cursor:pointer;}
      /* «Меню» открывает полный сайдбар шторкой: до этого 47 страниц (документооборот,
         продажи, аналитика, СКУД…) были с телефона НЕДОСТИЖИМЫ — в нижней панели пять
         пунктов, а сайдбар скрыт (мобильный аудит 27.08). */
      body.nav-open .sidebar{display:flex;position:fixed;top:0;left:0;bottom:0;width:min(320px,86vw);z-index:70;box-shadow:var(--shadow-lg);}
      body.nav-open .nav-backdrop{display:block;position:fixed;inset:0;background:rgba(15,22,30,.45);z-index:60;border:0;padding:0;}
      /* Полосы вкладок (.ab-tabs) не влезают в 375px (у «Клиентов» их девять) и распирали
         страницу вбок — на телефоне прокручиваем полосу саму, как .pubtabs витрины. */
      .ab-tabs{overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
      .ab-tabs::-webkit-scrollbar{display:none;}
      .ab-tabs>*{flex:none;white-space:nowrap;}
      /* Плашка массовых действий прилипала к низу вьюпорта и пряталась ПОД нижней
         навигацией (z-index 50 против 20) — поднимаем её над панелью. */
      .bulk-bar{bottom:calc(64px + env(safe-area-inset-bottom));}
    }
    .nav-backdrop{display:none;}
