/* ======== Брендбук «Ормин» 2.0 (14.10.2026) ========
   Цвета и шрифты клиники вместо серого «как айфон» и чужого зелёного.
   Тёмно-синий (navy) — текст и главное; бирюза (turq) — действие, выбор,
   фокус; оранжевый — внимание; мята — «готово». Текст на бирюзе — только
   тёмно-синий (белый на ней не читается, брендбук). Красного в брендбуке нет —
   он служебный, только «срочно», «долг», «убыток».
   Шрифты лежат в программе (css/fonts) — интернет не нужен: заголовки —
   Ubuntu, текст — Mulish (у неё цифры одной ширины: суммы встают столбиком). */
@font-face { font-family: "Mulish"; src: url("fonts/Mulish-Variable.woff2") format("woff2"); font-weight: 200 1000; font-style: normal; font-display: swap; }
@font-face { font-family: "Ubuntu"; src: url("fonts/Ubuntu-Medium.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: "Ubuntu"; src: url("fonts/Ubuntu-Bold.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; }
:root {
  --bg: #f3f6f7;
  --paper: #ffffff;
  --ink: #002d42;
  --muted: #4d6c7b;
  --line: #dce3e6;
  --line-2: #edf1f2;        /* линия между строками таблицы — тише рамки */
  --fill: #edf1f2;
  --teal: #27beb6;          /* бирюза: заливка выбранного и главной кнопки */
  --teal-ink: #0e7f79;      /* бирюза для текста и ссылок (обычная на белом не читается) */
  --teal-soft: #d4f2f0;
  --teal-10: #eaf8f7;
  --on-teal: #002d42;       /* текст на бирюзе — тёмно-синий (брендбук) */
  --navy: #002d42;
  --navy-20: #ccd5d9;
  --navy-10: #e6eaec;
  --orange: #f4891f;
  --mint: #9acb9e;
  --amber: #b5600f;
  --amber-soft: #fde7d2;
  --rose: #c8372d;
  --rose-soft: #fbe3e1;
  --ok: #3f8f55;
  --ok-soft: #ebf5ec;
  /* Метки разделов — цветом брендбука (решение 14.10.2026: цвет со смыслом,
     а не по кругу): деньги — бирюза, пациенты — мята, медицина — серо-синий,
     склад и аптека — оранжевый. Текст на них — тёмно-синий. */
  --c-fin: #d4f2f0; --c-pac: #d7ead8; --c-med: #e6eaec; --c-skl: #fde7d2;
  /* Край белого блока на сером фоне — волосяной линией тенью: рамка не
     меняет размеров, а у всех карточек, полос и плиток он появляется разом. */
  --shadow: 0 0 0 1px var(--line);
  --shadow-lift: 0 6px 24px rgba(0, 45, 66, .08);   /* единственная тень брендбука */
  --radius: 16px;

  /* ======== ПЛОТНОСТЬ ИНТЕРФЕЙСА ========
     Размеры целей и отступов собраны сюда, в одно место, и больше нигде
     цифрами не пишутся. Причина простая: у клиники два разных рабочих места.
     Регистратура тычет пальцем в планшет — там цель меньше сорока пикселей
     означает промах; врач за двадцатичетырёхдюймовым монитором работает мышью,
     и те же сорок пикселей съедают экран, ради которого монитор и куплен.
     Спорить, кто прав, незачем: пусть каждое место выберет само.

     Обычная плотность — цели под палец (решение заказчика 20.09.2026: в карте
     приёма кнопки компактнее, 34 px, и это отдельная переменная).
     Шрифт поля ввода 16 px не про красоту: поле мельче шестнадцати заставляет
     Safari на планшете наезжать на страницу при касании. */
  --tap: 44px;              /* высота кнопки, дневной полосы, поля */
  --tap-fs: 15px;
  --in-pad: 12px 14px;      /* поле ввода */
  --in-fs: 16px;
  --chip-h: 44px;           /* кнопка-вариант вне карты приёма */
  --chip-pad: 8px 14px;
  --chip-fs: 15px;
  --mchip-h: 32px;          /* она же внутри карты приёма */
  --mchip-pad: 5px 10px;
  --mchip-fs: 13.5px;
  --mod-in-pad: 9px 12px;   /* поле ввода внутри модуля */
  --link-h: 40px;           /* кнопка-ссылка: «ещё зона», «своими словами» */
  --card-pad: 16px 16px 14px;
  --td-pad: 12px 10px;      /* ячейка таблицы */
  --th-pad: 8px 10px;
  --nav-pad: 11px 14px;     /* пункт меню */
  --nav-fs: 15px;
  --h1-fs: 28px;
  --main-pad: 28px 36px 80px;
  --gap: 12px;              /* между карточками */
  /* Шрифт — в общем :root, а не только в компактном виде. До 23.09.2026 эти две
     строки стояли внутри блока компактной плотности, и в обычном виде у
     программы шрифта не было вовсе: браузер брал свой — на Windows это Times
     New Roman. */
  --font: "Mulish", "Segoe UI", -apple-system, sans-serif;
  --head: "Ubuntu", "Segoe UI", sans-serif;
  --serif: "Source Serif 4", "New York", Georgia, serif;
}

/* Компактная плотность — мышь и большой экран. Цели уменьшены до предела,
   на котором мышь ещё не промахивается (порядка тридцати пикселей), а не до
   предела, на котором «ещё видно». Шрифты текста НЕ трогаем: читаемость от
   плотности не зависит, а уменьшенный текст — это не плотнее, это мельче. */
:root[data-den="compact"] {
  --tap: 36px;
  --tap-fs: 14px;
  --in-pad: 9px 12px;
  --in-fs: 14.5px;
  --chip-h: 36px;
  --chip-pad: 6px 12px;
  --chip-fs: 14px;
  --mchip-h: 28px;
  --mchip-pad: 4px 9px;
  --mchip-fs: 13px;
  --mod-in-pad: 7px 10px;
  --link-h: 32px;
  --card-pad: 12px 13px 10px;
  --td-pad: 8px 9px;
  --th-pad: 6px 9px;
  --nav-pad: 8px 12px;
  --nav-fs: 14.5px;
  --h1-fs: 26px;
  --main-pad: 20px 26px 64px;
  --gap: 9px;
}

* { box-sizing: border-box; }
html, body {
  margin: 0; height: 100%;
  background: var(--bg); color: var(--ink);
  font-family: var(--font);
  -webkit-font-smoothing: antialiased;
}
/* Страховка от чужих стилей: что бы ни подгрузили со стороны, страница программы
   должна прокручиваться и оставаться нашей — чужой файл не может запереть прокрутку
   или подменить шрифт всей программы. Однажды это уже случалось. */
body { overflow-y: auto !important; font-family: var(--font) !important; color: var(--ink) !important; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; -webkit-tap-highlight-color: transparent; }
a { color: inherit; }

/* Колонка содержимого — minmax(0,1fr), а не 1fr: иначе её ширину диктует самое
   широкое содержимое (сетка из пятнадцати врачей), и прокручивалась вся
   страница вместе с шапкой и кнопками, а не одна сетка в своей рамке. */
.app { display: grid; grid-template-columns: 252px minmax(0, 1fr); min-height: 100%; }
.app[hidden] { display: none !important; }

.nav {
  display: flex; flex-direction: column;
  padding: 16px 12px 14px;
  background: var(--paper);
  border-right: 1px solid var(--line);
  position: sticky; top: 0; height: 100vh;
}
/* ======== Логотип: меню, вход (h6, 16.10.2026; js/logo.js) ========
   «Ормин» — компонентом брендбука `<ormin-logo>` (слово уже в логотипе — рядом
   не пишем); аптека (`.txt`) и клиника со своим названием (`.svoy`) — названием
   словами, своя картинка (`.brand-own`) — рядом. */
.brand { padding: 0 6px 10px; }
.brand-logo { display: block; width: 136px; margin: 0 0 4px 4px; --ormin-layout: horizontal; }
.brand b { display: none; }
.brand span { display: none; }
.brand.txt .brand-logo, .brand.svoy .brand-logo { display: none; }
.brand.txt b, .brand.svoy b { display: block; font: 700 24px/1.15 var(--head); letter-spacing: -.01em; padding: 6px 8px 0; }
.brand.svoy:has(.brand-own:not([hidden])) { display: flex; align-items: center; gap: 8px; }
.brand.svoy .brand-own:not([hidden]) { display: block; max-height: 40px; max-width: 64px; margin-left: 4px; }
.brand.svoy:has(.brand-own:not([hidden])) b { padding: 0; font-size: 19px; }
#gate .intro .vhod-logo { --ormin-layout: vertical; width: 124px; margin: 0 0 22px; }
.gate-wrap .vhod-forma { width: 104px; margin: 0 0 18px; }
/* Вход по паролю и смена пароля — одна форма по центру окна (16.10.2026): сетка
   `#gate` в две колонки — для «Кто за этим столом», форма в ней попадала в узкую
   левую колонку. */
#gate:has(> .gate-wrap) { grid-template-columns: 1fr; place-items: center; overflow: auto; }
#gate > .gate-wrap { width: 100%; box-sizing: border-box; padding: 0 24px; margin: 40px auto !important; }
.nav button {
  width: 100%; text-align: left; border: 0; background: transparent;
  padding: var(--nav-pad); border-radius: 10px; margin-bottom: 2px;
  font-size: var(--nav-fs); font-weight: 600; color: var(--ink);
  display: flex; align-items: center; gap: 10px;
}
.nav button:hover { background: var(--fill); }
.nav button.active { background: var(--teal-10); color: var(--ink); font-weight: 800; }
.nav .nav-ic { width: 19px; height: 19px; flex: none; fill: none; stroke: var(--muted); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.nav button.active .nav-ic { stroke: var(--teal-ink); }
/* Пункт меню не режется многоточием («не резать смысл», 30.09.2026): длинный — в две строки. */
.nav .nav-t { flex: 1 1 auto; min-width: 0; line-height: 1.2; overflow-wrap: anywhere; }
.nav .nav-grp { font-size: 11px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; color: var(--muted); padding: 12px 12px 4px; }
.nav .nav-n { flex: none; }
.nav .nav-n::after { content: attr(data-n); display: grid; place-items: center; min-width: 22px; height: 20px; padding: 0 6px; box-sizing: border-box;
  border-radius: 10px; background: var(--navy-10); color: var(--ink); font-size: 12px; font-weight: 800; }
.nav .badge { margin-left: auto; }
/* Кто за компьютером: кружок с буквами, имя, должность и «Выйти» значком. */
.nav .who {
  margin-top: auto;
  display: flex; align-items: center; gap: 8px;
  padding: 8px 4px 8px 8px;
  background: var(--paper);
  border-radius: 14px;
  font-size: 13px;
  box-shadow: var(--shadow);
}
.who-av { width: 32px; height: 32px; border-radius: 50%; background: var(--navy); color: #fff; display: grid; place-items: center; font-size: 12.5px; font-weight: 800; flex: none; }
.who-t { flex: 1 1 auto; min-width: 0; }
/* Имя и должность — целиком, переносом (30.09.2026): таджикские должности длиннее строки. */
.who b { display: block; font-size: 14px; line-height: 1.2; overflow-wrap: anywhere; }
.who-t .muted { display: block; font-size: 11.5px; line-height: 1.25; overflow-wrap: anywhere; }
.who .out { width: 32px; height: 32px; min-height: 0; padding: 0; flex: none; display: grid; place-items: center; background: transparent; border: 0; }
.who .out:hover { background: var(--fill); }
.who .out svg { width: 18px; height: 18px; fill: none; stroke: var(--muted); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
/* Текст только для чтеца экрана и поиска по словам — глазу не виден. */
.sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

#gate {
  display: none;
  position: fixed; inset: 0; z-index: 40;
  background: var(--bg);
  /* Тёмная панель была почти в половину экрана, и на ней ничего не происходило. */
  grid-template-columns: 340px 1fr;
}
#gate.open { display: grid; }
.gate-sec { margin: 16px 0 6px; font-size: 12px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.gate-sec:first-of-type { margin-top: 14px; }
#gate .person.last { box-shadow: 0 0 0 2px var(--teal) inset; }
#gate .person.kb-on { box-shadow: 0 0 0 3px var(--teal); }
#gate .people .banner { margin: 14px 0 0; }
#gate .intro {
  padding: 56px 36px;
  background: #002d42;
  color: #ffffff;
}
#gate .intro b {
  font: 700 46px/1.1 var(--head); letter-spacing: -.01em; display: block; margin: 8px 0 16px;
}
#gate .intro p { color: rgba(255,255,255,.78); max-width: 340px; line-height: 1.45; font-size: 17px; }
#gate .people { padding: 30px 40px 40px; overflow: auto; }
#gate .people input { width: 100%; margin-top: 16px; background: var(--fill); border: 0; }
#gate .people h2 { margin: 0 0 4px; font: 500 30px/1.15 var(--head); letter-spacing: -.01em; }
#gate .plist { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 0; }
#gate .person {
  text-align: left; background: var(--paper); border: 0;
  border-radius: 14px; padding: 10px 14px 9px; box-shadow: var(--shadow);
}
#gate .person:active { transform: scale(.98); }
#gate .person small { color: var(--muted); display: block; margin-top: 4px; font-size: 13px; }
#gate .pinbox { max-width: 380px; }
#gate .person { min-height: 58px; }
#gate .pinbox .muted.small { margin: 0 0 14px; }
#gate .dots { display: flex; gap: 12px; margin: 22px 0; }
#gate .dots i { width: 12px; height: 12px; border-radius: 50%; background: var(--fill); display: block; }
#gate .dots i.on { background: var(--teal); }
#gate .pad { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; width: 264px; }
#gate .pad button {
  height: 56px; border-radius: 18px; border: 0;
  background: var(--paper); font-size: 22px; font-weight: 500; box-shadow: var(--shadow);
}
#gate .err { color: var(--rose); min-height: 22px; font-size: 14px; }
@media (max-width: 1100px) {
  #gate { grid-template-columns: 260px 1fr; }
}
@media (max-width: 860px) {
  #gate { grid-template-columns: 1fr; }
  #gate .intro { padding: 28px 24px; }
  #gate .intro b { font-size: 40px; }
  #gate .intro .vhod-logo { --ormin-layout: horizontal; width: 156px; margin-bottom: 14px; }
}

/* Программа стоит по центру доступной ширины, а не прижата к меню. Пока
   `margin` не было, на широком мониторе справа оставалась пустая полоса в
   треть экрана, и это читалось как «программа не доделана до края».
   Решение заказчика 22.09.2026: поля слева и справа одинаковые. */
/* Один макет на все экраны (08.10.2026, заказчик: «пустоты не продуманные»):
   одна ширина и один левый край у рабочих экранов и отчётов — край больше не
   прыгает при переходе; шапка — одной строкой: «← Назад», заголовок и одна
   строка пояснения слева, действия справа. */
.main { padding: var(--main-pad); width: 100%; max-width: 1320px; margin-left: auto; margin-right: auto; min-width: 0; box-sizing: border-box; }
.top { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-bottom: 16px; min-height: 44px; }
.top-l { display: flex; align-items: center; gap: 14px; min-width: 0; flex: 1 1 0; }
.top .tools { flex: 0 1 auto; }
.top-t { min-width: 0; }
.top h1 { margin: 0; font: 500 var(--h1-fs)/1.15 var(--head); letter-spacing: -.01em; }
.top p { margin: 3px 0 0; color: var(--muted); font-size: 13.5px; line-height: 1.35; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Кнопок в шапке экрана бывает пять-шесть (Расписание регистратуры): на
   узком экране они переносятся строкой ниже, а не уезжают за край. */
.tools { display: flex; align-items: center; gap: 10px; flex-shrink: 1; flex-wrap: wrap; justify-content: flex-end; min-width: 0; }
/* Поле даты в шапке — по своему содержимому, а не на всю ширину: иначе оно
   выталкивало кнопки строкой ниже (Кассовый отчёт за день). */
.tools input[type=date], .tools input[type=month], .tools select { width: auto; }
.daybar {
  display: flex; align-items: center;
  background: var(--paper);
  border-radius: 14px;
  height: var(--tap);
  overflow: hidden;
  box-shadow: var(--shadow);
}
.daybar-nav {
  width: var(--tap); height: var(--tap); border: 0; background: transparent;
  font-size: 22px; line-height: 1; color: var(--ink);
}
.daybar-nav:hover { background: var(--fill); }
.daybar-date {
  position: relative; min-width: 148px; height: var(--tap);
  display: flex; align-items: center; justify-content: center;
  font-weight: 600; font-size: 15px;
  border-left: 1px solid var(--line-2);
  border-right: 1px solid var(--line-2);
}
.daybar-date input {
  position: absolute; inset: 0; opacity: 0; cursor: pointer;
  width: 100%; height: 100%; padding: 0; background: transparent;
}

.row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.grid { display: grid; gap: var(--gap); }
/* Колонки не тянутся друг за другом: короткая карточка не должна вырастать в
   пустое поле только потому, что соседняя длинная. */
.grid.cols-2 { grid-template-columns: 1.35fr .75fr; align-items: start; }
.grid.visit { grid-template-columns: 1fr 340px; align-items: start; }

.card {
  background: var(--paper);
  border: 0;
  border-radius: var(--radius);
  padding: var(--card-pad);
  box-shadow: var(--shadow);
}
/* Заголовок карточки — Ubuntu, обычными буквами, тёмно-синим (14.10.2026; был
   серым КАПСОМ, а у цветных карточек — своего цвета без смысла). */
.card h3 { margin: 0 0 12px; font: 500 16px/1.3 var(--head); color: var(--ink); letter-spacing: -.005em; text-transform: none; }
.card h3 .muted, .card h3 .small { font-family: var(--font); font-weight: 600; }
.sec { margin: 22px 0 10px; font-size: 12px; font-weight: 800; color: var(--muted); text-transform: uppercase; letter-spacing: .07em; }
.muted { color: var(--muted); }
.small { font-size: 13px; }

/* Три вида кнопок на всю программу (14.10.2026): главная — бирюзовая с
   тёмно-синим текстом (брендбук: белый на бирюзе не читается), обычная —
   белая с рамкой, мягкая — бирюзовой подложкой. Красная — только необратимое. */
.btn {
  border: 0; border-radius: 12px; padding: 0 16px; height: var(--tap);
  background: var(--teal); color: var(--on-teal); font-weight: 700; font-size: var(--tap-fs);
  transition: background-color .15s, box-shadow .15s;
}
.btn:hover { background: #1fa39c; }
.btn.teal { background: var(--teal); }
.btn.teal:hover { background: #1fa39c; }
.btn.ghost { background: var(--paper); color: var(--ink); font-weight: 600; box-shadow: inset 0 0 0 1px var(--navy-20); }
.btn.ghost:hover { background: var(--bg); }
.btn.soft { background: var(--teal-10); color: var(--ink); box-shadow: inset 0 0 0 1px var(--teal); }
.btn.soft:hover { background: var(--teal-soft); }
.btn.warn { background: var(--rose); color: #fff; }
.btn.warn:hover { background: #a92b22; }
.btn:disabled { opacity: .38; cursor: not-allowed; }
/* Кнопка внутри строки таблицы. Обычная — 44 пикселя, и строка с кнопкой
   выходит вдвое выше соседней: журнал расходов шёл ступеньками. Палец сюда не
   целится на ходу — это экран директора, мышь и спокойное чтение. */
.btn.sm { height: 30px; padding: 0 12px; font-size: 14px; border-radius: 9px; }
/* Поле даты в строке выбора периода. Поля ввода в программе во всю ширину —
   так удобнее в формах; но в строке чипов дата на всю строку разрывает её
   пополам, и «—» между двумя датами уезжает на отдельную строку. */
input[type=date].d8 { width: auto; min-width: 150px; }

/* Чип — это кнопка, в которую врач тычет пальцем весь день.
   Было 32px в высоту; для пальца нужно 44. */
.chip, .tag {
  display: inline-flex; align-items: center;
  border: 0; background: var(--fill); color: var(--ink);
  border-radius: 999px; padding: var(--chip-pad); margin: 0 6px 8px 0;
  min-height: var(--chip-h);
  font-size: var(--chip-fs); font-weight: 500;
}
.tag { min-height: 0; }
.chip:not(.on):hover { background: var(--navy-10); }
.chip.on { background: var(--teal); color: var(--on-teal); font-weight: 700; }
.chip.warn { background: var(--rose-soft); }
.chip.warn.on { background: var(--rose); color: #fff; }
.tag { background: var(--amber-soft); margin: 0 4px 0 0; padding: 4px 10px; font-size: 12px; }

.field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; }
/* `display: flex` перебивал атрибут hidden: поле «Код директора» в оплате
   стояло на виду всегда, хотя нужно только при скидке сверх предела, — и
   Enter-переход (js/keys.js) шагал в него. Скрытое поле — скрыто. */
.field[hidden] { display: none; }
.field label { font-size: 13px; color: var(--muted); font-weight: 500; }
input[type=text], input[type=date], input[type=month], input[type=time], input[type=number], input[type=tel], input[type=password],
input:not([type]), select, textarea, .search, .desk-find {
  width: 100%; border: 0; border-radius: 12px; padding: var(--in-pad);
  font-size: var(--in-fs);
  background: var(--fill);
}
textarea { min-height: 72px; resize: vertical; }
select { appearance: none; }

.table { width: 100%; border-collapse: collapse; font-size: 15px; }
/* Шапка таблицы — обычными буквами (14.10.2026), строки — тихой линией. */
.table th {
  text-align: left; color: var(--muted); font-weight: 700; font-size: 12.5px;
  padding: var(--th-pad); text-transform: none; letter-spacing: 0;
}
.table td { padding: var(--td-pad); border-top: 1px solid var(--line-2); vertical-align: middle; }
.table tr.click:hover { background: #f6f9fa; cursor: pointer; }
/* Выделение с клавиатуры: видно, куда уйдёт Enter. */
.table tr.kb-on > td { background: var(--teal-soft); }
.module.kb-on { outline: 2px solid var(--teal); outline-offset: 2px; }
/* Фокус — обводка бирюзой 3 px (брендбук). */
button.chip:focus-visible, .btn:focus-visible, .nav button:focus-visible { outline: 3px solid var(--teal); outline-offset: 2px; }
input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 3px solid var(--teal); outline-offset: 0; }
.kb-hint { margin: 8px 0 0; }
/* Подсказка в окнах «Enter — следующее поле»: одна строка мелко внизу окна,
   исчезает после первого прохода формы клавишей (js/keys.js, kbFormHint). */
.kb-fhint { margin: 10px 0 0; font-size: 12px; line-height: 1.4; color: var(--muted); }
/* Справочник: четырнадцать тысяч строк никогда не рисуются целиком —
   на экране либо один уровень дерева, либо до сорока найденных. */
.icd-list { max-height: 60vh; overflow: auto; }
.icd-list .list-item { cursor: pointer; }
.icd-list .list-item:hover { background: #f6f9fa; }
.icd-list .list-item.on { background: var(--teal-soft); }
@media print { .kb-hint, .kb-fhint { display: none !important; } }

.status {
  font-size: 12px; font-weight: 600; padding: 4px 8px; border-radius: 999px;
  background: var(--fill); color: var(--ink);
}
.s-wait { background: var(--amber-soft); }
.s-open { background: var(--teal-soft); color: var(--ink); }
.s-done { background: var(--ok-soft); color: var(--ink); }
.s-bad { background: var(--rose-soft); color: #a1281d; }

.module { margin-bottom: var(--gap); }
/* Карта приёма — рабочий стол врача, а не витрина. Врач работает мышью и клавиатурой,
   и кнопки размером под палец занимали весь экран: восемь диагнозов — три ряда.
   Решение заказчика 20.09.2026: в блоках карты кнопки компактные — 34px, шрифт 14.
   Главные кнопки («Закрыть приём», «Всё норма») остаются крупными. */
.module .chip { min-height: var(--mchip-h); padding: var(--mchip-pad); margin: 0 4px 5px 0; font-size: var(--mchip-fs); }
.module .row { gap: 6px; }
.module .linkish { min-height: var(--mchip-h); padding: 2px 2px; }
.module .field { gap: 4px; margin-bottom: 8px; }
.module input:not([type=checkbox]):not([type=number]), .module textarea { padding: var(--mod-in-pad); }
.module .hd { margin-bottom: 6px; }
.module .hd h3 { font-size: 16px; }
.module .hd { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 10px; }
.module .hd h3 { text-transform: none; letter-spacing: -.01em; font-size: 17px; color: var(--ink); margin: 0; }
.need { font-size: 11.5px; color: var(--rose); font-weight: 600; }

/* ============ МОДУЛЬ КАРТЫ: ПЛОТНОСТЬ И ЗНАКИ ============
   Заказчик 22.09.2026, сверив программу с наброском: «ты должен точь-в-точь
   этот модуль перенести, а не только идею». Разница была не в замысле, а в
   четырёх вещах: плотность кнопок, шапка модуля, осмотр по зонам и то, что
   заполненные блоки программа сворачивала сама. */

/* Кнопки в модулях плотнее: в столбце шириной в треть экрана прежние
   переносились после двух штук. Порог «цель не мельче 32px» соблюдён —
   он про палец, и снижать его нельзя. */
.module .chip { min-height: var(--mchip-h); padding: var(--mchip-pad); margin: 0 4px 4px 0; font-size: var(--mchip-fs); }
.module .hd h3 { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; font-size: 15.5px; }
.module .hd { align-items: center; margin-bottom: 9px; }
/* Значок состояния кружком: пустой обязательный кричит, заполненный молчит,
   необязательный — серая точка. Слово «нужно» заменено последствием:
   «без него приём не закрыть». */
.mk { width: 19px; height: 19px; border-radius: 50%; flex: none; display: inline-flex;
  align-items: center; justify-content: center; font-size: 12px; font-weight: 700; }
.mk.ok { background: var(--teal); color: var(--on-teal); }
.mk.need { background: var(--rose); color: #fff; }
.mk.soft { background: rgba(60,60,67,.12); }
/* «Свернуть» — тоже кнопка, и правило «цель не мельче 32px» на неё
   распространяется: палец не различает, ссылка это или кнопка. */
.module .fold-x { font-size: 12px; font-weight: 500; color: var(--muted); min-height: var(--mchip-h); padding: 0 4px; }
.module .fold-x:hover { color: var(--teal); }

/* Осмотр по зонам: одна строка на зону. Имя слева, переключатель справа —
   слиток из трёх положений, который не переносится никогда. Прежние три
   отдельные кнопки в узком столбце занимали по три строки на зону. */
/* Строка зоны не растягивается во всю ширину модуля: в ленте модуль бывает
   шириной в пол-экрана, и тогда между именем зоны и переключателем
   открывалась пустая полоса в полметра — глаз терял, к какой зоне относится
   «норма». Ширина строки — ровно та, в которой она читается. */
.zrow { display: flex; align-items: center; gap: 8px; margin: 5px 0; max-width: 520px; }
/* Имя зоны не обрезаем: «лимфоузлы» и «сер…» — разные вещи в документе.
   Ширину отдаёт переключатель: шрифт мельче, отступы уже. Высота 32px
   остаётся — это цель для пальца, и её снижать нельзя. */
.zrow .zn { flex: 1; min-width: 74px; font-size: 13.5px; font-weight: 500;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.zseg { display: inline-flex; flex: none; border: 1px solid var(--line); border-radius: 10px;
  overflow: hidden; background: var(--paper); }
.zseg button { border: 0; background: var(--paper); color: var(--muted); font: 500 11.5px var(--font);
  height: var(--mchip-h); padding: 0 7px; cursor: pointer; white-space: nowrap; }
.zseg button + button { border-left: 1px solid var(--line); }
.zseg button:hover { background: var(--fill); }
.zseg button.on { background: var(--teal); color: var(--on-teal); font-weight: 600; }
.zseg button.on.warn { background: var(--amber); color: #fff; }
.zfind { margin: 0 0 8px; }
.zfind input { width: 100%; }
.zwhy { margin: 0 0 10px; gap: 6px; }

/* Договор в полосе итога приёма: то же место, что направление и услуги, —
   это не блок протокола, а то, что из приёма следует. */
.dog-card { background: #f4f1fa; box-shadow: inset 0 0 0 1px rgba(90,70,150,.16); }
.dog-card .hd h3 { color: #5b4f8a; }
.dog-card .list-item { align-items: center; }

.progress { display: flex; gap: 5px; margin: 4px 0 18px; }
.progress i { flex: 1; height: 4px; border-radius: 99px; background: var(--fill); }
.progress i.on { background: var(--teal); }

/* Правая колонка карты: прошлый визит и заключение. «Заключение» прилипает к
   верху, чтобы врач видел, как оно собирается, пока заполняет блоки слева.
   Раньше прилипшая чёрная панель оставалась наверху и над «Следом карты»: след
   уезжал под неё, и главврач видел, что запись есть, но прочитать не мог
   (замечено заказчиком 21.09.2026). Теперь заключение доходит до следа и
   уезжает вверх само, а след читается целиком. */
.preview {
  position: sticky; top: 16px;
  background: #111; color: #f5f5f7;
  border-radius: 20px; padding: 20px;
  /* Длинное заключение (УЗИ на две страницы) не занимает весь экран: оно
     листается внутри себя, а не выталкивает всё остальное вниз. */
  max-height: calc(100vh - 32px);
  display: flex; flex-direction: column;
}
.preview h3 { margin: 0 0 10px; color: #a1a1a6; text-transform: uppercase; font-size: 12px; flex: 0 0 auto; }
.preview .doc { font-size: 15px; line-height: 1.45; white-space: pre-wrap; min-height: 160px; overflow: auto; }
.preview .hint { color: #8e8e93; font-size: 12px; margin-top: 12px; flex: 0 0 auto; }

.builder-mod {
  background: var(--paper); border-radius: 16px; padding: 14px; margin-bottom: 10px;
}
.kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.kpis .card { padding: 14px 16px; }
.kpis .card b { display: block; font: 500 27px/1.2 var(--head); letter-spacing: -.01em; margin-top: 4px; }

.list-item {
  display: flex; justify-content: space-between; align-items: center; gap: 12px;
  padding: 12px 0; border-bottom: .5px solid var(--line);
}
.list-item:last-child { border-bottom: 0; }
/* Что нажимается – видно мышью (16.10.2026, заказчик: «в разделе шаблоны
   курсор стоит как будто печатает, и по наведению мыши не понятно, что можно
   выбрать шаблон»). Строки, плитки и клетки с действием по нажатию получают
   руку-курсор; строка списка – ещё подсветку и «›» справа. Клетка-«стоп»
   (`event.stopPropagation()` вокруг телефона) – не действие, её не трогаем. */
[onclick]:not([onclick^="event.stopPropagation"]):not(input):not(textarea):not(select):not(#overlay), [role="button"] { cursor: pointer; }
.list-item.click, .list-item[onclick] { padding-left: 10px; padding-right: 10px; border-radius: 10px; transition: background .12s; }
.list-item.click:hover, .list-item[onclick]:hover { background: var(--fill); }
.list-item.click::after { content: "›"; color: var(--muted); font-size: 20px; line-height: 1; flex: none; }
.list-item.click:hover::after { color: var(--teal); }
/* Пусто — одной тихой строкой, а не пустым полем в пол-экрана (14.10.2026). */
.empty { padding: 14px 12px; text-align: center; color: var(--muted); font-size: 14.5px; }

.board-wrap { overflow: auto; margin-top: 12px; padding: 8px; }
.board { border-collapse: separate; border-spacing: 6px; min-width: 920px; width: 100%; }
.board th { font-size: 13px; font-weight: 600; text-align: left; padding: 4px 6px; text-transform: none; letter-spacing: 0; }
.board .time { width: 48px; color: var(--muted); font-size: 12px; font-weight: 600; vertical-align: top; padding-top: 10px; }
.board td.slot {
  background: #f7f7fa; border: 0; border-radius: 12px;
  height: 52px; min-width: 148px; cursor: pointer; vertical-align: top;
}
.board td.slot:hover { background: var(--teal-soft); }
.board .v { margin: 4px; padding: 7px 8px; border-radius: 10px; font-size: 12px; line-height: 1.3; font-weight: 500; }
/* «Записан и ещё не пришёл» — самое обычное состояние дня, а не предупреждение.
   Жёлтым помечаем только того, кто опаздывает. */
.board .v.wait { background: var(--fill); }
.board .v.wait.late { background: var(--amber-soft); }
.board .v.arrived { background: var(--teal-soft); }
.board .v.open { background: var(--teal); color: var(--on-teal); }
.board .v.done, .board .v.review { background: var(--ok-soft); }
.board .v.noshow, .board .v.canceled { background: var(--fill); color: var(--muted); text-decoration: line-through; }
/* Клетка под длинным приёмом: он начался выше и ещё идёт. Не «свободно» и не
   «врач не работает» — третье состояние, и оно обязано выглядеть третьим,
   иначе на него запишут второго пациента. */
.board td.slot.busy { background: var(--teal-soft); opacity: .45; cursor: pointer; }
/* Двойная запись на одно время — видны обе, клетка обведена (ревизия 27.09.2026). */
.board td.slot.clash { box-shadow: inset 0 0 0 2px var(--rose); background: var(--rose-soft); }
.board td.slot.clash > div + div { margin-top: 2px; }
.board td.slot.busy:hover { opacity: .7; }
.board td.slot.off { background: repeating-linear-gradient(135deg, var(--fill) 0 6px, transparent 6px 12px); cursor: default; }
.board td.slot.off:hover { background: repeating-linear-gradient(135deg, var(--fill) 0 6px, transparent 6px 12px); }
.board .v .due { margin-top: 3px; font-weight: 700; color: var(--rose); }
.board .v.open .due { color: #8a1c14; text-decoration: underline; }
.board .v .paid { margin-top: 3px; color: var(--teal-ink); }
.board .v.open .paid { color: var(--ink); }
.queue-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }
.desk-find { max-width: 420px; margin: 0 0 12px; }

#overlay {
  position: fixed; inset: 0; background: rgba(0,0,0,.36);
  display: grid; place-items: end center; z-index: 20; padding: 0;
}
#overlay[hidden] { display: none; }
.modal {
  width: min(560px, 100%);
  background: var(--paper);
  border-radius: 20px 20px 0 0;
  padding: 22px 20px 28px;
  max-height: 88vh; overflow: auto;
}
.modal::before {
  content: ""; display: block; width: 36px; height: 5px; border-radius: 99px;
  background: var(--fill); margin: 0 auto 16px;
}
.banner { border-radius: 14px; padding: 12px 14px; margin-bottom: 12px; font-size: 14px; }
.banner.lock { background: var(--fill); }
.banner.alert { background: var(--rose-soft); }
.banner.warn { background: var(--amber-soft); }
/* Полоска-инструмент, а не тревога: янтарный бережём для долга и просрочки. */
.banner.calm { background: var(--paper); box-shadow: var(--shadow); }
.search { margin-bottom: 12px; }
.locked .chip, .locked textarea, .locked input, .locked select { pointer-events: none; opacity: .7; }

@media print {
  .nav, .top .row, .progress, .grid.visit > div:first-child, .btn { display: none !important; }
  .app { display: block; }
  /* На бумаге ни прилипания, ни внутренней прокрутки: заключение печатается
     целиком, иначе лист обрежет текст ровно там, где кончается экран. */
  .preview { position: static; background: #fff; color: #000; max-height: none; display: block; }
  .preview .doc { overflow: visible; }
  .trail-card, .banner, .preview .hint, .preview h3 { display: none !important; }
}
@media (max-width: 980px) {
  .app { grid-template-columns: 1fr; }
  .nav { height: auto; position: relative; flex-direction: row; flex-wrap: wrap; }
  .grid.visit, .grid.cols-2, .kpis { grid-template-columns: 1fr; }
  .main { padding: 16px 16px 80px; }
  .top h1 { font-size: 24px; }
}
@media (min-width: 720px) {
  #overlay { place-items: center; padding: 24px; }
  .modal { border-radius: 20px; }
  .modal::before { display: none; }
}
.badge { display: inline-block; min-width: 20px; padding: 1px 6px; margin-left: 4px; border-radius: 10px; background: var(--rose); color: #fff; font-size: 12px; font-weight: 700; text-align: center; }
.module.folded { display: flex; gap: 10px; align-items: baseline; cursor: pointer; padding-top: 12px; padding-bottom: 12px; }
.module.folded:hover { background: var(--teal-soft); }
.module.folded .ok-mark { color: var(--ok); font-weight: 700; }
.module.folded .fold-text { font-size: 14px; line-height: 1.35; }
/* Текстовая ссылка — тоже цель для пальца, а не только для мыши. */
.linkish { display: inline-flex; align-items: center; min-height: var(--link-h); background: none; border: 0; padding: 4px 2px;
  color: var(--teal); font-size: 14px; font-weight: 600; cursor: pointer; }
/* Цвет модуля — по состоянию. Обязательный пустой держит приём закрытым и
   должен быть виден через весь экран; заполненный гаснет. По мере работы
   экран успокаивается, и это читается, не вчитываясь. */
.module.m-need { background: #fff0ef; box-shadow: inset 0 0 0 1.5px rgba(255,59,48,.5); }
.module.m-need .hd h3 { color: #b3261e; }
.module.m-done { background: #e8f5f1; box-shadow: inset 0 0 0 1.5px rgba(10,122,106,.42); }
.module.m-soft.s1 { background: #fdf6ea; box-shadow: inset 0 0 0 1px rgba(196,122,18,.18); }
.module.m-soft.s2 { background: #eef5fb; box-shadow: inset 0 0 0 1px rgba(10,90,150,.16); }
.module.m-soft.s3 { background: #eef7f0; box-shadow: inset 0 0 0 1px rgba(20,120,60,.16); }
/* Итог приёма — свой, четвёртый оттенок. Направление и услуги не блоки
   протокола: одно уходит коллеге, другое в счёт пациенту. Цветом это и
   сказано, чтобы их не искали среди жалоб и диагнозов. */
.module.m-soft.s4 { background: #f4f1fa; box-shadow: inset 0 0 0 1px rgba(90,70,150,.16); }
.module.folded.m-need:hover, .module.folded.m-done:hover, .module.folded.m-soft:hover { background: var(--teal-soft); }
.from-tpl { display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px;
  background: rgba(60,60,67,.08); color: var(--muted); font-size: 11px; font-weight: 600;
  text-transform: none; letter-spacing: 0; vertical-align: 1px; }

/* ============ ЛЕНТА МОДУЛЕЙ ============
   Заказчик 22.09.2026: «модули не одного размера и видимо невозможно их
   пропорционально оформить, когда заполняемые. поэтому: модули, их цвета и
   наше оформление остаётся, только они идут следом друг за другом». И следом:
   «оставим оба варианта с полоской. выбор за каждого врача. по умолчанию
   вариант А. можно переключить даже во время визита кнопкой».

   Три смысловых столбца ушли, части приёма остались: они задают порядок ленты
   и цвет полоски на левом краю модуля. Разница принципиальная — столбец
   требовал, чтобы блоки были соизмеримы по высоте, а лента не требует ничего.

   А · «в столбец» — одна колонка читаемой ширины, по центру.
   Б · «по ширине» — та же лента, налитая в столько столбцов, сколько влезает.
   Число столбцов не задано числом и не высчитывается по точкам экрана: задана
   ЖЕЛАЕМАЯ ШИРИНА столбца, а сколько их поместится — считает браузер. Так
   раскладка верна и на широком мониторе, и в половинке окна, и на планшете,
   без единого правила под размер экрана. */
.cardflow .module, .cardflow .card { break-inside: avoid; }
.cardflow .itog { display: contents; }
.cardflow .itog > .card { background: #f4f1fa; box-shadow: inset 0 0 0 1px rgba(90,70,150,.16);
  border-left: 4px solid #7a6ab8; margin-bottom: var(--gap); }
.cardflow .itog > .card h3 { color: #5b4f8a; }
/* Полоска части приёма. Цвет тот же, что был у заголовков столбцов, — теперь
   он живёт на самом модуле: видно боковым зрением и не занимает ни строки. */
.cardflow .module { border-left: 4px solid var(--hue, transparent); }

/* А · в столбец */
.cardflow.lenta { max-width: 880px; margin: 0 auto; }

/* Б · по ширине экрана */
.cardflow.reka .flow { columns: 420px; column-gap: var(--gap); }
/* Заключение и след приёма не участвуют в потоке столбцов: это документ и
   журнал, им нужна вся ширина, а не колонка. */
.cardflow.reka .preview, .cardflow.reka .trail { margin-top: var(--gap); }
.cardflow .preview { position: static; max-height: none; background: var(--paper); color: var(--ink);
  border-radius: var(--radius); padding: 16px 18px 14px; box-shadow: var(--shadow); }
.cardflow .preview h3 { color: var(--muted); }
.cardflow .preview .doc { font-family: var(--serif); font-size: 15px; line-height: 1.6; color: #2c2c2e;
  columns: 2; column-gap: 32px; column-rule: 1px solid rgba(60,60,67,.08);
  min-height: 0; overflow: visible; }
.cardflow .preview .hint { color: var(--muted); }
/* Карта «по ширине» распускается на весь экран: держать её в 1180 точках
   значило бы оставить справа пустое поле, ради которого всё и затевалось. */
.app.card-wide .main { max-width: none; }
@media (max-width: 900px) {
  .cardflow .preview .doc { columns: 1; }
}

/* Полоса пациента вместо меню. Прилипает ТОЛЬКО пока стоит сбоку: в узком окне
   она становится верхней строкой, и прилипшая там — закрывала бы собой модули.
   Поймано на просмотре 22.09.2026. */
.cardwrap { display: grid; grid-template-columns: 208px minmax(0, 1fr); gap: 14px; align-items: start; }
.cardrail { display: flex; flex-direction: column; gap: 9px; position: sticky; top: 16px; }
.cardrail .rc { background: var(--paper); border-radius: 14px; padding: 11px 13px; box-shadow: var(--shadow); }
.cardrail .rc .t { color: var(--muted); font-size: 12px; margin-bottom: 4px; }
.cardrail .rc .val { font-size: 15px; font-weight: 600; }
.cardrail .rc-prev { font-size: 13px; color: #3a3a3c; }
.cardrail .rc.alert { background: var(--rose-soft); }
.cardrail .rc.alert .t, .cardrail .rc.alert .val { color: #b3261e; }
.btn.dark { background: var(--ink); color: #fff; height: auto; padding: 11px 13px; font-size: 14px;
  border-radius: 14px; text-align: left; width: 100%; }
.app.in-card { grid-template-columns: 1fr; }
.app.in-card .nav { display: none; }
.tpl-pick { max-width: 260px; }

@media (max-width: 900px) {
  .cardwrap { grid-template-columns: minmax(0, 1fr); }
  .cardrail { position: static; flex-direction: row; flex-wrap: wrap; }
  .cardrail .rc { flex: 1 1 150px; }
  .cardrail .back { flex: 1 1 100%; }
}

.visit-bar { position: sticky; bottom: 0; z-index: 5; display: flex; justify-content: space-between; align-items: center; gap: 12px;
  margin-top: 12px; padding: 12px 14px; border-radius: 16px; background: var(--bar-bg, rgba(255,255,255,.96)); box-shadow: 0 -2px 16px rgba(0,0,0,.08); }
@media print { .visit-bar { display: none !important; } }
.visit-bar .vb-btns { display: flex; gap: 8px; align-items: center; flex: none; }


/* Отделение внутри общего списка: разделитель, а не отдельная таблица. */
.table tr.sec-row td {
  padding-top: 16px;
  font-size: 12px;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--muted);
  border-bottom: 0;
}

/* Заголовок группы внутри общего списка. */
.list-sec {
  padding: 16px 0 6px;
  font-size: 12px;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--muted);
}
.list-sec:first-child { padding-top: 0; }

/* Блок «орган» на УЗИ: подпись поля с нормой слева, значение справа, по сторонам —
   колонками. Та же сетка, что на утверждённой форме, чтобы врач не переучивался. */
.organ { display: grid; gap: 2px; }
.organ .org-row { display: grid; grid-template-columns: 190px 1fr; gap: 8px; align-items: center;
  padding: 4px 0; border-bottom: 1px solid var(--line); }
.organ .org-row:last-child { border-bottom: 0; }
.organ .org-row.sides-2 { grid-template-columns: 190px 1fr 1fr; }
.organ .org-head { border-bottom: 0; padding-bottom: 0; }
.organ .org-l b { font-size: 14px; font-weight: 600; }
.organ .org-v { min-width: 0; }
.organ .org-v .row { flex-wrap: wrap; }
.organ input.org-num { width: 92px; }
.organ input.org-txt { width: 100%; max-width: 320px; }
@media (max-width: 980px) {
  .organ .org-row, .organ .org-row.sides-2 { grid-template-columns: 1fr; gap: 2px; }
}
/* Предупреждающая подпись в строке: «форма не утверждена», «соответствия нет». */
.warn-text { color: var(--amber); font-weight: 600; }

/* Тревожная полоса. Висит поверх всего и не убирается нажатием: она гаснет
   только тогда, когда исчезает причина. Сегодняшняя причина одна — программа
   слушает сеть, а вход по паролю не включён. Предупреждение, которое можно
   закрыть, закрывают в первый же день и больше не вспоминают. */
#alarm {
  position: fixed; top: 0; left: 0; right: 0; z-index: 90;
  background: #b3261e; color: #fff;
  padding: 9px 18px; font-size: 14px; font-weight: 600; line-height: 1.35;
  box-shadow: 0 2px 10px rgba(0,0,0,.25);
}
#alarm[hidden] { display: none !important; }
#alarm span { font-weight: 400; opacity: .92; }
body.alarm .app { padding-top: var(--alarm-h, 40px); }
body.alarm .nav { top: var(--alarm-h, 40px); height: calc(100vh - var(--alarm-h, 40px)); }

/* Дополнение к закрытой карте: сверху дата и имя мелким, под ними — сам текст
   обычным, как его написал врач. Не «список» и не заголовок: это содержание
   документа, и читаться оно должно как содержание. */
.dop { padding: 10px 0; border-bottom: .5px solid var(--line); }
.dop:last-child { border-bottom: 0; }
.dop > div:last-child { margin-top: 2px; }

/* Меню разделами. Раздел — строка; нажали — страница раздела со списком
   подразделов (js/menu.js `renderSection`). Замечание подраздела — точкой у
   раздела. Список длиннее экрана — листается сам, «кто за компьютером» внизу
   остаётся на месте. */
#nav-items { flex: 1 1 auto; min-height: 0; overflow-y: auto; margin-bottom: 12px; }
.nav button.nsec { display: flex; align-items: center; gap: 10px; }
.nav .grp { font-size: 11px; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); padding: 8px 12px 2px; }

/* Деньги: графики своими средствами. Горизонтальные столбики — отделения,
   услуги, врачи, статьи; вертикальные — по дням. Никаких круговых диаграмм:
   на глаз их не прочесть. */
.bars { display: grid; gap: 6px; }
.bar-row { display: grid; grid-template-columns: minmax(120px, 38%) 1fr auto; gap: 10px; align-items: center; font-size: 13px; }
/* Длинные названия — услуги, статьи расходов: подписи шире, полоска короче.
   «УЗДС артерий нижн…» не говорит врачу ничего. */
.bars.wide .bar-row { grid-template-columns: minmax(180px, 55%) 1fr auto; }
/* Подпись полоски — до двух строк (30.09.2026): «Приём терапевта первичный 2 раза» целиком. */
.bar-l { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow-wrap: anywhere; line-height: 1.25; }
.bar-t { height: 12px; background: var(--fill); border-radius: 99px; overflow: hidden; }
.bar-t i { display: block; height: 100%; background: var(--teal); border-radius: 99px; min-width: 2px; }
.bar-v { font-weight: 600; white-space: nowrap; }
.col { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: stretch; height: 100%; }
.table td.num, .table th.num { text-align: right; white-space: nowrap; }
.table.pl tr.pl-sum td { background: rgba(10,122,106,.08); font-weight: 600; }
.table.pl tr.pl-total td { background: var(--teal-soft); font-weight: 700; font-size: 15px; }
.tag .linkish { margin-left: 4px; }

/* Отрицательные деньги — красным. Убыток, выделенный тем же зелёным, что и
   прибыль, — это не отчёт, а обман самого себя. */
.minus { color: var(--rose); }
.bar-l i { display: block; font-style: normal; font-size: 11px; line-height: 1.2; }
.card.click { cursor: pointer; }
.card.click:hover { box-shadow: 0 0 0 2px var(--teal) inset; }

/* ---------- окно продаж ----------
   Три панели в одной строке: товар, чек, оплата. Кассир не переключает экраны
   и не открывает окон — всё, что нужно для одной продажи, видно сразу. Взято из
   программы магазина заказчика, где так стоят третий год. */
/* Ширину панелей кассир двигает сам, потаскав границу между ними, — как в
   программе магазина, где это работает третий год. Причина простая: у одного
   прилавка широкий монитор и длинные названия товаров, у другого — узкий и
   важнее чек. Готовых пропорций, которые подошли бы обоим, не существует, а
   спорить об этом с программой кассир не должен.

   Поэтому здесь flex, а не grid: у grid ширина колонки живёт в родителе, и
   двигать пришлось бы строку `grid-template-columns` целиком. У flex ширина
   лежит на самой панели, и перетаскивание — это два числа на двух соседях. */
.sale { display: flex; align-items: stretch; gap: 0; min-width: 0; }
.sale .card { padding: 14px; }
.sale-pane { flex: 0 0 auto; min-width: 190px; box-sizing: border-box; overflow: auto; }
/* Оплата забирает остаток: она крайняя справа, и пустоты за ней быть не должно. */
.sale-pay { flex: 1 1 auto; width: auto !important; min-width: 230px; }
.sale-find, .sale-cart { min-width: 0; }
/* Граница между панелями. Десять пикселей — столько, чтобы попасть мышью не
   целясь, и полоска посередине, чтобы было видно, что за это можно взяться. */
.sale-split {
  flex: 0 0 12px; cursor: col-resize; align-self: stretch;
  background: linear-gradient(var(--line), var(--line)) center / 2px 44% no-repeat;
  touch-action: none;
}
.sale-split:hover { background-color: var(--teal-soft); }
.sale-split.drag { background-color: var(--teal-soft); }
.salelist { display: flex; flex-direction: column; gap: 6px; max-height: 60vh; overflow: auto; }
.saleitem {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  border: 0; background: var(--fill); border-radius: 12px; padding: 10px 12px;
  text-align: left; min-height: 52px; font-size: 15px;
}
.saleitem:hover { background: var(--teal-soft); }
/* Подсвеченная строка — та, что уйдёт в чек по Enter. Без неё стрелки двигают
   что-то невидимое, и клавиатурой пользоваться нельзя. */
.saleitem.on { background: var(--teal-soft); box-shadow: inset 0 0 0 2px var(--teal); }
.saleitem.out { opacity: .45; }
.saleitem-n { display: flex; flex-direction: column; min-width: 0; }
.saleitem-n i { font-style: normal; }
.saleitem b { white-space: nowrap; }
/* Поле прямо в строке таблицы: количество и цену правят, не открывая окна. */
.cellin {
  width: 88px; text-align: right; padding: 6px 8px;
  border: 0; border-radius: 8px; background: var(--fill);
}
/* В чеке количество и цена — это «2» и «5», а не суммы: узкое поле оставляет
   место названию товара, из-за которого строка иначе ломается надвое. */
.table.cart .cellin { width: 62px; }
.table.cart td { padding: 8px 6px; }
.total { background: var(--ink); color: #fff; border-radius: 12px; padding: 10px 12px; }
.total b { display: block; font-size: 24px; line-height: 1.2; }
.total .muted { color: rgba(255,255,255,.65); }
.total .minus { color: #ffb4ae; }
/* На узком экране панели встают друг под друга, и двигать границы нечего:
   ширина там одна на всех. Разделители прячем, чтобы не осталось полосок,
   за которые можно взяться, но ничего не произойдёт. */
@media (max-width: 1100px) {
  .sale { flex-wrap: wrap; gap: 12px; }
  .sale-pane, .sale-pay { width: auto !important; flex: 1 1 100%; }
  .sale-split { display: none; }
}

/* Короткое сообщение внизу экрана. Сканер работает молча, и без отклика кассир
   не понимает, попал он в товар или нет. */
#toast {
  position: fixed; left: 50%; bottom: 22px; transform: translateX(-50%);
  background: var(--ink); color: #fff; padding: 12px 20px; border-radius: 14px;
  font-size: 15px; z-index: 300; max-width: min(720px, 90vw); text-align: center;
  box-shadow: 0 8px 24px rgba(0,0,0,.25); pointer-events: none;
}
#toast[hidden] { display: none; }

/* Экранная клавиатура для денежных полей. За прилавком часто сенсорный монитор,
   а обычную клавиатуру оттуда убирают. Кнопки крупные нарочно: пальцем по
   мелким цифрам не попадёшь, а ошибка в сумме — это недостача вечером. */
.pad { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.padk { min-height: 52px; font-size: 20px; font-weight: 600; }

/* ---------- раздел «Отчёты» ---------- */
/* Указатель раздела: у каждого отчёта название и строка «на какой вопрос он
   отвечает». Название без такой строки — загадка, которую разгадывают
   открыванием; именно поэтому в чужих системах из шестидесяти отчётов человек
   открывает три. Звёздочка поднимает нужные наверх. */
.rep-link {
  flex: 1; min-width: 0; text-align: left; border: 0; background: transparent;
  padding: 10px 6px; border-radius: 10px;
}
.rep-link:hover { background: var(--fill); }
/* Вкладки отчёта строками под ним (07.10.2026): каждая — по имени, нажатие — прямо в неё. */
.rep-link b { display: block; font-size: 16px; font-weight: 600; }
.rep-link i { display: block; font-style: normal; margin-top: 2px; line-height: 1.35; }
/* Шапка таблицы отчёта: её читают, а не пролистывают, поэтому она должна быть
   видна при прокрутке длинного списка. */
.table thead th {
  position: sticky; top: 0; z-index: 1;
  background: var(--paper); text-align: left;
  font-size: 12px; font-weight: 600; color: var(--muted);
  text-transform: uppercase; letter-spacing: .02em;
  padding: 8px 6px; border-bottom: 1px solid var(--line);
}
.table tfoot td { border-top: 2px solid var(--line); padding-top: 10px; }
/* Строка, на которую стоит посмотреть: скидка без причины, расхождение в кассе. */
.table tr.warn-row td { background: var(--amber-soft); }
/* Печать отчёта: на бумаге меню и кнопки не нужны — нужны числа. */
@media print {
  .nav, .tools, .top .tools, .row .chip, .btn { display: none !important; }
  .app { grid-template-columns: 1fr; }
  .main { padding: 0; max-width: none; }
  .card { box-shadow: none; border: 1px solid #ddd; break-inside: avoid; }
  .table thead th { position: static; }
}

/* ---------- Календарь записи ---------- */

/* ---------- Экран записи ---------- */
/* ===== Запись на приём — вариант Б2 (выбран заказчиком 23.09.2026) =====
   Всё в один экран: поля модулями слева, свободные окна — всё остальное место,
   внизу итог и кнопки. Модули ложатся одной колонкой, если помещаются по высоте,
   иначе двумя — самой узкой ширины, при которой всё помещается (`zLayout`).
   Высота любого поля и переключателя одна — 32 точки: экран, который
   заполняют сто раз за день, должен помещаться целиком (заказчик: «убери все
   лишние пустые места… всё сместилось в один экран»). Классы с приставкой z,
   чтобы не спорить с общими .row, .btn, .tag программы. */
.app.book-wide .main { max-width: none; padding: 8px 12px; height: 100vh; display: flex; flex-direction: column; }
body.zb-tall .app.book-wide .main { height: auto; }
.zb-top { margin: 0 0 6px; gap: 10px; min-height: 30px; }
.zb-top h1 { font-size: 18px; letter-spacing: -.02em; white-space: nowrap; }
.zb-top .tools { gap: 6px; }
.zb-done { flex: 1; min-width: 0; }
.zdone { display: flex; align-items: center; gap: 8px; background: #1c1c1e; color: #fff; border-radius: 10px; padding: 5px 6px 5px 12px; font-size: 12.5px; line-height: 1.45; }
.zdone b { color: #9be7d8; }
.zdone span { flex: 1; min-width: 0; }
/* `.zdone .zbtn.ghost`, а не `.zdone .zbtn`: у `.zbtn.ghost` та же сила и он
   ниже в файле — кнопки выходили белыми на белом (скрин заказчика 24.09.2026). */
.zdone .zbtn, .zdone .zbtn.ghost { height: 26px; background: rgba(255,255,255,.14); color: #fff; box-shadow: inset 0 0 0 1px rgba(255,255,255,.22); }
.zdone .zbtn:hover { background: rgba(255,255,255,.24); }
#body.zb { --zh: 32px; flex: 1; min-height: 0; display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: 6px; font-size: 13.5px; }
.zb-main { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 8px; min-height: 0; }
.zb-form { display: flex; flex-direction: column; gap: 6px; width: clamp(540px, 35vw, 660px); min-height: 0; height: 100%; }
.zb-form .zcols { display: flex; flex-direction: column; gap: 6px; }
.zb-form .zstack { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.zb-form.two { width: clamp(760px, calc(63vw - 12px), 1020px); } /* −12 px: меню шире на 12 px (14.10.2026) */
.zb-form.two .zcols { flex-direction: row; align-items: flex-start; flex: 0 0 auto; }
.zb-form.two .zstack { flex: 1 1 0; }
.zb-form:not(.two) .zstack { display: contents; }
#zm-pat { order: 1; } #zm-priem { order: 2; } #zm-napr { order: 3; } #zm-docs { order: 4; }
.zb-form.two .zp[data-k=ist] button { padding: 0 6px; font-size: 11.5px; }
#zb-day { display: none; flex: 1 1 0; min-height: 0; overflow: auto; font-size: 12px; padding-bottom: 6px; }
.zb-form.withday #zb-day { display: block; }
#zb-day table, .zpop table { width: 100%; border-collapse: collapse; }
#zb-day td, .zpop td { padding: 3px 5px; border-top: 1px solid var(--line); vertical-align: top; }
#zb-day .t, .zpop .t { display: flex; gap: 4px; flex-wrap: wrap; margin-bottom: 5px; }
#zb-day .t span, .zpop .t span { background: var(--fill); border-radius: 6px; padding: 0 7px; line-height: 20px; font-weight: 600; font-size: 11px; }
#zb-day .t span b { color: var(--teal-ink); }
.zb .nw { white-space: nowrap; }
.zb .minus, .zpop .minus { color: #b3261e; }

.zm { background: var(--paper); border-radius: 12px; padding: 8px 10px 1px; min-width: 0; box-shadow: 0 0 0 1px var(--line); }
.zm > h3 { margin: 0 0 5px; font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--teal-ink);
  display: flex; align-items: center; gap: 4px 8px; line-height: 16px; flex-wrap: wrap; }
.zm > h3 em { font-style: normal; margin-left: auto; font-size: 11px; color: var(--muted); font-weight: 600; text-transform: none; letter-spacing: 0; white-space: nowrap; }
.zm > h3 em + em { margin-left: 0; }
.zm > h3 em:empty { display: none; }

.zff { display: flex; flex-wrap: wrap; gap: 0 8px; align-items: flex-end; }
.zf { margin-bottom: 6px; position: relative; flex: 0 0 auto; width: var(--w, 160px); }
.zf.gr { flex: 1 1 170px; width: auto; min-width: 0; }
.zff.n3 .zf.gr { flex-basis: 120px; }
.zf.aw { width: auto; max-width: 100%; }
.zf.hid { display: none; }
.zf label { display: block; font-size: 10.5px; color: var(--muted); font-weight: 600; margin-bottom: 2px; white-space: nowrap; line-height: 14px; overflow: hidden; text-overflow: ellipsis; }
.zf input { width: 100%; height: var(--zh); border: 0; border-radius: 8px; background: var(--fill); padding: 0 10px; font: 400 13.5px var(--font); outline: 0; }
.zf input:focus { background: var(--paper); box-shadow: 0 0 0 2px var(--teal); }
.zf.ok input { background: var(--paper); box-shadow: inset 0 0 0 1px var(--line); }
.zf.skip { opacity: .65; }
.zf.need input { box-shadow: inset 0 0 0 1.5px #e0a030; background: #fff8ea; }
.zpill { font-size: 10px; color: var(--teal-ink); font-weight: 700; }
.zpill.v { color: #4b3a9a; } .zpill.a { color: #8a5300; }
.zp { display: flex; gap: 2px; flex-wrap: wrap; border-radius: 8px; padding: 3px; background: var(--fill); outline: 0; min-height: var(--zh); align-items: center; }
.zp:focus { box-shadow: 0 0 0 2px var(--teal); }
.zp button { border: 0; border-radius: 6px; background: transparent; padding: 0 8px; height: 26px; font: 600 12px var(--font); cursor: pointer; white-space: nowrap; color: #48484a; }
.zp button.on { background: var(--paper); color: var(--teal-ink); box-shadow: 0 1px 2px rgba(0,0,0,.14); }

.zs { position: absolute; z-index: 60; left: 0; min-width: 100%; top: 100%; margin-top: 3px; background: var(--paper); border-radius: 10px;
  box-shadow: 0 12px 32px -8px rgba(0,0,0,.32), 0 0 0 1px var(--line); display: none; max-height: 300px; overflow-y: auto; }
.zs.on { display: block; }
.zs .i { padding: 6px 10px; font-size: 13px; display: flex; justify-content: space-between; gap: 14px; cursor: pointer; align-items: baseline; white-space: nowrap; }
.zs .i i { font-style: normal; color: var(--muted); font-size: 11.5px; }
.zs .i.k { background: var(--teal-soft); }
.zs .g { font-size: 10px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; padding: 6px 10px 2px; font-weight: 700; }
.zs hr { border: 0; border-top: 1px solid var(--line); margin: 3px 0; }

.zfa { display: flex; flex-wrap: wrap; gap: 4px; margin: 0; min-width: 0; text-transform: none; letter-spacing: 0; font-weight: 500; }
.zfa span { background: var(--fill); border-radius: 6px; padding: 0 7px; font-size: 11px; line-height: 18px; color: #3a3a3c; white-space: nowrap; }
.zfa span b { font-weight: 700; }
.zfa span.al { background: var(--rose-soft); color: #b3261e; }
.zfa span.new { background: var(--amber-soft); color: #8a5300; }
.zbar { display: flex; gap: 8px; align-items: center; border-radius: 8px; padding: 0 3px 0 9px; margin: 0 0 6px; font-size: 12px; height: 30px; white-space: nowrap; }
.zbar.v { background: #ebe6ff; } .zbar.t { background: var(--teal-soft); }
.zbar span { overflow: hidden; text-overflow: ellipsis; flex: 1; min-width: 0; }
.zbar button { border: 0; border-radius: 6px; padding: 0 9px; height: 24px; font: 600 11.5px var(--font); cursor: pointer; background: var(--paper); flex: 0 0 auto; }
.zbar button small { font-weight: 500; color: var(--muted); margin-left: 3px; }

.zq { display: flex; gap: 4px; flex-wrap: wrap; margin: -2px 0 6px; }
.zq button { border: 0; border-radius: 6px; background: var(--fill); padding: 0 8px; height: 24px; font: 600 11.5px var(--font); cursor: pointer; display: flex; gap: 4px; align-items: center; white-space: nowrap; }
.zq button i { font-style: normal; color: var(--muted); font-weight: 500; font-size: 10.5px; }
.zq button.in { background: var(--teal); color: var(--on-teal); }
.zq button.in i { color: #cdeee7; }
.zq .grp { background: var(--paper); box-shadow: inset 0 0 0 1px var(--line); color: var(--teal-ink); }
.zq .grp.on { background: var(--teal-soft); }
.zcart { width: 100%; border-collapse: collapse; font-size: 12.5px; margin: 0 0 6px; }
.zcart td { padding: 0 5px; border-top: 1px solid var(--line); height: 26px; }
.zcart tr:last-child td { border-bottom: 1px solid var(--line); }
.zcart td.n { text-align: right; white-space: nowrap; color: var(--muted); }
.zcart td.p { text-align: right; font-weight: 700; width: 46px; white-space: nowrap; }
.zcart .x { border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 12px; padding: 0 2px; }
.zcart tr.two td { background: #f6f3ff; }
.zcart .who2 { color: #4b3a9a; font-size: 11px; font-weight: 600; white-space: nowrap; }
.zqty { display: inline-flex; align-items: center; background: var(--fill); border-radius: 6px; height: 22px; }
.zqty button { border: 0; background: none; width: 20px; height: 22px; cursor: pointer; font: 700 13px var(--font); color: #48484a; padding: 0; }
.zqty b { min-width: 16px; text-align: center; font-size: 12px; }
.zsec { display: block; line-height: 1.4; background: #ebe6ff; color: #4b3a9a; border-radius: 8px; padding: 4px 9px; margin: -2px 0 6px; font-size: 12px; }
.zhb { margin-left: 6px; border: 0; border-radius: 6px; background: var(--fill); padding: 0 8px; height: 20px; font: 600 11px var(--font); cursor: pointer; color: var(--teal-ink); text-transform: none; letter-spacing: 0; }
.zfl { display: inline-block; border-radius: 4px; padding: 0 4px; font-size: 9.5px; font-weight: 700; line-height: 15px; vertical-align: 1px; margin-left: 4px; }
.zfl.d { background: var(--amber-soft); color: #8a5300; } .zfl.c { background: #ebe6ff; color: #4b3a9a; }

.zdocs { margin-bottom: 5px; }
.zdoc { display: flex; align-items: center; gap: 8px; min-height: 28px; border-top: 1px solid var(--line); font-size: 12px; padding: 1px 0; }
.zdoc:first-child { border-top: 0; }
.zdoc .nm { font-weight: 700; min-width: 92px; max-width: 48%; flex: 0 0 auto; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zdoc .st { flex: 1; min-width: 0; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zdoc .st b { color: var(--ink); font-weight: 600; }
.zdoc .miss { color: #8a5300; cursor: pointer; text-decoration: underline dotted; }
.zdoc .zp { min-height: 26px; padding: 2px; flex: 0 0 auto; }
.zdoc .zp button { height: 22px; font-size: 11px; padding: 0 7px; }
.ztag { border-radius: 999px; padding: 2px 8px; font-size: 11px; font-weight: 700; white-space: nowrap; flex: 0 0 auto; }
.ztag.ok { background: var(--ok-soft); color: #1d6b3a; } .ztag.need { background: var(--amber-soft); color: #8a5300; }
.ztag.dv { background: #ebe6ff; color: #4b3a9a; } .ztag.no { background: var(--fill); color: var(--muted); }

.zplan { display: flex; flex-direction: column; min-height: 0; padding-bottom: 8px; }
.zctl { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin-bottom: 6px; }
.zctl .zp { min-height: 28px; }
.zctl .zp button { height: 22px; }
.zctl .hint { margin-left: auto; font-size: 11px; color: var(--muted); }
.zctl .zfrom { height: 24px; padding: 0 4px; font-size: 12px; width: 124px; }
/* contain:size — окна не раздвигают экран своим содержимым: сколько места есть, столько и берут. */
.zpbody { flex: 1; min-height: 0; overflow: auto; contain: size; }
.zwk { display: grid; gap: 3px; height: 100%; min-height: 430px; }
.zwk .h { font-size: 11px; color: var(--muted); text-align: center; font-weight: 600; align-self: end; padding-bottom: 2px; }
.zwk .h b { color: var(--ink); font-size: 12px; margin-left: 3px; }
.zwk .h.today, .zwk .h.today b { color: var(--teal-ink); }
.zwk .tm { font-size: 10.5px; color: var(--muted); font-weight: 600; display: flex; align-items: center; }
.zwk .lunch { margin-top: 5px; }
.zc { border: 0; border-radius: 5px; background: var(--ok-soft); cursor: pointer; font: 600 11.5px var(--font); color: #1d6b3a; min-height: 15px; padding: 0; }
.zc:hover { background: #bfeccd; }
.zc.busy { background: var(--fill); color: transparent; cursor: not-allowed; }
.zc.k { outline: 2px solid var(--teal); outline-offset: -2px; }
.zc.on { background: var(--teal); color: var(--on-teal); }
.zday { font-size: 11px; font-weight: 700; color: var(--teal-ink); text-transform: uppercase; letter-spacing: .04em; margin: 8px 0 4px; }
.zday:first-child { margin-top: 0; }
.zr { display: grid; gap: 4px; align-items: center; margin-bottom: 4px; }
.zr .who { font-size: 12px; font-weight: 600; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zr .who i { display: block; font-style: normal; color: var(--muted); font-weight: 500; font-size: 10.5px; }
.zr .zc { height: var(--rh, 30px); }
.zr .none { font-size: 11.5px; color: var(--muted); }

.zfoot { display: flex; align-items: center; gap: 6px 8px; flex-wrap: wrap; background: var(--paper); border-radius: 12px; padding: 5px 5px 5px 12px; box-shadow: 0 0 0 1px var(--line); position: relative; }
/* Полоса итога не раздвигает экран записи шире окна: длинные таджикские
   подписи кнопок переносят её во вторую строку (14.10.2026). */
#body.zb { grid-template-columns: minmax(0, 1fr); }
.zsum { display: flex; align-items: center; gap: 12px; white-space: nowrap; font-size: 12px; color: var(--muted); }
.zsum b { color: var(--ink); font-size: 14px; }
.zpay { background: var(--teal-soft); border-radius: 8px; padding: 3px 10px; color: var(--teal-ink); }
.zpay b { font-size: 19px; color: var(--teal-ink); }
.zdisc { display: flex; align-items: center; gap: 5px; }
.zdisc input { height: 28px; border: 0; border-radius: 7px; background: var(--fill); padding: 0 8px; font: 600 13px var(--font); outline: 0; width: 84px; }
.zdisc input:focus { background: var(--paper); box-shadow: 0 0 0 2px var(--teal); }
/* «Сразу в кабинет и оплатить» (C2): сумма и способ — окошком над нижней строкой записи. */
#zb-opl { right: 20px; bottom: 70px; width: min(340px, calc(100vw - 20px)); }
#zb-opl .zopl { margin-bottom: 6px; }
.zopl input { width: 72px; }
.zopl select { height: 28px; border: 0; border-radius: 7px; background: var(--fill); padding: 0 6px; font: 600 13px var(--font); }
.zpay-b { cursor: pointer; }
/* «Сразу в кабинет» у кассы — две строки одной кнопки: без оплаты / «и оплатить». */
.zbtn.zsplit { display: inline-flex; flex-direction: column; justify-content: center; align-items: stretch; padding: 0; overflow: hidden; }
.zsplit button { border: 0; background: none; font: 600 12.5px var(--font); color: var(--ink); cursor: pointer; padding: 3px 12px 0; line-height: 1.15; text-align: left; white-space: nowrap; }
.zsplit .zsplit-pay { font: 600 10px var(--font); color: var(--teal-ink); padding: 1px 12px 4px; }
.zsplit button:hover { background: var(--teal-soft); }
/* «Касса» — экран дня (07.10.2026): четыре числа, строка действий, две таблицы. */
.kas-bar { margin: 14px 0; gap: 8px; flex-wrap: wrap; align-items: center; }
.kas-grid .card h3 { margin-top: 0; }
.kas-dela { margin-top: 2px; }
.kas-dela .linkish { min-height: 0; padding: 0; }
/* Макет v2 (09.10.2026): вторая касса строкой под
   «в кассе сейчас», давний неоплаченный приём — красным. */
.kas-drugie { display: block; margin-top: 4px; }
.kas-drugie .linkish { display: block; min-height: 0; padding: 0; text-align: left; color: var(--muted); }
.kas-old { color: var(--rose); font-weight: 600; }
/* «Закрыть месяц» окном шагами (js/mesyac-zakr.js, 09.10.2026, макет v2):
   шаги слева, выбранный шаг справа, низ — «‹ Шаг N» и «Всё верно, дальше ›». */
.modal.mz-modal { width: min(1080px, 100%); padding: 0; }
.mz-top { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 14px 20px; border-bottom: 1px solid var(--line); }
.mz-top h3 { margin: 0; font-size: 20px; }
.mz-in { display: flex; min-height: min(560px, calc(100vh - 140px)); }
.mz-nav { flex: 0 0 260px; padding: 10px; border-right: 1px solid var(--line); display: flex; flex-direction: column; gap: 2px; }
.mz-st { display: flex; gap: 10px; align-items: flex-start; text-align: left; border: 0; background: transparent; border-radius: 10px; padding: 9px; font: inherit; color: var(--ink); cursor: pointer; }
.mz-st:hover { background: var(--fill); }
.mz-st.on { background: var(--fill); }
.mz-st:not(.on):not(.ok):not(.warn) { opacity: .7; }
.mz-dot { flex: none; width: 22px; height: 22px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; border: 1.5px solid var(--muted); color: var(--muted); box-sizing: border-box; }
.mz-st.on .mz-dot { background: var(--ink); border-color: var(--ink); color: var(--paper); }
.mz-st.ok .mz-dot { background: var(--teal); border-color: var(--teal); color: var(--on-teal); }
.mz-st.warn .mz-dot { background: var(--amber); border-color: var(--amber); color: #fff; }
.mz-st-t { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.mz-st-t b { font-size: 14px; font-weight: 600; }
.mz-st-t .small { line-height: 16px; }
.mz-pravo { flex: 1 1 auto; min-width: 0; padding: 14px 20px 16px; display: flex; flex-direction: column; gap: 10px; max-height: calc(100vh - 160px); overflow-y: auto; }
.mz-pravo p { margin: 0; }
.mz-hh { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 8px; }
.mz-h2 { font-size: 18px; font-weight: 700; }
.mz-h4 { margin: 4px 0 0; font-size: 14px; }
.mz-ban { margin: 0; }
.mz-porog input { width: 72px; height: 30px; padding: 2px 8px; font-size: 14px; }
.mz-tw { overflow-x: auto; }
.mz-zp td { vertical-align: top; }
.mz-zp tr.mz-hl td { background: color-mix(in srgb, var(--amber-soft) 55%, var(--paper)); }
.mz-zp tr.mz-sub td { font-size: 13px; background: var(--bg); padding-top: 5px; padding-bottom: 5px; }
.mz-zp .mz-za { white-space: nowrap; min-height: 0; padding: 0; }
.mz-up { color: var(--teal-ink); font-weight: 700; white-space: nowrap; }
.mz-dn { color: var(--rose); font-weight: 700; white-space: nowrap; }
.mz-flag { color: var(--amber); font-weight: 700; white-space: nowrap; }
.mz-pravki { background: var(--bg); border-radius: 10px; padding: 9px 12px; font-size: 13px; line-height: 19px; }
.mz-docs { flex-wrap: wrap; gap: 8px; align-items: center; }
.mz-niz { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px; margin-top: auto; padding-top: 4px; }
.mz-niz-r { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; justify-content: flex-end; }
/* «Расходы» (07.10.2026): итог по статьям строкой над таблицей; статья — отбор. */
.exp-line { margin: 0 0 12px; color: var(--muted); line-height: 1.6; }
.exp-line b { color: var(--ink); }
.exp-line .exp-cat { color: var(--muted); font-weight: 400; min-height: 0; padding: 0; text-decoration: none; }
.exp-line .exp-cat:hover { color: var(--teal); }
.exp-line .exp-cat.on { color: var(--teal-ink); font-weight: 600; }
#exp-t .linkish { min-height: 0; padding: 0; font-weight: 400; font-size: 12px; }
.exp-note { margin: 12px 2px 0; }
.exp-note .linkish { min-height: 0; padding: 0; }
.top .tools .kk-mon .per-m { display: inline-flex; align-items: center; padding: 0 12px; font-weight: 600; }
.kk-list { display: flex; flex-direction: column; gap: 4px; max-height: 50vh; overflow: auto; }
.kk-list .kk-p { width: 100%; text-align: left; font: inherit; color: inherit; background: none; border: 1px solid var(--line); border-radius: 8px; cursor: pointer; }
.kk-list .kk-p:hover { border-color: var(--teal); }
.pay-more-w { margin: 2px 0 6px; }
.pay-more-w #pay-more { margin-top: 6px; }
.zwhy2 { display: none; } .zwhy2.on { display: inline; }
.zwhy2 input { width: 170px; font-weight: 500; }
.zwhy2.bad input { box-shadow: inset 0 0 0 1.5px #d9534f; background: #fff3f2; }
.zwarn { display: flex; gap: 4px; flex: 1; min-width: 0; flex-wrap: wrap; max-height: 52px; overflow: hidden; align-content: center; align-items: center; }
.zwarn span { background: var(--amber-soft); border-radius: 6px; padding: 2px 7px; font-size: 11.5px; white-space: nowrap; }
.zwarn span.bad { background: var(--rose-soft); }
.zwarn span.msg { white-space: normal; }
.zbtn { border: 0; border-radius: 9px; background: var(--fill); height: 38px; padding: 0 12px; font: 600 12.5px var(--font); cursor: pointer; white-space: nowrap; line-height: 1.1; color: var(--ink); }
.zbtn small { display: block; font-weight: 500; font-size: 10px; opacity: .7; }
.zbtn.teal { background: var(--teal); color: var(--on-teal); }
.zbtn.soft { background: var(--teal-soft); color: var(--teal-ink); }
.zbtn.ghost { background: var(--paper); box-shadow: inset 0 0 0 1px var(--line); height: 30px; }
.zbtn.small { height: 26px; font-size: 11.5px; padding: 0 9px; }
.zwhy { position: absolute; bottom: 100%; right: 0; margin-bottom: 6px; background: var(--paper); border-radius: 10px; padding: 8px 10px;
  box-shadow: 0 12px 32px -8px rgba(0,0,0,.3), 0 0 0 1px var(--line); display: none; z-index: 50; gap: 8px; align-items: center; }
.zwhy.on { display: flex; }
.zwhy b { font-size: 12px; }
.zpop { position: fixed; z-index: 85; background: var(--paper); border-radius: 12px; box-shadow: 0 20px 50px -12px rgba(0,0,0,.4), 0 0 0 1px var(--line); padding: 12px 14px; display: none; overflow: auto; font-size: 12.5px; }
.zpop.on { display: block; }
.zpop h4 { margin: 0 0 8px; font-size: 13px; display: flex; gap: 8px; }
.zpop h4 button { margin-left: auto; border: 0; background: var(--fill); border-radius: 6px; cursor: pointer; padding: 2px 8px; }
#zb-log { left: 260px; bottom: 70px; width: min(780px, calc(100vw - 20px)); max-height: 60vh; }
#zb-hist { width: min(620px, calc(100vw - 20px)); max-height: 70vh; }
#zb-grp { padding: 6px; min-width: 180px; }
#zb-grp button { display: block; width: 100%; text-align: left; border: 0; background: none; padding: 6px 10px; border-radius: 6px; font: 500 13px var(--font); cursor: pointer; }
#zb-grp button:hover, #zb-grp button.on { background: var(--teal-soft); }

@media (max-width: 1100px) {
  .app.book-wide .main { height: auto; }
  .zb-main { grid-template-columns: 1fr; }
  .zb-form, .zb-form.two { width: auto; }
  .zpbody { min-height: 560px; }
  .zfoot { flex-wrap: wrap; }
}

/* Карточка пациента: данные, приёмы, деньги, документы — плитками в ряд. */
.pat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:var(--gap);margin-bottom:var(--gap);align-items:start}
.pat-grid .card{margin-bottom:0}
.fact{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px solid var(--line,rgba(0,0,0,.08));font-size:14px}
.fact:last-of-type{border-bottom:0}
.fact span{color:var(--muted,#8e8e93)}
.fact b{text-align:right;font-weight:600}
.fact.alert b{color:#b3261e}

/* Назначения: точки курса. */
.dots{display:flex;gap:4px;flex-wrap:wrap;max-width:180px}
.dot{width:11px;height:11px;border-radius:50%;border:2px solid var(--line,#c7c7cc);display:inline-block;box-sizing:border-box}
.dot.on{background:var(--teal,#0a7a6a);border-color:var(--teal,#0a7a6a)}
.dot.due{border-color:#e0a33c;box-shadow:0 0 0 2px rgba(224,163,60,.25)}

/* Кабинеты и очередь. */
.rooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:var(--gap);margin-bottom:var(--gap)}
.room{background: var(--paper);border-radius:14px;padding:12px 14px;border:1px solid var(--line,rgba(0,0,0,.08));border-left:5px solid #3fa86a}
.room.busy{border-left-color:#4a90c4}
.room.wait{border-left-color:#e0a33c}
.room.alarm{box-shadow:0 0 0 2px rgba(179,38,30,.35)}
.room-h{display:flex;flex-direction:column;margin-bottom:4px}
.room-s{font-weight:700;margin:2px 0}
.room-q{margin:6px 0 2px}

/* Табло для коридора: во весь экран, крупно, без меню. */
body.tablo-on .nav{display:none}
body.tablo-on .app{display:block}
body.tablo-on .main{max-width:none;width:100%;margin:0;padding:0}
.tablo{min-height:100vh;background:#0f1d1b;color:#fff;padding:3vh 4vw;box-sizing:border-box;font-size:2.2vh}
.tablo-h{display:flex;align-items:center;justify-content:space-between;font-size:4vh;margin-bottom:3vh}
.tablo-h span{font-variant-numeric:tabular-nums;opacity:.85}
.tablo-x{background:none;border:0;color:rgba(255,255,255,.35);font-size:3vh;cursor:pointer}
.tablo-call{display:flex;flex-direction:column;gap:1.6vh;margin-bottom:4vh}
.tablo-row{display:grid;grid-template-columns:minmax(0,2fr) auto minmax(0,1.4fr) minmax(0,1.4fr);align-items:baseline;gap:2vw;background:#14463f;border-radius:2vh;padding:2vh 2.4vw;font-size:5.4vh;font-weight:700;animation:tablo-in .6s ease}
.tablo-row .arrow{opacity:.6}
.tablo-row .where{color:#7ee0c8}
.tablo-row .doc{font-size:2.8vh;font-weight:500;opacity:.8}
.tablo-idle{font-size:3.6vh;opacity:.55;margin:4vh 0}
.tablo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(28vw,1fr));gap:1.4vh 1.6vw}
.tablo-cell{background:rgba(255,255,255,.06);border-radius:1.4vh;padding:1.4vh 1.4vw;display:flex;flex-direction:column;gap:.4vh}
.tablo-cell b{font-size:2.8vh}
.tablo-cell span{opacity:.7}
.tablo-cell em{font-style:normal;color:#7ee0c8}
/* Кабинет на двух языках (27.09.2026): русская строка и под ней таджикская, мельче. */
.room2{display:inline-flex;flex-direction:column;line-height:1.1}
.room2 small{font-size:.62em;font-weight:600;opacity:.8}
.tablo-cell .room2{opacity:.85}
.tablo-cell .room2 span{opacity:1}
.tablo-cell .room2 small{font-size:.85em;font-weight:400}
.tablo-cell.busy em{color:#f3c56b}
@keyframes tablo-in{from{transform:scale(.97);background:#1f7a6c}to{transform:none}}
/* График работы: врачи × дни. */
.table.grafik td, .table.grafik th { text-align: center; white-space: nowrap; padding: 6px 5px; font-size: 12.5px; }
.table.grafik td:first-child, .table.grafik th:first-child { text-align: left; }
.table.grafik td.gr-on { background: var(--ok-soft); }
.table.grafik td.gr-on.gr-special { background: var(--amber-soft); }
.table.grafik td.gr-off { color: var(--muted); background: repeating-linear-gradient(135deg, var(--fill) 0 6px, transparent 6px 12px); }

/* Скидки: две карточки рядом, на узком — одна под другой */
/* Одним столбцом (08.10.2026: «простота и чистота», как «Отчёты»). */
.dsc-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; align-items: start; max-width: 980px; }
.dsc-grid .table input { height: 28px; }
@media (max-width: 900px) { .dsc-grid { grid-template-columns: 1fr; } }
/* Аннулированный платёж (28.09.2026): строка остаётся, но видно, что денег нет. */
tr.annulled td { color: var(--muted, #888); }
tr.annulled td s { text-decoration-thickness: 1px; }
.zdcode { display: none; } .zdcode.on { display: inline; }
.zdcode input { width: 110px; box-shadow: inset 0 0 0 1.5px #e0a100; background: #fffbea; }
.rf-lines { display: flex; flex-direction: column; gap: 2px; max-height: 200px; overflow: auto; }
.rf-line { display: grid; grid-template-columns: 18px 1fr auto; gap: 8px; align-items: center; padding: 4px 6px; border-radius: 6px; cursor: pointer; }
.rf-line:hover { background: var(--fill); }
/* Счета: четыре карточки в ряд — касса, терминал, банк, всего */
/* Строка над таблицей: колонки, Excel, печать (js/kolonki.js) */
.tt-bar { position: relative; display: flex; justify-content: flex-end; gap: 2px; margin: -6px 0 0; height: 26px; }
.tt-bar button { border: 0; background: none; color: var(--muted, #6b7280); font: 500 11.5px var(--font); padding: 0 7px; height: 26px; min-height: 26px; border-radius: 6px; cursor: pointer; }
.tt-bar button:hover { background: var(--fill); color: var(--ink, #111); }
.tt-bar.tt-dock { margin: 0 0 0 auto; align-self: center; }
.tt-pop { position: absolute; right: 0; top: 28px; z-index: 50; background: var(--paper); border: 1px solid var(--line); border-radius: 10px; box-shadow: 0 8px 24px rgba(0,0,0,.12); padding: 8px 10px; min-width: 200px; max-height: 320px; overflow: auto; display: flex; flex-direction: column; gap: 3px; }
.tt-pop label { display: flex; gap: 7px; align-items: center; font-size: 13px; white-space: nowrap; cursor: pointer; }
.tt-pop .linkish { margin-top: 4px; align-self: flex-start; font-size: 12px; }
@media print { .tt-bar, .tt-pop { display: none !important; } }
/* Отбор по филиалу рядом с периодом */
.br-sep { width: 1px; height: 18px; background: var(--line); margin: 0 4px; }
.br-chips { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.br-chips .br-note { align-self: center; margin-left: 6px; }
.lang-alt { padding-left: 8px !important; padding-right: 8px !important; font-weight: 600; letter-spacing: .02em; }
/* Сортировка по заголовку, поиск, группы и итог у таблиц (как в МедСофте) */
th.tt-sortable { cursor: pointer; user-select: none; }
th.tt-sortable:hover { color: var(--ink, #111); }
th.tt-asc::after { content: " ▲"; font-size: 9px; color: var(--teal); }
th.tt-desc::after { content: " ▼"; font-size: 9px; color: var(--teal); }
.tt-bar .tt-q { height: 26px; border: 1px solid var(--line); border-radius: 7px; padding: 0 8px; font: 500 12px var(--font); width: 180px; margin-right: auto; background: var(--fill); outline: 0; }
.tt-bar .tt-q:focus { background: var(--paper); box-shadow: 0 0 0 2px var(--teal); }
.tt-bar .tt-cnt { align-self: center; margin-right: 6px; }
tr.tt-grp td { background: var(--fill); border-top: 1px solid var(--line); }
tr.tt-foot td { border-top: 2px solid var(--line); background: var(--fill); }
.pl-months td, .pl-months th { padding-left: 6px; padding-right: 6px; font-size: 12px; white-space: nowrap; }

/* Отчёты из МедСофта (otchety.js): цвет выполнения плана. */
.table td.ok { color: #1f8a3a; font-weight: 600; }
.table td.bad { color: var(--rose); font-weight: 600; }

/* ======== ОТЧЁТ — ВИДОМ ДОКУМЕНТА ========
   Замечание заказчика 23.09.2026: «у тебя каждая строка отчёта съедает
   огромное место, в один экран влезает пять-шесть строк, а должно быть
   минимум пятнадцать-двадцать. И не как у МедСофта — просто таблица из
   Excel, — а как документ». Поэтому у экранов-отчётов (`.rep-page`, список —
   `repLike` в js/rep.js) свой вид: заголовок и переключатели — одной
   невысокой полосой, плитки — узкой строкой, таблица — ровным мелким
   шрифтом, строка в одну линию (второе значение ячейки — рядом, серым, а не
   под ним), цифры вправо и моноширинные, строки через одну чуть серее.
   Кнопки не мельче 26 px — под мышь хватает. */
/* Отчёт — та же шапка и тот же край, что у всех экранов (08.10.2026);
   плотнее только таблица и плитки. */
.app.rep-page .top { margin-bottom: 10px; }
.app.rep-page .kk-under { margin: 6px 2px 0; }
.app.rep-page .top .tools { gap: 6px; }
/* Кнопки шапки отчёта — как у всех экранов (08.10.2026: один макет). */
.app.rep-page .chip { min-height: 28px; height: 28px; padding: 3px 11px; font-size: 13px; }
.app.rep-page #body > .row, .app.rep-page #body .row { gap: 6px; }
.app.rep-page #body > .row { margin-bottom: 8px !important; align-items: center; }
.app.rep-page #body input[type=month], .app.rep-page #body input[type=date], .app.rep-page #body input.search, .app.rep-page #body select {
  height: 28px; min-height: 28px; padding: 3px 8px; font-size: 13px; width: auto; max-width: 240px; border-radius: 8px; }
.app.rep-page .kpis { gap: 6px; margin-bottom: 8px; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); }
.app.rep-page .kpis .card { padding: 6px 10px; border-radius: 10px; }
.app.rep-page .kpis .card > span { font-size: 11.5px; }
.app.rep-page .kpis .card b { font-size: 18px; margin-top: 0; letter-spacing: -.02em; }
/* Подпись под цифрой — до трёх строк, а не многоточие: срезанная формула или дата
   («последний приём раньше 30.09.2…») — потерянный смысл (снимки экранов, 30.09.2026). */
.app.rep-page .kpis .card .muted.small { font-size: 11.5px; line-height: 1.25; overflow: hidden;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; }
.app.rep-page .kpis .card .linkish, .app.rep-page .kpis .card button { min-height: 26px; font-size: 12px; }
.app.rep-page .banner { padding: 5px 10px; font-size: 12.5px; margin-bottom: 6px; border-radius: 8px; }
.app.rep-page .card { padding: 8px 10px; border-radius: 12px; }
.app.rep-page .card h3 { font-size: 13px; margin: 0 0 4px; }
.app.rep-page .grid { gap: 8px; }
.app.rep-page p.muted.small, .app.rep-page .muted.small { font-size: 11.5px; }
.app.rep-page #body > p.muted.small { margin: 6px 2px 0; line-height: 1.35; }
.app.rep-page .table { font-size: 13px; line-height: 1.3; font-variant-numeric: tabular-nums; }
.app.rep-page .table th, .app.rep-page .table thead th { padding: 4px 7px; font-size: 11px; letter-spacing: .02em; background: #f4f4f7; border-bottom: 1px solid #d8d8de; vertical-align: bottom; }
.app.rep-page .table td { padding: 3px 7px; border-top: .5px solid #e6e6ea; }
.app.rep-page .table tbody tr:nth-child(even):not(.warn-row):not(.tt-grp):not(.pl-sum) > td { background: #fafafc; }
.app.rep-page .table tr.click:hover > td { background: #eef6f4; }
.app.rep-page .table td.num { white-space: nowrap; }
.app.rep-page .table tfoot td, .app.rep-page .table tr.tt-foot td { padding: 4px 7px; font-weight: 700; background: #f0f0f3; border-top: 1.5px solid #bdbdc4; }
.app.rep-page .table tr.tt-grp td { padding: 4px 7px; font-size: 12px; }
/* Второе значение ячейки — рядом, серым, а не второй строкой. */
.app.rep-page .table td > div:not(.row):not(.tools):not(.bar-t), .app.rep-page .table td > .sub, .app.rep-page .table td > br + .muted {
  display: inline; margin-left: 6px; font-size: 11.5px; }
.app.rep-page .table td > div:not([class]) { color: var(--muted); }
.app.rep-page .table .linkish { min-height: 0; height: auto; padding: 0; }
.app.rep-page .table td > br { display: none; }
.app.rep-page .table td > b, .app.rep-page .table td > a { font-weight: 600; }
.app.rep-page .table .btn { min-height: 26px; height: 26px; padding: 2px 10px; font-size: 12px; border-radius: 7px; }
.app.rep-page .table .tag { font-size: 11px; padding: 1px 6px; }
.app.rep-page .tt-bar { margin-bottom: 2px; }
.app.rep-page .bars { gap: 3px; }
.app.rep-page .bar-row { font-size: 12.5px; gap: 8px; }
.app.rep-page .empty { padding: 14px; font-size: 13px; }
.app.rep-page .fact { padding: 3px 0; font-size: 13px; }
.app.rep-page .list-item { padding: 4px 0; font-size: 13px; }
.app.rep-page .main { max-width: 1320px; }
/* Строка отчёта — одна линия: длинный текст обрезается многоточием (целиком
   он во всплывающей подсказке и в выгрузке), а не раздувает строку вдвое. */
.app.rep-page .table td { white-space: nowrap; max-width: 340px; overflow: hidden; text-overflow: ellipsis; }
.app.rep-page .table td.empty { white-space: normal; max-width: none; }
/* Пояснение мелким внутри строки (правило премии, «порог не достигнут», «оклады · премии») —
   переносится: само число строки остаётся в одну линию (30.09.2026). */
.app.rep-page .table td.small, .app.rep-page .table td > div.small { white-space: normal; }
.app.rep-page .card:has(> .table), .app.rep-page .card:has(> .tt-bar) { overflow-x: auto; }
/* Период, касса, разрезы и поиск — в одну полосу, пока хватает ширины. */
.app.rep-page #body > .row { display: inline-flex; flex-wrap: wrap; vertical-align: middle; margin: 0 14px 8px 0 !important; }
.app.rep-page #body > .banner { margin-top: 6px !important; }
.app.rep-page #body > .kpis { margin-top: 0; }
.app.rep-page #body > .row .row { margin: 0 !important; }
.app.rep-page .table td { max-width: 280px; }
.app.rep-page .bar-l i { display: inline; margin-left: 6px; }
.app.rep-page .bar-t { height: 8px; }
.app.rep-page .bars { gap: 2px; }
.app.rep-page .kpis + .kpis { margin-top: 0 !important; }
.app.rep-page .banner .btn { min-height: 26px; height: 26px; padding: 2px 10px; font-size: 12.5px; margin-left: 8px; }

/* Переключатель языка (js/til.js): «Русский · Тоҷикӣ». */
.til-pick { display: inline-flex; gap: 2px; background: var(--fill); border-radius: 10px; padding: 2px; margin-top: 10px; }
.til-pick button { border: 0; background: transparent; padding: 4px 12px; min-height: 28px; border-radius: 8px; font-size: 13px; color: var(--muted); }
.til-pick button.on { background: var(--paper); color: var(--ink); font-weight: 600; box-shadow: 0 1px 2px rgba(0,0,0,.08); }
.gate-til { background: rgba(255,255,255,.12); }
.gate-til button { color: #cfe3de; }
.gate-til button.on { background: rgba(255,255,255,.9); color: #07584d; }
.til-big button { min-height: 34px; padding: 6px 16px; font-size: 14px; }

/* ======== Календарь записи (js/calendar.js) — по образцу МедСофта ======== */
.app.cal-wide .main { max-width: none; padding: 12px 16px 24px; }
.calx { display: grid; grid-template-columns: 230px minmax(0, 1fr); gap: 12px; align-items: start; }
.cs { background: var(--paper); border-radius: 12px; padding: 8px; position: sticky; top: 8px; max-height: calc(100vh - 110px); overflow: auto; }
.cs-top { display: flex; align-items: center; justify-content: space-between; padding: 2px 4px 6px; }
.cs-fold { border: 0; background: var(--fill); border-radius: 6px; width: 26px; height: 26px; cursor: pointer; }
.cs button { font-family: inherit; }
.cs-all { display: block; width: 100%; text-align: left; border: 0; background: transparent; padding: 6px 8px; border-radius: 8px; font-size: 13px; font-weight: 600; cursor: pointer; }
.cs-all.on, .cs-doc.on { background: var(--teal); color: var(--on-teal); }
.cs-g { border-top: 1px solid var(--line); }
.cs-gh { display: flex; align-items: center; gap: 2px; padding: 3px 2px; }
.cs-gh.on .cs-name { color: var(--teal-ink); }
.cs-arr { border: 0; background: transparent; width: 22px; height: 26px; cursor: pointer; color: var(--muted); }
.cs-name { flex: 1; min-width: 0; text-align: left; border: 0; background: transparent; cursor: pointer; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .02em; padding: 4px 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cs-doc { display: block; width: calc(100% - 20px); margin: 0 0 3px 20px; text-align: left; border: 1px solid var(--line); background: var(--bg); border-radius: 7px; padding: 5px 8px; font-size: 12.5px; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cs-doc:hover { border-color: var(--teal); }
.cmain { min-width: 0; }
.cbar { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; }
.cbar .btn { min-height: 30px; height: 30px; padding: 3px 12px; font-size: 13px; }
.ctitle { flex: 1; text-align: center; font-size: 15px; }
.cviews { display: inline-flex; gap: 4px; }
.cviews button { border: 1px solid var(--line); background: var(--paper); border-radius: 8px; height: 30px; padding: 0 12px; font: 600 13px var(--font); cursor: pointer; }
.cviews button.on { background: var(--teal); border-color: var(--teal); color: var(--on-teal); }
.cg { background: var(--paper); border-radius: 12px; overflow: hidden; border: 1px solid var(--line); }
.cg-head { display: grid; grid-template-columns: var(--cg-tpl, 52px repeat(var(--cols), minmax(130px, 1fr))); border-bottom: 1px solid var(--line); background: #f7f7fa; }
.cg-h { padding: 6px 6px; font-size: 12px; font-weight: 700; text-align: center; color: var(--teal-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; border-left: 1px solid var(--line); }
.cg-h.today { background: var(--teal-soft); }
.cg-scroll { max-height: calc(100vh - 190px); overflow: auto; }
.cg-in { display: grid; grid-template-columns: var(--cg-tpl, 52px repeat(var(--cols), minmax(130px, 1fr))); }
.cg-t { font-size: 13px; padding: 0 4px; border-top: 1px solid var(--line); text-align: right; line-height: 1.2; box-sizing: border-box; }
.cg-t sup { font-size: 9px; margin-left: 1px; color: var(--muted); }
.cg-col { border-left: 1px solid var(--line); }
.cg-col.today { background: rgba(10,122,106,.035); }
.cg-col { min-width: 0; }
.cg-body { position: relative; }
.cg-c { border-top: 1px solid var(--line); box-sizing: border-box; cursor: pointer; }
.cg-c:hover { background: var(--teal-soft); }
.cg-c.off { background: repeating-linear-gradient(135deg, var(--fill) 0 5px, transparent 5px 10px); cursor: default; }
.cg-c.past { cursor: default; } .cg-c.past:hover { background: none; }
.cg-c.off.past:hover { background: repeating-linear-gradient(135deg, var(--fill) 0 5px, transparent 5px 10px); }
.cg-v { position: absolute; box-sizing: border-box; border-radius: 6px; padding: 2px 6px; font-size: 11.5px; line-height: 1.25; overflow: hidden; cursor: pointer; border-left: 3px solid var(--teal); background: var(--teal-soft); z-index: 1; }
.cg-v b { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }
.cg-v div { color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Тесно — уходит буква имени, потом время; фамилия целиком (`calFit`, n3 01.10.2026). */
.cg-v b.cg-fit1 .cg-ini, .cg-v b.cg-fit2 .cg-tm { display: none; }
.cg-v.wait { background: #eef0f6; border-left-color: #6b7a99; }
.cg-v.arrived { background: var(--amber-soft); border-left-color: var(--amber); }
.cg-v.open { background: var(--teal); color: var(--on-teal); } .cg-v.open div { color: rgba(0,45,66,.75); }
.cg-v.done, .cg-v.review { background: var(--ok-soft); border-left-color: #1f8a3a; }
.cg-v.noshow { background: var(--fill); color: var(--muted); text-decoration: line-through; border-left-color: var(--rose); }
.cg-now { position: absolute; left: 0; right: 0; height: 0; border-top: 2px solid var(--rose); z-index: 2; pointer-events: none; }
.cg-offday { position: absolute; top: 8px; left: 0; right: 0; text-align: center; font-size: 12px; color: var(--muted); pointer-events: none; }
.cw-card { padding: 0; overflow: auto; }
.cw { width: 100%; border-collapse: collapse; }
.cw th { font-size: 12px; color: var(--teal-ink); padding: 6px; border-bottom: 1px solid var(--line); background: #f7f7fa; }
.cw th.today, .cw td.today { background: var(--teal-soft); }
.cw .cw-t { width: 52px; text-align: right; color: var(--ink); font-size: 13px; background: #f7f7fa; }
.cw .cw-t sup { font-size: 9px; color: var(--muted); }
.cw td { border: 1px solid var(--line); height: 30px; text-align: center; cursor: pointer; font-size: 13px; }
.cw td:hover { background: var(--teal-soft); }
.cm { background: var(--paper); border-radius: 12px; overflow: hidden; border: 1px solid var(--line); }
.cm-h { display: grid; grid-template-columns: repeat(7, 1fr); background: #f7f7fa; border-bottom: 1px solid var(--line); }
.cm-h div { text-align: center; font-size: 12px; font-weight: 700; color: var(--teal-ink); padding: 6px; }
.cm-g { display: grid; grid-template-columns: repeat(7, 1fr); }
.cm-c { min-height: 92px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: 6px 8px; cursor: pointer; font-size: 12px; position: relative; }
.cm-c:hover { background: var(--teal-soft); }
.cm-c.today { background: rgba(10,122,106,.10); }
.cm-c.other { color: var(--muted); background: #fafafc; }
.cm-c.off { background: repeating-linear-gradient(135deg, var(--fill) 0 5px, transparent 5px 10px); }
.cm-d { position: absolute; top: 4px; right: 8px; font-weight: 700; color: var(--teal-ink); }
.cm-c.other .cm-d { color: var(--muted); font-weight: 400; }
.cm-n { margin-top: 18px; } .cm-f { color: var(--muted); }
@media (max-width: 900px) { .calx { grid-template-columns: 1fr; } .cs { position: static; max-height: none; } }

/* Свёрнутые группы (js/fold.js). */
.fold-h { display: flex; align-items: center; gap: 8px; width: 100%; border: 0; background: transparent; padding: 7px 4px; cursor: pointer; text-align: left; font: inherit; border-radius: 8px; }
.fold-h:hover { background: var(--fill); }
.fold-h .fold-a { font-style: normal; width: 14px; color: var(--muted); }
.fold-h b { font-size: 14px; font-weight: 700; }
.fold-h .fold-n { font-size: 12px; color: var(--muted); background: var(--fill); border-radius: 99px; padding: 1px 8px; }
.fold-h .fold-about { font-size: 12px; color: var(--muted); margin-left: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: 1; }
.fold-all { font-size: 13px; }
.fold-all.fold-dock { margin-left: auto; white-space: nowrap; }
.tools > .fold-all.fold-dock { margin-left: 0; }
.fold-g { border-bottom: 1px solid var(--line); }
.fold-g:last-child { border-bottom: 0; }
.fold-body { padding: 0 0 6px 22px; }
/* Свёрнутая группа карточкой («Договоры и согласия», 16.10.2026): у карточки
   свои поля со всех сторон – без них длинное название упиралось в правый край,
   стрелка строки и «+ ДИС» прилипали к рамке. */
.fold-body.card { padding: 12px 16px 12px 22px; }
.fold-body .list-item { gap: 12px; }
.fold-body .list-item > div:first-child { min-width: 0; }
.dog-map td .linkish { display: inline; min-height: 0; padding: 0; text-align: left; }
.rep-groups { padding: 4px 8px; }
.table tr.fold-row td { padding: 2px 4px; border-top: 1px solid var(--line); }
/* Договоры и согласия: кому что печатается */
.dog-map { width: 100%; border-collapse: collapse; font-size: 13px; }
.dog-map th { text-align: left; font-weight: 600; color: var(--muted, #667); padding: 4px 6px; border-bottom: 1px solid var(--line, #e3e6ea); }
.dog-map td { padding: 4px 6px; border-bottom: 1px solid var(--line, #eef0f2); }
.dog-note { margin: 2px 0 8px; }
.dg-s { padding: 5px 8px; }
/* ---------- Пульт директора: общее с «Аналитикой» и окнами (js/pult.js, js/analitika-oblasti.js, графики — js/diagramma.js) ----------
   Вид Главной директора — блок «Главная директора, 14.10.2026» в конце файла. Бирюзовый — деньги
   клиники, оранжевый (--out) — «ушло»; подписи на графиках — тёмным текстом. */
:root { --out: #f4891f; --out-soft: #fbc796; --rose-ink: #a1281d; --amber-ink: #8a4a0c; --ok-ink: #2f6e40; }
.pult-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 0 6px; margin-bottom: 4px; }
.dg-split i.out { background: var(--out); }
.dg-split i.out2 { background: var(--out-soft); }
.pult-rl { max-height: 60vh; overflow: auto; margin: 6px 0 10px; }
.pult-rr { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 8px 0; border-top: 1px solid var(--line); }
.pult-rr > span { display: flex; flex-direction: column; min-width: 0; }
.pult-tb { width: 100%; font-size: 14px; }
.pult-tb th, .pult-tb td { padding: 8px 10px; line-height: 18px; }
.pult-tb th.num, .pult-tb td.num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.pult-tb td.pult-dl { font-size: 14px; }
.pult-tb tfoot td { font-weight: 700; border-bottom: 0; }
.pult-tb tr.pult-de td { color: var(--muted); }
.pult-tb tr.pult-de td:first-child .linkish { font-weight: 600; }
.pult-dr-bg { position: fixed; inset: 0; background: rgba(28, 28, 30, .32); z-index: 14; }
.pult-drill { position: fixed; top: 0; right: 0; bottom: 0; z-index: 15; width: min(620px, 100%); box-sizing: border-box; padding: 18px 24px; overflow-y: auto;
  display: flex; flex-direction: column; gap: 14px; background: var(--paper); box-shadow: -12px 0 40px rgba(0, 0, 0, .16); }
.pult-dr-h { display: flex; align-items: center; gap: 12px; }
.pult-dr-h h2 { margin: 0; font-size: 21px; }
.pult-bxs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.pult-bx { display: flex; flex-direction: column; min-width: 0; padding: 8px 12px; border-radius: 12px; background: var(--bg); }
.pult-bx b { font-size: 19px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.pult-bx .pult-dl { font-size: 12px; white-space: normal; }
.pult-why { font-size: 14px; line-height: 20px; padding: 10px 12px; border-radius: 12px; background: var(--teal-soft); }
.pult-why.dn { background: var(--rose-soft); }
.pult-st { font-size: 14px; font-weight: 700; margin-bottom: 6px; }
.pult-sv { display: grid; grid-template-columns: minmax(0, 1fr) 130px 70px; gap: 10px; align-items: center; padding: 4px 0; font-size: 14px; }
.pult-sv b { text-align: right; font-variant-numeric: tabular-nums; }
.pult-db { height: 8px; background: var(--fill); border-radius: 4px; overflow: hidden; }
.pult-db i { display: block; height: 100%; min-width: 2px; background: var(--teal); border-radius: 4px; }
.pult-dr-f { margin-top: auto; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding-top: 12px; border-top: 1px solid var(--line); }
.pult-sk { display: block; margin: 8px 0; border-radius: 8px; background: var(--fill); animation: pult-sk 1.1s ease-in-out infinite alternate; }
.pult-sk-l .pult-sk { height: 14px; }
@keyframes pult-sk { from { opacity: .55; } to { opacity: 1; } }
.pult-og { margin: 12px 0 2px; font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.pult-o { display: flex; justify-content: space-between; gap: 10px; width: 100%; min-height: 40px; background: none; border: 0; border-bottom: 1px solid var(--line);
  font: inherit; color: inherit; text-align: left; cursor: pointer; }
.pult-o:disabled { cursor: default; opacity: 1; }
.pult-o b, .pult-net b { font-variant-numeric: tabular-nums; white-space: nowrap; }
.pult-net { font-weight: 700; border-top: 2px solid var(--line); }
.por-list { margin: 6px 0; }
.por-card { max-width: none; }  /* во всю ширину, как остальные карточки (16.10.2026) */
.por-g { margin: 12px 0 2px; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); }
.por-r { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 12px; padding: 4px 0; border-top: 1px solid var(--line); font-size: 14px; }
.por-on { display: flex; align-items: center; gap: 8px; flex: 1 1 260px; min-height: 36px; cursor: pointer; }
.por-p { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: 13px; }
.por-p input { width: 88px; height: 34px; padding: 4px 8px; font-size: 14px; }
.dg-fall { display: grid; grid-template-columns: repeat(var(--n), minmax(0, 1fr)); gap: 4px; margin-top: 22px; }
.dg-f { display: flex; flex-direction: column-reverse; min-width: 0; cursor: default; }
.dg-fb { position: relative; height: 200px;
  background: linear-gradient(to top, transparent calc(var(--z) - 1px), var(--line) calc(var(--z) - 1px), var(--line) var(--z), transparent var(--z)); }
.dg-fb i { position: absolute; left: 12%; right: 12%; bottom: var(--a); height: calc(var(--b) - var(--a)); min-height: 2px; border-radius: 3px; background: var(--teal); }
.dg-f.out .dg-fb i, .dg-f.neg .dg-fb i { background: var(--out); }
.dg-fb b { position: absolute; left: -4px; right: -4px; bottom: calc(var(--b) + 3px); text-align: center; font-size: 12px; font-weight: 700; color: var(--ink);
  white-space: nowrap; font-variant-numeric: tabular-nums; }
.dg-fb::after { content: ""; position: absolute; left: 88%; width: calc(24% + 4px); bottom: var(--c, -9999px); border-top: 1px dashed color-mix(in srgb, var(--ink) 35%, transparent); }
.dg-f:last-child .dg-fb::after { display: none; }
.dg-fn { margin-top: 6px; font-size: 11px; line-height: 1.2; text-align: center; color: var(--ink); min-height: 2.4em; }
.dg-split { display: flex; gap: 2px; height: 10px; border-radius: 6px; overflow: hidden; margin-top: 12px; }
.dg-split i { display: block; min-width: 2px; }
/* ---------- «Деньги» (js/dengi-ekran.js, dengi-pu.js, dengi-dvizh.js; C1 02.10.2026) ----------
   Плитки и графики — как на пульте (.pult-k, js/diagramma.js). */
.pu-year { display: inline-flex; align-items: center; gap: 6px; margin-left: 8px; }
.pu-year .chip { margin: 0; }
.pu-t tr.pu-g td { background: var(--fill); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); padding-top: 6px; padding-bottom: 6px; }
.pu-t tr.pu-pok td:first-child { color: var(--muted); }
.pu-t td.num, .pu-t th.num { white-space: nowrap; }
/* ---------- Главная руководства (js/home.js; вид «Требует внимания» — в блоке «Главная директора, 14.10.2026» в конце) ---------- */
.home-t { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.home-t th { text-align: left; font-weight: 600; color: var(--muted, #6b7280); font-size: 12px; padding: 4px 6px; border-bottom: 1px solid var(--line, #e3e6ea); }
.home-t td { padding: 5px 6px; border-bottom: 1px solid var(--line, #eef0f2); }
.home-t td:nth-child(n+2), .home-t th:nth-child(n+2) { text-align: center; }
.home-t td:first-child, .home-t th:first-child { text-align: left; }

/* ======== ФОН ПРОГРАММЫ (замечание заказчика 24.09.2026: «выбрать фон
   программы, дай возможности») ========
   Тема — настройка этого компьютера, как плотность: читается до первой
   отрисовки (page.html), живёт в localStorage («ormin-theme»). Светлые темы
   меняют только фон, карточки и заливки — цвета смысла (красное «нужно»,
   зелёное «готово», бирюзовые кнопки) остаются теми же, чтобы переход
   между компьютерами не путал. Тёмная переопределяет и пастельные блоки. */
:root[data-theme="warm"] { --bg: #f3eee4; --paper: #fffdf8; --fill: #eae3d4; --line: rgba(90, 70, 40, .14); --muted: #8e8474; }
:root[data-theme="sky"] { --bg: #e8eff7; --paper: #ffffff; --fill: #dce5ef; --line: rgba(40, 70, 110, .13); --muted: #7b8898; }
:root[data-theme="mint"] { --bg: #e6f2ed; --paper: #ffffff; --fill: #d8eae2; --line: rgba(20, 90, 70, .13); --muted: #7a8c85; }
:root[data-theme="lilac"] { --bg: #efedf7; --paper: #ffffff; --fill: #e2dff0; --line: rgba(70, 60, 120, .13); --muted: #857f99; }
:root[data-theme="gray"] { --bg: #d9dce1; --paper: #ffffff; --fill: #e8eaed; --line: rgba(40, 45, 55, .15); --muted: #767c85; }
:root[data-theme="dark"] {
  color-scheme: dark;
  /* Тёмная — ночной тёмно-синий брендбука, а не серый (14.10.2026). */
  --bg: #071c27; --paper: #0d2836; --ink: #e6eef1; --muted: #9db2bc; --line: rgba(230, 238, 241, .12); --line-2: rgba(230, 238, 241, .07); --fill: #16384a;
  --teal: #27beb6; --teal-ink: #7dd8d3; --teal-soft: #11433f; --teal-10: #0f3a3c; --on-teal: #002d42;
  --navy: #33576a; --navy-20: rgba(230, 238, 241, .2); --navy-10: #1b3e50;
  --amber: #f4a24f; --amber-soft: #43301a; --rose: #ff7a6e; --rose-soft: #45201d; --ok: #8cd29a; --ok-soft: #173a29;
  --c-fin: #11433f; --c-pac: #1f3d2a; --c-med: #1b3e50; --c-skl: #43301a;
  --shadow: 0 0 0 1px var(--line);
  --shadow-lift: 0 6px 24px rgba(0, 0, 0, .35);
}
:root[data-theme="dark"] .who-av { background: #27beb6; color: #002d42; }
/* На тёмном фоне логотип белый (брендбук: цветной — только на белом) — атрибутом
   `tone` компонента, его ставит `brandVid` (js/logo.js): css внутрь не достаёт. */
:root[data-theme="dark"] .s-bad { color: #ffb3ad; }
:root[data-theme="dark"] { --out: #f0844f; --out-soft: #7a4a33; --rose-ink: #ffb3ad; --amber-ink: #f3c37a; --ok-ink: #8fe0aa; }
:root[data-theme="dark"] .module.m-need { background: #2e1d1d; box-shadow: inset 0 0 0 1.5px rgba(255, 107, 97, .55); }
:root[data-theme="dark"] .module.m-done { background: #162b27; box-shadow: inset 0 0 0 1.5px rgba(47, 174, 152, .45); }
:root[data-theme="dark"] .module.m-soft.s1 { background: #2a2419; }
:root[data-theme="dark"] .module.m-soft.s2 { background: #1a2431; }
:root[data-theme="dark"] .module.m-soft.s3 { background: #1a2b21; }
:root[data-theme="dark"] .module.m-soft.s4,
:root[data-theme="dark"] .cardflow .itog > .card,
:root[data-theme="dark"] .dog-card { background: #24202f; }
:root[data-theme="dark"] .chip.warn { background: #3b2321; }
:root[data-theme="dark"] .table tr.click:hover,
:root[data-theme="dark"] .icd-list .list-item:hover { background: #262a2f; }
:root[data-theme="dark"] .zf.need input { background: #33291a; }
:root[data-theme="dark"] .zbar.v, :root[data-theme="dark"] .zsec, :root[data-theme="dark"] .zfl.c,
:root[data-theme="dark"] .ztag.dv { background: #2b2642; color: #cbbff7; }
:root[data-theme="dark"] .zfl.d { color: #f0c27a; }
:root[data-theme="dark"] .zcart tr.two td { background: #221f31; }
:root[data-theme="dark"] .zc:hover { background: #1f3a2b; }
:root[data-theme="dark"] .zwhy2.bad input { background: #3a2020; }
:root[data-theme="dark"] .zdcode input { background: #332c14; }
:root[data-theme="dark"] .app.rep-page .table th, :root[data-theme="dark"] .app.rep-page .table thead th { background: #25292e; border-bottom-color: #3a3f45; }
:root[data-theme="dark"] .app.rep-page .table tbody tr:nth-child(even):not(.warn-row):not(.tt-grp):not(.pl-sum) > td { background: #1a1d20; }
:root[data-theme="dark"] .app.rep-page .table tr.click:hover > td { background: #1c302c; }
:root[data-theme="dark"] .app.rep-page .table tfoot td, :root[data-theme="dark"] .app.rep-page .table tr.tt-foot td { background: #25292e; border-top-color: #555b62; }
:root[data-theme="dark"] .cg-head, :root[data-theme="dark"] .cw th, :root[data-theme="dark"] .cw .cw-t, :root[data-theme="dark"] .cm-h { background: #25292e; }
:root[data-theme="dark"] .cg-v.wait { background: #23283a; }
:root[data-theme="dark"] .cm-c.other { background: #191b1e; }
:root[data-theme="dark"] { --bar-bg: rgba(30, 33, 36, .97); }
:root[data-theme="warm"] { --bar-bg: rgba(255, 253, 248, .97); }
:root[data-theme="dark"] .btn.dark { background: #3a3f45; color: #fff; }
:root[data-theme="dark"] .nav button:hover { background: rgba(255, 255, 255, .06); }
:root[data-theme="dark"] .zc { color: #8fe3a9; }
:root[data-theme="dark"] .zc:hover { background: #1f4a2e; }
:root[data-theme="dark"] .preview { color-scheme: light; }

/* Образцы тем на экране «Вид программы». */
.th-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.th-sw { border: 0; border-radius: 12px; padding: 8px; cursor: pointer; text-align: left; font: 600 13px var(--font); color: #1c1c1e;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .12); display: flex; flex-direction: column; gap: 6px; }
.th-sw.on { box-shadow: inset 0 0 0 2.5px var(--teal); }
.th-sw .th-p { display: flex; gap: 5px; height: 38px; }
.th-sw .th-p i { flex: 1; border-radius: 7px; }
.th-sw .th-p i:first-child { flex: .45; }
.th-sw.dark { color: #e8eaed; }
/* Кадры: сотрудники и их услуги (js/kadry.js) */
.btn.sm { height: 28px; padding: 0 10px; font-size: 12.5px; border-radius: 8px; }
.ss { display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: 12px; align-items: start; }
.ss-list { padding: 10px; max-height: calc(100vh - 170px); overflow: auto; position: sticky; top: 12px; }
.ss-list input { width: 100%; margin-bottom: 6px; }
.ss-dep { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); margin: 8px 4px 3px; font-weight: 600; }
.ss-doc { display: flex; flex-direction: column; width: 100%; text-align: left; border: 0; background: none; border-radius: 9px; padding: 6px 8px; cursor: pointer; font: inherit; color: inherit; }
.ss-doc:hover { background: var(--fill); }
.ss-doc.on { background: var(--teal-soft); }
/* Отделения слева свёрнуты (js/fold.js) — заголовок группы мельче, по ширине колонки. */
.ss-g .fold-h { padding: 5px 4px; }
.ss-g .fold-h b { font-size: 12.5px; }
.ss-t input.ss-v, .ss-rate { width: 76px; text-align: right; padding: 4px 6px; }
.ss-t select { padding: 4px 6px; }
@media (max-width: 1000px) { .ss { grid-template-columns: 1fr; } .ss-list { position: static; max-height: 240px; } }
.ss .ss-h b { font-size: 17px; }
.ss input.ss-rate, .ss .ss-t input.ss-v { width: 74px; height: 30px; text-align: right; padding: 4px 8px; font-size: 14px; }
.ss .ss-t select { min-width: 140px; height: 30px; padding: 2px 8px; font-size: 13.5px; }
.ss .ss-t td { vertical-align: middle; padding-top: 6px; padding-bottom: 6px; }
/* Бонусы за услугу нескольким (24.09.2026): строка «из кого выбирать» под
   получателем «по выбору на приёме» и выбор участника в карте и в окне оплаты. */
.ss .ss-t input.st-role { width: 150px; height: 30px; padding: 4px 8px; font-size: 13.5px; }
.ss .ss-t select.st-who { min-width: 190px; }
.ss .ss-t tr.st-pick-row td { background: var(--fill); padding-top: 4px; padding-bottom: 6px; }
.ss .ss-t tr.st-pick-row .chip { min-height: 28px; padding: 2px 10px; margin: 2px 4px 2px 0; }
.ss .ss-t select.st-pick-add { min-width: 170px; }
/* «Сотрудники» и карточка человека (B1, 02.10.2026; js/kadry.js, js/sotrudnik.js,
   js/sotrudnik-oplata.js; макет — доска «Сотрудник: схема оплаты»): вкладки
   чипами, «Из чего складывается» строками, справа — месяц и история условий. */
/* Вкладки — одной линией с подчёркиванием бирюзой (14.10.2026, как у
   Crestway), а не зелёными «таблетками»; одного размера на всех экранах. */
.sk-tabs { display: flex; flex-wrap: wrap; gap: 4px 20px; margin: 0 0 12px; box-shadow: inset 0 -1px 0 var(--line); }
.sk-tabs .chip, .app.rep-page .sk-tabs .chip { min-height: 36px; height: 36px; padding: 0 2px; margin: 0; font-size: 14.5px; font-weight: 600;
  background: transparent; color: var(--muted); border-radius: 0; box-shadow: inset 0 -2px 0 transparent; transition: color .15s, box-shadow .15s; }
.sk-tabs .chip:hover { color: var(--ink); background: transparent; }
.sk-tabs .chip.on { background: transparent; color: var(--ink); font-weight: 800; box-shadow: inset 0 -2px 0 var(--teal); }
.nav-back svg { width: 18px; height: 18px; flex: none; }
/* Вкладки и период в шапке (08.10.2026): вкладки — под заголовком вместо
   строки пояснения, период отчёта — рядом с кнопками справа. */
/* Вкладок в шапке не больше четырёх (16.10.2026, js/vkladki.js): с пяти –
   список слева. Ползунка нет; не влезли (телефон) – переносом. */
.top-t .sk-tabs { margin: 0; flex-wrap: wrap; max-width: 100%; min-width: 0; }
.top-t { min-width: 0; }
.top-tabs-r { display: flex; align-items: center; gap: 12px; margin-top: 8px; min-width: 0; }
.top-sub { color: var(--muted); font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: 1 1 0; width: 0; }
@media (max-width: 699px) { .top-tabs-r { flex-wrap: wrap; } .top-t .sk-tabs { gap: 0 16px; } }
.top.top-tabs { align-items: flex-start; flex-wrap: wrap; }
/* Заголовок с вкладками не уже самих вкладок (ползунка нет): не влезают
   кнопки справа – они уходят строкой ниже. На планшете и телефоне – переносом. */
.top.top-tabs .top-l { flex: 1 1 0; min-width: max-content; }
@media (max-width: 979px) { .top.top-tabs .top-l { min-width: 0; } }
/* Компьютер: кнопки справа – одной строкой, поле поиска сжимается до 120 px;
   не влезли и так – вся группа кнопок строкой ниже (а не вкладки вбок). */
@media (min-width: 980px) {
  .top.top-tabs .tools { flex: 1 1 0; min-width: min-content; flex-wrap: nowrap; }
  .top.top-tabs .tools > input.search, .top.top-tabs .tools > .search { flex: 0 1 220px; min-width: 120px; width: auto; }
}
.top.top-tabs .tools { margin-left: auto; }
.top-t .sk-tabs .chip { white-space: nowrap; flex: none; }
.top.top-tabs .top-l { align-items: flex-start; }
.top.top-tabs .tools { padding-top: 2px; }
/* Шапка с вкладками на компьютере (16.10.2026, заказчик: «пустые места везде
   в три строки… после надписи „Прайс-лист“ можно же вместить вторую строку»).
   Было: кнопки справа вставали рядом с блоком «заголовок + вкладки» шириной в
   сами вкладки, не влезали – уходили отдельной строкой, а справа от
   заголовка оставалась пустота. Теперь сетка из двух строк: «← Назад»,
   заголовок и кнопки – первой строкой, вкладки и пояснение – второй, под
   заголовком. Кнопкам не хватает места – поиск сжимается, затем они
   переносятся внутри своей правой части, а не всей группой вниз. */
@media (min-width: 700px) {
  .top.top-tabs:not(:has(.kas-pill)) { display: grid; grid-template-columns: max-content minmax(0, 1fr); column-gap: 16px; row-gap: 6px; align-items: center; }
  .top.top-tabs:not(:has(.kas-pill)):has(> .top-l > .nav-back) { grid-template-columns: auto max-content minmax(0, 1fr); }
  .top.top-tabs:not(:has(.kas-pill)) > .top-l, .top.top-tabs:not(:has(.kas-pill)) .top-t { display: contents; }
  .top.top-tabs:not(:has(.kas-pill)) > .top-l > .nav-back { grid-row: 1; grid-column: 1; }
  .top.top-tabs:not(:has(.kas-pill)) h1 { grid-row: 1; white-space: nowrap; }
  .top.top-tabs:not(:has(.kas-pill)) > .tools { grid-row: 1; grid-column: -2 / -1; justify-self: end; margin: 0; padding: 0; min-width: 0; max-width: 100%; flex-wrap: wrap; row-gap: 8px; }
  .top.top-tabs:not(:has(.kas-pill)) > .tools:empty { display: none; }
  .top.top-tabs:not(:has(.kas-pill)) .top-tabs-r { grid-row: 2; grid-column: 1 / -1; margin: 0; }
  .top.top-tabs:not(:has(.kas-pill)):has(> .top-l > .nav-back) .top-tabs-r { grid-column: 2 / -1; }
  .top.top-tabs:not(:has(.kas-pill)) > .tools > .sv-tools { display: contents; }
  .top.top-tabs:not(:has(.kas-pill)) > .tools input.flt-head, .top.top-tabs:not(:has(.kas-pill)) > .tools input.search { flex: 0 1 220px; min-width: 120px; width: auto; }
}
.tools .kk-per { margin: 0 !important; display: inline-flex; flex-wrap: nowrap; align-items: center; gap: 6px; }
.tools .kk-dates input[type=date] { width: 148px; margin: 0; height: var(--chip-h); }
.sk-quick { gap: 6px; margin: 0 0 10px; align-items: center; flex-wrap: wrap; }
/* «Сотрудники» (макет v2, 09.10.2026): отборы «Все · N / Врачи · N…» — в
   шапке одной группой; метки у имени — испытательный срок и «по договору». */
.top-t .sk-quick { display: inline-flex; margin: 0; gap: 4px; flex-wrap: nowrap; }
.top-t .sk-quick .chip { white-space: nowrap; flex: none; min-height: 30px; height: 30px; padding: 3px 11px; font-size: 13px; }
@media (min-width: 700px) { .tools input.flt-head.sk-find { width: 190px; } }
@media (max-width: 699px) { .top-t .sk-quick { flex-wrap: wrap; } }
.staff-all .tag { font-size: 11.5px; padding: 1px 7px; font-weight: 600; white-space: nowrap; }
.staff-all .tag.sk-trial, .pv-doc .tag.sk-trial { background: var(--amber-soft); color: var(--amber-ink, #7a4700); }
.staff-all .tag.sk-invited { background: var(--fill); color: var(--ink); }
.staff-all .sk-login-st.warn-text { font-weight: 600; }
.sk-trial-row { align-items: flex-end; }
.sk-trial-row .sk-inv { flex: 1; display: flex; gap: 8px; align-items: center; min-height: 40px; margin-bottom: 12px; }
.sk-quick > .row { margin: 0 0 0 6px !important; }
.sk-acc { display: flex; flex-direction: column; align-items: flex-end; }
.sk-acc b { font-size: 24px; letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.sk-grid { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: var(--gap); align-items: start; }
.sk-side { display: grid; gap: var(--gap); }
.sk-pay { display: grid; gap: 18px; }
.sk-sec { display: grid; gap: 8px; }
.sk-cap { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--teal-ink); margin: 0 0 6px; }
.sk-sec .sk-cap { margin: 0; }
.sk-work { gap: 6px; }
.sk-scheme { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 10px 12px; border-radius: 12px; background: var(--fill); }
.sk-sp { flex: 1 1 auto; }
.sk-lines { display: grid; }
.sk-line { display: grid; grid-template-columns: 170px minmax(0, 1fr) auto; gap: 4px 14px; align-items: center; width: 100%; min-height: 44px;
  padding: 9px 4px; border: 0; border-bottom: 1px solid var(--line); background: none; font: inherit; color: inherit; text-align: left; cursor: pointer; }
.sk-line:hover { background: var(--fill); }
.sk-line.sk-line-ro { cursor: default; }
.sk-line.sk-line-ro:hover { background: none; }
.sk-line .linkish { margin: 0; }
.tag.sk-own { background: var(--amber-soft); }
.sk-empty { padding: 10px 2px; }
.sk-add { display: flex; flex-wrap: wrap; gap: 8px; padding-top: 4px; }
.btn.sk-plus { border: 1px dashed var(--teal); color: var(--teal-ink); background: var(--paper); }
.sk-plan { display: grid; gap: 8px; padding: 12px 14px; border-radius: 14px; background: var(--teal-soft); }
.sk-plan .sk-cap { margin: 0; }
.sk-plan-row { display: grid; grid-template-columns: 120px minmax(0, 1fr) auto; gap: 4px 12px; align-items: baseline; font-size: 14px; }
.sk-plan-row .linkish { margin: 0; min-height: 0; padding: 0 2px; }
.sk-tpl { margin-top: -6px; }
.sk-hist { display: grid; grid-template-columns: 92px minmax(0, 1fr); gap: 6px 12px; font-size: 13px; }
.sk-month { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px 12px; font-size: 14px; align-items: baseline; }
.sk-month-sum { display: flex; justify-content: space-between; gap: 12px; padding-top: 8px; margin-top: 8px; border-top: 1px solid var(--line); font-size: 14px; }
.sk-prev { display: grid; gap: 6px; padding: 10px 12px; border-radius: 12px; background: var(--fill); margin: 4px 0 8px; }
.chip.sk-mchip { min-height: 30px; padding: 2px 10px; font-size: 13px; }
.sk-prev .chip:not(.on) { background: var(--paper); }
.sk-prev-row { display: grid; grid-template-columns: minmax(0, 1fr) auto 90px; gap: 10px; }
.sk-prev-row .num { text-align: right; }
.sk-doc-sw { gap: 10px; align-items: flex-start; padding: 10px 12px; margin-bottom: 10px; border-radius: 12px; background: var(--fill); cursor: pointer; }
.sk-doc-sw input { width: auto; min-height: 0; flex: none; margin-top: 3px; }
.sk-login { gap: 12px; align-items: flex-end; }
.sk-pw { display: flex; align-items: center; gap: 10px; min-height: var(--tap); }
@media (max-width: 1000px) { .sk-grid { grid-template-columns: minmax(0, 1fr); } }
.team-picks { margin-top: 8px; padding-top: 6px; border-top: 1px dashed var(--line); }
.team-pick { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 5px; }
.team-pick .chip { min-height: 32px; padding: 3px 12px; }
.team-picks.tp-pay { margin: 4px 0 10px; }
/* Отделения (24.09.2026): цвет и код отделения, порядок. */
.dp-sw { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 6px; vertical-align: 1px; }
.dp-colors .chip { min-width: 34px; }
.dp-colors .chip i { display: inline-block; width: 14px; height: 14px; border-radius: 50%; vertical-align: -2px; }
.dp-ord { white-space: nowrap; }
.dp-ord .btn { min-height: 30px; padding: 2px 9px; }

/* Календарь: перетаскивание приёма мышью (js/calendar.js, «перетаскивание»;
   просьба заказчика 24.09.2026 — «как в МедСофте, курсором в другое окошко»).
   Рука над плашкой — знак, что её можно взять; принятые и отменённые руки
   не показывают. Тень — где приём встанет: зелёная — можно, красная — нельзя
   (причина словами внутри). Цвета — из переменных темы, тёмная пара уже есть. */
.cg-v.drag { cursor: grab; touch-action: auto; }
.cg-v.cg-lift { opacity: .45; }
body.cg-dragging, body.cg-dragging * { cursor: grabbing !important; user-select: none; }
.cg-ghost { position: absolute; left: 2px; right: 2px; box-sizing: border-box; border-radius: 6px; padding: 2px 6px;
  font-size: 11.5px; line-height: 1.25; overflow: hidden; z-index: 3; pointer-events: none;
  border: 2px dashed var(--muted); background: var(--paper); box-shadow: 0 4px 14px rgba(0, 0, 0, .18); }
.cg-ghost b { display: block; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cg-ghost div { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cg-ghost.ok { border-color: var(--ok); background: var(--ok-soft); }
.cg-ghost.bad { border-color: var(--rose); background: var(--rose-soft); color: var(--ink); overflow: visible; }
/* Причина отказа длиннее клетки — выносим её под тень, чтобы читалась целиком. */
.cg-ghost.bad div { position: absolute; top: calc(100% + 2px); left: -2px; min-width: calc(100% + 4px); max-width: 260px; white-space: normal;
  background: var(--paper); color: var(--ink); border: 1px solid var(--rose); border-radius: 6px; padding: 3px 6px; box-shadow: 0 4px 14px rgba(0, 0, 0, .18); }
.cg-col.cg-drop-ok { box-shadow: inset 0 0 0 2px var(--ok); }
.cg-col.cg-drop-bad { box-shadow: inset 0 0 0 2px var(--rose); }
/* «Какие услуги требуют ДИС / договор» (js/dogovor.js, renderDogovorSrv) */
.dgm-t { table-layout: fixed; width: 100%; }
.dgm-t th:first-child { width: 46%; }
.dgm-t th:nth-child(2) { width: 90px; }
.dgm-t select { max-width: 100%; height: 32px; padding: 2px 8px; font-size: 13.5px; }

/* Выбор чека: «Фискальный чек» / «Внутренний чек» (js/cheki.js, заказчик
   24.09.2026: «чтобы регистратор мог легко выбрать, какой чек пробить»). Две
   большие кнопки — это радиокнопки: Enter ведёт дальше, стрелки меняют выбор
   (js/keys.js). Сам кружок спрятан, но остаётся в порядке полей. Цвета — из
   переменных темы, тёмная пара у них уже есть. */
.rk-pick { display: flex; gap: 8px; }
.rk-b { flex: 1; position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center;
  min-height: 48px; padding: 6px 10px; border-radius: 12px; border: 1.5px solid var(--line); background: var(--paper);
  cursor: pointer; text-align: center; user-select: none; }
.rk-b { min-width: 0; box-sizing: border-box; }
.rk-b input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; pointer-events: none; }
.rk-b b { font-size: 15px; }
.rk-b i { font-style: normal; font-size: 12px; color: var(--muted); }
.rk-b.on { border-color: var(--teal); background: var(--teal-soft); }
.rk-b.on b { color: var(--teal-ink); }
.rk-b[data-rk="internal"].on { border-color: var(--amber); background: var(--amber-soft); }
.rk-b[data-rk="internal"].on b { color: var(--ink); }
.rk-b:focus-within { box-shadow: 0 0 0 3px var(--teal-soft); }
.rk-note { margin-top: 4px; }
.rk-alert { position: fixed; left: 12px; right: 12px; bottom: 12px; z-index: 9998; display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: center; }
.rk-alert .small { flex: 1 1 60%; }
.rk-sum { max-width: 560px; }
.rk-sum .rk-row { padding: 6px 0; }
.rk-sum .rk-total { border-top: 1.5px solid var(--line); font-weight: 600; }
.rk-sum .rk-bad span:first-child { color: var(--rose); }

/* Доступ к программе (24.09.2026): части программы у сотрудника, по разделам меню.
   «по должности» — спокойно (фон строки), «изменено» — янтарём: видно, что у
   этого человека не как у всех. Цвета — переменными: тёмная тема их меняет сама. */
.acc-parts { display: grid; gap: 12px; max-height: 56vh; overflow: auto; margin: 8px 0; }
.acc-sec { display: grid; gap: 2px; }
.acc-row { display: flex; gap: 10px; align-items: center; min-height: 40px; padding: 2px 6px; border-radius: 8px; cursor: pointer; }
.acc-row:hover { background: var(--fill); }
.acc-row input { width: auto; min-height: 0; flex: none; }
.acc-row > span:nth-child(2) { flex: 1; }
.acc-row .tag { background: var(--fill); color: var(--muted); white-space: nowrap; }
.acc-row .tag.on { background: var(--amber-soft); color: var(--ink, inherit); }
/* Главная: приёмы сегодня и «мои приёмы» */
.home-scroll { max-height: 340px; overflow: auto; }
.home-today .home-t td, .home-my .home-t td { text-align: left; }
.home-my select { margin-left: 6px; height: 30px; padding: 2px 8px; font-size: 13px; width: auto; }
/* Страница раздела (js/menu.js `renderSection`): подразделы строками одной
   карточки — как «Справочники» (`.sp-row`). «В работе» — бледнее. */
.sec-row .tag { white-space: nowrap; }
/* Живое состояние подраздела (`sost`, 09.10.2026, макет v2): середина строки,
   точка — ok / warn / bad / серая. */
.sp-row.sec-row-s .sp-t { flex: 1 1 0; }
.sec-sost { flex: 1.15 1 0; min-width: 0; display: flex; align-items: center; justify-content: flex-start; gap: 8px; font-size: 14px; text-align: left; }
.sec-sost .num, .sec-sost b { font-variant-numeric: tabular-nums; white-space: nowrap; }
.sec-dot { flex: none; width: 9px; height: 9px; border-radius: 50%; background: var(--line); font-style: normal; }
.sec-dot.ok { background: var(--teal); }
.sec-dot.warn { background: var(--amber); }
.sec-dot.bad { background: var(--rose); }
.sec-tabs { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; margin: -6px 0 10px; }
.sec-tabs button { border: 0; background: transparent; border-radius: 8px; padding: 4px 9px; font: 500 12.5px var(--font); color: var(--muted); cursor: pointer; }
.sec-tabs button:hover { background: var(--fill); color: var(--ink); }
.sec-tabs button.on { background: var(--teal-soft); color: var(--teal-ink); font-weight: 600; }
.sec-tabs .sec-up { color: var(--teal-ink); font-weight: 700; }
/* «Тихие экраны» (07.10.2026): на компьютере строки соседей над экраном нет —
   раздел в меню, соседи на его странице; на планшете и телефоне — «Раздел ›»
   и соседи вкладками. */
@media (min-width: 981px) {
  .sec-tabs.sec-dup { display: none; }
}
.nav .nav-warn { width: 8px; height: 8px; border-radius: 50%; background: var(--amber, #e0a33c); flex: none; }
.nav .nav-warn { background: var(--orange); }
/* Цветные карточки по кругу (24.09.2026) сняты 14.10.2026 (брендбук «Ормин»
   2.0, макет «Ormin: новый вид программы»): карточка белая с волосяной
   рамкой, цвет говорит о разделе или состоянии — метки `.mt-*`, точки, полосы. */
@media print { #view .card { background: #fff !important; box-shadow: none !important; } }
.home-today .hd, .home-my .hd { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.home-today .chip { height: 30px; padding: 0 12px; font-size: 13px; }
/* Гамма фона (js/vid.js, themeGamma) */
.th-gamma-h { display: flex; justify-content: space-between; align-items: center; margin: 12px 0 6px; }
.th-gamma-h input[type=color] { width: 44px; height: 28px; padding: 0; border: 0; background: none; vertical-align: middle; }
.th-gamma > div { display: grid; grid-template-columns: repeat(13, 1fr); gap: 4px; margin-bottom: 4px; }
.th-gamma button { height: 22px; border: 0; border-radius: 6px; cursor: pointer; box-shadow: inset 0 0 0 1px rgba(0,0,0,.10); padding: 0; }
.th-gamma button.on { box-shadow: 0 0 0 2px var(--teal); }
:root[data-theme="dark"] .status.s-done { background: #173a22; color: #8fe3a9; }

/* Предпросмотр прайса из Excel (27.09.2026): таблицы в несколько столбцов не
   помещаются в обычное окно в 560 пикселей. */
.modal.wide { width: min(1000px, 100%); }
.pr-sec { margin: 6px 0; border-top: 1px solid var(--line, #e6e6ea); padding-top: 6px; }
.pr-sec > summary { cursor: pointer; font-size: 14px; }
.pr-sec .table { margin-top: 6px; }
.stf-more { margin: 4px 0 10px; }
.stf-more > summary { cursor: pointer; }

/* Справочник услуг (js/uslugi.js, 27.09.2026): быстрые отборы над прайсом,
   таблица, карточка услуги вкладками, изменение цен группой. Компактно, как
   остальные таблицы: строка в одну-две линии, кнопки строки — не выше 26 px. */
.sv-q { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: 8px; }
.sv-q .chip { margin: 0; }
/* Экран прайса (16.10.2026, «каша… ползунок… позор»): шапка одной строкой,
   отделения — колонкой слева со счётчиками, справа полоса «Прайс · отборы» и
   таблица. Ползунков нет: колонка не прокручивается сама, всё видно сразу. */
.top:has(.sv-tools) h1 { white-space: nowrap; }
.sv-tools { display: flex; align-items: center; gap: 8px; flex-wrap: nowrap; }
.sv-tools input.flt-head { width: 200px; }
.sv-lay { display: grid; grid-template-columns: 210px minmax(0, 1fr); gap: 14px; align-items: start; }
.sv-side { display: flex; flex-direction: column; gap: 1px; background: var(--paper); border-radius: 14px; box-shadow: var(--shadow); padding: 6px; position: sticky; top: 8px; }
.sv-di, .sv-gi { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; width: 100%; border: 0; background: none; font: inherit; color: var(--ink);
  text-align: left; padding: 6px 10px; border-radius: 9px; cursor: pointer; font-size: 14px; line-height: 1.25; }
.sv-di > b, .sv-gi > b { font-weight: 600; font-size: 12.5px; color: var(--muted); font-variant-numeric: tabular-nums; }
.sv-di:hover, .sv-gi:hover { background: var(--fill); }
.sv-di.on { background: var(--teal-10); font-weight: 700; box-shadow: inset 3px 0 0 var(--teal); }
.sv-di.on > b { color: var(--ink); }
.sv-di.nil:not(.on) { color: var(--muted); }
.sv-all { border-bottom: 1px solid var(--line); border-radius: 9px 9px 0 0; margin-bottom: 3px; }
.sv-gl { display: flex; flex-direction: column; gap: 1px; margin: 2px 0 4px 12px; padding-left: 6px; border-left: 1px solid var(--line); }
.sv-gi { font-size: 13px; padding: 4px 8px; }
.sv-gi.on { background: var(--teal-soft); font-weight: 700; }
.sv-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; margin-bottom: 8px; }
.sv-bar > .sv-q { margin: 0; }
.sv-bar > .sv-pl-q { margin: 0; padding-right: 14px; border-right: 1px solid var(--line); }
.sv-bar .chip { min-height: 30px; height: 30px; padding: 3px 11px; font-size: 13px; }
.sv-card { padding-top: 6px; }
@media (max-width: 1450px) { .sv-lay { grid-template-columns: 176px minmax(0, 1fr); gap: 12px; } .sv-tools input.flt-head { width: 170px; } .sv-card { padding-left: 10px; padding-right: 10px; } }
@media (max-width: 700px) {
  .sv-lay { grid-template-columns: minmax(0, 1fr); }
  .sv-side { position: static; flex-direction: row; flex-wrap: wrap; gap: 4px; }
  .sv-di, .sv-gi { width: auto; }
  .sv-gl { flex-direction: row; flex-wrap: wrap; margin: 0; border: 0; }
  .sv-tools { flex-wrap: wrap; }
  .sv-bar > .sv-pl-q { border: 0; padding: 0; }
}
/* «Оплатить вместе» в окне оплаты (07.10.2026, js/oplata.js). */
.op-also { margin: 2px 0 10px; padding: 8px 10px; border-radius: 10px; background: var(--paper); box-shadow: var(--shadow); }
.op-also-l { display: flex; align-items: baseline; gap: 6px; margin: 4px 0 0; }
/* Прайс-листы и смена цен с даты (07.10.2026, js/prays-listy.js). */
.sv-pl-q { margin-bottom: 4px; }
.sv-pl-q > .muted { margin-right: 2px; }
.sv-pl-hint { margin: 0 0 8px; }
.sv-plan { color: var(--teal, #0b7a64); white-space: nowrap; }
.sv-plan-b { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 8px 12px; }
.sv-plan-b .btn { margin-left: auto; }
.sv-pl-row { align-items: center; gap: 8px; flex-wrap: nowrap; margin: 4px 0; }
.sv-pl-row .sv-pl-n { flex: 1; min-width: 0; }
.sv-pl-row input { width: 110px; }
.sv-t td { vertical-align: top; }
.sv-t td .muted.small { line-height: 1.25; }
.sv-t .tag { margin: 0 2px 2px 0; }
.sv-t td.sv-st { white-space: nowrap; }
.sv-pr.up::after { content: " ↑"; color: var(--rose); font-size: 11px; }
.sv-pr.down::after { content: " ↓"; color: var(--ok); font-size: 11px; }
/* «Скопировать» у строки: значок тенью (`::before`), чтобы в Excel и в поиск
   таблицы не уходил лишний символ. С 16.10.2026 прайс показывает все строки
   сразу — значок только у строки под мышью (64 одинаковых значка — шум);
   место под него оставлено, строка не прыгает. Без мыши — «Скопировать» в
   карточке услуги. */
.sv-t td.sv-st { position: relative; padding-right: 38px; }
.sv-copy { position: absolute; right: 6px; top: 6px; border: 0; background: var(--fill); color: var(--ink); border-radius: 7px; width: 26px; height: 26px; cursor: pointer; }
.sv-copy::before { content: "⧉"; font-size: 14px; }
.sv-t tr:not(:hover) .sv-copy { display: none; }
.modal.sv-modal { width: min(760px, 100%); }
.sv-tabs { display: flex; flex-wrap: wrap; gap: 2px; border-bottom: 1px solid var(--line); margin: 0 0 12px; }
.sv-tabs button { border: 0; background: none; font: inherit; font-size: 14px; color: var(--muted); padding: 8px 10px; border-bottom: 2px solid transparent; cursor: pointer; margin-bottom: -1px; }
.sv-tabs button.on { color: var(--ink); font-weight: 600; border-bottom-color: var(--teal); }
.sv-pane[hidden] { display: none; }
.sv-2 > .field { flex: 1 1 220px; }
.sv-3 > .field { flex: 1 1 150px; }
.sv-why { margin: 0 0 10px 22px; }
.sv-who-g { margin-bottom: 10px; }
.sv-dep { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); margin: 8px 0 4px; font-weight: 600; }
.sv-doc { display: flex; gap: 8px; align-items: baseline; padding: 4px 6px; border-radius: 8px; cursor: pointer; }
.sv-doc:hover { background: var(--fill); }
.sv-doc.on { background: var(--teal-soft); }
.sv-hist td { font-size: 14px; }
.sv-bprev { max-height: 320px; overflow: auto; }
.sv-bprev .table td { padding-top: 5px; padding-bottom: 5px; }
.sv-bprev tr.muted td { color: var(--muted); }
.sv-t td { padding-top: 7px; padding-bottom: 7px; }
.sv-t .status { padding: 2px 8px; }
/* ======== Справочники (27.09.2026): «Кто что делает», кабинеты, группы ========
   Таблица «врачи × услуги»: врачей в отделении бывает пятнадцать (лаборатория —
   все), поэтому имена в шапке стоят вертикально и колонка узкая; услуга и шапка
   прилипают при прокрутке, иначе на двадцатой строке уже не понять, чья клетка. */
.wd .wd-deps { max-height: calc(100vh - 230px); }
.wd .wd-bad, .wd-bad { color: var(--rose); font-weight: 600; }
.wd-prob > div + div { margin-top: 4px; }
.wd-prob a { color: inherit; text-decoration: underline; }
.wd-card { padding: 10px 12px; min-width: 0; }
.wd-bar { justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.wd-bar select.wd-add { height: 32px; padding: 2px 8px; font-size: 13.5px; max-width: 260px; }
.wd-bar .btn.sm, .wd-ask .btn.sm { min-height: 30px; height: 30px; padding: 0 10px; font-size: 13px; }
.wd-wrap { overflow: auto; max-height: calc(100vh - 290px); border-radius: 10px; }
.table.wd-t { border-collapse: separate; border-spacing: 0; width: auto; font-size: 13.5px; }
.wd-t th, .wd-t td { padding: 4px 6px; border-bottom: 1px solid var(--line); }
.wd-t thead th { position: sticky; top: 0; z-index: 2; background: var(--paper); vertical-align: bottom; }
.wd-t .wd-s { position: sticky; left: 0; z-index: 1; background: var(--paper); text-align: left; font-weight: 400; min-width: 220px; max-width: 320px; }
.wd-t thead .wd-s { z-index: 3; }
.wd-t .wd-n { text-align: center; color: var(--muted); width: 54px; font-size: 12.5px; }
.wd-t .wd-n.wd-bad { color: var(--rose); }
.wd-t th.wd-d { width: 34px; min-width: 34px; max-width: 34px; padding: 4px 2px; text-align: center; }
.wd-t .wd-nm { display: inline-block; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; max-height: 130px; overflow: hidden;
  text-overflow: ellipsis; cursor: pointer; font-weight: 600; font-size: 12.5px; }
.wd-t .wd-nm:hover, .wd-t .wd-sn:hover { color: var(--teal); text-decoration: underline; }
.wd-t .wd-k { display: block; font-size: 9.5px; color: var(--muted); font-weight: 400; margin-top: 3px; letter-spacing: -.02em; }
.wd-t .wd-k-also .wd-k, .wd-t .wd-k-extra .wd-k { color: var(--amber); }
.wd-t .wd-x { display: block; margin: 2px auto 0; width: 20px; height: 18px; line-height: 16px; border-radius: 5px; color: var(--muted); cursor: pointer; font-size: 13px; }
.wd-t .wd-x:hover { background: var(--rose-soft); color: var(--rose); }
.wd-t .wd-sn { cursor: pointer; }
.wd-t tr.sec-row td { position: sticky; left: 0; background: var(--fill); font-size: 11.5px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); padding: 3px 8px; }
.wd-t tr.wd-hl .wd-s { box-shadow: inset 3px 0 0 var(--rose); background: var(--rose-soft); }
.wd-c { text-align: center; width: 34px; min-width: 34px; cursor: pointer; font-weight: 700; user-select: none; }
.wd-c.ro { cursor: default; }
.wd-c:not(.ro):hover { background: var(--fill); }
.wd-c:focus { outline: 2px solid var(--teal); outline-offset: -2px; }
.wd-c.wd-on { color: var(--teal); background: color-mix(in srgb, var(--teal) 9%, transparent); }
.wd-c.wd-extra { color: var(--amber); background: color-mix(in srgb, var(--amber) 14%, transparent); }
.wd-c.wd-not { color: var(--rose); opacity: .55; font-weight: 400; }
.wd-legend .wd-c { display: inline-block; width: 20px; min-width: 0; border-radius: 4px; }
.wd-undo, .wd-ask { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 0 0 8px; }
.gr-sim { white-space: nowrap; }
.gr-ord .btn.sm, .exp-cats-t .btn.sm { min-height: 26px; height: 26px; padding: 0 8px; }
.wd-t th.wd-d, .wd-t td.wd-s { text-transform: none; letter-spacing: 0; }
.wd-t td.wd-s { color: var(--ink); }

/* ======== Справочники — страница-указатель (js/sprav.js, 27.09.2026) ======== */
input.flt-find[hidden] { display: none !important; }
.sp-found { margin-bottom: 12px; }
.sp-found td { padding-top: 5px; padding-bottom: 5px; }
.sp-kind { width: 120px; color: var(--muted); white-space: nowrap; }
.sp-n { font-weight: 700; font-size: 15px; opacity: .75; }
.sp-warn { color: var(--amber); font-weight: 600; }
/* «Что поправить · N» (макет v2, 09.10.2026): строка — справочник, что не
   так, «Исправить ›». */
.sp-attn { margin-bottom: 12px; padding: 4px 6px; }
.sp-attn .sp-warn { color: var(--amber-ink, #7a4700); font-weight: 600; font-size: 14px; }
.sp-attn .sp-fix-go { font-size: 13px; font-weight: 700; color: var(--teal-ink); white-space: nowrap; }

/* ======== «Назад» (js/nazad.js, 27.09.2026) — над заголовком, рядом с вкладками ======== */
.nav-row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin: -4px 0 12px; }
.nav-row .sec-tabs { margin: 0; }
/* «← Назад» — кнопка в размер остальных (40 px), слева от заголовка, а не
   плашка 24 px строкой выше (08.10.2026, заказчик: «кнопка назад маленькая»). */
.nav-back { display: inline-flex; align-items: center; gap: 6px; height: var(--chip-h); min-height: 36px; border: 1px solid var(--line); background: var(--paper, #fff); border-radius: 12px;
  padding: 0 16px 0 10px; font: 700 15px var(--font); color: var(--ink); cursor: pointer; box-shadow: none; border-color: var(--navy-20);
  white-space: nowrap; flex: none; /* никогда не в две строки */ }
.nav-back:hover { background: var(--bg); }
.zb-top .nav-back { align-self: center; }
/* Выбор позиции склада поиском (ревизия 27.09.2026): не нашлось — рамка. */
input.stock-pick.bad { box-shadow: inset 0 0 0 1.5px var(--rose); background: var(--rose-soft); }

/* ======== Меню: «кто за компьютером» в одну строку, меню влезает в 768 px,
   телефон — меню за кнопкой (ревизия 27.09.2026) ======== */
/* Карточка «Директор · Выйти» была ~130 px — три строки и кнопка во всю
   ширину. Теперь имя и должность слева, «Выйти» справа, одной строкой. */
.nav .who .who-t .muted:empty { display: none; }
/* Экран ниже 820 px (ноутбук 1366×768): меню руководства — шестнадцать разделов
   (с «Аналитикой», 10.10.2026) — должно помещаться целиком, без прокрутки.
   Пункт чуть ниже, шапка меньше. */
@media (max-height: 820px) and (min-width: 700px) {
  .nav { padding-top: 12px; padding-bottom: 10px; }
  .brand-logo { width: 118px; margin-top: 0; margin-bottom: 0; }
  .nav .nav-find { margin-bottom: 4px; padding-top: 6px; padding-bottom: 6px; }
  .nav .nav-grp { padding-top: 6px; padding-bottom: 1px; font-size: 10.5px; }
  .nav .who { padding: 7px 8px; }
  .nav button { font-size: 14.5px; padding-top: 5px; padding-bottom: 5px; margin-bottom: 1px; }
  #nav-items { margin-bottom: 8px; }
}
.nav-burger, .nav .nav-burger { display: none; }
/* Телефон: меню за кнопкой «☰ Меню». Раньше оно разворачивалось строкой
   кнопок и занимало полэкрана над каждым экраном. Сверху — полоса: название
   клиники и кнопка; нажали пункт — меню закрылось (menuRender). Широкие таблицы
   листаются в своей рамке, а не всей страницей. */
@media (max-width: 699px) {
  .app { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto 1fr; align-content: start; }
  .calx { grid-template-columns: minmax(0, 1fr); }
  .cg { overflow-x: auto; position: relative; }
  .cg-scroll { position: relative; }
  .cbar { flex-wrap: wrap; }
  .nav { position: sticky; top: 0; z-index: 30; height: auto; flex-direction: row; flex-wrap: wrap; align-items: center;
    padding: 8px 12px; border-right: 0; border-bottom: 1px solid var(--line); }
  body.alarm .nav { height: auto; }
  .brand { padding: 0; flex: 1 1 auto; min-width: 0; }
  .brand-logo { width: 104px; margin: 0; }
  .brand.txt b { display: inline; font-size: 20px; padding: 0; }
  .nav-burger, .nav .nav-burger { display: inline-flex; align-items: center; gap: 6px; width: auto !important; margin: 0 !important;
    padding: 6px 12px !important; min-height: 36px; border-radius: 10px; background: var(--fill) !important; font-weight: 600; }
  .nav #nav-items, .nav .who { display: none; }
  .app.nav-open .nav #nav-items { display: block; flex: 1 1 100%; max-height: calc(100vh - 140px); overflow-y: auto; margin: 8px 0 6px; }
  .app.nav-open .nav .who { display: flex; flex: 1 1 100%; }
  .main { padding: 12px 12px 80px; }
  .top { flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
  .top h1 { font-size: 24px; }
  .tools { justify-content: flex-start; }
  .app:not(.in-card) .main .card { overflow-x: auto; }
  .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* «Раздел ›» и до четырёх соседей – переносом, без ползунка (16.10.2026). */
  .sec-tabs { flex-wrap: wrap; max-width: 100%; }
  .sec-tabs button { white-space: nowrap; }
  .nav-row { min-width: 0; }
}

/* Запись сверх расписания и просьба врача о цене (заказчик 28.09.2026):
   видны в сетке дня, календаре, кассе и на стойке. */
.tag.over-tag { background: var(--rose-soft); }
.tag.ask-tag { background: var(--amber-soft); }
.cg-v.over { outline: 2px dashed var(--rose); outline-offset: -2px; }
.cg-v b .tag.over-tag, .cg-v .tag.over-tag { display: inline; padding: 0 4px; font-size: 10px; }
.pay-ask + .pay-ask { margin-top: 6px; }

/* ===== W2 (28.09.2026): онлайн-запись с сайта, заявки с сайта (js/sayt.js) ===== */
.sayt-srv { display: flex; flex-direction: column; gap: 4px; max-height: 260px; overflow: auto; }
.sayt-srv label { display: block; }
.sayt-text { max-height: 4.2em; overflow: hidden; }
/* W1 (28.09.2026): показатели числами и карта беременной —
   js/pokazateli.js, js/beremennost.js. */
.pk-card .hd { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.pk-card .hd h3 { margin: 0; }
.pk-card .pk-dop { margin-left: auto; }
.pk-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)); gap: 6px 8px; margin-top: 6px; }
.pk-f { display: flex; flex-direction: column; gap: 2px; font-size: 12px; color: var(--muted); min-width: 0; }
.pk-f input, .pk-f select, .pk-f output { width: 100%; min-width: 0; box-sizing: border-box; padding: 6px 8px; font-size: 15px; color: var(--ink);
  border: 1px solid var(--line); border-radius: 8px; background: var(--paper); min-height: 34px; }
.pk-f output { display: block; background: var(--fill); font-weight: 600; }
.pk-f.pk-ad { grid-column: span 2; }
.pk-two { display: flex; align-items: center; gap: 4px; color: var(--muted); }
.pk-two input { flex: 1; }
.pk-f.pk-al input, .pk-f.pk-al output { border-color: var(--rose); background: var(--rose-soft); color: #b3261e; font-weight: 600; }
.pk-f.pk-bad input { border-color: var(--amber); background: var(--amber-soft); }
.pk-read { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 14px; }
.pk-al, td.pk-al, .pk-read .pk-al b, .pk-last .pk-al b { color: #b3261e; }
td.pk-al { font-weight: 600; background: var(--rose-soft); }
.pk-last { display: flex; flex-wrap: wrap; gap: 2px 10px; font-size: 13px; }
.pk-mini { width: 100%; border-collapse: collapse; margin-top: 6px; font-size: 12px; }
.pk-mini th, .pk-mini td { padding: 2px 3px; text-align: left; border-top: .5px solid var(--line); }
.pk-mini th { color: var(--muted); font-weight: 500; border-top: 0; }
.pk-tab td, .pk-tab th, .bm-grav td, .bm-grav th { white-space: nowrap; }
.bm-rail .val { font-size: 17px; }
.bm-rail .linkish { display: block; margin-top: 4px; text-align: left; }
.bm-srok { margin-bottom: 6px; }
.bm-srok-in { width: 100%; box-sizing: border-box; }
.bm-2 { gap: 10px; flex-wrap: wrap; }
.bm-2 .field { flex: 1 1 120px; margin: 0; }
.bm-charts { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 10px; }
.bm-chart { margin: 0; flex: 1 1 300px; max-width: 420px; }
.bm-chart figcaption { font-size: 13px; color: var(--muted); margin-bottom: 2px; }
.bm-chart svg { width: 100%; height: auto; display: block; }
.bm-chart .g { stroke: var(--line); stroke-width: 1; }
.bm-chart .ax { fill: var(--muted); font-size: 10px; }
.bm-chart .ln { fill: none; stroke: var(--teal); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.bm-chart .pt { fill: var(--teal); stroke: var(--paper); stroke-width: 2; }
.bm-chart .pt:hover { r: 6; }
/* W3 (28.09.2026): история изменений и копии по часам — js/istoriya.js, js/kopii.js. */
.ist-f { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding: 10px 12px; }
.ist-f input:not([type=date]) { min-width: 220px; }
.ist-f .ist-found { flex: 1 1 100%; display: flex; flex-wrap: wrap; gap: 6px; }
.ist-t td { vertical-align: top; }
.ist-t .ist-v { display: inline-block; max-width: 280px; overflow-wrap: anywhere; white-space: pre-wrap; font-size: 13px; }
#kopii-card .fact b { font-weight: 500; text-align: right; }
#kopii-card .bad, #kopii-msg.bad, #kp-warn.bad { color: var(--rose); }
.kp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 8px 12px; margin: 8px 0; }
.kp-grid label, .modal label.muted { display: flex; flex-direction: column; gap: 3px; }
.modal input.wide { width: 100%; }
#kp-warn code { overflow-wrap: anywhere; }
/* ---------- W4: страховые и корпоративные клиенты (28.09.2026, js/organizacii.js) ---------- */
.org-cov { max-height: 220px; overflow: auto; border: 1px solid var(--line, #ddd); border-radius: 8px; padding: 6px 10px; margin: 4px 0 8px; display: flex; flex-direction: column; gap: 2px; }
.org-cov-d { display: flex; flex-wrap: wrap; gap: 2px 14px; padding: 3px 0; border-bottom: 1px dashed var(--line, #e5e5e5); }
.org-cov-d:last-child { border-bottom: 0; }
.org-cov label { display: inline-flex; gap: 6px; align-items: center; }
.org-tag { white-space: nowrap; }
.org-pay { color: var(--teal, #0a7a6a); }
.org-pay-line { margin: 4px 0 8px; }
/* Возможности записи (волна «Чего не хватает», 28.09.2026): удержание окна,
   лист ожидания, серия записей, кабинет или аппарат, двойники карточек. */
.zc.held { background: var(--amber-soft); color: #8a5a00; cursor: not-allowed; font-size: 10.5px; line-height: 1.1; overflow: hidden; }
.zc.held i { display: block; font-style: normal; font-weight: 500; font-size: 9.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zc.busy.held { color: #8a5a00; }
.zf.held input { box-shadow: inset 3px 0 0 var(--teal); }
.zres { font-size: 11.5px; color: var(--muted); margin: 2px 0 0; }
.zres:empty { display: none; }
.zres-n { color: var(--ink, #1c1c1e); font-weight: 600; }
.zres-b { display: inline-block; background: var(--rose-soft); border-radius: 4px; padding: 0 4px; margin: 0 2px 2px 0; }
.wait-sig { position: fixed; right: 12px; bottom: 12px; z-index: 900; max-width: 560px; background: var(--paper); border-radius: 10px;
  box-shadow: 0 6px 24px rgba(0,0,0,.18); border-left: 4px solid var(--teal); padding: 8px 10px; font-size: 13px; }
.ws-row { display: flex; gap: 8px; align-items: center; }
.ws-row + .ws-row { margin-top: 6px; }
.ws-row > span { flex: 1; }
.wl-days { display: inline-flex; min-height: 30px; }
.wl-slots { display: flex; flex-wrap: wrap; gap: 6px; }
.wl-t td { vertical-align: top; }
.sr-plan { max-height: 300px; overflow-y: auto; margin: 6px 0; }
.sr-sum { margin-bottom: 4px; }
.sr-t td { padding-top: 3px; padding-bottom: 3px; }
.sr-moved td { background: var(--amber-soft); }
.sr-pack { color: var(--teal-ink); font-weight: 600; }
.zpr .row { align-items: center; gap: 14px; }
.zpr .field input[type=number] { width: 90px; }
.zpr-who { display: flex; flex-direction: column; gap: 4px; }
.ap-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 8px; }
.ap-head h3 { margin: 0; }
.ap-head select { width: auto; min-width: 180px; height: 32px; padding: 2px 10px; font-size: 13px; }
.ap-srv td { padding-top: 3px; padding-bottom: 3px; }
.ap-srv select { width: 240px; max-width: 100%; height: 30px; padding: 2px 8px; font-size: 13px; }
.tw-row { padding: 3px 0; }
.tw-c td { vertical-align: top; }
.tw-diff td { background: var(--amber-soft); }
.tw-cmp .row { align-items: center; gap: 10px; }
:root[data-theme="dark"] .zc.held, :root[data-theme="dark"] .zc.busy.held { background: #3a2f16; color: #f0c46a; }
.zp[hidden] { display: none; }
/* ---------- W6 (28.09.2026): деньги кассы — смешанная оплата, рассрочка ---------- */
.op-bar { align-items: flex-end; gap: 8px; margin: -2px 0 4px; }
.op-bar .op-got { flex: 1; max-width: 220px; margin-left: auto; }
.op-bar .op-got[hidden] { display: none; }
.op-line { gap: 6px; margin-bottom: 6px; align-items: center; }
#op-total { min-height: 0; margin: 0 0 4px; }
#op-total:empty { display: none; }
#op-plan { margin: 0 0 6px; }
.rs-row { cursor: pointer; }
#sp-t input.sp-n { width: 100%; min-width: 120px; }
/* W7 (28.09.2026): лаборатория — критические значения и проверка результата;
   лист назначений в карте приёма; педиатрия — прививки, рост и вес по ВОЗ. */
input.krit { outline: 2px solid var(--rose); background: var(--rose-soft); font-weight: 700; }
.krit-lim { gap: 8px; align-items: flex-end; margin-top: 6px; flex-wrap: wrap; }
.krit-lim .field { margin: 0; }
.krit-ask { display: block; margin-top: 6px; }
.krit-bar { position: fixed; right: 12px; bottom: 12px; z-index: 9000; width: min(460px, calc(100vw - 24px)); max-height: 50vh; overflow: auto;
  background: var(--card, #fff); border: 2px solid var(--rose); border-radius: 12px; box-shadow: 0 8px 28px rgba(0,0,0,.18); padding: 8px 10px; }
.krit-bar .krit-h { color: var(--rose); margin-bottom: 4px; }
.krit-bar .krit-i { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 6px 0; border-top: .5px solid var(--line); font-size: 13px; }
.krit-bar .krit-i .row { gap: 4px; flex: none; }
.rx-box { margin-top: 6px; }
.rx-t { width: 100%; border-collapse: collapse; font-size: 13px; }
.rx-t td { padding: 3px 4px; border-bottom: .5px solid var(--line); vertical-align: middle; }
.rx-t td.rx-b { text-align: right; white-space: nowrap; }
.rx-t tr.rx-al td:first-child { color: var(--rose); font-weight: 600; }
.rc.reb .reb-in { gap: 6px; margin-top: 6px; flex-wrap: nowrap; }
.rc.reb .reb-f { display: flex; align-items: center; gap: 3px; font-size: 12px; }
.rc.reb .reb-f input { width: 56px; padding: 3px 5px; }
.rc.reb .reb-z { margin-top: 4px; line-height: 1.35; }
.rc.reb .reb-pos { gap: 4px; margin-top: 4px; align-items: center; flex-wrap: wrap; }
.rc.reb .reb-pos .chip { padding: 1px 8px; font-size: 12px; }
.vac-t input { width: 100%; }
.vac-card .vac-m { margin-top: 2px; }
/* ---------- Склад W9 (28.09.2026): подотчёт кабинетов, ПКУ, печать документов ---------- */
.pku-mark { display: inline-block; padding: 0 5px; margin-left: 4px; border-radius: 4px; font-size: 10px; font-weight: 700;
  letter-spacing: .03em; background: var(--amber-soft); color: var(--ink, #333); vertical-align: 1px; }
tr.pku-diff td { background: var(--rose-soft); }
.sk-print { display: inline-flex; gap: 2px; margin-left: 6px; }
.sk-print .btn { margin: 0; }

/* ===== V2: живое обновление и ключ табло (28.09.2026, js/zhivo.js, js/tablo.js) ===== */
/* Табло по ключу — только табло: выхода в программу нет, сверху ничего не висит. */
body.tablo-key .tablo-x, body.tablo-key .nav-burger { display: none; }
.tablo-bad .tablo-idle { opacity: .85; display: flex; flex-direction: column; gap: 2vh; align-items: flex-start; }
.tablo-bad .tablo-idle small { font-size: 2.4vh; opacity: .8; }
/* ===== V1: график врача — перерывы списком, ночная смена, шаг (28.09.2026) ===== */
.gr-v1 { margin: 4px 0 10px; }
.gr-v1-h { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 4px; }
.gr-v1-h > label { font-size: 12px; color: var(--muted); }
.gr-v1 .gr-step { font-size: 12px; color: var(--muted); display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.gr-v1 .gr-step select { width: auto; padding: 4px 8px; }
.gr-brs { display: flex; flex-direction: column; gap: 4px; }
.gr-br { display: flex; gap: 6px; align-items: center; }
.gr-br input[type="time"] { width: 118px; }
.gr-br .gr-b-w { flex: 1; min-width: 90px; }
.gr-br .btn { padding: 2px 8px; margin: 0; }
td.gr-nx { width: 60px; white-space: nowrap; }
.table.grafik td.gr-on.gr-night { background: var(--amber-soft); font-style: italic; }
/* часы ночного дежурства после полуночи в сетке записи */
.zwk .tm.nx { font-style: italic; opacity: .8; }
.zc .znx { font-style: normal; font-size: 9px; opacity: .7; margin-left: 2px; }
/* ===== V3 (28.09.2026): карта приёма и экран записи на телефоне (360–430 px) =====
   Всё — только в узком окне (< 700 px): ноутбук и широкий экран не меняются
   (проверяет telefon_t.py снимками и размерами блоков). Страница не шире
   экрана: поля — в столбик, таблицы — в своей рамке с прокруткой, кнопки не
   ниже 32 px (палец), чипы переносятся, окно — во весь экран. */
@media (max-width: 699px) {
  /* Кнопки под палец. Клетки окон записи и сетки — не кнопки, их не трогаем. */
  #view button:not(.cg-v), #view .btn, #overlay button, #overlay .btn, .visit-bar .btn { min-height: 32px; }
  .chip, .tag { white-space: normal; }
  /* «Расчёты» (B2): выбранный — под списком, плашки и полоса месяца — в столбик. */
  #view .row, #overlay .row { flex-wrap: wrap; }
  #view input, #view select, #view textarea { max-width: 100%; }
  /* Карта приёма: полоса «Осталось» и кнопки — в две строки, кнопки во всю ширину. */
  .visit-bar { flex-wrap: wrap; gap: 6px; padding: 8px 10px; }
  .visit-bar > .muted { flex: 1 1 100%; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .visit-bar .vb-btns { flex: 1 1 100%; flex-wrap: nowrap; gap: 6px; }
  .visit-bar .vb-btns .btn { flex: 1 1 auto; min-width: 0; padding-left: 10px; padding-right: 10px; white-space: normal; }
  .cardwrap { grid-template-columns: minmax(0, 1fr); }
  .cardrail .rc { flex: 1 1 100%; min-width: 0; }
  /* Таблицы карты (показатели, гравидограмма, назначения) — в своей рамке. */
  .app.in-card .main .card, .cardrail .rc, .module { max-width: 100%; }
  .pk-tab, .bm-grav, .rx-t, .pk-mini, .app.in-card .main table { display: block; max-width: 100%; overflow-x: auto; }
  .pk-grid { grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); }
  .bm-chart { flex-basis: 100%; }
  .rc.reb .reb-in { flex-wrap: wrap; }
  /* Зона осмотра: «норма · находка · не смотрел» уходит под название, если не помещается. */
  .zrow { flex-wrap: wrap; max-width: none; }
  .zrow .zn { flex: 1 1 120px; }
  /* Экран записи: одна колонка, поля в столбик. */
  .app.book-wide .main { height: auto; padding: 8px 12px 80px; }
  .zb-top { flex-wrap: wrap; }
  .zb-top h1 { white-space: normal; }
  .zb-top .tools { flex-wrap: wrap; }
  .zb-main { grid-template-columns: minmax(0, 1fr); }
  .zb-form, .zb-form.two { width: auto; min-width: 0; }
  .zb-form.two .zcols { flex-direction: column; align-items: stretch; }
  .zff { flex-direction: column; align-items: stretch; }
  .zf, .zf.gr, .zff.n3 .zf.gr, .zf.aw { width: auto; flex: none; max-width: 100%; }
  .zp button { height: 32px; }
  .zbar { white-space: normal; height: auto; min-height: 32px; flex-wrap: wrap; padding: 4px 4px 4px 9px; }
  .zbar button, .zq button, .zdoc .zp button, .zctl .zp button, .zhb { height: 32px; }
  .zqty { height: 32px; } .zqty button { height: 32px; width: 32px; }
  .zdoc { flex-wrap: wrap; }
  .zdoc .nm { max-width: none; }
  .zctl .zfrom { height: 32px; }
  .zbtn.ghost, .zbtn.small, .zdone .zbtn, .zdone .zbtn.ghost { height: auto; min-height: 32px; padding-top: 3px; padding-bottom: 3px; }
  .zbtn { white-space: normal; }
  .zfoot { flex-wrap: wrap; padding: 6px; }
  .zsum { flex-wrap: wrap; white-space: normal; gap: 6px 12px; }
  .zwhy2 input { width: 100%; }
  .zwarn { flex: 1 1 100%; max-height: none; }
  .zwarn span { white-space: normal; }
  .zpbody { min-height: 0; contain: none; }
  .zwk { min-height: 0; }
  .zc { min-height: 32px; }
  .zr .zc { height: max(var(--rh, 30px), 32px); }
  .zpop, #zb-log { left: 8px !important; right: 8px; width: auto; max-width: calc(100vw - 16px); }
  /* Касса и карточка пациента: плитки в одну колонку. */
  .pat-grid { grid-template-columns: minmax(0, 1fr); }
  /* Окно — во весь экран. */
  #overlay { place-items: stretch; }
  .modal, .modal.wide, .modal.sv-modal { width: 100%; max-width: 100%; height: 100vh; height: 100dvh; max-height: none;
    border-radius: 0; padding: 14px 14px 24px; box-sizing: border-box; }
  .modal::before { display: none; }
  .modal table { display: block; max-width: 100%; overflow-x: auto; }
  /* 29.09.2026: «Календарь записи» на 360–430 px. Месяц врача — клетки делят
     ширину поровну и не распирают сетку («свободно 27» переносится), воскресенье
     больше не обрезано. Список отделений и врачей — в своей рамке в треть
     экрана: сетка видна на первом экране, а не после экрана со списком.
     Отчёты и склад уже были в рамке (`.card`) — проверяются в telefon_t.py. */
  .cm-h, .cm-g { grid-template-columns: repeat(7, minmax(0, 1fr)); }
  .cm-c { min-width: 0; min-height: 64px; padding: 4px 2px; font-size: 10px; line-height: 1.25; overflow-wrap: anywhere; }
  .cm-d { right: 4px; }
  .cm-n, .cm-d + .cm-f { margin-top: 16px; }
  .cs { max-height: 34vh; overflow: auto; }
  /* 30.09.2026, снимки экранов. «‹ Назад» одной строкой, вкладки рядом сжимаются
     и листаются (строка вкладок — не «Назад»). */
  .nav-row .sec-tabs { flex: 1 1 auto; min-width: 0; }
  /* Мелкие цели — до предела устава: язык на входе, «×» в «Кто что делает». */
  .til-pick button { min-height: 32px; }
  .wd-t .wd-x { width: 32px; height: 32px; line-height: 32px; font-size: 16px; }
  /* Бланк: настройки и образец листа — одной колонкой (образец уменьшается под ширину). */
  #view .grid.blank-grid { grid-template-columns: minmax(0, 1fr) !important; }
  /* Табло: две колонки, длинное имя или «Процедурная» переносится, а не распирает страницу. */
  .tablo-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tablo-cell { min-width: 0; overflow-wrap: anywhere; }
  /* Группы отчётов: описание — под названием, целиком. */
  .fold-h { flex-wrap: wrap; row-gap: 2px; }
  .fold-h .fold-about { flex: 1 1 100%; margin-left: 22px; white-space: normal; }
  /* Пояснение мелким в строке отчёта («оклады · премии», «прибыль, по начислению») —
     переносом: на телефоне колонка подписи узкая. */
  .app.rep-page .table td > span.small { white-space: normal; }
  /* Кнопка в строке таблицы — одной строкой: таблица и так листается в своей рамке. */
  #view .table td .btn { white-space: nowrap; }
  /* «Задолженность» (07.10.2026) — строки карточками: кто и сумма, под ними
     за что / сколько дней; кнопка справа. */
  #zd-pat, #zd-pat > tbody, #zd-org, #zd-org > tbody, #zd-kept, #zd-kept > tbody, #zd-we, #zd-we > tbody { display: block; }
  #zd-pat tr:has(> th), #zd-org tr:has(> th), #zd-kept tr:has(> th), #zd-we tr:has(> th) { display: none; }
  #zd-pat tr, #zd-org tr, #zd-kept tr, #zd-we tr { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 8px; row-gap: 2px; padding: 8px 0; border-bottom: .5px solid var(--line); }
  #zd-pat td, #zd-org td, #zd-kept td, #zd-we td { display: block; padding: 0; border: 0; background: none; }
  #zd-pat td:nth-child(1), #zd-org td:nth-child(1), #zd-kept td:nth-child(1), #zd-we td:nth-child(1) { grid-column: 1; grid-row: 1; }
  #zd-pat td:nth-child(2) { grid-column: 2; grid-row: 1; font-weight: 600; }
  #zd-pat td:nth-child(3) { grid-column: 1; grid-row: 2; font-size: 12.5px; }
  #zd-org td:nth-child(2), #zd-kept td:nth-child(2), #zd-we td:nth-child(2) { grid-column: 1; grid-row: 2; font-size: 12.5px; }
  #zd-org td:nth-child(3), #zd-kept td:nth-child(3), #zd-we td:nth-child(3) { grid-column: 2; grid-row: 1; font-weight: 600; }
  #zd-pat td:nth-child(4), #zd-org td:nth-child(4), #zd-kept td:nth-child(4), #zd-we td:nth-child(4) { grid-column: 2; grid-row: 2; }
  #zd-pat tr.on, #zd-org tr.on, #zd-kept tr.on, #zd-we tr.on { background: var(--teal-soft); }
  #zd-pat td.empty, #zd-org td.empty, #zd-kept td.empty, #zd-we td.empty { grid-column: 1 / -1; }
  /* «Расходы» (07.10.2026) — строка карточкой: статья и сумма; под ними дата,
     откуда, кто внёс; примечание — третьей строкой. */
  #exp-t, #exp-t > tbody { display: block; }
  #exp-t tr:has(> th) { display: none; }
  #exp-t tr { display: grid; grid-template-columns: auto auto minmax(0, 1fr) auto; column-gap: 8px; row-gap: 2px; padding: 8px 0; border-bottom: .5px solid var(--line); }
  #exp-t td { display: block; padding: 0; border: 0; background: none; }
  #exp-t td:nth-child(2) { grid-column: 1 / 4; grid-row: 1; font-size: 14px; }
  #exp-t td:nth-child(3) { grid-column: 4; grid-row: 1; font-weight: 600; }
  #exp-t td:nth-child(1), #exp-t td:nth-child(4), #exp-t td:nth-child(5) { grid-row: 2; font-size: 12.5px; color: var(--muted); }
  #exp-t td:nth-child(7) { grid-column: 4; grid-row: 2; }
  #exp-t td:nth-child(6) { grid-column: 1 / -1; grid-row: 3; font-size: 12.5px; }
  #exp-t td:nth-child(6):empty { display: none; }
  #exp-t tr.pl-sum td:nth-child(1) { grid-column: 1 / 4; grid-row: 1; font-size: 14px; color: inherit; }
  #exp-t tr.pl-sum td:nth-child(2), #exp-t tr.pl-sum td:nth-child(4) { display: none; }
  #exp-t td.empty { grid-column: 1 / -1; }
  .pult-drill { padding: 14px 16px; }
  .pult-bxs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pult-sv { grid-template-columns: minmax(0, 1fr) 70px 60px; }
  /* Карточка человека (B1): вкладки – переносом (не ползунком), одна колонка, строки условий — в две строки. */
  .sk-tabs .chip { flex: none; }
  .sk-line { grid-template-columns: minmax(0, 1fr) auto; }
  .sk-line > span:nth-child(2) { grid-column: 1 / -1; grid-row: 2; }
  .sk-plan-row { grid-template-columns: minmax(0, 1fr) auto; }
  .sk-plan-row > span:nth-child(2) { grid-column: 1 / -1; grid-row: 2; }
  .top .sk-acc { align-items: flex-start; }
  .sk-prev-row { grid-template-columns: minmax(0, 1fr) auto; }
  .sk-prev-row > span:last-child { grid-column: 2; }
  /* «Деньги» (C1): полосы — имя и число над полосой (как направления пульта);
     вкладки «Денег» и отчёта листаются строкой; широкие таблицы — в своей рамке. */
  .pu-card { overflow-x: auto; }
  .pu-year { margin-left: 0; }
  /* Страница раздела: состояние подраздела — строкой под названием. */
  .sp-row.sec-row-s { flex-wrap: wrap; }
  .sp-row.sec-row-s .sp-t { flex: 1 1 calc(100% - 40px); }
  .sec-row-s .sec-sost { order: 3; flex: 1 1 100%; font-size: 13px; }
  /* «Закрыть месяц»: шаги — над шагом, строками с переносом (без ползунка). */
  .mz-in { flex-direction: column; min-height: 0; }
  .mz-nav { flex: none; flex-direction: row; flex-wrap: wrap; border-right: 0; border-bottom: 1px solid var(--line); }
  .mz-st { flex: 1 1 150px; min-width: 0; }
  .mz-pravo { max-height: none; padding: 12px; }
  /* Главная менеджера: плитки — столбцом, сетка загрузки — прокруткой в своей карточке. */
  .mg .mg-tiles, .mg .mg-g2 { grid-template-columns: minmax(0, 1fr); }
  .mg .mg-ts { min-height: 0; }
  .mg .mg-zb { margin-left: 0; }
  .top:has(.mg-den) { flex-wrap: wrap; }
  .top:has(.mg-den) .tools { flex: 1 1 100%; }
  .mg-den { display: flex; }
  .mg-den .chip { flex: 1 1 0; padding: 0 8px; white-space: nowrap; }
  .top:has(.mg-den) p { white-space: normal; }
  .pr-sel select, .pr-sel input { flex: 1 1 100%; width: 100%; }
}

/* Запись 29.09.2026: удержание окна в календаре, номер талона в очереди */
.cg-hold { position: absolute; left: 2px; right: 2px; box-sizing: border-box; border: 1.5px dashed var(--amber); border-radius: 6px;
  background: rgba(196,122,18,.08); color: var(--amber); font-size: 11px; padding: 1px 6px; overflow: hidden; white-space: nowrap;
  text-overflow: ellipsis; pointer-events: none; z-index: 0; }
.cg-c.held { cursor: not-allowed; }
.cg-c.held:hover { background: none; }
.tk-n { font-variant-numeric: tabular-nums; }

/* ===== F4 (30.09.2026): внешний вид по снимкам экранов (tests/snimki.py) =====
   Правило одно: короткая надпись (время окна, «Назад», кнопка) не режется и не
   ломается; пояснение — переносится до 2–3 строк, а не многоточие. */
/* «Прошлый раз: дата · врач · услуги» на записи — до двух строк. */
.zbar.t { height: auto; min-height: 30px; padding-top: 3px; padding-bottom: 3px; }
.zbar.t span { white-space: normal; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-height: 1.3; }
/* «Дата рождения · карта» (и по-таджикски) — целиком над полем; подпись длиннее поля
   («Пизишки равонкунанда») — во вторую строку: поля в ряду выровнены по низу (.zff). */
.zf[data-f="dr"] { min-width: 132px; }
.zf label { white-space: normal; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
/* Предупреждения внизу записи: по-таджикски метки длиннее и встают в 3–4 ряда — ряды
   не срезаются сверху и снизу (было max-height 52 px и выравнивание по центру). */
.zwarn { max-height: 86px; align-content: flex-start; }
/* Кнопки шапки экрана и прилавка — одной строкой («+ Прививка», «Без чека»). */
.tools .btn, [data-sale], .list-item > .btn { white-space: nowrap; }
.list-item > .btn { flex: none; }
/* Документы на записи: «раз на пациента, в регистратуре» (по-таджикски длиннее) — до двух строк. */
.zdoc .st { white-space: normal; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-height: 1.25; }
/* Табло: клетка не распирает сетку длинным словом. */
.tablo-cell { min-width: 0; overflow-wrap: anywhere; }
/* ===== Каркас отчёта (волна A1, 02.10.2026; js/karkas.js) =====
   Макет — «Отчёт: общий каркас»: полоса периода со «сравнить с», отбор чипами и
   поиском, «Мои виды», плитки с серым «всего без отбора», разрезы, таблица с
   итогом по отобранному, «показано N из M». */
.kk-pop-w { position: relative; display: inline-flex; }
.kk-flt { gap: 6px; flex-wrap: wrap; align-items: center; margin-bottom: 8px; }
.kk-flt input.flt-find { margin: 0; max-width: 260px; }
.kk-flt .tag { margin: 0; }
.kk-t th.kk-sort { cursor: pointer; user-select: none; }
.kk-t th.kk-asc::after { content: " ↑"; }
.kk-t th.kk-desc::after { content: " ↓"; }
.kk-t tr.kk-g1 td { font-weight: 600; }
.kk-t tr.kk-g2 td:first-child { padding-left: 22px; color: var(--muted); }
.kk-t tr.kk-all td { color: var(--muted); font-weight: 400; background: transparent; border-top: 0; font-size: 12px; }
.kk-t td.click { cursor: pointer; }
.kk-t td.click:hover { background: #eef6f4; }
.kk-more { margin: 6px 2px 0; }
.kk-more .linkish { margin: 0; }
.kk-wide { overflow-x: auto; }
/* Окно фильтра — как у МедСофта (07.10.2026; js/filter.js `filterModal`): одна
   колонка, поле — одна строка, название внутри поля; выбранное — ярлычками;
   у экрана свой постоянный список полей (`okno`). */
.modal.flt-win { width: min(480px, 100%); }
.flt-row { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; }
.flt-row > .flt-f { flex: 1; min-width: 0; margin: 0; }
.flt-f { position: relative; display: flex; align-items: center; flex-wrap: wrap; gap: 6px; min-height: var(--tap); border: 1px solid var(--line); border-radius: 12px;
  background: var(--paper); padding: 4px 32px 4px 12px; box-sizing: border-box; cursor: pointer; }
.flt-f:focus-within { border-color: var(--teal); box-shadow: 0 0 0 2px var(--teal-soft); }
.flt-n { font-size: var(--tap-fs); color: var(--muted); margin: 0; cursor: pointer; }
.flt-f.on .flt-n { font-size: 13px; }
.flt-n.vh { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
.flt-f .flt-s { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 1; padding: 0; }
.flt-f .flt-i { flex: 1; min-width: 120px; width: auto; border: 0; background: transparent; padding: 4px 0; font-size: var(--tap-fs); outline: none; }
.flt-c { position: relative; z-index: 2; display: inline-flex; align-items: center; gap: 2px; background: var(--teal-soft); color: var(--teal-ink); border-radius: 8px;
  padding: 2px 2px 2px 8px; font-size: 14px; font-weight: 600; cursor: default; }
.flt-c button { border: 0; background: transparent; color: var(--teal); cursor: pointer; font-size: 16px; line-height: 1; padding: 2px 5px; }
.flt-ar { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: var(--muted); pointer-events: none; font-size: 13px; }
.flt-x { border: 0; background: transparent; color: var(--muted); font-size: 20px; line-height: 1; padding: 4px 6px; cursor: pointer; flex: none; }
.flt-x:hover { color: var(--ink); }
.flt-ck { display: flex; align-items: center; gap: 8px; min-height: var(--tap); font-size: var(--tap-fs); cursor: pointer; flex: 1; }
.flt-r .flt-rn { font-size: var(--tap-fs); color: var(--ink); min-width: 90px; margin: 0; }
.flt-r input { flex: 1; min-width: 0; min-height: 40px; border: 1px solid var(--line); background: var(--paper); border-radius: 10px; padding: 6px 10px; font-size: var(--tap-fs); }
.flt-r input:focus { outline: none; border-color: var(--teal); }
.flt-ft { display: flex; align-items: center; gap: 8px; margin-top: 14px; border-top: 1px solid var(--line); padding-top: 14px; }
.flt-ft .linkish { margin-right: auto; }
.flt-ft .linkish[hidden] { display: inline-flex; visibility: hidden; }
/* ===== Тихие экраны (07.10.2026; js/tiho.js) =====
   Заказчик: «в нашей МИС так много кнопок, а в МедСофте — отчёт и всё».
   Период — одна кнопка «‹ Квартал · 1–7 окт. ▾ ›», шапка — «Фильтр · Скачать ·
   Ещё ⋯», вкладки данных — переключателем, разрезы — «Вид: … ▾». */
.tiho-w { position: relative; display: inline-flex; }
.tiho-pop { position: absolute; left: 0; top: calc(100% + 4px); z-index: 60; background: var(--paper); border: 1px solid var(--line); border-radius: 14px;
  box-shadow: 0 8px 28px rgba(10, 60, 50, .16); padding: 6px; min-width: 220px; max-height: 70vh; overflow: auto; display: flex; flex-direction: column; }
.tiho-pop[hidden] { display: none; }
.tiho-i { border: 0; background: transparent; font: inherit; font-size: 14.5px; text-align: left; padding: 8px 12px; border-radius: 9px; min-height: 38px;
  color: var(--ink); cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: 12px; white-space: nowrap; }
.tiho-i:hover { background: var(--fill); }
.tiho-i.on { background: var(--teal-soft); color: var(--teal-ink); font-weight: 600; }
.tiho-h { font-size: 11.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); padding: 8px 12px 4px; }
.tiho-dv { height: 1px; background: var(--line); margin: 4px 8px; }
.per-q { gap: 8px; flex-wrap: wrap; align-items: center; }
.per-b { display: inline-flex; align-items: stretch; background: var(--paper); border: 1px solid var(--line); border-radius: 12px; min-height: var(--chip-h); }
.per-b .per-s { border: 0; background: transparent; font: inherit; font-size: 19px; line-height: 1; padding: 0 12px; color: var(--teal-ink); cursor: pointer; border-radius: 12px; }
.per-b .per-s:hover:not(:disabled) { background: var(--fill); }
.per-b .per-s:disabled { color: var(--muted); opacity: .35; cursor: default; }
.per-b > .tiho-w { border-left: 1px solid var(--line); border-right: 1px solid var(--line); }
.per-b .per-m { border: 0; background: transparent; font: inherit; font-size: var(--chip-fs); font-weight: 600; padding: 0 14px; color: var(--ink); cursor: pointer; white-space: nowrap; }
.per-b .per-m:hover { background: var(--fill); }
.per-b .kk-ar { color: var(--muted); font-weight: 400; }
/* Отчёт — плотнее (как его кнопки и чипы, `.rep-page` выше); вкладки и «Вид» —
   на всю ширину: вкладки слева, «Вид» справа. */
.app.rep-page .per-b { min-height: 30px; border-radius: 8px; }
.app.rep-page .per-b .per-m { font-size: 13px; padding: 0 12px; }
.app.rep-page .per-b .per-s { font-size: 16px; padding: 0 9px; border-radius: 8px; }
.app.rep-page .tiho-i { font-size: 13.5px; min-height: 32px; padding: 6px 10px; }
/* ===== Карточки расчётов (js/raschety.js): лист, долги, счета — для
   «Зарплаты» и «Задолженности» (были «Расчёты», B2, 02.10.2026). */
.ras-h b { font-size: 22px; font-weight: 800; letter-spacing: -.02em; }
.ras-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(90px, 1fr)); gap: 8px; }
.ras-tiles > div { padding: 8px 10px; border-radius: 12px; background: var(--fill); }
.ras-tiles span { display: block; font-size: 12px; color: var(--muted); }
.ras-tiles b { font-size: 18px; font-weight: 800; font-variant-numeric: tabular-nums; }
.ras-tiles .ras-left { background: var(--teal-soft); }
.ras-tiles .ras-left b, .ras-tiles .ras-left span { color: var(--teal-ink); }
.ras-cap { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--teal-ink); margin-top: 4px; }
.ras-za tr.ras-svc td:first-child { padding-left: 14px; color: var(--muted); }
.ras-za tr.ras-sub-t td { font-weight: 600; }
.ras-li { display: flex; justify-content: space-between; gap: 10px; font-size: 13px; padding: 6px 10px; border-radius: 10px; background: var(--fill); }
.ras-li b { white-space: nowrap; font-variant-numeric: tabular-nums; }
.ras-li.click { cursor: pointer; }
.ras-docs { gap: 6px; flex-wrap: wrap; align-items: center; }
.ras-sp { flex: 1 1 0; }
.ras-docs .btn { margin: 0; }
.ras-inv { display: flex; flex-direction: column; gap: 4px; padding-bottom: 6px; border-bottom: .5px solid var(--line); }
.ras-inv.annulled .ras-li { text-decoration: line-through; opacity: .6; }
.ras-more { margin-top: var(--gap); overflow-x: auto; }
.ras-more h3 { margin-top: 0; }
.zp-docs { gap: 6px; flex-wrap: wrap; align-items: center; margin: 10px 0 0; }
.zp-docs .btn { margin: 0; }
.zp-docs .muted.small + .btn { margin-left: 2px; }
.ras-sostav { margin: 10px 2px 0; }
/* «Задолженность» (07.10.2026; js/zadolzhennost.js): два числа, слева «нам
   должны» (пациенты, организации), справа «мы должны»; история — под ними. */
.zd-kpis { grid-template-columns: repeat(2, minmax(0, 260px)); }
.zd-kpis .card b { margin: 0 0 2px; }
.zd-kpis .card > span { display: block; }
/* Одним столбцом (08.10.2026): «нам должны», потом «мы должны». */
.zd-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--gap); align-items: start; margin-top: var(--gap); }
.zd-col { display: flex; flex-direction: column; gap: var(--gap); min-width: 0; }
.zd-col .card h3 { margin-top: 0; }
.zd-col .table tr.on > td { background: var(--teal-soft); }
.zd-col .table .btn { margin: 0; }
.zd-pod, .zd-zp { margin: 10px 2px 0; }
.zd-pod .linkish, .zd-zp .linkish { min-height: 0; padding: 0; }
.top .tools .zd-q { width: 240px; margin: 0; }
.zd-chel { margin-top: var(--gap); position: relative; display: flex; flex-direction: column; gap: 10px; }
.zd-chel .zd-x { position: absolute; top: 10px; right: 12px; font-size: 18px; min-height: 0; padding: 0 4px; }
@media (max-width: 1000px) { .zd-grid { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 700px) { .zd-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } .top .tools .zd-q { width: 100%; } }
/* «Настройки › Что включено» (D1, 03.10.2026; js/vklyucheno.js): карточки
   модулей — строка на модуль: переключатель, название и сколько данных,
   «что прячет» строкой ниже; «не выключить» — тёплым. */
/* «Что включено» — одним столбцом (08.10.2026, как «Отчёты» и «Справочники»). */
.mod-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--gap); align-items: start; margin-bottom: var(--gap); max-width: 980px; }
.mod-card h3 { margin: 0 0 4px; }
.mod-r { display: flex; gap: 12px; align-items: flex-start; padding: 10px 0; border-top: 1px solid var(--line); }
.mod-card h3 + .mod-r, .mod-card > .mod-r:first-child { border-top: 0; }
.mod-r.off .mod-t b { color: var(--muted); }
.mod-x { flex: 1; min-width: 0; }
.mod-t { display: flex; flex-wrap: wrap; gap: 2px 8px; align-items: baseline; }
.mod-m { color: var(--amber-ink, var(--amber)); margin-top: 3px; }
.mod-lab { gap: 6px; margin: 6px 0 4px; align-items: center; flex-wrap: wrap; }
.mod-lab .chip { min-height: 32px; padding: 4px 12px; }
.mod-auto { flex: none; width: 40px; text-align: center; color: var(--muted); font-weight: 700; padding-top: 2px; }
.mod-sw { position: relative; flex: none; width: 40px; height: 24px; margin-top: 1px; cursor: pointer; }
.mod-sw input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: inherit; }
.mod-sw span { position: absolute; inset: 0; border-radius: 12px; background: var(--fill); box-shadow: inset 0 0 0 1px var(--line); transition: background .15s; }
.mod-sw span::after { content: ""; position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; border-radius: 50%; background: var(--paper); box-shadow: 0 1px 2px rgba(0,0,0,.25); transition: transform .15s; }
.mod-sw input:checked + span { background: var(--teal); }
.mod-sw input:checked + span::after { transform: translateX(16px); }
.mod-sw input:focus-visible + span { outline: 2px solid var(--teal); outline-offset: 2px; }
.mod-sw input:disabled { cursor: default; }
.mod-sw input:disabled + span { opacity: .55; }
.mod-r .btn.sm { flex: none; }

@media (max-width: 699px) { .mod-grid { grid-template-columns: minmax(0, 1fr); } }

/* ---------- «Отчёты»: список, как у МедСофта (07.10.2026, «Финансы и отчёты заново») ----------
   Группы в две колонки, в каждой — «название – что внутри» строкой. Отчёт —
   одна таблица: «‹ Все отчёты» над заголовком, период «с — по». */
/* Список отчётов — одним столбцом (08.10.2026, по образцу МедСофта: простота и
   чистота): раздел — подпись со значком, под ней карточка, группы — строками
   через тонкую линию, отчёты — под раскрытой строкой (js/rep.js, js/fold.js). */
.rep-list { max-width: none; }
.rep-list .rep-part { margin: 0 0 18px; }
.rep-part h3 { display: flex; align-items: center; gap: 8px; margin: 0 0 8px 4px; font-size: 13px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.rl-ico { width: 18px; height: 18px; flex: none; color: var(--teal-ink); }
.rep-list .rl-card { padding: 4px 6px; }
.rl-card .rep-g + .rep-g { border-top: 1px solid var(--line); }
.rl-card .fold-g { border-bottom: 0; }
.rl-card .fold-h { padding: 11px 10px; border-radius: 10px; }
.rl-card .fold-h b { font-size: 15px; font-weight: 600; }
.rl-card .fold-h .fold-about { font-size: 12.5px; }
.rep-g ul.fold-body { margin: 0 0 6px; padding: 0 0 0 34px; }
.rep-g ul { list-style: none; margin: 0; padding: 0; }
.rep-g li { padding: 7px 0; border-top: 1px solid var(--line); line-height: 1.35; font-size: 13.5px; }
.rep-g li:first-child { border-top: 0; }
/* «Частые» над списком (10.10.2026): те же строки, без отступа под стрелкой группы. */
.rep-ch .rep-g ul { padding: 2px 10px; }
.rep-g .rep-link { display: inline; flex: none; padding: 0; min-height: 0; border-radius: 0; color: var(--teal-ink); font-weight: 600; font-size: 14.5px; cursor: pointer; }
.rep-g .rep-link:hover { background: none; text-decoration: underline; }
.top .tools .rep-q { width: 280px; margin: 0; }
.rep-n { white-space: nowrap; align-self: center; }
.nav-back.rep-all { font-weight: 600; }
.kk-dates { gap: 6px; align-items: center; }
.kk-dates input[type=date] { width: 150px; }
.kk-t tr.kk-h > td { background: #f0f0f3 !important; }
.kk-t tr.kk-sub > td:first-child { padding-left: 22px; color: var(--muted); }
@media (max-width: 700px) { .top .tools .rep-q { width: 100%; } }
/* Поиск отбора в шапке (08.10.2026). */
.tools input.flt-head { width: 220px; margin: 0; height: var(--chip-h); min-height: 0; }
@media (max-width: 699px) { .tools input.flt-head { width: 100%; flex: 1 1 100%; } }
.tools input.pat-q { width: 280px; margin: 0; height: var(--chip-h); }
@media (max-width: 699px) { .tools input.pat-q { width: 100%; flex: 1 1 100%; } }

/* «Справочники» — одним столбцом, строками (08.10.2026, как «Отчёты»). */
.sp-list { max-width: none; }
.sp-list .sp-card { padding: 4px 6px; margin-bottom: 12px; }
/* Название группы — внутри карточки, в её цвете (как разделы «Отчётов» на макете). */
#view .card > h3.sp-gh { margin: 8px 10px 4px; font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.top .tools input.sp-q { width: 360px; margin: 0; height: var(--chip-h); min-height: 0; }
@media (max-width: 699px) { .top .tools:has(> input.sp-q) { flex: 1 1 100%; } .top .tools input.sp-q { width: 100%; flex: 1 1 100%; } }
.sp-row { display: flex; align-items: center; gap: 12px; width: 100%; border: 0; background: transparent; text-align: left; font: inherit; color: var(--ink);
  padding: 11px 10px; border-radius: 10px; cursor: pointer; }
.sp-row + .sp-row { border-top: 1px solid var(--line); border-radius: 0; }
.sp-row:hover { background: var(--fill); }
.sp-row .sp-t { display: flex; flex-direction: column; gap: 2px; flex: 1 1 auto; min-width: 0; }
.sp-row .sp-t b { font-size: 15px; font-weight: 600; }
.sp-row .sp-n { font-weight: 600; color: var(--muted); font-size: 14px; }
.sp-row .sp-go { font-style: normal; color: var(--muted); font-size: 18px; }
@media (max-width: 699px) {
  .top.top-tabs .top-l { flex: 1 1 100%; min-width: 0; }
  .top-l .top-t { flex: 1 1 auto; min-width: 0; }
  .top-tabs-r { max-width: 100%; }
  .top-t .sk-tabs { min-width: 0; }
}

/* ======== Главная главврача и проверка карты (макет v2, 09.10.2026;
   js/proverka.js) ======== */
.pv-home { display: flex; flex-direction: column; gap: var(--gap); }
.pv-home > .card { margin: 0; }
/* Критический результат — полосой сверху, не карточкой. */
.pv-krit { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; padding: 12px 16px; border-radius: 14px; background: var(--rose-soft); color: #8a0d0d; }
.pv-krit-t { flex: none; font-size: 12px; font-weight: 700; padding: 3px 8px; border-radius: 7px; background: var(--rose); color: #fff; white-space: nowrap; }
.pv-krit-m { flex: 1 1 340px; min-width: 0; }
.pv-krit-h { font-size: 15px; font-weight: 700; }
.pv-krit-b { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.pv-tel-w { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.pv-krit .pv-tel { height: 32px; min-height: 32px; padding: 0 10px; font-size: 13px; background: var(--paper); display: inline-flex; align-items: center; text-decoration: none; color: var(--ink); }
.pv-krit .btn.sm { height: 32px; min-height: 32px; }
:root[data-theme="dark"] .pv-krit { color: #ffd2cf; }
/* «Мой приём» — одной строкой. */
.pv-my { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding-top: 10px; padding-bottom: 10px; }
.pv-my select { margin-left: auto; width: auto; min-width: 160px; height: 36px; padding: 4px 10px; }
/* Шесть чисел. */
.pv-k { grid-template-columns: repeat(auto-fit, minmax(165px, 1fr)); }
.pv-k .pv-t { display: flex; flex-direction: column; gap: 2px; }
.pv-k .pv-tl { font-size: 13px; font-weight: 700; letter-spacing: 0; text-transform: none; line-height: 16px; min-height: 32px; color: var(--muted); }
.pv-k .card b { font: 500 26px/1.2 var(--head); margin-top: 2px; white-space: nowrap; }
.pv-k .pv-of { font-size: 13px; font-weight: 500; color: var(--muted); letter-spacing: 0; }
.pv-k .muted.small { font-size: 12px; line-height: 16px; }
.pv-d { font-size: 13px; font-weight: 700; letter-spacing: 0; white-space: nowrap; }
.pv-d.up { color: var(--teal-ink); }
.pv-d.down { color: #b3261e; }
:root[data-theme="dark"] .pv-d.up { color: #7fdcc9; }
:root[data-theme="dark"] .pv-d.down { color: #ff8a80; }
/* Очередь и правая колонка. */
.pv-g2 { display: grid; grid-template-columns: minmax(0, 1.75fr) minmax(300px, 1fr); gap: var(--gap); align-items: start; }
.pv-col { display: flex; flex-direction: column; gap: var(--gap); min-width: 0; }
.pv-col > .card { margin: 0; }
@media (max-width: 1100px) { .pv-g2 { grid-template-columns: minmax(0, 1fr); } }
.pv-q .hd, .pv-n .hd, .pv-doc .hd, .pv-check .hd { display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 4px 8px; }
.pv-q .hd h3, .pv-n .hd h3, .pv-doc .hd h3, .pv-check .hd h3 { margin-bottom: 8px; }
.pv-chips { gap: 6px; margin-bottom: 6px; flex-wrap: wrap; }
.pv-chips .chip { height: 30px; min-height: 30px; padding: 0 12px; font-size: 13px; margin: 0; }
.pv-row { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) minmax(0, 1.5fr) auto; gap: 10px; align-items: center;
  padding: 8px 0; border-top: 1px solid var(--line); font-size: 14px; cursor: pointer; }
.pv-row:hover { background: color-mix(in srgb, var(--ink) 3%, transparent); }
.pv-row .btn.sm { height: 32px; min-height: 32px; padding: 0 12px; font-size: 13px; }
.pv-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.tag.pv-a, .tag.pv-r, .tag.pv-n { margin: 0; padding: 2px 8px; font-weight: 700; white-space: nowrap; }
.tag.pv-a { background: var(--amber-soft); color: #7a4700; }
.tag.pv-r { background: var(--rose-soft); color: #9c0010; }
.tag.pv-n { background: var(--fill); color: var(--ink); }
:root[data-theme="dark"] .tag.pv-a { color: #ffd9a0; } :root[data-theme="dark"] .tag.pv-r { color: #ffc2bd; }
.pv-foot { padding-top: 8px; border-top: 1px solid var(--line); }
.pv-q .home-more { display: block; margin: 6px 0; }
@media (max-width: 700px) {
  .pv-row { grid-template-columns: minmax(0, 1fr) auto; }
  .pv-row > div:nth-child(2) { grid-column: 1; }
  .pv-row > .pv-tags { grid-column: 1 / -1; }
  .pv-row > .btn { grid-column: 2; grid-row: 1; }
}
.pv-nr { display: flex; justify-content: space-between; gap: 10px; padding: 7px 0; border-top: 1px solid var(--line); font-size: 14px; }
.pv-nr > span { display: flex; flex-direction: column; min-width: 0; }
.pv-dt th { font-size: 12px; line-height: 15px; vertical-align: bottom; }
.pv-dt td:nth-child(n+2), .pv-dt th:nth-child(n+2) { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
/* Экран «Проверка карты». */
.pv-flags { gap: 6px; margin-bottom: 10px; flex-wrap: wrap; align-items: center; }
.pv-pos { white-space: nowrap; }
.pv-rv { display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-start; }
.pv-card { flex: 999 1 520px; min-width: 0; display: flex; flex-direction: column; gap: 12px; font-size: 15px; line-height: 22px; margin: 0; }
.pv-card h3 { margin-bottom: 0; }
.pv-bl { font-size: 13px; font-weight: 600; color: var(--muted); margin-bottom: 2px; line-height: 17px; }
.pv-b.pv-copy, .pv-b.pv-bad { border-radius: 10px; padding: 8px 12px; margin: 0 -12px; }
.pv-b.pv-copy { background: var(--amber-soft); }
.pv-b.pv-copy .pv-bl { color: #7a4700; }
.pv-b.pv-bad { background: var(--rose-soft); color: #9c0010; }
.pv-b.pv-bad .pv-bl { color: #9c0010; }
:root[data-theme="dark"] .pv-b.pv-copy .pv-bl { color: #ffd9a0; }
:root[data-theme="dark"] .pv-b.pv-bad, :root[data-theme="dark"] .pv-b.pv-bad .pv-bl { color: #ffc2bd; }
.pv-open { align-self: flex-start; font-weight: 600; }
.pv-check { flex: 1 1 320px; max-width: 420px; display: flex; flex-direction: column; gap: 10px; margin: 0; }
.pv-check .hd h3 { margin: 0; }
.pv-it { display: flex; align-items: center; gap: 10px; font-size: 14px; background: none; border: 0; padding: 2px 0; text-align: left; cursor: pointer; color: var(--ink); min-height: 32px; }
.pv-m { flex: none; width: 26px; height: 26px; border-radius: 13px; display: inline-flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700;
  background: var(--teal-soft); color: var(--teal-ink); }
.pv-m[data-m="warn"] { background: var(--amber-soft); color: #7a4700; }
.pv-m[data-m="no"] { background: var(--rose-soft); color: #9c0010; }
.pv-check .field { margin: 0; }
.pv-check textarea { min-height: 92px; }
.pv-btns { display: grid; gap: 8px; }
.pv-btns .btn { width: 100%; }
.btn.pv-back { background: var(--rose-soft); color: #9c0010; }
:root[data-theme="dark"] .btn.pv-back { color: #ffc2bd; }
.pv-rule { align-items: center; gap: 8px; margin: 6px 0; }
.pv-rule label { flex: 1; font-size: 14px; }
.pv-rule input { width: 80px; }
@media (max-width: 700px) { .pv-check { max-width: none; } }
.pv-col .home-att .hd { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.btn.pv-nav { width: 40px; padding: 0; font-size: 18px; }
.pv-check #pv-w:empty { display: none; }

/* ===== Главная менеджера (макет v2, доски Manager и ManagerMove; 09.10.2026, js/menedzher.js) ===== */
.mg-den { display: inline-flex; gap: 2px; padding: 2px; border-radius: 12px; background: var(--fill); }
.mg-den .chip { margin: 0; height: 34px; min-height: 34px; padding: 0 12px; font-size: 13px; background: transparent; }
.mg-den .chip.on { background: var(--paper); color: var(--ink); box-shadow: var(--shadow); }
.mg-tiles { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--gap); }
.mg-t { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.mg-tl { font-size: 13px; font-weight: 700; letter-spacing: 0; text-transform: none; line-height: 1.3; color: var(--muted); }
.mg-tv { font-size: 26px; font-weight: 800; letter-spacing: -.03em; font-variant-numeric: tabular-nums; line-height: 1.15; }
.mg-ts { font-size: 12.5px; line-height: 1.35; color: var(--muted); min-height: 34px; }
.mg-ta { align-self: flex-start; margin-top: auto; background: none; border: 0; padding: 0; font: inherit; font-size: 13.5px; font-weight: 700; color: var(--teal-ink); cursor: pointer; white-space: nowrap; }
.mg-ta:hover { text-decoration: underline; }
.mg-all { margin: 8px 0 0; }
.mg-all .linkish { font-weight: 700; color: var(--teal-ink); }
.mg-g2 { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(320px, 1fr); gap: var(--gap); margin-top: var(--gap); align-items: start; }
.mg-hd { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 12px; margin-bottom: 10px; }
.mg-hd h3 { margin: 0; color: var(--ink); }
.mg-lg { display: flex; flex-wrap: wrap; gap: 2px 12px; font-size: 12px; color: var(--muted); }
.mg-lg > span { white-space: nowrap; display: inline-flex; align-items: center; gap: 4px; }
.mg-lg i { display: inline-block; width: 12px; height: 12px; border-radius: 3px; }
.mg-lg .linkish { font-size: 12px; color: var(--muted); }
.mg .lo { color: var(--rose-ink); font-weight: 700; }
.mg-scroll { overflow-x: auto; max-width: 100%; }
.mg-grid { display: grid; gap: 3px; align-items: center; font-size: 13px; }
.mg-h { font-size: 12px; color: var(--muted); white-space: nowrap; }
.mg-h.now { color: var(--teal-ink); font-weight: 700; }
.mg-n { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-right: 6px; }
.mg-n b { font-weight: 600; }
.mg-c, .mg-lg i { height: 20px; border-radius: 4px; box-sizing: border-box; border: 0; padding: 0; margin: 0; min-width: 0; }
.mg-lg i { height: 12px; }
.mg-c.b, .mg-lg i.b { background: var(--teal); }
.mg-c.b.p { background: color-mix(in srgb, var(--teal) 50%, var(--paper)); }
.mg-c.f, .mg-lg i.f { background: var(--paper); box-shadow: inset 0 0 0 2px var(--teal); }
button.mg-c.f { cursor: pointer; }
button.mg-c.f:hover { background: var(--teal-soft); }
.mg-c.p, .mg-lg i.p { background: color-mix(in srgb, var(--ink) 20%, var(--paper)); }
.mg-c.x, .mg-lg i.x { background: repeating-linear-gradient(135deg, color-mix(in srgb, var(--ink) 16%, var(--paper)) 0 3px, var(--fill) 3px 6px); }
.mg-p { font-size: 13px; font-weight: 700; text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.mg-p.lo { color: var(--rose-ink); }
.mg-btns { margin-top: 12px; gap: 8px; flex-wrap: wrap; }
.mg-z { display: flex; flex-direction: column; gap: 4px; padding: 9px 0; border-top: 1px solid var(--line); }
.mg-zh { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.mg-zf { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.mg-zb { margin-left: auto; display: inline-flex; gap: 6px; }
.mg-src { font-size: 12px; font-weight: 700; border-radius: 7px; padding: 2px 8px; background: var(--fill); white-space: nowrap; }
.mg-zn { padding-top: 8px; border-top: 1px solid var(--line); margin: 4px 0 0; }
.mg .btn.sm { height: 32px; font-size: 13px; padding: 0 12px; }
.pr-modal .pr-h { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 10px; }
.pr-sel { gap: 8px; flex-wrap: wrap; align-items: center; }
.pr-sel select, .pr-sel input { width: auto; flex: 0 1 auto; }
.pr-scroll { overflow-x: auto; max-height: 55vh; overflow-y: auto; }
.pr-t select { width: auto; max-width: 260px; }
.pr-off { display: inline-flex; align-items: center; gap: 6px; margin: 4px 0 8px; }
.pr-ok { display: inline-flex; align-items: center; gap: 6px; }
.pr-f { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px; padding-top: 8px; }
@media (max-width: 1250px) { .mg-tiles { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 1100px) { .mg-g2 { grid-template-columns: minmax(0, 1fr); } }
/* ======== Доска «Лаборатория» (макет v2, 09.10.2026; js/lab2.js `renderLabDoska`) ======== */
.lab-d { display: flex; flex-direction: column; gap: 12px; }
.lab-d > .card { margin: 0; }
.tools input.lab-q { width: 190px; }
/* Этапы — плитки-вкладки слева направо; выбранная — залита. */
.lab-et { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; }
.lab-et-b { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; padding: 10px 14px; border-radius: 14px; border: 0;
  background: var(--paper); color: var(--ink); font: inherit; text-align: left; cursor: pointer; min-width: 0; }
.lab-et-b:hover { background: color-mix(in srgb, var(--teal) 6%, var(--paper)); }
.lab-et-n { font-size: 13px; }
.lab-et-c { font-size: 24px; font-weight: 700; line-height: 28px; font-variant-numeric: tabular-nums; }
.lab-et-w { font-size: 12px; line-height: 16px; color: var(--muted); }
.lab-et-w.bad { color: #9c0010; font-weight: 700; }
.lab-et-b.on { background: var(--teal); color: var(--on-teal); }
.lab-et-b.on .lab-et-w { color: #d7f1ec; font-weight: 400; }
.lab-et-b.on .lab-et-w.bad { color: #fff; font-weight: 700; }
:root[data-theme="dark"] .lab-et-w.bad { color: #ffc2bd; }
/* Таблица этапа. */
.lab-tb { overflow-x: auto; }
.lab-t td { vertical-align: middle; }
.lab-t .lab-tube { color: var(--muted); white-space: nowrap; }
.lab-t .lab-act { text-align: right; white-space: nowrap; }
.lab-t .lab-act .btn { white-space: nowrap; }
.tag.lab-q-t { margin: 0; padding: 2px 8px; font-weight: 700; white-space: nowrap; }
.tag.lab-q-t.good { background: var(--teal-soft); color: var(--teal-ink); }
.tag.lab-q-t.bad { background: var(--rose-soft); color: #9c0010; }
:root[data-theme="dark"] .tag.lab-q-t.bad { color: #ffc2bd; }
.lab-q-b { padding: 0; text-decoration: none; }
.lab-found { justify-content: space-between; align-items: center; margin-bottom: 6px; }
/* Партнёры — карточками внизу. */
.lab-pts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr)); gap: 12px; }
.lab-pt { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; font-size: 14px; margin: 0; }
.lab-pt-n { padding: 0; color: var(--ink); text-decoration: none; }
.lab-pt-b { margin-left: auto; display: inline-flex; flex-wrap: wrap; gap: 6px; }
.lab-pt a.btn { text-decoration: none; display: inline-flex; align-items: center; }
@media (max-width: 699px) {
  .tools input.lab-q { width: 100%; flex: 1 1 100%; }
  .lab-et { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .lab-krit .pv-krit-b { width: 100%; }
  /* Строка заказа — карточкой: пациент и кнопка, под ними остальное. */
  .lab-tb { overflow-x: visible; }
  .lab-t, .lab-t tbody { display: block; width: 100%; }
  .lab-t thead { display: none; }
  .lab-t tr { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 10px; padding: 8px 0; border-bottom: 1px solid var(--line); }
  .lab-t td { display: block; border: 0; padding: 0; min-width: 0; }
  .lab-t td.lab-p { order: 1; flex: 1 1 0; }
  .lab-t td.lab-act { order: 2; flex: none; }
  .lab-t td.lab-an { order: 3; flex: 1 1 100%; }
  .lab-t td:not(.lab-p):not(.lab-act):not(.lab-an) { order: 4; font-size: 13px; }
  .lab-t td.lab-nil { display: none; }
  .lab-pt-b { margin-left: 0; }
}

/* Шапка «Главной» на телефоне (x1, 09.10.2026): «Директору · Главврачу ·
   Обновить» — своей строкой под заголовком; раньше у главврача они вставали
   рядом и наезжали на «Главная». «Обновить» — высотой с чипы (32 px — предел телефона). */
@media (max-width: 699px) {
  .top .tools:has(> .home-vw) { flex: 1 1 100%; }
  .top .tools .home-vw .btn { min-height: 32px; height: 32px; padding: 0 12px; }
}
/* ---------- Остатки склада (макет v2, доска Stock) ---------- */
.chip.zero { background: transparent; color: var(--muted); }
.st-chips .chip b, .ob-chips .chip b { font-variant-numeric: tabular-nums; margin-left: 5px; }
.st-sum { margin: -4px 0 10px; }
.st-chips { margin-top: 4px; align-items: center; }
.st-alarm { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; color: #9c0010; }
.st-alarm > span { flex: 1 1 320px; }
.st-alarm .small { margin-left: 6px; }
:root[data-theme="dark"] .st-alarm { color: #ffc2bd; }
.st-table .st-q { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; }
.st-bar { position: relative; display: inline-block; width: 140px; height: 6px; border-radius: 3px; background: var(--fill); }
.st-bar i { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 3px; }
.st-bar s { position: absolute; top: -4px; width: 2px; height: 14px; margin-left: -1px; background: var(--ink); }
.st-bar-ok i { background: var(--ok); }
.st-bar-low i { background: var(--amber); }
.st-bar-out i { background: var(--rose); }
.st-table tr.st-part td { padding-top: 4px; padding-bottom: 4px; font-size: 13px; color: var(--muted); background: color-mix(in srgb, var(--fill) 35%, transparent); }
.st-table tr.st-part td:first-child { padding-left: 26px; }
@media (max-width: 699px) { .st-bar { width: 70px; } }
/* ---------- Обзвон (макет v2, доска Calls) ---------- */
.ob-chips { gap: 6px; }
.ob-t td { vertical-align: top; }
/* Строка обзвона — две строки в ячейке (имя и телефон, метка и повод), не «второе значение рядом». */
.app.rep-page .table.ob-t td { padding: 7px 8px; }
.app.rep-page .table.ob-t td > div { display: block !important; margin-left: 0 !important; font-size: 12.5px; }
.ob-t .ob-tel { font-weight: 600; color: var(--teal-ink); white-space: nowrap; }
.ob-t .ob-why { max-width: 380px; }
.ob-t .ob-why .muted { margin-top: 3px; }
.ob-t .tag { font-size: 12px; font-weight: 700; border-radius: 7px; padding: 2px 8px; margin: 0 4px 0 0; white-space: nowrap; display: inline-block; }
.ob-t .ob-tr { background: var(--rose-soft); color: #9c0010; }
.ob-t .ob-ta { background: var(--amber-soft); color: #7a4700; }
.ob-t .ob-tg { background: var(--teal-soft); color: var(--teal-ink); }
.ob-t .ob-tn { background: var(--fill); color: var(--ink); }
.ob-t .ob-tb { background: #e3ecf7; color: #1f4f86; }
:root[data-theme="dark"] .ob-t .ob-tr { color: #ffc2bd; }
:root[data-theme="dark"] .ob-t .ob-ta { color: #ffd59a; }
:root[data-theme="dark"] .ob-t .ob-tb { background: #23344a; color: #b9d3f2; }
.ob-t .ob-done { font-weight: 700; color: var(--teal-ink); }
/* ---------- Карточка пациента (макет v2, доска Patient) ---------- */
.pat-tags { gap: 6px; margin: -4px 0 12px; }
.pat-tags .tag { font-size: 12px; font-weight: 700; border-radius: 7px; padding: 2px 8px; margin: 0; background: var(--fill); color: var(--ink); }
.pat-tags .tag.pt-bad { background: var(--rose-soft); color: #9c0010; }
.pat-tags .tag.pt-warn { background: var(--amber-soft); color: #7a4700; }
.pat-tags .tag.pt-note { font-weight: 500; }
:root[data-theme="dark"] .pat-tags .tag.pt-bad { color: #ffc2bd; }
:root[data-theme="dark"] .pat-tags .tag.pt-warn { color: #ffd59a; }
.pat-tel { font-weight: 600; color: var(--teal-ink); }
.pat-cols { display: flex; flex-wrap: wrap; gap: var(--gap); align-items: flex-start; }
.pat-l { flex: 1 1 270px; max-width: 330px; display: flex; flex-direction: column; gap: var(--gap); min-width: 0; }
.pat-l .card { margin-bottom: 0; }
.pat-r { flex: 999 1 480px; min-width: 0; display: flex; flex-direction: column; gap: var(--gap); }
.pat-r > .card, .pat-r .pat-grid { margin-bottom: 0; }
/* Блоки под историей: широкая таблица (показатели) листается в своей карточке, страница не шире экрана. */
.pat-r .pat-grid { grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); }
.pat-r .pat-grid > * { min-width: 0; overflow-x: auto; }
.pat-wait { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; }
.pat-wait > span:nth-child(2) { flex: 1 1 260px; }
.pat-wait-h { font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--amber); }
.pat-h { display: grid; grid-template-columns: 76px minmax(0, 1fr) auto; gap: 12px; padding: 10px 0; border-top: 1px solid var(--line); align-items: start; }
.pat-hist h3 + .pat-h, .pat-hist .banner + .pat-h { border-top: 0; }
.pat-h-d { display: flex; flex-direction: column; }
.pat-h-s { text-align: right; }
.pat-h-s .status { margin: 0; }
.pat-h.click { cursor: pointer; }
.pat-h.click:hover { background: color-mix(in srgb, var(--teal) 5%, transparent); }
.obr-card .obr-it { padding: 8px 0; border-top: 1px solid var(--line); }
.obr-card .obr-it .tag { font-size: 12px; font-weight: 700; border-radius: 7px; padding: 1px 7px; background: var(--fill); }
.obr-card .obr-it .tag.obr-bad { background: var(--rose-soft); color: #9c0010; }
.obr-card .obr-text { margin: 3px 0; font-size: 14px; }
@media (max-width: 699px) { .pat-l { max-width: none; } .pat-h { grid-template-columns: 58px minmax(0, 1fr); } .pat-h-s { grid-column: 2; text-align: left; } }
/* ---------- «Найти…» (макет v2, доска Search) ---------- */
.nav .nav-find { display: flex; justify-content: space-between; align-items: center; gap: 8px; background: var(--bg); color: var(--muted);
  font-size: 14px; font-weight: 500; padding: 8px 10px; margin: 0 0 10px; border-radius: 10px; box-shadow: var(--shadow); }
.nav .nav-find:hover { background: var(--bg); color: var(--ink); }
.nav-find-k { font-size: 11px; color: var(--muted); background: var(--paper); border-radius: 6px; padding: 1px 5px; box-shadow: var(--shadow); }
/* Телефон: меню за «☰» — кнопка поиска вместе с пунктами, в открытом меню. */
@media (max-width: 980px) { .nav .nav-find { display: none; } .app.nav-open .nav .nav-find { display: flex; flex: 1 1 100%; margin: 8px 0 0; } }
#modal:has(> .nj) { width: min(660px, 100%); padding: 0; overflow: hidden; display: flex; flex-direction: column; }
#modal:has(> .nj)::before { display: none; }
@media (min-width: 700px) { #overlay:has(.nj) { place-items: start center; padding-top: 9vh; } #modal:has(> .nj) { border-radius: 18px; } }
.nj { display: flex; flex-direction: column; min-height: 0; max-height: 80vh; }
.nj-top { display: flex; align-items: center; gap: 10px; padding: 12px 16px; border-bottom: 1px solid var(--line); }
.nj-lupa { font-size: 20px; color: var(--muted); }
.nj-top input { flex: 1; border: 0; background: transparent; font-size: 17px; padding: 6px 0; outline: none; min-width: 0; }
.nj-esc, .nj-k { font-size: 11px; background: var(--fill); border-radius: 6px; padding: 2px 6px; color: var(--muted); }
.nj-list { overflow-y: auto; padding: 4px 0 8px; min-height: 60px; }
.nj-g { font-size: 11px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); padding: 10px 18px 4px; }
.nj-i { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; border: 0; background: transparent; padding: 8px 18px; font-size: 15px; cursor: pointer; color: var(--ink); }
.nj-i.on { background: var(--teal-soft); }
.nj-ico { flex: none; width: 30px; height: 30px; border-radius: 8px; background: var(--fill); display: grid; place-items: center; font-size: 12px; font-weight: 700; }
.nj-ico.p { background: var(--paper); color: var(--teal-ink); box-shadow: 0 0 0 1px var(--line); }
.nj-t { flex: 1; min-width: 0; }
.nj-n b { font-weight: 800; }
.nj-hint { flex: none; font-size: 12px; color: var(--muted); background: var(--paper); border-radius: 6px; padding: 2px 8px; }
.nj-empty { padding: 14px 18px; }
.nj-foot { border-top: 1px solid var(--line); background: var(--bg); padding: 8px 18px 10px; display: flex; flex-wrap: wrap; gap: 4px 14px; }
.nj-foot > div { flex: 1 1 100%; }
/* ---------- Особые состояния (макет v2, доска States) ---------- */
.nav-deny { margin: 0 0 12px; font-size: 14px; }
.nav-deny span { opacity: .9; }
.svyaz { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; color: #9c0010; margin: 0 0 12px; }
.svyaz > span { flex: 1 1 360px; }
:root[data-theme="dark"] .svyaz { color: #ffc2bd; }
/* Сервер не отвечает — одна полоса: «не смогла записать» стойки молчит, пока горит эта. */
body.svz-down #srv-down { display: none !important; }
/* Фото пациента в шапке карточки (10.10.2026). */
.pat-ph { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; vertical-align: middle; margin-right: 10px; }

/* ======== «Аналитика» руководства (10.10.2026, макет «Ormin: Аналитика») ========
   Свой язык графиков внутри оболочки программы: крупные числа, линия за год,
   цвет — только смысл (норма бирюзовым, внимание янтарным, тревога розовым). */
/* «Аналитика» — в цветах брендбука (14.10.2026): главный блок — тёмно-синий
   navy, линии — бирюза, внимание — оранжевый, тревога — служебный красный. */
.an { --an-ok: #1fa39c; --an-warn: #e07814; --an-bad: #c8372d; --an-deep: #002d42; --an-band: rgba(39, 190, 182, .14);
  --an-muted: var(--muted); display: flex; flex-direction: column; gap: 18px; }
:root[data-theme="dark"] .an { --an-ok: #27beb6; --an-warn: #f4a24f; --an-bad: #ff7a6e; --an-deep: #0a3346; --an-band: rgba(39, 190, 182, .18); --an-muted: var(--muted); }
.an .muted { color: var(--an-muted); }
.an .num { font-variant-numeric: tabular-nums; white-space: nowrap; }
.an-per { display: inline-flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.an-seg { display: inline-flex; background: var(--fill); border-radius: 12px; padding: 3px; gap: 2px; }
.an-seg button { font: inherit; font-size: 13px; font-weight: 600; min-height: 32px; padding: 0 12px; border-radius: 9px; border: 0; background: transparent; color: var(--ink); cursor: pointer; }
.an-seg button.on { background: var(--paper); box-shadow: 0 1px 2px rgba(0, 0, 0, .08); }
.an-pl { display: inline-flex; align-items: center; gap: 2px; background: var(--paper); border-radius: 12px; box-shadow: 0 0 0 1px var(--line); min-height: 38px; }
.an-pl b { padding: 0 6px; font-size: 14px; white-space: nowrap; }
.an-arr { font: inherit; font-size: 18px; border: 0; background: transparent; color: var(--ink); min-width: 34px; min-height: 36px; cursor: pointer; border-radius: 10px; }
.an-arr:disabled { opacity: .3; cursor: default; }
.an-sh { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 12px; margin-bottom: 12px; }
.an-sh h2 { margin: 0; font-size: 18px; font-weight: 800; letter-spacing: -.01em; }
.an .card { border-radius: 20px; box-shadow: 0 0 0 1px var(--line); }
.an a.card { color: inherit; text-decoration: none; }
.an a.card:hover { box-shadow: 0 0 0 1px color-mix(in srgb, var(--ink) 22%, transparent); }
.an-eb { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--an-muted); }
.an-eb.bad { color: var(--an-bad); }
/* обзор: вывод и три числа */
.an-hero { background: var(--an-deep); color: #fff; border-radius: 24px; padding: 24px 26px 20px; display: flex; flex-direction: column; gap: 20px; }
.an-hero-sk { min-height: 150px; }
.an-verdict { margin: 0; font-size: 23px; line-height: 31px; font-weight: 600; letter-spacing: -.01em; max-width: 980px; text-wrap: pretty; }
.an-verdict b { color: #ffb4a8; font-weight: 700; }
.an-verdict em { font-style: normal; color: #7fe0cc; font-weight: 700; }
.an-hks { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr)); gap: 14px; }
.an-hk { background: rgba(255, 255, 255, .06); border-radius: 18px; padding: 14px 16px 8px; display: flex; flex-direction: column; gap: 2px; color: #fff; text-decoration: none; }
.an-hk:hover { background: rgba(255, 255, 255, .1); }
.an-hl { font-size: 12px; font-weight: 600; color: rgba(255, 255, 255, .7); }
.an-hv { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.an-hv b { font-size: 32px; font-weight: 800; letter-spacing: -.02em; }
.an-hd { font-size: 14px; font-weight: 700; } .an-hd.good { color: #7fe0cc; } .an-hd.bad { color: #ffb4a8; }
.an-hs { font-size: 12px; color: rgba(255, 255, 255, .62); }
.an-hx { display: flex; justify-content: space-between; font-size: 11px; color: rgba(255, 255, 255, .5); }
/* линии */
.an-line { width: 100%; display: block; overflow: visible; margin-top: 6px; }
.an-line path.l { fill: none; stroke: var(--an-ok); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.an-line path.d { fill: none; stroke: var(--an-ok); stroke-linecap: round; vector-effect: non-scaling-stroke; }
.an-line.warn path.l { stroke: var(--an-warn); } .an-line.warn path.d { stroke: var(--an-warn); }
.an-line.bad path.l { stroke: var(--an-bad); } .an-line.bad path.d { stroke: var(--an-bad); }
.an-line.hero path.l { stroke: #7fe0cc; stroke-width: 2.25; } .an-line.hero path.d { stroke: #7fe0cc; }
.an-line.hero .an-fill { fill: rgba(127, 224, 204, .14); }
.an-line.prev path.l { stroke: var(--an-muted); stroke-dasharray: 4 5; stroke-width: 1.5; }
.an-line.big path.l { stroke-width: 3; }
.an-line .an-band { fill: var(--an-band); }
.an-nol { display: flex; align-items: center; justify-content: center; font-size: 12px; color: var(--an-muted); border: 1px dashed var(--line); border-radius: 10px; margin-top: 6px; }
.an-hk .an-nol { color: rgba(255, 255, 255, .5); border-color: rgba(255, 255, 255, .15); }
.an-two { position: relative; }
.an-two .an-line.prev { position: absolute; inset: 0; margin: 0; }
.an-two .an-line:not(.prev) { position: relative; margin: 0; }
.an-xax { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; font-size: 11px; color: var(--an-muted); text-align: center; }
/* кольца цели */
.an-goal .an-gls { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr)); gap: 12px; }
.an-gl { display: flex; align-items: center; gap: 14px; color: inherit; text-decoration: none; }
.an-gl > span { display: flex; flex-direction: column; min-width: 0; font-size: 14px; line-height: 19px; }
.an-ring { width: 72px; height: 72px; flex: none; }
.an-ring circle { fill: none; stroke-width: 7; }
.an-ring .bg { stroke: var(--fill); }
.an-ring .fg { stroke: var(--an-ok); stroke-linecap: round; transform: rotate(-90deg); transform-origin: 36px 36px; }
.an-ring.warn .fg { stroke: var(--an-warn); } .an-ring.bad .fg { stroke: var(--an-bad); }
.an-ring text { font-size: 15px; font-weight: 800; text-anchor: middle; fill: var(--ink); font-family: var(--font); }
/* карточки показателей */
.an-att { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)); gap: 14px; }
.an-kpi { display: flex; flex-direction: column; gap: 5px; }
.an-kh { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.an-kt { font-size: 15px; font-weight: 700; }
.an-kv { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.an-kv b { font-size: 28px; font-weight: 800; letter-spacing: -.02em; }
.an-kn { line-height: 16px; }
.an-pill { font-size: 11px; font-weight: 700; border-radius: 20px; padding: 3px 9px 3px 8px; display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.an-pill i { width: 6px; height: 6px; border-radius: 3px; display: inline-block; }
.an-pill.ok { background: var(--teal-soft); color: var(--ink); } .an-pill.ok i { background: var(--an-ok); }
.an-pill.warn { background: var(--amber-soft); color: var(--ink); } .an-pill.warn i { background: var(--an-warn); }
.an-pill.bad { background: var(--rose-soft); color: var(--rose-ink, #9e1f35); } .an-pill.bad i { background: var(--an-bad); }
.an-dl { font-size: 13px; font-weight: 700; white-space: nowrap; }
.an-dl.good { color: var(--teal-ink); } .an-dl.bad { color: var(--rose-ink, #9e1f35); } .an-dl.flat { color: var(--an-muted); }
.an-top { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr)); gap: 12px; }
.an-tk { display: flex; flex-direction: column; gap: 4px; }
.an-tk > b { font-size: 30px; font-weight: 800; letter-spacing: -.02em; }
/* плитки областей */
.an-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(230px, 100%), 1fr)); gap: 12px; }
.an-tile { display: flex; flex-direction: column; gap: 8px; }
.an-tile b { font-size: 22px; font-weight: 800; }
.an-tt { display: flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 800; }
.an-tt i { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }
.an-cnt { display: flex; flex-wrap: wrap; gap: 10px; font-size: 12px; font-weight: 600; color: var(--an-muted); }
.an-cnt span { display: inline-flex; align-items: center; gap: 4px; }
.an-cnt i { width: 6px; height: 6px; border-radius: 3px; display: inline-block; }
.an-cnt i.ok { background: var(--an-ok); } .an-cnt i.warn { background: var(--an-warn); } .an-cnt i.bad { background: var(--an-bad); }
/* разбор показателя */
.an-strip { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 28px; }
.an-strip .an-line, .an-strip .an-xax, .an-strip .an-src, .an-strip .an-nol { flex: 1 1 100%; }
.an-big { display: inline-flex; align-items: center; gap: 12px; }
.an-big b { font-size: 50px; font-weight: 800; letter-spacing: -.03em; line-height: 1; }
.an-sb { display: flex; flex-direction: column; gap: 2px; }
.an-sb b { font-size: 18px; font-weight: 800; }
.an-nd { flex: 1 1 100%; font-size: 14px; color: var(--amber-ink, #7a4700); background: var(--amber-soft); border-radius: 12px; padding: 8px 12px; }
.an-src { margin: 4px 0 0; }
.an-acts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr)); gap: 12px; }
.an-acts .card { display: flex; flex-direction: column; gap: 6px; }
.an-go { margin-top: auto; font-size: 13px; font-weight: 800; color: var(--teal-ink); }
/* полосы, доли, мелкие числа */
.an-bars { display: flex; flex-direction: column; gap: 8px; }
.an-br { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) minmax(64px, auto); gap: 10px; align-items: center; font-size: 13.5px; }
.an-br b { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.an-br .t, .an-hb .t { height: 12px; border-radius: 6px; background: var(--fill); overflow: hidden; display: block; }
.an-br .t span, .an-hb .t span { display: block; height: 100%; border-radius: 6px; background: var(--an-ok); }
.an-br .t span.warn, .an-hb .t span.warn { background: var(--an-warn); } .an-br .t span.bad, .an-hb .t span.bad { background: var(--an-bad); }
.an-br .t span.c-napr { background: #3e7cb1; } .an-br .t span.c-apteka { background: #6e5fb0; } .an-hb .t span.c-market, .an-br .t span.c-market { background: var(--an-ok); }
.an-hb { display: grid; grid-template-columns: minmax(60px, 1fr) 70px; gap: 8px; align-items: center; }
.an-hb b { text-align: right; }
.an-mini { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(170px, 100%), 1fr)); gap: 10px; }
.an-mini > div { background: var(--bg); border-radius: 14px; padding: 10px 12px; display: flex; flex-direction: column; gap: 2px; }
.an-mini b { font-size: 20px; font-weight: 800; }
.an-stack { display: flex; height: 34px; border-radius: 11px; overflow: hidden; gap: 3px; }
.an-stack i { display: block; min-width: 3px; }
.an-lg { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(170px, 100%), 1fr)); gap: 10px; margin-top: 12px; }
.an-lg > div { display: flex; gap: 8px; font-size: 13px; }
.an-lg > div > span { display: flex; flex-direction: column; }
.an-lg i { width: 10px; height: 10px; border-radius: 3px; flex: none; margin-top: 4px; }
.an-g2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(420px, 100%), 1fr)); gap: 14px; align-items: start; }
.an-fc { margin: 10px 0 0; line-height: 17px; }
.an-sub { margin: 16px 0 8px; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--an-muted); }
.an-note { font-size: 15px; line-height: 22px; }
/* воронка */
.an-fn { display: flex; flex-direction: column; gap: 5px; }
.an-fr { display: grid; grid-template-columns: 160px minmax(0, 1fr); gap: 14px; align-items: center; font-size: 14px; font-weight: 700; }
.an-fb { min-height: 40px; border-radius: 11px; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 0 14px; box-sizing: border-box; color: #fff; min-width: 90px; }
.an-fb span { font-size: 12px; font-weight: 600; opacity: .85; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.an-fd { margin-left: 194px; font-size: 12px; color: var(--an-muted); padding: 0 0 3px 14px; border-left: 2px dashed var(--line); }
/* тепловая карта удержания */
.an-hmw { overflow-x: auto; }
.an-hm { display: grid; grid-template-columns: 110px repeat(12, minmax(34px, 1fr)); gap: 3px; font-size: 11px; min-width: 620px; }
.an-hm > span { text-align: center; }
.an-hmm { text-align: left !important; font-weight: 700; font-size: 12px; display: flex; align-items: center; }
.an-hc { height: 28px; border-radius: 6px; display: flex; align-items: center; justify-content: center; font-weight: 700; font-variant-numeric: tabular-nums;
  background: color-mix(in srgb, var(--an-ok) calc(var(--a) * 100%), transparent); color: var(--ink); }
/* круг семьи */
.an-wheel { background: color-mix(in srgb, #d9667a 7%, var(--paper)); border-radius: 24px; padding: 18px 20px; display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(260px, 1fr); gap: 18px; align-items: center; box-shadow: 0 0 0 1px var(--line); }
.an-wc { display: flex; flex-direction: column; gap: 12px; }
.an-wc .card { display: flex; flex-direction: column; gap: 4px; }
.an-weak { box-shadow: 0 0 0 2px var(--an-bad) !important; }
.an-weak b { font-size: 18px; line-height: 24px; }
.an-weak .btn { align-self: flex-start; margin-top: 6px; }
.an-xl { font-size: 28px; font-weight: 800; }
.an-krug { width: 100%; height: auto; display: block; }
.an-krug text { font-family: var(--font); }
.an-krug .arc { fill: none; stroke: var(--an-ok); stroke-width: 4; stroke-linecap: round; }
.an-krug .arc.weak { stroke: var(--an-bad); stroke-width: 2; stroke-dasharray: 5 6; }
.an-krug .arc.fut { stroke: #b7b3aa; stroke-width: 2.5; stroke-dasharray: 3 6; }
.an-krug .node { fill: var(--paper); stroke: var(--an-ok); stroke-width: 2.5; }
.an-krug .node.weak { stroke: var(--an-bad); stroke-width: 3; }
.an-krug .node.fut { stroke: #b7b3aa; stroke-dasharray: 4 4; }
.an-krug .node.goal { fill: var(--an-deep); stroke: var(--an-deep); }
.an-krug .v { font-size: 17px; font-weight: 800; text-anchor: middle; fill: var(--ink); }
.an-krug .v.inv { fill: #fff; }
.an-krug .n { font-size: 13px; font-weight: 800; fill: var(--ink); }
.an-krug .s { font-size: 11.5px; fill: var(--an-muted); }
.an-krug .c { font-size: 13px; font-weight: 700; text-anchor: middle; fill: var(--an-muted); }
.an-list { display: flex; flex-direction: column; }
.an-li { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 10px 0; border-top: 1px solid var(--line); color: inherit; text-decoration: none; }
.an-li > span { display: flex; flex-direction: column; }
/* таблицы */
.an-tw { overflow-x: auto; }
.an .table td.an-bad, .an-bad { color: var(--rose-ink, #9e1f35); font-weight: 700; }
.an-good { color: var(--teal-ink); font-weight: 700; }
.an-tag { font-size: 11px; font-weight: 700; border-radius: 6px; padding: 1px 6px; background: var(--amber-soft); color: var(--amber-ink, #7a4700); }
.an-lane { display: block; position: relative; height: 22px; min-width: 150px; border-radius: 11px;
  background: linear-gradient(to right, var(--fill) 0, var(--fill) var(--lo), var(--teal-soft) var(--lo), var(--teal-soft) var(--hi), var(--fill) var(--hi)); }
.an-lane i { position: absolute; top: 4px; width: 14px; height: 14px; border-radius: 7px; margin-left: -7px; background: var(--an-ok); box-shadow: 0 0 0 3px var(--paper); }
.an-lane i.off { background: var(--an-warn); }
.an-lane b { position: absolute; top: 2px; margin-left: 12px; font-size: 12px; font-weight: 800; }
/* карта направлений */
.an-map { width: 100%; height: auto; display: block; }
.an-map text { font-family: var(--font); }
.an-map .gl { stroke: var(--line); stroke-width: 1; }
.an-map .md { stroke: color-mix(in srgb, var(--ink) 30%, transparent); stroke-width: 1; stroke-dasharray: 4 5; }
.an-map .ax { font-size: 11px; fill: var(--an-muted); } .an-map .ax.b { font-weight: 700; }
.an-map .q { font-size: 12px; font-weight: 700; fill: #9a968d; letter-spacing: .02em; } .an-map .q.bad { fill: var(--an-bad); }
.an-map .dot { cursor: pointer; } .an-map .dot circle { opacity: .85; } .an-map .dot:hover circle { opacity: 1; }
.an-map .lb { font-size: 13px; font-weight: 800; fill: var(--ink); } .an-map .ls { font-size: 11.5px; fill: var(--an-muted); }
/* нормы и план обследований */
.an-nr .an-nsrc { flex: 1 1 100%; }
.bp { display: flex; flex-direction: column; gap: 12px; }
.bp-r .row { align-items: center; flex-wrap: wrap; gap: 8px; }
.bp-n { flex: 1 1 260px; }
.bp-s { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0; }
@media (max-width: 760px) {
  .an-verdict { font-size: 19px; line-height: 26px; }
  .an-hv b { font-size: 26px; }
  .an-wheel { grid-template-columns: 1fr; }
  .an-fr { grid-template-columns: 110px minmax(0, 1fr); }
  .an-fd { margin-left: 124px; }
  .an-big b { font-size: 40px; }
}
/* ввод для «Аналитики» (10.10.2026): оценка визита на стойке, семья в карточке */
.nps { margin: 10px 0; padding: 8px 10px; border: 1px solid var(--line, #e3e6ea); border-radius: 10px; }
.nps-b { gap: 4px; flex-wrap: wrap; margin-top: 6px; }
.nps-b .chip { min-width: 34px; justify-content: center; }
.nps-t { width: 100%; margin-top: 6px; }

/* ======== Главная директора, 14.10.2026 (макет «Ormin: новый вид программы») ========
   js/home.js (шапка, «Требует внимания» главврача), js/pult.js (пульт), js/diagramma.js
   (линия, столбики), js/menu.js (полоса разделов на телефоне). Строится на токенах
   брендбука в начале файла; цвета — только переменными (тёмная тема — их же). Движение —
   короткое и выключается системной настройкой (внизу блока). */
:root { --on-navy: #ffffff; --pult-up: color-mix(in srgb, var(--mint) 40%, var(--paper)); }
/* Шапка: приветствие вместо «Главная» (заголовок остаётся для чтеца), строка дня. */
.home-top { align-items: flex-end; }
.home-hi { font: 500 var(--h1-fs)/1.2 var(--head); letter-spacing: -.01em; color: var(--ink); }
.home-top .top-t p { font-size: 15px; color: var(--muted); white-space: normal; }
.home-top .top-t p b { color: var(--ink); }
.home-top .tools { align-items: center; gap: 10px; }
.home-vw { display: inline-flex; padding: 3px; border-radius: 12px; background: var(--fill); }
.home-vw button { min-height: 34px; padding: 0 14px; border: 0; border-radius: 9px; background: transparent; color: var(--muted); font-size: 14px; font-weight: 600; white-space: nowrap; }
.home-vw button.on { background: var(--paper); color: var(--ink); font-weight: 700; box-shadow: 0 1px 2px color-mix(in srgb, var(--navy) 12%, transparent); }
.home-rf { min-height: 34px; font-size: 13.5px; color: var(--muted); }
.home-rf:hover { color: var(--teal-ink); }
/* Период — одной кнопкой в белой рамке: «‹ Октябрь 2026 · 1–14  к 1–14 сен ▾ ›». */
.pult-per { display: inline-flex; align-items: center; gap: 2px; height: 40px; padding: 0 4px; border-radius: 12px; background: var(--paper); box-shadow: var(--shadow); }
.pult-per .chip { margin: 0; height: 32px; min-height: 32px; background: transparent; font-size: 14px; }
.pult-per .chip:not(.on):hover { background: var(--fill); }
.pult-pl { display: inline-flex; align-items: baseline; gap: 8px; white-space: nowrap; padding: 0 8px; }
.pult-pk { font-weight: 500; font-size: 13px; }
.pult-arr { min-width: 28px; justify-content: center; padding: 0 6px; color: var(--muted); }
.pult-arr:disabled { opacity: .35; }
.pult-pm { gap: 8px; flex-wrap: wrap; margin: 8px 0; align-items: center; }
.pult-pm input, .pult-pm select { width: auto; margin-left: 6px; }
/* Плитки: сетка сама встаёт 5 → 4 → 2 → 1 по ширине окна. */
.pult-k, .pult-sk-k { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr)); gap: 12px; }
.pult-t { display: flex; flex-direction: column; gap: 2px; min-width: 0; padding: 14px 16px; transition: box-shadow .2s ease; }
.pult-t[role=button] { cursor: pointer; }
.pult-t[role=button]:hover { box-shadow: var(--shadow), var(--shadow-lift); }
.pult-tl { font-size: 13px; font-weight: 600; color: var(--muted); }
.pult-tvr { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; margin-top: 2px; }
.pult-tv { font: 500 27px/1.2 var(--head); letter-spacing: -.01em; white-space: nowrap; color: var(--ink); }
.pult-tv.minus { color: var(--rose); }
/* Метка сравнения: лучше — мята, хуже — служебный красный, без изменений — серая. */
.pult-dl { display: inline-flex; align-items: center; height: 22px; padding: 0 9px; border-radius: 11px; font-size: 12px; font-weight: 700; white-space: nowrap;
  font-variant-numeric: tabular-nums; background: var(--fill); color: var(--ink); }
.pult-dl.up { background: var(--pult-up); color: var(--ink); }
.pult-dl.dn { background: var(--rose-soft); color: var(--rose-ink); }
.pult-ts { font-size: 12.5px; line-height: 1.35; color: var(--muted); }
.pult-early { margin: 6px 0 0; align-self: flex-start; }
.pult-t .dg-spark, .pult-t .dg-split, .pult-t .pult-lb { margin-top: auto; }
.pult-t > .pult-ts { margin-bottom: 8px; }
.pult-lb { height: 10px; border-radius: 5px; background: var(--fill); overflow: hidden; }
.pult-lb i { display: block; height: 100%; background: var(--teal); border-radius: 5px; }
.dg-split i.in { background: var(--teal); }
/* Линия-«молния»: бирюзой, прошлый месяц — серым пунктиром, последняя точка — оранжевая. */
.dg-spark { position: relative; height: 34px; }
.dg-spark svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.dg-spark polyline { fill: none; stroke: var(--teal); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.dg-spark polyline.pv { stroke: var(--muted); stroke-opacity: .55; stroke-width: 1.5; stroke-dasharray: 3 3; }
.dg-dot { position: absolute; width: 7px; height: 7px; margin: -3.5px 0 0 -3.5px; border-radius: 50%; background: var(--orange); box-shadow: 0 0 0 2px var(--paper); pointer-events: none; }
.dg-hit { position: absolute; inset: -4px 0; display: flex; }
.dg-hit span { flex: 1; border-radius: 4px; }
.dg-hit span:hover { background: color-mix(in srgb, var(--teal) 12%, transparent); }
/* Две колонки: «Требует внимания» и «Финансы» с «Деньгами сейчас». */
.pult-g2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(420px, 100%), 1fr)); gap: 16px; margin-top: 16px; align-items: start; }
.pult-g2.eq { align-items: stretch; }
.pult-g2:empty { display: none; }
.pult-col { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.pult-one { margin-top: 16px; }
.pult-sig .hd, .pult-fin .hd, .pult-money .hd, .pult-napr .hd, .home-att .hd { display: flex; align-items: baseline; flex-wrap: wrap; gap: 2px 10px; margin-bottom: 4px; }
.pult-sig .hd h3, .pult-fin .hd h3, .pult-money .hd h3, .pult-napr .hd h3, .home-att .hd h3, .pult-napr > h3 {
  margin: 0; font: 500 17px/1.3 var(--head); letter-spacing: -.01em; color: var(--ink); text-transform: none; }
.pult-n { margin-left: 4px; font: 700 15px var(--font); color: var(--muted); }
.pult-sig .hd > .linkish:last-child, .pult-fin .hd > .linkish:last-child, .pult-money .hd > .linkish:last-child, .pult-napr .hd > .linkish:last-child { margin-left: auto; }
.pult-sig .hd .linkish, .pult-fin .linkish, .pult-money .hd .linkish, .pult-napr .linkish { min-height: 32px; font-size: 13.5px; font-weight: 700; color: var(--ink); }
.pult-sig .linkish:hover, .pult-fin .linkish:hover, .pult-money .linkish:hover, .pult-napr .linkish:hover { color: var(--teal-ink); }
/* «Требует внимания»: группы «Сейчас / Сегодня / На этой неделе», у строки — кружок раздела. */
.pult-all-tel { display: none; }
.pult-grp { padding: 12px 0 4px; font-size: 12px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.pult-s { display: flex; width: 100%; align-items: center; gap: 12px; padding: 11px 0; border-top: 1px solid var(--line-2); }
.pult-grp + .pult-s { border-top: 0; }
.pult-ic { flex: none; display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%; background: var(--c-med); }
.pult-ic svg { width: 17px; height: 17px; fill: none; stroke: var(--ink); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.pult-ic.fin { background: var(--c-fin); }
.pult-ic.skl { background: var(--c-skl); }
.pult-ic.pac { background: var(--c-pac); }
.pult-ic.med { background: var(--c-med); }
.pult-ic.urg { background: var(--rose-soft); }
.pult-ic.urg svg { stroke: var(--rose); }
.pult-x { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; text-align: left; background: none; border: 0; padding: 0; font: inherit; color: inherit; cursor: pointer; }
.pult-x b { font-weight: 700; font-size: 14.5px; line-height: 1.3; }
.pult-x .small { font-size: 13px; line-height: 1.35; color: var(--muted); }
.pult-x:hover b { text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--ink) 30%, transparent); }
.pult-sum { flex: none; font-size: 14.5px; font-weight: 700; white-space: nowrap; font-variant-numeric: tabular-nums; }
.pult-s .pult-go { flex: none; min-height: 32px; padding: 0 2px; font-size: 13.5px; font-weight: 700; color: var(--ink); white-space: nowrap; }
.pult-s .pult-go::after { content: "\00a0›"; }
.pult-s .pult-go:hover { color: var(--teal-ink); }
.pult-ok { flex: none; display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border-radius: 50%; border: 1px solid var(--line); background: var(--paper); cursor: pointer; }
.pult-ok svg { width: 14px; height: 14px; fill: none; stroke: var(--muted); stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.pult-ok:hover { border-color: var(--teal); }
.pult-ok:hover svg { stroke: var(--teal-ink); }
.pult-sf { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 6px 12px; padding-top: 8px; border-top: 1px solid var(--line-2); }
.pult-sf .chip.pult-more { margin: 0; height: auto; min-height: 32px; white-space: normal; text-align: left; font-size: 13px; font-weight: 600; max-width: 100%; background: var(--fill); }
.pult-sf .pult-dn { color: var(--muted); }
.pult-calm { padding: 10px 0; text-align: left; }
/* «Финансы <месяца>»: четыре числа и столбики по дням. */
.pult-f4 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 16px; margin-top: 10px; }
.pult-fv { display: flex; flex-direction: column; min-width: 0; }
.pult-fl { font-size: 12.5px; color: var(--muted); }
.pult-fn { display: flex; align-items: center; flex-wrap: wrap; gap: 2px 8px; }
.pult-fn b { font-size: 18px; font-weight: 800; white-space: nowrap; font-variant-numeric: tabular-nums; }
.pult-fs { font-size: 12px; line-height: 1.35; color: var(--muted); }
.pult-fb { position: relative; display: flex; height: 6px; margin-top: 7px; border-radius: 3px; background: var(--fill); }
.pult-fb i { display: block; height: 100%; }
.pult-fb i.a { background: var(--teal); border-radius: 3px 0 0 3px; }
.pult-fb i.b { background: repeating-linear-gradient(135deg, var(--teal) 0 3px, transparent 3px 6px); opacity: .6; }
.pult-fb s { position: absolute; top: -3px; bottom: -3px; width: 2px; margin-left: -1px; background: var(--ink); }
.pult-fx { margin-top: 10px; line-height: 1.45; }
.pult-fx b { color: var(--ink); }
.pult-ch { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 14px; margin-top: 18px; font-size: 12.5px; color: var(--muted); }
.pult-ch > b { color: var(--ink); }
.pult-ch > .linkish { margin-left: auto; min-height: 28px; }
.pult-lg { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 14px; font-size: 12.5px; color: var(--muted); }
.pult-lg > span { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.pult-lg i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; }
.pult-lg i.in { background: var(--teal); }
.pult-lg i.avg { width: 12px; height: 0; border-radius: 0; border-top: 2px dashed color-mix(in srgb, var(--ink) 40%, transparent); }
.pult-fin .dg-cols { margin-top: 10px; }
.pult-fin .dg-plot { height: 160px; margin-left: 0; gap: 4px; border-bottom: 1px solid var(--line); }
.pult-fin .dg-grid { display: none; }
.dg-plot { position: relative; display: flex; align-items: stretch; }
.dg-avg { position: absolute; left: 0; right: 0; border-top: 2px dashed color-mix(in srgb, var(--ink) 40%, transparent); z-index: 1; pointer-events: none; }
.dg-c { position: relative; flex: 1; height: 100%; display: flex; align-items: flex-end; justify-content: center; min-width: 0; }
.dg-c i { display: block; width: 100%; max-width: 26px; min-height: 1px; background: var(--teal); border-radius: 6px 6px 2px 2px; }
.dg-c.today i { background: repeating-linear-gradient(135deg, var(--teal) 0 5px, color-mix(in srgb, var(--teal) 50%, var(--paper)) 5px 10px); }
.dg-c.best i { background: var(--ink); }
.dg-c.best.today i { background: repeating-linear-gradient(135deg, var(--ink) 0 5px, color-mix(in srgb, var(--ink) 55%, var(--paper)) 5px 10px); }
.dg-c.go { cursor: pointer; }
.dg-c:hover i { filter: brightness(.9); }
.dg-c > b { position: absolute; left: 50%; transform: translateX(-50%); padding-bottom: 3px; font-size: 12px; font-weight: 700; color: var(--ink); white-space: nowrap; z-index: 2; }
.dg-grid { position: absolute; left: 0; right: 0; border-top: 1px solid var(--line); font-style: normal; }
.dg-grid span { position: absolute; right: calc(100% + 6px); top: -8px; font-size: 11px; color: var(--muted); white-space: nowrap; }
.dg-pv { position: absolute; left: -1px; right: -1px; height: 0; border-top: 2px solid var(--ink); opacity: .45; text-decoration: none; pointer-events: none; }
/* Подсказка столбика — тёмной плашкой над ним («Пн, 12 окт · 13 000 с. · 61 приём»). */
.dg-tip { display: none; position: absolute; left: 50%; transform: translateX(-50%); z-index: 5; flex-direction: column; gap: 1px; padding: 7px 10px;
  border-radius: 10px; background: var(--navy); color: var(--on-navy); font-size: 12px; line-height: 1.35; white-space: nowrap; box-shadow: var(--shadow-lift); pointer-events: none; }
.dg-tip.l { left: 0; transform: none; }
.dg-tip.r { left: auto; right: 0; transform: none; }
.dg-tip b { font-weight: 700; }
.dg-tip .pv { opacity: .75; }
.dg-c:hover .dg-tip { display: flex; }
.dg-x { display: flex; gap: 4px; padding-top: 6px; }
.pult-fin .dg-x { margin-left: 0; }
.dg-x span { flex: 1; min-width: 0; font-size: 11px; font-weight: 600; color: var(--muted); text-align: center; white-space: nowrap; overflow: visible; }
.dg-x span.on { color: var(--ink); font-weight: 800; }
.pult-df { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 12px; font-size: 13.5px; }
.pult-df > span { display: flex; flex-direction: column; min-width: 0; }
.pult-df b { font-variant-numeric: tabular-nums; white-space: nowrap; }
.pult-hint { margin-top: 8px; line-height: 1.4; }
/* «Деньги сейчас»: счета одной рамкой с разделителями, долги — плитками-ссылками. */
.pult-money .pult-mt { min-height: 28px; font-size: 13px; font-weight: 600; color: var(--muted); }
.pult-acc { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); margin-top: 10px; border-radius: 12px; box-shadow: inset 0 0 0 1px var(--line); overflow: hidden; }
.pult-ab { display: flex; flex-direction: column; min-width: 0; padding: 10px 14px; box-shadow: -1px 0 0 var(--line); }
.pult-ab .small { font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pult-ab b { font-size: 18px; font-weight: 800; white-space: nowrap; font-variant-numeric: tabular-nums; }
.pult-dol { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 10px; }
.pult-dg { display: flex; justify-content: space-between; align-items: center; gap: 8px; min-width: 0; min-height: 40px; padding: 8px 12px; border: 0; border-radius: 10px;
  background: var(--bg); font: inherit; font-size: 14px; font-weight: 600; color: var(--ink); text-align: left; cursor: pointer; }
.pult-dg b { white-space: nowrap; font-variant-numeric: tabular-nums; }
.pult-dg:not(:disabled):hover { background: var(--fill); }
.pult-dg:disabled { cursor: default; opacity: 1; }
.pult-zp { margin: 10px 0 0; white-space: normal; overflow: visible; }
/* «Направления»: строка — название, полоса доли, сумма, процент; две колонки. */
.pult-nl { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(420px, 100%), 1fr)); column-gap: 40px; margin-top: 4px; }
.pult-nr { display: grid; grid-template-columns: minmax(90px, 150px) minmax(0, 1fr) 96px 48px; gap: 12px; align-items: center; width: 100%; min-height: 34px; padding: 4px 0;
  border: 0; background: none; font: inherit; font-size: 14px; color: inherit; text-align: left; }
button.pult-nr { cursor: pointer; }
button.pult-nr:hover .pult-nn { text-decoration: underline; }
.pult-nn { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pult-nb { display: block; height: 8px; }
.pult-nb i { display: block; height: 8px; min-width: 2px; border-radius: 4px; background: var(--teal); }
.pult-nr.rest .pult-nb i { background: var(--navy-20); }
.pult-nr > b, .pult-nr > .muted { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.pult-one-line { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; }
.pult-one-line > .linkish { margin-left: auto; }
/* Загрузка: серые места тех же размеров. */
.pult-wait .pult-t { min-height: 180px; }
.pult-wait .pult-t .pult-sk { margin: 5px 0; }
/* «Требует внимания» главврача — тем же видом строки. */
.home-att .home-i { display: flex; width: 100%; align-items: center; gap: 12px; padding: 11px 0; text-align: left; background: none; border: 0;
  border-top: 1px solid var(--line-2); cursor: pointer; font: inherit; color: inherit; }
.home-att .home-i:first-of-type { border-top: 0; }
.home-att .home-i:hover b { text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--ink) 30%, transparent); }
.home-att .home-i > span:nth-child(2) { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.home-att .home-i b { font-weight: 700; font-size: 14.5px; line-height: 1.3; }
.home-att .home-i .small { font-size: 13px; }
/* Плитки главврача и менеджера — тем же шрифтом числа и подписи. */
.pv-k .pv-tl, .mg-tl { font-size: 13px; font-weight: 600; }
.mg-tv { font: 500 27px/1.2 var(--head); letter-spacing: -.01em; }
.pv-k .card b { font: 500 27px/1.2 var(--head); }
/* Полоса разделов внизу — только телефон (ниже). */
.tabbar { display: none; }
/* Движение выключено системной настройкой — без докручивания, перестроения и мерцания. */
@media (prefers-reduced-motion: reduce) {
  .pult *, .pult-t, .pult-sk { transition: none !important; animation: none !important; }
}
@media (max-width: 699px) {
  /* Шапка: на Главной (у руководства с полосой разделов) без «Назад», приветствие
     помельче, даты в строке нет, переключатель — во всю ширину, «Обновить» — нет
     (Telefon.dc; числа и так берутся заново раз в минуту). */
  .app.tb-home #view .top .nav-back, .home-top .home-rf { display: none; }
  .home-top .home-vw { flex: 1 1 100%; }
  .home-top .home-vw button { flex: 1; }
  .home-hi { font-size: 23px; }
  .home-date { display: none; }
  .home-top .top-t p { font-size: 13.5px; }
  .home-top .tools { flex: 1 1 100%; flex-wrap: wrap; gap: 8px; }
  /* Плитки два на два: Получено, Приёмы, Средний чек, Загрузка; число и метка. */
  .pult-k, .pult-sk-k { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .pult-sk-k .card:nth-child(5) { display: none; }
  .pult-t-profit { display: none !important; }
  .pult-t { padding: 10px 12px; border-radius: 14px; }
  .pult-t .pult-ts, .pult-t .dg-spark, .pult-t .dg-split, .pult-t .pult-lb { display: none; }
  .pult-tvr { flex-direction: column; align-items: flex-start; gap: 4px; }
  .pult-tv { font-size: 21px; }
  .pult-tl { font-size: 12px; }
  .pult-dl { height: 20px; padding: 0 8px; font-size: 11.5px; }
  .pult-g2 { grid-template-columns: minmax(0, 1fr); gap: 12px; margin-top: 12px; }
  .pult-col { gap: 12px; }
  .pult-one { margin-top: 12px; }
  /* «Требует внимания»: первые три и «Все ›»; без групп и кнопок строки. */
  .pult-desk, .pult-fin, .pult-napr, .pult-zp, .pult-por, .pult-sf, .pult-s .pult-go, .pult-s .pult-ok, .pult-grp { display: none !important; }
  .pult-all-tel { display: inline-flex; margin-left: auto; }
  .pult-sig:not(.all) .pult-s.p4 { display: none; }
  .pult-s { gap: 10px; padding: 10px 0; }
  .pult-ic { width: 30px; height: 30px; }
  .pult-ic svg { width: 15px; height: 15px; }
  .pult-x b { font-size: 14px; }
  .pult-x .small { font-size: 12.5px; }
  /* «Деньги сейчас» коротко: всего и счета одной строкой. */
  .pult-money .hd .pult-acc-go, .pult-dol { display: none; }
  .pult-money .hd .pult-mt { margin-left: auto; font-size: 15px; font-weight: 800; color: var(--ink); }
  .pult-acc { display: flex; flex-wrap: wrap; gap: 0 8px; margin-top: 2px; box-shadow: none; border-radius: 0; }
  .pult-ab { flex-direction: row; gap: 4px; padding: 0; box-shadow: none; font-size: 13px; color: var(--muted); }
  .pult-ab b, .pult-ab .small { font-size: 13px; font-weight: 500; color: var(--muted); }
  /* Полоса разделов внизу (руководство): Главная · Финансы · Аналитика · Отчёты · Ещё. */
  .tabbar:not([hidden]) { display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 12; padding: 4px 6px calc(8px + env(safe-area-inset-bottom));
    background: var(--paper); border-top: 1px solid var(--line); }
  .tabbar button { flex: 1; min-width: 0; min-height: 48px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; padding: 6px 0;
    border: 0; background: transparent; font-size: 11px; font-weight: 700; color: var(--muted); }
  .tabbar button span { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .tabbar svg { width: 22px; height: 22px; fill: none; stroke: var(--muted); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
  .tabbar button.on { color: var(--ink); }
  .tabbar button.on svg { stroke: var(--teal-ink); stroke-width: 2; }
  .app.has-tb .main { padding-bottom: 96px; }
  .app.has-tb .nav-burger { display: none !important; }
}
/* ======== Касса и Зарплата, 14.10.2026 (макет «Ormin: новый вид программы») ========
   js/kassa.js, js/zarplata.js. Метка — точка и слово на подложке; числа дня —
   одной карточкой с разделителями; строка таблицы — кружок с буквами, имя,
   второстепенное серым под ним, суммы справа столбиком. Цвета — только
   переменными: тёмная тема берёт свои значения из :root[data-theme="dark"]. */
:root { --on-navy: #ffffff; }   /* текст на тёмно-синей метке и кружке — в обеих темах белый */
.kas-pill { display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 9px; border-radius: 11px;
  font: 700 12px/1 var(--font); letter-spacing: 0; white-space: nowrap; background: var(--fill); color: var(--ink); vertical-align: middle; }
.kas-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--muted); flex: none; }
.top-t:has(> .kas-pill) { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 12px; align-items: center; }
.top-t:has(> .kas-pill) > p { grid-column: 1 / -1; }
.top-t > .kas-pill { justify-self: start; }
.kas-smena.on { background: var(--ok-soft); }
.kas-smena.on .kas-dot { background: var(--ok); }
.kas-st { height: 20px; }
.kas-st.st-wait { background: var(--bg); }
.kas-st.st-in { background: var(--teal-10); }
.kas-st.st-in .kas-dot, .kas-st.st-room .kas-dot { background: var(--teal); }
.kas-st.st-room { background: var(--navy); color: var(--on-navy); }
.kas-st.st-pay { background: var(--amber-soft); }
.kas-st.st-pay .kas-dot { background: var(--orange); }
.kas-st.st-done { background: var(--ok-soft); }
.kas-st.st-done .kas-dot { background: var(--ok); }
.kas-st.st-off .kas-dot { background: var(--rose); }
/* Кружок с буквами: цвет по имени из меток разделов, выбранный — тёмно-синий. */
.av-b { width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; flex: none;
  font: 800 12px/1 var(--font); color: var(--ink); background: var(--c-fin); }
.av-b.av-1 { background: var(--c-pac); } .av-b.av-2 { background: var(--c-skl); } .av-b.av-3 { background: var(--c-med); }
.av-b.on { background: var(--navy); color: var(--on-navy); }
.av-b.big { width: 42px; height: 42px; font-size: 13px; }
/* Числа одной карточкой с разделителями (касса — четыре, зарплата — итог месяца). */
.kas-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); padding: 0; overflow: hidden; }
.kas-n { padding: 14px 18px; min-width: 0; box-shadow: -1px 0 0 var(--line-2); }
.kas-n > b { display: block; font: 500 25px/1.2 var(--head); letter-spacing: -.01em; margin: 2px 0 1px; font-variant-numeric: tabular-nums; }
.kas-l { display: block; font-size: 12.5px; font-weight: 600; color: var(--muted); }
.kas-d { display: block; font-size: 12.5px; color: var(--muted); line-height: 1.35; }
.kas-d .linkish { min-height: 0; padding: 0; }
/* Строка действий: главная — одна, поиск растягивается, «Фильтр» — за ним. */
.kas-find { flex: 1 1 260px; display: flex; align-items: center; gap: 8px; min-width: 0; height: var(--tap); padding: 0 12px;
  border-radius: 12px; background: var(--paper); box-shadow: inset 0 0 0 1px var(--line); cursor: text; }
.kas-find:focus-within { box-shadow: inset 0 0 0 2px var(--teal); }
.kas-find svg { width: 16px; height: 16px; flex: none; fill: none; stroke: var(--muted); stroke-width: 2; stroke-linecap: round; }
.kas-find input { flex: 1; min-width: 0; width: auto; border: 0; outline: 0; padding: 0; margin: 0; background: transparent; font-size: 14.5px; }
.kas-find input:focus-visible { outline: 0; }
.kas-bar .btn { margin: 0; }
/* Своё поле поиска у «Кассы» и «Зарплаты» — поле отбора, пока пустое, не
   показываем (то же правило, что `filterOneFind`, но без ожидания перерисовки). */
.kas-bar input.flt-find:placeholder-shown, .top:has(~ #body .zp-find) input.flt-find:placeholder-shown { display: none; }
.kas-grid { display: grid; grid-template-columns: minmax(0, 1.9fr) minmax(280px, 1fr); gap: 14px; align-items: start; }
@media (max-width: 1180px) { .kas-grid { grid-template-columns: minmax(0, 1fr); } }
/* «Ждут оплаты»: имя одной строкой, метка под ним; закрытые и ждущие — оранжевым оттенком. */
.kas-pac { display: flex; gap: 10px; align-items: center; min-width: 0; }
.kas-pac-t { min-width: 0; }
.kas-nm { font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kas-pod { display: flex; flex-wrap: wrap; gap: 4px 6px; align-items: center; margin-top: 3px; }
.kas-pod .tag { margin: 0; }
#cash-t th:first-child { min-width: 196px; }
#cash-t td:nth-child(1) { min-width: 196px; max-width: 300px; }
.kas-zhdut { overflow-x: auto; }
#cash-t td:nth-child(2) { white-space: nowrap; }
#cash-t td:nth-child(3) { color: var(--ink); min-width: 150px; }
#cash-t td.num b { font-weight: 700; }
#cash-t tr.kas-zhdet > td { background: color-mix(in srgb, var(--amber-soft) 40%, var(--paper)); }
.kas-act { white-space: nowrap; text-align: right; }
.kas-act .btn { margin: 0 0 0 4px; }
.kas-act .small { display: block; }
.btn.soft.sm.kas-take { height: 32px; border-radius: 10px; font-weight: 700; }
/* «Движения сегодня» — лентой: время, точка, кто и как, сумма со знаком. */
.kas-lenta td { padding: 9px 4px; border-top: 0; vertical-align: top; }
.kas-lenta tr + tr td { border-top: 1px solid var(--line-2); }
.kas-lenta .kas-mv-t { width: 44px; font-size: 12.5px; color: var(--muted); padding-left: 0; }
.kas-lenta .kas-mv-d { width: 18px; }
.kas-lenta .kas-mv-d .kas-dot { width: 9px; height: 9px; margin-top: 5px; background: var(--teal); }
.kas-lenta tr.kas-mv-out .kas-dot { background: var(--orange); }
.kas-lenta tr.annulled .kas-dot { background: var(--rose); }
.kas-lenta .kas-mv-k { font-weight: 700; }
.kas-lenta td.num { font-weight: 700; padding-right: 0; }
.kas-lenta td.num.minus { color: var(--ink); }
.kas-lenta tr.annulled td.num { font-weight: 500; }
.kas-lenta .kas-dela { font-size: 12.5px; color: var(--muted); }
.kas-lenta .kas-dela .linkish { font-size: 12.5px; font-weight: 600; color: var(--muted); }
.kas-lenta .kas-dela .linkish:hover { color: var(--teal-ink); }
/* Дела движения (квитанция, аннулировать, ордер, исправить) — у строки под мышью
   и в фокусе клавиатуры; без мыши (планшет, телефон) — всегда. */
@media (hover: hover) {
  .kas-lenta .kas-dela { max-height: 0; overflow: hidden; opacity: 0; transition: opacity .12s; }
  .kas-lenta tr:hover .kas-dela, .kas-lenta tr:focus-within .kas-dela { max-height: 60px; opacity: 1; }
}
/* Пусто — одной строкой: заголовок и итог рядом, без таблицы на пол-экрана. */
.kas-zhdut:has(.kas-pusto), .kas-dv:has(td.empty) { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.kas-zhdut:has(.kas-pusto) h3, .kas-dv:has(td.empty) h3 { margin: 0; }
.kas-zhdut .kas-pusto, .kas-dv:has(td.empty) .kas-lenta { width: auto; margin: 0; }
.kas-zhdut .kas-pusto td.empty, .kas-dv td.empty { padding: 0; border: 0; text-align: left; color: var(--muted); }

/* Зарплата: переключатель над таблицей, строка, полоска доли, панель справа. */
.zp-kpis { margin-bottom: 14px; }
.zp-kpis .zp-dolg { background: color-mix(in srgb, var(--amber-soft) 40%, var(--paper)); }
.zp-bar { height: 6px; border-radius: 3px; background: var(--line-2); margin-top: 5px; overflow: hidden; }
.zp-bar i { display: block; height: 100%; border-radius: 3px; background: var(--teal); }
.zp-bar.full i { background: var(--mint); }
.zp-kpis .zp-bar { margin-top: 8px; }
.zp-g2 { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; align-items: start; }
.zp-g2.on { grid-template-columns: minmax(0, 1fr) 350px; }
.zp-left { min-width: 0; }
.zp-tcard { padding: 0 0 4px; overflow: hidden; }
.zp-tbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 12px 16px 6px; }
.zp-seg { display: inline-flex; flex-wrap: wrap; background: var(--fill); border-radius: 12px; padding: 3px; font-size: 13.5px; }
.zp-seg-b { border: 0; background: none; border-radius: 9px; padding: 5px 12px; color: var(--muted); font-weight: 600; white-space: nowrap; }
.zp-seg-b.on { background: var(--paper); color: var(--ink); font-weight: 700; box-shadow: var(--shadow); }
.zp-seg-n { font-variant-numeric: tabular-nums; }
.zp-find { flex: 0 1 240px; height: 36px; margin-left: auto; }
.zp-tcard .filter-bar, .zp-tcard .flt-bar { margin: 0 16px 6px; }
#zp-t th:first-child, #zp-t td:first-child { padding-left: 16px; }
#zp-t th:last-child, #zp-t td:last-child { padding-right: 16px; }
#zp-t tr.on > td { background: var(--teal-10); }
.zp-nm { font-weight: 700; }
#zp-t tr.on .zp-nm { font-weight: 800; }
.zp-kak { display: inline-block; padding: 3px 9px; border-radius: 11px; background: var(--navy-10); font-size: 12px; font-weight: 700; line-height: 1.35; }
.zp-vy { min-width: 110px; font-variant-numeric: tabular-nums; }
.zp-ok { background: var(--ok-soft); }
.zp-hint { margin: 0; padding: 10px 16px 10px; border-top: 1px solid var(--line-2); }
.zp-chel { padding: 16px 18px; box-shadow: var(--shadow), var(--shadow-lift); display: flex; flex-direction: column; gap: 8px; min-width: 0; position: sticky; top: 12px; }
.zp-ph { display: flex; gap: 10px; align-items: center; }
.zp-ph-t { flex: 1; min-width: 0; }
.zp-pn { font: 500 17px/1.25 var(--head); }
.zp-x { border: 0; background: none; width: 30px; height: 30px; border-radius: 8px; color: var(--muted); font-size: 20px; line-height: 1; flex: none; }
.zp-x:hover { background: var(--fill); }
.zp-tri { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 6px 0 2px; text-align: center; }
.zp-tri > div { background: var(--bg); border-radius: 10px; padding: 8px 4px; min-width: 0; }
.zp-tri > div.on { background: var(--teal-10); }
.zp-tri span { display: block; font-size: 12px; color: var(--muted); }
.zp-tri b { font-variant-numeric: tabular-nums; }
.zp-chel .zp-cap { margin: 10px 0 0; font: 800 12px/1.3 var(--font); letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.zp-chel .ras-za td { padding: 7px 0; font-size: 14px; }
.zp-chel .ras-za tr:first-child td { border-top: 0; }
.zp-chel .ras-za tfoot td { border-top: 1px solid var(--line); }
.zp-li { display: flex; justify-content: space-between; gap: 10px; padding: 7px 0; border-top: 1px solid var(--line-2); font-size: 14px; }
.zp-li:first-child { border-top: 0; }
.zp-go { display: flex; flex-direction: column; gap: 4px; margin-top: 8px; align-items: center; }
.zp-go .btn { width: 100%; margin: 0; }
#zp-vis td { padding: 6px 4px; font-size: 13.5px; vertical-align: top; }
#zp-vis .zp-vd { color: var(--muted); white-space: nowrap; }
.zp-docs2 { display: flex; flex-wrap: wrap; gap: 0 12px; border-top: 1px solid var(--line-2); padding-top: 6px; }
.zp-docs2 .linkish { min-height: 30px; }
.zp-more { border-top: 1px solid var(--line-2); padding-top: 10px; overflow-x: auto; }
.zp-more h3 { display: none; }
@media (max-width: 1100px) { .zp-g2.on { grid-template-columns: minmax(0, 1fr) 320px; } }

@media (max-width: 699px) {
  /* Касса: числа — по два в ряд; «Ждут оплаты» — строки карточками (пациент с
     меткой и сумма, под ними услуги и кнопка; врач — в окне оплаты). */
  .kas-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .kas-n { padding: 10px 12px; box-shadow: -1px 0 0 var(--line-2), 0 -1px 0 var(--line-2); }
  .kas-n > b { font-size: 20px; }
  .top:has(.top-t > .kas-pill) .top-l { flex: 1 1 100%; }
  .top-t:has(> .kas-pill) { grid-template-columns: minmax(0, 1fr); row-gap: 4px; }
  .top-t > .kas-pill { max-width: 100%; height: auto; min-height: 22px; padding: 3px 9px; line-height: 1.3; white-space: normal; }
  .kas-find { flex: 1 1 100%; }
  #cash-t, #cash-t > tbody { display: block; }
  #cash-t tr:has(> th) { display: none; }
  #cash-t tr { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 8px; row-gap: 4px; align-items: start; padding: 8px 0; border-bottom: 1px solid var(--line-2); }
  #cash-t tr.kas-zhdet { background: color-mix(in srgb, var(--amber-soft) 40%, var(--paper)); }
  #cash-t td { display: block; padding: 0; border: 0; background: none !important; min-width: 0; max-width: none; }
  #cash-t td:nth-child(1) { grid-column: 1; grid-row: 1; font-size: 14px; min-width: 0; max-width: none; }
  #cash-t td:nth-child(2) { display: none; }
  #cash-t td:nth-child(3) { grid-column: 1; grid-row: 2; font-size: 12.5px; color: var(--muted); padding-left: 44px; min-width: 0; }
  #cash-t td:nth-child(4) { grid-column: 2; grid-row: 1; }
  #cash-t td:nth-child(5) { grid-column: 2; grid-row: 2; display: flex; flex-direction: column; align-items: stretch; gap: 4px; }
  #cash-t td:nth-child(5) .btn { margin: 0; min-height: 40px; height: auto; padding: 4px 10px; font-size: 14px; }
  #cash-t td.empty { grid-column: 1 / -1; }
  .kas-nm { white-space: normal; }
  /* Зарплата: строка карточкой — кружок, имя, должность, как платим; справа
     осталось и выплачено; панель выбранного — окном во весь экран. */
  .zp-g2.on { grid-template-columns: minmax(0, 1fr); }
  .zp-find { flex: 1 1 100%; margin-left: 0; }
  .zp-seg { flex-wrap: wrap; max-width: 100%; }
  .zp-seg-b { padding: 5px 9px; }
  .zp-hint { display: none; }
  #zp-t, #zp-t > tbody { display: block; }
  #zp-t tr:has(> th) { display: none; }
  #zp-t tr { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 8px; row-gap: 4px; padding: 8px 12px; border-bottom: 1px solid var(--line-2); }
  #zp-t td { display: block; padding: 0 !important; border: 0; background: none; }
  #zp-t tr.on { background: var(--teal-10); }
  #zp-t td:nth-child(1) { grid-column: 1; grid-row: 1; font-size: 14px; }
  #zp-t td:nth-child(2) { grid-column: 1; grid-row: 2; padding-left: 44px !important; }
  #zp-t td:nth-child(3) { display: none; }
  #zp-t td:nth-child(4) { grid-column: 2; grid-row: 2; text-align: right; font-size: 12.5px; color: var(--muted); }
  #zp-t td:nth-child(5) { grid-column: 2; grid-row: 1; }
  #zp-t tr.pl-sum td:nth-child(2) { display: none; }
  #zp-t td.empty { grid-column: 1 / -1; }
  /* Сверху — место под полосу меню (она липкая, выше окна). */
  .zp-chel { position: fixed; inset: 0; z-index: 15; border-radius: 0; overflow-y: auto; box-shadow: none; padding: 66px 16px 24px; }
}
/* ======== Лаборатория доской и Поток дня, 14.10.2026 (макет «Ormin: новый вид программы») ========
   «Лаборатория › Заказы» — пять колонок этапов на серой подложке, в колонке
   карточки заказов (js/lab2.js `renderLabDoska`); «Расписание › Поток дня» —
   тот же вид колонок для пациентов дня (js/setka.js `renderPotok`). Общее:
   колонка `.lab-col`, карточка `.lab-k`, метка `.kb-pill`, переключатель
   вида `.kb-sw`. Цвета — только переменные брендбука (тёмная тема — их же). */
.kb-sw { display: inline-flex; align-items: center; background: var(--fill); border-radius: 12px; padding: 3px; gap: 0; max-width: 100%; }
.kb-sw > button, .kb-sw .tiho-w > button { border: 0; background: transparent; color: var(--muted); padding: 0 12px; height: 30px; border-radius: 9px;
  font: 600 13.5px var(--font); cursor: pointer; white-space: nowrap; }
.kb-sw > button.on, .kb-sw .tiho-w > button.on { background: var(--paper); color: var(--ink); font-weight: 700; box-shadow: var(--shadow); }
.kb-sw > button:focus-visible, .kb-sw .tiho-w > button:focus-visible { outline: 2px solid var(--teal); outline-offset: 1px; }
/* Метка — строчным блоком, а не flex: текст «ждёт 18 мин» копируется и читается одной строкой. */
.kb-pill { display: inline-block; height: 20px; line-height: 20px; padding: 0 8px; border-radius: 10px; border: 0; flex: none; vertical-align: middle;
  font: 700 11.5px/20px var(--font); white-space: nowrap; background: var(--fill); color: var(--ink); }
.kb-pill .dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; vertical-align: 1px; margin-right: 5px; background: currentColor; }
.kb-pill.warn { background: var(--amber-soft); }
.kb-pill.warn .dot { background: var(--orange); }
.kb-pill.bad { background: var(--rose-soft); color: var(--rose); }
.kb-pill.bad .dot { background: var(--rose); }
.kb-pill.crit { background: var(--rose); color: var(--paper); }
.kb-pill.pt { background: var(--teal-soft); }
.kb-pill.ok { background: var(--ok-soft); }
.kb-pill.ok .dot { background: var(--mint); }
.kb-pill.soft { background: var(--teal-10); }
/* Доска: колонки на серой подложке; шире экрана — листается в своей рамке. */
.lab-d { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.lab-d > .card { margin: 0; }
.tools input.lab-q { width: 260px; }
.lab-vb { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 12px; }
.lab-b { display: grid; grid-template-columns: repeat(5, minmax(190px, 1fr)); gap: 10px; align-items: start; overflow-x: auto; min-width: 0; padding-bottom: 2px; }
.lab-col { background: var(--fill); border-radius: 16px; padding: 10px; display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.lab-col-h { display: flex; align-items: center; gap: 8px; padding: 2px 4px 4px; font-size: 13.5px; font-weight: 800; }
.lab-col-n { margin-left: auto; font-size: 12px; color: var(--muted); font-weight: 700; font-variant-numeric: tabular-nums; }
.lab-col-w { font-size: 12px; line-height: 16px; color: var(--muted); padding: 0 4px; }
.lab-col-w.bad { color: var(--rose); font-weight: 700; }
.lab-col-e { font-size: 12.5px; color: var(--muted); padding: 4px; }
.lab-more { display: inline-block; align-self: flex-start; font-size: 13px; padding: 4px; color: var(--ink); font-weight: 700; text-decoration: none; }
/* Карточка: пациент, откуда, анализы метками, этап полоской, низ — кто и когда. */
.lab-k { background: var(--paper); border: 1px solid var(--line); border-radius: 12px; padding: 10px 11px; display: flex; flex-direction: column; gap: 7px; min-width: 0; }
.lab-k[role="button"] { cursor: pointer; }
.lab-k[role="button"]:hover { box-shadow: var(--shadow-lift); }
.lab-k:focus-visible { outline: 2px solid var(--teal); outline-offset: 1px; }
.lab-k.crit { border-color: var(--rose); background: color-mix(in srgb, var(--rose) 5%, var(--paper)); }
.lab-k.done { opacity: .85; }
.lab-k-h { display: flex; justify-content: space-between; align-items: flex-start; gap: 6px; }
.lab-k-n { min-width: 0; }
.lab-k-n > b { display: block; font-weight: 800; font-size: 13.5px; line-height: 18px; overflow-wrap: break-word; }
.lab-k-h > b { flex: none; font-size: 13px; font-variant-numeric: tabular-nums; }
.lab-k-id { font-size: 11.5px; line-height: 16px; color: var(--muted); font-weight: 600; overflow-wrap: break-word; margin-top: -4px; }
.lab-k-kr { font-size: 12.5px; line-height: 17px; }
.lab-tgs { line-height: 0; font-size: 0; margin-bottom: -4px; }
.lab-tg-c { font-size: 0; }
.lab-tg { display: inline-block; font-size: 11.5px; line-height: 16px; padding: 2px 7px; margin: 0 4px 4px 0; border-radius: 6px; background: var(--bg); font-weight: 600; }
.lab-seg { display: flex; gap: 3px; }
.lab-seg i { flex: 1; height: 4px; border-radius: 2px; background: var(--line); }
.lab-seg i.on { background: var(--teal); }
.lab-k-f { display: flex; align-items: baseline; gap: 6px; font-size: 12px; line-height: 16px; color: var(--muted); }
.lab-k-f > span { min-width: 0; overflow-wrap: break-word; }
.lab-k-f > b { margin-left: auto; flex: none; font-variant-numeric: tabular-nums; color: var(--ink); font-size: 12px; font-weight: 700; white-space: nowrap; }
.lab-k-a, .lab-k-q { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; font-size: 12.5px; }
.lab-k .linkish { font-size: 12.5px; padding: 0; }
.lab-k .an-free { font-size: 12px; }
.lab-k-b .btn { height: 28px; min-height: 28px; padding: 0 10px; font-size: 12.5px; }
.tag.lab-q-t { margin: 0; padding: 2px 8px; font-weight: 700; white-space: nowrap; }
.tag.lab-q-t.good { background: var(--teal-soft); color: var(--teal-ink); }
.tag.lab-q-t.bad { background: var(--rose-soft); color: var(--rose); }
.lab-q-b { padding: 0; text-decoration: none; }
/* Найдено поиском — карточки одной подложкой. */
.lab-found { background: var(--fill); border-radius: 16px; padding: 10px; }
.lab-found-h { justify-content: space-between; align-items: center; margin-bottom: 8px; }
.lab-found-l { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px; }
/* По партнёрам / по врачам — дорожки: имя слева, этапы колонками. */
.lab-ln { grid-template-columns: minmax(110px, 150px) repeat(5, minmax(180px, 1fr)); gap: 8px; }
.lab-ln > .lab-col-h { padding: 4px 8px 0; }
.lab-ln-name { display: flex; flex-direction: column; gap: 2px; padding: 10px 6px; font-size: 13.5px; position: sticky; left: 0; z-index: 1; background: var(--bg); }
.lab-ln-name > span { font-size: 12px; color: var(--muted); font-weight: 700; }
.lab-cell { background: var(--fill); border-radius: 12px; padding: 8px; display: flex; flex-direction: column; gap: 8px; min-height: 44px; min-width: 0; }
/* Строка партнёров под доской. */
.lab-pts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)); gap: 10px; }
.lab-pt { background: var(--paper); border: 1px solid var(--line); border-radius: 14px; padding: 12px 16px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; font-size: 14px; }
.lab-pt .kb-pill.lab-pt-n { height: 24px; min-height: 24px; line-height: 24px; cursor: pointer; font-size: 12.5px; }
.lab-pt-d { margin-left: auto; white-space: nowrap; }
.lab-pt-b { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.lab-pt a.btn { text-decoration: none; display: inline-flex; align-items: center; }
/* Поток дня: пять чисел, под ними колонки пациентов. */
/* Шапка «Расписания» с переключателем вида: заголовок не сжимается до «Распи…» —
   кнопки справа переносятся строкой ниже. */
.top-l:has(+ .tools .desk-vid) { flex: none; }
.pt { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.pt-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 10px; }
.pt-kpi { background: var(--paper); border: 1px solid var(--line); border-radius: 14px; padding: 10px 14px; min-width: 0; display: flex; flex-direction: column; }
.pt-kpi > span { font-size: 12px; color: var(--muted); }
.pt-kpi > b { font-family: var(--head); font-weight: 500; font-size: 22px; line-height: 28px; overflow-wrap: anywhere; }
.pt-kpi > small { font-size: 11.5px; color: var(--muted); }
.pt-kpi.warn { background: color-mix(in srgb, var(--orange) 7%, var(--paper)); border-color: color-mix(in srgb, var(--orange) 40%, var(--paper)); }
.pt-k.warn { border-color: color-mix(in srgb, var(--orange) 45%, var(--paper)); }
.pt-k.bad { border-color: var(--rose); }
.pt-bar { display: flex; gap: 3px; }
.pt-bar i { height: 4px; border-radius: 2px; background: var(--line); }
.pt-bar i:first-child { background: var(--teal); }
.pt-bar.over i { background: var(--rose); }
.pt-k .btn.pt-pay { height: 32px; min-height: 32px; border-radius: 10px; border: 1px solid var(--teal); background: var(--teal-10); color: var(--ink); font-weight: 700; font-size: 13px; }
.pt-note { margin: 0; }
@media (max-width: 699px) {
  .tools input.lab-q { width: 100%; flex: 1 1 100%; }
  .lab-krit .pv-krit-b { width: 100%; }
  /* Колонки — бок о бок, листаются пальцем в своей рамке; страница не шире экрана. */
  .lab-b { grid-template-columns: repeat(5, minmax(240px, 80vw)); scroll-snap-type: x proximity; }
  .lab-b > .lab-col { scroll-snap-align: start; }
  .lab-ln { grid-template-columns: 96px repeat(5, minmax(220px, 72vw)); }
  .lab-vb .kb-sw { flex-wrap: wrap; }
  .kb-sw > button, .kb-sw .tiho-w > button { height: 32px; padding: 0 10px; }
  .pt-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pt-kpi > b { font-size: 19px; line-height: 24px; }
  .top .tools .desk-vid { flex: 1 1 100%; }
  .lab-pt-d { margin-left: 0; }
  /* Подпись шапки лаборатории («Среда, 14 октября · 10:30 · каждый заказ…») — переносом, а не многоточием. */
  .top:has(#lab-q) .top-sub { white-space: normal; width: auto; flex: 1 1 100%; }
  .lab-pt .kb-pill.lab-pt-n { height: 32px; min-height: 32px; line-height: 32px; border-radius: 16px; }
}

/* Безопасность назначений (s70, js/rxbez.js): подсказки в окне назначения — списком,
   красное (нельзя, аллергия) и оранжевое (осторожно, повтор, «не сочетать»); экран
   «Настройки › Безопасность назначений». */
.rx-w:not(:empty) { margin: 4px 0 8px; }
.rxb-list { display: flex; flex-direction: column; gap: 8px; margin-bottom: 6px; }
.banner.rxb-h { display: flex; gap: 10px; align-items: flex-start; margin: 0; padding: 10px 12px; }
.banner.rxb-h > svg { width: 20px; height: 20px; flex: 0 0 20px; margin-top: 1px; }
.banner.rxb-h.alert > svg { color: var(--rose); }
.banner.rxb-h.warn > svg { color: var(--amber); }
.banner.rxb-h .small { color: var(--muted); margin-top: 2px; }
.rxb-pod { display: block; margin: 4px 0 6px; }
.rxb-korm { gap: 8px; align-items: center; margin: -4px 0 8px; }
.rx-t tr.rx-bez td:first-child { box-shadow: inset 3px 0 0 var(--amber); padding-left: 8px; }
.rxb-ban { display: flex; flex-direction: column; gap: 8px; }
.rxb-find { margin: 0 0 10px; }
.rxb-find input { width: 280px; max-width: 100%; }
.rxb-tab td { vertical-align: top; }
.rxb-tab td.rxb-st { white-space: nowrap; }
.tag.rxb-t { margin: 0; padding: 2px 8px; font-weight: 700; white-space: nowrap; background: var(--fill); color: var(--ink); }
.tag.rxb-t.bad { background: var(--rose-soft); color: #9c0010; }
.tag.rxb-t.warn { background: var(--amber-soft); color: #7a4700; }
.tag.rxb-t.ok { background: var(--teal-soft); color: var(--teal-ink); }
.rxb-two { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 12px; }
.rxb-two > .card { flex: 1 1 380px; min-width: 0; }
.rxb-nm, .rxb-pr { padding: 6px 0; border-top: 1px solid var(--line); }
.rxb-nm { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.rxb-nm select { margin-left: auto; width: auto; }
.rxb-pv { margin: 0 0 10px; }
.rxe-ch { gap: 6px; flex-wrap: wrap; margin-bottom: 8px; }
.rxe-avr { gap: 6px; margin-bottom: 6px; flex-wrap: nowrap; }
.rxe-avr select { flex: 0 0 40%; }
.rxe-avr input { flex: 1 1 auto; min-width: 0; }
.rxb-tab td:nth-child(2) { min-width: 180px; }
.rxb-tab td:nth-child(6) { min-width: 200px; }
/* ======== Телефония, 14.10.2026 (макет «Ormin: телефония и подсказки безопасности»; js/telefoniya*.js) ======== */
/* Панель звонка — справа внизу над любым экраном, под окнами (окно — z-index 40). */
.tel-p { position: fixed; right: 16px; bottom: 16px; z-index: 35; width: 360px; max-width: calc(100vw - 32px); max-height: calc(100vh - 32px);
  overflow-y: auto; display: flex; flex-direction: column; gap: 10px; pointer-events: none; }
.tel-p > * { pointer-events: auto; }
.tel-p:empty { display: none; }
.tel-c { margin: 0; box-shadow: var(--shadow), var(--shadow-lift); }
.tel-big { padding: 0; overflow: hidden; }
.tel-h { display: flex; align-items: center; gap: 8px; background: var(--navy); color: #fff; padding: 10px 16px; }
.tel-h .tel-t { margin-left: auto; font-variant-numeric: tabular-nums; }
.tel-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: var(--teal); flex: none; }
.tel-h.ring .tel-dot { box-shadow: 0 0 0 4px rgba(39, 190, 182, .3); }
.tel-dot.w { background: var(--orange); }
.tel-b { display: flex; flex-direction: column; gap: 8px; padding: 14px 16px 16px; }
.tel-b h2 { margin: 0; font-size: 20px; }
.tel-rows { display: flex; flex-direction: column; gap: 6px; }
.tel-rows > div { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.tel-btns { gap: 8px; flex-wrap: wrap; }
.tel-sm { padding: 12px 16px; display: flex; flex-direction: column; gap: 4px; }
.tel-sh { gap: 8px; justify-content: space-between; align-items: center; flex-wrap: nowrap; }
.tel-sh > b, .tel-sh > h3 { margin: 0; flex: 1; min-width: 0; }
.tel-sh > .tel-dot { margin-right: 0; }
.tag.tel-tn { background: var(--fill); color: var(--ink); }
.tel-n .tag { white-space: nowrap; }
.tel-r.tel-col > div:first-child { flex: none; }
.tel-f input.tel-num, .tel-sub input.tel-num { width: 72px; flex: none; display: inline-block; }
.tel-x { margin-left: 4px; }
.tel-mr { justify-content: space-between; gap: 8px; flex-wrap: nowrap; }
.tel-mr > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tag.tel-tg { background: var(--teal-soft); color: var(--teal-ink); }
.tag.tel-ta { background: var(--amber-soft); color: var(--amber); font-weight: 700; }
.tel-off b { color: var(--rose); }
/* «Обзвон › Пропущенные». */
.tel-moi { margin: 0 0 8px; }
.tel-kv { gap: 28px; margin-bottom: 12px; flex-wrap: wrap; }
.tel-kv > div { display: flex; flex-direction: column; }
.tel-kv b { font-family: var(--head); font-size: 26px; line-height: 1.1; }
.tel-warn b { color: var(--amber); }
.tel-pt { overflow-x: auto; }
.tel-pt tr.tel-late { background: #fff8f1; }
.tel-pt td .btn + .tiho-w { margin-left: 4px; }
.tel-after h3 { margin: 0; }
.tel-after .tel-btns { margin-top: 10px; }
.tel-done summary { cursor: pointer; }
.tel-rf { gap: 6px; margin-bottom: 10px; flex-wrap: wrap; align-items: center; }
.tel-rf select { width: auto; }
/* «Настройки › Телефония»: строки «что — как» одной карточкой. */
.tel-n { max-width: 980px; }
.tel-rows-c { padding: 6px 16px; }
.tel-r { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 12px 0; border-bottom: 1px solid var(--line-2); flex-wrap: wrap; }
.tel-r:last-child { border-bottom: 0; }
.tel-r > div:first-child { flex: 1 1 280px; min-width: 0; }
.tel-r.tel-col { flex-direction: column; align-items: stretch; }
.tel-r.tel-sub { padding-top: 0; }
.tel-f { display: flex; flex-direction: column; gap: 6px; flex: 1 1 320px; min-width: 0; }
.tel-f .row { gap: 6px; flex-wrap: nowrap; }
.tel-f input { min-width: 0; }
.tel-li { gap: 8px; align-items: center; }
.tel-li b { white-space: nowrap; }
.tel-ck { white-space: nowrap; margin-right: 10px; }
.tel-snd { gap: 6px; flex-wrap: wrap; align-items: center; }
.tag.tel-st { display: inline-flex; align-items: center; gap: 6px; }
.tag.tel-st.ok, .tel-n .tag.ok { background: var(--ok-soft); color: var(--ok); }
.tag.tel-st.bad, .tel-n .tag.bad { background: var(--rose-soft); color: var(--rose); }
.tag.tel-st.ok .tel-dot { background: var(--ok); }
.tag.tel-st.bad .tel-dot { background: var(--rose); }
.tag.tel-st:not(.ok):not(.bad) .tel-dot { background: var(--muted); }
.tel-mt { overflow-x: auto; }
.tel-mt input, .tel-mt select { width: auto; min-width: 0; }
.tel-pre { white-space: pre-wrap; font-size: 12.5px; background: var(--fill); border-radius: 10px; padding: 10px 12px; max-height: 50vh; overflow: auto; }
/* «Аналитика › Звонки». */
.tel-kpi { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-bottom: 14px; }
.tel-kpi .card { margin: 0; display: flex; flex-direction: column; gap: 2px; }
.tel-kpi b { font-family: var(--head); font-size: 28px; line-height: 1.2; }
.tel-g2 { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-start; }
.tel-g2 > .card { flex: 1 1 380px; min-width: 0; margin: 0; overflow-x: auto; }
.tel-g2 > .card + .card { flex: 1.5 1 520px; }
.tel-hb { display: flex; align-items: flex-end; gap: 8px; height: 150px; border-bottom: 1px solid var(--line); padding: 0 4px; }
.tel-hc { flex: 1; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; gap: 2px; }
.tel-hc i { display: block; width: 100%; background: var(--navy-20); border-radius: 6px 6px 0 0; }
.tel-hc.bad i { background: var(--orange); }
.tel-hc span { font-size: 11px; color: var(--muted); order: -1; }
.tel-hx { display: flex; gap: 8px; padding: 6px 4px 0; font-size: 12px; color: var(--muted); }
.tel-hx span { flex: 1; text-align: center; }
@media (max-width: 699px) {
  .tel-p { left: 8px; right: 8px; width: auto; max-width: none; bottom: calc(72px + env(safe-area-inset-bottom)); }
  .tel-kv { gap: 16px; }
}
:root[data-theme="dark"] .tel-pt tr.tel-late { background: rgba(244, 137, 31, .12); }
/* ---------- Анкета до визита и планшет (14.10.2026, s70; js/anketa.js, js/planshet.js) ---------- */
.ank-card { padding: 8px 12px; }
.ank-hd { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.ank-hd .btn { margin-left: auto; }
.ank-items { margin: 6px 0 8px; }
.ank-it { padding: 3px 0; border-bottom: 1px solid var(--line); font-size: 14px; }
.ank-it:last-child { border-bottom: 0; }
.ank-ed { padding: 8px 0; border-bottom: 1px solid var(--line); display: grid; gap: 6px; }
.ank-no { min-width: 22px; }
.ank-ed-h { gap: 6px; flex-wrap: nowrap; }
.ank-ed-h .ank-type { width: auto; min-width: 140px; }
.ank-q { padding: 8px 0; border-bottom: 1px solid var(--line); }
.ank-q:last-child { border-bottom: 0; }
.ank-qt { font-weight: 600; margin-bottom: 6px; }
.ank-req, .ank-q.miss .ank-qt { color: var(--rose); }
.ank-many { color: var(--muted); font-weight: 400; font-size: 13px; }
.ank-in { width: 100%; }
.ank-chs { display: flex; flex-wrap: wrap; gap: 8px; }
.ank-ch { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line); border-radius: 22px; padding: 6px 12px; cursor: pointer; }
.ank-ch input { accent-color: var(--teal); width: 18px; height: 18px; }
.ank-desk { margin: 4px 0 10px; }
.app.planshet-mode { grid-template-columns: 1fr; }
.app.planshet-mode .nav, .app.planshet-mode .tabbar, .app.planshet-mode .top, .app.planshet-mode .nav-row { display: none; }
.app.planshet-mode .main { max-width: 860px; }
.pl-wait { min-height: 80vh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 14px; }
.pl-big { font-size: 26px; font-family: var(--head); color: var(--ink); max-width: 640px; }
.pl-big.pl-tj { font-size: 22px; color: var(--muted); }
.pl-out { position: fixed; right: 12px; bottom: 12px; opacity: .55; }
.pl-doc { font-size: 17px; padding-bottom: 40px; }
.pl-doc h2 { font-family: var(--head); margin: 10px 0 2px; }
.pl-top { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.pl-text { max-height: 46vh; overflow-y: auto; margin: 10px 0; line-height: 1.5; }
.pl-sgn-h { margin-top: 8px; }
.pl-canvas { display: block; width: 100%; height: 220px; margin: 6px 0; background: var(--paper); border: 2px dashed var(--teal); border-radius: 12px; touch-action: none; }
.pl-go { min-width: 200px; }
.pl-form { margin: 10px 0; }

/* Снимки к приёму (js/snimki.js, 15.10.2026): миниатюры в карте и в окне «Из папки аппарата». */
.sn-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 8px; }
.sn-it { display: flex; flex-direction: column; gap: 4px; }
.sn-it img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 8px; background: var(--fill); cursor: pointer; }
.sn-m { display: flex; flex-wrap: wrap; gap: 4px; }
.sn-m .chip.sm { min-height: 28px; padding: 2px 8px; font-size: 12.5px; }
.sn-p { border-radius: 10px; padding: 3px; box-shadow: inset 0 0 0 2px transparent; cursor: pointer; }
.sn-p.on { box-shadow: inset 0 0 0 3px var(--teal); }
/* ---------- Сотрудники › Доступ, 14.10.2026 (js/dostup.js) ----------
   Таблица «кому что открыто»: строка — человек, колонка — раздел частей,
   кружок — часть. Цвета — токены брендбука (тёмная тема — их же). */
.sk-quick .sk-vid { margin-right: 6px; }
.dz-top { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 10px; }
.dz-lg { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 13px; color: var(--muted); }
.dz-lg span { display: inline-flex; align-items: center; gap: 7px; }
.dz-wrap { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; align-items: start; }
.dz-wrap.with-p { grid-template-columns: minmax(0, 1fr) 340px; }
.dz-card { overflow-x: auto; padding-bottom: 4px; }
.dz-t th { white-space: normal; vertical-align: bottom; min-width: 64px; }
.dz-t td { padding-top: 4px; padding-bottom: 4px; }
.dz-t tr.dz-grp td { font-size: 12px; font-weight: 800; color: var(--muted); background: var(--fill); padding-top: 6px; padding-bottom: 6px; }
.dz-who { min-width: 150px; max-width: 220px; }
.dz-who b { font-weight: 700; }
.dz-who > .muted { display: block; }
.dz-tg { font-size: 11.5px; font-weight: 600; color: var(--muted); white-space: nowrap; }
.dz-tg.ch { display: inline-block; font-weight: 800; color: var(--ink); background: var(--teal-soft); border-radius: 8px; padding: 0 7px; }
.dz-cell { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; min-height: 32px; min-width: 32px; padding: 4px 6px; border: 0; background: transparent; border-radius: 9px; cursor: pointer; }
.dz-cell:hover { background: var(--fill); }
.dz-cell:focus-visible { outline: 3px solid var(--teal); outline-offset: 0; }
.dz-c.sel .dz-cell { background: var(--teal-10); box-shadow: inset 0 0 0 2px var(--teal); }
.dz-t tr.sel td { background: color-mix(in srgb, var(--teal) 3%, var(--paper)); }
.dz-d { display: inline-block; width: 12px; height: 12px; border-radius: 50%; box-sizing: border-box; flex: none; }
.dz-d.on { background: var(--teal); }
.dz-d.off { border: 1.5px solid var(--line); }
.dz-d.add { background: var(--teal); box-shadow: 0 0 0 2px var(--paper), 0 0 0 3.5px var(--ink); }
.dz-d.del { border: 2px solid var(--rose); background: linear-gradient(45deg, transparent 44%, var(--rose) 44%, var(--rose) 56%, transparent 56%); }
.dz-d.na { width: 8px; height: 2px; border-radius: 1px; background: var(--line); margin: 0 2px; }
.dz-note { margin: 8px 12px 6px; }
.dz-p { position: sticky; top: 12px; padding: 14px 16px 16px; }
.dz-ph { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 6px; }
.dz-ph > div { flex: 1; min-width: 0; }
.dz-ph h3 { margin: 0; }
.dz-x { width: 32px; height: 32px; border-radius: 9px; border: 0; background: var(--fill); color: var(--ink); font-size: 18px; cursor: pointer; flex: none; }
.dz-pr { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-top: 1px solid var(--line-2); font-size: 14px; cursor: pointer; }
.dz-pr input { width: 18px; height: 18px; margin: 0; flex: none; accent-color: var(--teal); }
.dz-pt { flex: 1; min-width: 0; }
.dz-pt .muted { display: block; }
.dz-l { font-size: 12px; font-weight: 800; color: var(--muted); margin: 14px 0 4px; }
.dz-ul { margin: 0; padding-left: 18px; font-size: 13.5px; }
.dz-log { margin: 0 0 6px; }
.dz-btn { margin-top: 14px; gap: 8px; }
.dz-btn .btn.teal { flex: 1; }
.dz-kh { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
.dz-kh h3 { margin: 0; }
.dz-kh .linkish { margin-left: auto; }
.dz-sec { display: grid; grid-template-columns: 170px minmax(0, 1fr); gap: 12px; padding: 8px 0; border-top: 1px solid var(--line-2); align-items: baseline; }
.dz-sec .tag { margin: 0 4px 4px 0; }
.tag.dz-add { background: var(--teal-soft); color: var(--ink); font-weight: 700; }
.tag.dz-del { background: var(--rose-soft); color: var(--rose); text-decoration: line-through; }
@media (max-width: 699px) {
  /* Таблица — в своей рамке, листается; панель — во весь экран поверх. */
  .dz-wrap.with-p { grid-template-columns: minmax(0, 1fr); }
  .dz-p { position: fixed; inset: 0; z-index: 60; border-radius: 0; overflow-y: auto; }
  .dz-sec { grid-template-columns: minmax(0, 1fr); gap: 4px; }
}

/* Документы приложения пациента (s72, js/prilsvyaz.js): текст версии — как написан, со своей прокруткой. */
.dp-tekst { white-space: pre-line; max-height: 420px; overflow: auto; font-size: 14px; line-height: 1.5; border: 1px solid var(--line, rgba(0,0,0,.08)); border-radius: 8px; padding: 10px 12px; margin: 8px 0; }

/* ===== Вкладки пункта списком слева (16.10.2026, js/vkladki.js) =====
   С пяти вкладок – как настройки iPhone и Mac: слева список разделов (название
   и строка состояния), справа открытый раздел. Экран не шире: правая часть
   берёт оставшееся место. Телефон – список или раздел (`.vk-spisok`). */
.vk { display: grid; grid-template-columns: 228px minmax(0, 1fr); gap: 0 22px; align-items: start; }
.vk-side { position: sticky; top: 12px; display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.vk-back { display: flex; }
.vk-cap { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); padding: 4px 12px 0; }
.vk-list { display: flex; flex-direction: column; gap: 2px; background: var(--paper); border-radius: var(--radius); box-shadow: var(--shadow); padding: 6px; }
.vk-row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; column-gap: 8px; text-align: left; border: 0; background: transparent;
  border-radius: 10px; padding: 7px 10px; min-height: 40px; font: inherit; color: var(--ink); cursor: pointer; }
.vk-row:hover { background: var(--fill); }
.vk-row.on { background: var(--teal-soft); }
.vk-row:focus-visible { outline: 2px solid var(--teal); outline-offset: -2px; }
.vk-t { grid-column: 1; font-size: 14px; font-weight: 600; line-height: 1.25; }
.vk-row.on .vk-t { font-weight: 800; }
.vk-n { grid-column: 2; grid-row: 1; color: var(--muted); font-size: 13px; font-variant-numeric: tabular-nums; }
.vk-s { grid-column: 1 / 3; display: flex; align-items: center; gap: 6px; min-width: 0; font-size: 12.5px; color: var(--muted); line-height: 1.3; }
.vk-s > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.vk-s .sec-dot { width: 7px; height: 7px; }
.vk-s.warn { color: var(--amber); }
.vk-s.bad { color: var(--rose); }
.vk-gt { display: none; grid-column: 3; grid-row: 1 / span 2; color: var(--muted); font-style: normal; font-size: 18px; }
.vk-main { min-width: 0; }
.vk-main > .top .vk-to-list { display: none; }
@media (max-width: 699px) {
  .vk { grid-template-columns: minmax(0, 1fr); }
  .vk-side { position: static; }
  .vk.vk-spisok .vk-main, .vk:not(.vk-spisok) .vk-side { display: none; }
  .vk-main > .top .vk-to-list { display: inline-flex; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .vk-main > .top { flex-direction: column; align-items: stretch; }
  .vk-main > .top .top-l { flex-direction: column; align-items: flex-start; gap: 8px; min-width: 0; max-width: 100%; }
  .vk-main > .top .top-t { max-width: 100%; }
  .vk-cap { font-size: 22px; font-weight: 800; letter-spacing: 0; text-transform: none; color: var(--ink); padding: 2px 4px 4px; }
  .vk-row { min-height: 52px; padding: 8px 12px; }
  .vk-t { font-size: 15px; }
  .vk-gt { display: block; }
}
/* ---------- Планировщик регистратора («Расписание» стойки, 16.10.2026; js/setka.js `renderDesk`) ----------
   Экран — во всю высоту окна: сверху одна строка (дата, вид, поиск, «Ещё», «+ Запись»),
   слева колонка «Отделения и врачи» с делами внизу, остальное — сетка `calGrid` в режиме
   `fit`: столбцы делят ширину (ползунка вбок нет), весь день — прокруткой внутри,
   шапка врачей прилипает. Цвета — токены брендбука. */
.app.cal-wide .main:has(> #body > .dk) { height: 100vh; display: flex; flex-direction: column; padding: 10px 16px 12px; }
.main:has(> #body > .dk) > .top { flex: none; margin-bottom: 8px; min-height: 0; gap: 12px; }
.main:has(> #body > .dk) > .top h1 { font-size: 22px; }
.main:has(> #body > .dk) > .top .top-l { flex: none; gap: 8px; }
.main:has(> #body > .dk) > .top .tools { flex: 1 1 auto; justify-content: flex-end; }
.main:has(> #body > .dk) > #body { flex: 1 1 auto; min-height: 0; }
.dk-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; width: 100%; min-width: 0; }
.dk-bar .daybar { height: 36px; border-radius: 11px; }
.dk-bar .daybar-nav { width: 34px; height: 36px; font-size: 20px; }
.dk-bar .daybar-date { min-width: 118px; height: 36px; font-size: 14px; padding: 0 8px; }
/* День не сегодняшний — дата подсвечена (вместо красной плашки «не сегодня»). */
.dk-bar .daybar.other { box-shadow: inset 0 0 0 2px var(--orange); background: color-mix(in srgb, var(--orange) 9%, var(--paper)); }
.dk-bar .btn { height: 36px; min-height: 36px; padding: 0 12px; font-size: 14px; border-radius: 11px; }
.dk-bar .btn.dk-today:disabled { opacity: .45; cursor: default; }
.dk-bar .kb-sw > button { height: 30px; }
.dk-bar .desk-find { flex: 0 1 220px; min-width: 120px; height: 36px; margin: 0; padding: 0 12px; font-size: 14px; border-radius: 11px; }
.dk { display: grid; grid-template-columns: var(--dk-side, 220px) minmax(0, 1fr); gap: 12px; height: 100%; min-height: 0; }
.dk-side { display: flex; flex-direction: column; gap: 6px; min-height: 0; background: var(--paper); border: 1px solid var(--line); border-radius: 12px; padding: 8px; box-sizing: border-box; }
.dk-sq { display: flex; gap: 6px; align-items: center; }
.dk-sq .dk-dq { flex: 1; min-width: 0; height: 32px; margin: 0; padding: 0 10px; font-size: 13.5px; border-radius: 9px; }
.dk-help { flex: none; width: 28px; height: 28px; border-radius: 50%; border: 1px solid var(--line); background: var(--paper); color: var(--muted); font: 700 13px var(--font); cursor: pointer; }
.dk-help:hover { color: var(--ink); border-color: var(--teal); }
.dk-side button { font-family: inherit; color: var(--ink); }
.dk-all { display: flex; align-items: center; justify-content: space-between; gap: 6px; width: 100%; border: 0; background: transparent; border-radius: 8px; padding: 6px 8px; font-size: 13.5px; font-weight: 700; cursor: pointer; text-align: left; }
.dk-all:hover { background: var(--fill); }
.dk-all.on { background: var(--teal); color: var(--on-teal); }
.dk-tree { flex: 1 1 auto; min-height: 60px; overflow: auto; }
.dk-g { border-top: 1px solid var(--line-2); }
.dk-gh { display: flex; align-items: center; gap: 2px; padding: 1px 0; border-radius: 8px; }
.dk-gh.on { background: var(--teal-10); }
.dk-gh.on .dk-gn { color: var(--teal-ink); }
.dk-arr { flex: none; width: 18px; font-style: normal; font-size: 11px; color: var(--muted); }
.dk-gn { flex: 1; min-width: 0; display: flex; align-items: center; gap: 2px; border: 0; background: transparent; text-align: left; padding: 6px 2px; font-size: 13px; font-weight: 600; cursor: pointer; border-radius: 8px; }
.dk-gn > span:not(.dk-gc) { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dk-gn:hover { background: var(--fill); }
.dk-gc { flex: none; min-width: 22px; text-align: right; padding-right: 6px; font-size: 12px; color: var(--muted); }
.dk-doc { display: flex; flex-direction: column; width: calc(100% - 18px); margin: 0 0 3px 18px; text-align: left; border: 1px solid var(--line); background: var(--paper); border-radius: 8px; padding: 4px 8px; cursor: pointer; }
.dk-doc b { font-size: 12.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dk-doc small { font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dk-doc:hover { border-color: var(--teal); }
.dk-doc.off { opacity: .6; }
.dk-doc.on { background: var(--teal); border-color: var(--teal); }
.dk-doc.on b, .dk-doc.on small { color: var(--on-teal); }
/* Дела стойки — внизу колонки; открытое — поверх сетки. */
.dk-todo { flex: none; max-height: 42%; overflow: auto; border-top: 1px solid var(--line); padding-top: 6px; display: flex; flex-direction: column; gap: 2px; }
.dk-t { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; column-gap: 6px; width: 100%; border: 0; background: transparent; border-radius: 8px; padding: 5px 8px; text-align: left; cursor: pointer; font-size: 13px; }
.dk-t:hover { background: var(--fill); }
.dk-t b { font-weight: 700; }
.dk-t small { grid-column: 1 / -1; font-size: 11px; color: var(--muted); }
.dk-t.warn b, .dk-t.warn small { color: var(--amber); }
.dk-t.on { background: var(--teal-10); box-shadow: inset 3px 0 0 var(--teal); }
.dk-main { position: relative; min-width: 0; min-height: 0; display: flex; flex-direction: column; gap: 8px; }
.dk-main > .banner, .dk-main > .row { flex: none; margin: 0; }
.dk-main > .cg { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
.dk-main > .cw-card, .dk-main > .pt, .dk-main > .card { flex: 1 1 auto; min-height: 0; overflow: auto; margin: 0; }
.dk-main > .pt { flex-direction: column; }
/* Поток дня в колонке рядом с деревом врачей — пять колонок по ширине, без ползунка вбок. */
.dk .pt-kpis { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.dk .pt-b { grid-template-columns: repeat(5, minmax(0, 1fr)); overflow-x: visible; }
.dk-main > p.muted { margin: 0; flex: none; }
.cg-fit .cg-scroll { flex: 1 1 auto; min-height: 0; max-height: none; overflow-y: auto; overflow-x: hidden; }
.cg-fit .cg-head { position: sticky; top: 0; z-index: 4; }
.cg-fit .cg-corner { display: flex; align-items: center; justify-content: center; }
.cg-fit .cg-h { padding: 0; white-space: normal; }
.dk-h { display: flex; flex-direction: column; align-items: center; width: 100%; border: 0; background: transparent; padding: 5px 4px; cursor: pointer; font-family: inherit; color: var(--ink); min-width: 0; }
.dk-h:hover { background: var(--teal-10); }
.dk-h.on { background: var(--teal-soft); }
.dk-h b { font-size: 12.5px; font-weight: 700; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dk-h small { font-size: 11px; font-weight: 400; color: var(--muted); max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dk-wait { color: var(--amber); font-weight: 700; }
.dk-pg { display: inline-flex; gap: 2px; }
.dk-pg button { width: 22px; height: 26px; border: 1px solid var(--line); border-radius: 6px; background: var(--paper); color: var(--ink); cursor: pointer; font: 700 15px var(--font); padding: 0; }
.dk-pg button:disabled { opacity: .35; cursor: default; }
.dk-pg button:not(:disabled):hover { border-color: var(--teal); }
/* Сетка стойки: свободная клетка — «+» при наведении; цвета плашек — как были в сетке стойки. */
.cg-fit .cg-c[data-t]:hover::after { content: "+"; display: block; text-align: center; color: var(--teal-ink); font-weight: 700; line-height: 30px; }
.dk .cg-v { padding: 2px 6px; font-size: 12px; line-height: 14px; }
.dk .cg-v b { font-weight: 700; }
.dk .cg-v div { font-size: 11px; color: var(--muted); }
.dk .cg-v.wait { background: var(--fill); border-left-color: #8a99b3; }
.dk .cg-v.wait.late { background: var(--amber-soft); border-left-color: var(--orange); }
.dk .cg-v.arrived { background: var(--teal-soft); border-left-color: var(--teal); }
.dk .cg-v.open { background: var(--teal); color: var(--on-teal); border-left-color: var(--ink); }
.dk .cg-v.open div { color: var(--on-teal); }
.dk .cg-v div.dk-due { color: var(--rose); font-weight: 700; }
.dk .cg-v.clash { box-shadow: inset 0 0 0 2px var(--rose); }
.dk .cg-v.dim { opacity: .22; }
.dk .cg-v.hit { box-shadow: 0 0 0 2px var(--orange); z-index: 2; }
.dk-more { margin: 0; flex: none; }
.dk-pop { position: absolute; top: 0; right: 0; z-index: 8; width: min(560px, 100%); max-height: 100%; display: flex; flex-direction: column; padding: 0; box-shadow: var(--shadow-lift, 0 12px 32px rgba(0,45,66,.18)); border: 1px solid var(--line); margin: 0; }
.dk-pop-h { display: flex; align-items: center; gap: 8px; padding: 10px 12px 8px 16px; border-bottom: 1px solid var(--line-2); flex: none; }
.dk-pop-x { margin-left: auto; width: 30px; height: 30px; border-radius: 9px; border: 0; background: var(--fill); color: var(--ink); font-size: 18px; cursor: pointer; }
.dk-pop-b { overflow: auto; padding: 4px 16px 12px; min-height: 0; }
.dk-lg { display: flex; align-items: center; gap: 10px; margin: 6px 0; font-size: 14px; }
.dk-lg > .cg-v, .dk-lg > .cg-c, .dk-lg > .cg-hold { position: static; display: inline-block; width: 46px; height: 22px; flex: none; }
.modal .dk-lg > .cg-v.wait { background: var(--fill); border-left-color: #8a99b3; }
.modal .dk-lg > .cg-v.late { background: var(--amber-soft); border-left-color: var(--orange); }
.modal .dk-lg > .cg-v.arrived { background: var(--teal-soft); border-left-color: var(--teal); }
.modal .dk-lg > .cg-v.open { background: var(--teal); }
.modal .dk-lg > .cg-v.clash { box-shadow: inset 0 0 0 2px var(--rose); }
@media (max-width: 699px) {
  .app.cal-wide .main:has(> #body > .dk) { height: auto; padding: 12px 12px 80px; }
  .dk { grid-template-columns: minmax(0, 1fr); height: auto; }
  .dk-side { max-height: 34vh; }
  .dk-main { height: 72vh; }
  .dk-bar { justify-content: flex-start; }
  .dk-bar .desk-find { flex: 1 1 100%; }
  .dk .pt-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dk .pt-b { grid-template-columns: repeat(5, minmax(240px, 80vw)); overflow-x: auto; }
}
.dk .pt-k .lab-k-h { flex-wrap: wrap; row-gap: 2px; }
.dk .pt-k .lab-k-n { flex: 1 1 90px; min-width: 0; }
.dk-lg > .cg-hold { width: auto; padding: 0 6px; }
/* ---------- Экран записи: свободные окна (h4, 16.10.2026) ----------
   Без переключателей режимов: полоска дней вместо поля даты, фамилия в строке —
   неделя врача, метка «Фамилия ×» над окном, строка врача из поля «Врач» —
   выделена, всплывающая строка «Записан(а) … · Отменить». */
.zctl { flex-wrap: nowrap; }
.zdays { display: flex; gap: 2px; flex: 1; min-width: 0; overflow: hidden; padding: 3px; border-radius: 8px; background: var(--fill); }
.zdays button { flex: none; border: 0; border-radius: 6px; background: transparent; padding: 0 8px; height: 22px; font: 600 11.5px var(--font); color: #48484a; cursor: pointer; white-space: nowrap; }
.zdays button:hover { color: var(--teal-ink); }
.zdays button.on { background: var(--paper); color: var(--teal-ink); box-shadow: 0 1px 2px rgba(0,0,0,.14); }
.zcal { flex: none; display: flex; align-items: center; gap: 4px; height: 28px; min-width: 28px; justify-content: center; padding: 0 6px; border: 0; border-radius: 8px; background: var(--fill); color: var(--muted); font: 600 11.5px var(--font); cursor: pointer; }
.zcal:hover { color: var(--teal-ink); }
.zcal.on { background: var(--teal-soft); color: var(--teal-ink); }
.zcal span:empty { display: none; }
.zctl .zfrom { position: absolute; width: 1px; height: 1px; padding: 0; border: 0; opacity: 0; pointer-events: none; }
.zplan .zctl { position: relative; }
.zvidw:empty { display: none; }
.zvid { border: 0; border-radius: 6px; background: var(--teal-soft); color: var(--teal-ink); font: 600 11px var(--font); text-transform: none; letter-spacing: 0; height: 20px; padding: 0 4px 0 8px; margin-left: 6px; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
.zvid b { font-size: 13px; line-height: 1; padding: 0 3px; }
span.zvid { cursor: default; background: none; color: var(--ink); padding: 0 2px; }
#zb-plan > h3 { flex-wrap: nowrap; white-space: nowrap; }
#zb-plan > h3 em { flex-shrink: 50; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.zvidw { min-width: 0; overflow: hidden; }
.zvidw .zvid { max-width: 100%; min-width: 0; }
.zvid span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.zvid b { flex: none; }
.zr .who { border: 0; background: none; padding: 0; text-align: left; font: 600 12px var(--font); color: var(--ink); cursor: pointer; border-radius: 4px; }
.zr .who:hover { color: var(--teal-ink); text-decoration: underline; text-underline-offset: 2px; }
.zr.pin { background: var(--teal-10); border-radius: 6px; box-shadow: -4px 0 0 var(--teal-10), 4px 0 0 var(--teal-10); }
.zr.pin .who { color: var(--teal-ink); }
.zundo { position: fixed; left: 50%; bottom: 72px; transform: translateX(-50%); z-index: 60; display: flex; align-items: center; gap: 12px; background: #1c1c1e; color: #fff; border-radius: 10px; padding: 6px 6px 6px 14px; font-size: 13px; box-shadow: 0 6px 24px rgba(0,0,0,.22); animation: zundo-in .18s ease-out; max-width: calc(100vw - 32px); }
.zundo b { color: #9be7d8; }
.zundo .zbtn.ghost { height: 30px; color: #9be7d8; background: rgba(255,255,255,.08); border: 0; }
@keyframes zundo-in { from { opacity: 0; transform: translate(-50%, 8px); } to { opacity: 1; transform: translate(-50%, 0); } }
:root[data-theme="dark"] .zdays button { color: var(--muted); }
/* ===== Экран «Расписание» врача (16.10.2026, js/vrach-ekran.js): расписание
   главное, справа колонкой ~300 px — вопросы пациентов, мои результаты,
   вознаграждение; на узком экране — под расписанием. ===== */
.ve-grid { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 14px; align-items: start; }
.ve-main { min-width: 0; }
.ve-main > .card:first-child { margin-top: 0 !important; }
.ve-side { display: flex; flex-direction: column; gap: 10px; position: sticky; top: 12px; }
.ve-b { padding: 12px 14px; }
.ve-h { display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px; }
.ve-h b { font: 500 15px/1.3 var(--head); color: var(--ink); }
.ve-h .ve-all, .ve-h > .muted { margin-left: auto; }
.ve-n { background: var(--teal-soft); color: var(--ink); border-radius: 10px; padding: 0 7px; font-size: 12.5px; font-weight: 700; }
.ve-n.late { background: var(--amber-soft); color: var(--amber); }
.ve-tiho { padding: 2px 0; }
.ve-q { display: block; width: 100%; text-align: left; background: none; border: 0; border-top: 1px solid var(--line-2); padding: 7px 0; cursor: pointer; font: inherit; color: var(--ink); }
.ve-q:first-of-type { border-top: 0; padding-top: 2px; }
.ve-q:hover .ve-q1 b { color: var(--teal-ink); }
.ve-q1 { display: flex; gap: 8px; align-items: baseline; }
.ve-q1 b { font-weight: 600; font-size: 13.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ve-w { margin-left: auto; color: var(--muted); font-size: 12.5px; white-space: nowrap; }
.ve-q.late .ve-w { color: var(--amber); font-weight: 700; }
.ve-q.late { box-shadow: inset 3px 0 0 var(--orange); padding-left: 8px; }
.ve-q2 { display: block; color: var(--muted); font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ve-more { margin-top: 4px; }
.ve-two { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 6px; }
.ve-two > div { background: var(--teal-10); border-radius: 8px; padding: 7px 10px; }
.ve-two b { font: 600 22px/1.1 var(--head); color: var(--ink); }
.ve-two span { display: block; color: var(--muted); font-size: 12.5px; margin-bottom: 1px; }
.ve-d { font-style: normal; font-size: 12px; font-weight: 700; margin-left: 6px; color: var(--muted); }
.ve-d.up { color: var(--ok); }
.ve-d.dn { color: var(--amber); }
.ve-li { display: flex; gap: 8px; justify-content: space-between; align-items: baseline; padding: 3px 0; font-size: 13.5px; }
.ve-li span { color: var(--muted); }
.ve-li b { font-weight: 600; white-space: nowrap; }
.ve-li b small { color: var(--muted); font-weight: 500; }
.ve-li.warn b, .ve-li.warn span { color: var(--amber); }
.ve-prev { border-top: 1px solid var(--line-2); margin-top: 4px; padding-top: 6px; }
.ve-sum { font: 600 24px/1.15 var(--head); color: var(--teal-ink); margin: -2px 0 6px; }
.ve-pod { margin-top: 6px; font-size: 12px; }
@media (max-width: 1199px) {
  .ve-grid { grid-template-columns: minmax(0, 1fr); }
  .ve-side { position: static; display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
}

/* ======== Окно на пол-экрана: меню – полосой значков (16.10.2026) ========
   Заказчик: «когда свернуть программу на пол-экрана… надо оптимизировать».
   Было: от 700 до 980 px меню переставало быть колонкой и разворачивалось
   во всю ширину над экраном – экран начинался ниже первого экрана. Теперь
   меню остаётся слева узкой полосой: значки разделов (название – при
   наведении), логотип знаком, «Найти» – лупой, человек – кружком с буквами.
   «☰» вверху раскрывает полное меню поверх экрана; выбрали пункт – оно
   закрылось (menuRender). Ниже 700 px – телефон, как было. */
@media (min-width: 700px) and (max-width: 980px) {
  .app { grid-template-columns: 64px minmax(0, 1fr); }
  .nav { position: sticky; top: 0; height: 100vh; flex-direction: column; flex-wrap: nowrap; align-items: stretch;
    padding: 10px 8px; overflow-y: auto; overflow-x: hidden; z-index: 35; scrollbar-width: none; }
  .nav::-webkit-scrollbar { display: none; }
  .brand { padding: 0 0 6px; display: flex; justify-content: center; }
  .brand-logo { width: 40px; margin: 0; }
  .brand.txt b, .brand.svoy b { display: none; }
  .nav .nav-burger { display: flex; justify-content: center; align-items: center; width: 100%; height: 36px; min-height: 0; padding: 0;
    margin: 0 0 6px; font-size: 18px; border-radius: 10px; background: var(--fill); }
  .nav .nav-find { display: flex; justify-content: center; padding: 8px 0; margin-bottom: 4px; }
  .nav .nav-find > span, .nav .nav-burger-t { display: none; }
  .nav button { justify-content: center; padding: 9px 0; position: relative; gap: 0; }
  .nav .nav-t, .nav .nav-grp { display: none; }
  .nav .nav-grp + button, .nav button + .nav-grp + button { margin-top: 8px; }
  .nav .nav-n { position: absolute; top: 1px; right: 0; }
  .nav .nav-n::after { min-width: 16px; height: 15px; padding: 0 4px; font-size: 10px; border-radius: 8px; }
  .nav .badge { position: absolute; top: 1px; right: 0; margin: 0; }
  .nav .nav-warn { position: absolute; top: 5px; right: 8px; }
  .nav .who { padding: 4px; flex-direction: column; gap: 4px; box-shadow: none; background: transparent; }
  .nav .who .who-t { display: none; }
  .nav .who .out { width: 32px; height: 32px; }
  /* «☰» – полное меню поверх экрана, шириной как на компьютере. */
  .app.nav-open .nav { position: fixed; left: 0; top: 0; bottom: 0; width: 252px; padding: 12px; box-shadow: 0 12px 40px rgba(0,0,0,.18); }
  .app.nav-open .brand { justify-content: flex-start; padding: 0 6px 8px; }
  .app.nav-open .brand-logo { width: 136px; }
  .app.nav-open .brand.txt b, .app.nav-open .brand.svoy b { display: block; }
  .app.nav-open .nav .nav-find { justify-content: space-between; padding: 8px 12px; }
  .app.nav-open .nav .nav-find > span, .app.nav-open .nav .nav-burger-t { display: inline; }
  .app.nav-open .nav button { justify-content: flex-start; padding: var(--nav-pad); gap: 10px; }
  .app.nav-open .nav .nav-t, .app.nav-open .nav .nav-grp { display: block; }
  .app.nav-open .nav .nav-grp + button, .app.nav-open .nav button + .nav-grp + button { margin-top: 0; }
  .app.nav-open .nav .nav-n, .app.nav-open .nav .badge, .app.nav-open .nav .nav-warn { position: static; }
  .app.nav-open .nav .nav-n::after { min-width: 22px; height: 20px; padding: 0 6px; font-size: 12px; border-radius: 10px; }
  .app.nav-open .nav .who { flex-direction: row; padding: 8px 4px 8px 8px; gap: 8px; box-shadow: var(--shadow); background: var(--paper); }
  .app.nav-open .nav .who .who-t { display: block; }
  .app.nav-open .nav .nav-burger { width: auto; padding: 0 12px; align-self: flex-start; font-size: 14px; }
  .app.nav-open > .main { grid-column: 2; }
  .app.nav-open .nav .nav-find { flex: none; margin: 0 0 4px; }
  .app.nav-open .nav .nav-burger { height: 32px; flex: none; }
  .app.nav-open::after { content: ""; position: fixed; inset: 0 0 0 252px; background: rgba(0,0,0,.18); z-index: 34; }
}


/* Окно «Расход» (16.10.2026): частые статьи – кнопками над списком, чек – кнопкой. */
.ex-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 6px; }
.ex-chips .chip { min-height: 30px; height: 30px; padding: 3px 11px; font-size: 13px; margin: 0; }
.ex-chek-b { display: inline-flex; align-items: center; cursor: pointer; }
.ex-ym-b { margin-left: 8px; font-weight: 500; }
.ex-chek-add { opacity: .55; }
tr:hover .ex-chek-add { opacity: 1; }

/* Раскладка экрана записи – у каждого своя (16.10.2026, js/zapis-vid.js):
   граница между полями и окнами тянется мышью, у модуля – «⇄ ↑ ↓ –» в
   заголовке при наведении, свёрнутый модуль – одна строка-заголовок. */
@media (min-width: 1101px) {
  .zb-main { grid-template-columns: auto 12px minmax(0, 1fr); gap: 0; }
  .zb-split { cursor: col-resize; align-self: stretch; touch-action: none; border-radius: 6px;
    background: linear-gradient(var(--line), var(--line)) center / 2px 36px no-repeat; }
  .zb-split:hover, .zb-split.drag { background-color: var(--teal-soft); background-image: linear-gradient(var(--teal), var(--teal)); }
}
@media (max-width: 1100px) { .zb-split { display: none; } }
#zb-form .zm { position: relative; }
.zv-ctl { position: absolute; top: 6px; right: 8px; display: inline-flex; gap: 2px; padding-left: 6px; background: var(--paper);
  opacity: 0; pointer-events: none; transition: opacity .12s; }
.zm:hover > h3 .zv-ctl, .zv-ctl:focus-within { opacity: 1; pointer-events: auto; }
.zv-ctl button { border: 0; background: var(--fill); color: var(--muted); border-radius: 5px; width: 20px; height: 18px; padding: 0; font: 600 11px/18px var(--font); cursor: pointer; text-transform: none; }
.zv-ctl button:hover { background: var(--teal-soft); color: var(--teal-ink); }
.zb-form:not(.two) .zv-ctl [data-a=col] { display: none; }
.zm.zfold { padding-bottom: 6px; cursor: pointer; }
.zm.zfold > :not(h3) { display: none !important; }
.zm.zfold > h3 { margin: 0; }
.zm.zfold > h3::after { content: "развернуть"; font-size: 10.5px; font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--muted); }
.zm.zfold [data-a=fold] { display: none; }
.zb-form.two .zstack.zv-empty { display: none; }
.kk-per .pl-in { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
/* Шапка отчёта (16.10.2026): заголовок отчёта чаще помещается одной строкой –
   чуть мельче шрифт и уже поля дат (дата «16.10.2026» помещается в 128 px). */
@media (min-width: 700px) {
  .app.rep-page .top h1 { font-size: 22px; }
  .app.rep-page .top .tools .kk-dates input[type=date] { width: 128px; padding-left: 8px; padding-right: 6px; }
}
/* Главная на пол-экрана (16.10.2026): «Доброе утро» и строка дня не жмутся в
   узкий столбик рядом с кнопками – кнопки встают строкой ниже. */
@media (min-width: 700px) and (max-width: 1250px) {
  .top.home-top { flex-wrap: wrap; }
  .top.home-top > .top-l { flex: 1 1 100%; }
  .top.home-top > .tools { flex: 1 1 100%; justify-content: flex-start; }
}
