/* Разделы «Партнёры», «Контакты», «Компании», «Требуют разбора», «Подключение аккаунтов». */
.partners { display: flex; flex-direction: column; gap: 14px; }

/*
 * Списки «Компании» и «Контакты» (макет): полоса вида (тип, поиск, «Столбцы») и полоса фильтров (тихие кнопки, составные чипы
 * условий, справа — итог) на полотне, ниже — таблица на всю ширину: шапка со значками, строки 40px в одну строку.
 */
.directory-list { display: flex; flex-direction: column; }
.viewbar, .filterbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 20px 0; }
.filterbar { padding: 8px 20px 10px; }
.dir-search { display: flex; align-items: center; gap: 6px; width: 280px; max-width: 100%; height: 28px; margin: 0; padding: 0 8px;
  border: 1px solid var(--color-border-strong); border-radius: var(--radius-control); background: var(--color-bg-panel); color: var(--color-text-muted); }
.dir-search:focus-within { border-color: var(--color-signal-primary); box-shadow: 0 0 0 3px var(--color-signal-soft); }
.dir-search .board-search { flex: 1; min-width: 0; height: 26px; min-height: 0; padding: 0; border: 0; border-radius: 0; background: transparent;
  box-shadow: none; color: var(--color-text-primary); font-size: 13px; }
.dir-search .board-search:focus { box-shadow: none; }
/* Тихие кнопки полосы фильтров (без рамки, как у макета); выбранные условия — чипами справа от них. */
.filterbar .pill { border-color: transparent; background: transparent; box-shadow: none; color: var(--color-text-secondary); }
.filterbar .pill:hover, .filterbar .pop-anchor.open > .pill { background: var(--color-table-hover-bg); color: var(--color-text-primary); }
.filterbar .pill .icon { color: var(--color-text-muted); }
.summary { min-width: 0; color: var(--color-text-muted); font-size: 12.5px; }
.summary b { color: var(--color-text-secondary); font-weight: 600; }
/* Составной фильтр: «Поле | — | значение | ×» — как у Attio. */
.fpill { display: inline-flex; align-items: stretch; max-width: 100%; height: 28px; overflow: hidden; border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-control); background: var(--color-bg-panel); box-shadow: var(--shadow-xs); font-size: 12.5px; }
.fpill > * { display: inline-flex; align-items: center; gap: 6px; padding: 0 8px; border: 0; border-right: 1px solid var(--color-border-soft);
  background: transparent; white-space: nowrap; }
.fpill > :last-child { border-right: 0; }
.fpill .k { color: var(--color-text-secondary); }
.fpill .k .icon, .fpill .op { color: var(--color-text-muted); }
.fpill .v { min-width: 0; overflow: hidden; color: var(--color-text-primary); font-weight: 600; text-overflow: ellipsis; }
.fpill-x { color: var(--color-text-muted); }
.fpill-x:hover { background: var(--color-table-hover-bg); color: var(--color-text-primary); }
.dir-table { border-top: 1px solid var(--color-border-soft); }
.directory-list .data-table tbody td { height: 40px; padding: 0 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; overflow-wrap: normal; }
/* Чип в ячейке — в одну строку: не помещается — многоточие (строчный блок, а не flex: иначе многоточия нет). */
.directory-list .data-table .badge { display: inline-block; max-width: 100%; overflow: hidden; line-height: 20px; text-overflow: ellipsis;
  vertical-align: middle; }
.dir-empty { margin: 24px 20px; padding: 32px 16px; }
/* Ячейки: плитка и имя в строку, текст — в одну строку с многоточием, сделок — число и открытые, пусто — «—». */
.cell-name { display: flex; align-items: center; gap: 8px; min-width: 0; overflow: hidden; }
.cell-name > .deal-link { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cell-deals { white-space: nowrap; }
.tx { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cell-name > .tx { display: inline; }
.nil { color: var(--color-text-muted); }
.cell-link { color: var(--color-text-primary); text-decoration: none; }
.cell-link:hover { text-decoration: underline; text-decoration-color: var(--color-border-strong); text-underline-offset: 3px; }

/* Страница-колонка по центру (макет: как «Сегодня»): заголовок и вступление, блоки, пояснение внизу. */
.page-col { display: flex; flex-direction: column; gap: 22px; width: 100%; max-width: 1080px; margin: 0 auto; padding: 24px 24px 56px; }
.page-h { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px 16px; }
.page-h h1 { margin: 0; font-size: 22px; font-weight: 600; letter-spacing: -.01em; }
.page-h .right { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-left: auto; }
.page-intro { margin: 4px 0 0; color: var(--color-text-muted); font-size: 13px; line-height: 1.5; }
.page-col > .hint, .page-col > .notice { margin: 0; }
.field-hint { margin: 0; color: var(--color-text-muted); font-size: 12px; line-height: 1.45; }
.reasons { display: flex; flex-wrap: wrap; gap: 6px; }
/* Блок: заголовок со значком, числом и подсказкой; строки — в рамке с волосками. */
.blk { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.blk-h { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; min-width: 0; font-size: 13.5px; font-weight: 600; }
.blk-h > .icon { color: var(--color-text-muted); }
.blk-title { margin: 0; font-size: 13.5px; font-weight: 600; line-height: 1.3; }
.blk-n { font: 500 11px/1 var(--font-mono); color: var(--color-text-muted); font-feature-settings: var(--font-mono-features); }
.blk-hint { margin: 0; color: var(--color-text-muted); font-size: 12px; font-weight: 400; line-height: 1.4; }
.blk-right { display: flex; align-items: center; gap: 6px; margin-left: auto; }
/* Рамка строк без обрезки: списки решения (с поиском) выходят за её край; скругление — у крайних строк. */
.lbox { display: grid; grid-template-columns: minmax(0, 1fr); margin: 0; padding: 0; list-style: none; border: 1px solid var(--color-border-soft);
  border-radius: var(--radius-card); background: var(--color-bg-panel); }
.lbox > * { border-bottom: 1px solid var(--color-line); }
.lbox > :last-child { border-bottom: 0; border-radius: 0 0 var(--radius-card) var(--radius-card); }
.lbox > :first-child { border-top-left-radius: var(--radius-card); border-top-right-radius: var(--radius-card); }
.lrow { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; min-height: 48px; padding: 8px 12px; font-size: 13px; }
.lrow:hover { background: var(--color-table-hover-bg); }
.lrow .who { display: grid; justify-items: start; gap: 2px; flex: 1 1 220px; min-width: 0; }
.lrow .who > b { max-width: 100%; overflow: hidden; font-size: 13px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.lrow .who > span { max-width: 100%; color: var(--color-text-muted); font-size: 12.5px; overflow-wrap: anywhere; }
.lrow .who > .deal-link { max-width: 100%; overflow-wrap: anywhere; }
.lrow .right { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 6px 8px; min-width: 0; max-width: 100%;
  margin-left: auto; }
.lrow .right .primary, .lrow .right .secondary, .qacts .primary, .qacts .secondary { min-height: 24px; padding: 0 8px; font-size: 12px; }
.lrow .badge { white-space: normal; overflow-wrap: anywhere; }
.ttl { font-size: 13.5px; font-weight: 500; line-height: 1.35; overflow-wrap: anywhere; }
.lmeta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; margin-top: 3px; color: var(--color-text-muted); font-size: 12.5px; }
.lmeta .badge { min-height: 20px; padding: 0 6px; font-size: 11.5px; }
.ev-ic, .src-ic, .acc-ic { display: grid; place-items: center; flex: none; background: var(--color-bg-panel-strong); color: var(--color-text-secondary); }
.ev-ic { width: 28px; height: 28px; border-radius: 50%; }
.ev-ic.ai { background: var(--color-signal-soft); color: var(--color-signal-ink); }
.src-ic { position: relative; width: 24px; height: 24px; border-radius: 50%; }
.chip-row { display: flex; flex-wrap: wrap; gap: 6px; }
.blk > .empty, .page-col > .empty { padding: 20px 16px; }
/* Пометка «AI» (как в макете): моноширинный капс на сиреневом. */
.origin { display: inline-flex; align-items: center; flex: none; height: 18px; padding: 0 5px; border-radius: 4px; background: var(--color-bg-panel-strong);
  color: var(--color-text-secondary); font: 500 10.5px/1 var(--font-mono); letter-spacing: .04em; text-transform: uppercase; white-space: nowrap; font-feature-settings: var(--font-mono-features); }
.origin.ai { background: var(--color-signal-soft); color: var(--color-signal-ink); }

/*
 * «Требуют разбора»: источник — строка (стрелка, значок, чип, название; справа собеседник и дата, предложение одним нажатием и
 * «Решение ▾»); стрелка раскрывает пометку AI (причина, краткое, найденные сделки), «Решение» — решение администратора CRM.
 */
.qline { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; min-height: 48px; padding: 6px 12px 6px 6px; }
.qtoggle { display: flex; align-items: center; gap: 8px; flex: 1 1 320px; min-width: 0; padding: 4px 6px; border: 0; border-radius: 6px;
  background: none; color: var(--color-text-primary); font-size: 13.5px; text-align: left; }
button.qtoggle:hover { background: var(--color-table-hover-bg); }
.qtoggle.static { padding-left: 28px; }
.qchev { flex: none; color: var(--color-text-muted); transition: transform .15s; }
.qrow.open .qchev, .review-more[open] > summary .qchev { transform: rotate(90deg); }
.qtext { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qrow.open .qtext { white-space: normal; overflow-wrap: anywhere; }
.qwho { min-width: 0; color: var(--color-text-muted); font-size: 12.5px; overflow-wrap: anywhere; }
/* Обсуждение команды: текст о том, где задан вопрос, и ссылка «Открыть в Telegram» — с отступом (QA 23.10, М5). */
.team-batch .qwho { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 10px; }
.qacts { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 6px; min-width: 0; max-width: 100%; margin-left: auto; }
.decide-toggle.on { background: var(--color-table-hover-bg); }
.decide-toggle .chevron { transition: transform .15s; }
.decide-toggle.on .chevron { transform: rotate(180deg); }
.qreason { margin: 0; color: var(--color-status-warning); }
.qsummary { margin: 0; color: var(--color-text-secondary); line-height: 1.45; }
.qmore { display: flex; align-items: flex-start; gap: 8px; margin: 0 12px 10px 36px; padding: 8px 10px; border-radius: 8px; background: var(--color-table-hover-bg);
  color: var(--color-text-secondary); font-size: 13px; }
.qmore[hidden], .qdecide[hidden] { display: none; }
.rv-body { display: grid; gap: 4px; min-width: 0; }
.rv-calendar { display: grid; gap: 2px; min-width: 0; overflow-wrap: anywhere; }
/* «Новая сделка?»: предзаполнение (встреча, гости, компания, контакт, признаки, похожее) и окно создания. */
.nd-facts .rv-body { gap: 6px; }
.nd-fact, .nd-similar { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; min-width: 0; overflow-wrap: anywhere; }
.nd-similar { flex-direction: column; align-items: flex-start; gap: 4px; }
.nd-process { flex-wrap: wrap; gap: 2px 8px; }
.nd-form-body { display: grid; gap: 10px; }
.nd-form-body .field { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.nd-form-body .field > .muted { min-width: 110px; }
.nd-form-body .input { flex: 1 1 220px; min-width: 0; }
.nd-duplicates { display: grid; gap: 4px; }
.review-series { gap: 6px; font-size: 12px; }
.qdecide { margin: 0 12px 12px 36px; }
details.review-more { display: block; }
.review-more > summary { display: flex; align-items: center; gap: 6px; width: fit-content; cursor: pointer; list-style: none; color: var(--color-text-secondary);
  font-size: 13px; font-weight: 600; }
.review-more > summary .blk-title { font-size: 13px; }
.review-more > summary::-webkit-details-marker { display: none; }
.review-more[open] > summary { margin-bottom: 8px; }
.review-more > .blk-hint { margin-bottom: 8px; }
.review-besales-tools { margin-bottom: 8px; }

@media (max-width: 1024px) {
  .two-col, .form-grid, .card-grid { grid-template-columns: 1fr; }
  .field.wide { grid-column: auto; }
}
/* Узкий экран: разделы и панели — в одну колонку (меню-полоса сверху — base.css). */
@media (max-width: 768px) {
  .toolbar:not(.mobile-open) .m-collapse { display: none; }
  /* Выбор столбцов — для таблицы, а на телефоне сделки идут карточками. */
  .table-shell > .table-head { display: none; }
  .toolbar .board-search { flex: 1 1 160px; min-width: 0; }
  .panel, .panel-card { padding: 16px; }
  h1 { font-size: 20px; }
  .desk-only { display: none; }
  .mobile-cards { display: flex; }
  .board-column { flex-basis: 84%; }
  .login-panel { margin: 16px auto; padding: 24px; }
  .login-row { flex-direction: column; align-items: stretch; }
  .item { display: block; }
  .kv { grid-template-columns: 1fr; gap: 2px; }
  .kv dd { margin-bottom: 6px; }
  .drawer { top: auto; height: 88vh; width: 100%; border-left: 0; border-top: 1px solid var(--color-border-soft);
    border-radius: var(--radius-panel) var(--radius-panel) 0 0; }
}

/* Решение по источнику: переключатель действия и одно поле под ним (списки с поиском, подсказки «Похоже»). */
.review-decide { display: grid; gap: 8px; justify-items: start; margin-top: 6px; }
/* Варианты решения на узком экране переносятся вторым рядом, а не обрезаются прокруткой вбок. */
.review-decide > .segmented { flex-wrap: wrap; overflow-x: visible; }
.review-decide-body { display: grid; gap: 6px; width: 100%; max-width: 720px; }
.review-decide .input { flex: 1 1 260px; min-width: 0; width: auto; min-height: 34px; padding: 0 12px; font-size: 13px; }
.review-suggest { gap: 6px; }

/* «Подключение аккаунтов»: аккаунт — строка (значок, имя и ник, состояние сборщика с датой, ответственный); шаги входа — номера в
   кружках, пройденные — с галочкой; панель текущего шага — в рамке. */
/* Столбцы строк одинаковые у всех аккаунтов: состояние и ответственный стоят ровно друг под другом. */
.acc-row { display: grid; grid-template-columns: 32px minmax(0, 1.2fr) minmax(0, 1fr) minmax(0, .8fr); align-items: center; gap: 8px 14px; }
.acc-ic { width: 32px; height: 32px; border-radius: var(--radius-soft); background: var(--color-blue-bg); color: var(--color-blue-ink); }
.acc-st { display: grid; justify-items: start; gap: 2px; min-width: 0; }
.acc-row .right { margin-left: 0; justify-content: flex-end; }
/* Карточки компании и контакта: шапка — плитка и отрасль (или компания), имя крупно, юрлицо (или должность). */
.rec-head { display: grid; gap: 8px; padding: 0 4px 12px; }
.rec-head .record-company { font-size: 15px; }
.rec-head .record-company b { min-width: 0; overflow: hidden; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.rec-title { margin: 0; font-size: 21px; font-weight: 600; line-height: 1.25; letter-spacing: -.01em; overflow-wrap: anywhere; }
.rec-head .record-buttons { margin-top: 4px; }
/* «Подключение аккаунтов» вкладками: полоса вкладок как у карточки, области вкладок одной минимальной высоты (вёрстка не прыгает,
   пока данные вкладки грузятся). */
.accounts-page { --accounts-panel-min-height: 320px; gap: 14px; }
.accounts-tabs > .deal-tabs { margin-top: 0; background: transparent; }
.accounts-panel, .accounts-stack, .accounts-telegram { display: flex; flex-direction: column; gap: 22px; min-width: 0; }
.accounts-panel { min-height: var(--accounts-panel-min-height); padding-top: 8px; }
.accounts-panel[hidden] { display: none; }
.accounts-panel:focus-visible { outline: 2px solid var(--color-focus-ring); outline-offset: 2px; border-radius: 4px; }
.telegram-toolbar { align-items: center; }
/* Человек — пилюля с круглой плиткой инициалов (ответственный аккаунта, как в макете). */
.telegram-page .pp { display: inline-flex; align-items: center; gap: 6px; height: 24px; max-width: 100%; padding: 0 8px 0 2px; border: 1px solid var(--color-border-soft);
  border-radius: 999px; background: var(--color-bg-panel); color: var(--color-text-primary); font-size: 12.5px; font-weight: 500; white-space: nowrap; }
.telegram-page .pp .nm { overflow: hidden; text-overflow: ellipsis; }
.telegram-page .pp .record-logo { width: 20px; height: 20px; font-size: 8.5px; }
/* «Что собираем»: термин и пояснение в две колонки. */
.telegram-what .kv { display: grid; grid-template-columns: 190px minmax(0, 1fr); gap: 10px 16px; margin: 0; font-size: 13px; }
.telegram-what .kv dt { color: var(--color-text-muted); }
.telegram-what .kv dd { margin: 0; color: var(--color-text-primary); font-weight: 400; }
.steps { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 0; padding: 0; list-style: none; color: var(--color-text-muted); font-size: 12.5px; }
.steps li { display: inline-flex; align-items: center; gap: 6px; }
.step-mark { display: grid; place-items: center; width: 20px; height: 20px; border: 1px solid var(--color-border-strong); border-radius: 50%;
  font-size: 11px; font-weight: 600; }
.steps li.done { color: var(--color-text-secondary); }
.steps li.done .step-mark { border-color: var(--color-status-success-border); background: var(--color-status-success-bg); color: var(--color-status-success); }
.steps li.now { color: var(--color-text-primary); font-weight: 600; }
.steps li.now .step-mark { border-color: var(--color-text-primary); background: var(--color-text-primary); color: var(--color-bg-panel); }
.connect-card { display: grid; justify-items: start; gap: 12px; padding: 16px; border: 1px solid var(--color-border-soft); border-radius: var(--radius-card);
  background: var(--color-bg-panel); }
.connect-card > * { max-width: 100%; }
.connect-card h3, .connect-card p { margin: 0; }
.connect-card .field { width: min(100%, 450px); }
.connect-card .notice { justify-self: stretch; }
.telegram-qr { display: block; width: 256px; height: 256px; padding: 8px; background: #fff; border: 1px solid var(--color-border-soft);
  border-radius: var(--radius-card); }
.telegram-identity { font-weight: 600; overflow-wrap: anywhere; }
.telegram-auth-form { display: grid; gap: 12px; width: min(100%, 450px); justify-items: start; }
/* Отчёт «Что система привязала бы» (apps/docs/crm-google-calendar.md, «Контекст встречи»): сводка корзин-кнопок, фильтры, таблица
   событий в прокручиваемой обёртке (на телефоне — прокрутка внутри блока, страница не уезжает вбок). */
.calendar-report.loading { opacity: .7; }
.rep-summary { display: grid; gap: 8px; min-width: 0; }
.rep-line { margin: 0; font-size: 12.5px; line-height: 1.5; overflow-wrap: anywhere; }
.rep-chips { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }
.rep-chip { display: inline-flex; align-items: baseline; gap: 6px; padding: 6px 10px; border: 1px solid var(--color-border-soft);
  border-radius: var(--radius-card); background: var(--color-bg-panel); color: inherit; font: inherit; font-size: 12.5px; cursor: pointer; max-width: 100%; text-align: left; }
.rep-chip b { font: 600 14px/1 var(--font-mono); font-feature-settings: var(--font-mono-features); }
.rep-chip.on { border-color: var(--color-text-secondary); }
.rep-filters { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 12px; min-width: 0; }
.rep-field { display: grid; gap: 4px; flex: 0 1 240px; min-width: 0; font-size: 12.5px; }
.rep-scroll { position: relative; max-width: 100%; overflow-x: auto; border: 1px solid var(--color-border-soft); border-radius: var(--radius-card); }
.rep-table { width: 100%; min-width: 960px; border-collapse: collapse; table-layout: fixed; font-size: 12.5px; }
.rep-table th { padding: 10px 12px; text-align: left; font-weight: 600; color: var(--color-text-muted); border-bottom: 1px solid var(--color-line); white-space: nowrap; }
.rep-table td { padding: 12px; vertical-align: top; border-bottom: 1px solid var(--color-line); overflow-wrap: anywhere; }
.rep-table tr:last-child td { border-bottom: 0; }
.rep-table th:nth-child(1) { width: 24%; }
.rep-table th:nth-child(2) { width: 17%; }
.rep-table th:nth-child(3) { width: 20%; }
.rep-table th:nth-child(4) { width: 22%; }
.rep-table th:nth-child(5) { width: 17%; }
.rep-event, .rep-rule, .rep-target, .rep-role { line-height: 1.45; }
.rep-event > *, .rep-rule > *, .rep-target > *, .rep-role > * { display: block; }
.rep-event > * + *, .rep-rule > * + *, .rep-target > * + *, .rep-role > * + * { margin-top: 4px; }
.rep-badges { display: flex !important; flex-wrap: wrap; align-items: flex-start; gap: 4px; }
.rep-table .badge { white-space: normal; overflow-wrap: anywhere; }
.rep-signals { display: grid !important; gap: 2px; }
.rep-signal { font-size: 11.5px; line-height: 1.4; color: var(--color-text-muted); }
.rep-reason { color: var(--color-text-secondary); line-height: 1.45; }
.rep-pager { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
/* «Календари» (apps/docs/crm-google-calendar.md): строки как у аккаунтов Telegram — значок, календарь или адрес, состояние с
   подсказкой, действия; подразделы «Мои адреса» и «Календари сотрудников» — заголовком поменьше; форма адреса — поле и кнопка. */
.cal-row .acc-st { gap: 4px; }
.cal-hint { line-height: 1.4; overflow-wrap: anywhere; }
.cal-row .who > b { white-space: normal; overflow-wrap: anywhere; }
.cal-sub { display: grid; gap: 8px; min-width: 0; margin-top: 6px; }
.cal-sub-title { margin: 0; font-size: 13px; font-weight: 600; }
.cal-email-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 10px; min-width: 0; }
.cal-email-form .field { display: grid; gap: 4px; flex: 0 1 320px; min-width: 0; font-size: 12.5px; }
.cal-email-form input:not([type="checkbox"]) { width: 100%; }
/* Подпись флажка «Наш сотрудник» в одну строку: флажок не растягивается на всю ширину и не сжимает текст (ревью UX 23.10, «Мелочь»). */
.cal-guest { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; color: var(--color-text-secondary); font-size: 12.5px;
  white-space: nowrap; cursor: pointer; }
.cal-guest input[type="checkbox"] { flex: none; width: auto; margin: 0; }
/* Широкий экран: у адресов действий больше (переключатель «гостем» и «Убрать») — столбец действий шире, состояние уже. */
@media (min-width: 769px) {
  .cal-emails .acc-row, .cal-book-list .acc-row { grid-template-columns: 32px minmax(0, 1.2fr) minmax(0, .6fr) minmax(0, 1.4fr); }
}
@media (max-width: 768px) {
  .viewbar, .filterbar { padding-left: max(16px, env(safe-area-inset-left, 0px)); padding-right: max(16px, env(safe-area-inset-right, 0px)); }
  .viewbar .dir-search { order: 5; width: 100%; }
  .viewbar .cols-btn { display: none; }
  .page-col { padding: 16px max(16px, env(safe-area-inset-right, 0px)) 40px max(16px, env(safe-area-inset-left, 0px)); gap: 18px; }
  .qline { padding-right: 8px; }
  .qtoggle { flex-basis: 100%; }
  .qtext { white-space: normal; overflow-wrap: anywhere; }
  .qwho { margin-left: 32px; }
  .qbody { padding: 0 10px 10px 12px; }
  .acc-row { grid-template-columns: 32px minmax(0, 1fr); }
  .telegram-what .kv { grid-template-columns: minmax(0, 1fr); gap: 2px; }
  .telegram-what .kv dd { margin-bottom: 8px; }
  .acc-st, .acc-row .right { grid-column: 2; }
  .lrow .right { justify-content: flex-start; margin-left: 0; }
}

/* ===== Раздел «Партнёры» по макету (решение Кирилла 19.10): панель, таблица в одну строку, доска с полями 20px, карточка. ===== */
.partners-page { gap: 0; }
.partners-toolbar { display: flex; flex-direction: column; border-bottom: 1px solid var(--color-border-soft); }
.partners-viewbar, .partners-filterbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 20px 0; }
.partners-filterbar { padding-block: 8px 10px; }
.partners-viewbar .segment .icon { width: 14px; height: 14px; color: var(--color-text-muted); }
.partners-viewbar .segment.on .icon { color: var(--color-text-secondary); }
/* Поиск — поле с лупой (как в макете). */
.partners-search { display: flex; align-items: center; gap: 6px; width: 280px; max-width: 100%; height: 28px; padding: 0 8px;
  border: 1px solid var(--color-border-strong); border-radius: var(--radius-control); background: var(--color-bg-panel); color: var(--color-text-muted); }
.partners-search:focus-within { border-color: var(--color-signal-primary); box-shadow: 0 0 0 3px var(--color-signal-soft); }
.partners-search .icon { width: 14px; height: 14px; flex: none; }
.partners-search input { width: 100%; min-width: 0; min-height: 0; height: 26px; padding: 0; border: 0; border-radius: 0; outline: 0; background: transparent;
  box-shadow: none; font-size: 13px; color: var(--color-text-primary); }
.partners-search input:focus, .partners-search input:hover { border: 0; box-shadow: none; }
/* Фильтры — «призрачные» кнопки с иконкой: без рамки и фона; выбранное условие — подложкой выбора. */
.partners-filterbar > .pop-anchor > .pill { border-color: transparent; background: transparent; box-shadow: none; color: var(--color-text-secondary); }
.partners-filterbar > .pop-anchor > .pill:hover, .partners-filterbar > .pop-anchor.open > .pill { background: var(--color-table-hover-bg);
  color: var(--color-text-primary); }
.partners-filterbar > .pop-anchor > .pill.on { border-color: var(--color-border-strong); background: var(--color-bg-selected); color: var(--color-text-primary); }
/* Действующее условие — чипом с «×» (как в макете). */
.fpill { display: inline-flex; align-items: stretch; max-width: 100%; height: 28px; overflow: hidden; border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-control); background: var(--color-bg-panel); box-shadow: var(--shadow-xs); font-size: 12.5px; }
.fpill > * { display: inline-flex; align-items: center; gap: 6px; min-width: 0; padding: 0 8px; border: 0; border-right: 1px solid var(--color-border-soft);
  background: transparent; white-space: nowrap; }
.fpill > :last-child { border-right: 0; }
.fpill .k { color: var(--color-text-secondary); }
.fpill .k .icon { width: 14px; height: 14px; color: var(--color-text-muted); }
.fpill .op { color: var(--color-text-muted); }
.fpill .v { display: block; overflow: hidden; text-overflow: ellipsis; line-height: 26px; font-weight: 600; color: var(--color-text-primary); }
.fpill button { color: var(--color-text-muted); cursor: pointer; }
.fpill button:hover { background: var(--color-table-hover-bg); color: var(--color-text-primary); }
.fpill button .icon { width: 14px; height: 14px; }
.partners-summary { min-width: 0; color: var(--color-text-muted); font-size: 12.5px; }
.partners-summary b { color: var(--color-text-secondary); font-weight: 600; }
.partners-empty { margin: 16px 20px; }
/* Пункт списка: значок слева, число справа (как в макете). */
.popover-option .popover-hint { flex: none; margin-left: auto; padding-left: 10px; color: var(--color-text-muted); font: 500 11.5px/1 var(--font-mono);
  white-space: nowrap; font-feature-settings: var(--font-mono-features); }
/* Списки фильтров и статуса партнёров — шире общего минимума: заголовок и пункты в одну строку. */
.partners-filterbar .popover, .partner-status-pick .popover { min-width: 280px; }
.popover-option > .record-logo { flex: none; }
.badge.swatch { width: 12px; height: 12px; min-height: 12px; flex: none; padding: 0; border-radius: 3px; }
/* Тон «Договорились» — синий (как в макете). */
.badge.blue { border-color: var(--color-blue-border); background: var(--color-blue-bg); color: var(--color-blue-ink); }
/* Человек — плитка с инициалами и имя в пилюле. */
.partners-page .owner-chip, .partner-card .owner-chip { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; padding: 2px 8px 2px 3px;
  overflow: hidden; text-overflow: ellipsis; }

/* Таблица: строка в одну линию, длинное — многоточием (полный текст — в подсказке). */
.partners-table .data-table td { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; overflow-wrap: normal; }
.partners-table .cell-name { gap: 6px; }
.partners-table .cell-name > .deal-link { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.partners-table .fav-star { width: 22px; min-height: 22px; flex: none; padding: 0; }
.partners-table .fav-star .icon { width: 14px; height: 14px; }
.cell-line { display: flex; align-items: center; gap: 8px; min-width: 0; }
.cell-line > b, .cell-line > .badge, .cell-line > .kc-due { flex: none; }
.cell-line .tx, .partners-table td > .tx { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cell-line .tx.strong { color: var(--color-text-primary); font-weight: 500; }
.cell-line .tx.muted { font-size: 12.5px; }
.due-chip { gap: 4px; }
.due-chip .icon { width: 12px; height: 12px; }

/* Доска: поля 20px слева и справа, серые колонки 280px с чипом статуса и числом, карточки в 4 строки. */
.partners-board { gap: 10px; padding: 12px 20px 20px; }
.partners-board .board-column { flex: 0 0 280px; gap: 8px; padding: 0 8px 8px; }
.partners-board .board-column-head { min-height: 42px; padding: 0 4px; }
.partners-board .board-column-head .badge { min-height: 20px; padding: 0 6px; font-size: 11.5px; }
/* Карточка доски целиком открывает партнёрство (как на доске сделок). */
.partner-kcard { gap: 8px; cursor: pointer; }
.partners-board .board-empty { padding: 14px; border: 1px dashed var(--color-border-strong); border-radius: var(--radius-control); text-align: center; }
/* Строки карточки доски партнёров (kc-*): у доски «Сделок» свои правила под .deals-board (board.css). */
.partners-board .kc-row { display: flex; align-items: center; gap: 7px; min-width: 0; color: var(--color-text-primary); }
.partners-board .kc-row .grow { flex: 1; }
.partners-board .kc-head { font-size: 13px; }
.partners-board .kc-company { flex: 0 1 auto; max-width: 55%; overflow: hidden; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.partners-board .kc-head .deal-link { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
.partners-board .kc-company + .deal-link { font-weight: 400; color: var(--color-text-secondary); text-decoration: none; }
.partners-board .kc-company + .deal-link:hover { color: var(--color-text-primary); text-decoration: underline; }
.partners-board .kc-head .icon-button { width: 24px; height: 24px; margin: -4px -6px -4px 0; }
.partners-board .kc-amt { font-weight: 500; white-space: nowrap; }
.partners-board .kc-step .tx { flex: 1; min-width: 0; overflow: hidden; color: var(--color-text-secondary); text-overflow: ellipsis; white-space: nowrap; }
.partners-board .kc-due { flex: none; color: var(--color-text-muted); font-size: 12px; white-space: nowrap; }
.partners-board .kc-step .badge { flex: none; min-height: 20px; padding: 0 6px; font-size: 11.5px; }
.partners-board .kc-foot { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; padding-top: 7px; border-top: 1px solid var(--color-line);
  color: var(--color-text-muted); font-size: 12px; }
.partners-board .kc-foot .badge { min-height: 20px; padding: 0 6px; font-size: 11.5px; }
.partners-board .kc-lead { color: var(--color-text-secondary); font-size: 12px; }
.partner-kcard .kc-row > .icon { flex: none; width: 14px; height: 14px; color: var(--color-text-muted); }
.partner-kcard .kc-name { flex: 0 1 auto; max-width: 62%; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600;
  text-decoration: none; }
.partner-kcard .kc-head > .tx { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.partner-kcard .kc-head > .pop-anchor { flex: none; }
.partner-kcard .kc-step > .cell-line, .partner-kcard .kc-step > .tx, .partner-kcard .kc-step > .badge { flex: 0 1 auto; min-width: 0; }
.partner-kcard .kc-step > .cell-line { flex: 1 1 auto; }
.partner-kcard .kc-row > .tx { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.partner-kcard .partner-chain { font-size: 12px; }
.partner-kcard .kc-foot > span { display: inline-flex; align-items: center; gap: 4px; min-width: 0; }
.partner-kcard .kc-foot .icon { width: 12px; height: 12px; flex: none; }
.partner-kcard .kc-lead { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--color-text-muted); }
.partner-kcard .owner-chip { flex: none; }

/* Карточка партнёра: «Сведения» строками с иконкой, статус — чип своего тона со списком. */
.partner-card .attr-k { display: flex; align-items: center; gap: 8px; }
.partner-card .attr-k .icon { width: 14px; height: 14px; flex: none; color: var(--color-text-muted); }
.partner-status-pick > .pill { min-height: 22px; gap: 4px; padding: 0 7px; border-radius: var(--radius-chip); font-size: 12.5px; box-shadow: none; }
.partner-status-pick.neutral > .pill { border-color: var(--color-border-soft); background: var(--color-bg-panel-strong); color: var(--color-text-secondary); }
.partner-status-pick.blue > .pill { border-color: var(--color-blue-border); background: var(--color-blue-bg); color: var(--color-blue-ink); }
.partner-status-pick.ok > .pill { border-color: var(--color-status-success-border); background: var(--color-status-success-bg); color: var(--color-status-success); }
.partner-status-pick.warn > .pill { border-color: var(--color-status-warning-border); background: var(--color-status-warning-bg); color: var(--color-status-warning); }
.partner-status-pick.error > .pill { border-color: var(--color-status-danger-border); background: var(--color-status-danger-bg); color: var(--color-status-danger); }
.partner-status-pick > .pill .chevron { color: currentColor; opacity: .6; }
/* Итоги партнёра: четыре плитки в одной рамке, «через партнёров» — строкой под ними. */
.partner-totals { display: flex; flex-direction: column; gap: 6px; }
.mini-stats.four { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.mini-stats small { display: block; }
.mini-stats.four > div { align-content: start; }
.partner-totals-chain { margin: 0; padding: 0 2px; color: var(--color-text-secondary); font-size: 12.5px; line-height: 1.5; }
.partner-totals-chain .icon { width: 14px; height: 14px; margin-right: 6px; vertical-align: -2px; color: var(--color-text-muted); }
/* Узкая правая часть (широкая левая панель) и телефон (там правая часть не контейнер) — плитки два на два. */
@container record-main (max-width: 560px) {
  .mini-stats.four { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mini-stats.four > div:nth-child(2) { border-right: 0; }
  .mini-stats.four > div:nth-child(-n + 2) { border-bottom: 1px solid var(--color-line); }
}
@media (max-width: 640px) {
  .mini-stats.four { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mini-stats.four > div:nth-child(2) { border-right: 0; }
  .mini-stats.four > div:nth-child(-n + 2) { border-bottom: 1px solid var(--color-line); }
}
.partner-card .attr { grid-template-columns: 140px minmax(0, 1fr); }
/* Итоги — под блоком действия и предложениями (как у сделки — с полями полотна); на узком экране — до «Сведений». */
.deal-main > .partner-totals { margin: 12px 24px 0; }
@media (max-width: 1024px) { .deal-main > .partner-totals { order: 3; margin: 10px 16px 0; } }
/* Обзор: плитка «Привёл — по способам» с полосами и деревом «через партнёров». */
.partner-overview .tile { display: flex; flex-direction: column; gap: 10px; padding: 14px 16px; border: 1px solid var(--color-border-soft);
  border-radius: var(--radius-card); background: var(--color-bg-panel); box-shadow: var(--shadow-xs); }
.partner-overview .tile-h { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--color-text-secondary);
  font-size: 12.5px; font-weight: 500; }
.partner-overview .tile-h .icon { width: 14px; height: 14px; color: var(--color-text-muted); }
.partner-overview .tile p { margin: 0; }
.p-hbars { display: grid; gap: 8px; }
.p-hbar { display: grid; grid-template-columns: minmax(96px, 130px) minmax(0, 1fr) 28px; align-items: center; gap: 10px; font-size: 13px; }
.p-hbar .track { height: 12px; overflow: hidden; border-radius: 3px; background: var(--color-bg-panel-strong); }
.p-hbar .fill { display: block; height: 100%; border-radius: 3px; background: var(--color-blue); }
.p-hbar .v { color: var(--color-text-secondary); font: 500 12px/1 var(--font-mono); text-align: right; font-feature-settings: var(--font-mono-features); }
.chain-box { padding-top: 10px; border-top: 1px solid var(--color-line); }
.chain-box > summary { display: flex; align-items: center; gap: 6px; cursor: pointer; list-style: none; color: var(--color-text-secondary); font-size: 13px; }
.chain-box > summary::-webkit-details-marker { display: none; }
.chain-box > summary .chev { transition: transform .15s; color: var(--color-text-muted); }
.chain-box[open] > summary .chev { transform: rotate(90deg); }
.chain { display: grid; gap: 6px; margin: 8px 0 0; padding: 0; list-style: none; }
.chain-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding-left: calc(var(--depth, 0) * 18px); font-size: 13px; }
.partner-overview .lrow .amt { white-space: nowrap; font-weight: 500; }
.partner-overview .lrow > .icon { flex: none; width: 16px; height: 16px; color: var(--color-text-muted); }
@media (max-width: 768px) {
  .partners-viewbar, .partners-filterbar { padding-inline: 16px; }
  .partners-search { order: 5; width: 100%; }
  .partners-board { padding-inline: 16px; }
  .partners-board .board-column { flex-basis: 264px; }
  .partners-empty { margin-inline: 16px; }
  .p-hbar { grid-template-columns: minmax(84px, 110px) minmax(0, 1fr) 24px; }
}

/* «Доступы» (apps/docs/deliveryos-access.md): вкладки как у «Подключения аккаунтов»; сотрудник — плитка инициалов, имя и почта, справа
   состояние, роль и действия; строки «Знаний» — чат и его топики (топик с отступом); на телефоне управление уходит под имя. */
.access-page { gap: 14px; }
.access-panel { display: flex; flex-direction: column; gap: 18px; min-width: 0; min-height: var(--accounts-panel-min-height, 320px); padding-top: 8px; }
.access-stack { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.access-stack > .hint, .access-stack > .notice { margin: 0; }
.access-avatar { display: inline-grid; place-items: center; flex: none; width: 32px; height: 32px; border-radius: 50%; background: var(--color-blue-bg);
  color: var(--color-blue-ink); font: 600 12px/1 var(--font-body); font-feature-settings: normal; }
.access-member.inactive .who > b { color: var(--color-text-muted); }
.access-member .who > b { display: inline-flex; align-items: center; gap: 6px; }
.access-role, .access-zone { width: 156px; max-width: 100%; }
.access-invite { display: grid; gap: 8px; }
.access-invite-h { display: flex; align-items: center; gap: 8px; min-width: 0; }
.access-invite-h > b { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
.access-invite-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; min-width: 0; }
.access-link-input { flex: 1 1 260px; min-width: 0; font: 12px/1.5 var(--font-mono); font-feature-settings: var(--font-mono-features); }
.access-invite .hint { margin: 0; }
.access-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; min-width: 0; }
.access-search { flex: 1 1 220px; width: auto; min-width: 0; max-width: 360px; }
.access-zone-row.zone-topic { padding-left: 36px; }
.access-zone-row.zone-chat .who > b { font-weight: 600; }
.access-zone-row.context { background: var(--color-table-hover-bg); }
.access-zone-row .who > span { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.access-history-row .who > b { font-weight: 500; white-space: normal; overflow-wrap: anywhere; }
@media (max-width: 768px) {
  .access-member > .right, .access-zone-row > .right { justify-content: flex-start; width: 100%; margin-left: 42px; }
  .access-zone-row.zone-topic { padding-left: 20px; }
  .access-zone-row > .right { margin-left: 0; }
  .access-role, .access-zone { flex: 1 1 160px; width: auto; }
  .access-search { max-width: none; }
}

/* Страница приглашения: токен показывается один раз в рамке, команда подключения MCP — моноширинным блоком с переносом. */
.invite-panel { display: grid; gap: 12px; }
.invite-panel h1, .invite-panel p { margin: 0; }
.invite-token-box { display: grid; gap: 8px; }
.invite-h2 { margin: 8px 0 0; font-size: 15px; font-weight: 600; }
.invite-code { margin: 0; padding: 10px 12px; border: 1px solid var(--color-border-soft); border-radius: var(--radius-soft); background: var(--color-table-hover-bg);
  font: 12px/1.5 var(--font-mono); white-space: pre-wrap; overflow-wrap: anywhere; font-feature-settings: var(--font-mono-features); }
.invite-open { display: inline-flex; align-items: center; min-height: 32px; padding: 0 14px; text-decoration: none; }
