/* Геометрия листа и фреймов. Единица — pt (как в InDesign/IDML), без пересчёта в мм.
   Лист = обрезной формат 419.53 × 595.28 pt (A5). Вылет: 8.5 pt (3 мм) сверху/снизу/снаружи, 0 у корешка. */
.sheet {
  position: relative;
  width: var(--w, 419.527559pt);
  height: var(--h, 595.275591pt);
  background: var(--paper, #fff);
  overflow: hidden;              /* по умолчанию режем по обрезному формату */
  font-kerning: normal;
  font-variant-ligatures: common-ligatures;
  text-rendering: geometricPrecision;
  -webkit-font-smoothing: antialiased;
  color: #000;
}
.sheet.show-bleed { overflow: visible; }
.sheet--right.show-bleed { clip-path: inset(calc(-1 * var(--bleed)) calc(-1 * var(--bleed)) calc(-1 * var(--bleed)) 0); }
.sheet--left.show-bleed  { clip-path: inset(calc(-1 * var(--bleed)) 0 calc(-1 * var(--bleed)) calc(-1 * var(--bleed))); }

.sheet > .master, .sheet > .page { position: absolute; inset: 0; }
.sheet > .master > *, .sheet > .page > * { position: absolute; }
.page > style { display: none; }

/* Фреймы */
.tf { display: flow-root; overflow: visible; }
.tf p, .tf li { margin: 0; }
.gf { overflow: hidden; }
.gf > img, .gf > svg { position: absolute; display: block; max-width: none; }
svg.shape { overflow: visible; pointer-events: none; }

/* Табуляция, отступы «как в InDesign» */
.hang { display: inline-block; text-indent: 0; }           /* всё до первого таба при висячем отступе */
.tab { display: inline-block; }                              /* обычный таб — ширина задаётся по месту */
.lead { display: flex; align-items: baseline; }              /* строка с табом-заполнителем (оглавление, характеристики) */
.lead > * { text-indent: 0; }                                  /* отступ первой строки — сдвигом .l, а не каждому куску */
.lead > .l { flex: 0 1 auto; white-space: nowrap; text-align: left; }
.lead > .dots { flex: 1 1 auto; overflow: hidden; white-space: nowrap; min-width: 0.5em; }
.lead > .dots::before { content: var(--leader, ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .'); }
.lead > .r { flex: 0 0 auto; white-space: nowrap; }
.anch { display: inline-block; position: relative; height: 0; vertical-align: baseline; }
.anch > svg, .anch > img { position: absolute; left: 0; overflow: visible; }

/* Линейки абзаца (RuleAbove/RuleBelow) через переменные */
.rule-above { position: relative; }
/* Линейки рисуются заливкой блока в 10 толщин, сжатого scaleY(0.1): рамку 1 pt Chrome округляет до 0.75 pt,
   а сжатый блок даёт честные ~1 pt на любой дробной позиции (замер 03.10.2026). */
.rule-above::before {
  content: ''; position: absolute;
  left: var(--ra-left, 0); right: var(--ra-right, 0);
  top: calc(var(--ra-top, 0pt));
  height: calc(var(--ra-w, 1pt) * 10); background: var(--ra-c, #000);
  transform: scaleY(0.1); transform-origin: 0 0;
}

/* Строки, «запертые» по PDF: перенос возможен только между span.ln (там пробел или мягкий перенос) */
.ln { white-space: nowrap; }
.unlock-lines .ln { white-space: inherit; }   /* режим свободной вёрстки (для новых текстов) */

/* Рамка абзаца InDesign (ParagraphBorder) — линия под заголовком; не влияет на поток */
.pborder-b { position: relative; }
.pborder-b::after {
  content: ''; position: absolute;
  left: var(--pb-l, 0); right: var(--pb-r, 0);
  top: calc(100% - var(--sa, 0pt) + var(--pb-y, 0pt));
  height: calc(var(--pb-w, 1pt) * 10); background: var(--pb-c, #000);
  transform: scaleY(0.1); transform-origin: 0 0;
}

/* Вложенные в текст объекты: «нулевой» блок на базовой линии */
.anch-box { position: absolute; left: 0; }
.anch-box > * { position: absolute; }
/* обычный таб: внутри один пробел (для копирования текста), без overflow — иначе базовая линия уезжает на низ блока */
.tab { white-space: pre; vertical-align: baseline; text-indent: 0; }
/* таб с заполнителем: обрезка точек, высота ровно в строку, прижат к верху строки — строку не раздвигает */
.tab--leader { overflow: hidden; vertical-align: top; height: 1lh; text-align: right; direction: rtl; }
/* абзацы внутри вложенных объектов — span.p (внутри <p> нельзя <p>/<div>) */
.anch-box span.tf, .anch-box span.gf { display: block; }
.tf span.p { display: block; margin-top: calc(var(--sb, 0pt) + var(--dy, 0pt)); padding-bottom: var(--sa, 0pt); }


/* Таблицы InDesign: без зазоров между ячейками, ширины колонок фиксированы */
.idml-table { border-collapse: collapse; border-spacing: 0; table-layout: fixed; }
.idml-table td { padding: 0; }
.idml-table p { margin: 0; }

/* Обтекание (TextWrap InDesign) — невидимые плавающие блоки в начале фрейма */
.wrap, .wrap-spacer { pointer-events: none; }

/* Номера и маркеры списков (Bullets & Numbering InDesign) */
.num { text-indent: 0; }
/* номер «вправо» висит влево от начала строки: блок нулевой ширины с направлением rtl — текст остаётся на базовой линии */
.num--r { display: inline-block; width: 0; direction: rtl; white-space: nowrap; }
.num--r > span { direction: ltr; unicode-bidi: isolate; }
.num--c { display: inline-block; width: 0; white-space: nowrap; }
.num--c > span { display: inline-block; transform: translateX(-50%); }

/* Гайды вылетов (галочка «Вылеты»): красная рамка — граница вылета 3 мм (сверху, снизу, снаружи; у корешка 0),
   голубой пунктир — линия обреза. Только экран, в печать не попадают. */
.sheet.show-bleed::before, .sheet.show-bleed::after { content: ''; position: absolute; pointer-events: none; z-index: 1000; box-sizing: border-box; }
.sheet.show-bleed::after { inset: 0; border: 0.6px dashed #00a3ff; }
.sheet--right.show-bleed::before { top: calc(-1 * var(--bleed)); bottom: calc(-1 * var(--bleed)); left: 0; right: calc(-1 * var(--bleed)); border: 0.8px solid #ff2d2d; border-left: 0; }
.sheet--left.show-bleed::before  { top: calc(-1 * var(--bleed)); bottom: calc(-1 * var(--bleed)); right: 0; left: calc(-1 * var(--bleed)); border: 0.8px solid #ff2d2d; border-right: 0; }
@media print { .sheet::before, .sheet::after { display: none !important; } }
/* бумага под зоной вылета (иначе полупрозрачная графика в вылете ложится на тёмный монтажный стол) */
.sheet.show-bleed { box-shadow: 0 0 0 var(--bleed) var(--paper, #fff); }

/* Разделитель в висячем номере: таб остаётся в тексте (копирование, поиск), но ширины не занимает */
.hang > .sep { white-space: pre; tab-size: 0; }
/* Выключка по формату с принудительными переносами: сегмент перед переносом выключен на всю ширину (как в InDesign) */
.jseg { display: block; text-align-last: justify; }
.jseg + .jseg { text-indent: 0; }
.jseg--last { text-align-last: auto; }
/* Последняя строка абзаца по формату — обычные пробелы (InDesign: Desired 100%); оборачивает движок */
.lastline { word-spacing: normal; }
/* Допуск на ширину строки: строка, которая в InDesign входит впритык, в Chrome не должна переноситься из-за 0.05 pt */
.tf p:not(.lead) { margin-right: -0.1pt; }
