/* bh_pdf: Hülle für die PDF-Erzeugung — der Chrome-Dienst rendert die URL als Screen
 *
 * Seitenmodell: jedes .pdf-page ist EINE A4-Seite. Mehrere davon = mehrere Seiten.
 * Mit .pdf-page--dynamic darf ein Block über beliebig viele Seiten fließen.
 *
 *   <div class="pdf-page">Startseite</div>
 *   <div class="pdf-page">Seite 2</div>
 *   <div class="pdf-page pdf-page--dynamic">Inhalt gibt Umbrüche selbst vor</div>
 *
 * Die Seitengeometrie kommt ausschließlich aus @page (margin: 0) — die Ränder sitzen
 * als padding auf .pdf-page. Zwei Quellen für Ränder (@page + Renderer-Optionen)
 * addieren sich sonst und verschieben den Satzspiegel.
 * Verifiziert gegen pdf.bakehouse.at: 3 × .pdf-page ⇒ genau 3 A4-Seiten.
 *
 * Anpassung der Geometrie ausschließlich über die Custom Properties in :root —
 * per Projekt-CSS oder inline am <html>. Chrome löst Custom Properties vor dem
 * Layout auf, im PDF-Rendering ebenso wie am Bildschirm.
 * ACHTUNG: In @page selbst sind var() in Chrome unzuverlässig — die Seitengröße
 * bleibt deshalb bewusst literal. --pdf-page-width/-height beschreiben dieselbe
 * A4-Geometrie für die Kinder und müssen bei einem Formatwechsel mitgezogen werden.
 */

:root {
	/* Satzspiegel-Ränder: einzeln überschreibbar, --pdf-margin setzt alle vier */
	--pdf-margin: 15mm;
	--pdf-margin-top: var(--pdf-margin);
	--pdf-margin-bottom: var(--pdf-margin);
	--pdf-margin-x: 12mm;

	/* Seitengeometrie. 296.9mm statt 297mm: siehe .pdf-page */
	--pdf-page-width: 210mm;
	--pdf-page-height: 296.9mm;

	/* Höhe des Satzspiegels — abgeleitet, nicht selbst setzen */
	--pdf-content-height: calc(var(--pdf-page-height) - var(--pdf-margin-top) - var(--pdf-margin-bottom));

	/* Mindestzeilen, die ein Absatz beim Umbruch behalten muss */
	--pdf-orphans: 3;
	--pdf-widows: 3;
}

@page {
	size: A4 portrait;
	margin: 0;
}

html,
body {
	margin: 0;
	padding: 0;
	background: #fff;
}

/* Neutraler Dokument-Wrapper: keine Breite, kein Rand, kein margin: auto —
 * die Geometrie gehört ausschließlich den .pdf-page-Kindern. Kein Flex/Grid hier,
 * erzwungene Umbrüche auf Flex-Items sind in Chrome unzuverlässig. */
.pdf-document {
	display: block;
	margin: 0;
	padding: 0;
	width: auto;
	max-width: none;
}

/* Eine feste A4-Seite.
 * height (nicht min-height): der Inhalt darf die Seite nicht wachsen lassen.
 * box-sizing: border-box ist Pflicht — sonst addiert sich das padding auf die
 * Höhe und jede Seite zieht eine leere Folgeseite nach sich.
 * 296.9mm statt 297mm: Chrome rechnet mm über CSS-Pixel in PDF-Points um, der
 * Rundungsrest genügt für einen Umbruch. Der Abzug ist empirisch, nicht spezifiziert.
 */
.pdf-page {
	box-sizing: border-box;
	width: var(--pdf-page-width);
	height: var(--pdf-page-height);
	padding: var(--pdf-margin-top) var(--pdf-margin-x) var(--pdf-margin-bottom);
	overflow: hidden;
	break-after: page;
	break-inside: avoid;
}

/* Ohne diese Rücknahme erzeugt der Umbruch hinter der letzten Seite eine leere Seite */
.pdf-page:last-child {
	break-after: auto;
}

/* Fließende Seite: Inhalt bestimmt Anzahl und Lage der Umbrüche.
 * Kein height, kein overflow: hidden — beides würde abschneiden statt umbrechen.
 * min-height hält die erste Seite auf voller Höhe (sonst rutscht ein kurzer
 * dynamischer Block direkt hinter die vorige Seite).
 *
 * box-decoration-break: clone sorgt für den oberen/unteren Rand auf JEDER Seite.
 * Ohne clone liegt das padding auf dem Element statt auf der Seite: bei einem
 * fragmentierten Block sitzt es nur am Anfang des ersten und am Ende des letzten
 * Fragments, Seite 2 ff. begännen bündig am Blattrand — und @page { margin: 0 }
 * fängt nichts auf. clone lässt Chrome padding/border an jedem Fragment erneut
 * ansetzen; Höhenangaben sind davon nicht betroffen, min-height bleibt Eigenschaft
 * der Gesamtbox (verifiziert: 4-seitiger Block, jede Seite 15mm oben).
 */
.pdf-page--dynamic {
	height: auto;
	min-height: var(--pdf-page-height);
	overflow: visible;
	break-inside: auto;
	box-decoration-break: clone;
	-webkit-box-decoration-break: clone;
	orphans: var(--pdf-orphans);
	widows: var(--pdf-widows);
}

/* Keine Überschrift allein am Seitenende */
.pdf-page--dynamic :is(h1, h2, h3, h4, h5, h6) {
	break-after: avoid;
	break-inside: avoid;
}

/* Zusammenhängendes nicht zerreißen. Der max-height-Deckel ist nötig, weil
 * break-inside: avoid bei Elementen höher als der Satzspiegel ignoriert wird. */
.pdf-page--dynamic :is(figure, table, blockquote, tr, li) {
	break-inside: avoid;
}

.pdf-page--dynamic img,
.pdf-page--dynamic .bh-background-image {
	break-inside: avoid;
	max-height: var(--pdf-content-height);
}

/* Tabellenkopf auf Folgeseiten wiederholen */
.pdf-page--dynamic thead {
	display: table-header-group;
}

.pdf-page--dynamic tfoot {
	display: table-footer-group;
}

/* Erzwungener Umbruch für Redakteure/Templates an beliebiger Stelle */
.pdf-break-before {
	break-before: page;
}

.pdf-break-after {
	break-after: page;
}

.pdf-no-break {
	break-inside: avoid;
}

/* Einblende-Animationen neutralisieren — Elemente unterhalb des Folds
   stünden sonst mit opacity 0 im PDF. Am Dokument-Wrapper, damit es auch für
   Inhalte außerhalb einer .pdf-page greift. */
.pdf-document,
.pdf-document * {
	opacity: 1 !important;
	transform: none !important;
	transition: none !important;
	animation: none !important;
}

.pdf-document img {
	max-width: 100%;
	break-inside: avoid;
}
