/* =========================================================================
   DER DOKUMENTSTIL — EINE QUELLE FÜR BILDSCHIRM, DRUCK, PDF UND WORD

   JULIA, 28.09.2026 abends: „Die Druckansicht, genauso wie Word und PDF
   müssen beim Speichern das exakt gleiche Layout haben, wie die Vorschau.
   Heute verlieren die Dokumente ihre Formatierung."

   WARUM SIE DAS VERLOREN HABEN. Das Dokument wurde an vier Stellen gestaltet:

       alphatest.css   Grundregeln in px
       alphatest.css   eine zweite Fassung für den Arbeitsmodus, kleiner
       alphatest.css   eine dritte, die im Blatt die erste wiederherstellte
       web.py          `_SEITENSTIL` in pt/mm für HTML, PDF und Word

   Solange der Bildschirm responsiv war, hatte das seinen Grund — ein Fenster
   ist kein Blatt. Seit das Blatt am Bildschirm echte 210 × 297 mm misst, ist
   es nur noch eine Doppelung, und sie fiel auseinander: der Export kannte die
   Abschnittsbalken nicht, die Kreuzfelder nicht, die Schreibfelder nicht.

   DIESE DATEI IST DIE EINZIGE QUELLE. Sie wird am Bildschirm geladen und in
   jeden Export eingebettet. Wer hier etwas ändert, ändert es auf Papier
   genauso wie auf dem Schirm.

   MASSE IN PT UND MM, NICHT IN PX. Das Blatt ist ein Blatt — in beiden Welten
   210 mm breit. Millimeter bedeuten hier dasselbe wie dort; Pixel nicht.
   ========================================================================= */

/* =========================================================================
   DIE BLATTMASSE — EINE ZAHL JE MASS, UND ZWAR HIER

   Sie standen an drei Stellen: `.dblatt` am Bildschirm (20/18 mm),
   `.dblatt` im Druck (174 × 261 mm) und `@page` hier (20/18/16/18 mm).
   Drei Zahlenpaare für dasselbe Blatt — am Bildschirm ergaben sie 174 × 257
   mm, im Druck 174 × 261 mm, und der Master rechnet mit 186 × 268 mm.

   DIE WERTE KOMMEN AUS DEM MASTER, nicht aus einer Vorliebe. Der Vault baut
   jeden der 234 Master mit `@page { size:A4; margin:12mm 12mm 17mm 12mm }`
   und `.sheet { max-width:186mm }`. Gemessen am 29.09.2026: Spido hatte je
   Seite 447 cm², der Master 498 cm² — zehn Prozent weniger Fläche, und
   daraus kamen 131 der 197 Dokumente, die um genau eine Seite abwichen.

   QUERFORMAT: dasselbe Blatt gedreht, dieselben Ränder. 297 − 24 = 273 mm
   Textbreite — genau das, was 2.10.09 im Vault deklariert.
   ========================================================================= */
:root{
  --blatt-breite:210mm;
  --blatt-hoehe:297mm;
  --blatt-rand-oben:12mm;
  --blatt-rand-seite:12mm;
  --blatt-rand-unten:17mm;
  /* Was übrigbleibt - abgeleitet, damit niemand zweimal rechnet. */
  --satz-breite:186mm;
  --satz-hoehe:268mm;
  --satz-breite-quer:273mm;
  --satz-hoehe-quer:181mm;
  /* NUR FUER DEN DRUCK, und nur als Reserve: der Renderer rechnet seine
     Umbrüche in der Bildschirmlage, gedruckt wird in der Drucklage, und
     Chromium setzt denselben Text dort um Bruchteile von Pixeln anders.
     Gemessen über 636 Blätter: bis zu 5,44 mm tiefer auf dem Papier. Der
     Kasten im DRUCK bekommt deshalb 6 mm mehr Tiefe, aus dem leeren
     unteren Rand — die Blatthöhe, die Zahl der Blätter und die Stellung
     jeder Zeile bleiben unberührt. Begründung in Länge:
     `dokument-druck.css`, Messmittel `werkzeuge/zwei-lagen-messen.py`. */
  --druck-reserve:6mm;
}

/* --- Die Seite ---------------------------------------------------------- */
.dokument{
  font-family:"Segoe UI", Calibri, Arial, sans-serif;
  font-size:11pt; line-height:1.45; color:#18181b;
  -webkit-print-color-adjust:exact; print-color-adjust:exact;
}

/* --- Kopf --------------------------------------------------------------- */
.dokument .dkopf{border-bottom:0.8pt solid #b8b8c0; padding-bottom:2.5mm;
  margin:0 0 5mm}
.dokument .dlogo{display:block; max-height:14mm; max-width:52mm;
  object-fit:contain; margin:0 0 3mm}
/* DIE ZEILENHOEHE GEHOERT DEM DOKUMENT UND NICHT DER HUELLE - LAUF 144.

   Die Gleichstandsprobe meldete seit Lauf 140 zwei rote Zeilen: `dnummer`
   19,375 statt 18,125 Pixel, `dtraeger` 18,6 statt 17,4. Gemessen ist die
   Ursache und nicht geraten - `diagnose/lauf144/herkunft.txt` nennt die
   Regel, die gewinnt:

     `.spido p { line-height: var(--spido-lh-weit) }` in `spido-basis.css`,
     und `alphatest.css` setzt diesen Wert auf 1.55 (dort Zeile mit
     `--spido-lh-weit`). Die Regel ist fuer Absaetze der ANWENDUNG gedacht -
     sie bringt auch `max-width:70ch`, eine Farbe und einen Abstand mit. Fuer
     `.dnummer` und `.dtraeger` ueberschreibt das Dokument all das; nur die
     Zeilenhoehe nannte KEINE Regel des Dokuments, und genau sie ist deshalb
     aus der Huelle durchgeschlagen: 1,55 x 12,5px = 19,375px,
     1,55 x 12px = 18,6px. Beides geht genau auf.

   In der neuen Huelle heisst der Rahmen nicht `.spido`, die Regel passt dort
   nicht mehr, und das Dokument faellt auf seinen EIGENEN Wert zurueck -
   `.dokument { line-height: 1.45 }` weiter oben: 1,45 x 12,5 = 18,125 und
   1,45 x 12 = 17,4. Auch das geht auf.

   WARUM 1.45 UND NICHT 1.55, denn beide machten die Probe gruen: 1.45 ist
   der Wert, den dieses Blatt fuer das Dokument SELBST festlegt, und es ist
   der Wert, den das ausgedruckte und ausgegebene Dokument immer schon hatte -
   im Export gibt es keine `.spido`-Huelle, die etwas anderes sagen koennte.
   Die 1,55 am Schirm waren nie eine Festlegung ueber das Dokument, sondern
   eine Regel ueber Absaetze der Anwendung, die zufaellig mitgetroffen hat.
   1.55 hier einzusetzen wuerde diesen Durchschlag festschreiben und diese
   zwei Zeilen zu den einzigen 1,55 im ganzen Dokument machen.

   FOLGE, UND SIE WIRD NICHT VERSCHWIEGEN: die bisherige Ansicht (`?alt=1`)
   setzt diese zwei Zeilen damit um 1,25 bzw. 1,2 Pixel enger. Das ist die
   einzige sichtbare Aenderung, und die eingefrorene Referenz-Baseline der
   Gleichstandsprobe meldet sie - zu Recht.

   NICHT MITERLEDIGT, weil nicht gemessen: dieselbe Regel trifft JEDEN
   `<p>` im Dokumentkoerper, also auch `.dinhalt p` und `.dinhalt li`, fuer
   die dieses Blatt ebenfalls keine Zeilenhoehe nennt (nur einen Abstand).
   Das Messdokument 1.03.04 hat keinen einzigen `.dinhalt p` - die Probe
   kann es dort also nicht sehen. Steht in der Ursachenmatrix. */
.dokument .dtraeger{font-size:9pt; color:#55555f; margin:0 0 3mm;
  line-height:1.45}
.dokument .dnummer{font-size:9.5pt; color:#55555f; margin:0 0 1mm;
  letter-spacing:0.04em; line-height:1.45}
.dokument .dtitel{font-size:16pt; line-height:1.2; font-weight:600; margin:0}
.dokument[style*="--dok-farbe"] .dtitel{color:var(--dok-farbe)}

/* --- Fuß ---------------------------------------------------------------- */
.dokument .dfuss{border-top:0.6pt solid #b8b8c0; margin-top:6mm;
  padding-top:2mm; font-size:8.5pt; color:#55555f}

/* NUR DIE SEITENZAHL — der Fuß eines Briefes (MYS-232).
   Ein Musterschreiben trägt keine Lenkungszeile nach R-095: es geht an einen
   Menschen und liegt in keinem Handbuch. `_dokumentkoerper` baut sein `.dfuss`
   deshalb LEER, damit `dokumentrenderer.js` die Seitenzahl darin ablegen kann.
   Ein Strich über einer leeren Zeile wäre „Fußzeile raus" nicht erfüllt,
   sondern ein Rest davon.
   SPEZIFITÄT EINE STUFE DARÜBER, aus demselben Grund wie oben bei den achtzig
   Pixeln: `.dokument .dfuss` ist (0,2,0), diese Regel (0,3,0). Sie steht in
   JEDEM Blatt, das den Strich setzt — eine Aufhebung in nur einem davon gilt
   dort nicht, wo ein anderes Blatt später lädt. */
.dokument .dfuss.dfuss--nurzahl{border-top:0; padding-top:0; margin-top:0}

/* =========================================================================
   DIE ACHTZIG PIXEL (13.10.2026) — Fußzeile in den Rand, Logo nach rechts

   WOFÜR. Spido baute auf Seite 1 einen schwereren Kopf-und-Fuß-Block als der
   Master: 876 px gegen 956 px Satzhöhe. Gemessen am 13.10.2026 an 1.03.05,
   echte Seite, echter Renderer:

       Fußzeile in den leeren unteren Rand    +37 px JE SEITE   reine Stellung
       Logo absolut nach rechts oben          +10 px            reine Stellung
       beides zusammen                        +51 px

   ES SIND ZWEI STELLUNGSÄNDERUNGEN UND KEINE INHALTSÄNDERUNG. Kein Text
   verschwindet, keine Schriftgröße sinkt, keine Schwelle wird gesenkt, und am
   Seitenbau wird nichts gedreht. Beides ist genau das, was Julia am
   13.10.2026 entschieden hat:

       V4  „DAS LOGO STEHT KÜNFTIG BEI ALLEN HANDBUCHDOKUMENTEN RECHTS OBEN."
           Ihre Entscheidung, nicht mehr ein Vorschlag.
       und zur Fußzeile ihre Anweisung vom 28.09.2026: sie bleibt auf JEDER
       Seite sichtbar, mit dem vorgegebenen Text und der Seitenzahl. Das ist
       weiter erfüllt — sie steht nur dort, wo das Blatt ohnehin leer war.

   WARUM DER UNTERE RAND. `--blatt-rand-unten` ist 17 mm, und dieser Rand war
   LEER. Die Fußzeile stand im Fluss (`.dblatt .dfuss{margin-top:auto}`) und
   nahm ihre 37 px damit vom SATZSPIEGEL, obwohl 17 mm unter ihr unbenutzt
   lagen.

   UND SIE IST NICHT `position: fixed`. Das war sie früher einmal — „eine
   Krücke, die nur beim Drucken wirkte und am Bildschirm nichts zeigte", und
   sie ist deshalb in den Fluss geholt worden. `absolute` AM BLATT ist der
   dritte Weg: am Bildschirm sichtbar, im Druck an derselben Stelle, auf jedem
   Blatt einmal — und ohne Anspruch auf den Satzspiegel. Die alte Krücke steht
   weiter unten weiterhin als Rückfall für den Weg OHNE gebaute Blätter.

   SPEZIFITÄT MIT ABSICHT. `.dblatt .dokument > .dfuss` (0,3,0) und
   `.dokument .dkopf .dlogo` (0,3,0) stehen eine Stufe über den Regeln in
   `dokument-bildschirm.css` (je 0,2,0), die nach dieser Datei geladen wird.
   Ohne diese Stufe würde der Bildschirm die Stellung zurücknehmen und nur
   der Ausdruck sie bekommen — zwei Fassungen desselben Dokuments, genau das,
   was Julia beanstandet hat.
   ========================================================================= */

/* Der Bezug ist das BLATT: `.dblatt` trägt `position:relative`
   (`dokument-bildschirm.css`), und ein absolut gestelltes Kind bezieht sich
   auf dessen Polsterkasten — also auf die Blattkante. Deshalb werden die
   Seitenränder hier ausdrücklich genannt; `left:0` wäre die Blattkante und
   nicht der Satzspiegel. */
.dblatt .dokument > .dfuss{
  position:absolute;
  left:var(--blatt-rand-seite,12mm); right:var(--blatt-rand-seite,12mm);
  bottom:4mm; margin-top:0;
}

/* DAS LOGO RECHTS OBEN (V4). `min-height` ist das Maß des Logos selbst: der
   Kopf wird dadurch nie kürzer als das Bild, das in ihm steht — und nie
   länger als heute, wo das Logo im Fluss dieselbe Höhe beansprucht hat.
   `padding-right` hält Titel und Nummer von ihm frei (52 mm Bildbreite plus
   4 mm Luft). */
.dokument .dkopf{position:relative; padding-right:56mm; min-height:14mm}
.dokument .dkopf .dlogo{position:absolute; top:0; right:0; margin:0}

/* --- Inhalt ------------------------------------------------------------- */
.dinhalt{font-size:11pt; line-height:1.45}
.dinhalt p, .dinhalt li{margin:0 0 2.5mm}
.dinhalt ul, .dinhalt ol{margin:0 0 2.5mm; padding-left:6mm}
.dinhalt .leise{color:#55555f; font-size:9.5pt}

/* DIE AUSFUELLZEILE SIEHT AUS WIE EINE ZEILE (Julia, 23.10.2026 am gebauten
   1.19.01): "Die Marker sind zu schwach sichtbar. Diese sollte nicht kursiv
   und schwarz sein. Es darf keine lilafarbenen Hinterlegungen geben und die
   Adresse von Arbeitgeber und Arbeitnehmer stehen jeweils direkt untereinander
   mit normalem Zeilenabstand."

   DER BESTAND ENTSCHEIDET DIE FRAGE UND NICHT DER GESCHMACK. Gezaehlt am
   23.10.2026 ueber alle Master: 215 `div.hint` in 69 Mastern, davon 187
   AUSFUELLZEILEN und 27 echte Hinweise ("Festlegung des Dienstes"). Die
   Darstellung als Hinweiskasten ist also die Ausnahme, die zur Regel gemacht
   worden war.

   WARUM HIER UND NICHT IN DEN 68 MASTERN: 68 Master anzufassen waere Arbeit an
   der falschen Stelle - und die naechste Vorlage, die eine Ausfuellzeile
   schreibt, haette den Mangel wieder. Und WARUM IN DIESEM BLATT: `dokument.css`
   steht in `DRUCKBLAETTER` nach `claude/spido-system.css`, und
   `.dinhalt .hint` (0,2,0) schlaegt `.hint` (0,1,0) unabhaengig von der
   Ladereihenfolge - dieselbe Ueberlegung wie bei `.dinhalt .fn` weiter unten.
   DAMIT GILT ES FUER BILDSCHIRM, HTML UND PDF AUS EINER ZEILE. Word laedt
   dieses Blatt nicht und hat die Regel nie gehabt - dort stand die Zeile schon
   immer schlicht da (`_WORD_STIL` kennt kein `.hint`); diese Regel bringt die
   drei anderen Ausgaben auf dasselbe Bild, und das war Julias Regel vom
   13.10.2026.

   WAS `.hint` IN DER HUELLE SETZT UND HIER ZURUECKGENOMMEN WIRD: Flexkasten,
   violette Flaeche (`--sp-hint-bg`), Radius, Innenabstand, 16 px Abstand nach
   oben, violette Schrift (`--sp-hint-ink`), 12,5 px. Uebrig bleibt die Zeile. */
/* DIESE REGEL STEHT SEIT DEM 27.10.2026 IN `dokument-huellenbremse.css`,
   und zwar OHNE Schicht. Ihre Aufgabe war nie, Spidos Satz zu setzen, sondern
   eine Regel der HUELLE zurueckzunehmen - und seit MYS-298 dieses Blatt in
   `dokumentgrundlage` legt, gewinnt die Huelle gegen alles, was hier steht.
   Julia hat es am 27.10.2026 gemeldet: die violette Flaeche war wieder da.
   Die Regel ist nicht verschwunden, sie ist eine Ebene hoeher gezogen. */

/* DAS `<i>` UM DIE EINGESETZTEN WERTE FAELLT. Ein eingesetzter Wert ist eine
   Tatsache und keine Betonung. Im Master steht
   `<div class="hint">{{feld:stammdaten.plz}} {{feld:stammdaten.ort}}<i> als
   </i>Arbeitgeber</div>` und im Absenderblock `<i>{{logo}}</i><br><i>{{feld:
   stammdaten.name}}</i>` - beides kursiv, beides keine Betonung.
   GENAU DIESE ZWEI ORTE UND NICHT JEDES `<i>` IM BLATT: `<p>und
   <b><i>Frau · Herrn</i></b></p>` ist eine Auswahl, die der Master MEINT, und
   die bleibt kursiv. Wer hier `.dinhalt i` schreibt, nimmt eine Betonung weg,
   die ein Mensch gesetzt hat. */
.dinhalt .hint i, .dinhalt .adresse i{font-style:normal}

/* DER ECHTE HINWEIS BEHAELT SEIN AUSSEHEN - und er bekommt es HIER zum ersten
   Mal.
   DAS IST EINE BERICHTIGUNG AM AUFTRAG, und sie gehoert hingeschrieben:
   0-JULIA-VIER-AM-23-10-ABEND (1) sagt "Der Unterschied ist schon gebaut:
   `_festlegung.markieren()` setzt die Marke; daran haengt die Sonderdarstellung,
   nicht an `.hint`". NACHGEMESSEN AM 23.10.2026 IST DAS NICHT SO: im ganzen
   Baum gibt es KEINE Regel zu `.festlegung` und keine zu `.festlegung-marke`.
   Die Sonderdarstellung hing bisher ALLEIN an `.hint`. Ohne die Zeile hier
   haetten die 27 echten Hinweise ihr Aussehen mit den 187 Ausfuellzeilen
   zusammen verloren - und das verlangt der Auftrag ausdruecklich NICHT.
   `markieren()` haengt `festlegung` an die Klassenliste des umschliessenden
   Elements, also an genau diese `div.hint`. Es gilt fuer den BILDSCHIRM; der
   Export laesst die markierten Zeilen ganz heraus (`festlegung.ohne`). */
/* Der Kasten des echten Hinweises steht ebenfalls in
   `dokument-huellenbremse.css` - er muss unmittelbar hinter der Regel
   darueber stehen, sonst naehme der Zaun auch ihn weg. */
.dinhalt .hint.festlegung i{font-style:italic}

/* DAS LOGO IN DIE ECKE OBEN RECHTS - UND DIE ANSCHRIFT DARUNTER.
   ZWEI ANSAGEN DERSELBEN JULIA, UND SIE WIDERSPRECHEN SICH NICHT:
   23.10.2026 "Logo in die Ecke oben rechts" (es stand eingerueckt),
   24.10.2026 zu 1.19.03 "Visana und Anschrift gehoert rechts unter den Baum
   gesetzt". Ecke UND Anschrift darunter sind zusammen erfuellbar; falsch war
   nicht das Ziel, sondern der GRIFF - ein aus dem Fluss genommenes Bild plus
   56 mm Polster liess die Anschrift NEBEN dem Baum landen.

   DER BRIEFBOGEN HAT KEINEN `.dkopf`, sein Logo sitzt im ABSENDERBLOCK
   (`<div class="adresse"><i>{{logo}}</i><br>...`). GEZAEHLT UND AM 26.10. VON
   LAUF 584 AM AUSGELIEFERTEN BESTAND NACHGEMESSEN, nicht aus dem Buch
   genommen: von 236 Mastern tragen 19 ein `{{logo}}`, und in 19 von 19 steht
   `<i>{{logo}}</i>` als ERSTES Kind von `.adresse`, mit genau zwei `<br>`
   darin. Der Waehler trifft den ganzen Bestand und raet nicht.

   WARUM `margin-left:auto` UND KEIN POLSTER, UND DAS IST DER EIGENTLICHE
   BEFUND DIESES BAUES: der Master-`stil` setzt `.dinhalt .absender` auf
   `display:flex; justify-content:space-between; position:relative` (19 von 19,
   eine Vorlage, Pruefsumme 14503a7fe276). Die einzige SICHTBARE Flexzelle ist
   `.adresse` - die `schreibmarke` daneben ist `position:absolute` und zaehlt
   nicht mit. EINE EINZIGE ZELLE STEHT BEI `space-between` AM ANFANG, ALSO
   LINKS; das 56-mm-Polster hat die Zelle nur verbreitert und den Text darin
   nach links geholt. Der Block gehoert nach rechts, und das ist bei einer
   Flexzelle `margin-left:auto`. Der Master setzt an `.adresse` keinen linken
   Rand, hier kollidiert nichts.

   `position:relative` AN `.absender` IST HIER GEFALLEN UND NICHT VERGESSEN:
   es stand fuer das aus dem Fluss genommene Logo da, und sonst fuer nichts.
   Die `schreibmarke` braucht denselben Bezug - den gibt ihr der Master selbst
   (`position:relative` in 19 von 19, bei `blatt din` als `absolute`). Eine
   zweite Zusage derselben Sache ist eine zweite Wahrheit (U9).

   DAS `<br>` HINTER DEM LOGO BLEIBT VERSTECKT. Das `<i>` ist jetzt ein Block
   und bricht die Zeile selbst; der Umbruch danach stuende als leere Zeile
   ueber der Anschrift - eine Luecke, die niemand bestellt hat.

   HIER STEHT KEIN MASS UND KEIN ABSTAND, UND DAS IST ABSICHT - BERICHTIGT
   NOCH VOR DEM EINSPIELEN (Lauf 585): der erste Anlauf hat
   `max-height:14mm; max-width:52mm; margin:0` an das Bild geschrieben und
   damit `dokument-bildschirm.css` ueberstimmt, das fuer den BILDSCHIRM
   52/200 px und in der engen Lage 46/180 px setzt. Das waere eine dritte
   Stelle fuer dasselbe Mass gewesen, und auf dem engen Schirm 197 statt
   180 px breit - eine Aenderung, die niemand bestellt hat. Geaendert wird
   NUR `display`: `.dokument .dlogo` macht das Bild zum Block, und ein
   Blockbild folgt KEINEM `text-align` - es stuende wieder links. Als
   `inline-block` folgt es ihm, und Groesse und Abstand bleiben dort, wo sie
   schon stehen.

   DIE HOEHE IST NACHGERECHNET UND GEMESSEN, WEIL `blatt din` EINE DECKE HAT
   (14 der 19):
   `.blatt.din .absender` ist 30 mm hoch. Logo 14 mm + 3 mm Abstand + zwei
   Zeilen zu 9,2 pt x 1,45 (4,7 mm) = 26,4 mm. 3,6 mm Reserve, nichts
   ueberlaeuft; eine DRITTE Anschriftzeile wuerde es (31,1 mm) - deshalb ist
   die Zahl der `<br>` oben mitgemessen und nicht angenommen. */
.dinhalt .adresse{margin-left:auto}
.dinhalt .adresse > i:first-child{display:block}
.dinhalt .adresse > i:first-child img{display:inline-block}
.dinhalt .adresse > i:first-child + br{display:none}

/* DIE FUSSNOTE IM MASTER HEISST `fn` - UND DIESER NAME IST SCHON VERGEBEN.
   Julia am 12.10.2026 zur Pflegevisite: der Kasten „Pflegerischer Zustand des
   Patienten" sieht anders aus als im Master. Gemessen ist es keine fehlende
   Regel, sondern eine NAMENSKOLLISION: `spido-system.css:1524` fuehrt `.fn`
   als Funktionskachel - 94 px breit, Rahmen, Radius, mittig, 10,5 px - und
   dieses Blatt laedt in derselben Seite. 37 Master schreiben `class="fn"`
   (86 Vorkommen), 21 Dokumente im Bestand tragen es. Jede dieser Fussnoten
   erschien damit als Kachel.

   WARUM EINE REGEL UND KEINE UMBENENNUNG: der Mastername gehoert dem Vault,
   und `spido-system.css` gehoert der Uebergabe. Beide umzubenennen waere ein
   Eingriff in fremdes Gut fuer ein Darstellungsproblem. Der Nachkomme-Selektor
   loest es ohne beides: `.dinhalt .fn` (0,2,0) schlaegt `.fn` (0,1,0)
   unabhaengig von der Ladereihenfolge - diese Regel wirkt also auch dann, wenn
   die Blaetter einmal anders eingebunden werden.

   WAS SIE SETZT: genau die Eigenschaften der Kachel zurueck und sonst nichts.
   Das Aussehen ist das von `.hint` daneben - eine kleine, leise Zeile, wie der
   Master sie meint. Keine Farbe, kein Rahmen, keine eigene Schriftfamilie. */
/* Auch diese Regel ist in `dokument-huellenbremse.css` gezogen: `.fn` ist in
   `claude/spido-system.css` eine Flaeche mit Rahmen, und das Zuruecknehmen
   gehoert auf die Ebene der Huelle. */
.dinhalt b, .dinhalt strong{font-weight:600}

/* DIE ABSCHNITTSBALKEN (Julia, 25.09.2026): „Alle QM-Dokumente eines
   Pflegedienstes bilden zusammen ein einheitliches QM-Handbuch." Sie sind das
   sichtbarste Merkmal des Originals — weiße Schrift auf dunkler Fläche. Im
   Export fehlten sie vollständig, weil `_SEITENSTIL` sie nicht kannte und
   Browser Hintergründe standardmäßig nicht drucken. Beides ist behoben:
   die Regel steht hier, und `print-color-adjust: exact` weiter oben. */
.dinhalt h2{font-size:12.5pt; font-weight:600; line-height:1.3;
  margin:6mm 0 2mm; padding:1.2mm 2.4mm; border-radius:0.8mm;
  background:var(--dok-farbe, transparent);
  color:var(--dok-farbe-text, inherit);
  break-after:avoid; page-break-after:avoid}
.dinhalt h3{font-size:11.5pt; font-weight:600; margin:5mm 0 2mm;
  break-after:avoid; page-break-after:avoid}
.dinhalt h4{font-size:11pt; font-weight:600; margin:4mm 0 1.5mm;
  break-after:avoid; page-break-after:avoid}

/* --- Tabellen ----------------------------------------------------------- */
/* DIE TABELLE HAELT DIE BLATTBREITE - IMMER.

   Julia, 29.09.2026, aus der Renderspezifikation: "feste Tabellenbreiten,
   feste Spaltenbreiten ... Die Seite selbst wird niemals responsiv."

   `table-layout: fixed` heisst: die Breite der Tabelle steht fest, und die
   Spalten teilen sich diese Breite. Ohne das rechnet der Browser die Spalten
   aus ihrem Inhalt - und wenn die Master feste Spaltenbreiten vorgeben, die
   zusammen ueber 174 mm ergeben, laeuft die Tabelle ueber den Blattrand
   hinaus. Auf dem Papier fehlt dann die rechte Spalte.

   DAS IST DIE LOESUNG FUER EIN PROBLEM, DAS ICH VORHER AM FALSCHEN ENDE
   ANGEFASST HABE. Erst stand hier `overflow-wrap: anywhere` an den Zellen -
   das haelt die Tabelle im Blatt, aber um den Preis, dass ein Wort mitten
   durchbricht ("nei/n" in der Pflegevisite). Dann `break-word` - da brach
   kein Wort mehr, aber die Tabelle lief wieder hinaus. Beides waren
   Versuche, ueber die Schrift zu regeln, was eine Frage der Geometrie ist.

   Was sich dadurch verschiebt, steht in den Massblaettern unter
   pruefstand-darstellung/ - sie sind mit dieser Aenderung neu gesetzt. */
/* `table-layout: fixed` IST WIEDER DRAUSSEN. Es hat die Tabellen im Blatt
   gehalten, aber um einen Preis: Spalten ohne Breitenangabe wurden gleich
   breit, und in einer Vierzeichenspalte stand "nei / n". Seit
   `_spaltenbreiten()` die festen Breiten der Master auf die Textbreite
   herunterrechnet, braucht es den Zwang nicht mehr - der Browser darf
   wieder aus dem Inhalt rechnen, und eine Spalte mit "nein" bekommt, was
   "nein" braucht. */
/* `table-layout: fixed` FUER JEDE TABELLE.

   Bei `auto` sind Breitenangaben nur Wuensche - der Browser macht eine
   Spalte so breit, wie ihr laengstes Wort verlangt, und die Tabelle laeuft
   ueber den Blattrand (gemessen an 1.13.02: 18 px, und das Dokument hat gar
   keine Breitenangaben - der Ueberlauf kam rein aus dem Inhalt).

   ICH HATTE ES HEUTE SCHON EINMAL ZURUECKGENOMMEN, weil in einer Spalte
   "nei / n" stand. Das lag nicht daran: schuld war `white-space: nowrap`
   auf allen Labels, das die Kreuzfelder ueberlaufen liess und die Tabellen
   daneben zusammendrueckte. Seit das behoben ist, halten beide - mit
   `fixed` und ohne Umbruch mitten im Wort. Nachgemessen an 1.03.04
   (Breitenangaben) und 1.13.02 (keine). */
.dinhalt table{table-layout:fixed}
.dinhalt table{width:100%; max-width:100%;
  border-collapse:collapse; margin:3mm 0; font-size:10.5pt}
.dinhalt :is(th,td){border:0.6pt solid #b8b8c0; padding:1.8mm 2.4mm;
  text-align:left; vertical-align:top}
.dinhalt th{background:#f2f0f7; font-weight:600}
.dinhalt tr{break-inside:avoid; page-break-inside:avoid}
.dinhalt thead{break-after:avoid; page-break-after:avoid}
/* Eine Zelle mit Kästchen oder Feld: mittig, nicht oben. */
.dinhalt td.c{text-align:center; vertical-align:middle}
/* NICHTS IM DOKUMENT IST BREITER ALS DAS BLATT.

   `werkzeuge/darstellung-probe.py` hat am 29.09.2026 gemessen, was bis dahin
   niemand gemessen hat: in 18 von 234 Mastern endet etwas rechts außerhalb
   des Blattes. Fast immer ist es ein langes Wort in einer Tabellenzelle -
   eine Fachbezeichnung, eine Adresse, ein Aktenzeichen. Der Browser macht
   die Spalte so breit, wie das Wort lang ist, und die Tabelle schiebt sich
   über den Rand hinaus. Auf dem Papier fehlt dann die rechte Spalte.

   Umbrechen statt schieben. `anywhere` und nicht `break-word`: eine
   Bezeichnung ohne Trennstelle muss auch dort brechen, wo keine ist -
   lieber mitten im Wort als außerhalb des Blattes. */
/* `break-word` UND NICHT `anywhere`. Der Unterschied ist genau der Fehler,
   den Julia am 29.09.2026 gemeldet hat ("passt nach deinem Umbau wieder
   nicht"): in der Pflegevisite stand die Spaltenueberschrift als

       nei
       n

   `anywhere` erlaubt den Umbruch nicht nur - es aendert die MINDESTBREITE,
   mit der die Tabelle rechnet. Die faellt damit auf ein einzelnes Zeichen,
   und der Browser macht die Spalte so schmal wie moeglich. Aus "nein" wird
   "nei/n", obwohl Platz genug da waere.

   `break-word` laesst die Mindestbreite in Ruhe: die Tabelle rechnet
   weiterhin mit ganzen Woertern, und gebrochen wird nur, wenn ein Wort
   wirklich nicht in seine Spalte passt. Genau das war gemeint. */
.dinhalt :is(td,th){overflow-wrap:break-word}
/* Und ein Feld oder eine Schreiblinie mit fester Breite bleibt im Blatt. */
.dinhalt input.f, .dinhalt .linie, .dinhalt .voll{max-width:100%}
/* Ein langer Verweis bricht ebenfalls, statt hinauszulaufen. */
.dinhalt a{overflow-wrap:anywhere}
.dinhalt td:has(> input.f){vertical-align:middle}

/* --- Felder zum Ausfüllen ----------------------------------------------- */
/* Ein Feld füllt seine Zelle. Es trägt keinen eigenen Rahmen — den hat die
   Zelle schon; zwei Rahmen ineinander sind ein Kästchen im Kästchen. */
.dinhalt input.f,
.dinhalt input[type="text"],
.dinhalt input[type="date"],
.dinhalt input[type="time"]{
  width:100%; min-width:0; box-sizing:border-box;
  border:0; background:none; padding:0.8mm 0;
  font:inherit; font-size:10.5pt; color:inherit}
.dinhalt input.f:focus,
.dinhalt input[type="text"]:focus{outline:1.5pt solid #6d28d9;
  outline-offset:-1.5pt; border-radius:0.8mm}
/* Außerhalb einer Tabelle steht das Feld auf einer Schreiblinie. */
.dinhalt p input.f, .dinhalt li input.f{
  border-bottom:0.5pt solid #c8ced1; border-radius:0}

/* --- Das Freifeld läuft mit (MYS-202, 14.10.2026) ------------------------
   Julia: „das Bemerkungsfeld muss mitlaufen, d.h. größer werden und auch im
   Druck sichtbar."

   Der Renderer macht aus jedem einzeiligen Freifeld ein mehrzeiliges
   (`dokumentrenderer.js`, `wachsfelder`). ES MUSS AUSSEHEN WIE VORHER,
   solange nichts darin steht — deshalb erbt es hier Zeile für Zeile
   dieselben Werte wie `input.f` und bringt NICHTS mit, was ein Textfeld
   sonst mitbringt: keinen Rahmen, keinen Rollbalken, keinen Anfasser, keine
   eigene Zeilenhöhe.

   `overflow:hidden` IST KEIN VERSTECKEN, SONDERN DAS GEGENTEIL: die Höhe
   setzt der Renderer auf `scrollHeight`, es gibt also nichts zu rollen. Ein
   Rollbalken wäre genau der Fehler, den dieser Auftrag behebt — Inhalt, der
   da ist und nicht gedruckt wird. */
/* DIE DOPPELTE ANGABE `[data-f-wachs][data-f-wachs]` IST ABSICHT UND KEIN
   Versehen - sie hebt die Gewichtung auf (0,3,1) und damit ueber
   `alphatest.css:756`. DORT STEHT `.spido.app textarea{min-height:72px}`,
   eine Regel fuer die Eingabefelder der Alpha-Hülle (0,2,1). Bei gleicher
   Gewichtung entscheidet die Ladereihenfolge, und die war gegen uns:

   GEMESSEN (Lauf 235, `seitenmechanik-probe.py`): dasselbe LEERE Freifeld
   war in `?alt=1` 72 px hoch und im Dokumentraum 25 px. 1.04.04 baute
   daraufhin eine 11-seitige und eine 6-seitige Fassung desselben Blattes,
   1.06.02 sechs gegen vier — „ein Renderer" war verletzt, und zwar an
   genau der Stelle, die Julia am 03.10.2026 verlangt hat.

   Es ist kein Fehler der Alpha-Regel: sie gilt für Masken, nicht für
   Dokumentblätter. Ein Freifeld im Blatt ist aber beides nicht — es ist
   Papier. Deshalb wird hier jeder Wert, den eine Hüllenregel mitbringen
   kann, AUSDRÜCKLICH gesetzt statt gehofft: `min-height`, `padding`,
   `font-size`, `line-height`. Was nicht dasteht, bringt die Hülle mit. */
.dinhalt textarea[data-f-wachs][data-f-wachs]{
  display:block; width:100%; min-width:0; box-sizing:border-box;
  min-height:0; height:auto;
  border:0; background:none; padding:0.8mm 0; margin:0;
  font:inherit; font-size:10.5pt; color:inherit;
  line-height:inherit;
  resize:none; overflow:hidden; white-space:pre-wrap; overflow-wrap:anywhere}
.dinhalt textarea[data-f-wachs][data-f-wachs]:focus{
  outline:1.5pt solid #6d28d9; outline-offset:-1.5pt; border-radius:0.8mm}
.dinhalt td:has(> textarea[data-f-wachs]){vertical-align:top}
/* Auf der Schreiblinie außerhalb einer Tabelle - wie beim `input`. */
.dinhalt p textarea[data-f-wachs], .dinhalt li textarea[data-f-wachs]{
  border-bottom:0.5pt solid #c8ced1; border-radius:0}
/* Und `.cb`, aus demselben Grund - die Huelle gibt dem Kaestchen die Masse
   eines Bedienelements. ACHTUNG: `dokument-bildschirm.css` traegt eine ZWEITE
   `.dinhalt .cb`-Regel, die dort BLEIBT - jenes Blatt wird von
   `dokumentregeln-gleichlauf-probe.py` zeichengleich gegen `alphatest.css`
   gehalten, und eine Verschiebung dort waere ein zweiter Mangel. Gemessen ist
   sie unkritisch: sie setzt `display` und Abstaende, keine Flaeche. */
/* DAS KREUZFELD STEHT IN EINER REIHE, SOLANGE NICHTS ANDERES DASTEHT.

   Julia, 29.09.2026: "bei der Pflegevisite verspringen die
   Pflegegradkaestchen. Diese sind vertikal angeordnet und nicht horizontal
   wie in der Vorlage."

   Hier stand `display: grid` ohne Spaltenangabe - die kam aus einem
   `style`-Attribut des Masters, und der Bereiniger wirft `style` an einem
   `div` weg. Beim ersten Speichern fiel sie also weg, und ein Gitter ohne
   Spaltenangabe hat GENAU EINE SPALTE. Fuenf Pflegegrade standen danach
   untereinander.

   Zwei Dinge sind daran geaendert. Der Bereiniger uebersetzt die Angabe in
   eine Klasse (`sp5`, siehe app/bereinigen.py), und die Voreinstellung hier
   ist nicht mehr eine Spalte, sondern so viele, wie in die Breite passen.
   Damit steht ein Kreuzfeld auch dann nebeneinander, wenn die Angabe fehlt
   oder falsch ist - ein Dokument, dem sie abhanden kommt, sieht nicht mehr
   anders aus als die Vorlage. */
.dinhalt .kreuz{display:grid; gap:1mm 3mm; margin:2mm 0 3mm;
  grid-template-columns:repeat(auto-fit, minmax(38mm, 1fr))}
/* Die Spaltenzahl aus dem Master. `1fr` und nicht `max-content`: der Master
   gibt gleich breite Spalten vor, und eine Reihe von Pflegegraden soll
   gleichmaessig stehen. */
.dinhalt .kreuz.sp1{grid-template-columns:1fr}
.dinhalt .kreuz.sp2{grid-template-columns:repeat(2,1fr)}
.dinhalt .kreuz.sp3{grid-template-columns:repeat(3,1fr)}
.dinhalt .kreuz.sp4{grid-template-columns:repeat(4,1fr)}
.dinhalt .kreuz.sp5{grid-template-columns:repeat(5,1fr)}
.dinhalt .kreuz.sp6{grid-template-columns:repeat(6,1fr)}
.dinhalt .kreuz.sp7{grid-template-columns:repeat(7,1fr)}
.dinhalt .kreuz.sp8{grid-template-columns:repeat(8,1fr)}
/* Ein Kreuzfeld darf nicht breiter werden als das Blatt - sonst schiebt eine
   lange Beschriftung die Spalten hinaus. Der Text bricht dann um. */
.dinhalt .kreuz label{min-width:0; overflow-wrap:break-word}
/* `voll` HEISST: UEBER ALLE SPALTEN. Die Klasse steht im Masterbestand an
   Zeilen wie «Sonstiges: ____» - eine Angabe, die eine ganze Zeile braucht
   und nicht ein Drittel davon. Ohne diese Regel bekam sie eine Gitterspalte
   wie jede andere, und die Schreiblinie darin lief 58 px ueber den
   Blattrand hinaus (gemessen an 1.07.10). */
.dinhalt .kreuz .voll{grid-column:1 / -1}
/* Die Schreiblinie in so einer Zeile nimmt, was uebrigbleibt. */
.dinhalt .linie{display:inline-flex; flex:1 1 auto; min-width:0;
  border-bottom:0.5pt solid #c8ced1; margin-left:1.5mm}
.dinhalt label.voll{display:flex; align-items:baseline; gap:1.2mm}
/* EIN KAESTCHEN MIT BESCHRIFTUNG BRICHT UM, WENN ES MUSS.

   Julia, 29.09.2026, zur Pflegevisite: "regelmäßige Kontrolle des
   PflegeverlaufsBeschwerdeVeränderung des Pflegezustands ... der Text läuft
   ineinander bitte ernsthaft die Ansichten so anpassen, dass es stimmt."

   ZWEI FEHLER AUF EINMAL, beide von mir:

   `display: inline-flex` am Label. In einem Flex-Container wird ein blosser
   Textknoten zu einem ANONYMEN Flex-Item - und das hat `min-width: auto`,
   das sich nicht ueberschreiben laesst, weil es kein Element ist, das man
   ansprechen koennte. Der Text schrumpft also nie, egal wie eng die Spalte
   wird: er laeuft aus seinem Rahmen heraus und legt sich ueber den
   Nachbarn. `min-width: 0` am Label half nichts - es galt dem Label, nicht
   dem Textstueck darin.

   `minmax(32mm, max-content)` als Spaltenmass. `max-content` ist die
   Breite, die der Text OHNE Umbruch braucht - vier lange Beschriftungen
   ergaben damit ein Gitter, das breiter ist als das Blatt. Es muss `1fr`
   heissen: die Spalten teilen sich, was da ist.

   Jetzt ist das Label ein Rasterfeld aus zwei Spalten - Kaestchen und Text,
   der Text in einem eigenen Feld, das umbrechen darf. Kein anonymes Item,
   kein `min-width: auto`, kein Ueberlauf.

   `werkzeuge/darstellung-probe.py` misst das ab jetzt ueber `scrollWidth`
   gegen `clientWidth`. Ueber Rechtecke war es nicht zu finden: die Boxen
   ueberlappen gar nicht, nur ihr Inhalt. */
   DRITTER ANLAUF, UND DIESMAL OHNE FLEX UND OHNE GRID. `inline-flex`
   machte den Text zu einem anonymen Item, das nicht schrumpft; `grid` mit
   `auto 1fr` tat dasselbe. Beide Male blieb der Text einzeilig und lief
   ueber den Nachbarn.

   Ein Kaestchen mit Beschriftung ist kein Layoutproblem - es ist ein Absatz
   mit einem haengenden Zeichen davor. Genau so steht es jetzt da:
   `text-indent` zieht die erste Zeile nach links, `padding-left` haelt die
   folgenden auf Hoehe des Textes. Der Text bricht wie jeder andere Text,
   weil er einer ist. */
.dinhalt .kreuz label{display:block; font-size:10.5pt; min-width:0;
  padding-left:5.4mm; text-indent:-5.4mm; overflow-wrap:break-word;
  line-height:1.35}
.dinhalt .kreuz label .cb{margin-right:1.4mm; text-indent:0}
/* HIER STAND `.janein { display: inline-flex }` - UND DAS WAR DER FEHLER,
   den Julia fünfmal gemeldet hat: „Die Tabellenüberschrift steht nach wie vor
   links von der Tabelle."

   `class="janein"` liegt im Masterbestand auf 32 TABELLEN in 12 Dokumenten
   und auf keinem einzigen anderen Element. Die Regel machte aus jeder dieser
   Tabellen einen Flex-Container — und in einem Flex-Container werden `thead`
   und `tbody` zu nebeneinanderliegenden Kindern. Der Kopf stand links, die
   Zeilen rechts, beide vertikal zentriert. Genau ihr Bild, jedes Mal.

   ICH HABE VIERMAL AM FALSCHEN ENDE GESUCHT: erst `break-inside`, dann
   `break-after` am Kopf, dann eine Vorabteilung zu hoher Tabellen, dann den
   ganzen Seitenumbruch von CSS-Spalten auf gebaute Seiten. Kein einziger
   dieser Schritte konnte etwas ausrichten, weil die Tabelle schon zerfallen
   war, bevor irgendein Umbruch stattfand.

   Die Regel kam aus `alphatest.css`, wo sie zusammen mit `.cb` steht — dort
   war sie für ein Ankreuzfeld mit Beschriftung gedacht. `janein` sah nach
   einem solchen Label aus und wurde mit in den Selektor genommen. Nachgesehen
   hat es niemand.

   EINE TABELLE BRAUCHT KEINE ANWEISUNG ZUR AUSRICHTUNG. Sie steht jetzt
   nicht mehr hier. `werkzeuge/master-tabellen.py` prüft ab sofort, dass keine
   Klasse, die im Bestand auf Tabellen liegt, ein fremdes `display` bekommt. */
.dinhalt .txt{margin:0 0 1.5mm}

/* --- Das Schreibfeld ---------------------------------------------------- */
/* JULIA, 28.09.2026 abends: „bei mehreren Zeilen soll der geschriebene Text
   automatisch in die nächste Zeile umbrechen ... Das ganze soll ein Feld sein
   und nicht eine Reihe von Zeilen."

   Vierzig Master tragen `<div class="schreib">` mit einzelnen Zeilenfeldern —
   301 Stück insgesamt. Jede Zeile war ein eigenes Eingabefeld: wer am Ende
   der ersten ankam, tippte ins Leere, statt in die zweite zu rutschen. Beim
   Bauen wird daraus EIN Textfeld mit so vielen Zeilen, wie vorher Linien da
   waren (siehe `_schreibfelder` in web.py). */
.dinhalt .schreibfeld{display:block; width:100%; box-sizing:border-box;
  border:0.6pt solid #c8ced1; border-radius:1mm; background:none;
  padding:1.5mm 2mm; margin:1mm 0 3mm;
  font:inherit; font-size:10.5pt; line-height:1.55; color:inherit;
  resize:none; overflow:hidden}
.dinhalt .schreibfeld:focus{outline:1.5pt solid #6d28d9; outline-offset:-1.5pt}

/* --- Abbildungen -------------------------------------------------------- */
.dinhalt .fig{margin:3mm 0; max-width:100%}

/* EINE FORTGESETZTE LISTE BEGINNT OHNE ABSTAND. Sie ist die untere
   Haelfte derselben Aufzaehlung, nicht eine neue - derselbe Grund wie
   bei `table[data-fortsetzung]`. */
.dinhalt :is(ul,ol)[data-fortsetzung]{margin-top:0}
.dinhalt .fig svg{width:100%; height:auto}
.dinhalt figure{margin:3mm 0}

/* DER GESETZTE SEITENUMBRUCH (MYS-319, 29.10.2026)
   -------------------------------------------------------------------------
   Julia am 29.10.2026: „ich wollte 'Anlage Fahrzeug' auf die nächste Seite
   schieben". Es gab dafür kein Mittel außer Leerzeilen — und Leerraum ist
   Inhalt: er wird mitgezählt, mitgedruckt und verschiebt jeden weiteren
   Umbruch. Im PDF ihres Arbeitsvertrags steht beides als Bild: die Lücke
   und eine vollständig leere Seite 6 von 8.

   DIE MARKE IST IN JEDER AUSGABE UNSICHTBAR, UND DAS IST DIE ZUSAGE. Bildschirm,
   HTML, PDF und Word geben denselben Körper aus (MYS-300 T10); ein Strich,
   der im Ausdruck am Blattfuß steht, wäre genau der sichtbare Fremdkörper,
   den diese Zusage verbietet. Sie trägt deshalb keinen Rand, keine Höhe und
   keinen Abstand — sie ist eine Anweisung an den Seitenbau und sonst nichts.

   UMBROCHEN WIRD SIE NICHT HIER. Wo ein Blatt endet, entscheidet
   `dokumentrenderer.js` (`harterUmbruch` in `setzen()`), und der baut die
   `.dblatt`-Seiten für Bildschirm UND Druck. `break-before` steht hier
   ausdrücklich NICHT: in einem `.dseite` mit `overflow:hidden` wirkt es
   ohnehin nicht, und wo es wirkte, wäre es ein zweiter Seitenmechanismus
   neben dem Renderer (Julia, 03.10.2026). Word ist der einzige Weg ohne
   Renderer; die eine Regel, die es dort braucht, steht in `export._WORD_STIL`.

   SICHTBAR IST SIE GENAU DORT, WO GESCHRIEBEN WIRD. Ein Mensch muss sehen,
   was er gesetzt hat — sonst setzt er zwei und wundert sich über die leere
   Seite. `[contenteditable="true"]` ist der Bearbeitungsmodus selbst
   (`_DOKSKRIPT.bearbeitbar()` setzt ihn an die `.dinhalt.dseite`), also
   dieselbe Angabe, an der auch die Werkzeugleiste aufklappt — und keine
   zweite Marke dafür, dass gerade bearbeitet wird. */
.dinhalt hr.dumbruch{border:0; height:0; margin:0; padding:0}
.dinhalt[contenteditable="true"] hr.dumbruch{
  border-top:1.2pt dashed #8b7fb5; height:0; margin:2.5mm 0}

/* =========================================================================
   DRUCK UND PDF

   Hier steht nichts über das Aussehen — das steht oben und gilt überall.
   Hier steht nur, was Papier vom Bildschirm unterscheidet.
   ========================================================================= */
/* DIE RAENDER KOMMEN AUS DEM MASTER (siehe oben). `@page` kennt keine
   Variablen - hier stehen die Zahlen deshalb ausgeschrieben, und der Block
   oben sagt, woher sie stammen. `werkzeuge/optik-abgleich.py --geometrie`
   prueft, dass beide dasselbe sagen. */
@page{size:A4 portrait; margin:12mm 12mm 17mm 12mm}

/* QUERFORMAT ALS BENANNTE SEITE. Ein Master, der im Vault `@page { size: A4
   landscape }` deklariert, bekommt in Spido `.dblatt.quer` - und diese
   Regel sorgt dafuer, dass auch der Drucker das Blatt dreht. Ohne sie waere
   Querformat eine Bildschirmillusion, die im PDF wieder hochkant steht. */
@page quer{size:A4 landscape; margin:12mm 12mm 17mm 12mm}
.dblatt.quer, .dokument.quer{page:quer}

@media print{
  /* DIE FUSSZEILE AUF JEDER SEITE (Julia: „war die Mastervorgabe, dass auf
     jeder Seite der vorgegebene Text in der Fußzeile steht mit der
     Seitenzahl").

     HIER STAND `position: fixed`, UND DAS WAR EINE KRÜCKE. Chrome und
     Firefox wiederholen ein festgesetztes Element auf jeder gedruckten
     Seite — am Bildschirm aber steht es einmal unten, und die Seitenzahl
     fehlte ganz, weil `counter(page)` nur in den Margin-Boxen von `@page`
     zählt, die kein Browser umsetzt.

     Seit der Seitenbau echte Blätter baut, trägt JEDE SEITE IHRE EIGENE
     FUSSZEILE — mit dem vorgegebenen Text und „Seite n von m" darin, am
     Bildschirm genauso wie auf dem Papier. Eine Krücke weniger, und eine
     Stelle statt zwei.

     Für den Weg ohne Javascript bleibt die alte Regel als Rückfall: steht
     kein gebautes Blatt auf der Seite, wiederholt sich die Fußzeile wie
     bisher. */
  .dokument:not(.dblatt > .dokument) .dfuss{position:fixed; bottom:0;
    left:0; right:0; border-top:0.5pt solid #b8b8c0; margin:0;
    padding-top:1.5mm; font-size:8pt; color:#55555f; background:#fff}
  .dblatt > .dokument .dfuss{font-size:8pt}
  /* Platz, damit der Text nicht unter eine festgesetzte Fußzeile läuft -
     nur dort, wo es eine gibt. */
  .dokument:not(.dblatt > .dokument){padding-bottom:10mm}
  /* Die Farben müssen mitgedruckt werden — sonst fehlen genau die
     Abschnittsbalken, an denen man das Handbuch erkennt. Browser lassen
     Hintergründe beim Drucken standardmäßig weg. */
  .dokument, .dinhalt h2, .dinhalt th{
    -webkit-print-color-adjust:exact; print-color-adjust:exact}
}

/* --- Geleistete Unterschriften AN IHRER STELLE (MYS-305, 29.10.2026) -------
   Julia: "Die Darstellung soll kompakt sein." Und: Pruefwerte und die
   Erlaeuterung zur Signaturart "gehoeren in eine aufklappbare Detailansicht
   ... nicht als stoerende Zusatztexte mitten in das Dokument."

   SIE LIEGT IM `.signame`-SLOT UND ERSETZT DESSEN LEERE LINIE. Deshalb braucht
   sie keinen eigenen Abstand nach oben - der Slot bringt ihn mit.

   48 STATT 70 PIXEL HOCH: der alte Block unter dem Blatt hatte 70, und genau
   der wirkte nach Julias Befund 6 "wie ein zweites Dokument". An der Stelle im
   Text muss die Unterschrift in die Zeile passen, nicht sie sprengen. */
.dinhalt .usig{display:block}
.dinhalt .usig__bild{display:block;height:48px;max-width:260px;
  border-bottom:1px solid #444}
.dinhalt .usig__text{display:block;font-size:11px;line-height:1.35;margin-top:2px}
/* DER AUFKLAPPER TRAEGT KEIN DREIECK UND KEINE FLAECHE: er steht mitten im
   Dokument und soll dort nicht wie ein Knopf aussehen. */
.dinhalt .usig__mehr{font-size:10px;color:#667;margin-top:1px}
.dinhalt .usig__mehr summary{cursor:pointer;display:inline;list-style:none}
.dinhalt .usig__mehr summary::-webkit-details-marker{display:none}
.dinhalt .usig__mehr summary::after{content:" ▸"}
.dinhalt .usig__mehr[open] summary::after{content:" ▾"}

/* Die Sammelstelle fuer Unterschriften OHNE Stelle im Blatt - der Bestand.
   KEINE EIGENE UEBERSCHRIFT (`h2`) mehr: sie war der Grund, warum der Bereich
   wie ein zweites Dokument wirkte. Eine kleine Zeile genuegt. */
.dinhalt .usig__sammel{margin-top:14px;border-top:1px solid #ccc;padding-top:8px}
.dinhalt .usig__sammeltitel{margin:0 0 6px;color:#667}
.dinhalt .usig__sammel .usig{display:inline-block;margin:0 18px 10px 0;
  vertical-align:top}

/* AUF PAPIER IST DER AUFKLAPPER OFFEN ODER GAR NICHT DA. Ein zugeklapptes
   `<details>` im PDF waere ein Nachweis, den niemand oeffnen kann - und ein
   aufgeklapptes an jeder Unterschrift waere genau der Zusatztext, den Julia
   aus dem Dokument heraushaben wollte. Im Druck bleibt deshalb die Zeile mit
   Name und Zeitpunkt, und der Nachweis steht im Protokoll. */
@media print{
  .dinhalt .usig__mehr{display:none}
}
