/* ========================================================================
   Лист по ГОСТ 2.104 — рамка и основная надпись

   Применяется только к страницам-документам: результаты расчётов, листы
   согласования изменений, технические заключения. На главной и в прайсе
   рамка превращается в декорацию и мешает, поэтому туда не ставится.

   Геометрия задана в миллиметрах, чтобы при печати лист получился
   настоящим, а не «похожим». Браузер сам пересчитает мм в пиксели на
   экране, а на печати выдаст ровно то, что задано.

   Основные размеры:
     формат A4 горизонтально      297 × 210 мм
     поле подшивки слева          20 мм
     прочие поля                  5 мм
     основная надпись (форма 1)   185 × 55 мм, правый нижний угол
     высота строки штампа         5 мм
   ======================================================================== */

.sheet {
  --sheet-w: 297mm;
  --sheet-h: 210mm;
  --margin-bind: 20mm;   /* поле под подшивку */
  --margin-edge: 5mm;
  --stamp-w: 185mm;
  --stamp-h: 55mm;
  --row: 5mm;

  position: relative;
  width: var(--sheet-w);
  min-height: var(--sheet-h);
  margin: 0 auto 28px;
  padding: var(--margin-edge) var(--margin-edge) var(--margin-edge) var(--margin-bind);
  background: var(--paper-white, #fdfcf8);
  border: 1px solid var(--line-main, #9aa5a0);
  font-family: var(--body);

  /* На экране лист ужимается под ширину окна, сохраняя пропорции */
  max-width: 100%;
}

/* Рамка чертежа — сплошная толстая основная линия по ГОСТ 2.303 */
.sheet-frame {
  position: relative;
  min-height: calc(var(--sheet-h) - var(--margin-edge) * 2);
  border: 1mm solid var(--ink, #16202b);
  padding: 6mm 6mm calc(var(--stamp-h) + 6mm) 6mm;
}

/* Лист без основной надписи — непроверенный расчёт. Под штамп больше
   ничего не резервируется: 55 мм пустоты внизу каждого листа и были
   причиной лишних страниц при печати. */
.sheet-plain .sheet-frame { padding-bottom: 6mm; }

.sheet-body { font-size: 10pt; line-height: 1.45; }

.sheet-title {
  font-family: var(--draft);
  font-style: italic;
  font-weight: 650;
  font-size: 16pt;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  margin: 0 0 2mm;
  color: var(--ink, #16202b);
}
.sheet-subtitle {
  font-size: 9.5pt;
  color: var(--ink-soft, #3f4d5c);
  margin: 0 0 5mm;
  padding-bottom: 2mm;
  border-bottom: 0.35mm solid var(--ink, #16202b);
}

.sheet-section {
  font-family: var(--draft);
  font-style: italic;
  font-weight: 650;
  font-size: 11pt;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  margin: 5mm 0 2mm;
  padding-bottom: 1mm;
  border-bottom: 0.25mm solid var(--line-main, #9aa5a0);
}

/* Пометка о непроверенном расчёте — в правом верхнем углу листа,
   там же, где на чертежах ставят штампы «Предварительно» и
   «В производство работ». Печатается вместе с листом намеренно. */
.sheet-mark {
  position: absolute;
  top: 4mm;
  right: 4mm;
  width: 62mm;
  padding: 2mm 3mm;
  border: 0.5mm solid var(--warn-line, #cfa955);
  background: var(--warn-bg, #f9f0dc);
  transform: rotate(-1.2deg);   /* лёгкий наклон, как у резинового штампа */
}
.sheet-mark-title {
  font-family: var(--draft);
  font-style: italic;
  font-weight: 700;
  font-size: 8.5pt;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: #8a5a12;
  margin-bottom: 0.8mm;
}
.sheet-mark-text { font-size: 6.5pt; line-height: 1.3; color: var(--ink-soft, #3f4d5c); }

/* Заголовок листа не должен заезжать под пометку */
.sheet-mark ~ .sheet-title,
.sheet-mark ~ .sheet-subtitle { max-width: calc(100% - 68mm); }

/* Две колонки внутри листа: исходные данные и результат рядом,
   как на настоящем листе расчёта */
.sheet-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0 8mm;
}

.sheet-notes {
  margin: 0;
  padding-left: 6mm;
  font-size: 8.5pt;
  line-height: 1.4;
  color: var(--ink-soft, #3f4d5c);
}
.sheet-notes li { margin-bottom: 1.2mm; }

/* Показатели внутри листа компактнее, чем на обычной странице */
.sheet .result-hero { margin-bottom: 4mm; }
.sheet .hero-item { padding: 2.5mm 3mm; }
.sheet .hero-value { font-size: 13pt; }
.sheet .hero-label { font-size: 6.5pt; }
.sheet .result-table { font-size: 8.5pt; }
.sheet .result-table th, .sheet .result-table td { padding: 1.2mm 2mm; }

.sheet-actions {
  display: flex;
  align-items: center;
  gap: 14px;
  margin: 0 0 22px;
}

/* ------------------------------------------------------------------
   ОСНОВНАЯ НАДПИСЬ (форма 1)
   ------------------------------------------------------------------ */

.stamp {
  position: absolute;
  right: 0;
  bottom: 0;
  width: var(--stamp-w);
  height: var(--stamp-h);
  display: flex;
  border: 1mm solid var(--ink, #16202b);
  background: var(--paper-white, #fdfcf8);
  font-family: var(--draft);
  font-style: italic;
  color: var(--ink, #16202b);
  line-height: 1;
}

.stamp-cell {
  border-right: 0.25mm solid var(--ink, #16202b);
  border-bottom: 0.25mm solid var(--ink, #16202b);
  padding: 0.6mm 1mm;
  display: flex;
  align-items: center;
  overflow: hidden;
  white-space: nowrap;
}
.stamp-cell.center { justify-content: center; }
.stamp-cell.last-col { border-right: none; }
.stamp-cell.last-row { border-bottom: none; }

.stamp-lbl { font-size: 6pt; letter-spacing: 0.02em; }
.stamp-val { font-size: 7.5pt; }
.stamp-big { font-size: 12pt; font-weight: 650; letter-spacing: 0.03em; }
.stamp-org { font-size: 9pt; font-weight: 650; letter-spacing: 0.04em; }

/* --- Левый блок 65 мм: изменения и подписи --- */
.stamp-left {
  width: 65mm;
  display: grid;
  grid-template-columns: 7mm 10mm 23mm 15mm 10mm;
  grid-auto-rows: var(--row);
  border-right: 0.5mm solid var(--ink, #16202b);
}
/* Пять верхних строк — резерв под записи об изменениях (графы 14–18) */
.stamp-left .revision-row .stamp-cell { background: transparent; }

/* --- Правый блок 120 мм --- */
.stamp-right {
  width: 120mm;
  display: grid;
  grid-template-columns: 70mm 17mm 17mm 16mm;
  grid-template-rows: 15mm 10mm 15mm 15mm;
}

/* Графа 2 — обозначение документа, во всю ширину */
.stamp-code {
  grid-column: 1 / -1;
  justify-content: center;
  font-size: 11pt;
  font-weight: 650;
  letter-spacing: 0.05em;
}
/* Графа 1 — наименование документа */
.stamp-name {
  grid-column: 1;
  grid-row: 2 / 4;
  flex-direction: column;
  justify-content: center;
  text-align: center;
  white-space: normal;
  line-height: 1.15;
}
/* Графа 9 — наименование организации */
.stamp-company {
  grid-column: 1 / -1;
  grid-row: 4;
  flex-direction: column;
  justify-content: center;
  text-align: center;
  white-space: normal;
  line-height: 1.25;
}

/* ------------------------------------------------------------------
   ЭКРАН: лист ужимается под окно, сохраняя пропорции
   ------------------------------------------------------------------ */
@media screen and (max-width: 1180px) {
  .sheet {
    transform-origin: top left;
    /* Пересчёт под ширину контейнера делает скрипт в шаблоне */
  }
}

/* На телефоне рамка и штамп нечитаемы: 297 мм в экран 70 мм не влезают.
   Показываем то же содержимое обычной карточкой, а лист предлагаем
   распечатать или скачать. */
@media screen and (max-width: 820px) {
  .sheet {
    width: auto;
    min-height: 0;
    padding: 16px;
    border: 1px solid var(--line-main, #9aa5a0);
  }
  .sheet-frame {
    border: none;
    padding: 0;
    min-height: 0;
  }
  .stamp {
    position: static;
    width: 100%;
    height: auto;
    flex-direction: column;
    border-width: 1px;
    margin-top: 20px;
  }
  .stamp-left { display: none; }
  .stamp-right {
    width: 100%;
    grid-template-columns: 1fr;
    grid-template-rows: auto;
  }
  .stamp-name, .stamp-company, .stamp-code { grid-column: 1; grid-row: auto; }
  .stamp-right .stamp-cell.lit { display: none; }
  .sheet-title { font-size: 1.2rem; }
}

/* ------------------------------------------------------------------
   ПЕЧАТЬ — ради этого всё и затевалось

   Заказчик жмёт Ctrl+P и получает настоящий лист A4 с рамкой и вашей
   основной надписью. Тот же файл уходит в PDF и приложением к договору.
   ------------------------------------------------------------------ */
@page {
  size: A4 landscape;
  margin: 0;
}

/* АКТ ПЕЧАТАЕТСЯ КНИЖНОЙ СТРАНИЦЕЙ, А НЕ АЛЬБОМНОЙ.
   -------------------------------------------------
   @page действует на весь документ, и правило выше — расчётный лист по
   ГОСТ 2.104, который альбомный по построению. Но одна и та же таблица
   стилей грузится на каждой странице портала, а значит и на акте: акт
   шириной 190 мм выезжал на альбомный лист 297×210, занимал две трети
   ширины, а по высоте не помещался и рвался на две страницы.

   Заказчик получал деловой документ, лежащий на боку. Ни один тест
   этого не видел: тесты открывают страницы, а не печатают их.

   Именованная страница CSS решает это точно: `page: act` переводит
   .act-doc на собственную книжную страницу с полями. Там, где браузер
   именованных страниц не знает, всё остаётся как было — хуже не станет. */
@page act {
  size: A4 portrait;
  margin: 12mm 10mm;
}

@media print {
  body {
    background: #fff !important;
    background-image: none !important;
    margin: 0;
    font-size: 10pt;
  }
  body::before { display: none; }

  /* Всё, что не является листом, на печать не идёт */
  .site-header, .site-footer, .calc-form, .calc-tabs,
  .cta-card, .note-card, .btn, .no-print { display: none !important; }

  .sheet {
    width: 297mm;
    height: 210mm;
    margin: 0;
    border: none;
    background: #fff;
    page-break-after: always;
    break-after: page;
  }
  .sheet:last-child { page-break-after: auto; break-after: auto; }

  .sheet-frame { border-color: #000; }
  .stamp, .stamp-cell, .stamp-left { border-color: #000; }

  /* Таблицы не должны рваться посреди строки */
  tr, .alert, .stamp { page-break-inside: avoid; break-inside: avoid; }

  a { color: #000; text-decoration: none; }
  /* Ссылки на бумаге бесполезны, если не видно адреса */
  .sheet-body a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 8pt; }
}

/* Подстроки в таблице теплопритоков: разложение Q2 по стадиям */
.sheet .result-table th.sub {
  padding-left: 5mm;
  font-size: 7.5pt;
  color: var(--ink-faint, #7a8694);
  background: transparent;
}

/* Смета: таблица как в прайсе, с колонкой итога справа */
.estimate-table { width: 100%; border-collapse: collapse; font-size: 8.5pt; }
.estimate-table th, .estimate-table td {
  padding: 1.2mm 2mm;
  border: 0.25mm solid var(--line-thin, #cdd4cb);
  text-align: left;
  vertical-align: top;
}
.estimate-table thead th {
  background: var(--ink, #16202b);
  color: var(--paper, #f7f4ec);
  font-family: var(--draft);
  font-style: italic;
  font-size: 7.5pt;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.estimate-table .num { text-align: right; white-space: nowrap; }
.estimate-table .total-row td {
  background: var(--paper-alt, #f1ece0);
  font-family: var(--draft);
  font-style: italic;
  font-size: 10pt;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

/* Строка, требующая отдельного внимания: ремонт может быть дороже замены */
.estimate-table tr.row-flag td { background: var(--warn-bg, #f9f0dc); }

/* Заголовок этапа работ. Смета читается как хронология объекта, поэтому
   этапы должны отделяться заметнее, чем строки внутри них. */
.estimate-table tr.stage-row td {
  background: var(--paper-alt, #f1ece0);
  font-family: var(--draft);
  border-top: 0.5mm solid var(--line-main, #16202b);
  padding-top: 2mm;
}
.estimate-table tr.stage-row td b {
  font-style: italic;
  letter-spacing: 0.03em;
}

/* =====================================================================
   НАРУШЕННЫЕ НОРМЫ
   =====================================================================
   Правило, ради которого этот блок появился: нарушение нормы обязано
   менять вид самого числа, а не добавлять строку к списку внизу листа.

   Красный держится строго: рамка, заголовок и само нарушенное значение.
   Если покрасить всё, красное перестанет означать «сюда смотреть».

   Цвет продублирован жирностью и словом «нарушен». На чертёжной печати
   лист выходит чёрно-белым, и там от цвета не остаётся ничего. */

.violations {
  border: 0.5mm solid var(--danger, #a4243b);
  margin: 0 0 5mm;
}
.violations-head {
  background: var(--danger, #a4243b);
  color: var(--paper, #f7f4ec);
  font-family: var(--draft);
  font-style: italic;
  font-size: 9pt;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 1.5mm 2.5mm;
}
.violations-table { width: 100%; border-collapse: collapse; font-size: 8.5pt; }
.violations-table th,
.violations-table td {
  padding: 1.5mm 2.5mm;
  border-bottom: 0.25mm solid var(--line-thin, #cdd4cb);
  text-align: left;
  vertical-align: top;
}
.violations-table th {
  font-family: var(--draft);
  font-style: italic;
  font-size: 7.5pt;
  text-transform: uppercase;
}
.violations-table .num { text-align: right; white-space: nowrap; }
.violations-table .violation-value {
  color: var(--danger, #a4243b);
  font-weight: 700;
  font-size: 10pt;
}
.violations-table .violation-advice {
  background: var(--paper-alt, #f1ece0);
  font-size: 8pt;
}

/* Показатель в шапке листа, вышедший за норму. */
.result-hero .hero-item.hero-violation {
  border: 0.4mm solid var(--danger, #a4243b);
  padding: 1.5mm 2.5mm;
}
.result-hero .hero-item.hero-violation .hero-value { color: var(--danger, #a4243b); }
.result-hero .hero-item.hero-violation .hero-label b { color: var(--danger, #a4243b); }

/* Строка хода расчёта, в которой норма нарушена. */
.steps-table tr.step-violation td { background: var(--danger-bg, #f7e4e7); }
.steps-table tr.step-violation .value {
  color: var(--danger, #a4243b);
  font-weight: 700;
}
.steps-table tr.step-attention td { background: var(--warn-bg, #f9f0dc); }

/* Значение у границы допустимого. Не нарушение — предупреждение, поэтому
   оттенок предупреждения, а не красный: смешать эти два случая значит
   либо пугать без повода, либо перестать пугать вообще. */
.estimate-table .num.near-limit,
.result-table .num.near-limit {
  background: var(--warn-bg, #f9f0dc);
  font-weight: 700;
}

/* Места для подписей на бланке акта. Линия оставляется пустой намеренно:
   заполненная от руки строка — единственное, чего портал сделать не может,
   и подделать её вид было бы нечестно по отношению к обеим сторонам. */
.estimate-table.sign-table td { padding: 4mm 2mm 2mm; vertical-align: bottom; }
.estimate-table .sign-line {
  width: 60mm;
  border-bottom: 0.35mm solid var(--line-main, #16202b);
  height: 8mm;
}

/* Работа, входящая в стандартный монтаж. Строка приглушена, но остаётся
   на листе: убрать её — значит показать заказчику, что вакуумирования
   не делают. Именно его отсутствия он и опасается. */
.estimate-table tr.included-row td { color: var(--muted, #6b7280); }

/* ========================================================================
   АКТ КАК ДЕЛОВОЙ ДОКУМЕНТ

   Не лист по ГОСТ 2.104 — у акта нет основной надписи, нет графы
   «Лит.»/«Масштаб»: это не конструкторский документ. Собственное
   оформление, размерность в миллиметрах для той же печати на A4.
   ======================================================================== */

.act-doc {
  page: act;              /* книжная страница — см. @page act выше */
  max-width: 190mm;
  margin: 0 auto;
  padding: 8mm 6mm;
  background: var(--paper-white, #fdfcf8);
  border: 0.35mm solid var(--line-main, #9aa5a0);
  font-size: 9.5pt;
  line-height: 1.5;
}

.act-head {
  text-align: center;
  margin-bottom: 5mm;
  padding-bottom: 3mm;
  border-bottom: 0.35mm solid var(--ink, #16202b);
}
.act-title {
  font-family: var(--draft);
  font-size: 13pt;
  margin: 0 0 2mm;
}
.act-place {
  display: flex;
  justify-content: space-between;
  font-size: 8.5pt;
  color: var(--ink-soft, #3f4d5c);
}

.act-parties {
  width: 100%;
  border-collapse: collapse;
  margin: 0 0 4mm;
  font-size: 9pt;
}
.act-parties th {
  width: 30mm;
  text-align: left;
  vertical-align: top;
  padding: 1.5mm 3mm 1.5mm 0;
  font-family: var(--draft);
  font-weight: normal;
  color: var(--ink-soft, #3f4d5c);
}
.act-parties td { padding: 1.5mm 0; vertical-align: top; }

.act-basis, .act-subject {
  margin: 0 0 3mm;
  font-size: 9pt;
  color: var(--ink-soft, #3f4d5c);
}
.act-subject b { color: var(--ink, #16202b); }

.act-body { margin: 4mm 0; }

.act-copies {
  margin: 4mm 0;
  font-size: 8.5pt;
  font-style: italic;
  color: var(--ink-soft, #3f4d5c);
}

/* Приложение к акту — снимки. Та же книжная страница, что и сам акт:
   иначе доказательства уходят на альбомный лист следом за документом. */
.act-annex { page: act; }

/* БЛОК ПОДПИСЕЙ НЕ РВЁТСЯ ПО СТРАНИЦАМ.
   Печать показала: строка «Исполнитель» оставалась внизу первой
   страницы, а «Заказчик» уезжал на вторую — один в белом поле. Человек
   расписывался на листе, где не было ни перечня работ, ни объекта, ни
   даже названия документа. Такая подпись не подтверждает ничего. */
.act-signs {
  width: 100%;
  border-collapse: collapse;
  margin-top: 6mm;
  page-break-inside: avoid;
  break-inside: avoid;
}
.act-signs th {
  width: 32mm;
  text-align: left;
  padding: 4mm 3mm 1mm 0;
  font-family: var(--draft);
  font-weight: normal;
  vertical-align: bottom;
}
.act-signs td { padding: 4mm 3mm 1mm 0; vertical-align: bottom; }
.act-signs .sign-line {
  width: 45mm;
  border-bottom: 0.25mm solid var(--ink, #16202b);
}

/* Замечания составителю про незаполненные реквизиты. .no-print на самом
   элементе уже скрывает его при печати (см. базовые стили печати). */
.act-issues { border-left: 4px solid var(--warn-line, #cfa955); }

/* Оговорка о ценах на самом листе. Мелкая, но печатается: подвал сайта
   при печати скрыт, и без этой строки распечатанная смета выглядит как
   обещание суммы. См. _price_note.html. */
.sheet-price-note {
  margin: 3mm 0 0;
  font-size: 7.5pt;
  line-height: 1.35;
  font-style: italic;
  color: var(--ink-faint, #7a8694);
}

/* ------------------------------------------------------------------
   ПЕЧАТЬ АКТА — в самом конце файла намеренно.

   Базовое правило .act-doc объявлено ниже блока @media print, и при
   равной силе селектора побеждает объявленное позже. Первая попытка
   этой правки стояла наверху и не действовала вовсе: PDF выходил с
   рамкой и прежними отступами, как будто правки не было.
   ------------------------------------------------------------------ */
@media print {
  /* Поля даёт страница (@page act), рамка на бумаге не нужна: она
     значит «вот лист», а лист и так в руках. Двадцать миллиметров
     высоты, которые она съедала, решали, поместится ли акт целиком. */
  .act-doc {
    border: none;
    padding: 0;
    max-width: none;
    background: transparent;
  }
  /* Приложение со снимками — с новой страницы: доказательства отдельным
     листом, а не хвостом под подписями.

     Только когда снимки есть. Строка «Снимков — 0» весит две строчки, и
     отдельная страница ради неё — это лишний лист бумаги в каждом акте
     без фотографий. Проверено печатью: сначала перевод стоял на всём
     приложении, и акт ремонта вырос с одной страницы до двух. */
  .act-annex-photos { page-break-before: always; break-before: page; }
  .act-annex figure { page-break-inside: avoid; break-inside: avoid; }
}

/* ------------------------------------------------------------------
   ЛИСТ ПО ГОСТ, КОГДА СОДЕРЖИМОЕ НЕ ВЛЕЗАЕТ НА ОДНУ СТРАНИЦУ

   Печать показала то, чего не видно на экране. Смета кондиционера
   выходит на три страницы, и лист рассыпался: рамка тянулась одной
   длинной коробкой и резалась по краям страниц, а основная надпись —
   она стоит absolute внизу .sheet — разъезжалась пополам между второй
   страницей и третьей. Заказчик получал верхние строки штампа на одном
   листе, остальные на другом.

   Обещание интерфейса — «Ctrl+P даёт настоящий A4 с рамкой и основной
   надписью» — держалось только пока расчёт короткий.

   КАК УСТРОЕНО ТЕПЕРЬ

   1. Своя именованная страница с полями листа. Поля страницы, в отличие
      от отступов блока, действуют на КАЖДОЙ странице: содержимое само
      не заходит за рамку ни на одной из них.

   2. Рамка — фиксированный элемент по краю поля. Фиксированные элементы
      при постраничной печати повторяются на каждой странице, поэтому
      каждая страница выходит обрамлённым листом.

   3. Основная надпись возвращается в поток и прижимается книзу через
      flex. На одностраничном листе она встаёт в правый нижний угол, как
      и положено; на многостраничном — в конце последней страницы, целой.
      Разрезать её больше нечему.

   ЧЕГО ЗДЕСЬ НЕТ. Графы «Лист» и «Листов» по-прежнему заполняет вызов
   макроса, и на многостраничном выводе они врут. Узнать номер текущей
   страницы средствами CSS нельзя; ГОСТ 2.104 для продолжений требует
   ещё и другую форму штампа (2а), выбрать которую тоже не из чего.
   Правильное решение — не пускать лист за одну страницу, и это уже
   вопрос содержания, а не таблицы стилей.
   ------------------------------------------------------------------ */
@page sheet {
  size: A4 landscape;
  /* Поля = поля листа: слева поле подшивки, прочие по 5 мм. Внутри
     этой области и стоит рамка. */
  margin: 5mm 5mm 5mm 20mm;
}

@media print {
  .sheet {
    page: sheet;
    border: none;
    padding: 0;
    margin: 0;
    width: auto;
    min-height: 0;
    background: transparent;
  }

  /* Рамка — по краю области страницы, на каждой странице.
     :has() ограничивает её расчётными листами: на акте рамки нет. */
  body:has(.sheet)::after {
    content: "";
    position: fixed;
    inset: 0;
    border: 1mm solid #000;
    pointer-events: none;
  }

  .sheet-frame {
    border: none;
    padding: 6mm;
    /* Высота области страницы: 210 − 5 − 5. Нужна, чтобы на коротком
       листе основная надпись ушла вниз, а не повисла под текстом. */
    min-height: 200mm;
    display: flex;
    flex-direction: column;
  }
  .sheet-body { flex: 1 1 auto; }

  .stamp {
    position: static;
    align-self: flex-end;
    margin-top: 6mm;
    page-break-inside: avoid;
    break-inside: avoid;
  }

  /* Перевод страницы после листа больше не нужен: лист теперь и есть
     страница, а лишний перевод давал пустой хвост. */
  .sheet { page-break-after: auto; break-after: auto; }
}

/* ------------------------------------------------------------------
   ВЫХОДНЫЕ ДАННЫЕ НЕПРОВЕРЕННОГО ЛИСТА

   Занимает место основной надписи, но ничего не утверждает о том, кто
   отвечает за документ: обозначение, наименование, дата и источник.
   ------------------------------------------------------------------ */
.sheet-footline {
  display: flex;
  justify-content: space-between;
  gap: 6mm;
  margin: 0 0 4mm;
  padding-bottom: 1.5mm;
  /* Не отрывается от листа в одиночку: строка выходных данных на пустой
     странице выглядит как сбой печати. */
  page-break-inside: avoid;
  break-inside: avoid;
  page-break-before: avoid;
  break-before: avoid;
  border-bottom: 0.35mm solid var(--line-main, #9aa5a0);
  font-family: var(--draft);
  font-style: italic;
  font-size: 8pt;
  color: var(--ink-soft, #3f4d5c);
}
.sheet-footline span:first-child { font-weight: 650; letter-spacing: 0.04em; }

/* ------------------------------------------------------------------
   СОСТОЯНИЕ АКТА — В ШАПКЕ, ПОД СТОРОНАМИ

   Сначала видно, кто подписал, и лишь потом по какому поводу. Печатается
   вместе с актом: до этой правки подтверждение жило непечатаемой
   карточкой, и подтверждённый акт на бумаге не отличался от свежего.
   ------------------------------------------------------------------ */
.act-status {
  margin: 0 0 3mm;
  padding: 2mm 3mm;
  border-left: 1mm solid var(--line-main, #9aa5a0);
  font-size: 9pt;
  line-height: 1.4;
}
.act-status-ok { border-left-color: #2f7d4f; background: rgba(47, 125, 79, 0.06); }
.act-status-dispute { border-left-color: var(--warn-line, #cfa955); background: var(--warn-bg, #f9f0dc); }

/* ------------------------------------------------------------------
   ОСПОРЕННЫЙ АКТ

   Пометка в углу — как штамп «Предварительно» на чертеже. Печатается
   намеренно: акт с замечаниями заказчика не должен выходить на бумагу
   неотличимым от принятого.
   ------------------------------------------------------------------ */
.act-doc { position: relative; }

.act-mark {
  position: absolute;
  top: 0;
  right: 0;
  width: 58mm;
  padding: 2mm 3mm;
  border: 0.5mm solid var(--warn-line, #cfa955);
  background: var(--warn-bg, #f9f0dc);
  transform: rotate(-1.2deg);
}
.act-mark-title {
  font-family: var(--draft);
  font-style: italic;
  font-weight: 700;
  font-size: 9pt;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: #8a5a12;
  margin-bottom: 0.8mm;
}
.act-mark-text { font-size: 6.5pt; line-height: 1.3; color: var(--ink-soft, #3f4d5c); }

/* Заголовок не должен заезжать под пометку */
.act-mark ~ .act-head .act-title { max-width: calc(100% - 64mm); }

/* Место исключённой формулировки о приёмке. Строка обязана читаться
   иначе, чем обычный текст акта: она сообщает об отсутствии приёмки. */
.act-not-accepted {
  padding: 2mm 3mm;
  border-left: 1mm solid var(--warn-line, #cfa955);
  background: var(--warn-bg, #f9f0dc);
}
