* { box-sizing: border-box; }

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.app-header {
  position: static;
  z-index: 20;
  display: flex;
  align-items: center;
  gap: 24px;
  padding: 14px 24px;
  border-bottom: 1px solid var(--border);
  background: var(--card);
}

.app-brand { color: var(--primary); font-weight: 600; text-decoration: none; }
.app-nav { display: flex; gap: 8px; overflow-x: auto; }
.app-nav a { padding: 8px 10px; border-radius: var(--radius); text-decoration: none; white-space: nowrap; }
.app-nav a:hover { background: var(--surface-tint); color: var(--primary); }
.app-nav a.is-active { background: var(--surface-tint); color: var(--primary); font-weight: 600; }
/* рабочее поле расширено (Иван, 13.08.2026): табличные разборы сделок не
   помещались в 1180px — на широких экранах используем почти всю ширину */
.report-shell { width: min(1700px, calc(100% - 40px)); margin: 0 auto; padding: 40px 0 64px; }
.report-shell > * + * { margin-top: 24px; }
.report-anchor { scroll-margin-top: 16px; }
.report-anchor > * + * { margin-top: 24px; }
.report-jump-nav { display: flex; align-items: center; gap: 8px; overflow-x: auto; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--card); }
.report-jump-nav strong, .report-jump-nav a { white-space: nowrap; }
.report-jump-nav a { padding: 6px 10px; border-radius: 999px; background: var(--surface-tint); color: var(--primary); text-decoration: none; }
.report-heading { display: flex; align-items: end; justify-content: space-between; gap: 24px; }
.report-heading h1 { margin: 4px 0 8px; font-size: clamp(28px, 4vw, 40px); line-height: 1.1; }
.report-heading p { margin: 0; color: var(--text-muted); }
.report-heading--split form { min-width: 220px; }
.eyebrow { margin: 0; color: var(--primary); font-size: 13px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; }
.report-card, .kpi-card, .filter-panel, .copybox, .methodology {
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
}
.report-card { padding: 24px; }
.report-card h2 { margin: 0 0 16px; font-size: 21px; }
.report-grid { display: grid; gap: 16px; }
.report-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.report-grid--4, .kpi-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.kpi-card { padding: 20px; display: grid; gap: 8px; }
.kpi-card strong { color: var(--foreground); font-family: var(--font-mono); font-size: clamp(24px, 3vw, 34px); }
.kpi-card span { color: var(--text-muted); }
.plan-bar__heading, .task-card__heading, .plan-bar__details, .archive-nav, .pagination { display: flex; justify-content: space-between; gap: 16px; }
.plan-bar__amount { margin: 6px 0 0; font-size: 18px; }
.plan-bar__amount strong { font-size: 28px; }
.plan-bar__percent { color: var(--primary); font-family: var(--font-mono); font-size: 36px; }
.progress-track, .mini-progress { overflow: hidden; border-radius: 999px; background: var(--surface-tint); }
.progress-track { height: 14px; margin: 18px 0 12px; }
.mini-progress { width: 90px; height: 7px; }
.progress-track span, .mini-progress span { display: block; width: min(var(--progress), 100%); height: 100%; background: var(--primary); }
.plan-bar__details { color: var(--text-muted); font-size: 14px; flex-wrap: wrap; }
.plan-bar__deals { margin-top: 12px; font-size: 14px; }
.plan-bar__deals > summary { cursor: pointer; color: var(--primary); font-weight: 600; list-style: none; }
.plan-bar__deals > summary::-webkit-details-marker { display: none; }
.plan-bar__deals > summary::before { content: "▸ "; }
.plan-bar__deals[open] > summary::before { content: "▾ "; }
.plan-bar__deals table { width: 100%; border-collapse: collapse; margin-top: 10px; }
.plan-bar__deals th, .plan-bar__deals td { text-align: left; padding: 6px 8px; border-bottom: 1px solid var(--border); white-space: nowrap; }
.plan-bar__deals th { color: var(--text-muted); font-weight: 600; }
.deal-tag { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; white-space: nowrap; }
.deal-tag--new { background: rgba(37, 99, 235, 0.12); color: var(--primary); }
.deal-tag--repeat { background: rgba(5, 150, 105, 0.16); color: #0f766e; }
@media (prefers-color-scheme: dark) { .deal-tag--repeat { color: #34d399; } }
.metric-list { display: grid; gap: 12px; margin: 0; }
.metric-list div { display: flex; justify-content: space-between; gap: 16px; border-bottom: 1px solid var(--border); padding-bottom: 10px; }
.metric-list dd { margin: 0; font-family: var(--font-mono); font-weight: 600; }
.text-danger { color: var(--destructive); }
.text-success { color: var(--primary); }
.report-alert { border-radius: var(--radius-lg); border: 1px solid var(--border); padding: 18px 20px; }
.report-alert p { margin: 6px 0 0; }
.report-alert--critical { border-color: var(--destructive); background: var(--danger-tint); }
.report-alert--attention { border-color: var(--primary); background: var(--surface-tint); }
.report-alert--good { border-color: var(--primary); background: var(--surface-tint); }
.report-alert--info { background: var(--card); }
.table-card { padding: 0; overflow: hidden; }
.table-card h2, .table-card > p { padding: 24px 24px 0; }
.table-scroll { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 14px 16px; border-top: 1px solid var(--border); text-align: left; vertical-align: top; white-space: nowrap; }
th { color: var(--text-muted); font-size: 13px; font-weight: 500; }
tbody tr:hover { background: var(--surface-tint); }
.methodology { padding: 0; }
.methodology summary { cursor: pointer; padding: 18px 22px; font-weight: 600; }
.methodology > div { padding: 0 22px 18px; color: var(--text-muted); }
.button { min-height: 44px; padding: 10px 16px; border-radius: var(--radius); border: 1px solid var(--border); cursor: pointer; }
.button-primary { background: var(--primary); border-color: var(--primary); color: var(--primary-foreground); }
.button-primary:hover { background: var(--primary-hover); }
.copybox { padding: 20px; display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.copybox p { margin: 6px 0 0; }
.priority-list { display: grid; gap: 12px; padding-left: 24px; }
.priority-list li { padding: 12px 16px; border-left: 3px solid var(--primary); background: var(--surface-tint); }
.archive-nav a, .pagination a { color: var(--primary); text-decoration: none; }
.task-list { display: grid; gap: 40px; }
.task-list h2 { margin-bottom: 16px; }
.task-card { display: grid; grid-template-columns: auto 1fr; gap: 16px; padding: 20px; border: 1px solid var(--border); border-left: 4px solid var(--primary); border-radius: var(--radius-lg); background: var(--card); }
.task-card + .task-card { margin-top: 12px; }
.task-card.is-done { background: var(--surface-tint); }
.task-card.is-done .task-card__body { color: var(--text-muted); text-decoration: line-through; }
.task-card__check input { width: 20px; height: 20px; accent-color: var(--primary); }
.task-card__heading a { font-size: 18px; font-weight: 600; }
.task-card__heading > strong { font-family: var(--font-mono); }
.task-card__number { color: var(--text-muted); margin-right: 8px; }
.task-card__badges { display: flex; gap: 8px; flex-wrap: wrap; margin: 10px 0; }
.report-badge, .filter-chips a { display: inline-flex; padding: 5px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--card); font-size: 13px; text-decoration: none; }
.report-badge--category, .filter-chips a.is-active { background: var(--surface-tint); border-color: var(--primary); color: var(--primary); }
.report-badge--danger { background: var(--danger-tint); border-color: var(--destructive); color: var(--destructive); }
.task-card__meta, .task-card__due { color: var(--text-muted); font-size: 14px; }
.task-card__angle { padding: 12px; background: var(--surface-tint); border-radius: var(--radius); }
.filter-panel { position: sticky; top: 0; z-index: 10; display: flex; align-items: end; gap: 12px; flex-wrap: wrap; padding: 16px; }
.filter-panel label { display: grid; gap: 6px; color: var(--text-muted); font-size: 13px; }
.filter-panel input, .filter-panel select, .report-heading select { min-height: 44px; padding: 8px 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--card); color: var(--foreground); }
.filter-chips { flex-basis: 100%; display: flex; gap: 8px; overflow-x: auto; }
.farmer-filter-panel { position: static; }
.checkbox-filter { align-items: center; display: flex !important; min-height: 44px; padding: 8px 0; color: var(--foreground) !important; }
.checkbox-filter input { width: 18px; height: 18px; min-height: auto; accent-color: var(--primary); }
.farmer-progress { flex-basis: 100%; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-top: 12px; border-top: 1px solid var(--border); color: var(--text-muted); }
.farmer-progress strong { color: var(--foreground); }
.ltv-table tbody tr[data-ltv-row] { cursor: pointer; }
.ltv-table tbody tr[data-ltv-row]:focus { outline: 2px solid var(--primary); outline-offset: -2px; }
.ltv-table tbody tr[data-ltv-row].is-loading { opacity: .6; }
.ltv-table td:first-child span { color: var(--text-muted); font-size: 13px; }
.ltv-detail-row td { white-space: normal; }
.ltv-detail { padding: 8px; }
.ltv-detail__header, .section-heading-inline { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.ltv-detail__header h3, .section-heading-inline h4 { margin: 0; }
.ltv-detail__header p { margin: 4px 0 0; color: var(--text-muted); }
.ltv-detail__columns { display: grid; grid-template-columns: minmax(0, 3fr) minmax(280px, 2fr); gap: 24px; margin-top: 20px; }
.last-touch { display: grid; gap: 4px; margin-top: 16px; padding: 12px 14px; border-left: 3px solid var(--primary); border-radius: var(--radius); background: var(--surface-tint); }
.ltv-detail__meta { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; margin: 6px 0 0; font-size: 13px; }
.client-seg { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 700; vertical-align: middle; }
.client-seg--a { background: rgba(5, 150, 105, 0.16); color: #0f766e; }
.client-seg--b { background: rgba(37, 99, 235, 0.12); color: var(--primary); }
.client-seg--c { background: var(--surface-tint); color: var(--text-muted); }
.prob-badge { cursor: help; border-bottom: 1px dotted var(--text-muted); }
.ltv-progress { margin-top: 14px; }
.ltv-progress__head { display: flex; justify-content: space-between; gap: 12px; font-size: 13px; color: var(--text-muted); }
.ltv-progress .progress-track { margin: 6px 0 0; height: 12px; }
.close-recs { margin: 6px 0 0; padding-left: 18px; display: grid; gap: 4px; }
.close-recs li { font-size: 14px; }
.similar-list { margin: 8px 0 0; padding-left: 18px; display: grid; gap: 4px; font-size: 13px; }
.touch-crm-link { display: inline-block; margin-top: 6px; font-size: 13px; font-weight: 600; }
.touch-more > summary { cursor: pointer; color: var(--primary); font-size: 13px; }
.criteria-form fieldset { border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 14px 6px; margin: 0 0 12px; }
.criteria-form legend { font-weight: 600; padding: 0 6px; }
.criteria-form label { display: inline-flex; justify-content: space-between; align-items: center; gap: 10px; font-size: 13px; width: min(100%, 320px); margin: 0 18px 10px 0; }
.criteria-form input { width: 110px; padding: 5px 8px; border: 1px solid var(--border); border-radius: var(--radius-sm, 6px); }
.touch-map__steps { list-style: none; margin: 6px 0 8px; padding: 0; display: grid; gap: 4px; }
.touch-step { font-size: 13px; padding: 3px 8px; border-left: 3px solid var(--border); border-radius: var(--radius-sm, 6px); background: var(--surface-tint); }
.touch-step__day { font-family: var(--font-mono); font-weight: 700; margin-right: 4px; }
.touch-step--passed { opacity: 0.55; border-left-color: #059669; }
.touch-step--next { border-left-color: var(--primary); background: rgba(37, 99, 235, 0.10); font-weight: 600; }
.touch-map__rec { font-size: 13px; font-weight: 600; margin: 4px 0 0; }
.touch-map__rec--exhausted { color: var(--destructive); }
@media (prefers-color-scheme: dark) { .client-seg--a { color: #34d399; } }
.last-touch--empty { border-left-color: var(--border); background: var(--background); color: var(--text-muted); }
.service-checklist { display: grid; gap: 8px; padding: 0; list-style: none; }
.service-checklist li { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(220px, 1fr) minmax(180px, auto); gap: 12px; padding: 10px; border-radius: var(--radius); }
.service-checklist .is-bought { background: var(--surface-tint); }
.service-checklist .is-missing { background: var(--danger-tint); }
.service-calculation { color: var(--text-muted); font-size: 13px; }
.ltv-calculation-summary { margin-top: 12px; padding: 14px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--background); }
.ltv-calculation-summary p { margin: 0; }
.ltv-calculation-summary p + p { margin-top: 8px; }
.extra-services { color: var(--text-muted); }
.deal-summary { padding: 12px 0; border-bottom: 1px solid var(--border); }
.deal-summary p { margin: 0; }
.deal-summary p + p { margin-top: 4px; }
.muted { color: var(--text-muted); }
.report-toast { position: fixed; right: 20px; bottom: 20px; padding: 12px 16px; border-radius: var(--radius); background: var(--foreground); color: var(--card); opacity: 0; pointer-events: none; transition: opacity 180ms ease-out; }
.report-toast.is-visible { opacity: 1; }

@media (max-width: 760px) {
  .app-header { align-items: flex-start; flex-direction: column; gap: 8px; padding: 12px 16px; }
  .app-nav { width: 100%; }
  .report-shell { width: min(100% - 24px, 1180px); padding-top: 24px; }
  .report-heading, .copybox, .plan-bar__heading { align-items: stretch; flex-direction: column; }
  .report-grid--2, .report-grid--4, .kpi-grid { grid-template-columns: 1fr; }
  .plan-bar__details { flex-direction: column; }
  .filter-panel { position: static; align-items: stretch; }
  .filter-panel label, .filter-panel .button { width: 100%; }
  .farmer-progress, .ltv-detail__header, .section-heading-inline { align-items: stretch; flex-direction: column; }
  .task-card__heading { flex-direction: column; }
  .service-checklist li { grid-template-columns: 1fr; }
  .ltv-detail__columns { grid-template-columns: 1fr; }
  .ltv-table, .ltv-table tbody { display: block; width: 100%; }
  .ltv-table thead { display: none; }
  .ltv-table tr[data-ltv-row] { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; padding: 16px; border-top: 1px solid var(--border); }
  .ltv-table tr[data-ltv-row] td { display: block; min-width: 0; padding: 0; border: 0; white-space: normal; }
  .ltv-table tr[data-ltv-row] td:first-child { grid-column: 1 / -1; }
  .ltv-table tr[data-ltv-row] td:not(:first-child)::before { display: block; margin-bottom: 3px; color: var(--text-muted); content: attr(data-label); font-size: 12px; }
  .ltv-detail-row { display: block; width: 100%; }
  .ltv-detail-row[hidden] { display: none; }
  .ltv-detail-row > td { display: block; width: 100%; padding: 12px; }
  .ltv-detail { padding: 0; }
  .table-scroll:has(.ltv-table) { overflow-x: visible; }
}

/* === Точный эталонный стиль (farmer-отчёт Екатерины, D-056) === */
body { font: 14px/1.55 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: var(--foreground); background: var(--background); }
a { color: var(--primary); text-decoration: none; }
a:hover { text-decoration: underline; }
/* Хантеры/Фермеры — исходная компактная ширина (Иван, 20.08.2026):
   контейнер как у «Отдела повторных продаж»; широкие таблицы скроллятся
   внутри .table-scroll. Остальные страницы остаются широкими. */
.report-shell--compact { width: min(1000px, calc(100% - 32px)); }

/* Рабочая область: широкие таблицы разбора требуют всей ширины экрана
   (Иван, 14.08.2026). Не сужать обратно до 1000px — это ломает разбор. */
.report-shell { width: min(1700px, calc(100% - 40px)); padding: 26px 0 48px; }
.report-shell > * + * { margin-top: 14px; }
.report-heading h1 { font-size: 24px; margin: 0 0 4px; }
.report-heading p { font-size: 13.5px; }
.eyebrow { color: var(--text-muted); font-size: 11px; font-weight: 600; letter-spacing: .04em; }
.app-header { background: var(--card); border-bottom: 1px solid var(--border); padding: 10px 20px; gap: 16px; }
.app-brand { color: var(--foreground); font-weight: 700; }
.app-nav a { color: var(--text-muted); padding: 6px 9px; font-size: 13.5px; }
.app-nav a:hover { background: var(--surface-tint); color: var(--primary); text-decoration: none; }
.app-nav a.is-active { background: var(--surface-tint); color: var(--primary); }
.refresh-form { margin-left: auto; }
.refresh-button { min-height: 34px; padding: 6px 14px; border: 0; border-radius: 8px; background: var(--primary); color: #fff; font-weight: 600; font-size: 13px; cursor: pointer; }
.refresh-button:hover { background: var(--primary-hover); }
.report-card, .kpi-card, .table-card, .filter-panel, .copybox, .methodology, .home-tile { border-radius: 10px; }
.report-card { padding: 14px 16px; border-left: 1px solid var(--border); }
.report-card h2, .task-list h2, .table-card h2 { font-size: 18px; margin: 0 0 10px; padding-bottom: 6px; border-bottom: 2px solid var(--primary); color: var(--primary); }
.table-card h2 { margin: 14px 16px 0; padding-bottom: 6px; }
.kpi-card { padding: 12px 14px; gap: 2px; text-align: left; border-left: 1px solid var(--border); }
.kpi-card strong { font-size: 20px; font-weight: 700; color: var(--foreground); font-family: inherit; font-variant-numeric: tabular-nums; }
.kpi-card span { font-size: 12px; }
table { font-size: 13px; }
th, td { padding: 7px 10px; }
th { background: #f1f5f9; color: var(--foreground); font-size: 12px; font-weight: 600; border-top: 0; }
.table-card th { background: #f1f5f9; color: var(--foreground); }
.report-alert { padding: 10px 14px; border-left: 3px solid var(--primary); border-radius: 0 8px 8px 0; font-size: 12.5px; background: var(--surface-tint); }
.report-alert--attention { border-left-color: var(--primary); background: var(--surface-tint); }
.report-alert--critical { border-left-color: var(--destructive); background: var(--danger-tint); }
.report-alert--good { border-left-color: var(--chart-1); background: var(--success-tint); }
.report-alert strong { color: inherit; }
.plan-bar { background: var(--card); border: 1px solid var(--border); border-left: 1px solid var(--border); color: var(--foreground); padding: 14px 16px; }
.plan-bar .eyebrow { color: var(--text-muted); }
.plan-bar__amount { font-size: 15px; }
.plan-bar__amount strong { font-size: 26px; font-variant-numeric: tabular-nums; }
.plan-bar__percent { color: var(--primary); font-size: 40px; font-weight: 800; font-family: inherit; }
.plan-bar .progress-track { background: #e2e8f0; height: 10px; margin: 12px 0 10px; }
.plan-bar .progress-track span { background: var(--chart-1); }
.plan-bar__details { color: var(--text-muted); font-size: 12.5px; }
.report-badge, .filter-chips a { padding: 1px 8px; border-radius: 20px; font-size: 11px; font-weight: 600; border: 0; background: var(--surface-tint); color: var(--primary); }
.report-badge--category { background: #dcfce7; color: var(--chart-1); }
.report-badge--danger { background: #fee2e2; color: var(--destructive); }
.filter-chips a { border: 1px solid var(--border); background: var(--card); color: var(--text-muted); padding: 4px 10px; font-size: 12px; }
.filter-chips a.is-active { background: var(--surface-tint); border-color: var(--primary); color: var(--primary); }
.task-card { padding: 12px 14px; border-left: 3px solid var(--destructive); gap: 12px; }
.task-card__heading a { font-size: 14px; font-weight: 700; }
.task-card__angle { background: var(--background); border-left: 2px solid var(--warning); border-radius: 0 6px 6px 0; padding: 6px 10px; font-size: 12.5px; color: #334155; }
.task-card__meta, .task-card__due { font-size: 11.5px; }
.priority-list { list-style: none; padding-left: 0; counter-reset: rop-task; display: grid; gap: 8px; }
.priority-list li { display: flex; gap: 10px; align-items: flex-start; background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; font-size: 13.5px; }
.priority-list li::before { counter-increment: rop-task; content: counter(rop-task); flex: 0 0 24px; height: 24px; display: grid; place-items: center; border-radius: 50%; background: var(--primary); color: #fff; font-weight: 700; font-size: 12px; }
.priority-list li:nth-child(1)::before { background: var(--destructive); }
.priority-list li:nth-child(2)::before { background: var(--warning); }
.copybox { border: 1px dashed var(--primary); background: var(--background); font-family: var(--font-mono); font-size: 12px; }
.methodology summary { font-size: 13px; color: var(--text-muted); }
.methodology > div { font-size: 12.5px; }

/* График темпа */
.pace-chart { width: 100%; height: auto; display: block; }
.pace-chart .grid-line { stroke: var(--border); stroke-width: 1; }
.pace-chart .tick-label { fill: var(--text-muted); font-size: 10px; }
.pace-chart .fact-line { fill: none; stroke: var(--chart-1); stroke-width: 2.5; stroke-linejoin: round; }
.pace-chart .norm-line { fill: none; stroke: var(--chart-5); stroke-width: 2; stroke-dasharray: 6 5; }
.pace-chart .dot { fill: var(--chart-1); stroke: var(--card); stroke-width: 2; r: 4; transition: r .15s ease-out; }
.pace-chart .dot:hover { r: 7; }
.pace-chart .end-label { font-size: 11px; font-weight: 700; }
.pace-chart .end-label--fact { fill: var(--chart-1); }
.pace-chart .end-label--norm { fill: var(--chart-5); }

/* Домашний экран */
.home-tiles { display: grid; gap: 10px; grid-template-columns: repeat(4, minmax(0, 1fr)); }
.home-tile { display: block; padding: 12px 14px; border: 1px solid var(--border); background: var(--card); color: var(--foreground); }
.home-tile:hover { border-color: var(--primary); text-decoration: none; }
.home-tile strong { display: block; margin: 2px 0; font-size: 20px; font-weight: 700; color: var(--foreground); font-variant-numeric: tabular-nums; }
.home-tile span { color: var(--text-muted); font-size: 12px; }
.home-tile .eyebrow { color: var(--text-muted); }
.home-tile--focus strong { color: var(--destructive); }
.home-tile--farmer strong { color: var(--warning); }
.home-tile--ltv strong { color: var(--chart-1); }
.funnel { display: grid; gap: 8px; }
/* Строка стадии — блок: сеткой управляет кнопка .funnel-toggle внутри
   (старая сетка зажимала кнопку в первый столбец и полоса схлопывалась в 0) */
.funnel-row { display: block; }
.funnel-row .funnel-stage { font-size: 13px; }
.funnel-row .funnel-track { height: 18px; border-radius: 5px; background: #f1f5f9; overflow: hidden; }
.funnel-row .funnel-fill { display: block; height: 100%; background: var(--primary); border-radius: 5px; min-width: 2px; }
.funnel-row .funnel-value { font-size: 12px; color: var(--text-muted); white-space: normal; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
.home-meta { color: var(--text-muted); font-size: 11.5px; }
@media (max-width: 960px) { .home-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .home-tiles { grid-template-columns: 1fr; } .funnel-toggle { grid-template-columns: 1fr; gap: 3px; } }

/* Интерактивный слой графиков: зоны наведения, направляющая, тултип */
.chart-wrap { position: relative; }
.pace-chart .hit-band { fill: transparent; cursor: crosshair; }
.pace-chart .crosshair { stroke: var(--text-muted); stroke-width: 1; stroke-dasharray: 3 3; pointer-events: none; }
.pace-chart .plan-line { stroke: var(--chart-3, var(--border)); stroke-width: 1.5; stroke-dasharray: 2 4; }
.pace-chart .plan-line-label { font-weight: 600; }
.pace-chart .dot { pointer-events: none; }
.chart-tooltip {
  position: absolute; transform: translate(-50%, -100%);
  background: var(--card); color: var(--text); border: 1px solid var(--border);
  border-radius: 6px; padding: 6px 10px; font-size: 12px; line-height: 1.35;
  box-shadow: 0 4px 14px rgba(10, 30, 50, .18); pointer-events: none;
  max-width: 260px; white-space: normal; z-index: 5;
}

/* Раскрываемые стадии воронки */
.funnel-toggle { display: grid; grid-template-columns: minmax(140px, 1.2fr) 3fr minmax(150px, auto); align-items: center; gap: 10px; width: 100%; background: none; border: 0; padding: 0; cursor: pointer; text-align: left; font: inherit; color: inherit; }
.funnel-toggle:hover .funnel-stage, .funnel-toggle:focus-visible .funnel-stage { text-decoration: underline; }
.funnel-deals { margin: 4px 0 10px; padding: 8px 12px; border-left: 3px solid var(--border); display: grid; gap: 4px; }
.funnel-deal { display: flex; justify-content: space-between; gap: 12px; margin: 0; font-size: 13px; flex-wrap: wrap; }
.muted { color: var(--text-muted); font-size: .85em; font-weight: 400; }

/* Гистограмма реализации LTV */
.ltv-histogram .hist-bar { fill: var(--chart-2, #2c5f8a); opacity: .55; transition: opacity .15s ease-out; cursor: pointer; }
.ltv-histogram .hist-bar:hover, .ltv-histogram a:focus-visible .hist-bar { opacity: .85; }
.ltv-histogram .hist-bar.is-active { fill: var(--success); opacity: .9; }
.ltv-histogram .hist-count { font-weight: 700; }

/* Главная v2: основные показатели и полная воронка */
.report-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.home-kpis .kpi-card--link { text-decoration: none; color: inherit; transition: border-color .15s ease-out, transform .15s ease-out; }
.home-kpis .kpi-card--link:hover { border-color: var(--primary); transform: translateY(-2px); }
.home-kpis .kpi-card--danger { border-left: 4px solid var(--destructive); }
.home-kpis .kpi-card--danger strong { color: var(--destructive); }
.funnel-leads-row { margin: 0 0 12px; padding: 10px 14px; background: var(--surface-tint); border-radius: var(--radius); }
.funnel-row--won { grid-template-columns: minmax(170px, 230px) 1fr; padding: 8px 0 0; border-top: 1px dashed var(--border); margin-top: 6px; }
.funnel-row--won .funnel-stage { font-weight: 700; }
.funnel-won-value { color: var(--success, #1b8a4c); font-weight: 700; font-size: 13.5px; }
@media (max-width: 960px) { .report-grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .report-grid--3 { grid-template-columns: 1fr; } }

/* Качество данных: сделки без суммы в воронке (честная пометка) */
.data-quality-warn { background: var(--warning-tint); border-left: 4px solid var(--warning); border-radius: 6px; padding: 9px 13px; margin: 6px 0 12px; font-size: 13.5px; color: #78350f; }
.funnel-value .no-amount { color: var(--warning); font-weight: 600; }

/* Активность менеджеров: карточки, периоды, мини-графики звонков */
.activity-periods { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 0 0 8px; }
.activity-period { padding: 6px 14px; border: 1px solid var(--border); border-radius: 999px; text-decoration: none; color: var(--foreground); }
.activity-period.is-active { background: var(--primary); border-color: var(--primary); color: var(--primary-foreground); }
.activity-custom { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-width: 0; }
.activity-custom input { padding: 5px 8px; border: 1px solid var(--border); border-radius: var(--radius-sm, 6px); max-width: 150px; min-width: 0; }
.activity-custom button { padding: 6px 12px; border: 1px solid var(--primary); border-radius: 999px; background: var(--primary); color: var(--primary-foreground); cursor: pointer; }
.manager-grid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(460px, 1fr)); }
/* советы («комментарий») — справа от показателей (Иван, 20.08.2026):
   явные колонки вместо grid-хака — слова не налезают друг на друга */
.manager-card { border: 1px solid var(--border); border-left: 4px solid var(--primary); border-radius: var(--radius-lg); padding: 16px; display: grid; gap: 12px; align-content: start; }
.manager-card__cols { display: grid; grid-template-columns: minmax(0, 3fr) minmax(220px, 2fr); gap: 16px; align-items: start; }
.manager-card__main { display: grid; gap: 12px; min-width: 0; }
.manager-card__aside { display: grid; gap: 6px; min-width: 0; align-content: start; }
.manager-card__aside .manager-advice { margin: 0; overflow-wrap: break-word; }
@media (max-width: 900px) { .manager-card__cols { grid-template-columns: 1fr; } }
.manager-card h3 { margin: 0; }
.manager-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.manager-stat { display: grid; gap: 2px; }
.manager-stat strong { font-family: var(--font-mono); font-size: 24px; }
.manager-stat--danger strong { color: var(--destructive); }
.manager-stat em { font-style: normal; font-family: var(--font-mono); font-size: 12px; }
.delta-up { color: #15803d; }
.delta-down { color: var(--destructive); }
.act-bars { display: flex; align-items: flex-end; gap: 2px; height: 64px; }
.act-bar { flex: 1 1 0; display: flex; align-items: flex-end; height: 100%; min-width: 3px; }
.act-bar__total { position: relative; display: block; width: 100%; min-height: 2px; background: var(--surface-tint); border-radius: 2px 2px 0 0; overflow: hidden; }
.act-bar__effective { position: absolute; bottom: 0; left: 0; width: 100%; background: var(--primary); }
.manager-advices { display: grid; gap: 6px; }
.manager-advice { margin: 0; font-size: 14px; }
.manager-advice .muted { font-size: 12px; }
@media (max-width: 640px) {
  .manager-grid { grid-template-columns: 1fr; }
  .activity-periods { gap: 6px; }
}

/* Вопросы РОПа: карточки качества работы со звонками */
.cq-grid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.cq-card { border: 1px solid var(--border); border-left: 4px solid var(--primary); border-radius: var(--radius-lg); padding: 16px; display: grid; gap: 6px; align-content: start; }
.cq-card--danger { border-left-color: var(--destructive); }
.cq-card strong { font-family: var(--font-mono); font-size: 28px; }
.cq-card--danger strong { color: var(--destructive); }
.cq-card span { color: var(--text-muted); font-size: 14px; }
.cq-loss { color: var(--destructive) !important; }

/* Скоринг вероятности продажи v0 */
.deal-score { font-family: var(--font-mono); font-size: 12px; padding: 1px 7px; border-radius: 999px; border: 1px solid var(--border); cursor: help; }
.deal-score--hot { border-color: #15803d; color: #15803d; }
.deal-score--cold { border-color: var(--destructive); color: var(--destructive); }

/* Классическая форма воронки: центрированные сужающиеся ступени */
.funnel-track { display: flex; justify-content: center; }
.funnel-fill { border-radius: 6px; }

/* мобильная воронка: бейдж «шанс» не должен растягивать экран */
@media (max-width: 640px) {
  .funnel-deal span { min-width: 0; overflow-wrap: anywhere; }
  .deal-score { white-space: nowrap; }
}

/* Регламент входящих: действие АИ-РОПа по лиду */
.lead-action { display: inline-block; font-size: 13px; font-weight: 600; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border); white-space: nowrap; }
.lead-action--alarm { border-color: var(--destructive); color: var(--destructive); background: rgba(220, 38, 38, 0.06); }
.lead-action--warn { border-color: #b45309; color: #b45309; background: rgba(180, 83, 9, 0.06); }
.lead-action--muted { color: var(--text-muted); }
.lead-action-reason { display: block; font-size: 12px; margin-top: 2px; }

/* Тех-поддержка: чат и формы обращений */
.support-chat { display: grid; gap: 10px; max-height: 420px; overflow-y: auto; padding: 4px 0; }
.support-msg { border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 10px 14px; max-width: 80%; justify-self: end; background: rgba(44, 95, 138, 0.06); }
.support-msg--ai { justify-self: start; background: rgba(21, 128, 61, 0.06); border-left: 4px solid var(--primary); }
.support-msg p { margin: 4px 0 0; white-space: pre-wrap; }
.support-msg-author { font-size: 12px; color: var(--text-muted); }
.support-form { display: grid; gap: 8px; max-width: 640px; }
.support-form textarea { width: 100%; }
.support-status-form { display: flex; gap: 6px; align-items: center; }
.support-status-form input[type="text"] { width: 120px; }

/* Воронка v2: плавные полосы, глубина цветом, бейдж перехода */
.funnel-fill { transition: width .5s ease, background-color .5s ease; min-height: 22px; }
.funnel-toggle:hover .funnel-fill { filter: brightness(1.08); }
.funnel-toggle { cursor: pointer; }
.funnel-conv { font-family: var(--font-mono); font-size: 11px; color: var(--text-muted); border: 1px solid var(--border); border-radius: 999px; padding: 0 6px; cursor: help; }

/* Длинные технические коды источников не должны растягивать мобильный экран */
.manager-advice { overflow-wrap: anywhere; }

/* Приветствие и фраза дня на дашборде */
.greeting-phrase { font-size: 15px; font-style: italic; color: var(--text-muted); margin: 2px 0 6px; }

/* Плавающая кнопка-робот «Спросить АИ-РОПа» */
.ask-rop-fab { position: fixed; right: 22px; bottom: 22px; z-index: 60; width: 62px; height: 62px; border-radius: 50%; background: linear-gradient(135deg, #2c5f8a, #1a3a5c); box-shadow: 0 6px 18px rgba(26, 58, 92, 0.45); display: flex; align-items: center; justify-content: center; text-decoration: none; transition: transform .15s ease, box-shadow .15s ease; }
.ask-rop-fab svg { width: 38px; height: 38px; }
.ask-rop-fab:hover { transform: scale(1.08); box-shadow: 0 8px 24px rgba(26, 58, 92, 0.55); }
.ask-rop-fab-label { position: absolute; right: 72px; bottom: 50%; transform: translateY(50%); background: #1a3a5c; color: #fff; font-size: 13px; font-weight: 600; padding: 6px 12px; border-radius: 999px; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity .15s ease; }
.ask-rop-fab:hover .ask-rop-fab-label, .ask-rop-fab:focus .ask-rop-fab-label { opacity: 1; }
@media (max-width: 640px) {
  .ask-rop-fab { right: 14px; bottom: 14px; width: 54px; height: 54px; }
  .ask-rop-fab svg { width: 32px; height: 32px; }
}

/* Комментарий АИ-РОПа после планки плана */
.plan-commentary { border-left: 4px solid var(--primary); }
.plan-commentary--behind { border-left-color: var(--destructive); }
.plan-commentary-title { font-weight: 700; margin: 8px 0 2px; }

/* Динамика за вчера: однострочный пульс */
.daily-pulse { padding: 12px 24px; }
.daily-pulse__chips { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 8px; }
/* таблицы пульса — друг под другом на всю ширину (ТЗ Ивана 13.08: три
   колонки по ~330px разваливали каждую таблицу) */
.daily-pulse__drill { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
.daily-pulse__drill > details { width: 100%; min-width: 0; }
.daily-pulse__drill summary { cursor: pointer; color: var(--primary); font-weight: 600; font-size: 14px; }
.daily-pulse__drill table { width: 100%; border-collapse: collapse; margin-top: 8px; font-size: 13px; }
.daily-pulse__drill th, .daily-pulse__drill td { text-align: left; padding: 5px 8px; border-bottom: 1px solid var(--border); }
.daily-pulse__drill th { color: var(--text-muted); }
.daily-pulse-label { font-weight: 700; }
.pulse-chip { border: 1px solid var(--border); border-radius: 999px; padding: 3px 12px; font-size: 13px; white-space: nowrap; }
.pulse-arrow--good { color: #15803d; }
.pulse-arrow--bad { color: var(--destructive); }

/* Команда хантеров */
.hunter-grid { display: grid; gap: 14px; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
.hunter-card { border: 1px solid var(--border); border-left: 4px solid var(--primary); border-radius: var(--radius-lg); padding: 14px; display: grid; gap: 4px; align-content: start; text-decoration: none; color: inherit; transition: box-shadow .15s ease; }
.hunter-card:hover { box-shadow: 0 4px 14px rgba(26,58,92,.18); }
.hunter-card--active { border-color: var(--primary); background: rgba(44,95,138,.06); }
.hunter-card--trainee { border-left-color: #b45309; }
.hunter-photo { width: 56px; height: 56px; border-radius: 50%; object-fit: cover; }
.hunter-photo--initials { display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #2c5f8a, #1a3a5c); color: #fff; font-weight: 700; font-size: 20px; }
.hunter-plan { font-size: 13px; }
.hunter-tasks { font-size: 12px; color: var(--text-muted); }

/* Таблица сделок внутри стадии воронки */
.funnel-stage-table { font-size: 13px; }
.row-sla-overdue td { background: rgba(220, 38, 38, 0.07); }

/* RFM-сегмент и светофор здоровья клиента (LTV) */
.rfm-chip {
  display: inline-block; padding: 2px 8px; border-radius: 20px;
  font-size: 11.5px; font-weight: 600;
  background: color-mix(in srgb, var(--accent, #1e40af) 12%, transparent);
  white-space: nowrap;
}
.health-chip {
  display: inline-block; padding: 2px 8px; border-radius: 20px;
  font-size: 11.5px; font-weight: 700; white-space: nowrap;
}
.health-good { background: #dcfce7; color: #047857; }
.health-stable { background: #e0f2fe; color: #075985; }
.health-warn { background: #fef3c7; color: #b45309; }
.health-crit { background: #fee2e2; color: #b91c1c; }

/* Фото хантера: инициалы под фото — если портал не отдал картинку без
   авторизации, картинка удаляется onerror и остаются инициалы */
.hunter-photo--initials { position: relative; }
.hunter-photo--img { position: absolute; inset: 0; width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }

/* Воронка «максимально понятно» (поручение 19.07.2026): стрелка
   раскрытия, шапки групп стадий, видимые параметры вероятности,
   мобильные карточки вместо широкой таблицы */
.funnel-chevron {
  display: inline-block; width: 14px; margin-right: 4px;
  color: var(--text-muted); transition: transform 0.15s ease;
}
.funnel-toggle[aria-expanded="true"] .funnel-chevron { transform: rotate(90deg); }
.funnel-group-head {
  margin: 14px 0 4px; padding: 5px 10px; border-radius: 8px;
  font-size: 12.5px; font-weight: 700; letter-spacing: 0.02em;
}
.funnel-group-head--money { background: #dcfce7; color: #047857; }
.funnel-group-head--kp { background: #e0f2fe; color: #075985; }
.funnel-group-head--leads { background: #fef3c7; color: #92400e; }
.funnel-group-head--waiting, .funnel-group-head--other { background: #f1f5f9; color: var(--text-muted); }
.funnel-empty { margin-top: 10px; }
.funnel-empty summary { font-size: 12px; color: var(--text-muted); cursor: pointer; }
.funnel-empty-list { margin: 6px 0 0; padding-left: 18px; font-size: 12px; color: var(--text-muted); columns: 2; }
.deal-score-params {
  display: block; margin-top: 3px; font-size: 11px; line-height: 1.35;
  color: var(--text-muted); max-width: 230px;
}
.sla-badge {
  display: inline-block; padding: 1px 7px; border-radius: 999px;
  background: #fee2e2; color: #b91c1c; font-size: 11px; font-weight: 700;
  white-space: nowrap;
}
@media (max-width: 700px) {
  .funnel-stage-table thead { display: none; }
  .funnel-stage-table, .funnel-stage-table tbody,
  .funnel-stage-table tr, .funnel-stage-table td { display: block; width: 100%; }
  .funnel-stage-table tr {
    border: 1px solid var(--border); border-radius: 10px;
    padding: 8px 12px; margin: 0 0 10px; background: var(--card, #fff);
  }
  .funnel-stage-table tr.row-sla-overdue { border-color: #fca5a5; }
  .funnel-stage-table td {
    border: 0; padding: 3px 0;
    white-space: normal; overflow-wrap: anywhere;
  }
  .funnel-stage-table td::before {
    content: attr(data-label); display: block;
    font-size: 10.5px; color: var(--text-muted); text-transform: uppercase;
    letter-spacing: 0.04em;
  }
  .funnel-stage-table td.deal-cell-title::before { display: none; }
  .funnel-stage-table td.deal-cell-title { font-weight: 600; }
  .deal-score-params { max-width: none; }
  .funnel-empty-list { columns: 1; }
}

/* Сложность сделки и «как дожать» из комментариев (19.07.2026) */
.deal-difficulty, .deal-push, .deal-note {
  display: block; margin-top: 4px; font-size: 12px; line-height: 1.4;
  max-width: 340px;
}
.deal-difficulty strong { color: #b45309; }
.deal-push strong { color: #047857; }
.deal-note { font-style: italic; }
@media (max-width: 700px) {
  .deal-difficulty, .deal-push, .deal-note { max-width: none; }
}

/* Таблица стадии: фиксированная раскладка — услуги и рекомендации видны
   без горизонтальной прокрутки на десктопе */
@media (min-width: 701px) {
  .funnel-stage-table { table-layout: fixed; width: 100%; }
  .funnel-stage-table th:nth-child(1) { width: 17%; }
  .funnel-stage-table th:nth-child(2) { width: 9%; }
  .funnel-stage-table th:nth-child(3) { width: 19%; }
  .funnel-stage-table th:nth-child(4) { width: 7%; }
  .funnel-stage-table th:nth-child(5) { width: 9%; }
  .funnel-stage-table th:nth-child(6) { width: 8%; }
  .funnel-stage-table th:nth-child(7) { width: 10%; }
  .funnel-stage-table th:nth-child(8) { width: 21%; }
  .funnel-stage-table th, .funnel-stage-table td {
    white-space: normal; overflow-wrap: anywhere; vertical-align: top;
  }
}
/* Закупочные клиенты в списке LTV */
.tender-badge {
  display: inline-block; padding: 1px 8px; border-radius: 20px;
  font-size: 11px; font-weight: 700; background: #ede9fe; color: #5b21b6;
  white-space: nowrap; vertical-align: middle;
}
.filter-chips .tender-chip { color: #5b21b6; border-color: #ddd6fe; }
.filter-chips .tender-chip.is-active { background: #7c3aed; border-color: #7c3aed; color: #fff; }

/* Лента касаний и комментарии в карточке клиента LTV */
.last-touch .touch-row { font-size: 13px; margin: 2px 0; }
.last-touch .touch-row strong { color: #64748b; margin-right: 4px; }
.last-touch .touch-row--comment span { color: #5b21b6; }

/* Бейдж воронки у сделки в карточке клиента LTV */
.deal-summary .deal-funnel {
  display: inline-block; font-size: 11px; font-weight: 700;
  background: #dbeafe; color: #1e40af; border-radius: 20px; padding: 0 8px;
  vertical-align: middle;
}
/* Вкладка «Доступы» v2: роли, реестр входов (19.07.2026) */
.access-form { display: grid; gap: 10px; max-width: 460px; }
.access-form select { min-height: 44px; padding: 8px 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--card); color: var(--foreground); }
.access-role-hint { margin-top: 14px; display: grid; gap: 8px; }
.access-role-hint p { margin: 0; font-size: 13px; line-height: 1.4; }
.access-new-link { border-color: var(--primary); }
.auth-secondary { margin-top: 4px; }
.auth-secondary .button { width: 100%; }

/* Интерактивная экскурсия при первом входе (20.07.2026) */
.tour-overlay { position: fixed; inset: 0; z-index: 60; display: grid; place-items: center; padding: 20px; background: rgba(15, 23, 42, .55); backdrop-filter: blur(3px); }
.tour-overlay[hidden] { display: none; }
.tour-card { position: relative; width: min(520px, 100%); background: var(--card); border-radius: var(--radius-xl); padding: 34px 34px 26px; box-shadow: 0 30px 70px rgba(10, 30, 60, .35); }
.tour-close { position: absolute; top: 14px; right: 16px; border: 0; background: none; font-size: 26px; line-height: 1; color: var(--text-muted); cursor: pointer; }
.tour-step { margin: 0 0 6px; font-size: 12.5px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--primary); }
.tour-title { margin: 0 0 12px; font-size: 24px; }
.tour-body { color: var(--foreground); line-height: 1.6; }
.tour-result { margin-top: 14px; padding: 12px 16px; border-radius: var(--radius); background: var(--success-tint); color: #065f46; font-weight: 600; line-height: 1.5; }
.tour-dots { display: flex; gap: 7px; justify-content: center; margin: 22px 0 18px; }
.tour-dot { width: 8px; height: 8px; border-radius: 999px; background: var(--border); transition: background .15s, width .15s; }
.tour-dot.is-active { width: 22px; background: var(--primary); }
.tour-nav { display: flex; gap: 12px; }
.tour-nav .button { flex: 1; }
.tour-skip { display: block; margin: 12px auto 0; border: 0; background: none; color: var(--text-muted); font-size: 13px; cursor: pointer; text-decoration: underline; }
.tour-help { position: fixed; left: 20px; bottom: 22px; z-index: 40; width: 40px; height: 40px; border-radius: 999px; border: 1px solid var(--border); background: var(--card); color: var(--primary); font-size: 20px; font-weight: 700; cursor: pointer; box-shadow: 0 6px 18px rgba(10, 30, 60, .16); }
.tour-help:hover { background: var(--surface-tint); }
@media (max-width: 560px) { .tour-card { padding: 28px 22px 22px; } .tour-title { font-size: 21px; } .tour-help { left: 14px; bottom: 84px; } }

/* Реанимация в формате карточек с НВОС-гипотезой и скриптом (20.07.2026) */
.reanim-list { display: grid; gap: 12px; }
.reanim-card { border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--card); padding: 4px 18px; }
.reanim-card > summary { cursor: pointer; padding: 14px 0; list-style: none; display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: baseline; }
.reanim-card > summary::-webkit-details-marker { display: none; }
.reanim-card > summary::before { content: "▸"; color: var(--text-muted); margin-right: 6px; }
.reanim-card[open] > summary::before { content: "▾"; }
.reanim-card__name { font-family: var(--font-display); font-weight: 600; font-size: 16px; }
.reanim-card__meta { color: var(--text-muted); font-size: 13px; }
.nvos-badge { display: inline-block; padding: 1px 9px; border-radius: 999px; background: #dbeafe; color: #1e40af; font-weight: 700; font-size: 12px; }
.nvos-badge--guess { background: var(--warning-tint); color: var(--warning); }
.reanim-hint { padding: 4px 0 14px; border-top: 1px dashed var(--border); }
.reanim-hint p { margin: 10px 0; line-height: 1.55; }
.reanim-script { display: grid; gap: 12px; margin-top: 12px; }
.reanim-script__block { background: var(--surface-tint); border-radius: var(--radius); padding: 12px 14px; }
.reanim-script__label { display: flex; align-items: center; gap: 10px; font-weight: 600; font-size: 13px; margin-bottom: 6px; }
.reanim-script__label .button { min-height: 30px; padding: 3px 10px; font-size: 12px; margin-left: auto; }
.reanim-script__block p { margin: 0; line-height: 1.55; }
.reanim-script__intro { margin: 0 0 2px; font-size: 13px; }

/* Реанимация: свёрнутые строки в виде таблицы (поручение 20.07.2026) —
   те же колонки, что в таблице LTV, но каждая строка раскрывается в карточку */
.reanim-cols { grid-template-columns: 2.4fr 1.1fr 0.7fr 1.5fr 1.2fr 0.55fr 0.7fr 1fr 1.1fr 0.75fr; }
.reanim-table__head {
  display: grid; grid-template-columns: 2.4fr 1.1fr 0.7fr 1.5fr 1.2fr 0.55fr 0.7fr 1fr 1.1fr 0.75fr;
  gap: 6px 12px; padding: 8px 19px 4px; font-size: 11px; text-transform: uppercase;
  letter-spacing: .04em; color: var(--text-muted);
}
.reanim-card > summary.reanim-row {
  display: grid; grid-template-columns: 2.4fr 1.1fr 0.7fr 1.5fr 1.2fr 0.55fr 0.7fr 1fr 1.1fr 0.75fr;
  gap: 4px 12px; align-items: center; flex-wrap: nowrap;
}
.reanim-card > summary.reanim-row::before { content: none; margin: 0; }
.reanim-row__client { font-family: var(--font-display); font-weight: 600; }
.reanim-row__client::before { content: "▸"; color: var(--text-muted); margin-right: 6px; font-family: var(--font-body); }
.reanim-card[open] > summary.reanim-row .reanim-row__client::before { content: "▾"; }
.reanim-row__sub { display: block; font-family: var(--font-body); font-weight: 400; font-size: 12px; margin-top: 2px; }
.reanim-row__okved, .reanim-row__num, .reanim-row__money, .reanim-row__real { font-variant-numeric: tabular-nums; font-size: 13px; }
.reanim-row__industry { font-size: 12px; }
.reanim-row__manager { font-size: 13px; }
.reanim-row__pending { grid-column: 3 / -1; font-size: 12px; }
.service-group-title { margin: 18px 0 6px; font-size: 14px; }
.peer-ltv { margin-top: 12px; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface-tint); }
.peer-ltv p { margin: 0; }
.peer-ltv p + p { margin-top: 6px; }
@media (max-width: 900px) {
  .reanim-table__head { display: none; }
  .reanim-card > summary.reanim-row { grid-template-columns: 1fr; gap: 4px; }
  .reanim-row > span[data-label]:not(.reanim-row__client)::before {
    content: attr(data-label) ": "; color: var(--text-muted); font-size: 11px;
  }
}

/* Воронка v3: без прогресс-баров, крупные заголовки, карточки сделок,
   визуальный регламент стадии (поручения Екатерины 20.07.2026) */
.funnel-title { font-size: 20px; margin: 26px 0 10px; }
.funnel-group-head {
  margin: 22px 0 10px; padding: 9px 16px; border-radius: 10px;
  font-family: var(--font-display); font-size: 16px; font-weight: 700;
  letter-spacing: -0.01em; border-left: 4px solid transparent;
}
.funnel-group-head--money { background: #ecfdf5; color: #065f46; border-left-color: #059669; }
.funnel-group-head--kp { background: #eff6ff; color: #1e40af; border-left-color: #2563eb; }
.funnel-group-head--leads { background: #fffbeb; color: #92400e; border-left-color: #d97706; }
.funnel-group-head--waiting, .funnel-group-head--other { background: #f1f5f9; color: #475569; border-left-color: #94a3b8; }

.funnel-toggle {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 16px; width: 100%; background: none; border: 0; padding: 13px 4px;
  cursor: pointer; text-align: left; font: inherit; color: inherit;
  border-bottom: 1px solid var(--border);
}
.funnel-toggle .funnel-track, .funnel-toggle .funnel-fill { display: none; }
.funnel-row .funnel-stage { font-family: var(--font-display); font-size: 15px; font-weight: 600; }
.funnel-toggle .funnel-value { font-size: 14px; color: var(--text-muted); white-space: nowrap; }
.funnel-toggle .funnel-value strong { color: var(--foreground); font-variant-numeric: tabular-nums; }
.funnel-chevron { display: inline-block; width: 14px; color: var(--text-muted); transition: transform .15s; }
.funnel-toggle[aria-expanded="true"] .funnel-chevron { transform: rotate(90deg); }
.funnel-won { display: flex; justify-content: space-between; gap: 16px; align-items: baseline; padding: 12px 4px 2px; margin-top: 8px; border-top: 2px solid var(--border); }
.funnel-won strong { color: #065f46; font-family: var(--font-display); }

.deal-cards { display: grid; gap: 14px; padding: 14px 0 4px; }
.deal-card { border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 16px 18px; background: var(--card); }
.deal-card--overdue { border-color: #fca5a5; box-shadow: inset 3px 0 0 #dc2626; }
.deal-card__head { display: flex; justify-content: space-between; gap: 14px; align-items: baseline; }
.deal-card__title { font-family: var(--font-display); font-weight: 600; font-size: 16px; }
.deal-card__sum { font-family: var(--font-mono); font-weight: 600; font-size: 17px; white-space: nowrap; }
.deal-card__facts { display: flex; flex-wrap: wrap; gap: 8px 22px; margin: 12px 0; font-size: 13.5px; }
.deal-fact-label { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-muted); }
.nvos-badge { display: inline-block; padding: 1px 9px; border-radius: 999px; background: #dbeafe; color: #1e40af; font-weight: 700; font-size: 12px; }
.nvos-badge--guess { background: var(--warning-tint); color: var(--warning); }
.deal-score { font-family: var(--font-mono); font-size: 13px; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--border); }
.deal-score--hot { border-color: #15803d; color: #15803d; }
.deal-score--cold { border-color: var(--destructive); color: var(--destructive); }

.sla-panel { margin: 6px 0 14px; }
.sla-panel__stage { display: block; font-size: 12.5px; color: var(--text-muted); margin-bottom: 5px; }
.sla-panel__bar { position: relative; display: flex; height: 26px; border-radius: 7px; overflow: hidden; background: #fee2e2; font-size: 11.5px; font-weight: 600; }
.sla-panel__norm { display: flex; align-items: center; justify-content: center; background: #bbf7d0; color: #065f46; white-space: nowrap; min-width: 74px; }
.sla-panel__over { display: flex; align-items: center; padding-left: 10px; color: #b91c1c; }

.deal-card__block { border-top: 1px solid var(--border); padding-top: 12px; margin-top: 12px; }
.deal-card__block:first-of-type { border-top: 0; }
.deal-card__block-title { font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-muted); font-weight: 700; margin-bottom: 7px; }
.deal-card__block p { margin: 6px 0; line-height: 1.55; }
.sell-checklist { list-style: none; padding: 0; margin: 0; display: grid; gap: 5px; }
.sell-checklist li { font-size: 13.5px; }
.sell-checklist .is-bought { color: #059669; }
.sell-checklist .is-open { color: var(--foreground); }
.deal-steps { margin: 0; padding-left: 20px; display: grid; gap: 5px; line-height: 1.5; }
.deal-difficulty strong { color: #b45309; }
.deal-push strong { color: #047857; }
.deal-note { font-style: italic; }
.deal-llm-note { font-size: 12px; }
.deal-peers .peer-win strong { color: #047857; }
.deal-peers .peer-lose strong { color: #b45309; }
/* Плашка «Только прямые договоры» — исключает тендерных клиентов */
.filter-chips .direct-chip { color: #047857; border-color: #a7f3d0; }
.filter-chips .direct-chip.is-active { background: #047857; border-color: #047857; color: #fff; }

/* ============================================================
   Полировка платформы v4 (20.07.2026)
   Охват «на всю платформу» согласован Екатериной; синяя тема и
   логика дашборда (D-056, D-070) сохранены, добавлены воздух,
   мягкие тени, современный текст и акценты приветствия/АИ-РОПа.
   Секция в конце файла — чтобы выигрывать каскад у эталонного блока.
   ============================================================ */
:root {
  --shadow-card: 0 1px 2px rgba(15, 23, 42, .045), 0 10px 26px -14px rgba(15, 23, 42, .14);
  --shadow-lift: 0 2px 6px rgba(15, 23, 42, .06), 0 16px 34px -16px rgba(26, 58, 92, .30);
}

/* Современный текст: используем уже загруженные Inter/Manrope вместо системного шрифта */
body { font-family: var(--font-sans); font-size: 14.5px; line-height: 1.6; letter-spacing: -.005em; }

/* Чуть больше воздуха между секциями */
.report-shell > * + * { margin-top: 18px; }

/* Мягкая тень и единый радиус у карточек — объём без потери плотности эталона */
.report-card, .kpi-card, .table-card, .filter-panel, .copybox, .methodology,
.home-tile, .plan-bar, .manager-card, .cq-card, .hunter-card {
  border-radius: 12px;
  box-shadow: var(--shadow-card);
}

/* Строка свежести данных — аккуратная плашка с «живой» точкой */
.home-meta--status {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 4px 12px; border: 1px solid var(--border); border-radius: 999px;
  background: var(--card); color: #475569; font-weight: 600; box-shadow: var(--shadow-card);
}
.home-meta--status .status-dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--success); box-shadow: 0 0 0 3px rgba(4, 120, 87, .15);
}

/* ── Приветствие-герой (только домашняя) ── */
.report-heading--hero {
  display: block; position: relative; overflow: hidden;
  background: linear-gradient(180deg, #ffffff, #fbfdff);
  border: 1px solid var(--border); border-radius: 16px;
  padding: 24px 26px 22px 30px; box-shadow: var(--shadow-card);
}
.report-heading--hero::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 5px;
  background: linear-gradient(180deg, #2c5f8a, #1a3a5c);
}
.report-heading--hero .eyebrow {
  color: var(--primary); font-size: 12px; font-weight: 700;
  letter-spacing: .09em; text-transform: uppercase;
}
.report-heading--hero h1 {
  margin: 6px 0 12px; font-size: clamp(24px, 3.2vw, 32px);
  font-weight: 800; line-height: 1.1;
}
.report-heading--hero .greeting-phrase {
  margin: 0; padding: 11px 16px; max-width: 760px;
  border-left: 3px solid #2c5f8a; border-radius: 0 10px 10px 0;
  background: var(--surface-tint); color: #1e293b; font-size: 15px; font-style: italic;
}
.report-heading--hero .greeting-hint { margin: 12px 0 0; color: var(--text-muted); font-size: 13px; }

/* ── Карточка АИ-РОПа ── */
.plan-commentary { display: block; }
.plan-commentary-head { display: flex; align-items: center; gap: 13px; margin-bottom: 4px; }
.ai-avatar {
  flex: 0 0 auto; width: 40px; height: 40px; border-radius: 11px;
  background: linear-gradient(135deg, #2c5f8a, #1a3a5c);
  display: grid; place-items: center; box-shadow: 0 6px 16px -6px rgba(26, 58, 92, .6);
}
.ai-avatar svg { width: 24px; height: 24px; }
.ai-tag {
  font-size: 11px; font-weight: 700; letter-spacing: .09em;
  text-transform: uppercase; color: var(--text-muted);
}
.plan-commentary-head h2 {
  margin: 1px 0 0; padding: 0; border: 0; font-size: 18px; color: var(--foreground);
}
.plan-commentary--behind .plan-commentary-head h2 { color: var(--destructive); }
.ai-reasons, .ai-actions { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 8px; }
.ai-reasons li { display: flex; gap: 10px; align-items: flex-start; font-size: 14px; }
.ai-reasons li::before {
  content: ""; flex: 0 0 auto; width: 7px; height: 7px; margin-top: 7px;
  border-radius: 50%; background: var(--destructive); opacity: .7;
}
.plan-commentary:not(.plan-commentary--behind) .ai-reasons li::before {
  background: var(--primary); opacity: .6;
}
.ai-reasons a { color: var(--primary); font-weight: 600; }
.ai-actions li {
  display: flex; gap: 11px; align-items: flex-start; font-size: 14px;
  padding: 9px 13px; background: var(--success-tint);
  border: 1px solid #cdeede; border-radius: 10px;
}
.ai-check {
  flex: 0 0 auto; width: 20px; height: 20px; border-radius: 6px;
  background: var(--success); color: #fff; display: grid; place-items: center;
  font-size: 12px; font-weight: 900; margin-top: 1px;
}

/* ── Пульс «вчера» ── */
.daily-pulse .pulse-chip { color: var(--text-muted); background: #f8fafc; }
.daily-pulse .pulse-chip strong { color: var(--foreground); font-variant-numeric: tabular-nums; }

/* ── KPI: короткая шапка + подпись, крупные табличные цифры, подъём при наведении ── */
.home-kpis .kpi-card { padding: 16px 16px 14px; gap: 5px; }
.home-kpis .kpi-cap {
  font-size: 11.5px; font-weight: 700; letter-spacing: .05em;
  text-transform: uppercase; color: var(--text-muted);
}
.home-kpis .kpi-card strong { font-size: clamp(22px, 2.6vw, 27px); letter-spacing: -.01em; }
.home-kpis .kpi-card span:not(.kpi-cap) { font-size: 12.5px; }
.home-kpis .kpi-card--link:hover { transform: translateY(-3px); box-shadow: var(--shadow-lift); }
.home-kpis .kpi-card--danger {
  background: linear-gradient(180deg, #ffffff, #fff7f7); border-left: 4px solid var(--destructive);
}
.home-kpis .kpi-card--danger .kpi-cap { color: var(--destructive); }

/* ── Карточка сделки: видимая вероятность и сгруппированные факты (22.07.2026) ──
   Расшифровка «почему такая вероятность» раскрывается тапом — работает и на
   телефоне, где hover-подсказки нет; критерии владелец правит в Настройках. */
.score-why { margin: 10px 0 2px; }
.score-why summary {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  cursor: pointer; list-style: none; user-select: none;
}
.score-why summary::-webkit-details-marker { display: none; }
.score-why summary .deal-fact-label { display: inline; }
.score-why__hint { font-size: 12px; color: var(--primary, #1a3a5c); white-space: nowrap; }
.score-why[open] .score-why__hint { opacity: .6; }
.score-bar {
  flex: 1 1 90px; max-width: 190px; height: 7px; border-radius: 999px;
  background: #e2e8f0; overflow: hidden;
}
.score-bar__fill { display: block; height: 100%; border-radius: 999px; background: #94a3b8; }
.score-why--hot .score-bar__fill { background: #15803d; }
.score-why--cold .score-bar__fill { background: var(--destructive); }
.score-why__intro { font-size: 12.5px; margin: 8px 0 4px; }
.score-why__list { list-style: none; margin: 4px 0 6px; padding: 0; display: grid; gap: 4px; font-size: 13px; }
.score-why__list li { padding-left: 14px; position: relative; }
.score-why__list li::before { content: "•"; position: absolute; left: 2px; }
.score-why__list .is-plus { color: #047857; }
.score-why__list .is-minus { color: #b45309; }

.deal-card__facts--grouped { display: grid; gap: 12px 26px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.fact-group { display: grid; gap: 7px; align-content: start; }
.fact-group__title {
  font-size: 11px; text-transform: uppercase; letter-spacing: .05em;
  color: var(--text-muted); font-weight: 700;
  border-bottom: 1px dashed var(--border); padding-bottom: 3px;
}
.fact-missing { color: #b45309; font-weight: 600; }
@media (max-width: 640px) {
  .deal-card__facts--grouped { grid-template-columns: 1fr; }
}

/* ── Наполнение карточки v2 (22.07.2026): таблица КП, комментарий, касания ── */
.kp-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.kp-table td { padding: 4px 2px; border-bottom: 1px dashed var(--border); vertical-align: top; }
.kp-table tr:last-child td { border-bottom: 0; }
.kp-table__name { color: #059669; }
.kp-table__price { text-align: right; white-space: nowrap; font-family: var(--font-mono); font-variant-numeric: tabular-nums; }

.upsell-summary { margin: 2px 0 8px; font-size: 13.5px; }
.upsell-summary strong { color: #b45309; }
.sell-checklist .upsell-mark { color: #b45309; font-weight: 600; }

.note-quote {
  margin: 4px 0 8px; padding: 8px 12px; font-size: 13.5px; line-height: 1.5;
  border-left: 3px solid #7c3aed; background: #f7f4ff; border-radius: 0 10px 10px 0;
}
.note-quote__date { color: var(--text-muted); font-size: 12px; white-space: nowrap; }
.touch-facts { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 4px 0 0; font-size: 13px; }
.touch-fact--warn { color: var(--destructive); font-weight: 600; }

.former-badge {
  display: inline-block; padding: 1px 8px; border-radius: 999px;
  background: #fef2f2; color: #b91c1c; border: 1px solid #fca5a5;
  font-size: 11px; font-weight: 700; white-space: nowrap;
}

/* ── Сворачиваемые блоки отчётов и разворот строки лида (Хантеры) ── */
.collapse-head { cursor: pointer; user-select: none; display: flex; align-items: center; gap: 8px; }
.collapse-head:hover { opacity: .85; }
.collapse-head:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }
.collapse-chevron { display: inline-block; flex: none; color: var(--primary); font-size: .8em; transition: transform .15s ease; }
[data-collapse-toggle][aria-expanded="false"] .collapse-chevron { transform: rotate(-90deg); }
.collapse-body[hidden] { display: none; }
[data-collapse].is-collapsed .collapse-head { margin-bottom: 0; }
/* Партиалы со своим заголовком внутри свёрнутого блока — прячем дублирующий h2 */
.collapse-body [data-live-funnel] > h2 { display: none; }

/* Разворачивающаяся строка лида в очереди заявок */
tr[data-lead-row] { cursor: pointer; }
tr[data-lead-row]:hover td { background: var(--surface-tint); }
tr[data-lead-row]:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
.lead-chevron { display: inline-block; color: var(--primary); font-weight: 700; margin-right: 6px; transition: transform .15s ease; }
tr[data-lead-row][aria-expanded="true"] .lead-chevron { transform: rotate(90deg); }
tr.lead-detail > td { background: #f8fafc; padding: 14px 18px; white-space: normal; }
/* панель живёт в широкой таблице: ограничение вьюпортом держит текст на виду */
.lead-detail__panel { display: grid; gap: 10px; max-width: min(780px, calc(100vw - 160px)); }
.lead-detail__why { margin: 0; padding: 10px 12px; background: var(--card); border: 1px solid var(--border); border-radius: 8px; font-size: 12.5px; line-height: 1.5; }
.lead-detail__why b { color: var(--primary); }
.lead-detail__meta { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 12.5px; color: var(--text-muted); margin: 0; }
.lead-detail__comments { margin: 0; font-size: 12.5px; }
.lead-detail__comments-title { margin: 0 0 4px; font-size: 12.5px; font-weight: 700; color: var(--primary); }
.lead-detail__dups { margin: 0; font-size: 12.5px; }
.lead-detail__dups b { color: var(--primary); }
.lead-comments-list { margin: 0; padding-left: 18px; font-size: 12.5px; display: grid; gap: 4px; }
.lead-comments-list li { line-height: 1.45; }
.lead-dup { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: 8px; background: var(--surface-tint); color: var(--primary); font-size: 11px; font-weight: 700; vertical-align: middle; }

/* ── Карточка сделки: таблица допродаж НВОС и маршрут «Как заключить» ── */
.kp-table__name--open { color: var(--foreground); }
/* красный крестик недопроданной услуги; текстовый глиф ✕ не перекрашивается
   в emoji на Windows, в отличие от ✖ */
.upsell-cross { color: var(--destructive); font-weight: 700; }

/* Таблица касаний на карточке сделки: вид · о чём · дата · менеджер */
.touch-table-wrap { overflow-x: auto; margin-top: 8px; }
.touch-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.touch-table th { background: transparent; border: 0; border-bottom: 1px solid var(--border); padding: 4px 8px; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-muted); white-space: nowrap; text-align: left; }
.touch-table td { padding: 5px 8px; border-top: 0; border-bottom: 1px dashed var(--border); white-space: normal; vertical-align: top; line-height: 1.45; }
.touch-table tbody tr:last-child td { border-bottom: 0; }
.touch-table__kind, .touch-table__date, .touch-table__manager { white-space: nowrap; }
.touch-table .touch-row--comment td { color: #5b21b6; }
.touch-more-btn { border: 0; background: none; color: var(--primary); cursor: pointer; font-size: 13px; font-weight: 600; padding: 6px 0 0; }
.touch-more-btn:hover { text-decoration: underline; }
.deal-route { list-style: none; margin: 4px 0 10px; padding: 0; }
.deal-route__step { position: relative; display: flex; gap: 12px; align-items: flex-start; padding: 0 0 14px 0; }
.deal-route__step:last-child { padding-bottom: 2px; }
.deal-route__step::before {
  content: ""; position: absolute; left: 11px; top: 24px; bottom: 0;
  width: 2px; background: var(--border);
}
.deal-route__step:last-child::before { display: none; }
.deal-route__num {
  flex: none; width: 23px; height: 23px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--primary); color: #fff; font-size: 12px; font-weight: 700;
  position: relative; z-index: 1;
}
.deal-route__text { font-size: 13.5px; line-height: 1.5; padding-top: 2px; }

/* Карточки команды в воронках: раскрытие со статистиками (27.07.2026) */
.hunter-card--expandable { padding: 0; }
.hunter-card--expandable > summary { display: grid; gap: 4px; padding: 14px; cursor: pointer; list-style: none; }
.hunter-card--expandable > summary::-webkit-details-marker { display: none; }
.hunter-card__hint { font-size: 11.5px; }
.hunter-card__body { padding: 0 14px 14px; display: grid; gap: 8px; border-top: 1px dashed var(--border); }
.hunter-card__body > * { min-width: 0; }
.hunter-section__title { margin: 8px 0 0; font-size: 13px; font-weight: 600; }
.hunter-section__note { margin: 0; font-size: 12.5px; }
.hunter-task-list { margin: 0; padding-left: 18px; font-size: 12.5px; display: grid; gap: 2px; }
.team-metric__head { display: flex; justify-content: space-between; gap: 12px; font-size: 12.5px; margin-bottom: 2px; }
.team-metric__bars { height: 36px; }
.team-bar--unknown { background: repeating-linear-gradient(45deg, var(--surface-tint), var(--surface-tint) 3px, transparent 3px, transparent 6px); opacity: .45; }
.team-table-wrap { overflow-x: auto; max-width: 100%; }
.team-table { border-collapse: collapse; font-size: 12.5px; width: 100%; }
.team-table th, .team-table td { border-bottom: 1px solid var(--border); padding: 4px 8px; text-align: right; white-space: nowrap; }
.team-table th:first-child, .team-table td:first-child { text-align: left; }
.team-table-toggle summary { cursor: pointer; color: var(--text-muted); font-size: 13px; }
@media (max-width: 640px) {
  .team-card__chips { gap: 8px; }
  .team-chip { align-items: flex-start; }
}

/* ── Прилипшая кнопка «наверх» (28.07.2026): над кнопкой АИ-РОПа справа ── */
.to-top {
  position: fixed; right: 22px; bottom: 96px; z-index: 60;
  width: 46px; height: 46px; border-radius: 50%; border: 1px solid var(--border);
  background: var(--card, #fff); color: #1a3a5c; font-size: 20px; font-weight: 700;
  box-shadow: 0 4px 14px rgba(15, 23, 42, .18); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  opacity: 0; pointer-events: none; transform: translateY(8px);
  transition: opacity .2s ease, transform .2s ease, box-shadow .15s ease;
}
.to-top.is-visible { opacity: 1; pointer-events: auto; transform: translateY(0); }
.to-top:hover { box-shadow: 0 6px 20px rgba(26, 58, 92, .35); transform: translateY(-2px); }
@media (max-width: 640px) {
  .to-top { right: 14px; bottom: 78px; width: 42px; height: 42px; font-size: 18px; }
}

/* ── Команда строками (28.07.2026): сотрудник = строка на всю ширину,
   раскрывающиеся разделы читаются сверху вниз без прыжков по колонкам ── */
.team-rows { display: flex; flex-direction: column; gap: 10px; grid-template-columns: none; }

/* Панель менеджеров (Иван, 14.08.2026): прилипает к верху при прокрутке,
   клик по имени фильтрует карточки ниже. Цвет по выполнению плана:
   красный < 50%, жёлтый 50–80%, зелёный > 80%. */
.team-tabs { position: sticky; top: 0; z-index: 50; display: flex; gap: 8px; align-items: stretch; overflow-x: auto; padding: 8px 2px; margin: 0 -2px; background: var(--background); box-shadow: 0 4px 10px rgba(26,58,92,.08); }
.team-tab { flex: 0 0 auto; display: grid; gap: 1px; padding: 6px 12px; border: 1px solid var(--border); border-radius: 9px; background: var(--card); font: inherit; font-size: 13px; line-height: 1.3; text-align: left; cursor: pointer; white-space: nowrap; color: inherit; }
.team-tab strong { font-weight: 600; }
.team-tab .muted { font-size: 12px; }
.team-tab:hover { border-color: var(--primary); }
.team-tab.is-active { border-color: var(--primary); background: rgba(44,95,138,.08); box-shadow: inset 0 -2px 0 var(--primary); }
.team-tab--red strong { color: #b91c1c; }
.team-tab--yellow strong { color: #a16207; }
.team-tab--green strong { color: #15803d; }

/* Сворачиваемые блоки плана работы (Иван, 18.08.2026): «Сегодня сделать»
   и группы 1–7 скрываются кликом по заголовку. */
.review-block > summary { cursor: pointer; list-style: none; }
.review-block > summary::-webkit-details-marker { display: none; }
.review-block__hint { font-size: 11px; font-weight: 400; }
.review-block:not([open]) > summary .review-block__hint { color: var(--primary); }
.review-block[open] > summary .collapse-chevron { transform: rotate(90deg); display: inline-block; }
/* вторая строка сделки — комментарий менеджера во всю ширину (спека 8.4):
   длинные комментарии читаются целиком, обрезки быть не должно */
.deal-note-row td { background: var(--surface-tint); border-bottom: 2px solid var(--border); white-space: normal; max-width: none; }
.deal-note__label { font-weight: 600; color: var(--text-muted); font-size: 12px; }

/* Отчёт v2 (Иван, 18.08.2026): блоки «Выручка месяца», «План и факт»,
   «Динамика по месяцам». */
.revenue-row { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 14px; align-items: start; }
.revenue-cell { display: grid; gap: 3px; }
.revenue-cell strong { font-size: 20px; font-variant-numeric: tabular-nums; }
.revenue-cell p { margin: 0; }
.plan-track { display: block; height: 8px; border-radius: 999px; background: var(--surface-tint); overflow: hidden; }
.plan-track--slim { height: 6px; align-self: center; }
.plan-fill { display: block; height: 100%; border-radius: 999px; background: var(--primary); }
.plan-fill--done { background: #15803d; }
.period-tabs { display: flex; gap: 6px; margin-bottom: 10px; }
.period-tab { padding: 5px 14px; border: 1px solid var(--border); border-radius: 8px; background: var(--card); font: inherit; font-size: 13px; cursor: pointer; }
.period-tab.is-active { border-color: var(--primary); background: rgba(44,95,138,.08); color: var(--primary); font-weight: 600; }
.plan-rows { display: grid; gap: 8px; }
.plan-row { display: grid; grid-template-columns: 180px 70px 80px minmax(120px, 1fr) 52px 90px; gap: 10px; align-items: center; }
.plan-row__plan { font-size: 18px; font-variant-numeric: tabular-nums; }
.plan-row__pct { font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; }
.plan-row__fact { text-align: right; }
.plan-row--check { grid-template-columns: 180px auto auto 1fr; border-bottom: 1px solid var(--border); padding-bottom: 6px; }
.plan-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.team-chip--accent { border-color: var(--primary); }
.dyn-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; }
.dyn-cell { display: grid; gap: 2px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 9px; }
.dyn-cell--current { border-color: var(--primary); background: rgba(44,95,138,.06); }
.dyn-cell strong { font-variant-numeric: tabular-nums; }
.dyn-bars { display: flex; gap: 14px; align-items: flex-end; height: 90px; margin-top: 14px; padding: 0 4px; }
.dyn-bar { flex: 1 1 0; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 4px; height: 100%; }
.dyn-bar__fill { width: 60%; max-width: 56px; background: var(--surface-tint); border-radius: 6px 6px 0 0; min-height: 2px; }
.dyn-bar--current .dyn-bar__fill { background: var(--primary); }
/* блок 3: конверсия и активность в одну линию, конверсии больше места */
/* «Все» — конверсия и активность друг под другом во всю ширину;
   выбран менеджер — рядом 60/40 (Иван, 19.08.2026) */
.duo-row { display: grid; grid-template-columns: 1fr; gap: 24px; align-items: start; }
.duo-row--split { grid-template-columns: 3fr 2fr; }
.duo-row > .report-card { margin-top: 0; min-width: 0; }
.duo-row [data-manager-pane], .duo-row .mgr-embed { min-width: 0; max-width: 100%; }
.conv-table { width: 100%; }
.conv-pct { font-size: 16px; font-weight: 600; font-variant-numeric: tabular-nums; }
.conv-delta { font-size: 11px; font-weight: 400; }
.conv-row--bottleneck td { background: #fef2f2; }
@media (max-width: 1100px) { .duo-row, .duo-row--split { grid-template-columns: 1fr; } }
@media (max-width: 900px) {
  .revenue-row { grid-template-columns: 1fr 1fr; }
  .plan-row { grid-template-columns: minmax(0, 1fr) 60px 70px minmax(60px, 1fr) 48px 80px; }
}
@media (max-width: 640px) {
  .revenue-row { grid-template-columns: 1fr; }
  /* телефон: название · план · процент, полоса — второй строкой */
  .plan-row { grid-template-columns: minmax(0, 1fr) 56px 44px; }
  .plan-row__norm, .plan-row__fact { display: none; }
  .plan-row .plan-track--slim { grid-column: 1 / -1; order: 9; }
  .plan-row--check { grid-template-columns: 1fr auto; }
  .dyn-bars { gap: 6px; }
}
.team-rows .hunter-card { width: 100%; display: block; }
.team-rows .hunter-card--expandable summary {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  cursor: pointer; list-style: none;
}
.team-rows .hunter-card--expandable summary::-webkit-details-marker { display: none; }
.team-rows .hunter-photo { width: 42px; height: 42px; font-size: 16px; flex: 0 0 auto; }
.team-rows .hunter-card strong { font-size: 15px; }
.team-rows .hunter-plan { margin-left: auto; text-align: right; }
.team-rows .hunter-card__hint { flex-basis: 100%; margin: 0; padding-left: 54px; }
.team-rows .hunter-card__body { border-top: 1px dashed var(--border); margin-top: 10px; padding-top: 10px; }
.team-rows .hunter-card--trainee { display: flex; align-items: center; gap: 12px; }
@media (max-width: 640px) {
  .team-rows .hunter-plan { margin-left: 0; text-align: left; flex-basis: 100%; padding-left: 54px; }
  .team-rows .hunter-card__hint { padding-left: 54px; }
}

/* ── «Комментарии и касания» без эмодзи (28.07): подпись + значение ── */
.touch-summary { display: flex; flex-wrap: wrap; gap: 6px 26px; margin: 6px 0 2px; font-size: 13.5px; }
.touch-summary__item { display: flex; flex-direction: column; gap: 1px; }
.touch-summary__label { font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-muted); }

/* ── ОКК v3 (28.07): фильтры, карточки оценок, «как правильно», задача ── */
.okk-filters__form { display: flex; flex-wrap: wrap; gap: 10px 18px; align-items: flex-end; }
.okk-filters__form label { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--text-muted); }
.okk-filters__form select, .okk-filters__form input { padding: 6px 10px; border: 1px solid var(--border, #d7dfeb); border-radius: 8px; font-size: 14px; }
.okk-filters__form button { padding: 7px 16px; border-radius: 8px; border: none; background: var(--accent, #1f6fd6); color: #fff; cursor: pointer; }
.okk-review { border: 1px solid var(--border, #e2e8f2); border-radius: 12px; margin: 10px 0; background: var(--surface, #fff); }
.okk-review > summary { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 10px 14px; cursor: pointer; list-style: none; }
.okk-review > summary::-webkit-details-marker { display: none; }
.okk-review__meta { flex: 1 1 auto; font-size: 14px; }
.okk-review__stage { color: var(--text-muted); }
.okk-review__verdict { font-size: 12.5px; color: var(--text-muted); }
.okk-review__body { padding: 4px 16px 14px; border-top: 1px solid var(--border, #eef2f8); }
.okk-fail { margin: 8px 0; }
.okk-fail__what { margin: 0; }
.okk-fail__fix { margin: 2px 0 0 22px; padding: 6px 10px; background: #eefaf0; border-left: 3px solid #34a853; border-radius: 6px; font-size: 13.5px; }
.okk-passed { margin: 8px 0; font-size: 13.5px; }
.okk-passed > summary { cursor: pointer; color: var(--text-muted); }
.okk-ai { margin: 10px 0 0; padding: 8px 12px; background: #f2f6ff; border-left: 3px solid var(--accent, #1f6fd6); border-radius: 6px; }
.okk-task { margin: 8px 0 0; padding: 8px 12px; background: #fff7e8; border-left: 3px solid #f0a202; border-radius: 6px; }
.okk-ok { color: #1d7a34; }
.okk-badge__block { margin: 6px 0; }
/* ── АИ-ОКК на карточке реанимации (28.07.2026) ── */
.reanim-okk { border-left: 3px solid #2c5f8a; background: #f0f6fb; border-radius: 0 10px 10px 0; padding: 8px 12px; margin: 8px 0; }
.reanim-okk__title { margin: 0 0 4px; font-size: 13px; }
.reanim-okk__row { margin: 3px 0; font-size: 13px; line-height: 1.5; }

/* ── ОКК v4 (28.07 вечер): черновик дожима ── */
.okk-draft { margin: 8px 0 0; padding: 8px 12px; background: #f6f2ff; border-left: 3px solid #7c5cd6; border-radius: 6px; font-size: 13.5px; }
.okk-draft p { margin: 6px 0 0; white-space: pre-line; }

/* ── ОКК: расшифровка звонка и картина по клиенту (12.08.2026) ── */
.okk-task__meta { margin: 4px 0 0; font-size: 12.5px; color: var(--text-muted); }
.okk-transcript { margin: 10px 0 0; font-size: 13.5px; }
.okk-transcript > summary { cursor: pointer; color: var(--accent, #1f6fd6); }
.okk-transcript__text { margin: 6px 0 0; padding: 10px 12px; background: #f7f9fc; border: 1px solid var(--border, #e2e8f2); border-radius: 8px; white-space: pre-wrap; word-break: break-word; font-family: inherit; font-size: 13px; line-height: 1.55; max-height: 360px; overflow-y: auto; }
.okk-picture { margin: 12px 0 0; padding: 10px 12px; border: 1px dashed var(--border, #cfd9e6); border-radius: 10px; }
.okk-picture__title { margin: 0; font-weight: 600; }
.okk-picture__warn { color: #b3261e; font-weight: 600; }
.okk-picture__section { margin: 10px 0 0; }
.okk-picture__item { margin: 6px 0; }
.okk-picture__messages { max-height: 420px; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; margin: 6px 0; }
.okk-msg { padding: 8px 10px; border-radius: 10px; max-width: 92%; }
.okk-msg--in { background: #f0f6fb; border-left: 3px solid #2c5f8a; align-self: flex-start; }
.okk-msg--out { background: #eefaf0; border-right: 3px solid #34a853; align-self: flex-end; }
.okk-msg__meta { margin: 0; font-size: 12px; color: var(--text-muted); }
.okk-msg__text { margin: 4px 0 0; font-size: 13.5px; white-space: pre-line; word-break: break-word; }
.okk-tasks__row--overdue td { background: #fdf1f0; }

/* ── Методика РОПа на /okk (D-120, 21.08.2026) ── */
.okk-mcard__type { font-size: 12px; padding: 2px 8px; border-radius: 999px; background: #eef2f8; color: var(--text-muted); white-space: nowrap; }
.okk-mtag { font-size: 12px; padding: 2px 8px; border-radius: 999px; white-space: nowrap; }
.okk-mtag--great { background: #eefaf0; color: #1d7a34; }
.okk-mtag--review { background: #fff7e8; color: #9a6700; }
.okk-mtag--lost { background: #fdecea; color: #b3261e; font-weight: 600; }
.okk-mcard--lost { border-left: 3px solid #b3261e; }
.okk-mcard__headline { margin: 8px 0 0; }
.okk-mcard__percent { font-size: 22px; }
.okk-good { color: #1d7a34; }
.okk-bad { color: #b3261e; }
.okk-mwarn { margin: 6px 0 0; padding: 6px 10px; background: #fff7e8; border-left: 3px solid #f0a202; border-radius: 6px; font-size: 13px; }
.okk-mnext { margin: 8px 0 0; padding: 8px 12px; border-radius: 6px; font-size: 13.5px; }
.okk-mnext--ok { background: #eefaf0; border-left: 3px solid #34a853; }
.okk-mnext--none { background: #fdecea; border-left: 3px solid #b3261e; font-weight: 600; }
.okk-mblock { margin: 10px 0 0; border: 1px solid var(--border, #e2e8f2); border-radius: 10px; padding: 6px 10px; }
.okk-mblock > summary { cursor: pointer; font-weight: 600; }
.okk-mrow { margin: 10px 0; padding-left: 8px; border-left: 2px solid var(--border, #eef2f8); }
.okk-mrow__head { margin: 0; display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; }
.okk-mrow__comment { margin: 2px 0 0; font-size: 13px; color: var(--text-muted); }
/* «нет» и «не возник» — разные вещи, визуально их путать нельзя */
.okk-mvalue { font-size: 12px; padding: 1px 8px; border-radius: 999px; white-space: nowrap; font-weight: 600; }
.okk-mvalue--yes { background: #eefaf0; color: #1d7a34; }
.okk-mvalue--half { background: #fff7e8; color: #9a6700; }
.okk-mvalue--no { background: #fdecea; color: #b3261e; }
.okk-mvalue--na { background: #f1f3f6; color: var(--text-muted); font-weight: 400; font-style: italic; }
.okk-mquotes { margin: 4px 0 0; display: flex; flex-direction: column; gap: 2px; }
.okk-mquote { margin: 0; font-size: 13px; max-width: 92%; }
.okk-mquote--manager { align-self: flex-start; color: #2c5f8a; }
.okk-mquote--client { align-self: flex-end; color: #1d7a34; text-align: right; }
.okk-mchecklist { margin: 6px 0 0 12px; }
.okk-mitem { margin: 6px 0; }
.okk-mitem__head { margin: 0; font-size: 13px; }
.okk-mitem--missed .okk-mitem__head { color: #b3261e; }
.okk-mitem--asked .okk-mitem__head { color: #1d7a34; }
.okk-mitem--self .okk-mitem__head, .okk-mitem--na .okk-mitem__head { color: var(--text-muted); }
.okk-moverride { margin: 4px 0 0; font-size: 12.5px; }
.okk-moverride > summary { cursor: pointer; color: var(--text-muted); }
.okk-moverride-badge { font-size: 12px; padding: 1px 8px; border-radius: 999px; background: #f6f2ff; color: #7c5cd6; }

/* Конверсии и план недели в карточке (28.07, D-101) */
.team-card__chips--left { display: flex; flex-wrap: wrap; gap: 14px; }
.team-chip--left { display: flex; flex-direction: column; font-size: 12px; color: var(--text-muted); }
.team-chip--left strong { font-size: 14px; color: var(--foreground); }
.team-bar--met .act-bar__effective { background: #15803d; }

/* ── Реанимация: строка касаний/звонков и «что предлагали» (29.07.2026) ── */
.reanim-touchline { padding: 6px 12px; margin: 8px 0 0; font-size: 13px; }
.reanim-touchline p { margin: 3px 0; line-height: 1.5; }

/* свёрнутые длинные комментарии (этап 03.08.2026): превью до 160-180
   символов, полный текст — по клику; маркер details скрыт */
.note-fold summary { cursor: pointer; list-style: none; }
.note-fold summary::-webkit-details-marker { display: none; }
.note-fold[open] > summary { display: none; }

/* Таблицы отчётов (Иван, 12.08.2026): сортировка по заголовку и компактный
   столбец названия — перенос строк, чтобы сумма сделки оставалась на экране */
.table-scroll th.th-sortable { cursor: pointer; user-select: none; white-space: nowrap; }
.table-scroll th.th-sortable[data-sort="asc"]::after { content: " ▲"; opacity: .7; }
.table-scroll th.th-sortable[data-sort="desc"]::after { content: " ▼"; opacity: .7; }
/* перенос названия — по словам, без разрыва внутри слова (замечание Ивана
   13.08: anywhere схлопывал колонку до 50px и рвал текст по 2–4 символа) */
.table-scroll td:first-child { max-width: 40ch; white-space: normal; overflow-wrap: normal; word-break: normal; }

/* Табличный разбор сделок и задач дня (ТЗ Ивана 13.08.2026): фиксированная
   раскладка с явными ширинами колонок, min-width для горизонтального скролла
   на узких экранах, sticky-шапка, числа вправо, тексты в 2 строки */
.deal-table { table-layout: fixed; width: 100%; min-width: 900px; }
.deal-table th, .deal-table td { white-space: normal; overflow-wrap: normal; word-break: normal; font-size: 13px; vertical-align: top; }
.deal-table thead th { position: sticky; top: 0; background: var(--card); z-index: 2; }
.deal-table td.num, .deal-table th.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
/* Заголовки таблиц разбора переносятся, а не режутся «Последняя коммуни…»:
   правило .table-scroll th.th-sortable выше ставит nowrap — перебиваем. */
.deal-table th.th-sortable { white-space: normal; }
.clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
[data-expand] { cursor: pointer; }
.clamp-open { -webkit-line-clamp: unset; line-clamp: unset; display: block; overflow: visible; }
.deal-badge { display: inline-block; margin-right: 6px; padding: 0 6px; border-radius: 8px; font-size: 12px; font-weight: 700; background: #fef3c7; color: #92400e; }

/* однострочное пояснение с полным текстом в тултипе (ТЗ Ивана 13.08, п.8) */
.clamp-1 { display: -webkit-box; -webkit-line-clamp: 1; line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
