/* Листы держат размер A4 уже на экране: это позволяет увидеть проблему
   переноса до печати, а не после экспорта руководителю. */
/* Дизайн-система отчёта повторяет печатный пример аналитической подачи:
   Noto Sans (обычный и узкий), синяя гамма, светлые заливки, тонкие серые
   линии, зебра в таблицах. Шрифты лежат рядом с программой, поэтому отчёт
   выглядит одинаково на Windows и на Mac, где системные шрифты разные. */
@font-face { font-family:"RepSans"; src:url("fonts/nsl.woff2") format("woff2");
  font-weight:300; font-style:normal; font-display:block; }
@font-face { font-family:"RepSans"; src:url("fonts/ns.woff2") format("woff2");
  font-weight:400; font-style:normal; font-display:block; }
@font-face { font-family:"RepSans"; src:url("fonts/nsm.woff2") format("woff2");
  font-weight:500; font-style:normal; font-display:block; }
@font-face { font-family:"RepSans"; src:url("fonts/nssb.woff2") format("woff2");
  font-weight:600; font-style:normal; font-display:block; }
@font-face { font-family:"RepSans"; src:url("fonts/nsb.woff2") format("woff2");
  font-weight:700; font-style:normal; font-display:block; }
@font-face { font-family:"RepCond"; src:url("fonts/nc.woff2") format("woff2");
  font-weight:400; font-style:normal; font-display:block; }
@font-face { font-family:"RepCond"; src:url("fonts/ncm.woff2") format("woff2");
  font-weight:500; font-style:normal; font-display:block; }
@font-face { font-family:"RepCond"; src:url("fonts/ncb.woff2") format("woff2");
  font-weight:700; font-style:normal; font-display:block; }

#report { --rp-line:#C9CDD3; --rp-line-soft:#D9DCE1; --rp-muted:#5B6169;
  --rp-ink:#1C1F23; --rp-accent:#1B5FA8; --rp-accent-dark:#123F70;
  --rp-accent-soft:#DCE7F3; --rp-fill:#EEF3FA; --rp-paper:#fff; --rp-soft:#F1F2F4;
  --rp-grey:#8A9099; --rp-grey-l:#D9DCE1; --rp-red:#B3261E; --rp-red-soft:#F7E4E2;
  --rp-mid:#5A8CC2; --rp-light:#AFC8E2;
  font-family:"RepSans", "Noto Sans", Arial, Helvetica, sans-serif; }
.rp-hint { flex:1 1 240px; min-width:200px; color:#5B6169; font-size:11.5px; line-height:1.35; }
.rp-bar { display:flex; gap:14px; align-items:flex-end; flex-wrap:wrap; margin-bottom:14px; }
.rp-bar .fld { display:flex; flex-direction:column; gap:4px; }
.rp-bar label { font-size:12px; color:var(--rp-muted); }
.rp-bar select { min-width:220px; padding:8px 10px; border:1px solid var(--rp-line); border-radius:4px; font-size:14px; background:#fff; }

.rp-sheet { width:186mm; margin:0 auto; color:var(--rp-ink); font-size:10.6px; line-height:1.34;
  font-family:Arial, "Helvetica Neue", Helvetica, sans-serif; }
.rp-page { width:186mm; min-height:273mm; background:var(--rp-paper); border:1px solid var(--rp-line); padding:10mm 12mm; margin:0 0 12px; break-after:page; page-break-after:always; }

/* Шапка — синяя плашка, как заголовок раздела на портале закупок. */
.rp-head { margin:-4mm -4mm 12px; padding:9px 11px; background:var(--rp-accent); }
.rp-head h2 { margin:0 0 3px; font-size:17px; line-height:1.2; color:#fff; font-weight:700; }
.rp-head .meta { color:#d6e6f7; font-size:10.2px; }
.rp-sheet h3 { margin:0 0 8px; padding:0 0 4px; border-bottom:2px solid var(--rp-accent); font-size:12.5px; color:var(--rp-accent-dark); font-weight:700; }
.rp-page-title { margin-bottom:11px !important; font-size:14px !important; }
.rp-sub, .rp-note { color:var(--rp-muted); font-size:9.4px; line-height:1.35; }
.rp-note { margin-top:4px; }
/* Пояснения к переходящим обязательствам: короткий список особых случаев. */
.rp-list { margin:10px 0 0; padding-left:18px; color:var(--rp-muted); font-size:10px; line-height:1.45; }
.rp-list li { margin-bottom:4px; }
.rp-block { margin-bottom:12px; }
.n { font-variant-numeric:tabular-nums lining-nums; }
.nw { white-space:nowrap; }

/* Три показателя создают единственную точку входа в отчёт и не дробят бюджет
   на второстепенные метрики, которые отвлекают от свободного остатка. */
.rp-kpi { display:grid; grid-template-columns:repeat(3, 1fr); gap:8px; margin-bottom:12px; }
/* Четыре показателя переходящих обязательств читаются как один ряд:
   долг на начало → принято → оплачено → долг на конец. */
.rp-kpi.rp-kpi-4 { grid-template-columns:repeat(4, 1fr); }
.rp-kpi.rp-kpi-4 .v { font-size:14px; }
.rp-kpi-card { min-height:64px; padding:8px 10px; border:1px solid var(--rp-line); border-top:3px solid var(--rp-accent); background:var(--rp-soft); }
.rp-kpi .l { min-height:26px; color:var(--rp-muted); font-size:10.2px; line-height:1.2; }
.rp-kpi .v { margin-top:2px; color:var(--rp-accent-dark); font-size:16px; font-weight:700; font-variant-numeric:tabular-nums lining-nums; white-space:nowrap; }
.rp-kpi .s { margin-top:2px; color:var(--rp-muted); font-size:9.6px; }

/* Все диаграммы занимают ширину листа: значение читается рядом с полосой и не
   теряется при чёрно-белой печати. */
.rp-chart { border:1px solid var(--rp-line); padding:8px 10px; }
.rp-chart-wide { min-height:300px; display:flex; flex-direction:column; }
.rp-chart-wide h3 { flex:0 0 auto; }
.rp-bars { min-height:0; flex:1; display:flex; flex-direction:column; justify-content:flex-start; gap:4px; }
.rp-bar-row { display:grid; grid-template-columns:36% 1fr 17%; grid-template-areas:"name track val" "sub sub sub"; column-gap:10px; align-items:center; }
.rp-bar-name { grid-area:name; white-space:normal; overflow-wrap:break-word; font-size:11.2px; line-height:1.25; }
.rp-bars-lg { justify-content:flex-start; gap:4px; }
.rp-bars-lg .rp-bar-track { height:15px; }
.rp-bars-lg .rp-bar-name, .rp-bars-lg .rp-bar-val { font-size:11.2px; }
.rp-bar-track { grid-area:track; height:15px; background:var(--rp-line-soft); overflow:hidden; }
.rp-bar-fill { height:100%; min-width:2px; }
.rp-bar-val { grid-area:val; text-align:right; font-size:11.2px; font-variant-numeric:tabular-nums lining-nums; }
.rp-bar-sub { grid-area:sub; padding-top:1px; color:var(--rp-muted); font-size:9.6px; }
/* Круг и легенда стоят друг под другом, а две диаграммы делят строку листа:
   так структура каналов и направлений видна целиком без второй страницы. */
.rp-duo-box { margin-top:10px; }
.rp-duo { display:grid; grid-template-columns:1fr 1fr; gap:0; align-items:start; }
.rp-duo > .rp-donut-cell + .rp-donut-cell { border-left:1px solid var(--rp-line-soft); }
.rp-donut-cell { padding:2px 10px 0; }
.rp-donut-title { margin-bottom:3px; color:var(--rp-ink); font-size:11.2px; font-weight:700; text-align:center; }
.rp-donut-box { display:flex; flex-direction:column; align-items:stretch; }
/* Круг задан в мм: обе диаграммы одного диаметра и стоят на одной высоте
   независимо от длины легенды. */
.rp-donut { display:block; width:88mm; height:auto; margin:0; flex:0 0 auto; }
/* Диаграмма бюджета региона стоит в начале отчёта и не должна забирать
   половину листа: круг заметно меньше основных диаграмм блоков. */
.rp-donut.rp-donut-sm { width:52mm; }
.rp-donut-flow { display:flex; align-items:center; gap:14px; }
.rp-donut-flow > .rp-legend { flex:1 1 auto; min-width:0; }
.rp-donut-cell .rp-donut-flow { flex-direction:column; align-items:stretch; gap:2px; }
.rp-donut-cell .rp-donut { width:100%; margin:0 auto; }
.rp-seg { stroke-linecap:butt; stroke:#fff; }
/* Подпись стоит на самом секторе: доля читается без обращения к легенде. */
.rp-ring { text-anchor:middle; font-size:11px; font-weight:700;
  font-variant-numeric:tabular-nums lining-nums; }
.rp-ring-pct { font-size:11.5px; font-weight:700; }
.rp-ring-lt { fill:#fff; }
.rp-ring-dk { fill:#12334f; }
.rp-ring-out { fill:#1C1F23; font-weight:600; }
.rp-ring-lead { stroke:#9fb0c0; stroke-width:1; }
.rp-legend { display:flex; flex-direction:column; gap:4px; min-height:0; }
.rp-lg-row { display:grid; grid-template-columns:10px 1fr auto auto; column-gap:7px; align-items:center; font-size:11.2px; }
.rp-lg-dot { width:9px; height:9px; }
.rp-lg-name { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.rp-lg-val, .rp-lg-pct { font-variant-numeric:tabular-nums lining-nums; }
.rp-lg-pct { min-width:37px; text-align:right; color:var(--rp-muted); }
.rp-chart + .rp-chart { margin-top:9px; }
.rp-chart-tall { min-height:0; }
.rp-cols { width:100%; height:auto; flex:1; min-height:300px; }
.rp-col-val { fill:#123F70; font-size:11px; font-weight:600; text-anchor:middle; }
.rp-col-lbl { fill:#1C1F23; font-size:11px; text-anchor:middle; }
.rp-col-sub { fill:#5B6169; font-size:9.4px; text-anchor:middle; }

table.rp { width:100%; table-layout:fixed; border-collapse:collapse; }
table.rp th, table.rp td { padding:3.4px 6px; border-bottom:1px solid var(--rp-line-soft); text-align:left; vertical-align:top; overflow-wrap:break-word; }
/* Длинные названия («Иммуновоспалительные заболевания») переносятся по слогам
   с дефисом, а не разрываются посреди слова: браузер расставляет переносы сам
   по русскому языку страницы (lang="ru"). */
table.rp td { hyphens:auto; -webkit-hyphens:auto; }
/* Стрелка динамики стоит второй строкой под суммой отчётного года. */
table.rp td .rp-sub.rp-up, table.rp td .rp-sub.rp-bad { font-weight:700; }
table.rp th { background:var(--rp-accent-soft); border-bottom:1px solid var(--rp-line); color:var(--rp-accent-dark); font-size:9.6px; font-weight:700; line-height:1.2; overflow-wrap:normal; word-break:keep-all; hyphens:manual; }
table.rp .n { text-align:right; }
/* Широкие таблицы (дерево, топ МНН): у девяти-десяти колонок обычные отбивки
   вместе с процентами колонок выходят за ширину листа, поэтому они уже. */
table.rp.rp-tight th, table.rp.rp-tight td { padding-left:3px; padding-right:3px; font-size:9.8px; }
table.rp.rp-tight .rp-sub { font-size:8.8px; }
table.rp tr.total td { border-top:2px solid var(--rp-accent); border-bottom:0; font-weight:700; }
table.rp tr.lvl1 td { background:var(--rp-accent-soft); font-weight:700; }
table.rp tr.lvl2 td { background:var(--rp-soft); font-weight:700; }
table.rp tr.lvl2 td:first-child { padding-left:13px; }
table.rp tr.lvl3 td:first-child { padding-left:26px; font-weight:600; }
table.rp tr.lvl4 td:first-child { padding-left:39px; }
table.rp tr.lvl5 td:first-child { padding-left:52px; }
table.rp tr.lvl6 td:first-child { padding-left:65px; color:var(--rp-muted); }
/* Дерево — основная таблица отчёта, поэтому её кегль ближе к обычному тексту. */
table.rp.rp-tree td { padding-top:3.2px; padding-bottom:3.2px; line-height:1.28; }
.rp-tag { display:inline-block; margin-left:4px; padding:0 3px; border:1px solid var(--rp-line); color:var(--rp-muted); font-size:9.4px; white-space:nowrap; }
.rp-bad { color:#B3261E !important; }
.rp-empty { padding:24px 0; color:var(--rp-muted); text-align:center; }

@media screen and (max-width:860px) {
  .rp-sheet, .rp-page { width:100%; }
  .rp-duo { grid-template-columns:1fr; }
  .rp-page { min-height:0; padding:20px; }
  .rp-kpi { grid-template-columns:1fr; }
  .rp-bar-row { grid-template-columns:40% 1fr 20%; }
}

@page { size:A4 portrait; margin:12mm; }
@media print {
  body > header, body > nav, #work, #analytics, .rp-bar, .rp-batch, #rp-msg { display:none !important; }
  body, main { margin:0 !important; padding:0 !important; max-width:none !important; background:#fff !important; }
  #report { display:block !important; }
  .rp-sheet { width:186mm; margin:0; font-size:10.6px; }
  .rp-page { width:186mm; min-height:0; padding:0; margin:0; border:0; break-after:page; page-break-after:always; }
  .rp-page:last-child { break-after:auto; page-break-after:auto; }
  .rp-head { margin:0 0 12px; }
  .rp-chart-wide { min-height:0; }
  table.rp { break-inside:auto; page-break-inside:auto; }
  table.rp tr, .rp-block, .rp-chart { break-inside:avoid; page-break-inside:avoid; }
  table.rp thead { display:table-header-group; }
  h3 { break-after:avoid; page-break-after:avoid; }
}

/* Титульный лист: отчёт уходит внешнему читателю, поэтому первая страница
   отвечает на вопросы «за какой год» и «на какие даты данные». */
.rp-title { display:flex; flex-direction:column; justify-content:center; min-height:240mm; text-align:left; }
.rp-title-kicker { color:var(--rp-muted); font-size:11px; letter-spacing:.04em; text-transform:uppercase; }
.rp-title h1 { margin:8px 0 6px; padding-bottom:8px; border-bottom:3px solid var(--rp-accent);
  font-size:26px; line-height:1.15; color:var(--rp-accent-dark); font-weight:700; }
.rp-title-sub { margin-bottom:18px; color:var(--rp-ink); font-size:14px; font-weight:700; }
.rp-title-tbl { margin-bottom:14px; }
.rp-title-tbl td { font-size:11.6px; }

/* Сумма в центре круга: итог виден без обращения к легенде. */
.rp-donut-sum { text-anchor:middle; font-size:15px; font-weight:700; fill:var(--rp-accent-dark);
  font-variant-numeric:tabular-nums lining-nums; }
.rp-donut-cap { text-anchor:middle; font-size:9.5px; fill:var(--rp-muted); }

/* Сравнение бюджета с прошлым годом: парные горизонтальные столбики. Год
   отчёта — основной синий, прошлый год — серый: сравнение читается сразу,
   без обращения к легенде. */
.rp-cmp { margin-top:2px; }
.rp-cmp-row { display:grid; grid-template-columns:26% 1fr 58px; column-gap:9px;
  align-items:center; padding:5px 0; border-bottom:1px solid var(--rp-line-soft); }
.rp-cmp-row:last-child { border-bottom:0; }
.rp-cmp-name { font-size:10.6px; line-height:1.2; overflow-wrap:break-word; }
.rp-cmp-line { display:grid; grid-template-columns:30px 1fr 84px; column-gap:6px;
  align-items:center; padding:1px 0; }
.rp-cmp-yr { color:var(--rp-muted); font-size:9.4px; }
.rp-cmp-track { height:9px; background:#eef3f8; }
.rp-cmp-track i { display:block; height:100%; }
.rp-cmp-track i.now { background:#1B5FA8; }
.rp-cmp-track i.was { background:#8A9099; }
.rp-cmp-val { text-align:right; font-size:9.8px; white-space:nowrap;
  font-variant-numeric:tabular-nums lining-nums; }
.rp-cmp-delta { text-align:right; font-size:10.2px; font-weight:700;
  color:var(--rp-accent-dark); font-variant-numeric:tabular-nums lining-nums; }

/* Значок вида цены: расшифровка стоит одной строкой под таблицей. */
.rp-mark { color:var(--rp-accent-dark); font-size:8.6px; font-weight:700; vertical-align:super; line-height:0; margin-left:1px; }

/* Стрелка роста в колонке «к 2025»: рост — тёмно-синий, падение — красный
   (класс rp-bad уже есть). */
.rp-up { color: var(--rp-accent-dark); font-weight: 600; }
td.rp-up, td.rp-bad { font-weight: 600; }

/* Легенда графика месяцев: цветной квадратик перед подписью года. */
.rp-note .rp-leg { white-space: nowrap; margin-right: 8px; }
.rp-note .rp-leg i { display: inline-block; width: 8px; height: 8px; border-radius: 2px;
  margin-right: 4px; }

/* Основные выводы на титульном листе. */
.rp-sum { margin-top: 30px; }
.rp-sum-end { margin-top: 14px; }
.rp-sum h3 { font-size: 13px; }
.rp-sum ul { margin: 0; padding-left: 16px; }
.rp-sum li { font-size: 10.9px; line-height: 1.55; color: var(--rp-ink); margin: 0 0 6px; }

/* --- Оформление, перенесённое из печатного примера аналитической подачи ----
   Раздел открывается номерной плашкой: читатель отчёта в 25 листов должен
   понимать, где он находится, а содержание в начале — ссылаться на те же
   номера. Заголовок раздела и его номер набраны в одну строку, поэтому
   длинное название не наезжает на номер, а переносится под ним. */
.rp-sec { display:grid; grid-template-columns:26px 1fr; column-gap:8px;
  align-items:start; margin:0 0 11px; padding-bottom:5px;
  border-bottom:2px solid var(--rp-accent); }
.rp-sec-no { display:block; padding:1px 0; background:var(--rp-accent); color:#fff;
  font-size:11.5px; font-weight:700; line-height:1.35; text-align:center; }
.rp-sec-tx { min-width:0; }
.rp-sec h3 { margin:0; padding:0; border:0; font-size:14px; line-height:1.2;
  color:var(--rp-accent-dark); overflow-wrap:break-word; }
.rp-sec .rp-sec-lead { margin-top:2px; color:var(--rp-muted); font-size:9.8px;
  line-height:1.35; }

/* Содержание: номер, название, назначение раздела. Страницы не нумеруются —
   их число зависит от объёма данных региона и печати браузера. */
.rp-toc { margin-top:4px; }
.rp-toc-row { display:grid; grid-template-columns:26px 1fr 34px; column-gap:8px;
  padding:4.5px 0; border-bottom:1px solid var(--rp-line-soft); }
.rp-toc-row:last-child { border-bottom:0; }
.rp-toc-no { color:var(--rp-accent); font-size:10.6px; font-weight:700;
  text-align:center; font-variant-numeric:tabular-nums lining-nums; }
.rp-toc-nm { font-size:11.2px; font-weight:700; line-height:1.25; }
.rp-toc-ds { color:var(--rp-muted); font-size:9.6px; line-height:1.3; }

/* Мостик от бюджета до принятых лекарств: каждая ступень — полоса от нуля,
   подписанная суммой и долей бюджета. Полосы «остаток» и «не принято» —
   светлые: это не расход, а незакрытая часть. */
.rp-wf { margin-top:2px; }
.rp-wf-row { display:grid; grid-template-columns:31% 1fr 74px; column-gap:9px;
  align-items:center; padding:4px 0; border-bottom:1px solid var(--rp-line-soft); }
.rp-wf-row:last-child { border-bottom:0; }
.rp-wf-nm { font-size:10.6px; line-height:1.22; overflow-wrap:break-word; }
.rp-wf-nm b { color:var(--rp-ink); }
.rp-wf-nm .rp-sub { margin-top:1px; }
.rp-wf-track { height:13px; background:#eef3f8; }
.rp-wf-track i { display:block; height:100%; min-width:2px; }
.rp-wf-track i.main { background:var(--rp-accent); }
.rp-wf-track i.soft { background:#8A9099; }
.rp-wf-track i.line { background:var(--rp-accent-dark); }
.rp-wf-val { text-align:right; font-size:10.6px; font-weight:700; white-space:nowrap;
  color:var(--rp-accent-dark); font-variant-numeric:tabular-nums lining-nums; }
.rp-wf-val span { display:block; color:var(--rp-muted); font-size:9.2px; font-weight:400; }

/* Матрица «направление × канал»: в одной строке — доля направления в деньгах
   и разложение этой суммы по каналам финансирования одной полосой. */
.rp-mx-row { display:grid; grid-template-columns:30% 1fr 62px; column-gap:9px;
  align-items:center; padding:4px 0; border-bottom:1px solid var(--rp-line-soft); }
.rp-mx-row:last-child { border-bottom:0; }
.rp-mx-nm { font-size:10.4px; line-height:1.22; overflow-wrap:break-word; hyphens:auto; }
.rp-mx-track { display:flex; height:13px; background:#eef3f8; }
.rp-mx-track i { display:block; height:100%; }
.rp-mx-val { text-align:right; font-size:10.4px; white-space:nowrap;
  font-variant-numeric:tabular-nums lining-nums; }
.rp-mx-legend { display:flex; gap:12px; flex-wrap:wrap; margin:0 0 6px; }
.rp-mx-legend span { display:flex; align-items:center; gap:5px; font-size:10px;
  color:var(--rp-muted); }
.rp-mx-legend i { width:9px; height:9px; display:block; }

/* Деньги против упаковок: две точки на одной шкале долей. Разрыв между ними и
   есть ответ на вопрос «дорогое направление или массовое». */
.rp-db-row { display:grid; grid-template-columns:30% 1fr 96px; column-gap:9px;
  align-items:center; padding:5px 0; border-bottom:1px solid var(--rp-line-soft); }
.rp-db-row:last-child { border-bottom:0; }
.rp-db-nm { font-size:10.4px; line-height:1.22; overflow-wrap:break-word; hyphens:auto; }
.rp-db-track { position:relative; height:15px; }
.rp-db-track:before { content:''; position:absolute; left:0; right:0; top:7px;
  height:1px; background:var(--rp-line-soft); }
.rp-db-track i { position:absolute; top:4px; height:1px; background:#8A9099; }
.rp-db-track b { position:absolute; width:9px; height:9px; top:3px; margin-left:-4.5px;
  border-radius:50%; }
.rp-db-track b.money { background:var(--rp-accent); }
.rp-db-track b.packs { background:#8A9099; }
.rp-db-val { text-align:right; font-size:10px; white-space:nowrap;
  font-variant-numeric:tabular-nums lining-nums; }

/* Разложение прироста: три вклада от нуля влево и вправо от общей оси. */
.rp-pv-row { display:grid; grid-template-columns:27% 1fr 84px; column-gap:9px;
  align-items:center; padding:5px 0; border-bottom:1px solid var(--rp-line-soft); }
.rp-pv-row:last-child { border-bottom:0; }
.rp-pv-nm { font-size:10.6px; line-height:1.22; }
.rp-pv-axis { position:relative; height:14px; background:#f6f8fb; }
.rp-pv-axis:before { content:''; position:absolute; top:0; bottom:0; width:1px;
  background:var(--rp-line); }
.rp-pv-axis i { position:absolute; top:2px; height:10px; min-width:2px; }
.rp-pv-axis i.plus { background:var(--rp-accent); }
.rp-pv-axis i.minus { background:#B3261E; }
.rp-pv-val { text-align:right; font-size:10.6px; font-weight:700; white-space:nowrap;
  font-variant-numeric:tabular-nums lining-nums; }

/* «Главное за одну страницу»: пронумерованные утверждения. Текст собирает
   программа из тех же чисел, что стоят в таблицах отчёта. */
.rp-hl { margin-top:2px; }
.rp-hl-row { display:grid; grid-template-columns:22px 1fr; column-gap:8px;
  padding:7px 0; border-bottom:1px solid var(--rp-line-soft); break-inside:avoid; }
.rp-hl-row:last-child { border-bottom:0; }
.rp-hl-no { color:var(--rp-accent); font-size:11px; font-weight:700; text-align:center;
  font-variant-numeric:tabular-nums lining-nums; }
.rp-hl-nm { font-size:11.2px; font-weight:700; color:var(--rp-accent-dark);
  line-height:1.25; }
.rp-hl-tx { margin-top:1px; font-size:10.6px; line-height:1.45; }

/* Ряд из двух блоков на листе (мостик и таблица каналов рядом). */
.rp-two { display:grid; grid-template-columns:1fr 1fr; gap:10px; align-items:start; }
@media screen and (max-width:860px) { .rp-two { grid-template-columns:1fr; } }

/* === Оформление печатного примера аналитической подачи ==================== */

/* ГЛАВНОЕ. Браузер по умолчанию не печатает фоновую заливку: при выгрузке в
   PDF из Safari все полосы диаграмм, заливки шапок таблиц и номерные плашки
   разделов пропадали — оставались подписи над пустыми местами. Правило
   заставляет печатать цвет ровно так, как он виден на экране. */
#report, #report *, .rp-sheet, .rp-sheet * {
  -webkit-print-color-adjust:exact !important;
  print-color-adjust:exact !important;
  color-adjust:exact !important;
}

/* Колонтитулы. Отчёт печатается и уходит дальше по частям, поэтому каждый лист
   сам себя объясняет: сверху — регион и год, справа — раздел; снизу —
   источники данных и номер листа. */
.rp-page { display:flex; flex-direction:column; }
.rp-rh { display:flex; justify-content:space-between; align-items:baseline; gap:12px;
  margin:0 0 9px; padding-bottom:4px; border-bottom:1px solid var(--rp-line);
  color:var(--rp-muted); font-size:8.4px; letter-spacing:.05em; text-transform:uppercase; }
.rp-rh b { color:var(--rp-accent-dark); font-weight:700; }
.rp-rh span { flex:0 0 auto; max-width:52%; text-align:right; overflow:hidden;
  white-space:nowrap; text-overflow:ellipsis; }
.rp-rf { margin-top:auto; padding-top:6px; border-top:1px solid var(--rp-line-soft);
  display:flex; justify-content:space-between; align-items:baseline; gap:12px;
  color:var(--rp-muted); font-size:8.4px; }
.rp-rf b { color:var(--rp-accent-dark); font-variant-numeric:tabular-nums lining-nums; }

/* Номер раздела — синий квадрат рядом с крупным заголовком. */
.rp-sec { grid-template-columns:22px 1fr; column-gap:9px; }
.rp-sec-no { padding:3px 0; font-size:12px; line-height:1.2; }
.rp-sec h3 { font-size:15.5px; }

/* Показатели: широкая цветная полоса слева, значение крупнее. */
.rp-kpi-card { border-top:1px solid var(--rp-line); border-left:4px solid var(--rp-accent);
  background:var(--rp-soft); }
.rp-kpi .v { font-size:17px; }
.rp-kpi-card.risk { border-left-color:#B3261E; background:#fbeff1; }
.rp-kpi-card.risk .v { color:#B3261E; }
.rp-kpi-card.calm { border-left-color:var(--rp-grey, #9FB1C1); }

/* Врезки-выводы: короткое прочтение цифр рядом с самими цифрами. */
.rp-cal { border-left:4px solid var(--rp-accent); background:var(--rp-accent-soft);
  padding:8px 10px; break-inside:avoid; page-break-inside:avoid; }
.rp-cal + .rp-cal { margin-top:8px; }
.rp-cal-h { margin-bottom:3px; color:var(--rp-accent-dark); font-size:9.2px;
  font-weight:700; letter-spacing:.06em; text-transform:uppercase; }
.rp-cal-t { font-size:10.4px; line-height:1.45; }
.rp-cal-t b { color:var(--rp-accent-dark); }
.rp-cal.risk { border-left-color:#B3261E; background:#fbeff1; }
.rp-cal.risk .rp-cal-h, .rp-cal.risk .rp-cal-t b { color:#B3261E; }
.rp-cal.grey { border-left-color:#9FB1C1; background:var(--rp-soft); }
.rp-cal.grey .rp-cal-h { color:var(--rp-muted); }
.rp-cals { display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-top:10px;
  align-items:stretch; }
.rp-cals .rp-cal + .rp-cal { margin-top:0; }
.rp-cals-1 { grid-template-columns:1fr; }
.rp-cals-3 { grid-template-columns:1fr 1fr 1fr; }
@media screen and (max-width:860px) { .rp-cals, .rp-cals-3 { grid-template-columns:1fr; } }

/* Заливка шапки таблицы заметнее: строка-шапка читается как шапка, а не как
   первая строка данных. */
table.rp th { background:#dbe8f6; }
table.rp thead tr:last-child th { border-bottom:2px solid var(--rp-accent); }

/* Титульный лист: показатели и содержание, как в печатном примере. */
.rp-title-kpi { display:grid; grid-template-columns:repeat(4, 1fr); gap:8px; margin:16px 0 4px; }
.rp-title-kpi .rp-kpi-card { min-height:58px; }

/* Разбивка класса по дозировкам: мини-полосы внутри таблицы. */
.rp-mini { display:block; height:6px; margin-top:2px; background:var(--rp-line-soft); }
.rp-mini i { display:block; height:100%; min-width:1px; background:var(--rp-accent); }

@media print {
  /* Лист сохраняет высоту, иначе нижний колонтитул уезжает к тексту. */
  .rp-page { min-height:262mm; }
  .rp-cals { break-inside:avoid; page-break-inside:avoid; }
}

.rp-toc-pg { color:var(--rp-accent-dark); font-size:11px; font-weight:700; text-align:right;
  font-variant-numeric:tabular-nums lining-nums; }
.rp-cals .rp-cal-full { grid-column:1 / -1; }

/* Лист мостика короткий: полосы и отбивки крупнее, чтобы блок занимал лист
   целиком, а не треть. */
.rp-wf-row { padding:7px 0; }
.rp-wf-track { height:17px; }
.rp-wf-nm { font-size:11.2px; }
.rp-wf-val { font-size:11.4px; }

/* Показатели на титуле — те же карточки, что в разделах. */
.rp-title-kpi .l { min-height:24px; color:var(--rp-muted); font-size:10.2px; line-height:1.2; }
.rp-title-kpi .v { margin-top:2px; color:var(--rp-accent-dark); font-size:16px; font-weight:700;
  font-variant-numeric:tabular-nums lining-nums; white-space:nowrap; }
.rp-title-kpi .s { margin-top:2px; color:var(--rp-muted); font-size:9.6px; }
.rp-title { justify-content:flex-start; padding-top:20mm; min-height:0; }

/* Колонтитул: обе части в одну строку, длинные названия усекаются. */
.rp-rh > *:first-child { min-width:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
/* Полосы разложения прироста крупнее — лист не пустует. */
.rp-pv-row { padding:8px 0; }
.rp-pv-track { height:18px; }

/* Широкая врезка вне сетки rp-cals тоже должна занимать всю ширину. */
.rp-cal.rp-cal-full { margin-top:7px; }

/* Мини-полоса доли не должна касаться линии строки. */
.rp-mini { height:5px; margin:3px 0 2px; max-width:100%; }

/* ==========================================================================
   ДИЗАЙН-СИСТЕМА ПЕЧАТНОГО ПРИМЕРА АНАЛИТИЧЕСКОЙ ПОДАЧИ
   Блок стоит последним и задаёт окончательную типографику: кегли переведены
   из пунктов примера (1 pt = 1,333 px), поля листа — 14 мм, служебные подписи
   набраны узким начертанием, основной текст — обычным.
   ========================================================================== */

/* Геометрия листа: поля 14 мм по всем сторонам, как в примере. */
/* Поля листа: 15 мм со всех сторон. Раньше поле было 10 мм, а ширина листа
   190 мм — печатное поле выходило в ноль и края таблиц обрезались. Экран и
   печать держат одну геометрию: ширина 180 мм без внутренних отступов, иначе
   проверка вёрстки на экране не совпадает с печатью. */
/* Ширина листа 176 мм при полях 15 мм: 4 мм запаса по ширине — на macOS
   печать в PDF округляет размеры, и лист в 180 мм срезался по правому краю.
   Минимальная высота листа в печати — 260 мм при доступных 267 мм: без
   запаса округление высоты давало после каждого листа пустую страницу. */
@page { size:A4 portrait; margin:15mm 15mm 15mm 15mm; }
.rp-sheet { width:176mm; font-size:12px; line-height:1.42; }
.rp-page { width:176mm; min-height:260mm; padding:0; }
@media print {
  .rp-sheet { width:176mm; font-size:12px; }
  .rp-page { width:176mm; min-height:260mm; max-height:266mm; overflow:hidden; padding:0; }
}

/* Колонтитулы: узкое начертание, разрядка, тонкая линия. */
.rp-rh { margin:0 0 11px; padding-bottom:5px; font-family:"RepCond","Noto Sans",Arial,sans-serif;
  font-weight:500; font-size:8.6px; letter-spacing:.04em; }
/* Правая часть колонтитула (название раздела) длиннее левой: ей до 58 %
   ширины, левая при нехватке места обрезается многоточием. */
.rp-rh span { max-width:58%; }
.rp-rh b { color:var(--rp-muted); font-weight:500; }
.rp-rf { padding-top:7px; font-family:"RepCond","Noto Sans",Arial,sans-serif;
  font-size:9.1px; letter-spacing:0; }
.rp-rf b { font-weight:500; color:var(--rp-muted); }

/* Заголовок раздела: синий квадрат с номером и крупный тёмный заголовок.
   В примере заголовок почти чёрный — синим выделен только номер, поэтому
   строка читается как название, а не как ссылка. */
.rp-sec { grid-template-columns:23px 1fr; column-gap:11px; margin:0 0 14px;
  padding-bottom:0; border-bottom:0; align-items:start; }
.rp-sec-no { padding:0; width:23px; height:23px; line-height:23px; font-size:12.7px;
  font-weight:700; }
.rp-sec h3 { font-size:19.3px; font-weight:600; line-height:1.18; color:var(--rp-ink);
  letter-spacing:-.005em; }
.rp-sec .rp-sec-lead { margin-top:5px; font-size:11.5px; line-height:1.35;
  color:var(--rp-muted); }

/* Заголовки блоков внутри листа: без синей линии, обычный тёмный текст. */
.rp-sheet h3 { margin:0 0 6px; padding:0; border-bottom:0; font-size:13.3px;
  font-weight:600; color:var(--rp-ink); }
.rp-sub, .rp-note { font-size:9.6px; line-height:1.38; color:var(--rp-muted); }
.rp-note { margin-top:6px; font-size:9.6px; }

/* Показатели: светло-голубая заливка, синяя полоса слева, узкая подпись
   капителью, крупное значение. */
.rp-kpi { gap:9px; }
.rp-kpi-card, .rp-title-kpi .rp-kpi-card { min-height:0; padding:9px 11px 11px;
  border:0; border-left:3.2px solid var(--rp-accent); background:var(--rp-fill); }
.rp-kpi .l, .rp-title-kpi .l { min-height:0; margin-bottom:5px;
  font-family:"RepCond","Noto Sans",Arial,sans-serif; font-weight:500; font-size:9.3px;
  line-height:1.2; letter-spacing:.02em; text-transform:uppercase; color:var(--rp-muted); }
.rp-kpi .v, .rp-title-kpi .v { margin-top:0; font-size:21.3px; font-weight:600;
  line-height:1.1; color:var(--rp-accent-dark); }
.rp-kpi.rp-kpi-4 .v { font-size:19px; }
.rp-kpi .s, .rp-title-kpi .s { margin-top:5px;
  font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:9.3px; line-height:1.32;
  color:var(--rp-muted); }
.rp-kpi-card.risk { border-left-color:var(--rp-red); background:var(--rp-red-soft); }
.rp-kpi-card.risk .l { color:var(--rp-red); }
.rp-kpi-card.risk .v { color:var(--rp-red); }
.rp-kpi-card.calm { border-left-color:var(--rp-grey); }

/* Таблицы: узкая шапка капителью на голубой заливке, зебра, тонкие линии,
   выделенная строка итога. */
table.rp th { padding:5px 6px; background:var(--rp-accent-soft);
  border-bottom:0; font-family:"RepCond","Noto Sans",Arial,sans-serif;
  font-weight:700; font-size:9.2px; line-height:1.18; color:var(--rp-accent-dark);
  vertical-align:bottom; }
table.rp th .rp-sub { color:var(--rp-accent-dark); font-size:8.6px; opacity:.85; }
table.rp thead tr:last-child th { border-bottom:0; }
table.rp td { padding:4.4px 6px; border-bottom:1px solid #E6E8EB; font-size:9.9px;
  line-height:1.3; }
table.rp tbody tr:nth-child(even) td { background:var(--rp-soft); }
table.rp tbody tr.total td { background:var(--rp-accent-soft); border-top:0;
  border-bottom:0; font-weight:600; }
table.rp tr.lvl1 td { background:var(--rp-accent-soft) !important; }
table.rp tr.lvl2 td { background:var(--rp-fill) !important; }
table.rp.rp-tight th, table.rp.rp-tight td { padding-left:4px; padding-right:4px; }
table.rp.rp-tight td { font-size:9.3px; }
table.rp.rp-tight .rp-sub { font-size:8.4px; }
table.rp td .rp-sub { font-size:8.6px; }

/* Врезки-выводы: заливка, полоса слева, узкий заголовок капителью. */
.rp-cal { padding:10px 12px 11px; border-left:3.2px solid var(--rp-accent);
  background:var(--rp-fill); }
.rp-cal-h { margin-bottom:5px; font-family:"RepCond","Noto Sans",Arial,sans-serif;
  font-weight:700; font-size:9.6px; letter-spacing:.05em; }
.rp-cal-t { font-size:10.1px; line-height:1.44; color:var(--rp-ink); }
.rp-cal.risk { border-left-color:var(--rp-red); background:var(--rp-red-soft); }
.rp-cal.grey { border-left-color:var(--rp-grey); background:var(--rp-soft); }
.rp-cals { gap:10px; margin-top:12px; }

/* Полосы: серый фон дорожки, синяя заливка, значение узким полужирным. */
.rp-bar-track, .rp-wf-track, .rp-mx-track, .rp-cmp-track { background:var(--rp-soft); }
.rp-bar-name, .rp-wf-nm, .rp-mx-nm, .rp-db-nm { font-size:10.4px; line-height:1.25; }
.rp-bar-val { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-weight:700;
  font-size:10.9px; color:var(--rp-accent-dark); }
.rp-bar-sub { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:9.3px; }
.rp-wf-row { padding:5px 0; border-bottom:0; }
.rp-wf-track { height:13.3px; }
.rp-wf-val { font-size:10.9px; font-family:"RepCond","Noto Sans",Arial,sans-serif; }
.rp-wf-val span { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:9.3px; }
.rp-pv-row { padding:6px 0; }
.rp-pv-track, .rp-pv-axis { height:14px; }

/* Содержание: как в примере — номер, название, короткое пояснение в строку,
   номер листа справа. */
.rp-toc-row { grid-template-columns:22px 1fr 30px; column-gap:10px; padding:5.5px 0;
  border-bottom:0; align-items:baseline; }
.rp-toc-no { font-size:11.5px; color:var(--rp-accent); text-align:left; }
.rp-toc-nm { font-size:12px; font-weight:600; color:var(--rp-ink); }
.rp-toc-ds { display:inline; margin-left:7px; font-family:"RepSans","Noto Sans",Arial,sans-serif;
  font-size:10.4px; color:var(--rp-muted); }
.rp-toc-pg { font-size:10.7px; font-weight:400; color:var(--rp-muted); }

/* Титульный лист. */
.rp-title { padding-top:0; }
.rp-title-kicker { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-weight:700;
  font-size:9.6px; letter-spacing:.07em; color:var(--rp-accent); }
.rp-title h1 { margin:0; padding:0; border-bottom:0; font-size:36px; font-weight:700;
  line-height:1.14; color:var(--rp-ink); letter-spacing:-.01em; }
.rp-title h1 em { font-style:normal; color:var(--rp-accent); }
.rp-title-rule { width:22mm; height:3.2px; margin:14px 0 0; background:var(--rp-accent); }
.rp-title-lead { margin-top:18px; max-width:78%; font-weight:300; font-size:14.9px;
  line-height:1.42; color:var(--rp-muted); }
.rp-title-kpi { margin:26px 0 0; gap:9px; }
.rp-title-toc-h { margin:30px 0 4px; font-family:"RepCond","Noto Sans",Arial,sans-serif;
  font-weight:700; font-size:9.6px; letter-spacing:.07em; color:var(--rp-accent);
  text-transform:uppercase; }
.rp-disc { margin-top:26px; padding:11px 13px; background:var(--rp-soft); }
.rp-disc-h { margin-bottom:5px; font-family:"RepCond","Noto Sans",Arial,sans-serif;
  font-weight:700; font-size:9.6px; letter-spacing:.05em; color:var(--rp-muted);
  text-transform:uppercase; }
.rp-disc-t { font-size:10.1px; line-height:1.44; color:var(--rp-ink); }

/* Определения каналов: узкий синий тег и текст в одну строку. */
.rp-def { display:grid; grid-template-columns:38px 1fr; column-gap:10px; padding:4px 0; }
.rp-def-k { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-weight:700;
  font-size:9.6px; color:var(--rp-accent); }
.rp-def-t { font-size:9.9px; line-height:1.38; color:var(--rp-ink); }

/* «Главное»: номер синим, утверждение полужирным, текст обычным. */
.rp-hl-row { grid-template-columns:20px 1fr; column-gap:8px; padding:7px 0;
  border-bottom:0; }
.rp-hl-no { font-size:12px; color:var(--rp-accent); text-align:left; }
.rp-hl-nm { font-size:12.4px; font-weight:600; color:var(--rp-ink); }
.rp-hl-tx { margin-top:3px; font-size:10.1px; line-height:1.44; color:var(--rp-ink); }

/* Диаграммы: подписи узким начертанием, значения — синим полужирным. */
.rp-chart { border:0; padding:0; }
.rp-chart + .rp-chart { margin-top:16px; }
.rp-col-val { fill:var(--rp-accent-dark); font-size:9.9px; font-weight:600; }
.rp-col-lbl { fill:var(--rp-muted); font-size:9.3px; }
.rp-col-sub { fill:var(--rp-grey); font-size:8.6px; }
.rp-legend { gap:5px; }
.rp-lg-row { font-size:10.1px; }
.rp-donut-title { font-size:11.5px; font-weight:600; color:var(--rp-ink); }
.rp-mx-legend span { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:9.6px; }
.rp-cmp-yr { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:9.3px; }
.rp-cmp-val { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:9.6px; }
.rp-cmp-delta { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:10.4px; }
.rp-db-val, .rp-mx-val { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:9.9px; }

/* Матрица «направление × канал» рисуется как в примере — таблицей ячеек с
   заливкой по интенсивности. */
.rp-heat { width:100%; border-collapse:collapse; table-layout:fixed; }
.rp-heat th { padding:0 5px 6px; background:none; border:0;
  font-family:"RepSans","Noto Sans",Arial,sans-serif; font-weight:600; font-size:10.1px;
  color:var(--rp-ink); text-align:center; }
.rp-heat th.nm { text-align:left; }
.rp-heat td { padding:0; border:0; font-size:9.9px; }
.rp-heat td.nm { padding-right:9px; font-size:9.9px; line-height:1.25; color:var(--rp-ink); }
.rp-heat td.c { height:19px; text-align:center; vertical-align:middle;
  border:1.2px solid #fff; font-variant-numeric:tabular-nums lining-nums; }
.rp-heat td.c.dk { color:#fff; font-weight:600; }
.rp-heat td.c.em { color:#B9BDC3; }
.rp-heat td.sum { padding-left:9px; text-align:right; font-weight:600;
  color:var(--rp-accent-dark); font-variant-numeric:tabular-nums lining-nums; }
.rp-heat tr.hd th { padding-bottom:7px; }

/* Мостик рисуется вертикальными столбцами с пунктирными связками — так же,
   как в печатном примере: видно не только «сколько», но и «где именно». */
.rp-wfc { display:block; width:100%; height:auto; }
.rp-wfc-val { fill:var(--rp-ink); font-size:9.9px; font-weight:600; text-anchor:middle; }
.rp-wfc-neg { fill:var(--rp-muted); font-size:9.3px; font-weight:600; text-anchor:middle; }
.rp-wfc-negin { fill:#fff; font-size:9.6px; font-weight:600; text-anchor:middle; }
.rp-wfc-lbl { fill:var(--rp-muted); font-size:9.3px; text-anchor:middle; }
.rp-wfc-link { stroke:var(--rp-grey-l); stroke-width:.9; stroke-dasharray:2.5 2.5; }

@media screen and (max-width:860px) {
  .rp-sheet, .rp-page { width:100%; }
  .rp-page { min-height:0; padding:16px; }
}


/* --- Сборка 57: выравнивание показателей, отдельный лист содержания, ----- */
/* строгая инфографика без лишних серых линий.                              */

/* Крупные числа в квадратах стоят на одной линии: подпись занимает две
   строки независимо от длины, значение прижато к низу карточки. */
.rp-kpi, .rp-title-kpi { align-items:stretch; }
.rp-kpi-card, .rp-title-kpi .rp-kpi-card {
  display:flex; flex-direction:column; }
.rp-kpi .l, .rp-title-kpi .l { min-height:2.5em; }
.rp-kpi .v, .rp-title-kpi .v { margin-top:auto; }
.rp-kpi .s, .rp-title-kpi .s { min-height:1.5em; }

/* Отдельный лист содержания. */
.rp-toc-page .rp-page-title { margin:0 0 10px; font-family:"RepCond","Noto Sans",Arial,sans-serif;
  font-size:19px; font-weight:700; color:var(--rp-accent-dark); }

/* Точечный график «деньги — упаковки»: серая дорожка убрана, остаётся
   только отрезок между двумя точками. */
.rp-db-track:before { display:none; }
.rp-db-track i { top:7px; height:1.4px; background:var(--rp-line); }
.rp-db-track b.packs { background:var(--rp-grey); }

/* Единая палитра точечных и полосных графиков. */
.rp-sh-track i.soft, .rp-wf-track i.soft { background:var(--rp-light); }

/* Подписи показателей не разрываются посередине слова. */
.rp-kpi .l, .rp-title-kpi .l {
  overflow-wrap:normal; word-break:keep-all; hyphens:manual; }

/* Сводка выводов: по одной карточке на раздел отчёта, две карточки в ряд. */
.rp-hl-grid { display:grid; grid-template-columns:1fr 1fr; gap:9px; margin-top:4px; }
.rp-hl-card { padding:9px 11px 11px; border:1px solid var(--rp-line);
  border-top:3px solid var(--rp-accent); background:var(--rp-fill); }
.rp-hl-top { display:flex; align-items:baseline; gap:7px; margin-bottom:5px; }
.rp-hl-card .rp-hl-no { display:inline-block; padding:1px 5px; background:var(--rp-accent);
  color:#fff; font-size:9.6px; font-weight:700; font-variant-numeric:tabular-nums lining-nums; }
.rp-hl-card .rp-hl-nm { font-size:11.6px; font-weight:700; color:var(--rp-accent-dark); }
.rp-hl-card .rp-hl-tx { margin:0; font-size:9.9px; line-height:1.45; color:var(--rp-ink); }


/* --- Сборка 58: единый шрифт, титул по центру, двухуровневые шапки, ------- */
/* легенда точечного графика, матрица каналов.                               */

/* Весь лист набран одним шрифтом отчёта: раньше базовое правило оставляло
   Arial, и в PDF смешивались два семейства. */
.rp-sheet { font-family:"RepSans","Noto Sans",Arial,Helvetica,sans-serif; }

/* Титульный лист: блок названия и показателей стоит по центру листа,
   под годом финансирования — дата отчёта меньшим кеглем. */
.rp-title { justify-content:center; min-height:236mm; padding-top:0; }
.rp-title-date { margin-top:12px; font-size:13.5px; font-weight:400; color:var(--rp-muted); }

/* Шапка таблицы в два уровня: общее слово над парой колонок, единицы под ним. */
table.rp thead th.grp { text-align:center; vertical-align:bottom; padding-bottom:3px;
  border-bottom:1px solid #fff; }
table.rp thead tr + tr th { padding-top:3px; font-weight:500; }
table.rp thead th[rowspan] { vertical-align:bottom; }

/* Матрица каналов: итог не прижат к краю колонки, заголовок итога над числами. */
.rp-heat td.sum, .rp-heat th.sum { padding-right:8px; text-align:right; }

/* Легенда точечного графика: цветная точка и подпись отдельной строкой. */
.rp-lgd { display:flex; flex-wrap:wrap; gap:6px 18px; margin:0 0 7px;
  font-family:"RepCond","Noto Sans",Arial,sans-serif; font-size:9.6px; color:var(--rp-muted); }
.rp-lgd span { display:inline-flex; align-items:center; }
.rp-lgd i { display:inline-block; width:9px; height:9px; margin-right:6px; border-radius:50%; }
.rp-lgd i.money { background:var(--rp-accent); }
.rp-lgd i.packs { background:var(--rp-grey); }
.rp-db-row { grid-template-columns:30% 1fr 84px; padding:2.4px 0; }
.rp-heat td.c { height:18px; }
.rp-heat th { white-space:nowrap; }

/* Сборка 58, часть 2: единообразие блоков и новые элементы. */

/* Единица показателя в карточках мельче числа — одинаково во всех разделах. */
.rp-kpi .v small, .rp-title-kpi .v small { font-size:60%; font-weight:500; margin-left:3px;
  color:var(--rp-muted); }
.rp-kpi .v.rp-bad small { color:var(--rp-muted); }

/* Индекс сноски в шапке таблицы и сноска под таблицей. */
table.rp th sup { font-size:7px; line-height:0; vertical-align:super; }
.rp-fn { margin-top:6px; font-size:8.8px; line-height:1.35; color:var(--rp-muted); }
.rp-fn sup { font-size:7px; line-height:0; }
.rp-fn + .rp-fn { margin-top:2px; }

/* Сокращения и обозначения на листе содержания. */
.rp-abbr-title { margin-top:22px !important; }
.rp-abbr { column-count:1; }
.rp-abbr-row { display:grid; grid-template-columns:118px 1fr; column-gap:12px;
  padding:4.2px 0; border-bottom:1px solid var(--rp-line); }
.rp-abbr-row:last-child { border-bottom:0; }
.rp-abbr-k { font-family:"RepCond","Noto Sans",Arial,sans-serif; font-weight:700;
  font-size:10.4px; line-height:1.35; color:var(--rp-accent-dark); }
.rp-abbr-t { font-size:9.9px; line-height:1.38; color:var(--rp-ink); }

/* Легенда графиков фокусного класса: тёмный/светлый — цена выше/ниже средней. */
.rp-lgd i.dark { background:var(--rp-accent-dark); }
.rp-lgd i.light { background:var(--rp-light); }
.rp-two .rp-block h3 { min-height:2.6em; }
.rp-two .rp-block svg { width:100%; height:auto; display:block; }
/* Два графика класса рядом: заголовок и легенда каждого блока занимают одну
   высоту, поэтому полосы обоих графиков начинаются на одном уровне. */
.rp-two-even { align-items:stretch; margin-bottom:12px; }
/* Графики фокусного класса: шире промежуток между левой и правой колонками. */
.rp-two-focus { gap:28px; grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
/* Колонки строго равной ширины: иначе неразрывная легенда расширяла левую
   колонку, и графики печатались в разном масштабе. */
.rp-two-focus .rp-lgd { white-space:normal; flex-wrap:wrap; }
.rp-two-even .rp-block { margin-bottom:0; display:flex; flex-direction:column; }
.rp-two-even .rp-block h3 { min-height:2.6em; margin-bottom:4px; }
.rp-two-even .rp-lgd { flex-wrap:nowrap; white-space:nowrap; min-height:14px; margin-bottom:6px; }
.rp-two-even .rp-block svg { margin-top:auto; }

/* Врезки: заголовок тем же узким шрифтом и капителью, что подписи карточек. */
.rp-cal-h { text-transform:uppercase; color:var(--rp-accent-dark); letter-spacing:.05em; }
.rp-cal.grey .rp-cal-h { color:var(--rp-muted); }

/* Сборка 58, часть 3: карточки на одной линии, ровные шапки, точечный график. */

/* Число в карточках стоит на одной линии во всём ряду: подпись занимает
   фиксированную высоту, пояснение под числом не сдвигает его. */
.rp-kpi .l, .rp-title-kpi .l { min-height:2.5em; margin-bottom:4px; }
.rp-kpi .v, .rp-title-kpi .v { margin-top:0; }
.rp-kpi .s, .rp-title-kpi .s { margin-top:4px; min-height:0; }

/* Шапки таблиц: кегль как в теле таблицы, заголовки числовых колонок по
   центру над столбиком, объединённые ячейки выровнены по середине. */
table.rp th { font-size:9.9px; letter-spacing:.01em; }
/* Заголовок числовой колонки выровнен так же, как её данные — по правому
   краю; по центру остаются только объединённые заголовки над парами колонок. */
table.rp th.n { text-align:right; }
table.rp thead th.grp { text-align:center; }
table.rp thead th[rowspan] { vertical-align:middle; }
table.rp thead tr + tr th { padding-top:3px; padding-bottom:4px; vertical-align:middle; }
table.rp th .rp-sub { font-size:9.2px; }

/* Матрица каналов: столбик итога и его заголовок по центру. */
.rp-heat td.sum, .rp-heat th.sum { text-align:center; padding-left:4px; padding-right:4px; }

/* Точечный график долей: единый шрифт отчёта, без разделительных линий между
   строками; названия отделены от области точек вертикальной серой линией,
   соединители одной толщины. */
.rp-db-val, .rp-mx-val, .rp-lgd { font-family:"RepSans","Noto Sans",Arial,sans-serif; }
.rp-db-val { font-size:9.9px; }
.rp-db-row { position:relative; grid-template-columns:30% 1fr 84px; column-gap:10px;
  padding:2.6px 0; border-bottom:0; }
.rp-db-row::before { content:''; position:absolute; left:calc(30% + 4px); top:0; bottom:0;
  border-left:1px solid var(--rp-line); }
.rp-db-row:first-child::before { top:-2px; }
.rp-db-track { height:16px; margin:0 6px 0 8px; }
.rp-db-track i { top:7px; height:2px; background:var(--rp-line); }
.rp-db-track b { width:10px; height:10px; top:3px; margin-left:-5px; }

/* Сборка 59: резюме — первая карточка (раздел 01) на всю ширину, остальные
   парами; палитра графика торговых наименований — основной синий и светлый. */
.rp-hl-grid .rp-hl-card:first-child { grid-column:1 / -1; }
.rp-lgd i.dark { background:var(--rp-accent); }

/* Справочные значения прошлого года целиком (весь год) — серым, без стрелок. */
.rp-ref, table.rp td.ref, table.rp th.ref, table.rp .total td.ref { color:var(--rp-muted); font-weight:400; }
table.rp th.ref .rp-sub { color:var(--rp-muted); }
/* Нулевое изменение — без стрелки, серым. */
.rp-zero { color:var(--rp-muted); }
/* Темп контрактования: столбики слева, четыре карточки справа. */
.rp-pace-grid { display:grid; grid-template-columns:300px 1fr; gap:14px; align-items:start; }
.rp-pace-svg { min-height:0; width:300px; height:auto; }
.rp-kpi.rp-pace-cards { grid-template-columns:repeat(2, 1fr); margin:0; }
.rp-kpi.rp-pace-cards .v { font-size:14px; }
.rp-kpi-card.grey { border-left-color:#8A9099; }
.rp-kpi-card.grey .v, .rp-kpi-card.grey .l { color:var(--rp-muted); }
/* Позиции, закупавшиеся только в прошлом году: серым, в колонках отчётного
   года — прочерк. */
table.rp-tree tr.op td { color:var(--rp-muted); }

/* Сборка 60, блок 4: стрелка и значение прироста — в двух выровненных колонках
   ячейки (стрелки друг под другом, проценты друг под другом); шапка числовых
   колонок, включая групповые подписи, выровнена по правому краю, как и данные. */
table.rp .rp-d { display:inline-flex; justify-content:space-between; align-items:baseline;
  min-width:5.9em; white-space:nowrap; }
table.rp .rp-d i { font-style:normal; width:1.1em; text-align:left; }
table.rp .rp-d b { font-weight:inherit; }
table.rp .rp-tight .rp-d, table.rp-tight .rp-d { min-width:5.2em; }
.rp-d i { font-style:normal; }
.rp-d b { font-weight:inherit; }
.rp-cal-t .rp-d i, .rp-kpi .rp-d i { margin-right:.25em; }
table.rp thead th.grp { text-align:right; }
table.rp thead th.grp:first-child, table.rp thead th.grp.txt { text-align:left; }
.rp-abbr-note { margin-top:10px; padding:7px 10px; background:var(--rp-soft);
  border-left:4px solid #9FB1C1; font-size:9.9px; line-height:1.38; color:var(--rp-ink); }

/* Названия препаратов (МНН, ТН) без переносов по слогам; разрыв — после «+». */
table.rp td .rp-nm { hyphens:manual; -webkit-hyphens:manual; }
/* Графики фокусного класса — во всю ширину листа, друг под другом. */
.rp-block.rp-wide-bars svg { width:100%; height:auto; display:block; }
.rp-block.rp-wide-bars + .rp-block.rp-wide-bars { margin-top:8px; }
/* Иерархическая диаграмма фокусного класса (сборка 66): МНН → дозировка → ТН. */
.rp-block.rp-tree svg { width:100%; height:auto; display:block; }
.rp-block.rp-tree + .rp-block.rp-tree { margin-top:8px; }
.rp-lgd-tree { flex-wrap:nowrap; white-space:nowrap; }
.rp-lgd-tree .sep { margin-left:10px; padding-left:12px; border-left:1px solid var(--rp-line); color:var(--rp-muted); }

/* Пакет отчётов по нескольким регионам (экранная панель, в печать не идёт). */
.rp-batch { border:1px solid var(--rp-line); border-radius:6px; padding:12px 14px; margin:0 0 14px; background:#fff; }
.rp-batch-head { display:flex; gap:12px; align-items:baseline; flex-wrap:wrap; margin-bottom:8px; }
.rp-batch-hint { font-size:12px; color:var(--rp-muted); }
.rp-batch-list { display:grid; grid-template-columns:repeat(auto-fill, minmax(240px, 1fr)); gap:4px 14px; max-height:220px; overflow:auto; padding:6px 0; }
.rp-batch-item { font-size:13px; display:flex; gap:6px; align-items:center; cursor:pointer; }
.rp-batch-act { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:8px; }
.rp-batch-sel { font-size:12px; color:var(--rp-muted); }
.rp-batch-log { font-size:12.5px; margin-top:8px; color:var(--rp-ink); }
.rp-batch-log:empty { display:none; }
.rp-batch-prog { font-weight:600; margin-bottom:4px; }
.rp-batch-files { margin-top:10px; }
.rp-batch-files:empty { display:none; }
.rp-batch-zip { display:inline-block; text-decoration:none; }
.rp-batch-filelist { display:flex; flex-direction:column; gap:2px; margin-top:8px; font-size:12.5px; }
a.rp-batch-zip { background:var(--rp-accent); color:#fff; border-radius:7px; padding:10px 18px; font-size:14px; font-weight:550; }
a.rp-batch-zip:hover { background:var(--rp-accent-dark); }
