/* Вкладка «Клиенты» (справочник заказчиков). ТЗ private/docs/TZ-Klienty-v1.md, этап Э1.
   ⚠️ КАЖДЫЙ СЕЛЕКТОР ЗАСКОУПЛЕН ПОД #tab-clients — как zay-panel.css под #tab-requests и por-panel.css под
   #tab-tasks. :root/body/html не переопределяем: токены и общие классы (.btn, .chip, .msg, --primary,
   --danger…) берутся из app.css. */

/* ── Каркас панели ──
   Колонка раздела — общая (.tab-panel .wrap, wrap.css). Прежнее предупреждение «.wrap задаётся каждой
   панелью свой, и его легко забыть» сбылось второй раз: при новом разделе число разошлось опять. Теперь
   правило одно на все разделы, и забыть его нельзя. */
/* Реестр клиентов — рабочая таблица, поэтому на десктопе использует всю ширину справа от меню.
   Класс живёт только на экране списка: формы и настройки сохраняют общую читаемую колонку. */
@media (min-width: 1024px) {
    #tab-clients .wrap.crm-list-open { max-width: none; margin-left: 0; margin-right: 0; }
}
/* ⚠️ ШАПКА — ДОСЛОВНО КАК У «ЗАЯВОК» (zay-panel.css: .zay-head/.zay-title/.zay-add). Заголовок 18/500 и
   круглая кнопка 40px — не мой выбор, а повтор соседа: два раздела рядом с разными заголовками и разной
   формой кнопки читаются как разные продукты. Свой размер здесь означал бы, что при переходе между вкладками
   шапка прыгает. */
#tab-clients .crm-head { display: flex; align-items: center; gap: 10px; margin: 8px 0 14px; }
/* ⚠️ НИЖЕ ПОРОГА ДЕСКТОПА СВОЕЙ ШАПКИ У РАЗДЕЛА НЕТ — название, счётчик и кнопки уехали в строку оболочки
   (ShellHead). Узлы не удаляем: #crmSub читает десктопная шапка, а «+» и кнопка-меню ОТДАНЫ в слот и
   физически лежат там. Третий из семи разделов; до него — «Настройки» и «Поручения». */
@media (max-width: 1023px) {
    #tab-clients .crm-head { display: none; }
}
#tab-clients .crm-head__t { flex: 1; min-width: 0; }
#tab-clients .crm-title { font-size: 18px; font-weight: 500; margin: 0; }
#tab-clients .crm-sub { font-size: 13px; color: var(--muted); margin-top: 2px; }
/* ⚠️ ВТОРОЙ СЕЛЕКТОР — ДЛЯ СЛОТА ОБОЛОЧКИ: уехав туда, узел покидает #tab-clients, и заскоупленное
   правило до него не достаёт (кнопка становится системной серой). Тот же довод, что у .zay-add/.eh-add. */
#tab-clients .crm-add,
.shell-head__action .crm-add { flex: none; width: 40px; height: 40px; border: 0; border-radius: 50%;
    background: var(--primary); color: #fff; display: inline-flex; align-items: center; justify-content: center;
    cursor: pointer; box-shadow: 0 2px 6px rgba(79,70,229,.28); transition: transform .08s ease;
    font-size: 22px; line-height: 1; }
#tab-clients .crm-add:hover,
.shell-head__action .crm-add:hover { filter: brightness(1.06); }

/* Кнопка-меню «ещё» (только ниже порога десктопа) и её список: «Поля», «Импорт», «Балансы». */
/* ⚠️ 44px В СЛОТЕ — НИЖНЯЯ ГРАНИЦА ДЛЯ ПАЛЬЦА. В шапке раздела (десктоп) кнопка живёт рядом с текстовыми
   «Поля/Импорт/Балансы» и равняется по ним, а на телефоне она одна из четырёх органов строки контролов,
   и мимо 40px промахиваются. Правило для слота стоит ниже базового — при равной специфичности побеждает
   оно, и это единственное расхождение между двумя местами жизни узла. */
#tab-clients .crm-more,
.shell-head__action .crm-more { flex: none; width: 40px; height: 40px; padding: 0; border: 1px solid var(--border);
    border-radius: var(--btn-radius, 10px); background: var(--card, #fff); color: var(--muted); cursor: pointer;
    display: inline-flex; align-items: center; justify-content: center; font-size: 18px; line-height: 1; }
#tab-clients .crm-more[hidden],
.shell-head__action .crm-more[hidden] { display: none; }
#tab-clients .crm-more:hover,
.shell-head__action .crm-more:hover { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }
.shell-head__action .crm-more { width: 44px; height: 44px; }
#tab-clients .crm-moremenu,
.shell-header .crm-moremenu { position: absolute; right: 12px; top: 48px; z-index: 60; min-width: 168px; padding: 6px;
    display: flex; flex-direction: column; gap: 2px; background: var(--card, #fff);
    border: 1px solid var(--border-strong, rgba(17,24,39,.17)); border-radius: 12px;
    box-shadow: var(--shadow-pop, 0 12px 32px rgba(15,23,42,.16)); }
#tab-clients .crm-moremenu[hidden],
.shell-header .crm-moremenu[hidden] { display: none; }
#tab-clients .crm-moremenu__i,
.shell-header .crm-moremenu__i { display: flex; align-items: center; min-height: 44px; padding: 0 10px; border: 0;
    border-radius: var(--btn-radius, 10px); background: none; font: inherit; font-size: 14px; color: var(--text);
    text-align: left; cursor: pointer; }
#tab-clients .crm-moremenu__i:hover,
.shell-header .crm-moremenu__i:hover { background: var(--shelf, #eef0f7); }
/* Настройки таблицы и полей — компактные иконки; импорт и балансы остаются подписанными действиями. */
#tab-clients .crm-fieldsbtn { flex: none; border: 1px solid var(--border); background: var(--card, #fff); border-radius: var(--btn-radius, 10px);
    padding: 8px 12px; font: inherit; font-size: 13px; color: var(--text); cursor: pointer; }
#tab-clients .crm-fieldsbtn:hover { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-fieldsbtn--icon { width: 40px; height: 40px; padding: 0; display: inline-flex;
    align-items: center; justify-content: center; color: var(--muted); }
#tab-clients .crm-fieldsbtn--icon[hidden] { display: none; }

/* ── Настройка своего поля ── */
#tab-clients .crm-cf { border: 1px solid var(--border); border-radius: 10px; background: var(--card, #fff); padding: 10px;
    margin-bottom: 8px; }
#tab-clients .crm-cf__top { display: flex; gap: 8px; align-items: center; }
#tab-clients .crm-cf__name { flex: 1; min-width: 0; box-sizing: border-box; padding: 7px 10px; font: inherit;
    border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); }
#tab-clients .crm-cf__type { flex: none; padding: 7px 10px; font: inherit; border: 1px solid var(--border);
    border-radius: 8px; background: var(--bg); color: var(--text); }
#tab-clients .crm-cf__x { flex: none; border: 0; background: none; font-size: 16px; line-height: 1;
    color: var(--muted); cursor: pointer; padding: 4px 6px; }
#tab-clients .crm-cf__x:hover { color: var(--danger-ink); }
#tab-clients .crm-cf__req { display: flex; align-items: center; gap: 6px; margin-top: 8px; font-size: 13px;
    color: var(--text); }
#tab-clients .crm-cf textarea { width: 100%; box-sizing: border-box; margin-top: 8px; padding: 7px 10px;
    font: inherit; font-size: 14px; border: 1px solid var(--border); border-radius: 8px; resize: vertical; }
#tab-clients .crm-fld select[multiple] { min-height: 88px; }

/* ── БАЛАНС: системное поле в редакторе (ТЗ 7.1) ──
   Оформление читается как «это не поле ввода»: замок, приглушённая подпись, отдельный блок настроек.
   ⚠️ МОДИФИКАТОР НИЖЕ БАЗОВОГО ПРАВИЛА (.crm-cf выше): при равной специфичности побеждает нижнее, и
      поставь мы .crm-cf--bal раньше — фон не применился бы, а линтеры об этом молчат. */
#tab-clients .crm-cf--bal { background: var(--bg, #f4f6fb); }
#tab-clients .crm-cf__sys { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; margin-top: 8px;
    font-size: 13px; color: var(--muted); }
/* Замок — фигурой, без эмодзи и без картинки: дужка сверху, корпус снизу. */
#tab-clients .crm-cf__lock { flex: none; position: relative; width: 11px; height: 13px; }
#tab-clients .crm-cf__lock::before { content: ''; position: absolute; left: 2px; top: 0; width: 7px; height: 6px;
    border: 1.5px solid var(--muted); border-bottom: 0; border-radius: 4px 4px 0 0; box-sizing: border-box; }
#tab-clients .crm-cf__lock::after { content: ''; position: absolute; left: 0; bottom: 0; width: 11px; height: 8px;
    border-radius: 2px; background: var(--muted); }
#tab-clients .crm-cf__meta { font-weight: 600; color: var(--text); }
#tab-clients .crm-cf__sysnote { color: var(--muted); }
#tab-clients .crm-bal { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--border); }
#tab-clients .crm-bal__lbl { display: flex; align-items: center; gap: 8px; }
#tab-clients .crm-bal__sel,
#tab-clients .crm-bal__num { padding: 6px 10px; font: inherit; font-size: 13px; border: 1px solid var(--border);
    border-radius: 8px; background: var(--card, #fff); color: var(--text); }
#tab-clients .crm-bal__num { width: 110px; }

/* ── БАЛАНС В КАРТОЧКЕ И ЖУРНАЛ ДВИЖЕНИЙ (ТЗ 7.6) ──
   ⚠️ МОДИФИКАТОРЫ НИЖЕ БАЗОВЫХ ПРАВИЛ (.crm-f, .crm-fld — выше по файлу): при равной специфичности
      побеждает нижнее, и поставь мы их раньше — раскладка не применилась бы, а линтеры об этом молчат. */
#tab-clients .crm-f--bal .crm-f__l { display: flex; align-items: center; gap: 6px; }
#tab-clients .crm-f--bal .crm-f__v { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px; }
#tab-clients .crm-bal__sum { font-size: 16px; }
#tab-clients .crm-bal__exp { font-size: 12px; color: var(--warning-ink, #92400e); }
#tab-clients .crm-bal__note { font-size: 12px; color: var(--muted); }
#tab-clients .crm-bal__btn { margin-left: auto; padding: 5px 12px; font-size: 13px; }

#tab-clients .crm-fld--bal { display: flex; flex-direction: column; gap: 4px; }
#tab-clients .crm-fld__l { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--muted); }
#tab-clients .crm-fld__ro { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px;
    padding: 7px 10px; border: 1px dashed var(--border); border-radius: 8px; background: var(--bg, #f4f6fb);
    font-size: 14px; color: var(--text); }

/* Журнал движений: строка — дата, сумма, причина. Узкий экран складывает её в две (см. @media ниже). */
#tab-clients .crm-mv { display: block; }
#tab-clients .crm-mv__r { display: flex; gap: 10px; align-items: baseline; padding: 7px 0;
    border-bottom: 1px solid var(--border); }
#tab-clients .crm-mv__r:last-child { border-bottom: 0; }
#tab-clients .crm-mv__d { flex: 0 0 64px; font-size: 12px; color: var(--muted);
    font-variant-numeric: tabular-nums; }
#tab-clients .crm-mv__s { flex: 0 0 auto; min-width: 96px; text-align: right; font-size: 14px;
    font-weight: 600; font-variant-numeric: tabular-nums; }
#tab-clients .crm-mv__s--in { color: var(--success-ink); }
#tab-clients .crm-mv__s--out { color: var(--danger-ink); }
#tab-clients .crm-mv__t { flex: 1; min-width: 0; font-size: 13px; color: var(--text); word-break: break-word; }
#tab-clients .crm-mv__nowhy { color: var(--muted); }
#tab-clients .crm-mv__req { margin-left: 2px; }
#tab-clients .crm-mv__exp,
#tab-clients .crm-mv__who { display: block; font-size: 12px; }
#tab-clients .crm-mv__who { color: var(--muted); }
/* Срок сгорания — янтарным, тем же, что и в строке баланса: это предупреждение, а не пояснение. */
#tab-clients .crm-mv__exp { color: var(--warning-ink, #92400e); }

/* ── ОКНО ВОЗВРАТА ОСТАТКА ──
   Устройство и размеры — как у окна расписания (zay-panel.css: .zay-ov/.zay-modal): два окна на соседних
   экранах обязаны выглядеть одинаково, а свой набор правил дал бы две разные модалки. */
#tab-clients .crm-ov { position: fixed; inset: 0; z-index: 9500; display: none; align-items: center;
    justify-content: center; background: rgba(27, 31, 36, .5); padding: 16px; }
#tab-clients .crm-ov.is-open { display: flex; }
#tab-clients .crm-modal { background: var(--card, #fff); border-radius: 14px; max-width: 520px; width: 100%;
    box-shadow: 0 12px 40px rgba(0, 0, 0, .25); max-height: 92vh; overflow-y: auto; }
#tab-clients .crm-modal__head { display: flex; align-items: center; justify-content: space-between;
    padding: 16px 20px; border-bottom: 1px solid var(--border, #eaeef2); font-weight: 700; font-size: 16px; }
#tab-clients .crm-modal__close { border: 0; background: none; font-size: 22px; line-height: 1;
    color: var(--muted); cursor: pointer; padding: 0 4px; }
#tab-clients .crm-modal__body { padding: 16px 20px; }
#tab-clients .crm-modal__foot { padding: 0 20px 16px; }
#tab-clients .crm-modal__acts { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; }
#tab-clients .crm-bal__have { margin-bottom: 12px; font-size: 14px; color: var(--text); }
#tab-clients .crm-bal__f { display: block; margin-bottom: 12px; font-size: 13px; color: var(--muted); }
#tab-clients .crm-bal__f input,
#tab-clients .crm-bal__f textarea { display: block; width: 100%; box-sizing: border-box; margin-top: 4px;
    padding: 8px 10px; font: inherit; font-size: 14px; border: 1px solid var(--border);
    border-radius: var(--btn-radius, 10px); background: var(--bg); color: var(--text); resize: vertical; }
/* Предупреждение перед тем, как убрать поле со значениями. Браузерные диалоги в проекте запрещены —
   спрашиваем прямо в строке, чтобы видно было, о каком поле речь. */
#tab-clients .crm-cf__warn { margin-top: 8px; padding: 9px 10px; border-radius: 8px; font-size: 13px;
    line-height: 1.45; background: rgba(209, 36, 47, .07); color: var(--danger-ink); }
#tab-clients .crm-cf__warnacts { display: block; margin-top: 8px; }
#tab-clients .crm-cf__yes,
#tab-clients .crm-cf__no { border: 1px solid currentColor; background: none; border-radius: var(--btn-radius, 10px);
    padding: 5px 12px; font: inherit; font-size: 13px; cursor: pointer; margin-right: 8px; }
#tab-clients .crm-cf__yes { color: var(--danger-ink); }
#tab-clients .crm-cf__no { color: var(--muted); border-color: var(--border); }

/* ── Убранные поля ── */
/* Блок убранных полей: отступ от списка сверху. Черту и заголовок несёт .crm-sect внутри — тот же
   подзаголовок, что «Контакты · 1» в карточке, чтобы раздел читался одинаково в обоих местах. */
#tab-clients .crm-arch { margin-top: 22px; }
#tab-clients .crm-arch__row { display: flex; align-items: center; gap: 10px; padding: 9px 0;
    border-bottom: 1px solid var(--border); }
#tab-clients .crm-arch__t { flex: 1; min-width: 0; font-size: 14px; color: var(--text); }
#tab-clients .crm-arch__m { display: block; font-size: 12px; color: var(--muted); }
#tab-clients .crm-arch__btn { flex: none; }
/* ⚠️ ПАРНОЕ ПРАВИЛО К [hidden]: кнопку прячет showScreen атрибутом, а display от класса (1,1,0) сильнее
   браузерного [hidden] (0,1,0) — без этой строки «+» оставался висеть на карточке и в форме. Замерено:
   hidden=true, а вычисленный display=flex. Ниже базового правила: при равной силе побеждает нижнее. */
#tab-clients .crm-add[hidden] { display: none; }

/* ── Фильтры ── */
#tab-clients .crm-filters { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
#tab-clients .crm-list-tools { display: flex; align-items: stretch; gap: 8px; }
#tab-clients .crm-search { flex: 1; min-width: 180px; }
#tab-clients .crm-search input { width: 100%; height: 40px; box-sizing: border-box; padding: 9px 11px; font: inherit;
    border: 1px solid var(--border); border-radius: 10px; background: var(--card, #fff); color: var(--text); }
#tab-clients .crm-chips { display: flex; gap: 6px; flex-wrap: wrap; }
#tab-clients .crm-list-filter { position: relative; flex: none; }
#tab-clients .crm-filterbtn { height: 40px; max-width: 280px; padding: 0 34px 0 12px; border: 1px solid var(--border);
    border-radius: var(--btn-radius, 10px); background: var(--card, #fff); color: var(--text); font: inherit; font-size: 13px;
    text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; position: relative; }
#tab-clients .crm-filterbtn::after { content: ''; position: absolute; right: 13px; top: 15px; width: 7px; height: 7px;
    border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(45deg); }
#tab-clients .crm-filterbtn:hover { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-list-pop { position: absolute; z-index: 45; top: calc(100% + 6px); right: 0; width: min(320px, 88vw);
    max-height: 380px; overflow-y: auto; box-sizing: border-box; padding: 8px; border: 1px solid var(--border-strong, var(--border));
    border-radius: 12px; background: var(--card, #fff); box-shadow: var(--shadow-pop, 0 12px 32px rgba(15,23,42,.16)); }
#tab-clients .crm-list-pop[hidden] { display: none; }
#tab-clients .crm-list-pop--cols { position: fixed; top: 82px; right: clamp(16px, 5vw, 72px); width: min(360px, calc(100vw - 32px)); }
#tab-clients .crm-list-pop input[type="search"] { display: block; width: 100%; box-sizing: border-box; margin-bottom: 6px;
    padding: 8px 10px; border: 1px solid var(--border); border-radius: 9px; background: var(--bg, #f4f6fb);
    color: var(--text); font: inherit; font-size: 13px; }
#tab-clients .crm-list-pop__item { display: block; width: 100%; min-height: 38px; padding: 7px 9px; border: 0;
    border-radius: var(--btn-radius, 10px); background: none; color: var(--text); font: inherit; font-size: 13px; text-align: left; cursor: pointer; }
#tab-clients .crm-list-pop__item:hover { background: var(--bg, #f4f6fb); }
#tab-clients .crm-list-pop__item.is-active { background: var(--primary-soft, #eef2ff); color: var(--primary-ink, var(--primary)); font-weight: 600; }
#tab-clients .crm-list-pop__empty { padding: 10px; color: var(--muted); font-size: 13px; }
#tab-clients .crm-list-pop__check { display: grid; grid-template-columns: 20px 1fr auto; align-items: center; gap: 7px;
    min-height: 38px; padding: 5px 8px; border-radius: var(--btn-radius, 10px); cursor: pointer; }
#tab-clients .crm-list-pop__check:hover { background: var(--bg, #f4f6fb); }
#tab-clients .crm-list-pop__check input { margin: 0; accent-color: var(--primary); }
#tab-clients .crm-list-pop__check b { font-size: 13px; font-weight: 500; }
#tab-clients .crm-list-pop__check span { color: var(--muted); font-size: 11px; }
#tab-clients .crm-list-pop__check.is-locked { color: var(--muted); cursor: default; }

/* ── Список ── */
/* Группировка списка («Компании», «Контакты»): тот же заголовок секции (.crm-sect в разметке рядом), здесь
   только свой отступ — он делит список, а не коробку, и черта ему не нужна. */
#tab-clients .crm-grp { margin: 14px 0 6px; }
#tab-clients .crm-table__actions { display: flex; justify-content: flex-end; min-height: 28px; margin-bottom: 6px; }
#tab-clients .crm-table__merge { align-self: center; }
#tab-clients .crm-table-wrap { width: 100%; overflow-x: auto; border: 1px solid var(--border); border-radius: 12px;
    background: var(--card, #fff); -webkit-overflow-scrolling: touch; }
#tab-clients .crm-table { width: 100%; min-width: 860px; border-collapse: collapse; table-layout: auto; }
#tab-clients .crm-table th { min-width: 138px; padding: 0; background: var(--bg, #f4f6fb); border-bottom: 1px solid var(--border);
    color: var(--muted); font-size: 12px; font-weight: 500; text-align: left; white-space: nowrap; }
#tab-clients .crm-table th:first-child { min-width: 48px; width: 48px; }
#tab-clients .crm-table th:nth-child(2) { min-width: 220px; }
#tab-clients .crm-table th button { width: 100%; padding: 11px 12px; border: 0; background: none; color: inherit;
    font: inherit; font-weight: inherit; text-align: left; cursor: pointer; white-space: nowrap; }
#tab-clients .crm-table th button:hover,
#tab-clients .crm-table th button.is-active { color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-table td { max-width: 320px; padding: 11px 12px; border-bottom: 1px solid var(--border);
    color: var(--text); font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#tab-clients .crm-table tbody tr:last-child td { border-bottom: 0; }
#tab-clients .crm-table__row { cursor: pointer; outline: none; }
#tab-clients .crm-table__row:hover td,
#tab-clients .crm-table__row:focus td { background: var(--bg, #f4f6fb); }
#tab-clients .crm-table__row.is-selected td { background: var(--primary-soft, #f5f6ff); }
#tab-clients .crm-table td.crm-table__select { width: 48px; box-sizing: border-box; padding: 10px 13px; overflow: visible; }
#tab-clients .crm-table__client-main { display: flex; align-items: center; gap: 8px; min-width: 0; font-weight: 600; }
#tab-clients .crm-table__entity { display: inline-flex; flex: none; color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-table__mobile-type { display: none; margin: 3px 0 0 24px; color: var(--muted); font-size: 11px; }
#tab-clients .crm-table__empty { color: var(--muted); }
#tab-clients .crm-list-more { display: flex; justify-content: center; padding: 18px 0 4px; }
#tab-clients .crm-list-more .btn { min-width: 150px; }
/* Строки списка и карточек — .lrow из linked-row.css: элемент общий для трёх разделов, и здесь его больше
   нет намеренно. Заскоупленная под #tab-clients копия делала строку невидимой для «Заявок». */
#tab-clients .crm-empty { font-size: 13px; color: var(--muted); padding: 14px 2px; }
/* Запись удалена или нет сети: это не ошибка ввода, а состояние — отсюда спокойный тон и выход рядом,
   чтобы человек не искал, чем выбраться. Те же два класса, что у пустых состояний реестра
   (zay-panel.css:263) — одно правило на оба раздела, только скоуп свой. */
#tab-clients .crm-empty--calm { display: flex; flex-direction: column; align-items: center; gap: 10px;
                                text-align: center; padding: 22px 4px; }
#tab-clients .crm-empty-link { border: 0; background: none; padding: 0; font-family: inherit; font-size: 14px;
                               font-weight: 600; color: var(--primary-ink, var(--primary)); cursor: pointer; text-decoration: underline; }
#tab-clients .crm-empty-link:hover { filter: brightness(1.1); }
#tab-clients .crm-hint { font-size: 12px; color: var(--muted); margin-top: 6px; }

/* ── Карточка ── */
/* В нормальном состоянии .wrap остаётся общей центральной колонкой списка. У открытой карточки именно
   этот предок не должен быть containing block узкого экрана: drawer сам задаёт единственный отступ 14px.
   Иначе его right:0 заканчивается у 960px-колонки, а не у правой границы рабочей области. */
#tab-clients .wrap.crm-card-open { box-sizing: border-box; width: 100%; max-width: none; margin: 0; padding: 0; }
/* Карточка выезжает поверх списка. Подложка занимает ВЕСЬ экран, включая левое меню: первый клик в любом
   месте вне белой панели закрывает текущую модалку, а не выполняет действие в интерфейсе под ней. Сама
   панель сохраняет прежнюю рабочую ширину справа от меню через --crm-side-offset. */
#tab-clients #crmCardScreen,
#tab-clients .crm-tool-screen { --crm-side-offset: 0px; position: fixed; z-index: 50; top: 0; right: 0; bottom: 0; left: 0;
    display: flex; justify-content: flex-end; background: rgba(15, 23, 42, .18); overflow-x: clip; overflow-y: hidden; }
#tab-clients #crmCardScreen[hidden],
#tab-clients .crm-tool-screen[hidden] { display: none; }
@keyframes crmDrawerIn { from { transform: translateX(100%); } to { transform: translateX(0); } }
@keyframes crmDrawerOut { from { transform: translateX(0); } to { transform: translateX(100%); } }
@media (prefers-reduced-motion: reduce) {
    #tab-clients .crm-drawer, #tab-clients .crm-chat-modal { animation: none !important; }
}
@media (min-width: 1024px) {
    body.side-nav-active #tab-clients #crmCardScreen,
    body.side-nav-active #tab-clients .crm-tool-screen { --crm-side-offset: 248px; }
    html.side-collapsed body.side-nav-active #tab-clients #crmCardScreen,
    html.side-collapsed body.side-nav-active #tab-clients .crm-tool-screen { --crm-side-offset: 88px; }
}
#tab-clients .crm-drawer { box-sizing: border-box; width: calc(100% - var(--crm-side-offset) - clamp(24px, 3vw, 48px)); height: 100%;
    overflow-y: auto; padding: 24px clamp(18px, 4vw, 56px) 36px; background: var(--card, #fff);
    box-shadow: -12px 0 32px rgba(15, 23, 42, .16); animation: crmDrawerIn .24s ease-out;
    -webkit-overflow-scrolling: touch; }
#tab-clients .crm-drawer.crm-drawer--pending { animation: none; transform: translateX(100%); }
#tab-clients .crm-drawer.is-closing { pointer-events: none; animation: crmDrawerOut .22s ease-in forwards; }
#tab-clients .crm-drawer__close { flex: none; }
/* Все блоки карточки живут в одной ширине drawer. Раньше max-width оставлял справа пустую полосу и
   требовал точечно растягивать «Основную информацию», от чего остальные части оставались уже неё. */
#tab-clients .crm-drawer__body { box-sizing: border-box; width: 100%; max-width: none; margin: 0; }
/* Карточка клиента может быть вторым модальным слоем над карточкой заявки. Сам раздел не переключаем:
   показываем только его уже существующий drawer, поэтому после закрытия заявка остаётся на месте. */
#tab-clients.crm-cross-open { display: block !important; position: fixed; z-index: 70; inset: 0;
    width: 100%; max-width: none; margin: 0; padding: 0; pointer-events: none; background: transparent; }
#tab-clients.crm-cross-open .crm-head, #tab-clients.crm-cross-open #crmMsg { display: none !important; }
#tab-clients.crm-cross-open #crmCardScreen { z-index: 71; pointer-events: auto; }
#tab-clients .crm-tool-drawer .crm-drawer__body { min-height: 100%; display: flex; flex-direction: column; }
#tab-clients .crm-tool__head { flex: none; }
#tab-clients .crm-tool__content { flex: 1; min-width: 0; width: 100%; }
#tab-clients .crm-tool-drawer .crm-form__acts { position: sticky; z-index: 2; bottom: 0; margin: 20px -1px -1px;
    padding: 14px 1px 1px; background: linear-gradient(to bottom, rgba(255,255,255,0), var(--card, #fff) 12px); }
#tab-clients .crm-card__head { display: flex; align-items: flex-start; gap: 12px; min-height: 40px; margin: 0 0 24px; }
#tab-clients .crm-card__heading { flex: 1; min-width: 0; }
/* ⚠️ 19/600 — ЭТАЛОН ЗАГОЛОВКА ЭКРАНА ПО ВСЕМ РАЗДЕЛАМ. Было 18/700; в «Заявках» (.zay-detail-title,
   .zay-form-title) и «Поручениях» (.task__title) — 19/600. Три против двух, и менять решили меньшинство. */
#tab-clients .crm-card__ttl { min-width: 0; margin: 0; font-size: 19px; font-weight: 600; line-height: 1.35; color: var(--text); }
#tab-clients .crm-card__sub { margin-top: 4px; font-size: 14px; color: var(--muted); }
/* ⚠️ ПОМЕТКА «В АРХИВЕ» — СВОЁ ИМЯ, И ЭТО ПОЧИНКА. Она звалась .crm-arch, как и блок убранных полей на
   экране настройки: правила равной специфичности, побеждало нижнее — то есть ЭТО, — и заголовок «Убранные
   поля» рисовался пилюлей бейджа, теряя свой отступ сверху. Второй такой случай подряд (первым был
   .crm-sub), и лечится так же: одно имя — один смысл. Имя про СОСТОЯНИЕ записи, а не про экран архива,
   поэтому с семейством .crm-arch__* больше не спорит.
   ⚠️ БЛИЗНЕЦ ОБЩЕГО .badge--off (app.css:674), но НЕ копия: у того паддинг 2px 9px и цвет #64748b. Свести
   их — поменять вид, а это отдельное решение; пока держим своё правило с прежними значениями. */
#tab-clients .crm-off { flex: none; font-size: 12px; font-weight: 600; padding: 2px 8px; border-radius: 999px;
    background: var(--surface-2, #eef0f4); color: var(--muted, #475569); }
/* ⚠️ ОДНА КОРОБКА НА ВСЮ КАРТОЧКУ — ОДНИМ ПРАВИЛОМ, А НЕ ДВУМЯ С ОДИНАКОВЫМИ ЗНАЧЕНИЯМИ. .crm-card__b —
   реквизиты, .crm-box — файлы и переписка; вид у них обязан совпадать, и совпадает он потому, что задан
   здесь один раз. Второе правило «с теми же значениями» разъехалось бы при первой же правке радиуса. */
#tab-clients .crm-card__b,
#tab-clients .crm-box { display: flex; flex-direction: column; gap: 12px; background: var(--card, #fff);
    border: 1px solid var(--border); border-radius: 12px; padding: 0; overflow: hidden; }
/* Акцентные карточки получают лёгкий «бумажный» объём без тяжёлой серой тени. Второй размытый слой
   отделяет блок от фона, а короткий ненавязчивый подъём на hover помогает вести взгляд по длинной карточке. */
#tab-clients .crm-card__b { box-shadow: 3px 3px 0 rgba(15, 23, 42, .09), 0 8px 22px rgba(15, 23, 42, .045);
    transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease; }
@media (hover: hover) and (pointer: fine) {
    #tab-clients .crm-card__b:hover { transform: translateY(-2px);
        box-shadow: 4px 6px 0 rgba(15, 23, 42, .10), 0 13px 28px rgba(15, 23, 42, .065); }
}
@media (prefers-reduced-motion: reduce) {
    #tab-clients .crm-card__b { transition: none; }
    #tab-clients .crm-card__b:hover { transform: none; }
}
#tab-clients .crm-card__main { border-left: 4px solid var(--info-border, #2563eb); gap: 16px; padding: 20px; }
#tab-clients .crm-card__main.is-editing { box-shadow: 3px 3px 0 rgba(37, 99, 235, .13), 0 10px 26px rgba(37, 99, 235, .07); }
#tab-clients .crm-card__edit-actions { display: flex; align-items: center; justify-content: flex-end; gap: 10px;
    margin-top: 4px; padding-top: 16px; border-top: 1px solid var(--border); }
#tab-clients .crm-card__edit-error { flex: 1; min-width: 0; color: var(--danger-ink); font-size: 13px; }
#tab-clients .crm-card__main-title { color: var(--text); font-size: 17px; font-weight: 600; margin: 0; }
#tab-clients .crm-card__info-title { padding-top: 16px; border-top: 1px solid var(--border); color: var(--text);
    font-size: 15px; font-weight: 600; }
#tab-clients .crm-card__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px 28px; }
#tab-clients .crm-card__grid--custom { padding-top: 16px; border-top: 1px solid var(--border); }
#tab-clients .crm-card__important-title { font-size: 15px; font-weight: 600; color: var(--text); }
#tab-clients .crm-card__important { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
#tab-clients .crm-card__important-cell { min-width: 0; padding: 12px; border: 1px solid var(--border); border-left: 3px solid var(--primary); border-radius: 9px; background: var(--bg); display: flex; flex-direction: column; gap: 4px; }
#tab-clients .crm-card__important-cell span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--muted); font-size: 13px; }
#tab-clients .crm-card__important-value { appearance: none; overflow: hidden; padding: 0; border: 0; background: transparent; text-overflow: ellipsis; white-space: nowrap; font: inherit; font-size: 15px; font-weight: 600; color: var(--text); text-align: left; cursor: text; }
#tab-clients .crm-card__important-value:hover { color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-card__important-cell .crm-f__err { color: var(--danger-ink); white-space: normal; }
#tab-clients .crm-card__important-cell:nth-child(4n+1) { border-left-color: #168b69; }
#tab-clients .crm-card__important-cell:nth-child(4n+3) { border-left-color: #d97706; }
#tab-clients .crm-card__important-cell:nth-child(4n) { border-left-color: #0f8c8c; }
#tab-clients .crm-card__custom-section { display: flex; flex-direction: column; gap: 0; }
#tab-clients .crm-card__stack { display: flex; flex-direction: column; gap: 16px; }
#tab-clients .crm-card__stack > #crmDupHint:empty { display: none; }
#tab-clients .crm-card-layout { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; align-items: stretch; }
#tab-clients .crm-card-layout__item { min-width: 0; display: flex; flex-direction: column; gap: 16px; }
#tab-clients .crm-card-layout__item.is-wide { grid-column: 1 / -1; }
#tab-clients .crm-card-layout__item > .crm-card__b { height: 100%; box-sizing: border-box; }
#tab-clients .crm-card-layout-editor { display: flex; flex-direction: column; gap: 16px; padding: 20px;
    border: 1px solid var(--primary-border, #bfd2f4); border-left: 4px solid var(--primary); border-radius: 12px; background: var(--primary-soft, #f8fbff);
    box-shadow: 3px 3px 0 rgba(37, 99, 235, .08), 0 8px 22px rgba(15, 23, 42, .04); }
#tab-clients .crm-card-layout-editor__head h3 { margin: 0; color: var(--text); font-size: 17px; font-weight: 600; }
#tab-clients .crm-card-layout-editor__head p { margin: 5px 0 0; color: var(--muted); font-size: 13px; }
#tab-clients .crm-card-layout-editor__list { display: flex; flex-direction: column; gap: 8px; }
#tab-clients .crm-card-layout-editor__row { display: flex; align-items: center; gap: 12px; min-height: 48px; padding: 8px 12px;
    border: 1px solid var(--border); border-radius: 9px; background: var(--card, #fff); cursor: grab; transition: border-color .15s ease, box-shadow .15s ease, opacity .15s ease; }
#tab-clients .crm-card-layout-editor__row:hover { border-color: var(--info-border, #b6c7e5); box-shadow: 0 4px 12px rgba(15, 23, 42, .05); }
#tab-clients .crm-card-layout-editor__row.is-dragging { opacity: .45; cursor: grabbing; }
#tab-clients .crm-card-layout-editor__drag { display: inline-flex; color: var(--muted); }
#tab-clients .crm-card-layout-editor__label { flex: 1; min-width: 0; color: var(--text); font-size: 15px; font-weight: 600; }
#tab-clients .crm-card-layout-editor__row select { flex: none; min-width: 132px; height: 34px; padding: 0 28px 0 10px;
    border: 1px solid var(--border); border-radius: var(--btn-radius, 10px); background: var(--card, #fff); color: var(--text); font: inherit; font-size: 13px; }
#tab-clients .crm-card-layout-editor__toggle { display: inline-flex; align-items: center; gap: 8px; color: var(--muted); font-size: 13px; cursor: pointer; }
#tab-clients .crm-card-layout-editor__toggle input { width: 16px; height: 16px; margin: 0; accent-color: var(--primary); }
#tab-clients .crm-card-layout-editor__actions { display: flex; align-items: center; justify-content: flex-end; gap: 10px;
    padding-top: 4px; }
#tab-clients .crm-work-card { min-height: 158px; }
#tab-clients .crm-card__fold { border-left: 4px solid var(--info-border, #2563eb); }
#tab-clients .crm-work-card { border-left-color: #d97706; }
#tab-clients .crm-card__notes-block,
#tab-clients .crm-chat-summary { border-left-color: #7c3aed; }
#tab-clients .crm-card__files-block,
#tab-clients .crm-card__history { border-left-color: #0f8c8c; }
#tab-clients .crm-card__fold-head { box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; min-height: 58px; padding: 16px 20px;
    border: 0; border-bottom: 1px solid var(--border); background: var(--card, #fff); color: var(--text); font: inherit; font-size: 16px; font-weight: 600; text-align: left; cursor: pointer; }
#tab-clients .crm-card__fold-head[aria-expanded="false"] { border-bottom-color: transparent; }
#tab-clients .crm-card__fold-head[aria-expanded="false"] .crm-card__history-chev { transform: rotate(-90deg); }
#tab-clients .crm-card__fold-body { display: flex; flex-direction: column; gap: 12px; padding: 20px; }
#tab-clients .crm-card__fold-body[hidden], #tab-clients .crm-card__more-body[hidden] { display: none; }
#tab-clients .crm-card__fold > .crm-grp__act { position: absolute; }
#tab-clients .crm-card__fold { position: relative; }
#tab-clients .crm-card__fold > .crm-grp__act { top: 13px; right: 48px; z-index: 2; margin: 0; }
#tab-clients .crm-card__fold:has(> .crm-grp__act) > .crm-card__fold-head { padding-right: 180px; }
#tab-clients .crm-card__fold .lrows { margin: 0; }
#tab-clients .crm-entity-groups { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
#tab-clients .crm-entity-group { min-width: 0; }
#tab-clients .crm-entity-group__head { display: flex; align-items: center; gap: 10px; margin: 0 2px 8px; }
#tab-clients .crm-entity-group__name { display: inline-flex; align-items: center; gap: 8px; min-width: 0; color: var(--text); font-size: 14px; font-weight: 600; }
#tab-clients .crm-entity-group__link { color: inherit; text-decoration: none; }
#tab-clients .crm-entity-group__link:hover { color: var(--primary); text-decoration: underline; }
#tab-clients .crm-entity-group__dot { width: 9px; height: 9px; flex: none; border-radius: 50%; background: var(--crm-entity-color, var(--primary)); }
#tab-clients .crm-entity-group__count { margin-left: auto; color: var(--muted); font-size: 12px; white-space: nowrap; }
#tab-clients .crm-entity-table-wrap { display: block; width: 100%; max-width: 100%; min-width: 0; overflow: auto; border-radius: 12px; background: #fff;
    box-shadow: 0 1px 4px rgba(15,23,42,.10), 0 1px 2px rgba(15,23,42,.06); -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
#tab-clients .crm-entity-table { width: max-content; min-width: 100%; table-layout: auto; border-collapse: separate; border-spacing: 0; font-size: 13px; }
#tab-clients .crm-entity-th { position: sticky; top: 0; z-index: 2; padding: 10px 12px; background: #f6f8fc; color: var(--muted);
    font-weight: 600; text-align: left; white-space: nowrap; box-shadow: inset 0 -1px 0 var(--border); }
#tab-clients .crm-entity-td { max-width: none; padding: 9px 12px; background: #fff; color: var(--text); vertical-align: top; white-space: nowrap;
    box-shadow: inset 0 -1px 0 var(--border); }
#tab-clients .crm-entity-td:first-child { position: sticky; left: 0; z-index: 1; font-weight: 600; box-shadow: inset 0 -1px 0 var(--border), 1px 0 0 var(--border); }
#tab-clients .crm-entity-cell { display: inline-block; width: max-content; max-width: none; overflow: visible; text-overflow: clip; white-space: nowrap; }
#tab-clients .crm-entity-row:hover .crm-entity-td { background: #fafbff; }
#tab-clients .crm-entity-row.is-deleted .crm-entity-td { opacity: .62; }
#tab-clients .crm-entity-deleted { display: inline-block; margin-left: 8px; padding: 2px 7px; border-radius: 999px; background: #fff1f0; color: #b42318;
    font-size: 11px; font-weight: 600; white-space: nowrap; }
#tab-clients .crm-card__more-fields { padding-top: 4px; border-top: 1px solid var(--border); }
#tab-clients .crm-card__more-toggle, #tab-clients .crm-card__manage-fields { appearance: none; border: 0; padding: 0; background: transparent; color: var(--primary-ink, var(--primary)); font: inherit; font-size: 15px; cursor: pointer; text-align: left; }
#tab-clients .crm-card__more-body { display: flex; flex-direction: column; gap: 10px; margin-top: 16px; }
#tab-clients .crm-card__field-group { border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
#tab-clients .crm-card__field-group-head { display: flex; width: 100%; align-items: center; justify-content: space-between; padding: 12px 14px; border: 0; background: var(--card, #fff); color: var(--text); font: inherit; font-size: 15px; cursor: pointer; text-align: left; }
#tab-clients .crm-card__field-group-head span:last-child { color: var(--muted); font-size: 13px; }
#tab-clients .crm-card__field-group-body { padding: 0 14px 14px; border-top: 1px solid var(--border); }
#tab-clients .crm-card__field-group-body .crm-card__grid { padding-top: 14px; }
#tab-clients .crm-card__manage-fields { margin-top: 10px; }
#tab-clients .crm-company-contacts { margin-top: 4px; border-top: 1px solid var(--border); border-left: 0; }
#tab-clients .crm-company-contacts .crm-card__fold-head { min-height: 52px; padding: 16px 0; }
#tab-clients .crm-company-contacts .crm-card__fold-body { padding: 16px 0 0; }
#tab-clients .crm-company-contacts.crm-card__fold > .crm-grp__act { right: 30px; }
#tab-clients .crm-company-contacts.crm-card__fold:has(> .crm-grp__act) > .crm-card__fold-head { padding-right: 140px; }
#tab-clients .crm-card__layout-editor { display: flex; flex-direction: column; gap: 10px; margin-top: 8px; padding: 16px;
    border: 1px solid var(--border); border-radius: 10px; background: var(--surface-muted, #f8fafc); }
#tab-clients .crm-card__layout-editor[hidden] { display: none; }
#tab-clients .crm-card__layout-title { margin-top: 4px; color: var(--text); font-size: 14px; font-weight: 600; }
#tab-clients .crm-card__layout-section { display: flex; align-items: center; gap: 8px; min-height: 38px; padding: 6px 8px;
    border: 1px solid var(--border); border-radius: 8px; background: var(--card, #fff); }
#tab-clients .crm-card__layout-section--system { padding-left: 34px; color: var(--muted); }
#tab-clients .crm-card__layout-drag { flex: none; color: var(--muted); cursor: grab; font-size: 18px; }
#tab-clients .crm-card__layout-section input { flex: 1; min-width: 0; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; }
#tab-clients .crm-card__layout-confirm { margin-left: auto; color: var(--danger-ink); font-size: 12px; }
#tab-clients .crm-card__layout-confirm button { border: 0; background: transparent; color: inherit; cursor: pointer; font: inherit; text-decoration: underline; }
#tab-clients .crm-card__layout-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 12px; }
#tab-clients .crm-card__layout-fields > .crm-card__layout-field { display: flex; flex-direction: column; gap: 4px; color: var(--muted); font-size: 12px; }
#tab-clients .crm-card__layout-controls { display: flex; align-items: center; gap: 8px; }
#tab-clients .crm-card__layout-fields select { width: 100%; min-width: 0; padding: 7px 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--card, #fff); color: var(--text); font: inherit; }
#tab-clients .crm-card__layout-important { flex: none; display: inline-flex; align-items: center; gap: 4px; color: var(--text); white-space: nowrap; }
#tab-clients .crm-card__layout-error { min-height: 16px; color: var(--danger-ink); font-size: 12px; }
#tab-clients .crm-card__layout-actions { display: flex; gap: 8px; }
#tab-clients .crm-work-card .crm-sect { color: var(--text); font-size: 16px; text-transform: none; letter-spacing: 0; }
#tab-clients .crm-work-card .crm-empty { margin: auto 0; }
#tab-clients .crm-card__history { gap: 0; }
#tab-clients .crm-card__history-chev { display: inline-flex; color: var(--muted); transition: transform .15s ease; }
#tab-clients .crm-card__history-body { margin: 0; }
#tab-clients .crm-card__history-list { display: flex; flex-direction: column; gap: 8px; }
#tab-clients .crm-card__history-row { display: flex; flex-direction: column; gap: 3px; padding: 9px 11px; border: 1px solid var(--border, #eaeef2);
    border-radius: 10px; background: var(--surface-hover, #f6f8fa); font-size: 13px; line-height: 1.45; color: var(--text); overflow-wrap: break-word; }
#tab-clients .crm-card__history-who { color: var(--muted); font-size: 12px; }
@media (max-width: 760px) {
    #tab-clients .crm-drawer { width: calc(100% - 18px); padding: 16px 14px 28px; }
    #tab-clients .crm-card-layout { grid-template-columns: 1fr; }
    #tab-clients .crm-card-layout__item.is-wide { grid-column: auto; }
    #tab-clients .crm-card__main { padding: 16px; }
    #tab-clients .crm-card__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 16px; }
    #tab-clients .crm-card__important { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #tab-clients .crm-card__layout-fields { grid-template-columns: 1fr; }
}
#tab-clients .crm-f__edit { appearance: none; border: 0; padding: 0; background: transparent; color: var(--text); font: inherit; text-align: left; cursor: text; }
#tab-clients .crm-f__edit:hover { color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-f__input { width: 100%; box-sizing: border-box; border: 1px solid var(--primary); border-radius: 7px; padding: 4px 7px; color: var(--text); background: var(--card, #fff); font: inherit; }
#tab-clients textarea.crm-f__input { min-height: 72px; resize: vertical; }
#tab-clients .crm-f__picker { position: relative; min-width: 0; }
#tab-clients .crm-f__picker .empp-input { min-height: 34px; }
#tab-clients .crm-f__err { color: var(--danger-ink); font-size: 12px; line-height: 1.35; }
#tab-clients .crm-chat-summary { gap: 0; }
#tab-clients .crm-chat-summary__channels { display: grid;
    grid-template-columns: repeat(var(--crm-chat-cols, 1), minmax(0, 1fr)); gap: 10px; }
#tab-clients .crm-chat-summary__row { appearance: none; display: flex; align-items: center; min-width: 0; width: 100%; gap: 11px;
    min-height: 58px; padding: 10px 14px; border: 1px solid var(--border); border-radius: var(--btn-radius, 10px);
    background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer;
    transition: background .16s ease, border-color .16s ease, transform .16s ease; }
#tab-clients .crm-chat-summary__row:hover,
#tab-clients .crm-chat-summary__row:focus { border-color: var(--info-border, #b6c7e5); background: var(--bg, #f4f6fb); }
#tab-clients .crm-chat-summary__row:hover { color: var(--primary-ink, var(--primary)); transform: translateY(-1px); }
#tab-clients .crm-chat-summary__row:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }
#tab-clients .crm-chat-summary__mark { display: inline-flex; align-items: center; justify-content: center; flex: none;
    width: 34px; height: 34px; border-radius: 50%; background: var(--primary-soft, #eef4ff); color: var(--primary-ink, var(--primary));
    font-size: 11px; font-weight: 600; letter-spacing: -.02em; }
#tab-clients .crm-chat-summary__channel { min-width: 0; overflow: hidden; flex: 1; color: var(--text);
    font-size: 14px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
#tab-clients .crm-chat-summary__go { display: inline-flex; flex: none; color: var(--muted); }
#tab-clients .crm-chat-ov { align-items: stretch; justify-content: flex-end; overflow-x: clip; padding: 0; }
#tab-clients .crm-chat-modal { width: 76vw; max-width: none; max-height: none; height: 100%; border-radius: 0;
    display: flex; flex-direction: column; overflow: hidden; animation: crmChatDrawerIn .24s ease-out; }
#tab-clients .crm-chat-modal.is-closing { pointer-events: none; animation: crmDrawerOut .22s ease-in forwards; }
#tab-clients .crm-chat-modal__head { flex: none; margin: 0; padding: 20px; border-bottom: 1px solid var(--border); }
#tab-clients .crm-chat-modal .crm-modal__body { display: flex; flex: 1; flex-direction: column; min-height: 0;
    gap: 12px; overflow: hidden; padding: 20px; }
#tab-clients .crm-chat-modal .crm-box { flex: 1; min-height: 0; }
#tab-clients .crm-chat-modal .tc-scroll-wrap { display: flex; flex: 1; min-height: 0; }
#tab-clients .crm-chat-modal .tc-scroll { flex: 1; max-height: none; }
@keyframes crmChatDrawerIn { from { transform: translateX(100%); } to { transform: translateX(0); } }
@media (max-width: 760px) { #tab-clients .crm-chat-modal { width: 100%; } }
#tab-clients .crm-card__notes-block [data-crm-note-add][hidden] { display: none; }
@media (max-width: 600px) {
    #tab-clients .crm-chat-summary__channels { grid-template-columns: 1fr; }
}

/* Поиск дублей встроен в панель клиентов; общий z-index ниже ui-dialogs, чтобы подтверждение оставалось поверх. */
#tab-clients .crm-dedup-overlay { position: fixed; inset: var(--crm-dedup-top, 0px) 0 0; z-index: 9550; display: flex; align-items: stretch; justify-content: flex-end;
    box-sizing: border-box; padding: 0; color: var(--text, #24292f); }
#tab-clients .crm-dedup-overlay[hidden], #tab-clients .crm-dedup-detail[hidden] { display: none; }
#tab-clients .crm-dedup-backdrop { position: absolute; inset: 0; background: rgba(20, 24, 31, .58); }
#tab-clients .crm-dedup-panel { position: relative; z-index: 1; display: flex; flex-direction: column;
    max-height: 100%; min-height: 0; overflow: hidden; padding: 0; border: 0; border-radius: 0; }
#tab-clients .crm-dedup-panel > .crm-dedup-head, #tab-clients .crm-dedup-detail__panel > .crm-dedup-head { display: flex; align-items: flex-start;
    gap: 12px; padding: 14px 18px; border-bottom: 1px solid var(--border, #d0d7de); }
#tab-clients .crm-dedup-head h2 { margin: 0; font-size: 19px; line-height: 1.35; }
#tab-clients .crm-dedup-head p { margin: 3px 0 0; color: var(--muted, #667085); font-size: 13px; }
#tab-clients .crm-dedup-body { flex: 1; min-height: 0; overflow: auto; padding: 12px 16px 16px; }
#tab-clients .crm-dedup-controls, #tab-clients .crm-dedup-group, #tab-clients .crm-dedup-exec-list, #tab-clients .crm-dedup-empty { box-sizing: border-box; border: 1px solid var(--border, #d0d7de);
    border-radius: 12px; background: var(--card, #fff); }
#tab-clients .crm-dedup-selection { box-sizing: border-box; border: 1px solid var(--border, #d0d7de); border-radius: 12px; background: var(--primary-soft, #eef2ff); }
#tab-clients .crm-dedup-gate { box-sizing: border-box; border: 1px solid var(--border, #d0d7de); border-radius: 12px; background: var(--surface-2, #f6f8fa); }
#tab-clients .crm-dedup-controls { padding: 10px 12px; }
#tab-clients .crm-dedup-searchbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0 16px; align-items: center; }
#tab-clients .crm-dedup-start { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; grid-column: 1; grid-row: 1; }
#tab-clients .crm-dedup-start .btn { min-height: 36px; }
#tab-clients .crm-dedup-start label { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
#tab-clients .crm-dedup-start input[type=checkbox], #tab-clients .crm-dedup-group__check input { width: 18px; height: 18px; margin: 0; accent-color: var(--primary, #4f46e5); }
#tab-clients .crm-dedup-gate { margin-top: 10px; padding: 10px 12px; color: var(--muted, #667085); }
#tab-clients .crm-dedup-review-launch { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px; margin-top: 10px; padding: 12px; border: 1px solid var(--warning-border, #e5b343); border-radius: 12px; background: var(--warning-soft, #fff8e1); }
#tab-clients .crm-dedup-review-launch[hidden], #tab-clients .crm-dedup-review[hidden] { display: none; }
#tab-clients .crm-dedup-review-launch p, #tab-clients .crm-dedup-review__head p { margin: 4px 0 0; color: var(--muted, #667085); font-size: 13px; }
#tab-clients .crm-dedup-review-launch .btn { min-height: 40px; }
#tab-clients .crm-dedup-review { margin-top: 10px; padding: 12px; border: 1px solid var(--border, #d0d7de); border-radius: 12px; background: var(--surface, #fff); }
#tab-clients .crm-dedup-review__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
#tab-clients .crm-dedup-review__actions { display: flex; flex-wrap: wrap; gap: 8px; }
#tab-clients .crm-dedup-review-parity { margin: 8px 0 12px; padding: 10px 12px; border-radius: 9px; font-size: 13px; line-height: 1.5; overflow-wrap: anywhere; }
#tab-clients .crm-dedup-review-parity.is-clean { color: var(--success-ink, #166534); background: var(--success-soft, #f0fdf4); }
#tab-clients .crm-dedup-review-parity.is-blocked { color: var(--danger, #cf222e); background: var(--danger-soft, #fff1f0); }
#tab-clients .crm-dedup-review__head h3 { margin: 0; font-size: 16px; }
#tab-clients .crm-dedup-review-item { margin: 0 0 10px; padding: 12px; border: 1px solid var(--border, #d0d7de); border-radius: 10px; }
#tab-clients .crm-dedup-review-item > header { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 6px; }
#tab-clients .crm-dedup-review-item > header span, #tab-clients .crm-dedup-review-identity small { color: var(--muted, #667085); font-size: 12px; }
#tab-clients .crm-dedup-review-identity { display: grid; gap: 4px; margin: 9px 0; padding: 9px; border-radius: 8px; background: var(--surface-2, #f6f8fa); }
#tab-clients .crm-dedup-review-identity code { overflow-wrap: anywhere; font-size: 13px; }
#tab-clients .crm-dedup-review-card { display: flex; align-items: flex-start; gap: 8px; min-width: 0; padding: 10px; border: 1px solid var(--border, #d0d7de); border-radius: var(--btn-radius, 10px); background: var(--card, #fff); cursor: pointer; }
#tab-clients .crm-dedup-review-card:has(input:checked) { border-color: var(--primary, #4f46e5); background: var(--primary-soft, #eef2ff); }
#tab-clients .crm-dedup-review-card:has(input:disabled) { opacity: .62; cursor: default; }
#tab-clients .crm-dedup-review-card input { flex: none; width: 18px; height: 18px; margin: 1px 0 0; accent-color: var(--primary, #4f46e5); }
#tab-clients .crm-dedup-review-card > span { display: grid; gap: 4px; min-width: 0; overflow-wrap: anywhere; }
#tab-clients .crm-dedup-review-card small, #tab-clients .crm-dedup-review-dialog small { color: var(--muted, #667085); font-size: 12px; overflow-wrap: anywhere; }
#tab-clients .crm-dedup-review-card .crm-dedup-review-role { color: var(--primary, #4f46e5); font-weight: 600; }
#tab-clients .crm-dedup-review-side { color: var(--primary, #4f46e5); font-weight: 600; }
#tab-clients .crm-dedup-review-dialogs { display: grid; gap: 7px; margin: 10px 0; }
#tab-clients .crm-dedup-review-dialog { display: grid; gap: 3px; padding: 8px 10px; border-left: 3px solid var(--primary, #4f46e5); background: var(--surface-2, #f6f8fa); overflow-wrap: anywhere; }
#tab-clients .crm-dedup-review-choices { display: grid; gap: 7px; min-width: 0; margin: 10px 0; padding: 8px; border: 1px solid var(--border, #d0d7de); border-radius: 9px; }
#tab-clients .crm-dedup-review-choices legend { padding: 0 4px; font-size: 13px; font-weight: 600; }
#tab-clients .crm-dedup-review-note { display: grid; gap: 5px; margin: 9px 0; font-size: 13px; }
#tab-clients .crm-dedup-review-note textarea { box-sizing: border-box; width: 100%; min-height: 58px; padding: 8px; border: 1px solid var(--border, #d0d7de); border-radius: var(--btn-radius, 10px); color: var(--text); background: var(--card, #fff); font: inherit; resize: vertical; }
#tab-clients .crm-dedup-review-blocked { padding: 10px; border-radius: 8px; color: var(--danger, #cf222e); background: var(--danger-soft, #fff1f0); }
#tab-clients .crm-dedup-review__pages { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin-top: 10px; }
#tab-clients .crm-dedup-job { display: contents; }
#tab-clients .crm-dedup-job__line { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px 10px; grid-column: 2; grid-row: 1; font-size: 13px; }
#tab-clients .crm-dedup-job__line span { color: var(--muted, #667085); font-variant-numeric: tabular-nums; }
#tab-clients .crm-dedup-progress { grid-column: 1 / -1; height: 5px; margin: 8px 0; overflow: hidden; border-radius: 8px; background: var(--surface-2, #eaeef2); }
#tab-clients .crm-dedup-progress span { display: block; height: 100%; width: 0; border-radius: inherit; background: var(--primary, #4f46e5); transition: width .2s ease; }
#tab-clients .crm-dedup-job__controls, #tab-clients .crm-dedup-toolbar, #tab-clients .crm-dedup-pages { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
#tab-clients .crm-dedup-job__controls, #tab-clients .crm-dedup-job > .crm-hint { grid-column: 1 / -1; margin: 0 0 8px; }
#tab-clients .crm-dedup-job__controls:not(:has(button:not([hidden]))), #tab-clients .crm-dedup-job > .crm-hint:empty { display: none; }
#tab-clients .crm-dedup-filterbar { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 16px; }
#tab-clients .crm-dedup-toolbar { flex: 1; margin: 0; padding: 0; }
#tab-clients .crm-dedup-toolbar > label { display: flex; align-items: center; gap: 7px; }
#tab-clients .crm-dedup-toolbar select { max-width: 210px; min-height: 36px; padding: 5px 8px; border: 1px solid var(--border, #d0d7de);
    border-radius: 8px; color: inherit; background: var(--card, #fff); font: inherit; }
#tab-clients .crm-dedup-counts, #tab-clients .crm-dedup-selection { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; font-size: 13px; }
#tab-clients .crm-dedup-counts { margin: 0; padding: 0; }
#tab-clients .crm-dedup-counts b { font-variant-numeric: tabular-nums; }
#tab-clients .crm-dedup-selection { color: var(--muted, #667085); margin-top: 8px; padding: 7px 10px; }
#tab-clients .crm-dedup-list { max-height: min(62vh, 660px); min-height: 140px; overflow: auto; margin-top: 10px; overscroll-behavior: contain; }
#tab-clients .crm-dedup-group { margin: 0 0 8px; padding: 10px; }
#tab-clients .crm-dedup-group__top, #tab-clients .crm-dedup-group__footer { display: flex; align-items: center; flex-wrap: wrap; gap: 9px; }
#tab-clients .crm-dedup-group__check { display: inline-flex; align-items: center; padding: 5px; cursor: pointer; }
#tab-clients .crm-dedup-group__identity { display: flex; flex: 1; min-width: 180px; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
#tab-clients .crm-dedup-group__meta, #tab-clients .crm-dedup-muted { color: var(--muted, #667085); font-size: 12px; }
#tab-clients .crm-dedup-members, #tab-clients .crm-dedup-reasons, #tab-clients .crm-dedup-related { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 9px; }
#tab-clients .crm-dedup-member-pill, #tab-clients .crm-dedup-related > span { display: inline-flex; align-items: center; gap: 4px; max-width: 100%; padding: 4px 8px;
    border-radius: 20px; background: var(--surface-2, #f3f4f6); font-size: 12px; overflow-wrap: anywhere; }
#tab-clients .crm-dedup-member-pill.is-excluded { text-decoration: line-through; opacity: .68; }
#tab-clients .crm-dedup-tag { display: inline-flex; align-items: center; gap: 4px; max-width: 100%; padding: 4px 8px; border-radius: 20px; background: var(--primary-soft, #eef2ff); font-size: 12px; overflow-wrap: anywhere; }
#tab-clients .crm-dedup-group__footer { margin-top: 10px; color: var(--muted, #667085); font-size: 12px; }
#tab-clients .crm-dedup-link { padding: 4px 0; border: 0; background: transparent; color: var(--primary, #4f46e5); font: inherit; font-size: 13px; cursor: pointer; }
#tab-clients .crm-dedup-link:hover { text-decoration: underline; }
#tab-clients .crm-dedup-quick-grid { display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.65fr); gap: 12px; margin-top: 8px; align-items: start; }
#tab-clients .crm-dedup-quick-grid h3 { margin: 0 0 6px; font-size: 13px; line-height: 1.3; }
#tab-clients .crm-dedup-quick-members { display: grid; gap: 5px; min-width: 0; max-height: 240px; overflow: auto; }
#tab-clients .crm-dedup-quick-members h3 { margin-bottom: 2px; }
#tab-clients .crm-dedup-quick-member { display: flex; align-items: flex-start; gap: 7px; padding: 7px 8px; border: 1px solid var(--border, #d0d7de); border-radius: var(--btn-radius, 10px); cursor: pointer; background: var(--card, #fff); }
#tab-clients .crm-dedup-quick-member.is-main { border-color: var(--primary, #4f46e5); background: var(--primary-soft, #eef2ff); }
#tab-clients .crm-dedup-quick-member input { width: 18px; height: 18px; margin: 1px 0 0; flex: none; accent-color: var(--primary, #4f46e5); }
#tab-clients .crm-dedup-quick-member > span { display: grid; gap: 1px; min-width: 0; overflow-wrap: anywhere; }
#tab-clients .crm-dedup-quick-member b { font-size: 13px; line-height: 1.3; }
#tab-clients .crm-dedup-quick-member small { color: var(--muted, #667085); font-size: 12px; line-height: 1.3; }
#tab-clients .crm-dedup-quick-member em { margin-left: auto; flex: none; font-size: 11px; font-style: normal; color: var(--primary, #4f46e5); }
#tab-clients .crm-dedup-quick-result { min-width: 0; padding: 8px 10px; border: 1px solid var(--border, #d0d7de); border-radius: 10px; background: var(--primary-soft, #eef2ff); }
#tab-clients .crm-dedup-quick-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 16px; align-items: start; }
#tab-clients .crm-dedup-quick-field { display: grid; grid-template-columns: minmax(80px, .55fr) minmax(0, 1.45fr); gap: 8px; align-items: center; padding: 3px 0; font-size: 13px; line-height: 1.3; }
#tab-clients .crm-dedup-quick-field > span { color: var(--muted, #667085); overflow-wrap: anywhere; padding-top: 2px; }
#tab-clients .crm-dedup-quick-field > b { font-weight: 500; white-space: pre-wrap; overflow-wrap: anywhere; max-height: 80px; overflow: auto; }
#tab-clients .crm-dedup-quick-field select { width: 100%; min-width: 0; min-height: 30px; padding: 4px 6px; border: 1px solid var(--border, #d0d7de); border-radius: 8px; background: var(--card, #fff); color: inherit; font: inherit; }
#tab-clients .crm-dedup-quick-empty { grid-column: 1 / -1; padding: 12px 0; color: var(--muted, #667085); font-size: 13px; }
#tab-clients .crm-dedup-quick-retained { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; border-top: 1px solid var(--border, #d0d7de); margin-top: 6px; padding-top: 6px; font-size: 12px; color: var(--muted, #667085); }
#tab-clients .crm-dedup-quick-retained .crm-dedup-related { gap: 4px 10px; margin-top: 0; }
#tab-clients .crm-dedup-quick-retained .crm-dedup-related > span { padding: 0; border-radius: 0; background: transparent; }
#tab-clients .crm-dedup-quick-error { margin: 8px 0 0; font-size: 13px; color: var(--danger, #cf222e); }
#tab-clients .crm-dedup-quick-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; margin-top: 8px; }
#tab-clients .crm-dedup-quick-actions .btn { min-height: 34px; padding: 6px 10px; font-size: 13px; }
#tab-clients .crm-dedup-quick-member:focus-within, #tab-clients .crm-dedup-quick-field select:focus-visible, #tab-clients .crm-dedup-link:focus-visible { outline: 2px solid var(--primary, #4f46e5); outline-offset: 2px; }
#tab-clients .crm-dedup-status { font-weight: 600; color: var(--muted, #667085); }
#tab-clients .crm-dedup-status.is-ready { color: var(--success, #1a7f37); }
#tab-clients .crm-dedup-status.is-error { color: var(--danger, #cf222e); }
#tab-clients .crm-dedup-pages { justify-content: space-between; margin-top: 10px; }
#tab-clients .crm-dedup-empty { display: flex; flex-direction: column; gap: 5px; padding: 20px; text-align: center; color: var(--muted, #667085); }
#tab-clients .crm-dedup-exec-list { padding: 8px 12px; }
#tab-clients .crm-dedup-exec-row { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 8px; padding: 9px 2px; border-bottom: 1px solid var(--border, #d0d7de); }
#tab-clients .crm-dedup-exec-row:last-child { border-bottom: 0; }
#tab-clients .crm-dedup-exec-row small { flex: 1 0 100%; color: var(--muted, #667085); }
#tab-clients .crm-dedup-detail { position: fixed; inset: var(--crm-dedup-top, 0px) 0 0; z-index: 9560; display: flex; justify-content: flex-end; color: var(--text, #24292f); }
#tab-clients .crm-dedup-detail__scrim { position: absolute; inset: 0; background: rgba(20, 24, 31, .38); }
#tab-clients .crm-dedup-detail__panel { position: relative; z-index: 1; display: flex; flex-direction: column; height: 100%; overflow: hidden; padding: 0; }
#tab-clients .crm-dedup-detail__body { flex: 1; min-height: 0; overflow: auto; padding: 14px 18px 24px; }
#tab-clients .crm-dedup-detail__body section { margin: 0 0 16px; padding: 12px; border: 1px solid var(--border, #d0d7de); border-radius: 12px; }
#tab-clients .crm-dedup-detail__body h3 { margin: 0 0 10px; font-size: 15px; }
#tab-clients .crm-dedup-detail-members { display: grid; gap: 6px; max-height: 250px; overflow: auto; }
#tab-clients .crm-dedup-detail-member { display: flex; align-items: flex-start; gap: 9px; padding: 9px; border-radius: var(--btn-radius, 10px); background: var(--surface-2, #f6f8fa); cursor: pointer; }
#tab-clients .crm-dedup-detail-member input { flex: none; width: 18px; height: 18px; margin: 1px 0 0; accent-color: var(--primary, #4f46e5); }
#tab-clients .crm-dedup-detail-member span { display: grid; gap: 3px; min-width: 0; }
#tab-clients .crm-dedup-detail-member small, #tab-clients .crm-dedup-choice small, #tab-clients .crm-dedup-conflict small { color: var(--muted, #667085); overflow-wrap: anywhere; }
#tab-clients .crm-dedup-choice { display: grid; gap: 6px; margin-top: 10px; }
#tab-clients .crm-dedup-choice select { box-sizing: border-box; width: 100%; min-height: 38px; padding: 7px 9px; border: 1px solid var(--border, #d0d7de); border-radius: var(--btn-radius, 10px); background: var(--card, #fff); color: inherit; font: inherit; }
#tab-clients .crm-dedup-outcome { display: grid; gap: 1px; }
#tab-clients .crm-dedup-outcome-row { display: flex; justify-content: space-between; gap: 12px; padding: 7px 0; border-bottom: 1px solid var(--border, #d0d7de); }
#tab-clients .crm-dedup-outcome-row span { color: var(--muted, #667085); }
#tab-clients .crm-dedup-outcome-row b { text-align: right; overflow-wrap: anywhere; white-space: pre-wrap; }
#tab-clients .crm-dedup-requisites { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
#tab-clients .crm-dedup-related { line-height: 1.5; }
#tab-clients .crm-dedup-conflict { display: grid; gap: 4px; padding: 8px 0; }
#tab-clients .crm-dedup-evidence-list { display: grid; gap: 6px; }
#tab-clients .crm-dedup-evidence { display: grid; gap: 3px; padding: 8px; border-radius: 8px; background: var(--surface-2, #f6f8fa); overflow-wrap: anywhere; }
#tab-clients .crm-dedup-evidence small { color: var(--muted, #667085); }
#tab-clients .crm-dedup-all-reasons { margin-top: 8px; }
#tab-clients .crm-dedup-all-reasons summary { cursor: pointer; color: var(--primary, #4f46e5); }
#tab-clients .crm-dedup-detail__actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 4px 0 10px; }
#tab-clients .crm-dedup-detail__actions .btn { min-height: 40px; }
#tab-clients .crm-dedup-result-summary { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 16px; margin-bottom: 8px; padding: 9px 12px; border: 1px solid var(--border, #d0d7de); border-radius: 10px; font-size: 13px; }
#tab-clients .crm-dedup-overlay.is-results .crm-dedup-toolbar, #tab-clients .crm-dedup-overlay.is-results .crm-dedup-counts, #tab-clients .crm-dedup-overlay.is-results .crm-dedup-selection { display: none; }

/* Отображение реквизитов и множественных диалогов остаётся в карточке клиента. */
#tab-clients .crm-requisite__row { display: flex; align-items: baseline; flex-wrap: wrap; gap: 5px 9px; padding: 7px 0; border-bottom: 1px solid var(--border); }
#tab-clients .crm-requisite__kind, #tab-clients .crm-requisite__label { color: var(--muted); font-size: 12px; }
#tab-clients .crm-requisite__value { overflow-wrap: anywhere; }
#tab-clients .crm-requisite__origin { color: var(--muted); font-size: 11px; }
#tab-clients .crm-requisite-edit__row { display: grid; grid-template-columns: 100px minmax(0, 1fr) minmax(0, .8fr) 38px; gap: 7px; margin: 7px 0; }
#tab-clients .crm-requisite-edit__row input, #tab-clients .crm-requisite-edit__row select { box-sizing: border-box; width: 100%; min-width: 0; min-height: 38px; padding: 7px 9px; border: 1px solid var(--border); border-radius: 8px; background: var(--card, #fff); color: var(--text); font: inherit; }
#tab-clients .crm-requisite-edit__actions { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
#tab-clients .crm-merge-history__op { padding: 8px 0; border-bottom: 1px solid var(--border); }
#tab-clients .crm-merge-history__op summary { cursor: pointer; font-weight: 600; }
#tab-clients .crm-merge-history__op ul { margin: 8px 0; padding-left: 20px; }
#tab-clients .crm-merge-history__op li { padding: 3px 0; }
#tab-clients .crm-merge-history__op small { display: block; color: var(--muted); }
#tab-clients .crm-dialog-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0; }
#tab-clients .crm-dialog-list__item { display: grid; gap: 2px; max-width: 100%; padding: 7px 10px; border: 1px solid var(--border); border-radius: var(--btn-radius, 10px); background: var(--card, #fff); color: var(--text); cursor: pointer; text-align: left; }
#tab-clients .crm-dialog-list__item small { color: var(--muted); }
#tab-clients .crm-dialog-list__item.is-active { border-color: var(--primary); background: var(--primary-soft, #eef2ff); }
#tab-clients .crm-dialog-list__selected { margin: 3px 0 8px; color: var(--muted); font-size: 12px; }

@media (max-width: 1100px) {
    #tab-clients .crm-dedup-quick-fields { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 760px) {
    #tab-clients .crm-dedup-overlay { align-items: stretch; padding: 0; }
    #tab-clients .crm-dedup-panel { max-height: 100%; min-height: 0; height: 100%; border: 0; border-radius: 0; }
    #tab-clients .crm-dedup-panel > .crm-dedup-head { padding: 13px 14px; }
    #tab-clients .crm-dedup-head h2 { font-size: 17px; }
    #tab-clients .crm-dedup-body { padding: 10px 12px 18px; }
    #tab-clients .crm-dedup-start { align-items: stretch; }
    #tab-clients .crm-dedup-controls { padding: 9px 10px; }
    #tab-clients .crm-dedup-searchbar { grid-template-columns: minmax(0, 1fr); gap: 7px; }
    #tab-clients .crm-dedup-job__line { grid-column: 1; grid-row: auto; justify-content: space-between; }
    #tab-clients .crm-dedup-progress { margin: 0; }
    #tab-clients .crm-dedup-filterbar { margin-top: 8px; }
    #tab-clients .crm-dedup-start label { flex: 1 1 calc(50% - 8px); min-height: 40px; }
    #tab-clients .crm-dedup-start > .btn { flex: 1 0 100%; min-height: 42px; }
    #tab-clients .crm-dedup-review-launch { align-items: stretch; }
    #tab-clients .crm-dedup-review-launch .btn, #tab-clients .crm-dedup-review__head .btn { width: 100%; min-height: 42px; }
    #tab-clients .crm-dedup-review__head { flex-direction: column; }
    #tab-clients .crm-dedup-review__actions { width: 100%; flex-direction: column; }
    #tab-clients .crm-dedup-review__actions .btn { width: 100%; min-height: 42px; }
    #tab-clients .crm-dedup-review-item { padding: 10px; }
    #tab-clients .crm-dedup-review-item [data-dedup-resolve-conflict] { width: 100%; min-height: 44px; }
    #tab-clients .crm-dedup-toolbar { align-items: stretch; }
    #tab-clients .crm-dedup-toolbar > label { flex: 1 1 100%; justify-content: space-between; }
    #tab-clients .crm-dedup-toolbar select { flex: 1; max-width: 70%; min-height: 40px; }
    #tab-clients .crm-dedup-toolbar > .btn { flex: 1 1 100%; min-height: 42px; }
    #tab-clients .crm-dedup-list { max-height: none; min-height: 0; height: min(60vh, 560px); }
    #tab-clients .crm-dedup-group { padding: 10px; }
    #tab-clients .crm-dedup-group__top > .btn { min-height: 40px; }
    #tab-clients .crm-dedup-quick-grid { grid-template-columns: minmax(0, 1fr); gap: 12px; }
    #tab-clients .crm-dedup-quick-actions { flex-wrap: wrap; }
    #tab-clients .crm-dedup-quick-actions .btn { min-height: 40px; }
    #tab-clients .crm-dedup-pages .btn { min-height: 42px; }
    #tab-clients .crm-dedup-detail { align-items: stretch; }
    #tab-clients .crm-dedup-detail__panel { height: 100%; border: 0; border-radius: 0; }
    #tab-clients .crm-dedup-detail__panel > .crm-dedup-head { padding: 12px 14px; }
    #tab-clients .crm-dedup-detail__body { padding: 10px 12px 24px; }
    #tab-clients .crm-dedup-detail__actions { display: grid; grid-template-columns: 1fr; }
    #tab-clients .crm-dedup-detail__actions .btn { width: 100%; min-height: 44px; }
    #tab-clients .crm-requisite-edit__row { grid-template-columns: 92px minmax(0, 1fr) 38px; }
    #tab-clients .crm-requisite-edit__row [data-req-label] { grid-column: 2; }
    #tab-clients .crm-requisite-edit__row [data-req-remove] { grid-column: 3; grid-row: 1 / span 2; }
}
@media (prefers-reduced-motion: reduce) {
    #tab-clients .crm-chat-summary__row { transition: none; }
    #tab-clients .crm-chat-summary__row:hover { transform: none; }
}
/* Заявки — одна полноширинная колонка карточки. Поле статуса использует обычную оболочку .crm-fld,
   поэтому высота, рамка и шрифт совпадают с уже существующими селектами справочника. */
#tab-clients .crm-card__requests { border-left: 4px solid var(--info-border, #2563eb); }
#tab-clients .crm-requests__head { display: flex; align-items: center; justify-content: space-between;
    gap: 12px; padding: 16px 20px; border-bottom: 1px solid var(--border); }
#tab-clients .crm-requests__title { font-size: 16px; font-weight: 600; color: var(--text); }
#tab-clients .crm-requests__tools { display: flex; align-items: center; justify-content: flex-end; gap: 16px;
    margin-left: auto; }
#tab-clients .crm-requests__sum { white-space: nowrap; font-size: 15px; font-weight: 600; color: var(--text); }
#tab-clients .crm-requests__filter.crm-fld { display: flex; align-items: center; gap: 8px; margin: 0; }
#tab-clients .crm-requests__filter > select { width: auto; min-width: 148px; padding: 6px 9px; font-size: 13px; }
#tab-clients .crm-card__requests #crmRequestsList { padding: 20px 20px 0; }
#tab-clients .crm-card__requests .crm-grp__act { align-self: flex-start; margin: 0 20px 20px; }
#tab-clients .crm-f { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
#tab-clients .crm-f__l { font-size: 13px; color: var(--muted); }
#tab-clients .crm-f__v { min-width: 0; font-size: 15px; color: var(--text); word-break: break-word; }
#tab-clients .crm-card__acts { display: flex; gap: 8px; margin-left: auto; flex: none; }
#tab-clients .crm-card__act { width: 40px; height: 40px; padding: 0; }
#tab-clients .crm-card__act[aria-pressed="true"] { border-color: var(--primary); color: var(--primary-ink, var(--primary)); background: var(--primary-soft, #eef4ff); }
#tab-clients .crm-card__act.crm-danger:hover { border-color: var(--danger); color: var(--danger-ink); }
#tab-clients .crm-danger { color: var(--danger-ink); }

@media (max-width: 760px) {
    #tab-clients .crm-card__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 18px; }
    #tab-clients .crm-card__important { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ── Форма ── */
#tab-clients .crm-form__ttl { margin: 6px 0 12px; font-size: 19px; font-weight: 600; line-height: 1.35; color: var(--text); }
#tab-clients .crm-fld { margin-bottom: 12px; }
/* ⚠️ ПРЯМОЙ ПОТОМОК — ПО ТОЙ ЖЕ ПРИЧИНЕ, ЧТО У input НИЖЕ, и это поймано ЗАМЕРОМ, а не чтением. Внутри поля
   теперь живут чужие <label>: строки галочек в панели множественного выбора. Правило «.crm-fld label»
   (1,1,1) сильнее «.crm-check» (1,1,0) и одевало их подписью поля — жирным, 13px и display:block вместо
   flex, отчего галочка и текст вставали друг под другом. getComputedStyle показывал block там, где
   ожидался flex. */
#tab-clients .crm-fld > label { display: block; margin: 0 0 4px; font-size: 13px; font-weight: 600; color: var(--text-secondary, #374151); }
/* ⚠️ ПРЯМОЙ ПОТОМОК, А НЕ ЛЮБОЙ ВЛОЖЕННЫЙ. Панель одевает СВОЙ контрол поля; правило «.crm-fld input»
   (1,1,1) накрывало и <input> внутри общего пикера, перебивая его собственные стили (0,1,0) — поле
   выглядело полем формы, а выпадашка оставалась голой. «>» выражает исходный замысел точно. */
#tab-clients .crm-fld > input,
#tab-clients .crm-fld > select,
#tab-clients .crm-fld > textarea { width: 100%; box-sizing: border-box; padding: 9px 11px; font: inherit;
    font-size: 14px; border: 1px solid var(--border); border-radius: 10px; background: #fff; background: var(--card, #fff); color: var(--text); }
#tab-clients .crm-fld textarea { min-height: 72px; resize: vertical; }
#tab-clients .crm-req { color: var(--danger-ink); }
#tab-clients .crm-form__acts { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }
/* ⚠️ ПАРНОЕ ПРАВИЛО К [hidden] — обязательное: display от класса (1,1,0) сильнее браузерного [hidden]
   (0,1,0). Кнопки импорта прячутся атрибутом (crmImpActs), и без этой строки они висели бы на пустом
   экране до выбора файла. Ниже базового правила: при равной силе побеждает нижнее. */
#tab-clients .crm-form__acts[hidden] { display: none; }

/* Выбор сущности при добавлении: две кнопки вместо диалога — браузерные диалоги в проекте запрещены. */
#tab-clients .crm-pick { display: flex; gap: 10px; flex-wrap: wrap; }
#tab-clients .crm-pick__b { flex: 1 1 140px; border: 1px solid var(--border); border-radius: var(--btn-radius, 10px); background: var(--card, #fff);
    padding: 18px 12px; font: inherit; font-size: 15px; font-weight: 600; color: var(--text); cursor: pointer; }
#tab-clients .crm-pick__b:hover { border-color: var(--primary); }

/* ── Похожие записи ── */
#tab-clients .crm-dups { border: 1px solid var(--warning-border, #fde68a); background: var(--warning-bg, #fffbeb); border-radius: 12px; padding: 12px;
    margin-top: 12px; }
/* ⚠️ ПАРНОЕ ПРАВИЛО К [hidden]: панель показывается и прячется из JS, а display от класса (1,1,0) сильнее
   браузерного [hidden] (0,1,0) — без этой строки спрятанная панель осталась бы на экране. Ловушка в проекте
   уже срабатывала трижды (.zay-stg-drop, .zay-board, пояснение в модалке). Ниже базового правила. */
#tab-clients .crm-dups[hidden] { display: none; }
#tab-clients .crm-dups__t { font-size: 14px; font-weight: 700; color: var(--warning-ink, #92400e); margin-bottom: 8px; }
#tab-clients .crm-dup { display: flex; align-items: center; gap: 10px; padding: 8px 0;
    border-top: 1px solid var(--warning-border, #fde68a); }
#tab-clients .crm-dup:first-of-type { border-top: 0; }
#tab-clients .crm-dup__b { flex: 1; min-width: 0; }
#tab-clients .crm-dup__n { font-size: 14px; font-weight: 600; color: var(--text); }
#tab-clients .crm-dup__s { font-size: 12px; color: var(--muted); }
/* Сила совпадения названа словом, а не только цветом: «Совпадение по ИНН» и «Похоже по наименованию» —
   разные утверждения, и путать их нельзя (ТЗ 6.2). */
#tab-clients .crm-dup__m { font-size: 12px; color: var(--muted); margin-top: 2px; }
#tab-clients .crm-dup__m.is-strong { color: var(--danger-ink, #b91c1c); font-weight: 600; }

/* Узкий экран: поля по бокам съедают ширину там, где её и так нет. Порог и значения — как у «Заявок»
   (zay-panel.css) и «Поручений» (por-panel.css): один каркас на все разделы. */
@media (max-width: 560px) {
    /* Две кнопки выбора сущности в 360px рядом не помещаются — ставим в столбец, а не сжимаем до нечитаемого. */
    #tab-clients .crm-pick { flex-direction: column; }
    #tab-clients .crm-card__grid { grid-template-columns: 1fr; }
    #tab-clients .crm-card__important { grid-template-columns: 1fr; }
    #tab-clients .crm-f { flex-direction: column; gap: 2px; }
    #tab-clients .crm-f__l { flex: none; }
    #tab-clients .crm-requests__head { align-items: flex-start; flex-direction: column; }
    #tab-clients .crm-requests__tools { width: 100%; margin-left: 0; }
    #tab-clients .crm-requests__filter { flex: 1; min-width: 0; }
    #tab-clients .crm-requests__filter > select { flex: 1; min-width: 0; }
}

/* ── ИМПОРТ CSV ── */
/* Шаблон-пример. Кнопка ВТОРОСТЕПЕННАЯ по виду: главное действие экрана — выбрать файл, и заливная кнопка
   рядом с ним спорила бы с ним за внимание. Рамка и радиус — те же, что у .crm-opt__add (кнопка «+ Вариант»
   в редакторе полей): один и тот же вес действия обозначен в разделе одинаково. */
#tab-clients .crm-imp__tpl { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 12px; }
#tab-clients .crm-imp__tpl .crm-hint { flex: 1; min-width: 220px; margin-top: 0; }
#tab-clients .crm-imp__tplb { display: inline-flex; align-items: center; gap: 6px; flex: none;
    border: 1px solid var(--border); background: var(--card, #fff); border-radius: var(--btn-radius, 10px); padding: 5px 11px; font: inherit;
    font-size: 13px; color: var(--text); cursor: pointer; }
#tab-clients .crm-imp__tplb:hover:not(:disabled) { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-imp__tplb:disabled { opacity: .6; cursor: default; }
/* Родной <input type=file> в проекте не оформить одинаково в трёх браузерах — прячем его и одеваем метку. */
#tab-clients .crm-imp__pick { display: flex; align-items: center; justify-content: center; gap: 8px;
    border: 1px dashed var(--border); border-radius: var(--btn-radius, 10px); padding: 18px 12px; margin-top: 12px;
    cursor: pointer; color: var(--muted); font-size: 14px; background: var(--card, #fff); }
#tab-clients .crm-imp__pick:hover { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-imp__pick input[type="file"] { position: absolute; width: 1px; height: 1px; opacity: 0;
    pointer-events: none; }

/* ── Файлы карточки (Э4) ──
   ⚠️ СТРОКА СО СМЫСЛОМ, А НЕ ПРОСТО ССЫЛКА: имя, размер, дата, кто приложил. Приём и состав — те же, что у
      файлов результата этапа в заявках (.zay-resf): картинка показывается превью, документ — иконкой и
      строкой. Значения (радиус 8, рамка var(--border), 13px у подписи) совпадают с ними намеренно — один и
      тот же предмет на экране обязан выглядеть одинаково.
   ⚠️ ПРЕВЬЮ 40×40 — РОВНО ПО ВЫСОТЕ СТРОКИ, чтобы список картинок и список документов шли одной сеткой.
      Крупнее — и строки запрыгают; мельче — по миниатюре ничего не узнать. */
#tab-clients .crm-files { display: flex; flex-direction: column; gap: 6px; }
#tab-clients .crm-file { display: flex; align-items: center; gap: 10px; border: 1px solid var(--border);
    border-radius: 8px; background: var(--card, #fff); padding: 7px 10px; }
#tab-clients .crm-file:hover { border-color: var(--primary); }
#tab-clients .crm-file__ic { flex: none; display: inline-flex; color: var(--muted); }
#tab-clients .crm-file__ic .ic { width: 16px; height: 16px; }
#tab-clients .crm-file__img { flex: none; width: 40px; height: 40px; border-radius: 6px; overflow: hidden;
    display: block; background: var(--bg); }
#tab-clients .crm-file__img img { width: 100%; height: 100%; object-fit: cover; display: block; }
#tab-clients .crm-file__b { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px;
    text-decoration: none; color: var(--text); }
#tab-clients .crm-file__n { font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#tab-clients .crm-file__b:hover .crm-file__n { color: var(--primary-ink, var(--primary)); text-decoration: underline; }
#tab-clients .crm-file__m { font-size: 12px; color: var(--muted); }
#tab-clients .crm-file__x { flex: none; border: 0; background: none; font-size: 18px; line-height: 1;
    color: var(--muted); cursor: pointer; padding: 2px 6px; }
#tab-clients .crm-file__x:hover { color: var(--danger-ink); }
/* ⚠️ ЛЕНТА ВНУТРИ КОРОБКИ — БЕЗ СВОИХ ОТСТУПОВ И БЕЗ ВТОРОЙ РАМКИ. Отступ теперь даёт паддинг .crm-box;
   оставь мы здесь margin-top, он сложился бы с ним в двойной. Рамки у ленты нет вовсе — ни своей, ни
   унаследованной: у сообщений свои пузыри (.tc-bubble), и коробка в коробке читалась бы как вложенный блок. */
#tab-clients .crm-box .tc { margin: 0; }

/* ── Засыпка старых заявок (Э6) ──
   ⚠️ ОТБИТА ЧЕРТОЙ И СВОИМ ЗАГОЛОВКОМ: это не шаг импорта, а соседнее дело на том же экране. Без черты
      блок читался бы как «что делать после загрузки файла», хотя приходят сюда и без всякого файла. */
#tab-clients .crm-bf { margin-top: 28px; padding-top: 18px; border-top: 1px solid var(--border); }
/* Заголовок блока «Заявки без клиента»: эталон секции (.crm-sect в разметке). Черту рисует сам .crm-bf
   выше — второй раз она бы удвоилась. */
#tab-clients .crm-bf__ttl { margin: 0 0 4px; }
#tab-clients .crm-bf__sum { font-size: 14px; color: var(--text); margin: 10px 0 8px; }
#tab-clients .crm-bf__l { margin: 0 0 10px; max-height: 220px; overflow-y: auto; }
#tab-clients .crm-bf__r { font-size: 13px; color: var(--muted); padding: 2px 0; }
#tab-clients .crm-bf__m { color: var(--warning-ink, #b45309); }

#tab-clients .crm-imp__facts { display: flex; flex-wrap: wrap; gap: 6px 14px; margin-top: 14px;
    font-size: 13px; color: var(--muted); }
#tab-clients .crm-imp__facts b { color: var(--text); }
#tab-clients .crm-imp__dups { margin-top: 8px; font-size: 13px; color: var(--text); }

/* Три заголовка экрана импорта — эталон секции (.crm-sect в разметке), у каждого только свой отступ. */
#tab-clients .crm-imp__maph { margin: 16px 0 8px; }
#tab-clients .crm-imp__row { display: flex; align-items: center; gap: 10px; padding: 7px 0;
    border-bottom: 1px solid var(--border); }
#tab-clients .crm-imp__col { flex: 1; min-width: 0; font-size: 14px; color: var(--text); }
#tab-clients .crm-imp__ex { display: block; font-size: 12px; color: var(--muted); overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap; }
#tab-clients .crm-imp__t { flex: none; max-width: 52%; padding: 7px 10px; font: inherit; font-size: 13px;
    border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); }

#tab-clients .crm-imp__pol { margin-top: 16px; }
#tab-clients .crm-imp__polttl { margin-bottom: 6px; }
#tab-clients .crm-imp__opt { display: flex; align-items: flex-start; gap: 8px; padding: 5px 0;
    font-size: 13px; color: var(--muted); cursor: pointer; }
#tab-clients .crm-imp__opt b { color: var(--text); }
#tab-clients .crm-imp__warn { margin-top: 14px; padding: 10px 12px; border-radius: 10px;
    background: rgba(209, 36, 47, .07); color: var(--danger-ink); font-size: 13px; line-height: 1.45; }

#tab-clients .crm-imp__rep { margin-top: 14px; }
#tab-clients .crm-imp__repl { font-size: 14px; color: var(--text); padding: 3px 0; }
#tab-clients .crm-imp__repl.ok { color: var(--success-ink); }
#tab-clients .crm-imp__repl.error { color: var(--danger-ink); }
#tab-clients .crm-imp__detttl { margin: 14px 0 6px; }
#tab-clients .crm-imp__det { font-size: 13px; color: var(--muted); padding: 3px 0; line-height: 1.4; }
#tab-clients .crm-imp__ln { display: inline-block; min-width: 84px; color: var(--text); }

/* ── ПРИВЯЗКА КОНТАКТА К КОМПАНИИ ── */
/* Кнопка в заголовке группы: заголовок — обычная строка, поэтому кнопку прижимаем вправо flex'ом. */
#tab-clients .crm-grp__act { margin-left: auto; flex: none; border: 1px solid var(--border); background: var(--card, #fff);
    border-radius: var(--btn-radius, 10px); padding: 4px 10px; font: inherit; font-size: 12px; font-weight: 400; color: var(--text);
    cursor: pointer; text-transform: none; letter-spacing: 0; }
#tab-clients .crm-grp__act:hover { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }

/* ⚠️ ПОДЗАГОЛОВОК ВНУТРИ КОРОБКИ — С ЧЕРТОЙ СВЕРХУ, А НЕ ПРОСТО ОТСТУПОМ. Он делит один блок надвое:
   «данные» и «люди», — и без черты вторая половина читалась бы продолжением реквизитов. Отступы
   отрицательные по бокам ровно на паддинг коробки (12px): черта обязана идти во всю её ширину, иначе она
   выглядит подчёркиванием заголовка, а не разделителем.
   ⚠️ ИМЯ .crm-sect, А НЕ .crm-sub, И ЭТО ПОЧИНКА. Обоими элементами — подписью раздела под заголовком
   «Клиенты» и этим подзаголовком — звался один класс. Правила равной специфичности, побеждает нижнее, то
   есть ЭТО: подпись раздела рисовалась 12/600 uppercase с чертой сверху вместо 13/400, как в «Заявках» и
   «Поручениях». Замерено getComputedStyle. Имя взято по образцу .zay-sect — подзаголовка блока в заявках:
   один смысл, одно имя, соседние разделы зовут его одинаково. */
/* ЗАГОЛОВОК СЕКЦИИ — ЭТАЛОН РАЗДЕЛА. Сам вид: 12/600, прописные, приглушённый.
   ⚠️ ЧЕРТА СВЕРХУ — ВАРИАНТ, А НЕ ЧАСТЬ ЭТАЛОНА, и это решение по итогам переписи. Заголовков секций по
   трём разделам набралось пять видов, и совпадают они как раз в 12/600/прописных — расходятся ровно чертой.
   Сделай её обязательной — линии появились бы на каждом экране: в сводке поручений, в чек-листе, в форме
   заявки. Поэтому черта там, где она РАЗДЕЛЯЕТ (половины одной коробки), а не везде, где есть заголовок. */
/* ⚠️ ОТСТУПОВ У ЭТАЛОНА НЕТ, И ЭТО НЕ ЗАБЫВЧИВОСТЬ. Отступ у заголовка секции свой в каждом месте: в списке
   он отделяет группу (14px), в форме — блок вариантов (0), на экране импорта — таблицу сопоставления (16px).
   Задай мы отступ здесь — он перекрыл бы все три: специфичность равная, а базовое правило лежит ниже
   потребителей. Поймано замером: «Компании» потеряли свои 14px сверху. Отступ приносит место применения. */
#tab-clients .crm-sect { display: flex; align-items: center; gap: 10px;
    font-size: 12px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: .03em; }
/* Черта во всю ширину КОРОБКИ: отрицательные отступы по бокам ровно на её паддинг (12px), иначе черта
   выглядит подчёркиванием заголовка, а не разделителем. */
#tab-clients .crm-sect--rule { margin: 4px -12px 2px; padding: 10px 12px 0;
    border-top: 1px solid var(--border); }
/* ⚠️ ТА ЖЕ ЧЕРТА, НО ВНЕ КОРОБКИ — БЕЗ ОТРИЦАТЕЛЬНЫХ ОТСТУПОВ. Они посчитаны по паддингу коробки; там, где
   коробки нет (экран настройки полей), черта вылезала бы за колонку на 12px с каждой стороны — замерено
   (6..954 вместо 18..942). Оба варианта стоят НИЖЕ базового: при равной специфичности побеждает нижнее. */
#tab-clients .crm-sect--rule-flat { margin: 4px 0 2px; padding: 10px 0 0;
    border-top: 1px solid var(--border); }

/* Пометка в заголовке раздела («в архиве: N»). Регистр и разрядка заголовка на неё не действуют: это не
   заголовок, а примечание к нему — иначе «В АРХИВЕ: 1» кричало бы наравне со словом «КОНТАКТЫ».
   ⚠️ НИЖЕ БАЗОВОГО ПРАВИЛА: при равной специфичности побеждает нижнее. */
#tab-clients .crm-sect__note { margin-left: 8px; font-weight: 400; text-transform: none;
    letter-spacing: 0; color: var(--muted); }

/* Аватар контакта (.lrow__ava) и строка с крестиком отвязки (.lrow-wrap) — тоже в linked-row.css. */

#tab-clients .crm-link__pick { margin: 10px 0; }
#tab-clients .crm-link__ask { padding: 9px 10px; border-radius: 8px; font-size: 13px; line-height: 1.45;
    background: rgba(209, 36, 47, .07); color: var(--danger-ink); margin-bottom: 10px; }
#tab-clients .crm-link__acts { margin-top: 8px; }
/* ⚠️ ПАРНОГО ПРАВИЛА К [hidden] ЗДЕСЬ НЕ НУЖНО, и это проверено: ни .crm-link__ask, ни контейнер #crmLinkBox
   display классом не получают, поэтому браузерное [hidden] их гасит само. Правило добавляют там, где класс
   задаёт display (см. .crm-add, .crm-dups, .crm-form__acts) — а не «на всякий случай». */

/* ── РЕДАКТОР ВАРИАНТОВ СПИСКА ── */
#tab-clients .crm-opts { margin-top: 10px; }
/* Заголовок вариантов списка: эталон секции (.crm-sect в разметке), здесь только свой нижний отступ. */
#tab-clients .crm-opts__ttl { margin-bottom: 6px; }
#tab-clients .crm-opt { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
#tab-clients .crm-opt__in { flex: 1; min-width: 0; box-sizing: border-box; padding: 7px 10px; font: inherit;
    font-size: 14px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); }
/* Счётчик записей — он объясняет, почему крестик может быть выключен, поэтому стоит рядом с ним. */
#tab-clients .crm-opt__n { flex: none; font-size: 12px; color: var(--text); white-space: nowrap; }
#tab-clients .crm-opt__n--free { color: var(--muted); }
#tab-clients .crm-opt__b { flex: none; width: 28px; height: 28px; border: 1px solid var(--border);
    background: var(--card, #fff); border-radius: var(--btn-radius, 10px); font-size: 14px; line-height: 1; color: var(--text); cursor: pointer;
    padding: 0; }
#tab-clients .crm-opt__b:hover:not(:disabled) { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-opt__b:disabled { opacity: .4; cursor: not-allowed; }
#tab-clients .crm-opt__b--del:hover:not(:disabled) { border-color: var(--danger); color: var(--danger-ink); }
#tab-clients .crm-opt__add { border: 1px solid var(--border); background: var(--card, #fff); border-radius: var(--btn-radius, 10px);
    padding: 5px 11px; font: inherit; font-size: 13px; color: var(--text); cursor: pointer; }
#tab-clients .crm-opt__add:hover { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }

/* Настройка разделов пользовательских полей. Системный раздел выглядит строкой, но в нём нет ни ввода,
   ни удаления: это наглядно объясняет его особый статус и не оставляет действия, которое нельзя выполнить. */
#tab-clients .crm-section-editor { margin: 0 0 18px; padding: 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg); }
#tab-clients .crm-section-editor__system, #tab-clients .crm-section-editor__row { display: flex; align-items: center; gap: 8px; min-height: 34px; margin-top: 7px; padding: 0 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--card, #fff); }
#tab-clients .crm-section-editor__system { color: var(--muted); }
#tab-clients .crm-section-editor__row { cursor: grab; }
#tab-clients .crm-section-editor__row input { flex: 1; min-width: 0; border: 0; background: transparent; color: var(--text); font: inherit; }
#tab-clients .crm-section-editor__drag { color: var(--muted); cursor: grab; font-size: 18px; line-height: 1; }
#tab-clients .crm-cf__place { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; margin-top: 10px; font-size: 13px; color: var(--muted); }
#tab-clients .crm-cf__place label { display: flex; align-items: center; gap: 7px; }
#tab-clients .crm-cf__place select { max-width: 260px; padding: 5px 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--card, #fff); color: var(--text); font: inherit; font-size: 13px; }

/* ── МНОЖЕСТВЕННЫЙ ВЫБОР: КНОПКА И ПАНЕЛЬ ── */
/* Устройство повторяет фильтр «Стадии» реестра заявок (zay-panel.css: .zay-stg-drop). */
#tab-clients .crm-ms { position: relative; }
/* ⚠️ ВЫСОТА ЗАКРЕПЛЕНА, А НЕ ВЫВЕДЕНА ИЗ СОДЕРЖИМОГО. Внутри кнопки теперь живут чипы: они на 5px выше
   строки текста (замер: чип 21px против 16px), и от прежних padding: 9px кнопка выросла бы до 41px — то есть
   прыгала бы при первом же выборе и разъезжалась с соседними полями. Отступы сверху и снизу сняты, высота
   задана явно: 36px — это НЕ круглое число, а замеренная высота соседнего .crm-fld > input (сверено
   getComputedStyle). align-items: center выше центрирует и текст, и чипы. */
#tab-clients .crm-ms__btn { display: flex; align-items: center; gap: 8px; width: 100%; box-sizing: border-box;
    min-height: 36px; padding: 0 11px; font: inherit; font-size: 14px; text-align: left;
    border: 1px solid var(--border); border-radius: var(--btn-radius, 10px); background: var(--card, #fff); color: var(--text); cursor: pointer; }
#tab-clients .crm-ms__btn:hover { border-color: var(--primary); }
#tab-clients .crm-ms__lbl { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* ЧИПЫ В КНОПКЕ — ТОТ ЖЕ .crm-chip, ЧТО В ПРОСМОТРЕ КАРТОЧКИ, со строчной раскладкой поверх.
   ⚠️ ПОТОЛОК ШИРИНЫ ВЫБРАН ЗАМЕРОМ: 8.3px на букву, подписи вариантов — медиана 35 символов, 90% ≤ 166,
      максимум 255. Без потолка одна подпись занимает 2112px и вытесняет все остальные чипы. 180px ≈ 21
      буква: «Рекомендация клиента» (172px) влезает целиком, а на широком экране рядом встают четыре
      такие подписи вместо одной. min(…, 100%) — второй предел, чтобы чип не вылез за кнопку на телефоне
      и всегда оставил место счётчику (замер: 878px под чипы на широком, 316px на узком).
   ⚠️ display: inline-block ОБЯЗАТЕЛЕН для многоточия: у inline-flex (вид чипа в карточке) text-overflow не
      работает — обрезать нечего, текст лежит анонимным элементом флекса. Вид от этого не меняется: те же
      фон, цвет, радиус и отступы, сверено getComputedStyle. */
#tab-clients .crm-ms__lbl .crm-chip { display: inline-block; vertical-align: middle;
    max-width: min(180px, 100%); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Промежуток тот же, что у .crm-chipset (6px), но здесь раскладка строчная, а не флексом — gap не работает. */
#tab-clients .crm-ms__lbl .crm-chip + .crm-chip { margin-left: 6px; }
/* ⚠️ ОДИННАДЦАТЫЙ СЛУЧАЙ ЛОВУШКИ [hidden]: невлезшие чипы прячутся атрибутом, а display им задан классом —
   (1,2,0) против (0,1,0) у браузерного [hidden]. Без этой пары «спрятанные» чипы остались бы на виду. */
#tab-clients .crm-ms__lbl .crm-chip[hidden] { display: none; }
/* ⚠️ СЧЁТЧИК НЕ СЖИМАЕТСЯ И СТОИТ ПОСЛЕ ЧИПОВ: прячутся именно чипы, а число обязано уцелеть — ради него
   счётчик и появляется. display НЕ задаём: он скрывается атрибутом hidden, и лишнее display потребовало бы
   ещё одной пары [hidden] (та же ловушка, что закрыта у панели и строки списка). */
#tab-clients .crm-ms__n { flex: none; font-size: 12px; color: var(--muted); background: var(--bg);
    border-radius: 20px; padding: 1px 7px; }
#tab-clients .crm-ms__chev { flex: none; display: flex; color: var(--muted); }
#tab-clients .crm-ms__drop { position: absolute; z-index: 40; left: 0; right: 0; top: calc(100% + 4px);
    background: var(--card, #fff); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 8px 24px rgba(0,0,0,.16);
    padding: 8px; display: flex; flex-direction: column; gap: 8px; }
/* ⚠️ ПАРНОЕ [hidden] ОБЯЗАТЕЛЬНО. Строка выше даёт display:flex со специфичностью (1,1,0), а браузерное
   [hidden]{display:none} — (0,1,0): без этой пары панель висела бы раскрытой всегда. Девятый случай той же
   ловушки в проекте; проверено getComputedStyle, а не «правило добавлено». */
#tab-clients .crm-ms__drop[hidden] { display: none; }
/* Не поместилась снизу — разворачиваем вверх (класс ставит place() после замера).
   ⚠️ ПРАВИЛО ОБЯЗАНО СТОЯТЬ ПОСЛЕ БАЗОВОГО. Специфичность одинаковая, и стоя ВЫШЕ оно проиграло бы:
      top: calc(100% + 4px) остался бы в силе вместе с bottom, панель растянулась бы между ними и схлопнулась
      в пару пикселей. Ровно это уже случалось с автодополнением подстановок (zay-panel.css: .zay-ac--up).
   ⚠️ top: auto ОБЯЗАТЕЛЕН здесь же — одного bottom мало, top надо снять явно. */
#tab-clients .crm-ms__drop--up { top: auto; bottom: calc(100% + 4px); }
#tab-clients .crm-ms__search input { width: 100%; box-sizing: border-box; padding: 7px 10px; font: inherit;
    border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); }
/* ⚠️ ВЫСОТА СПИСКА ОГРАНИЧЕНА ПО ЗАМЕРУ: медиана 7 вариантов, встречаются списки на 47. Шесть строк видно
   целиком, дальше прокрутка ВНУТРИ панели — сама панель за экран не уезжает. */
#tab-clients .crm-ms__list { max-height: 232px; overflow-y: auto; -webkit-overflow-scrolling: touch; }
#tab-clients .crm-check { display: flex; align-items: center; gap: 8px; padding: 6px 8px; font-size: 14px;
    color: var(--text); cursor: pointer; border-radius: 8px; }
#tab-clients .crm-check:hover { background: var(--surface-2, #f3f4f6); }
#tab-clients .crm-check input { flex: none; margin: 0; }
/* ⚠️ И ЗДЕСЬ ТОЖЕ: строку поиск прячет атрибутом, а display от класса (1,1,0) сильнее [hidden] (0,1,0). */
#tab-clients .crm-check[hidden] { display: none; }

/* ── РАДИО: ВСЕ ВАРИАНТЫ ВИДНЫ СРАЗУ, В ОБЩЕЙ РАМКЕ ── */
/* ⚠️ РАМКА ТА ЖЕ, ЧТО У ПОЛЯ ВВОДА И У КНОПКИ МНОЖЕСТВЕННОГО СПИСКА: 1px var(--border), радиус 10, белый
   фон. Голые кнопки на фоне формы весили меньше соседних полей и читались как подпись, а не как контрол —
   блок обязан выглядеть полем, потому что он и есть поле. Значения не «похожие», а те же самые: сверено
   getComputedStyle с .crm-fld > input рядом. */
/* ⚠️ ВЫСОТА ОГРАНИЧЕНА ТЕМ ЖЕ ПОТОЛКОМ, ЧТО У МНОЖЕСТВЕННОГО СПИСКА (232px ≈ шесть строк). Сорок семь
   радиокнопок в рамке — та же простыня, только обрамлённая; замер тот же (медиана 7, максимум 47). */
#tab-clients .crm-radios { border: 1px solid var(--border); border-radius: 10px; background: #fff; background: var(--card, #fff);
    padding: 4px; box-sizing: border-box; max-height: 232px; overflow-y: auto;
    -webkit-overflow-scrolling: touch; }
#tab-clients .crm-radio { display: flex; align-items: center; gap: 8px; padding: 6px 7px; font-size: 14px;
    color: var(--text); cursor: pointer; border-radius: 8px; }
#tab-clients .crm-radio:hover { background: var(--surface-2, #f3f4f6); }
/* ⚠️ ВЫБРАННЫЙ ВАРИАНТ — ПОДЛОЖКОЙ НА ВСЮ СТРОКУ, а не только точкой в кружке. Точка мелкая, и в списке из
   десяти строк глазу не за что зацепиться; подложка отвечает на «что выбрано» с одного взгляда. :has()
   в проекте уже используется (por-panel.css: .por-ai-zone:has(.air:empty)), нового приёма не заводим. */
#tab-clients .crm-radio:has(input:checked) { background: var(--primary-soft, #eef2ff); }
#tab-clients .crm-radio input { flex: none; margin: 0; }
#tab-clients .crm-radio__none { color: var(--muted); }

/* Чипы выбранного в просмотре карточки — вид тот же, что у чипов пикера (emp-picker.css). */
#tab-clients .crm-chipset { display: flex; flex-wrap: wrap; gap: 6px; }
#tab-clients .crm-chip { display: inline-flex; align-items: center; background: var(--primary-soft, #eef2ff); color: var(--primary-ink, #3730a3);
    border-radius: 20px; padding: 3px 10px; font-size: 13px; }

/* ═════════════ ПЕРЕПИСКА TELEGRAM (ТЗ-Telegram-v1, заход 2) ═════════════
   Лента берёт классы .tc-* из task-comments.css как есть — вид переписки обязан совпадать во всех
   разделах. Здесь только то, чего у ленты заметок нет: шапка диалога, подвал состояния, выбор диалога
   и список контактов компании. */

/* Шапка: имя собеседника, ник, отвязка. Черта отделяет её от ленты — как .crm-sect--rule от реквизитов,
   но БЕЗ отрицательных отступов: у ленты своя ширина внутри коробки, и черта во всю коробку читалась бы
   как разделитель разделов, а не шапки блока. */
#tab-clients .tg-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
    padding-bottom: 8px; border-bottom: 1px solid var(--border); }
#tab-clients .tg-head__n { font-size: 14px; font-weight: 600; color: var(--text); }
#tab-clients .tg-head__u { font-size: 13px; color: var(--muted); }
#tab-clients .tg-head__x { margin-left: auto; border: 0; background: none; padding: 0; cursor: pointer;
    font-size: 12px; color: var(--muted, #57606a); font-family: inherit; text-decoration: underline dotted; }
#tab-clients .tg-head__x:hover { color: var(--danger-ink); }

/* Аватар у исходящего не рисуется, но место держит — иначе пузыри справа и слева стоят по разным краям
   (тот же приём, что .tc-row:not(.tc-row--first) .tc-ava в task-comments.css). */
#tab-clients .tg-ava--off { visibility: hidden; }

#tab-clients .tg-notext { color: var(--muted); font-style: italic; }
#tab-clients .tg-clip { display: flex; align-items: center; gap: 5px; margin-top: 5px;
    font-size: 13px; color: var(--muted, #57606a); }
#tab-clients .tc-bubble--own .tg-clip { color: rgba(255, 255, 255, .85); }
/* Пометка пересылки: над текстом, заметной — пересланные слова написал не собеседник.
   Модификатор для своего пузыря стоит НИЖЕ базового правила: при равной специфичности
   побеждает нижнее, и перестановка молча вернула бы серый текст на акцентном фоне.
   ⚠️ ТОКЕН --primary, А НЕ --accent, И ЭТО ИСПРАВЛЕНИЕ С РОЖДЕНИЯ ПРАВИЛА. Токена --accent в кабинете
   нет ни одного: он объявлен только в reset-sw.html, отдельной служебной странице. Всё это время
   пометка «Переслано от …» рисовалась не акцентом, а унаследованным цветом — отсутствие цвета
   выглядит как решение дизайнера, поэтому никто и не замечал. Сторож молчал, потому что считал
   --accent объявленным, найдя его в ИМЕНИ КЛАССА .emp-btn--accent:hover (app.css:1782). */
#tab-clients .tg-fwd { display: flex; align-items: center; gap: 5px; margin-bottom: 4px;
    font-size: 12px; font-weight: 600; color: var(--primary-ink, var(--primary)); }
#tab-clients .tc-bubble--own .tg-fwd { color: rgba(255, 255, 255, .92); }
/* Плашка цитаты: над пометкой пересылки и над текстом. Полоса слева — привычный в мессенджерах знак
   «это чужие слова, а не начало моего сообщения».
   ⚠️ НЕИЗВЕСТНАЯ ПЕРЕМЕННАЯ УБИВАЕТ ВЕСЬ shorthand, А НЕ ТОЛЬКО ЦВЕТ. С var(--accent) вычисленное
   значение border-left было «0px none» — полосы не было вовсе, и на экране это читалось как «её не
   рисуют», а не как ошибка. Проверять такое можно только экраном: текст правила выглядит исправным.
   ⚠️ Модификаторы для своего пузыря и для кликабельной плашки стоят НИЖЕ базовых правил: при равной
   специфичности побеждает нижнее, и перестановка молча вернула бы серый текст на акцентном фоне. */
#tab-clients .tc-quote { margin-bottom: 4px; padding: 3px 8px; border-left: 3px solid var(--primary);
    border-radius: 4px; background: rgba(9, 105, 218, .06); font-size: 12px; line-height: 1.35;
    overflow: hidden; }
#tab-clients .tc-quote__who { display: block; font-weight: 600; color: var(--primary-ink, var(--primary)); }
/* Одна строка и многоточие: цитата — намёк на исходное, а не его пересказ. */
#tab-clients .tc-quote__t { display: block; color: var(--muted, #57606a); white-space: nowrap; overflow: hidden;
    text-overflow: ellipsis; }
#tab-clients .tc-quote--go { cursor: pointer; }
#tab-clients .tc-quote--go:hover { background: rgba(9, 105, 218, .12); }
#tab-clients .tc-bubble--own .tc-quote { border-left-color: rgba(255, 255, 255, .85);
    background: rgba(255, 255, 255, .14); }
#tab-clients .tc-bubble--own .tc-quote__who { color: rgba(255, 255, 255, .95); }
#tab-clients .tc-bubble--own .tc-quote__t { color: rgba(255, 255, 255, .85); }
#tab-clients .tc-bubble--own .tc-quote--go:hover { background: rgba(255, 255, 255, .22); }
/* Звонок — строка-событие посередине ленты: ни пузыря, ни аватара, ни скрепки. */
#tab-clients .tg-event { display: flex; align-items: center; justify-content: center; gap: 6px;
    margin: 10px 0; font-size: 12px; color: var(--muted); }
#tab-clients .tg-event-dot { display: inline-flex; align-items: center; }
#tab-clients .tg-event-at { opacity: .75; }
/* Фотографии в пузыре: одна — во всю ширину, несколько — сетка квадратов.
   Модификатор --grid стоит НИЖЕ базового правила: при равной специфичности побеждает нижнее. */
#tab-clients .tg-phs { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
#tab-clients .tg-ph { display: block; border-radius: 8px; overflow: hidden; line-height: 0; }
#tab-clients .tg-ph img { display: block; width: 100%; height: auto; border-radius: 8px; }
#tab-clients .tg-phs--grid .tg-ph { width: 84px; height: 84px; }
#tab-clients .tg-phs--grid .tg-ph img { width: 84px; height: 84px; object-fit: cover; }
/* Скелетон «ещё качается» — тот же, что у вложений поручения: движение говорит «идёт», а не «пусто». */
#tab-clients .tg-ph--wait { width: 84px; height: 84px; border-radius: 8px;
    background: linear-gradient(90deg, var(--surface-2, #eef0f4) 25%, var(--surface-2, #e4e8f0) 37%, var(--surface-2, #eef0f4) 63%);
    background-size: 400% 100%; animation: tgPhShimmer 1.4s ease infinite; }
@keyframes tgPhShimmer { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
/* Неудача и «слишком большое» — словами, не пустотой. */
#tab-clients .tg-ph--bad { display: inline-flex; align-items: center; gap: 5px; line-height: 1.4;
    font-size: 12px; color: var(--muted); }
#tab-clients .tc-bubble--own .tg-ph--bad { color: rgba(255, 255, 255, .85); }
/* Строки файлов в пузыре: значок, имя, размер, действие. Модификаторы НИЖЕ базового правила —
   при равной специфичности побеждает нижнее. */
#tab-clients .tg-files { display: flex; flex-direction: column; gap: 4px; margin-top: 6px; }
#tab-clients .tg-file { display: flex; align-items: center; gap: 6px; font-size: 13px;
    color: inherit; text-decoration: none; }
#tab-clients .tg-file:hover { text-decoration: underline; }
#tab-clients .tg-file--off { color: var(--muted); }
#tab-clients .tg-file--off:hover { text-decoration: none; }
#tab-clients .tg-file--wait { color: var(--muted); }
#tab-clients .tg-file__get { margin-left: 4px; padding: 2px 10px; border: 0;
    border-radius: var(--btn-radius, 10px); background: var(--primary); color: #fff;
    font-size: 12px; font-weight: 600; cursor: pointer; }
#tab-clients .tg-file__get:disabled { opacity: .5; cursor: default; }
#tab-clients .tc-bubble--own .tg-file--off,
#tab-clients .tc-bubble--own .tg-file--wait { color: rgba(255, 255, 255, .85); }

/* ── МЕДИА БЕЗ ПОДЛОЖКИ ──
   ⚠️ ПУЗЫРЬ СУЩЕСТВУЕТ РАДИ ТЕКСТА. Фон и отступы отделяют реплику от реплики; вокруг одного кадра
      они превращаются в толстую цветную рамку, которой нет ни в одном мессенджере. Класс ставит
      карточка, и только когда в сообщении НЕТ ничего, кроме этого кадра (klienty.php: bare).
   ⚠️ ПРАВИЛА ЖИВУТ ЗДЕСЬ, А НЕ В media-player.css, И ЭТО НЕ КАПРИЗ. Отступы медиа заданы правилами
      раздела, у которых впереди id (#tab-clients .tg-files); снять их правилом из общего файла, где
      id нет, нельзя ни при каком порядке подключения — специфичность выше любого порядка. */
#tab-clients .tc-bubble--bare { background: none; padding: 0; position: relative; }
#tab-clients .tc-bubble--bare .tg-files,
#tab-clients .tc-bubble--bare .tg-phs,
#tab-clients .tc-bubble--bare .tg-pl,
#tab-clients .tc-bubble--bare .tg-vid,
#tab-clients .tc-bubble--bare .tg-doc-img { margin-top: 0; }
/* ⚠️ ЦВЕТ ВОЗВРАЩАЕТСЯ К ОБЫЧНОМУ. В своём пузыре время и текст белые — на акцентном фоне иначе
   нельзя; подложки больше нет, и белое по светлой ленте пропало бы целиком. */
#tab-clients .tc-bubble--bare .tc-time { color: var(--muted); }
#tab-clients .tc-bubble--bare .tc-text { display: block; color: var(--text); margin-top: 4px; }
/* Время поверх кадра — полупрозрачной плашкой, как у фотографий в ленте мессенджера. */
#tab-clients .tc-bubble--onmedia .tc-time { position: absolute; left: 8px; bottom: 8px;
    padding: 1px 8px; border-radius: 999px; background: rgba(17, 24, 39, .6); color: #fff; }

/* ЛЕНТА ПЕРЕПИСКИ ЧИТАЕТСЯ КАК В МЕССЕНДЖЕРЕ: открылась — видны последние, вверх уходишь сам, старое
   подгружается по краю. Кнопки «Показать ещё» здесь больше нет, и её правил тоже.

   ⚠️ НИЗ ДЕРЖИТ LAYOUT, А НЕ JS: column-reverse на СКРОЛЛЕРЕ переворачивает систему координат —
      scrollTop = 0 это НИЗ, и он остаётся низом сам, сколько бы контент снизу ни дорастал (поздняя
      картинка, новое сообщение из опроса). Замерено в Chrome на изолированном скроллере: рост
      последнего блока на 500px не сдвинул низ ни на пиксель; дописанные снизу три сообщения не
      сдвинули читаемое ВВЕРХУ ни на пиксель (браузер сам двигает scrollTop, а не содержимое).
      Тот же приём и тот же довод, что у чата «Запросы в 1С» (app.css, .result).

   ⚠️ ПЕРЕВОРОТ — НА СКРОЛЛЕРЕ, У КОТОРОГО РОВНО ОДИН РЕБЁНОК. reverse меняет порядок flex-детей:
      поставь его на саму ленту — пузыри встанут вверх ногами, а координаты останутся прежними, потому
      что скроллер другой узел. Поэтому слоёв три: обёртка (для плашки), скроллер, лента.

   ⚠️ .tc-feed НЕ ТРОГАЕМ — на этом классе живут ПЯТЬ лент: обвязка поручений, переписка о клиенте,
      комментарии заявок, «Сообщения» и эта. Всё своё — под модификатором --msg и на новых классах. */
#tab-clients .tc-scroll-wrap { position: relative; }
/* ⚠️ ВЕРХНИЕ 2px — РАДИ ОБВОДКИ ПОДСВЕТКИ, А НЕ РАДИ ВОЗДУХА. Обводка не входит в область прокрутки по
   спецификации, и у САМОГО СТАРОГО сообщения её срезает край скроллера. Замерено в Chrome на этих же
   файлах: над первым пузырём 2px (padding ленты 2px 2px 4px), а обводке нужно 4 (offset 2 + ширина 2) —
   верхние 2px уходили под обрез. Снизу 4px и так хватает. Добавляем СВОЕМУ классу-скроллеру: .tc-feed
   общий на пять лент, и трогать его ради одной нельзя. */
#tab-clients .tc-scroll { max-height: 340px; overflow-y: auto; overflow-x: hidden;
    padding-top: 2px;
    display: flex; flex-direction: column-reverse; }
/* Лента внутри перевёрнутого скроллера — обычная колонка: порядок сообщений не переворачивается.
   Своей высоты и прокрутки у неё больше нет — они у скроллера. */
#tab-clients .tc-feed--msg { max-height: none; overflow: visible; }

/* Край истории: один слот на два состояния — «идёт подгрузка» и «начало переписки». Два разных места
   под эти две надписи означали бы, что одно из них однажды останется висеть рядом с другим. */
#tab-clients .tc-edge { display: flex; align-items: center; gap: 8px; justify-content: center;
    font-size: 11px; color: var(--muted); padding: 4px 2px; }
#tab-clients .tc-edge::before, #tab-clients .tc-edge::after { content: ''; flex: 1 1 auto;
    height: 1px; background: var(--border); }
/* У точек подгрузки линий по бокам нет: это не рубеж, а состояние. */
#tab-clients .tc-edge--wait::before, #tab-clients .tc-edge--wait::after { content: none; }

/* Разделитель дня — не сообщение и не пузырь: он всегда по центру, независимо от направления соседей. */
#tab-clients .tc-day { align-self: stretch; display: flex; align-items: center; justify-content: center;
    gap: 8px; padding: 6px 2px 4px; font-size: 11px; line-height: 1.2; color: var(--muted); }
#tab-clients .tc-day::before, #tab-clients .tc-day::after { content: ''; flex: 1 1 auto;
    height: 1px; background: var(--border); }

/* ⚠️ ПЛАШКА «НОВЫЕ» — absolute ОТ ОБЁРТКИ, А НЕ sticky. sticky работает только внутри своего
      скроллера, а внутри перевёрнутого он считал бы края от перевёрнутой оси. Замерено: absolute от
      обёртки не уезжает при прокрутке вовсе — низ плашки держится на 8px от низа скроллера и вверху,
      и внизу, и в середине.
   ⚠️ ОТСТУПА ПОД НЕЁ У ЛЕНТЫ НЕТ, И ЭТО ЗАМЕР, А НЕ НЕБРЕЖНОСТЬ. Включённый по показу отступ САМ
      сдвигает читаемое: замерено — отступ 34px увёл якорь на 30px, то есть ровно та беда, от которой
      мы уходим. А накрывает плашка край видимой зоны (в пробе — сообщение №15 из 25), а не последнее
      сообщение: видна она только когда человек НЕ внизу, то есть смотрит выше.
   ⚠️ РАДИУС КНОПОЧНЫЙ, А НЕ ПИЛЮЛЯ. Макет предполагал 999px «как в мессенджере», но правило радиусов
      (radius-check) считает кнопкой всякий нажимаемый элемент с подписью словом — а эта плашка ведёт
      вниз, то есть меняет экран. Пилюля здесь означала бы восьмой радиус на кнопках вместо сведённого
      токена; своего исключения ради вида не заводим. */
#tab-clients .tc-new { position: absolute; bottom: 8px; left: 50%;
    transform: translateX(-50%); border: 0; border-radius: var(--btn-radius, 10px);
    padding: 6px 14px; font-size: 12px; font-weight: 600; font-family: inherit;
    background: var(--primary); color: #fff; box-shadow: var(--shadow-pop); cursor: pointer; }
#tab-clients .tc-new:hover { background: var(--primary-dark); }

/* ── ПОИСК ПО ПЕРЕПИСКЕ ── */
/* ⚠️ ПОЛЕ — ТОТ ЖЕ ВИД, ЧТО У ПОИСКА ПО СПРАВОЧНИКУ (.crm-search input выше в этом файле). Тот же
   орган на том же экране: два похожих поля с разными отступами читаются как разные по смыслу. */
#tab-clients .tc-find input { width: 100%; box-sizing: border-box; padding: 9px 11px; font: inherit;
    border: 1px solid var(--border); border-radius: 10px; background: var(--card, #fff); color: var(--text); }
/* Число найденного — подпись, а не заголовок: она сообщает объём, а не называет раздел. */
#tab-clients .tc-find__cap { font-size: 12px; color: var(--muted); margin: 8px 0 6px; }

/* Строка найденного — .lrow из linked-row.css (общий элемент трёх разделов), здесь только раскладка
   внутренностей: две строки вместо одной. */
#tab-clients .tc-hit { display: flex; flex-direction: column; gap: 3px; align-items: stretch;
    text-align: left; width: 100%; }
#tab-clients .tc-hit__top { display: flex; justify-content: space-between; gap: 8px;
    font-size: 12px; color: var(--muted); }
#tab-clients .tc-hit__b { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
#tab-clients .tc-hit__t { font-size: 13px; color: var(--text); min-width: 0; }
#tab-clients .tc-hit__f { font-size: 12px; color: var(--muted); flex: none; }

/* ⚠️ ПОДСВЕТКА — ПРОДУКТОВАЯ ЯНТАРНАЯ ПАРА, А НЕ СВОЙ ЖЁЛТЫЙ. Браузерный <mark> по умолчанию красит
   в системный жёлтый, который на нашей палитре выглядит чужим; а второй похожий янтарный рядом с
   бейджем «в архиве» читался бы как ещё одно состояние, которого нет. Цвет текста наследуется:
   подсветка отмечает место, а не меняет смысл слова. */
#tab-clients .tc-mark { background: var(--badge-archive-bg); color: inherit; border-radius: 3px;
    padding: 0 1px; }

/* ⚠️ НАЙДЕННОЕ ПОДСВЕЧИВАЕТСЯ ФОНОМ, А НЕ РАМКОЙ. Рамка меняет размеры пузыря, то есть высоту ленты, —
   и дёргает раскладку ровно тогда, когда человек ищет глазами нужную строку. Гаснет через пару
   секунд: метка нужна, чтобы найти взглядом, а не чтобы остаться.
   ⚠️ ОБВОДКА, А НЕ ФОН, И ЭТО ЗАМЕНА ПРЕЖНЕГО РЕШЕНИЯ. Прежде здесь стояло «ПОДСВЕТКА ФОНОМ, А НЕ
      РАМКОЙ: рамка меняет размеры пузыря». Про border это верно, про outline — нет: он рисуется ВНЕ
      коробки и на раскладку не влияет, высота ленты не меняется.
      Цена прежнего решения замерена: жёлтый фон под БЕЛЫМ текстом своего пузыря даёт контраст 1.25
      при пороге 4.5 — подсвеченное собственное сообщение становилось нечитаемым ровно в те 2,5 с,
      когда человек в него смотрит. Подкрашивать тушь под фон пробовали в макете: тогда подсвеченный
      свой пузырь отличается от обычного на 1.58, то есть беда меняется с «не прочесть» на «не
      заметить». Обводка не трогает ни фон, ни тушь — она не зависит от того, что внутри пузыря, и не
      сломается о следующий элемент, который туда положат.
   ⚠️ КРАСИМ СВОЙ КЛАСС-СОСТОЯНИЕ, А НЕ ОБЩИЙ .tc-bubble. Пузырь — элемент ОБЩЕЙ ленты трёх разделов
      (task-comments.css), и правило раздела на него — это четвёртая копия правил ленты в панели;
      стережёт crm-run («в панели клиентов копий правил ленты нет»). Класс ставит JS на тот же узел:
      имя своё, чужого элемента не касаемся.
   ⚠️ БЕЗ ПЕРЕХОДА, И ЭТО НЕ ЛЕНЬ. Класс появляется и исчезает вместе с правилом, поэтому плавность
      сыграла бы только в одну сторону — а полумигание выглядит сбоем отрисовки, не подсказкой. */
#tab-clients .tc-hitbub { outline: 2px solid var(--primary-dark); outline-offset: 2px; }

/* Подвал: состояние службы. Точка несёт то же, что цвет текста, — форму И цвет сразу, чтобы состояние
   читалось и без различения оттенков. */
#tab-clients .tg-foot { display: flex; gap: 8px; align-items: baseline; font-size: 12px;
    color: var(--muted); border-top: 1px solid var(--border); padding-top: 8px; }
#tab-clients .tg-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--success-button, #1a7f37);
    flex: none; align-self: center; }
#tab-clients .tg-btn { border: 1px solid var(--border); background: var(--card, #fff); border-radius: var(--btn-radius, 10px);
    font-size: 13px; padding: 7px 12px; color: var(--text); font-family: inherit; cursor: pointer;
    align-self: flex-start; }
#tab-clients .tg-btn:hover { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }
/* Главное действие блока — та же расцветка, что у кнопки в состоянии «связки нет». Модификатор НИЖЕ
   базового правила: при равной специфичности побеждает нижнее. */
#tab-clients .tg-btn--go { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }

/* Строка выбора диалога — кнопка во всю ширину, как строки пикера сотрудников. */
#tab-clients .tg-pick { display: flex; width: 100%; box-sizing: border-box; text-align: left;
    border: 0; border-bottom: 1px solid var(--border); background: none; padding: 8px 4px;
    cursor: pointer; font-family: inherit; }
#tab-clients .tg-pick:hover { background: var(--surface-1); }
#tab-clients .tg-pick__b { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
#tab-clients .tg-pick__n { font-size: 14px; color: var(--text); }
#tab-clients .tg-pick__m { font-size: 12px; color: var(--muted); }

/* ⚠️ МОДИФИКАТОРЫ — НИЖЕ БАЗОВЫХ ПРАВИЛ. При равной специфичности побеждает нижнее; поставь их выше,
   и «служба не отвечает» осталось бы серым вместо красного. Линтеры такого не показывают. */
#tab-clients .tg-foot--warn { color: var(--danger-ink); }
#tab-clients .tg-dot--off { background: var(--danger-button, #d1242f); }
#tab-clients .tg-pick:last-of-type { border-bottom: 0; }

/* ══════════════════ ОБЪЕДИНЕНИЕ ДУБЛЕЙ (ТЗ-Клиенты-Слияние, заход 6) ══════════════════ */

/* След слияния на поглощённой карточке: куда делись её заявки и переписка. */
#tab-clients .crm-merged { border: 1px solid var(--primary-border, #c7d2fe); background: var(--primary-soft, #eef2ff); border-radius: 12px;
    padding: 12px; margin: 0 0 10px; }
#tab-clients .crm-merged__t { font-size: 13px; font-weight: 700; color: var(--primary-ink, #3730a3); margin-bottom: 3px; }
#tab-clients .crm-merged__s { font-size: 13px; color: var(--text); }
#tab-clients .crm-merged__l { border: 0; background: none; padding: 0; font: inherit; font-weight: 600;
    color: var(--primary-ink, var(--primary)); cursor: pointer; }
#tab-clients .crm-merged__l:hover { text-decoration: underline; }

/* Зона необратимого. Красная рамка, а не красная кнопка среди обычных: сначала видно границу, потом кнопку. */
#tab-clients .crm-dz { border: 1px solid var(--danger-border, #fecaca); border-radius: 12px; padding: 12px; margin: 0 0 12px; }
#tab-clients .crm-dz__t { font-size: 13px; font-weight: 700; color: var(--danger-ink, #991b1b); margin-bottom: 3px; }
#tab-clients .crm-dz__s { font-size: 12px; color: var(--muted); margin-bottom: 10px; }
#tab-clients .crm-dz__acts { display: flex; gap: 8px; }

/* Две стороны сравнения. */
#tab-clients .crm-cmp { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 10px 0 14px; }
#tab-clients .crm-side { border: 2px solid var(--border); border-radius: 12px; padding: 12px; background: var(--card, #fff);
    text-align: left; }
#tab-clients .crm-side__pick { font-size: 13px; font-weight: 700; color: var(--muted); margin-bottom: 8px; }
#tab-clients .crm-side__n { font-size: 15px; font-weight: 600; margin-bottom: 2px; }
#tab-clients .crm-side__s { font-size: 12px; color: var(--muted); margin-bottom: 10px; }
#tab-clients .crm-nums { list-style: none; margin: 0; padding: 0; font-size: 13px; }
#tab-clients .crm-nums li { display: flex; justify-content: space-between; gap: 8px; padding: 3px 0; }
#tab-clients .crm-nums .k { color: var(--muted); }
/* ⚠️ ЦИФРЫ МОНОШИРИННЫЕ: два столбца чисел рядом читаются только выровненными по разряду. */
#tab-clients .crm-nums .v { font-variant-numeric: tabular-nums; font-weight: 600; }

/* Переключатели расхождений. */
#tab-clients .crm-conf { margin-top: 4px; }
#tab-clients .crm-conf__t { font-size: 13px; font-weight: 700; margin-bottom: 2px; }
#tab-clients .crm-conf__s { font-size: 12px; color: var(--muted); margin-bottom: 10px; }
#tab-clients .crm-quiet { border: 1px solid var(--border); border-radius: 10px; background: var(--surface-muted, #f8fafc);
    padding: 10px; font-size: 12px; color: var(--muted); margin-bottom: 8px; }
#tab-clients .crm-quiet b { color: var(--text); font-weight: 600; }
#tab-clients .crm-cnf { border: 1px solid var(--border); border-radius: 10px; padding: 10px;
    margin-bottom: 8px; background: var(--card, #fff); }
#tab-clients .crm-cnf__l { font-size: 12px; color: var(--muted); margin-bottom: 6px; }
#tab-clients .crm-mopt { display: flex; gap: 8px; }
#tab-clients .crm-pickb { flex: 1; min-width: 0; text-align: left; border: 1px solid var(--border);
    background: var(--card, #fff); border-radius: var(--btn-radius, 10px); padding: 8px 10px; font: inherit;
    font-size: 13px; color: var(--text); cursor: pointer; }
#tab-clients .crm-pickb .who { display: block; font-size: 11px; color: var(--muted); font-weight: 400;
    margin-bottom: 1px; }

/* Итог числами и отказ. */
#tab-clients .crm-note { border: 1px solid var(--border); background: var(--surface-muted, #f8fafc); border-radius: 10px;
    padding: 10px; font-size: 12px; color: var(--muted); margin-top: 10px; }
#tab-clients .crm-warn { border: 1px solid var(--danger-border, #fecaca); background: var(--danger-bg, #fef2f2); border-radius: 10px; padding: 11px;
    font-size: 13px; color: var(--danger-ink, #991b1b); }
#tab-clients .crm-warn b { display: block; margin-bottom: 3px; }

/* Выбор пары в списке. */
#tab-clients .crm-tick { flex: none; width: 18px; height: 18px; border: 2px solid var(--border, #cbd5e1); border-radius: 5px;
    background: var(--card, #fff); position: relative; }
#tab-clients .crm-pickbar { display: flex; align-items: center; gap: 10px; padding: 10px; background: var(--card, #fff);
    border: 1px solid var(--border); border-radius: 12px; margin-top: 10px;
    position: sticky; bottom: 8px; box-shadow: 0 -4px 14px rgba(15, 23, 42, .06); }
#tab-clients .crm-pickbar__t { flex: 1; font-size: 13px; color: var(--muted); }
/* ⚠️ [hidden] ПОБИВАЕТ display: flex ТОЛЬКО ЯВНЫМ ПРАВИЛОМ. Атрибут задаёт display: none лишь в
   таблице умолчаний браузера, а любое своё display его перекрывает — полоса осталась бы видна
   пустой. Тот же довод у .crm-add, .crm-dups, .crm-form__acts. */
#tab-clients .crm-pickbar[hidden] { display: none; }

/* Компактная кнопка — размер, остальное от .btn. */
#tab-clients .btn--sm { padding: 7px 12px; font-size: 13px; }

/* ⚠️ МОДИФИКАТОРЫ И СОСТОЯНИЯ — НИЖЕ БАЗОВЫХ ПРАВИЛ. При равной специфичности побеждает нижнее: поставь
   .is-main выше .crm-side — и выбранная сторона осталась бы серой. Линтеры такого не показывают. */
#tab-clients .crm-side.is-main { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(79, 70, 229, .10); }
#tab-clients .crm-side.is-main .crm-side__pick { color: var(--primary-ink, var(--primary)); }
#tab-clients .crm-side[data-crm-mswap] { cursor: pointer; }
#tab-clients .crm-side[data-crm-mswap]:hover { border-color: var(--primary-border, #c7d2fe); }
#tab-clients .crm-nums .v.is-zero { color: var(--muted, #9ca3af); font-weight: 400; }
#tab-clients .crm-pickb:hover { border-color: var(--primary); }
#tab-clients .crm-pickb.on { border-color: var(--primary); background: var(--primary-soft, #eef2ff); font-weight: 600; }
#tab-clients .crm-tick.on { background: var(--primary); border-color: var(--primary); }
/* Галочка рисуется рамкой повёрнутого прямоугольника — без картинки и без шрифта иконок. */
#tab-clients .crm-tick.on::after { content: ""; position: absolute; left: 4px; top: 0; width: 5px; height: 10px;
    border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg); }

/* ══════════════════ НИК TELEGRAM (ТЗ-Telegram-Nick-v1, заход 7) ══════════════════ */

/* Состояние вопроса «какой номер у этого ника» — строкой под реквизитами, не плашкой во весь экран:
   это подробность одного поля, а не событие карточки. */
#tab-clients .crm-nick { font-size: 12px; color: var(--muted); margin: -6px 0 10px; padding: 0 2px; }
#tab-clients .crm-nick__b { border: 1px solid var(--border); background: var(--card, #fff);
    border-radius: var(--btn-radius, 10px); padding: 3px 10px; font: inherit; font-size: 12px;
    color: var(--text); cursor: pointer; margin-left: 6px; }

/* ⚠️ МОДИФИКАТОРЫ НИЖЕ БАЗОВОГО ПРАВИЛА: при равной специфичности побеждает нижнее, и отказ остался бы
   серым наравне с ожиданием. Линтеры такого не показывают. */
#tab-clients .crm-nick--wait { color: var(--muted); }
#tab-clients .crm-nick--err { color: var(--danger-ink); }
#tab-clients .crm-nick__b:hover { border-color: var(--primary); color: var(--primary-ink, var(--primary)); }

/* ── ЭКРАН «БАЛАНСЫ»: остатки клиентов (ТЗ 7.7) ──
   Строка — кнопка: весь раздел открывает карточки так же (.lrow), и вид у них общий. */
#tab-clients .crm-rep { display: block; margin-top: 10px; }
#tab-clients .crm-bals-search { width: min(560px, 100%); margin-top: 14px; }
#tab-clients .crm-rep__r { display: flex; width: 100%; box-sizing: border-box; gap: 10px; align-items: center;
    padding: 9px 4px; border: 0; border-bottom: 1px solid var(--border); background: none; text-align: left;
    font: inherit; color: var(--text); cursor: pointer; }
#tab-clients .crm-rep__r:hover { background: var(--bg, #f4f6fb); }
#tab-clients .crm-rep__ic { flex: 0 0 20px; display: inline-flex; align-items: center; color: var(--muted); }
#tab-clients .crm-rep__t { flex: 1; min-width: 0; font-size: 14px; overflow: hidden; text-overflow: ellipsis;
    white-space: nowrap; }
#tab-clients .crm-rep__s { flex: 0 0 auto; min-width: 104px; text-align: right; font-size: 14px;
    font-weight: 600; font-variant-numeric: tabular-nums; }
#tab-clients .crm-rep__e { flex: 0 0 140px; text-align: right; font-size: 12px; color: var(--warning-ink, #92400e);
    font-variant-numeric: tabular-nums; }
#tab-clients .crm-rep__none { color: var(--muted); }
/* Итог — не кнопка: нажимать нечего. ⚠️ Модификатор НИЖЕ базового правила: при равной специфичности
   побеждает нижнее, и поставь мы его выше — курсор и рамка остались бы кнопочными. */
#tab-clients .crm-rep__r--total { border-bottom: 0; border-top: 2px solid var(--border); margin-top: 4px;
    font-weight: 600; cursor: default; }
#tab-clients .crm-rep__r--total:hover { background: none; }

/* Узкий экран: журнал движений складывается — дата и сумма в строку, причина под ними. */
@media (max-width: 560px) {
    #tab-clients .crm-mv__r { flex-wrap: wrap; }
    #tab-clients .crm-mv__s { min-width: 0; margin-left: auto; text-align: right; }
    #tab-clients .crm-mv__t { flex: 0 0 100%; }
    #tab-clients .crm-bal__btn { margin-left: 0; }
    /* Отчёт: срок сгорания уходит под название, чтобы сумма не ужималась до неразборчивой. */
    #tab-clients .crm-rep__r { flex-wrap: wrap; }
    #tab-clients .crm-rep__e { flex: 0 0 100%; text-align: left; padding-left: 30px; }
}

/* Подпись под парой кнопок «В архив» / «Удалить»: она и разводит их по смыслу. Мелкий кегль и приглушённый
   цвет — это пояснение, а не призыв; выделены только сами слова-кнопки, чтобы взгляд нашёл соответствие. */
#tab-clients .crm-acts-hint { margin: 6px 0 2px; font-size: 12px; line-height: 1.5; color: var(--muted); }

/* Массовый выбор в справочнике — тот же приём и вид, что у заявок и поручений: галочка слева, панель снизу. */
#tab-clients .crm-selbox { flex: 0 0 auto; width: 20px; height: 20px; border: 1.5px solid var(--border);
                          border-radius: 6px; display: inline-flex; align-items: center; justify-content: center;
                          color: #fff; background: var(--card, #fff); cursor: pointer; }
#tab-clients .crm-selbox:hover { border-color: var(--primary); }
#tab-clients .crm-selbox.is-on { background: var(--primary); border-color: var(--primary); }
#tab-clients .lrow.is-selected { border-color: var(--primary); background: var(--primary-soft, #f5f6ff); }
/* ⚠️ ПАРНОЕ ПРАВИЛО ДЛЯ [hidden] ОБЯЗАТЕЛЬНО. display от класса сильнее атрибута hidden, и без этой строки
   панель выбора стояла бы на экране всегда — в том числе когда ничего не выбрано. Поймано сторожем
   crm-run.js; ту же ловушку он однажды уже ловил на .crm-dups. */
#tab-clients .crm-massbar[hidden] { display: none; }
#tab-clients .crm-massbar { position: sticky; top: 8px; z-index: 20;
                            display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
                            background: var(--primary-soft, #eef2ff); border: 1px solid var(--primary); border-radius: 12px;
                            padding: 8px 12px; margin: 8px 0; font-size: 13px; }
/* На узких экранах панель закрепляется ниже строки навигации оболочки и безопасной зоны экрана. */
@media (max-width: 1023px) {
    #tab-clients .crm-massbar { top: calc(60px + env(safe-area-inset-top, 0px)); }
}
#tab-clients .crm-massbar__n { font-weight: 600; }
#tab-clients .crm-massbar__assign { display: flex; align-items: center; gap: 8px; flex: 1 1 420px; min-width: 0; }
#tab-clients .crm-massbar__picker { flex: 1 1 200px; min-width: 160px; max-width: 320px; margin-top: 0; }
/* В одиночном выборе пустая строка чипов не должна сдвигать поле вниз. */
#tab-clients .crm-massbar__picker .empp-chips:empty { display: none; }
#tab-clients .crm-massbar__picker .empp-input { display: block; }
#tab-clients .crm-massbar__picker .empp-input,
#tab-clients .crm-massbar .btn { box-sizing: border-box; height: 38px; min-height: 38px; }
#tab-clients .crm-massbar__assign > .btn { flex: none; }
#tab-clients #crmMassAssign[hidden] { display: none; }
#tab-clients .crm-massbar__del { margin-left: auto; }
#tab-clients .crm-massbar__clear { border: 0; background: none; padding: 0; font: inherit; font-size: 13px;
                                   color: var(--muted); cursor: pointer; text-decoration: underline; }

@media (max-width: 600px) {
    #tab-clients .crm-massbar__assign { flex-basis: 100%; flex-wrap: wrap; }
    #tab-clients .crm-massbar__picker { max-width: none; }
    #tab-clients .crm-list-tools { flex-direction: column; }
    #tab-clients .crm-list-filter,
    #tab-clients .crm-filterbtn { width: 100%; max-width: none; }
    #tab-clients .crm-list-pop { left: 0; right: auto; width: 100%; }
    #tab-clients .crm-list-pop--cols { position: fixed; left: 16px; right: 16px; top: 70px; width: auto; }
    #tab-clients .crm-table { min-width: 760px; }
    #tab-clients .crm-table th:nth-child(2) { min-width: 190px; }
    #tab-clients .crm-table__mobile-type { display: block; }
}

/* Сравнение дублей: заполненные значения исходных карточек доступны до объединения. */
#tab-clients .crm-dedup-comparison { overflow-x: auto; }
#tab-clients .crm-dedup-comparison table { width: 100%; border-collapse: collapse; font-size: 13px; }
#tab-clients .crm-dedup-comparison th, #tab-clients .crm-dedup-comparison td { min-width: 140px; max-width: 280px; padding: 9px; text-align: left; vertical-align: top; border-bottom: 1px solid var(--border, #d0d7de); overflow-wrap: anywhere; white-space: pre-wrap; }
#tab-clients .crm-dedup-comparison th { background: var(--surface-2, #f6f8fa); }
#tab-clients .crm-dedup-comparison th:first-child { min-width: 100px; }
#tab-clients .crm-dedup-related:empty, #tab-clients .crm-dedup-reasons:empty { display: none; }

#tab-clients .crm-dedup-overlay [hidden] { display: none; }
