/*!
 * smit-controls — одна линейка высот для всего, что стоит в панелях рядом.
 *
 * Кнопка, поле, селект, сегмент, чип и наши компоненты жили каждый со своей
 * высотой: 26, 28, 30, 31, 35, 38 пикселей. В панели фильтров это видно
 * сразу — контролы не выстраиваются в линию, а «пляшут». Здесь высоты
 * сведены к трём: sm (28) для плотных таблиц, md (32) — рабочий размер,
 * lg (38) — формы и главное действие на странице.
 *
 * Файл подключается после Bootstrap, поэтому правит и его размеры тоже:
 * .btn-sm / .form-control-sm / .form-select-sm приводятся к md. Значения
 * берутся из tokens.css — менять надо там, а не здесь.
 *
 * ⚠ На телефоне у кликабельных контролов минимальная высота 44px: палец
 * не попадает в 28-пиксельную кнопку.
 */

/* ── Bootstrap: три размера вместо пяти разных ── */
.btn-sm, .form-control-sm:not(.smit-input-el), .form-select-sm,
.input-group-sm > .form-control, .input-group-sm > .form-select,
.input-group-sm > .input-group-text {
  min-height: var(--ctl-h-md);
  border-radius: var(--radius-sm);
}
.form-select-sm { padding-top: 0; padding-bottom: 0; }
/* ⚠ .smit-input-el исключён: внутри SmitInput поле склеено с приставкой и
   кнопкой в один контрол, и общая линейка ломала стык — возвращала скругления
   на углах шва и делала поле на 6px выше кнопки. Геометрию там задаёт сам
   компонент, а высоту — его размер (size-sm/md/lg). */
.btn:not(.btn-sm):not(.btn-lg):not(.btn-link),
.form-control:not(.form-control-sm):not(.form-control-lg):not(.smit-input-el),
.form-select:not(.form-select-sm):not(.form-select-lg) {
  min-height: var(--ctl-h-lg);
  border-radius: var(--radius-sm);
}
/* ⚠ Размер группе часто задают на обёртке: <div class="input-group-sm"> с
   обычным .form-control внутри. Правило выше по весу такое же, но идёт ниже,
   поэтому поле вырастало до 38px рядом с 32-пиксельной кнопкой — повторяем
   малый размер с большей точностью после общего правила. */
/* Класс повторён нарочно: в общем правиле выше три :not(), и его вес (0,4,0)
   перебивал (0,3,0) — поле в малой группе оставалось 38px рядом с 32-пиксельной
   кнопкой. Здесь вес (0,5,0), и малый размер наконец побеждает. */
.input-group-sm > .form-control.form-control.form-control.form-control,
.input-group-sm > .form-select.form-select.form-select.form-select,
.input-group-sm > .input-group-text.input-group-text.input-group-text.input-group-text {
  min-height: var(--ctl-h-md);
  height: var(--ctl-h-md);
}

/* ── Одно скругление на все поля ввода и селекты ──
   Тема поверх Bootstrap ставит контролам свой радиус (5px), и правило линейки
   выше проигрывало по весу: поле, селект и наш селектор стояли рядом с разным
   скруглением. Класс повторён нарочно — так вес выше темы, а шов внутри
   .input-group ниже по файлу по-прежнему снимает лишние углы. */
.form-control.form-control, .form-select.form-select,
.input-group-text.input-group-text,
.psel-trigger, .stf-trigger, .smit-orgsel-btn, .smit-folder-trigger,
.smit-abonent-input, .smit-addr-input, .smit-ss input,
.smit-tag-input, .smit-multisearch input {
  border-radius: var(--radius-sm);
}

/* Наши селекторы — та же высота, что у поля и селекта рядом */
.psel-trigger, .stf-trigger, .smit-orgsel-btn, .smit-folder-trigger,
.smit-abonent-input, .smit-addr-input, .smit-ss input, .smit-ss .input-group-text {
  min-height: var(--ctl-h-md);
}

/* ── Наши компоненты ── */
.smit-btn.size-sm { min-height: var(--ctl-h-sm); padding-top: 0; padding-bottom: 0; }
.smit-btn.size-md { min-height: var(--ctl-h-md); padding-top: 0; padding-bottom: 0; }
.smit-btn.size-lg { min-height: var(--ctl-h-lg); padding-top: 0; padding-bottom: 0; }
.smit-btn.size-xs { min-height: 24px; }

.smit-seg { min-height: var(--ctl-h-md); }
.smit-seg.size-sm { min-height: var(--ctl-h-sm); }
.smit-seg.size-lg { min-height: var(--ctl-h-lg); }
.smit-seg-btn { padding-top: 0; padding-bottom: 0; }

.smit-input.size-sm .smit-input-el, .smit-input.size-sm .smit-input-action,
.smit-input.size-sm .smit-input-fix { min-height: var(--ctl-h-sm); }
.smit-input.size-md .smit-input-el, .smit-input.size-md .smit-input-action,
.smit-input.size-md .smit-input-fix { min-height: var(--ctl-h-md); }
.smit-input.size-lg .smit-input-el, .smit-input.size-lg .smit-input-action,
.smit-input.size-lg .smit-input-fix { min-height: var(--ctl-h-lg); }

.smit-actions-btn { min-height: var(--ctl-h-md); }
.smit-actions-btn.is-sm { min-height: var(--ctl-h-sm); }
.smit-date-range-btn, .smit-fm-btn, .smit-fp-btn, .smit-tag-add,
.smit-ps-btn, .smit-org-switch-btn, .smit-watch-btn {
  min-height: var(--ctl-h-md);
}
.smit-chip, .smit-fp-chip, .smit-filter-chip { min-height: var(--ctl-h-sm); }

/* Панель действий: одинаковый зазор между контролами, чтобы линия читалась */
.smit-ctl-row {
  display: flex; align-items: center; gap: var(--ctl-gap); flex-wrap: wrap;
}

/* Общее для нажимаемых: одинаковая приглушённость и скорость наведения */
.smit-btn:disabled, .smit-btn[aria-disabled="true"],
.smit-seg-btn:disabled, .smit-input-action:disabled, .smit-actions-btn:disabled {
  opacity: var(--ctl-disabled);
}

/* ── Телефон: палец не попадает в 28 пикселей ── */
@media (max-width: 767.98px) {
  .smit-btn, .smit-input-action, .smit-actions-btn, .smit-date-range-btn,
  .smit-fm-btn, .smit-fp-btn, .btn-sm, .form-control-sm, .form-select-sm {
    min-height: 44px;
  }
  .smit-btn.size-xs, .smit-chip, .smit-fp-chip { min-height: 36px; }
  /* touch-таргет 44px не должен прижимать содержимое к верху инлайн-блок кнопки
     (иначе снизу видимый пустой отступ). Центрируем по вертикали. */
  .btn-sm { display: inline-flex; align-items: center; justify-content: center; }
}

/* build 3064: приписка справа или слева от поля («Кбит/с», «₽», «@») — той же
   высоты и тем же шрифтом, что поле. Бутстрап даёт ей 16 px и отступы 6 px, а
   полям в содержимом страницы тема ставит 13 px (bs-compat.css): приписка была
   крупнее поля, а там, где поле ниже 38 px (окно-форма, панель фильтров), — ещё
   и выше его, и строка «плясала». Вертикальные отступы сняты: высоту группы
   задаёт поле, приписка тянется до неё (у .input-group align-items: stretch). */
.input-group > .input-group-text {
  padding-top: 0;
  padding-bottom: 0;
  line-height: 1.2;
}
.content-wrapper .input-group > .input-group-text { font-size: .8125rem; }

/* Поле с кнопкой не переносится по строкам.
   Бутстрап разрешает .input-group переносить элементы — это нужно только для
   подписи с ошибкой валидации (.has-validation). В остальных случаях лишний
   пиксель ширины отправлял кнопку поиска под поле. */
.input-group:not(.has-validation) { flex-wrap: nowrap; }

/* Шов внутри группы «поле + кнопка».
   Общая линейка выше скругляет каждый контрол, и в группе это выглядело как
   два отдельных блока с зазором вместо одного поля с кнопкой. Возвращаем
   бутстраповское правило: скруглены только внешние углы группы. */
.input-group > :not(:first-child):not(.dropdown-menu):not(.form-floating) {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}
.input-group > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}

/* ── Одна типографика во всех таблицах ──
   Страницы задавали её сами: размеры .82em / .86em / 12px / 13px и четыре
   разных токена, шапки то 600, то 700, межстрочный от нуля до 21.6px. Рядом
   это читалось как списки из разных программ.

   Правило берёт любую таблицу внутри содержимого страницы, а не только с
   классом .table: у части списков (должники, журналы) класса нет вовсе.
   Печатные формы живут вне section.content и не затрагиваются.

   Отказаться: класс .tbl-own-fz на таблице — для случаев, где размер несёт
   смысл (плотная сводка, печатный бланк). */
.content table:not(.tbl-own-fz) > thead > tr > th,
.content table:not(.tbl-own-fz) > thead > tr > td,
.content-wrapper table:not(.tbl-own-fz) > thead > tr > th,
.content-wrapper table:not(.tbl-own-fz) > thead > tr > td {
  /* !important здесь не роскошь: базовую типографику перебивали правила
     вида «.content-wrapper .card-body .table thead th» (три класса) и
     «#choice_list thead th» (id). Отказаться можно классом .tbl-own-fz. */
  font-size: var(--sc-fz-sm) !important;
  font-weight: 600 !important;
  line-height: 1.5 !important;
}
.content table:not(.tbl-own-fz) > tbody > tr > td,
.content table:not(.tbl-own-fz) > tbody > tr > th,
.content table:not(.tbl-own-fz) > tfoot > tr > td,
.content-wrapper table:not(.tbl-own-fz) > tbody > tr > td,
.content-wrapper table:not(.tbl-own-fz) > tbody > tr > th,
.content-wrapper table:not(.tbl-own-fz) > tfoot > tr > td {
  font-size: var(--sc-fz-md) !important;
  line-height: 1.5 !important;
}

/* Технические значения — адреса, MAC, логины — остаются моноширинными:
   так их проще сверять посимвольно. Но шрифт и размер у них теперь одни на
   всю систему, а не «monospace .84em» на одной странице и «13px» на другой. */
.content table code,
.content table .font-monospace,
.content table [class*="-mac"],
.content table [class*="-ip"],
.content-wrapper table code,
.content-wrapper table .font-monospace {
  font-family: var(--sc-font-mono, ui-monospace, "SFMono-Regular", "Cascadia Mono", Menlo, Consolas, monospace);
  font-size: 1em;
}

/* ── Телефон: списки выбора выезжают снизу ──
   Выпадающий список сотрудника, тарифа, организации, папки, иконки и фильтра
   на узком экране висел карточкой поверх содержимого и часто не помещался.
   Теперь это нижняя панель во всю ширину: попасть пальцем проще, а список
   не наезжает на то, из чего его открыли.
   Фон затемняется тенью самой панели (0 0 0 100vmax) — отдельная подложка не
   нужна, клик мимо закрывает список прежним обработчиком компонента. */
@media (max-width: 767.98px) {
  .psel-menu, .stf-menu, .smit-orgsel-menu, .smit-orgsw-menu,
  .smit-folder-menu, .smit-isel-menu, .smit-fm-menu, .smit-mc-menu {
    position: fixed !important;
    left: 0 !important; right: 0 !important; bottom: 0 !important; top: auto !important;
    width: 100% !important; max-width: none !important; min-width: 0 !important;
    max-height: 78vh; overflow-y: auto;
    border-radius: var(--radius-sm) var(--radius-sm) 0 0!important;
    border-left: 0; border-right: 0; border-bottom: 0;
    box-shadow: 0 -8px 24px rgba(0, 0, 0, .28), 0 0 0 100vmax rgba(15, 23, 42, .45) !important;
    padding-bottom: env(safe-area-inset-bottom, 0px);
    animation: smitSheetUp .18s ease-out;
  }
  .psel-menu::before, .stf-menu::before, .smit-orgsel-menu::before,
  .smit-orgsw-menu::before, .smit-folder-menu::before, .smit-isel-menu::before,
  .smit-fm-menu::before, .smit-mc-menu::before {
    content: ''; display: block; width: 38px; height: 4px; border-radius: var(--radius-sm);
    background: #ccd2d9; margin: 8px auto 2px;
  }
  .psel-list, .stf-list, .smit-folder-list, .smit-fm-list { max-height: 60vh; }
}
@keyframes smitSheetUp { from { transform: translateY(14px); opacity: .6; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .psel-menu, .stf-menu, .smit-orgsel-menu, .smit-orgsw-menu,
  .smit-folder-menu, .smit-isel-menu, .smit-fm-menu, .smit-mc-menu { animation: none; }
}

/* build 2863: кнопка в группе с полем — всегда высоты поля.
   Малая группа (.input-group-sm) приводила поле к 32px, а обычная .btn рядом
   оставалась «большой» 38px: «Опишите тариф словами» и «Заполнить» в мастере
   тарифа стояли разной высоты. Класс повторён, чтобы перебить общее правило
   .btn:not(...) выше (вес 0,4,0). */
.input-group-sm > .btn.btn.btn.btn {
  min-height: var(--ctl-h-md);
  height: var(--ctl-h-md);
  padding-top: 0;
  padding-bottom: 0;
  display: inline-flex;
  align-items: center;
}

/* build 2968: размер часто задают ГРУППЕ — <div class="btn-group-sm"> с обычными
   .btn внутри (так собраны панели календаря CRM, отчётов, карты). Для полей это
   уже учтено выше, для кнопок — нет: общее правило с тремя :not() поднимало их до
   38px, и в одной строке стояли кнопки 38px рядом с селектами и полями 32px.
   Класс повторён нарочно — нужен вес выше (0,4,0). */
.btn-group-sm > .btn.btn.btn, .btn-group-sm > .btn.btn.btn:not(.btn-lg) {
  min-height: var(--ctl-h-md);
  padding-top: 0;
  padding-bottom: 0;
  /* build 2998: без отступов подпись прилипала к верхнему краю кнопки —
     ставим содержимое по центру по обеим осям */
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
