/* =====================================================================
   Der gemeinsame Druckcontainer (Plan 1 C6, js/druck.js)

   Auf dem Bildschirm unsichtbar, beim Drucken das Einzige, was bleibt.
   Die Regel hängt an .pp-druck und steht deshalb nur EINMAL — vorher
   stand sie in sandbox.css und galt nur für die Sandbox; ein zweiter
   Drucker hätte sich selbst ausgeblendet.

   Feste Farben, kein Theme: Papier ist weiß, egal wie die App aussieht.
   ===================================================================== */
/* Auf dem Bildschirm unsichtbar — aber NICHT `display: none`.

   Eine Schrift wird nur geladen, wenn sie in einem gelayouteten Baum
   wirklich gebraucht wird. Unter `display: none` passiert das nie: Der
   Druckcontainer stand also mit fertigem KaTeX-Markup da, und beim
   Drucken fiel jede Formel auf die Ersatzschrift zurück — im PDF eine
   LEERE LÜCKE in Formelbreite, ohne Fehlermeldung. Gemessen mit
   `pdffonts`: keine einzige KaTeX-Schrift im Dokument; sobald dieselbe
   Schrift irgendwo sichtbar auf der Seite stand, waren es zwei.

   Das traf besonders den Klausur-Export: Gedruckt wird aus einer LISTE
   von Titeln, auf der nie eine Formel steht — die Schrift war dort also
   verlässlich kalt. Beim Kursbuch fiel es nur deshalb nicht auf, weil
   der Reiter seine Formeln ohnehin am Bildschirm zeigt.

   Deshalb bleibt der Container im Layout und wird nur weggeklemmt:
   `position: fixed` hält ihn aus dem Textfluss und aus der Scrollweite
   heraus (kein waagerechter Überlauf, der in PrepP schon einmal teuer
   war), `height: 1px` plus `overflow: hidden` zeigen nichts davon.
   Gelayoutet wird trotzdem der ganze Inhalt — und genau das lädt die
   Schriften. */
.pp-druck {
  position: fixed; top: 0; left: 0;
  width: 210mm; height: 1px;
  overflow: hidden; opacity: 0;
  pointer-events: none; z-index: -1;
}
@media print {
  body > *:not(.pp-druck) { display: none !important; }
  .pp-druck {
    position: static; width: auto; height: auto;
    overflow: visible; opacity: 1; z-index: auto;
    display: block; color: #111; background: #fff;
  }

  /* Der body muss beim Drucken WEISS werden, und zwar ausdrücklich.
     Der Container färbt nur sich selbst, und er ist so hoch wie sein
     Inhalt — den Rest der letzten Seite malt der Drucker mit dem
     body-Hintergrund aus. PrepPs Standardtheme ist dunkel
     (--pp-bg: #0d1117), also stand dort ein SCHWARZER BLOCK unter dem
     Text, über den halben Bogen. Gemessen an einem Container mit einem
     einzigen Absatz: Die Füllfarbe war in jedem Theme exakt die
     body-Farbe (dunkel #0d1117, hell #f6f8fa, ohne pp-mode #f4f4f4).

     Das !important ist nötig, weil die Themefarbe als Inline-nahe Regel
     mit höherer Spezifität auf body liegt. Betrifft JEDEN Drucker —
     Kursbuch, Klausur-Export, Sandbox, Karteikarten, Chat. */
  body { background: #fff !important; }
}

/* ---------------- Wasserzeichen (js/druck.js) ----------------

   Hellgrau am Fuß JEDER Seite. Die Wiederholung macht die
   Tabellen-Fußzeilengruppe: Browser setzen <tfoot> in Seitenmedien unter
   jede Seite. Sie fließt mit, deshalb bleibt der Seitenrand gleichmäßig
   und die Zeile kann keinen Text überdecken.

   Die Tabelle ist reines Gerüst — volle Breite, keine Rahmen, keine
   Abstände; sie darf am Bild nichts ändern. `.ppd-blatt > tbody > tr > td`
   ist bewusst eng geschrieben: In den gedruckten Inhalten stehen echte
   Tabellen (Wahrheitstabellen, Maschinentabellen), und die dürfen ihre
   eigenen Rahmen behalten.

   Feste Farben, kein Theme (Muster des Containers): Papier ist weiß. */
.ppd-blatt { width: 100%; border-collapse: collapse; }
/* Auf der LETZTEN Seite folgt eine Fußzeilengruppe dem Inhalt, statt am
   Seitenfuß zu stehen — bei einem kurzen Schluss stünde die Zeile also
   mitten auf dem Bogen. `min-height: 100vh` zieht die Tabelle auf volle
   Seitenhöhe und schiebt den <tfoot> nach unten; bei mehrseitigem Inhalt
   ist die Mindesthöhe kleiner als der Inhalt und damit wirkungslos. */
@media print { .ppd-blatt { min-height: 100vh; } }
.ppd-blatt > tfoot { display: table-footer-group; }
.ppd-blatt > tfoot > tr > td,
.ppd-blatt > tbody > tr > td { border: 0; padding: 0; }
/* Ohne das steht der Inhalt in der Seitenmitte, sobald die Tabelle auf
   volle Seitenhoehe gezogen wird: Eine Tabellenzelle richtet ihren Inhalt
   von Haus aus mittig aus. Erst gemessen, dann gesehen — die Fusszeile sass
   richtig unten, der Text schwebte dafuer auf halber Hoehe. */
.ppd-blatt > tbody > tr > td { vertical-align: top; }
.ppd-blatt > tfoot > tr > td { vertical-align: bottom; }
.ppd-wz {
  text-align: center;
  font-size: 8pt; line-height: 1.2; letter-spacing: .02em;
  color: #a8a8a8;
  padding-top: 6mm;
}

.ppd-titel { font-size: 20px; margin: 0 0 12px; }
.ppd-block {
  border: 1px solid #bbb; border-radius: 8px; padding: 10px 14px;
  margin-bottom: 10px; break-inside: avoid;
}
.ppd-block h2 { font-size: 15px; margin: 0 0 6px; }
.ppd-block h3 { font-size: 13px; margin: 10px 0 4px; }
.ppd-meta { font-size: 11px; color: #555; margin-top: 6px; }

/* Zweispaltiges Blatt — die Abschreibvorlage des Formelraums (C2) und der
   Karteikarten-Bogen (C1). Spalten statt Tabelle: Der Umbruch soll die
   Blöcke ganz lassen, nicht Zeilen zerschneiden. */
.ppd-zwei { column-count: 2; column-gap: 14mm; }
.ppd-zwei .ppd-block { break-inside: avoid; -webkit-column-break-inside: avoid; }

/* Karteikarten zum Ausschneiden: Frage oben, Antwort darunter, gestrichelte
   Trennung — falten statt kleben. */
.ppd-karte { min-height: 34mm; }
.ppd-karte .f { font-weight: 600; }
.ppd-karte .a { border-top: 1px dashed #999; margin-top: 6px; padding-top: 6px; }
