/* ---------- Immo Guy: gemeinsame Bausteine (Version 1510, Vorrat 881 = Teil (c) von 861; Zustaende V1533, Vorrat 894) ----------
   WARUM: Der Nutzer will ueberall dieselben Kacheln, Zeilen, Knoepfe, Karten, Reiter, Dialoge und Formularfelder
   ("UEBERALL auf einen standart", 24.10.2026). Runde 203 hat den Bestand fotografiert und gezaehlt (73 Knoepfe, 44 Karten,
   42 Zeilen, 31 Reiter, 21 Felder, 12 Kacheln auf 64 Seiten) und je Art einen Standard vorgeschlagen; der Nutzer hat alle
   acht so genommen und diese Datei dazu (Vorrat 861 "Entscheidungen"). Die Werte stammen aus dem Mietkonto
   (rent-vertrag-detail.html) bzw. von der Vergleichsseite runde-203-optik-bestand - nichts davon ist neu erfunden; wo diese
   Datei etwas ergaenzen musste (Zustaende, Dunkelmodus, Warnkasten), steht es beim Baustein.

   WIE: Diese Datei steht in jeder Seite mit responsive.css direkt DAHINTER (<link ... bausteine.css?v=...>). Sie aendert
   von sich aus NICHTS an einer Seite:
     - jede Regel beginnt mit einer Klasse mit dem Vorsatz igb- (keine Elementselektoren, kein *, kein :root, keine
       vorhandene Variable wird ueberschrieben). Elemente stehen nur NACH einer igb-Klasse ("igb-feld input").
     - Vorsatz igb- ("Immo Guy Baustein"): ig- ist belegt (.ig-sym in rent-kalender.html, iguy- in components.js und auf
       vielen Seiten); igb- kam am 24.10.2026 in keiner HTML-, JS- oder CSS-Datei des Frontends vor (grep "igb-").
     - Farben nur ueber die Variablen der Seiten (:root jeder Seite; dunkel ist der Grundwert, hell steht unter
       :root[data-theme="light"]), mit dem hellen Wert als Rueckfall, falls eine Seite die Variable nicht kennt.
   Umgestellt wird Seite fuer Seite in den Buendeln 882-888 (je eine eigene Sitzung): Klasse tauschen, die eigene Regel der
   Seite LOESCHEN (nicht ueberschreiben). Vorlage mit jedem Baustein, jedem Zustand und dem HTML-Schnipsel: Musterseite
   C:\Projekte\Immo Guy\Praesentation-Fotos\runde-204-optik-grundlage\muster.html (ausserhalb des Repos); mit den
   Zustaenden aus V1533 (Vorrat 894): ...\runde-208-optik-bausteine\muster.html.

   FARBEN UND KONTRAST (WCAG: ab 4,5 : 1 fuer normale Schrift; Rahmen tragen nie eine Information). Gemessen 24.10.2026.
     Variable      hell       dunkel     Verwendung
     --bg          #FAF6F2    #1E1917    Kachelflaeche, Schrift auf Gold
     --surface     #FFFFFF    #2A2320    Karte, Zeilen-Karte, Zweitknopf, Chip, Dialog
     --surface-2   #F1E7DE    #362D28    Feldgrund, Umschalter-Leiste
     --text        #241C18    #F1EAE5    Text
     --text-dim    #6B5A51    #AC9C93    Beschriftung, Nebentext
     --accent      #94661F    #E0A75C    Gold als Schrift und Linie: Links, Reiter, Rahmen gewaehlter Chips, Fokus
     --accent-flaeche #DFBC84 #E0A75C    Gold als Flaeche: Hauptknopf, aktiver Chip/Umschalter (V1580, components.js)
     --accent-flaeche-text #1E1917 #1E1917  Schrift auf dieser Flaeche
     --gefahr-farbe #BC5237  #D9704F    Terrakotta (Logo): Gefahr-Knopf (V1580), Warnkasten und "Jetzt dran" (V1600)
     --zeichen     #94661F    #E0A75C    Gold fuer Zeichen: Zeilensymbol, Standzeile (V1600, components.js)
     --petrol      #B0472A    #D9704F    Rostrot: nur noch "ok"-Kasten und Seiten, die 958-966 noch umstellen
     --border      #E6D8CC    #473A34    Rahmen, Trennlinie (1,39 : 1 hell / 1,41 : 1 dunkel - nur Linie)
     Paar                                       hell                         dunkel
     Text auf Karte                             #241C18/#FFFFFF 16,74        #F1EAE5/#2A2320 12,97
     Text auf Kachel (--bg)                     #241C18/#FAF6F2 15,57        #F1EAE5/#1E1917 14,62
     Text im Feld (--surface-2)                 #241C18/#F1E7DE 13,73        #F1EAE5/#362D28 11,29
     Beschriftung auf Karte                     #6B5A51/#FFFFFF  6,55        #AC9C93/#2A2320  5,83
     Beschriftung auf Kachel                    #6B5A51/#FAF6F2  6,09        #AC9C93/#1E1917  6,57
     Beschriftung auf Feld / Umschalter         #6B5A51/#F1E7DE  5,37        #AC9C93/#362D28  5,07
     Hauptknopf, aktiver Chip und Umschalter    #1E1917/#DFBC84  9,67        #1E1917/#E0A75C  8,16
     Rahmen gewaehlter Chip auf Seitengrund     #94661F/#FAF6F2  4,67        #E0A75C/#1E1917  8,16
     Gefahr-Knopf (--gefahr-farbe)              #BC5237/#FFFFFF  4,77        #D9704F/#2A2320  4,69
     Zeilensymbol, Standzeile (--zeichen)       #94661F/#FFFFFF  5,02        #E0A75C/#2A2320  7,25   (V1600)
     Warnung/Jetzt dran: Text auf Terrakotta 10 % #241C18/#F8EEEB 14,69     #F1EAE5/#3C2B25 11,28   (V1600)
       Nebentext (--text-dim) darauf            #6B5A51/#F8EEEB  5,74        #AC9C93/#3C2B25  5,07
       Rahmen und Symbol darauf (nur Form)      #BC5237/#F8EEEB  4,19        #D9704F/#3C2B25  4,08
     Jetzt dran Gold (--gold, V1609): Text      #241C18/#F4F0E9 14,74        #F1EAE5/#3C3026 10,74
       Nebentext darauf                         #6B5A51/#F4F0E9  5,77        #AC9C93/#3C3026  4,83
       Rahmen darauf (nur Form)                 #94661F/#F4F0E9  4,42        #E0A75C/#3C3026  6,00
     Hinweis: Text auf Gold-Toenung 8 %         #6B5A51/#F6F3ED  5,91        #AC9C93/#392E25  4,98
     Ok/Warnung: Text auf Rostrot-Toenung 10 %  #241C18/#F7EDEA 14,56        #F1EAE5/#3C2B25 11,28
   V1580 (Vorrat 946, Nutzer 25.10.2026 "rostbraun in den buttons ist zu krass"): Die Flaeche ist hell das Check-Gold
   aus dem Logo #DFBC84 mit dunkler Schrift statt #94661F mit heller - gewaehlt per Foto aus #BB8C5B/#DFBC84/#D9B06A/
   #C8913F; dunkel bleibt #E0A75C. #DFBC84 hat auf dem Seitengrund nur 1,67 : 1, deshalb tragen gewaehlte Chips und
   Umschalter einen Rahmen in --accent (WCAG 1.4.11), und alles ohne Schrift (Punkte, Balken, Schalter) bleibt --accent.
   V1600 (Vorrat 957, Optik 947, Nutzer 26.10.2026 "2: Gold" und "3: A + D"): Zeichen (Symbol, Standzeile) in Gold ueber
   --zeichen, Roetlich nur noch fuer Warnung und "Jetzt dran" - im Terrakotta des Logos (--gefahr-farbe) wie auf dem gewaehlten
   Foto, nicht im Rostrot --petrol. Werte, Knoepfe, Karten-, Dialog- und Blatt-Titel in Inter 600 statt Space Grotesk (die
   Space-Grotesk-Stellen der Seiten folgen in 966). Inter liegt in fonts/ nur bis 600 - 700 wuerde kuenstlich gefettet.
   Rot-Gruen-Schwaeche: Gold und Rostrot unterscheiden sich vor allem im Rotanteil. Deshalb traegt nie die Farbe allein
   eine Bedeutung: "aktiv" ist zusaetzlich GEFUELLT und fett, "Gefahr" und "Warnung" haben zusaetzlich ein Wort oder Symbol,
   "deaktiviert" ist blasser UND zeigt keinen Zeiger.

   ===================================================================================================================
   BAUSTEINE - fuer die Buendel-Sitzungen (882-888)
   ===================================================================================================================
   Neu                                   ersetzt (Bestand Runde 203, Fundstellen auf der Vergleichsseite)
   1 Kachel
     .igb-kacheln > .igb-kachel          .kopf-kacheln/.zeile und .zs-kacheln/.zs-kachel (Mietkonto, Portal), .stat-card
       .igb-kachel-art / -wert           (immobilie-detail, dashboard, rent-dashboard, portfolio, rent-portfolio), .kpi-tile
       .igb-kachel--breit                (rent-objekte, rent-vorgaenge), .vtr-kpi-tile (rent-mieter), .kennzahl-strip
       .igb-kacheln--drei / --vier       (rent-objekt-detail), .kpi-box (admin). Nicht: .quick-tile (dashboard) - das ist ein
                                         Knopf, kein Wert.
       .igb-kachel--lang (+ --fliesstext) .kachel-lang (Mietkonto; Portal "Raeume" mit Fliesstext)          (V1533, 894 f)
       .igb-kachel[href]                 a.igb-kachel (rent-dashboard): Link ohne Unterstrich, Hover, Fokus     (V1533, 894 d)
       .igb-kachel-zusatz,               .kpi-unter und --kpi-spalten (admin)                                   (V1533, 894 k)
       .igb-kacheln--spalten (--igb-spalten)
   2 Zeile
     .igb-wertzeile                      .zeile im Mietkonto, .cost-row (immobilie-detail, energie-sanierung,
       .igb-wertzeile-art / -wert        gesamtkosten-rechner), .zeile (rent-jahresuebersicht), Vorschau-Zeilen
       .igb-wertzeile--summe             .total (immobilie-detail, gesamtkosten-rechner), .summe (rent-jahresuebersicht) (V1533, 894 a)
       .igb-wertzeile--block             .wertzeile-block (Portal-Profil)                                     (V1533, 894 f)
       .igb-wertzeile--ohne-linie        keine Linie unter Titeln (rent-jahresuebersicht; Kartentitel von selbst) (V1533, 894 i)
     .igb-zeilenkarte > .igb-zeile       .einstell-karte/.einstell-zeile (Mietkonto, rent-objekt-detail, Portal), .row (mehr,
       .igb-zeile-kopf, -symbol, -text,  rent-mehr, abo, wissen-recht, profil-einstellungen), .mieter-row (rent-mieter),
       -titel, -stand, -pfeil, -inhalt   .prop-row (portfolio, rent-portfolio), .faq (hilfe), .zeile (rent-kosten - eine
                                         Zeilen-Karte, keine Wertzeile; berichtigt V1533, 894 h)
       .igb-zeile-wert                   .zeile-betrag (rent-kosten): Betrag rechts vor dem Pfeil               (V1533, 894 h)
       .igb-zeile-symbol--gefahr         .igb-zeile-symbol.gefahr (mehr, rent-mehr)                             (V1533, 894 d)
       .igb-zeile-kopf[aria-expanded]    aufklappende Zeile per Knopf (rent-aufgaben); per Skript (.open in hilfe,
                                         glossar, wissen-recht, rent-wissen-recht) jetzt <details>               (V1533, 894 d)
       .igb-zeilenkarte-kopf,            .zeilen-karte-kopf, Karte ohne sichtbare Zeile ausblenden (Portal)     (V1533, 894 m)
       .igb-zeilenkarte--ausblendbar
   3 Knopf
     .igb-knopf.igb-knopf--haupt         .btn-primary (28 Seiten, zehn Fassungen), .save-btn, .modal-btn.primary
     .igb-knopf.igb-knopf--zweit         .btn-secondary, .btn-sekundaer, .btn-zweit, .btn-ghost, .modal-btn, .empf-knopf
     .igb-knopf.igb-knopf--gefahr        .btn-secondary.danger, .modal-btn.danger (mit Symbol .igb-knopf-symbol oder Wort)
     + .igb-knopf--klein                 .btn-drucken und Knoepfe in Zeilen/Werkzeugleisten
     + .igb-knopf--anmelden              .btn-primary der sechs Anmeldeseiten (Ausnahme aus 861)                (V1533, 894 n)
     .igb-knopf-neu                      .add-btn (gestrichelt, in allen sieben Seiten schon wertgleich - nur zusammengelegt)
     .igb-knopf-reihe                    Knoepfe nebeneinander (z. B. Abbrechen + Speichern, .kontakt-knoepfe)
       .igb-knopf-reihe--umbruch         darf umbrechen, je Knopf mind. 130 px (rent-bank)                     (V1533, 894 g)
     Knoepfe untereinander               8 px Abstand von selbst (bisher je Seite eine Zeile)                   (V1533, 894 c)
   4 Karte
     .igb-karte, -titel, -sub            section.karte, .card, .objekt-card, .aufgabe-card, .vergabe-card, .tool-card,
                                         .foerderung-card, .mode-card
     .igb-hinweis (+ --ok, --warnung)    .hinweis, .hint-card (acht Fassungen), .hinweis-box, .info-box, .hm-banner,
       .igb-hinweis-symbol               .detect-box; .ok-box -> --ok; .warnung (#DC6B3D) -> --warnung
     .igb-jetzt > .igb-jetzt-titel,      .mahn-jetzt (Mietkonto "Jetzt dran", V1546): was faellig ist, je Sache eine
       .igb-jetzt-zeile (-was, -stand)   Zeile mit Stand und Hauptknopf                                        (V1599, 957)
       .igb-jetzt--gold                  Form fuer Check (Objektseite, Dashboard): Gold statt Terrakotta       (V1609, 959)
       [hidden] an .igb-hinweis/-jetzt   blendet aus (bis V1624 schlug display:block das Attribut)            (V1625, 960)
   5 Seitenkopf                          bleibt wie er ist (components.js) - kein Baustein hier.
   6 Reiter
     .igb-chips > .igb-chip              .filter-chip, .chip, .mini-chip, .context-chip
       .igb-chip mit <input>             .objekt-chip (rent-unterkonten): gewaehlt = gefuellt                   (V1533, 894 l)
     .igb-umschalter > .igb-umschalter-feld   .segmented/.segment, .tabs/.tab (immobilie-detail), .view-toggle
   7 Dialog
     .igb-dialog-grund > .igb-dialog     .modal-overlay/.modal-card, .modal-title, .modal-text; Knoepfe darin = Knoepfe aus 3.
       .igb-dialog-titel, -text          Breite weiter ueber die Klassen aus components.js: dlg-formular (~600 px),
                                         dlg-auswahl (~480 px), dlg-rueckfrage (~400 px), jeweils ab 700 px Fensterbreite.
   8 Formularfeld
     .igb-feld (label + input/select/    .field label/input/select/textarea (sieben Fassungen), .modal-card input,
       textarea), .igb-feld-reihe,       .suche-feld (rent-kontakte)
       .igb-feld-hilfe, .igb-feld-fehler
       .igb-feld-kaestchen               label.umlage-zeile (rent-kosten): Kaestchen mit Text im Feld           (V1533, 894 j)
     .igb-eingabe (+ --mehrzeilig),      .vn-eingabe/.vn-zeile (rent-vorgaenge): Eingabe ohne Beschriftung      (V1533, 894 e)
       .igb-eingabe-zeile                in einer Zeile mit kleinem Knopf
   9 Blatt                                                                                               (V1599, 957)
     .igb-blatt (<dialog>), -kopf, -zu,  dialog.blatt im Mietkonto (V1547/V1548): Schreiben oder Formular als eigenes
       -titel, -unter, -rumpf, -angaben, Blatt ueber der Seite. Gebaut und geoeffnet mit blatt.js (immoBlatt.html/
       -papier, -fuss, -seite (Papier),  zeigen/merken/zuhoeren); Angaben rechts, Papier links ab 900 px.
       -absatz, -luecke, -aktiv-kopf,
       -abschnitt, -zurueck, -neu
       -fuss > .igb-knopf-reihe,         Knoepfe im Fuss (bisher je Seite: .mahn-knoepfe, #exposeKnoepfe)       (V1632, 962)
       .igb-blatt--schmal                Formular ohne Papier: am Desktop hoechstens 640 px (immoBlatt.formular)  (V1632, 962)

   AUSNAHMEN (Nutzer 24.10.2026 mit den Vorschlaegen bestaetigt) - NICHT umstellen:
     - Anmelde-Knoepfe (login.html .btn-primary/.auth-btn, 14,5 px, 15 px Abstand) und die Eingangsseiten - der grosse
       Knopf steht seit V1533 als Variante .igb-knopf--anmelden hier (eine Regel statt sechs); .auth-btn bleibt in den Seiten
     - Rundgang- und Anmeldekopf (eigene Bildsprache); der Seitenkopf aus components.js bleibt ohnehin
     - Nebenkosten-Tabelle (rent-nebenkosten.html .nko-in, 12,5 px - dort zaehlt die Breite)
     - Rechner-Zeile (.field-row in finanzierungs-, gesamtkosten-, renditerechner), solange die Rechner nicht selbst
       umgebaut werden
     - untere Leiste im Mieterportal (.tab-bar - dort ist sie die Navigation)

   REGEL FUER DIE BUENDEL: Fehlt einem Buendel ein Standard (z. B. Suchfeld .search-box, vier Fassungen in acht Seiten -
   dafuer gibt es noch keine Entscheidung), wird er NICHT hier ergaenzt, sondern als Vorrat-Kandidat gemeldet. Die Buendel
   laufen parallel; aendert eines diese Datei, kollidiert es mit allen anderen. Auch die sechs Dialoge, die components.js
   selbst baut, gehoeren keinem Buendel (components.js ist gemeinsam) - eigener Eintrag.
   ------------------------------------------------------------------------------------------------------------------- */


/* ---------- 1 Kachel ----------
   Mietkonto-Kachel (.kopf-kacheln, rent-vertrag-detail.html ~:77): Beschriftung oben 11 px --text-dim, Wert darunter,
   linksbuendig, Flaeche --bg, Rahmen --border, Ecken 10 px, 7 x 10 px, Raster mit 6 px. Wert 15 px 600 wie die
   Zaehlerstand-Kachel (.zs-kachel-wert ~:390) - vom Nutzer gewaehlt statt 13 px. Ziffern gleich breit, damit Zahlen in
   Spalten untereinander stehen. V1600 (955 "A"): Inter statt Space Grotesk - Nutzer 26.10.2026 zur alten Schrift: "wie mit
   einer Schreibmaschine". Ganze Saetze in einer Kachel tragen --fliesstext (unten). */
.igb-kacheln{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:6px; }
.igb-kacheln--drei{ grid-template-columns:repeat(3, minmax(0,1fr)); }
/* Vier Werte: am Handy zwei je Zeile (vier waeren bei 335 px Inhalt nur 80 px breit), ab 700 px - der Stufe von .phone/
   .shell in responsive.css - alle vier nebeneinander. */
.igb-kacheln--vier{ grid-template-columns:repeat(2, minmax(0,1fr)); }
@media (min-width:700px){
  .igb-kacheln--vier{ grid-template-columns:repeat(4, minmax(0,1fr)); }
}
.igb-kachel{ box-sizing:border-box; display:flex; flex-direction:column; justify-content:flex-start; gap:2px; min-width:0;
  background:var(--bg, #FAF6F2); border:1px solid var(--border, #E6D8CC); border-radius:10px; padding:7px 10px;
  color:var(--text, #241C18); font-family:'Inter', sans-serif; font-size:12.5px; line-height:1.35; text-align:left; }
.igb-kachel-art{ font-size:11px; color:var(--text-dim, #6B5A51); }
.igb-kachel-wert{ font-family:'Inter', sans-serif; font-size:15px; font-weight:600; color:var(--text, #241C18);
  font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
/* Lange Werte (Status, Hinweis) ueber die ganze Breite, Beschriftung links, Wert rechts (Mietkonto .kachel-breit). */
.igb-kachel--breit{ grid-column:1 / -1; flex-direction:row; justify-content:space-between; align-items:center; gap:10px; }
.igb-kachel--breit .igb-kachel-wert{ text-align:right; }
/* V1533 (Vorrat 894 f): lange Kachel - Beschriftung OBEN, Wert darunter ueber die ganze Breite (Mietkonto .kachel-lang:
   Staffel, Befristung, Kuendigungsfrist). Mit --fliesstext ist der Wert ein Absatz statt einer Zahl (Portal "Raeume und
   Ausstattung": Inter 12,5 px 500, Zeilenumbrueche des Vermieters bleiben). Zwei Modifikatoren, weil beide Seiten
   Verschiedenes zeigen - beide Werte stehen so im Bestand, keiner ist neu. */
.igb-kachel--lang{ grid-column:1 / -1; }
.igb-kachel--fliesstext .igb-kachel-wert{ font-family:'Inter', sans-serif; font-size:12.5px; font-weight:500; line-height:1.45;
  white-space:pre-line; }
/* V1533 (Vorrat 894 d): Kachel als Link (Rent-Dashboard V1519) - kein Unterstrich, Rahmen --accent beim Ueberfahren,
   Fokusring wie ueberall. [href] statt a., damit die Regel mit der igb-Klasse beginnt. */
.igb-kachel[href]{ text-decoration:none; cursor:pointer; }
.igb-kachel[href]:hover{ border-color:var(--accent, #94661F); }
.igb-kachel[href]:focus-visible{ outline:2px solid var(--accent, #94661F); outline-offset:2px; }
/* V1533 (Vorrat 894 k): dritte Zeile unter dem Wert (Admin-Kennzahlen .kpi-unter: 10,5 px --text-dim) und ein Raster,
   dessen Spaltenzahl die Seite setzt (--igb-spalten, z. B. aus der Zahl der Kacheln; ohne Angabe 4) - am Handy zwei je
   Zeile wie --vier (Stufe 700 px; der Admin hatte 620 px). */
.igb-kachel-zusatz{ margin-top:2px; font-size:10.5px; line-height:1.4; color:var(--text-dim, #6B5A51); }
.igb-kacheln--spalten{ grid-template-columns:repeat(2, minmax(0,1fr)); }
@media (min-width:700px){
  .igb-kacheln--spalten{ grid-template-columns:repeat(var(--igb-spalten, 4), minmax(0,1fr)); }
}


/* ---------- 2a Wertzeile "Beschriftung - Wert" ----------
   Mietkonto .zeile (~:160): 12,5 px, Beschriftung --text-dim, Wert 600 --text, 7 px oben und unten, Trennlinie --border;
   die erste Zeile einer Gruppe ohne Linie.
   V1533 (Vorrat 894 i): auch direkt unter einem Kartentitel oder dessen Unterzeile keine Linie (bisher nur beim ersten
   Kind; rent-jahresuebersicht hielt dafuer eine eigene Regel). Steht ein eigener Gruppentitel davor, setzt die Seite
   .igb-wertzeile--ohne-linie an die erste Zeile. Nicht "nach allem, was keine Wertzeile ist": eine eingeschobene Unterliste
   (Einheiten unter "Wohnflaeche", immobilie-detail) soll die Linie zur naechsten Zeile behalten.
   V1533 (Vorrat 894 b): Die Beschriftung darf nicht schmaler werden als ihr laengstes Wort - "Energieeffizienzklasse" lief
   bei 375 px unter den Wert (foerderinterview, angebot-anfordern hielten flex-shrink:0). Statt flex-shrink:0 (das wuerde
   eine lange Beschriftung aus mehreren Woertern gar nicht mehr umbrechen) faellt min-width:0 an der Beschriftung weg; der
   Wert gibt nach und bricht wie bisher ueberall um. */
.igb-wertzeile{ box-sizing:border-box; display:flex; justify-content:space-between; align-items:baseline; gap:10px;
  padding:7px 0; border-top:1px solid var(--border, #E6D8CC); font-family:'Inter', sans-serif; font-size:12.5px;
  line-height:1.4; color:var(--text, #241C18); }
.igb-wertzeile:first-child, .igb-karte-titel + .igb-wertzeile, .igb-karte-sub + .igb-wertzeile,
.igb-wertzeile--ohne-linie{ border-top:none; }
.igb-wertzeile-art{ color:var(--text-dim, #6B5A51); }
.igb-wertzeile-wert{ font-weight:600; color:var(--text, #241C18); text-align:right; min-width:0; overflow-wrap:anywhere; }
/* V1533 (Vorrat 894 a): Summenzeile - Gold, 14,5 px, fett, 4 px Abstand nach oben. Bisher drei Fassungen: immobilie-detail
   Gold 14,5 px, gesamtkosten-rechner Gold 15 px (+4 px), rent-jahresuebersicht Textfarbe fett mit Linie in --text-dim.
   Gewaehlt: der Vorschlag aus 894 (a) - 14,5 px ist die Groesse, die schon zwei Seiten (immobilie-detail, Jahreswahl der
   Kostenseiten) fuer eine hervorgehobene Zahl nutzen; die Linie bleibt die normale Trennlinie. Gold traegt die Bedeutung
   nicht allein: Groesse und Gewicht unterscheiden die Summe auch ohne Farbe. Kontrast: hell #94661F auf #FFFFFF 5,02 : 1,
   dunkel #E0A75C auf #2A2320 7,25 : 1. */
.igb-wertzeile--summe{ margin-top:4px; font-weight:600; }
.igb-wertzeile--summe .igb-wertzeile-art, .igb-wertzeile--summe .igb-wertzeile-wert{ color:var(--accent, #94661F); font-size:14.5px; }
/* V1533 (Vorrat 894 f): lange Wertzeile - Beschriftung oben, Wert als Absatz darunter (Portal-Profil "Raeume und
   Ausstattung", V1258/V1518: 500, Zeilenumbrueche bleiben, linksbuendig). */
.igb-wertzeile--block{ display:block; }
.igb-wertzeile--block .igb-wertzeile-art{ display:block; margin-bottom:3px; }
.igb-wertzeile--block .igb-wertzeile-wert{ display:block; font-weight:500; line-height:1.45; white-space:pre-line; text-align:left; }


/* ---------- 2b Zeilen-Karte ----------
   Mietkonto .einstell-karte/.einstell-zeile (~:118-149, Muster aus rent-objekt-detail.html V1194): EINE Karte, darin
   Zeilen mit Symbol (--zeichen, V1600), Titel 13,5 px 500, Standzeile 11,5 px (--zeichen; "nichts eingetragen" neutral) und Pfeil,
   13 x 14 px. Die Zeile kann ein <details> (aufklappen, .igb-zeile-kopf = <summary>), ein <a> oder ein <button> sein
   (dann traegt dasselbe Element .igb-zeile UND .igb-zeile-kopf).
   Trennlinie haengt an jeder Zeile oben; margin-top:-1px schiebt sie bei der ersten sichtbaren Zeile unter den
   Kartenrand (overflow:hidden schneidet sie ab) - stimmt auch, wenn die Seite die ersten Zeilen ausblendet. */
.igb-zeilenkarte{ box-sizing:border-box; background:var(--surface, #FFFFFF); border:1px solid var(--border, #E6D8CC);
  border-radius:14px; overflow:hidden; margin-bottom:16px; color:var(--text, #241C18); }
.igb-zeile{ box-sizing:border-box; display:block; border-top:1px solid var(--border, #E6D8CC); margin-top:-1px; }
.igb-zeile-kopf{ box-sizing:border-box; display:flex; align-items:center; gap:11px; width:100%; padding:13px 14px; margin:0;
  cursor:pointer; list-style:none; background:none; border:none;
  color:var(--text, #241C18); font-family:'Inter', sans-serif; font-size:13.5px; text-align:left; text-decoration:none;
  -webkit-appearance:none; appearance:none; }
/* Als <button>/<a> traegt dasselbe Element die Linie (.igb-zeile) - der Kopf-Reset oben darf sie nicht wegnehmen. */
.igb-zeile.igb-zeile-kopf{ border-top:1px solid var(--border, #E6D8CC); margin-top:-1px; }
.igb-zeile-kopf::-webkit-details-marker{ display:none; }
.igb-zeile-kopf:focus-visible{ outline:2px solid var(--accent, #94661F); outline-offset:-3px; border-radius:12px; }
.igb-zeile-symbol{ width:18px; height:18px; flex-shrink:0; color:var(--zeichen, #94661F); }
.igb-zeile-text{ flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
/* V1533 (Vorrat 894 m): lange Einzelwoerter (Stichworte des Vermieters, Belegnamen) brechen um, statt die Zeile zu
   sprengen - bisher lokal im Portal und in rent-kosten. */
.igb-zeile-titel{ font-size:13.5px; font-weight:500; color:var(--text, #241C18); overflow-wrap:anywhere; }
.igb-zeile-stand{ font-size:11.5px; line-height:1.4; color:var(--zeichen, #94661F); overflow-wrap:anywhere; }
.igb-zeile-stand:empty{ display:none; }
.igb-zeile-stand--neutral{ color:var(--text-dim, #6B5A51); }
.igb-zeile-pfeil{ width:16px; height:16px; flex-shrink:0; color:var(--text-dim, #6B5A51); transition:transform .15s; }
/* Offen: als <details> ueber [open]; V1533 (Vorrat 894 d) auch als Knopf, der einen Bereich anderswo aufklappt
   (aria-expanded="true", rent-aufgaben). Pfeil nach unten (m6 9 6 6 6-6), offen nach oben - wie im Mietkonto. */
.igb-zeile[open] > .igb-zeile-kopf .igb-zeile-pfeil,
.igb-zeile-kopf[aria-expanded="true"] .igb-zeile-pfeil{ transform:rotate(180deg); }
.igb-zeile-inhalt{ padding:0 14px 14px; }
/* V1533 (Vorrat 894 d): Gefahr-Zeile ("Abmelden" in mehr/rent-mehr) - Symbol in --warn-text (hell #9A520F auf #FFFFFF
   5,85 : 1, dunkel #DB7C22 auf #2A2320 5,09 : 1); das Wort traegt die Bedeutung, das Symbol nur die Form. */
.igb-zeile-symbol--gefahr{ color:var(--warn-text, #9A520F); }
/* V1533 (Vorrat 894 h): Betrag rechts vor dem Pfeil (rent-kosten .zeile-betrag): 14 px 600 (seit V1600 Inter), bricht nicht um,
   steht oben auf Hoehe des Titels. */
.igb-zeile-wert{ align-self:flex-start; white-space:nowrap; font-family:'Inter', sans-serif; font-size:14px;
  font-weight:600; color:var(--text, #241C18); }
/* V1533 (Vorrat 894 m): Kopf einer Zeilen-Karte - Titel und Satz oben, die Zeilen darunter (Portal-FAQ). Unter dem Kopf
   bleibt die Trennlinie der ersten Zeile sichtbar. Titel/Satz = .igb-karte-titel/.igb-karte-sub. */
.igb-zeilenkarte-kopf{ padding:14px 14px 10px; }
.igb-zeilenkarte-kopf > .igb-karte-sub{ margin-bottom:0; }
.igb-zeilenkarte-kopf + .igb-zeile{ margin-top:0; }
/* V1533 (Vorrat 894 m): Zeilen-Karte, die verschwindet, wenn keine Zeile sichtbar ist (Portal: ohne laufenden Vertrag
   blendet die Seite die Zeilen per style="display:none" aus). Nur mit dieser Klasse - eine Karte, deren Zeilen erst ein
   Skript einsetzt oder die in Huellen stehen, bliebe sonst unsichtbar. */
.igb-zeilenkarte--ausblendbar:not(:has(> .igb-zeile:not([style*="none"]))){ display:none; }


/* ---------- 3 Knopf ----------
   Masse aus dem Mietkonto-Hauptknopf (.btn-primary ~:188): 13,5 px 600 (seit V1600 Inter), 12 px, Ecken 10 px, volle Breite.
   Zweitknopf: gleiche Masse, --surface mit Rahmen --border, Text --text - bewusst NICHT rostrot umrandet wie im Mietkonto
   (.btn-sekundaer), denn so sieht heute der Loeschen-Knopf aus; beide waeren nur am Farbton zu unterscheiden.
   Gefahr-Knopf: wie der Zweitknopf, Text und Rahmen --petrol (#B0472A 5,55 : 1 statt heute #DC6B3D 3,38 : 1), immer mit
   Symbol (.igb-knopf-symbol, z. B. Muelleimer) oder eindeutigem Wort ("Loeschen").
   Zustaende (ergaenzt, im Mietkonto nicht festgelegt): gedrueckt = 1 px tiefer (aendert keine Farbe); Fokus = Ring in
   --accent wie ueberall in der App; deaktiviert = Deckkraft 0,55 und kein Zeiger (Wert von .btn-drucken:disabled).
   V1580 (Vorrat 946): Hauptknopf hell #DFBC84 mit Schrift #1E1917 (9,67 : 1) statt #94661F mit #FAF6F2 (4,67 : 1);
   Gefahr-Knopf hell im Logo-Terrakotta #BC5237 (--gefahr-farbe, 4,77 : 1 auf --surface) statt --petrol #B0472A. */
.igb-knopf{ box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; gap:6px; width:100%;
  margin:0; padding:12px; border:1px solid transparent; border-radius:10px; cursor:pointer;
  font-family:'Inter', sans-serif; font-weight:600; font-size:13.5px; line-height:1.25; text-align:center;
  text-decoration:none; -webkit-appearance:none; appearance:none; }
.igb-knopf:focus-visible{ outline:2px solid var(--accent, #94661F); outline-offset:2px; }
.igb-knopf:active:not(:disabled):not([aria-disabled="true"]){ transform:translateY(1px); }
.igb-knopf:disabled, .igb-knopf[aria-disabled="true"]{ opacity:0.55; cursor:default; }
.igb-knopf--haupt{ background:var(--accent-flaeche, #DFBC84); border-color:var(--accent-flaeche, #DFBC84); color:var(--accent-flaeche-text, #1E1917); }
.igb-knopf--zweit{ background:var(--surface, #FFFFFF); border-color:var(--border, #E6D8CC); color:var(--text, #241C18); }
.igb-knopf--gefahr{ background:var(--surface, #FFFFFF); border-color:var(--gefahr-farbe, #BC5237); color:var(--gefahr-farbe, #BC5237); }
/* Kleiner Knopf fuer Zeilen und Werkzeugleisten (Wert von .btn-drucken): 12 px, 8 x 12 px, Ecken 8 px, so breit wie sein
   Text. Wird mit einer der drei Arten kombiniert ("igb-knopf igb-knopf--zweit igb-knopf--klein"). */
.igb-knopf--klein{ width:auto; padding:8px 12px; border-radius:8px; font-family:'Inter', sans-serif; font-weight:500; font-size:12px; }
.igb-knopf--klein.igb-knopf--haupt{ font-weight:600; }
.igb-knopf-symbol{ width:16px; height:16px; flex-shrink:0; }
.igb-knopf--klein .igb-knopf-symbol{ width:14px; height:14px; }
/* Hinzufuegen: der gestrichelte Knopf, wie er heute in allen sieben Seiten steht (.add-btn, rent-aufgaben.html ~:63). */
.igb-knopf-neu{ box-sizing:border-box; display:flex; align-items:center; justify-content:center; gap:6px; width:100%;
  margin:0 0 16px; padding:14px; background:var(--surface, #FFFFFF); border:1px dashed var(--border, #E6D8CC);
  border-radius:14px; color:var(--text-dim, #6B5A51); cursor:pointer; font-family:'Inter', sans-serif; font-weight:500;
  font-size:13.5px; text-align:center; -webkit-appearance:none; appearance:none; }
.igb-knopf-neu:focus-visible{ outline:2px solid var(--accent, #94661F); outline-offset:2px; }
.igb-knopf-neu:disabled{ opacity:0.55; cursor:default; }
/* Knoepfe nebeneinander, gleich breit (Mietkonto .kontakt-knoepfe ~:131); der Hauptknopf steht rechts. */
.igb-knopf-reihe{ display:flex; gap:8px; margin-top:12px; }
.igb-knopf-reihe > .igb-knopf{ flex:1; width:auto; min-width:0; }
/* V1533 (Vorrat 894 g): Knopfreihe, die am Handy umbrechen darf ("Verbindung pruefen" in rent-bank passt nicht in die
   halbe Breite): jeder Knopf mindestens 130 px (Wert aus rent-bank), sonst naechste Zeile. Als Modifikator, weil eine
   Reihe mit drei kurzen Knoepfen (je ~100 px am Handy) sonst ohne Not umbraeche. */
.igb-knopf-reihe--umbruch{ flex-wrap:wrap; }
.igb-knopf-reihe--umbruch > .igb-knopf{ min-width:130px; }
/* V1533 (Vorrat 894 c): Knoepfe UNTEREINANDER (volle Breite, z. B. Speichern / Loeschen / Abbrechen) halten 8 px Abstand -
   bisher je Seite eine wortgleiche Zeile (rent-aufgaben, rent-kalender, rent-nachrichten, rent-nutzer-nachrichten,
   rent-nutzer-dashboard, admin, profil-einstellungen, angebot-anfordern; onboarding 12 px). Nicht in einer Knopfreihe
   (nebeneinander) und nicht fuer kleine Knoepfe (die stehen in Zeilen nebeneinander). Ausnahme von "jede Regel beginnt
   mit igb-": der Elternteil ist beliebig, das betroffene Element ist immer ein .igb-knopf. Gewicht bewusst nur zwei
   Klassen (:where zaehlt nicht): Ein Behaelter, der seine Knoepfe selbst mit gap oder nebeneinander stellt (rundgang
   .probier-knoepfe), schaltet den Abstand mit "<behaelter> > .igb-knopf + .igb-knopf{ margin-top:0 }" ab. */
:where(:not(.igb-knopf-reihe)) > .igb-knopf + .igb-knopf:where(:not(.igb-knopf--klein)){ margin-top:8px; }
/* V1533 (Vorrat 894 n): grosser Anmelde-Knopf - die Ausnahme aus 861 (Anmelde-Knoepfe) als Variante statt wortgleich in
   sechs Seiten (login, onboarding, einladung-annehmen, email-bestaetigen, passwort-zuruecksetzen, zustimmung): 14,5 px,
   15 px Polster (14 px + 1 px Rahmen des Bausteins), Ecken 12 px. Mit --haupt kombinieren. Deaktiviert wie alle Knoepfe
   (0,55 statt bisher 0,5 bzw. 0,6). Zeilenhoehe "normal" wie bisher (ein <button> erbt sie nicht von der Seite). */
.igb-knopf--anmelden{ padding:14px; border-radius:12px; font-size:14.5px; line-height:normal; }


/* ---------- 4a Karte ----------
   Mietkonto section.karte (~:60): --surface, Rahmen --border, Ecken 14 px, 16 px; Titel 15 px 600 (seit V1600 Inter),
   Unterzeile 11,5 px --text-dim. Auf fuenf Seiten schon wertgleich. */
.igb-karte{ box-sizing:border-box; background:var(--surface, #FFFFFF); border:1px solid var(--border, #E6D8CC);
  border-radius:14px; padding:16px; margin-bottom:16px; color:var(--text, #241C18); }
.igb-karte-titel{ font-family:'Inter', sans-serif; font-size:15px; font-weight:600; margin:0 0 4px; color:var(--text, #241C18); }
.igb-karte-sub{ font-size:11.5px; line-height:1.5; color:var(--text-dim, #6B5A51); margin:0 0 12px; }


/* ---------- 4b Hinweiskasten ----------
   Mietkonto .hinweis (~:199): 11,5 px, 10 x 12 px, Ecken 10 px, goldene Toenung, Rahmen --accent, Text --text-dim.
   Die Toenung haengt hier an --accent (dunkel wie bisher rgba(224,167,92,0.08); hell 8 % von #94661F statt vom dunklen
   Gold - Unterschied kaum sichtbar, aber im Hellen dieselbe Farbfamilie wie der Rahmen).
   Geschwister (Vorschlag 4: "ok" mit Rostrot-Toenung, "Warnung" mit Wort oder Symbol):
     --ok       Rostrot-Toenung 10 %, Rahmen --petrol, Text --text. Nicht Rostrot als Schrift: dunkel nur 4,08 : 1 auf der
                Toenung (unter 4,5).
     --warnung  wie --ok, dazu ein 4 px breiter Balken links (Form-Unterschied fuer die Rot-Gruen-Schwaeche) und PFLICHT ein
                Wort oder Symbol am Anfang (.igb-hinweis-symbol oder <b>Achtung:</b>) - nie nur Farbe.
   color-mix ist schon in der App im Einsatz (rent-vertrag-detail.html .zahl-punkt); Browser ohne color-mix nehmen die
   rgba-Zeile davor. */
.igb-hinweis, .igb-jetzt{ box-sizing:border-box; display:block; margin-top:10px; padding:10px 12px; border:1px solid var(--accent, #94661F);
  border-radius:10px; background:rgba(224,167,92,0.08); background:color-mix(in srgb, var(--accent, #94661F) 8%, transparent);
  color:var(--text-dim, #6B5A51); font-family:'Inter', sans-serif; font-size:11.5px; line-height:1.5; }
.igb-hinweis--ok, .igb-hinweis--warnung, .igb-jetzt{ border-color:var(--petrol, #B0472A); background:rgba(217,112,79,0.1);
  background:color-mix(in srgb, var(--petrol, #B0472A) 10%, transparent); color:var(--text, #241C18); font-size:12px; }
.igb-hinweis--warnung, .igb-jetzt{ border-left-width:4px; }
.igb-hinweis-symbol{ width:14px; height:14px; flex-shrink:0; vertical-align:-2px; margin-right:6px; color:var(--petrol, #B0472A); }
/* V1600 (Optik 947 "Gold"): Warnung und "Jetzt dran" im Terrakotta des Logos (--gefahr-farbe, hell #BC5237, dunkel #D9704F)
   statt Rostrot - wie auf dem gewaehlten Foto. Kontraste im Kopf der Datei; Rahmen und Symbol sind nur Form (4,19 / 4,08 : 1
   auf der Toenung, ueber 3 : 1), die Bedeutung tragen Wort und Balken. */
.igb-hinweis--warnung, .igb-jetzt{ border-color:var(--gefahr-farbe, #BC5237);
  background:color-mix(in srgb, var(--gefahr-farbe, #BC5237) 10%, transparent); }
.igb-hinweis--warnung .igb-hinweis-symbol{ color:var(--gefahr-farbe, #BC5237); }
.igb-hinweis:not(.igb-hinweis--ok):not(.igb-hinweis--warnung) .igb-hinweis-symbol{ color:var(--accent, #94661F); }


/* ---------- 4c "Jetzt dran" (V1599, Vorrat 957) ----------
   Aus dem Mietkonto (.mahn-jetzt, rent-vertrag-detail.html V1546, Variante B): was jetzt faellig ist, als Kasten mit Titel
   und je Sache einer Zeile - fett, was dran ist ("September 2026 · Mahnung"), darunter der Stand ("790,00 € offen seit
   03.09.2026 · Erinnerung verschickt am 15.10.2026") und der Hauptknopf, der die Sache direkt oeffnet. Der Kasten ist der
   Warnkasten aus 4b (Rahmen mit Balken links, Toenung, Text --text - die Bedeutung tragen Titel, Wort und Knopf, nicht die
   Farbe); hier nur der Aufbau darin. Zwischen zwei Zeilen eine Linie in 30 % des Rahmentons.
   Zwei Formen (V1609): ohne Zusatz Terrakotta wie der Warnkasten - fuer Faelliges, das eine Mahnung ist (Mietkonto);
   .igb-jetzt--gold in Gold - fuer den naechsten Schritt in Check (Objektseite, Dashboard). Aufbau gleich.
     <div class="igb-jetzt"><div class="igb-jetzt-titel">Jetzt dran</div>
       <div class="igb-jetzt-zeile"><div><b class="igb-jetzt-was">…</b><span class="igb-jetzt-stand">…</span></div>
         <button class="igb-knopf igb-knopf--haupt">…</button></div></div> */
.igb-jetzt-titel{ font-weight:600; font-size:12.5px; }
.igb-jetzt-zeile{ margin-top:8px; }
.igb-jetzt-zeile + .igb-jetzt-zeile{ padding-top:10px; border-top:1px solid rgba(217,112,79,0.3);
  border-top-color:color-mix(in srgb, var(--gefahr-farbe, #BC5237) 30%, transparent); }
.igb-jetzt-was{ display:block; font-size:13.5px; color:var(--text, #241C18); }
.igb-jetzt-stand{ display:block; font-size:12px; color:var(--text-dim, #6B5A51); margin-top:2px; line-height:1.45; }
.igb-jetzt-zeile .igb-knopf{ margin-top:8px; }
/* V1609 (Vorrat 959, Nutzer 27.10.2026 "Jetzt dran in Gold"): Form fuer Check. Auf der Check-Objektseite und dem Check-
   Dashboard ist "Jetzt dran" der naechste Schritt (z. B. "BEG EM · Antrag" mit "Antrag vorbereiten"), keine Mahnung - in
   Terrakotta las sich das wie ein Alarm. Rahmen, Balken links und Toenung (10 %) in --accent; Balken und Titel bleiben, sie
   unterscheiden den Kasten vom Hinweiskasten (4b, 1 px, 8 %). Das Mietkonto nimmt weiter .igb-jetzt ohne Zusatz. */
.igb-jetzt.igb-jetzt--gold{ border-color:var(--accent, #94661F); background:rgba(224,167,92,0.1);
  background:color-mix(in srgb, var(--accent, #94661F) 10%, transparent); }
.igb-jetzt--gold .igb-jetzt-zeile + .igb-jetzt-zeile{ border-top-color:rgba(224,167,92,0.3);
  border-top-color:color-mix(in srgb, var(--accent, #94661F) 30%, transparent); }
/* V1625 (Fund runde-224-optik-energie): "display:block" oben schlaegt das hidden-Attribut (Regel des Browsers) - ein
   Kasten mit hidden stand leer da ("Jetzt dran" ohne Zeile an Objekten, an denen nichts faellig ist: Objektseite V1605,
   Dashboard V1610, Energie & Sanierung). hidden gewinnt jetzt fuer Hinweis- und Jetzt-Kasten; bisher fing jede Seite das
   selbst ab (.foerder-diff-kopf[hidden] u. a.). */
.igb-hinweis[hidden], .igb-jetzt[hidden]{ display:none; }


/* ---------- 6a Filter-Chip ----------
   Wie Mieterliste (.filter-chip, rent-mieter.html ~:86): Pille, 12,5 px 500, 8 x 14 px, --surface mit Rahmen, Text
   --text-dim. Aktiv GEFUELLT in Gold mit Text --bg und fett (nicht nur getoent wie bisher - "aktiv" muss ohne
   Farbunterscheidung erkennbar sein). Aktiv ist: .ist-aktiv, aria-pressed="true" oder aria-selected="true". */
.igb-chips{ display:flex; flex-wrap:wrap; gap:6px; }
.igb-chip{ box-sizing:border-box; display:inline-flex; align-items:center; gap:6px; flex-shrink:0; white-space:nowrap; margin:0;
  padding:8px 14px; background:var(--surface, #FFFFFF); border:1px solid var(--border, #E6D8CC); border-radius:99px;
  color:var(--text-dim, #6B5A51); cursor:pointer; font-family:'Inter', sans-serif; font-size:12.5px; font-weight:500;
  line-height:1.2; text-decoration:none; -webkit-appearance:none; appearance:none; }
.igb-chip.ist-aktiv, .igb-chip[aria-pressed="true"], .igb-chip[aria-selected="true"]{ background:var(--accent-flaeche, #DFBC84);
  border-color:var(--accent, #94661F); color:var(--accent-flaeche-text, #1E1917); font-weight:600; }
.igb-chip:focus-visible{ outline:2px solid var(--accent, #94661F); outline-offset:2px; }
.igb-chip:disabled, .igb-chip[aria-disabled="true"]{ opacity:0.55; cursor:default; }
/* V1533 (Vorrat 894 l): Chip als Auswahl mit verstecktem Kaestchen (<label class="igb-chip"><input type="checkbox">...;
   Objekt-Chips in rent-unterkonten) - gewaehlt sieht er aus wie ein aktiver Filter (GEFUELLT, fett), nicht nur getoent.
   Das Kaestchen bleibt fuer Tastatur und Bildschirmleser da; der Fokusring sitzt am Chip. Das Verstecken des Kaestchens
   steht am Dateiende (gleich gewichtig wie ".igb-feld input[type=checkbox]" - steht der Chip in einem Feld, muss es
   danach kommen). */
.igb-chip:has(input:checked){ background:var(--accent-flaeche, #DFBC84); border-color:var(--accent, #94661F); color:var(--accent-flaeche-text, #1E1917);
  font-weight:600; }
.igb-chip:has(input[type="checkbox"]), .igb-chip:has(input[type="radio"]){ position:relative; }
.igb-chip:has(input:focus-visible){ outline:2px solid var(--accent, #94661F); outline-offset:2px; }


/* ---------- 6b Umschalter (zwei bis vier Bereiche) ----------
   Wie Profil (.segmented/.segment, profil-einstellungen.html ~:133, wertgleich in abo, rent-mehr, Portal): Leiste
   --surface-2, Ecken 10 px, 3 px; Feld 12,5 px 500 --text-dim, 9 px, Ecken 8 px; aktiv gefuellt --accent-flaeche mit Text
   --accent-flaeche-text und innerem Rahmen --accent (V1580; die helle Flaeche hebt sich von der Leiste sonst nur 1,48 : 1 ab)
   (zusaetzlich fett, siehe Chip). BEWUSST OHNE transition (Version 398): Beim Wechsel der Darstellung wandern Klasse UND
   Farbvariablen zugleich, mit transition blieb der Browser auf den alten Farben stehen. */
.igb-umschalter{ box-sizing:border-box; display:flex; padding:3px; background:var(--surface-2, #F1E7DE); border-radius:10px; }
.igb-umschalter-feld{ box-sizing:border-box; flex:1; min-width:0; margin:0; padding:9px; background:none; border:none;
  border-radius:8px; color:var(--text-dim, #6B5A51); cursor:pointer; font-family:'Inter', sans-serif; font-size:12.5px;
  font-weight:500; line-height:1.2; text-align:center; text-decoration:none; -webkit-appearance:none; appearance:none; }
.igb-umschalter-feld.ist-aktiv, .igb-umschalter-feld[aria-pressed="true"], .igb-umschalter-feld[aria-selected="true"]{
  background:var(--accent-flaeche, #DFBC84); color:var(--accent-flaeche-text, #1E1917); font-weight:600; box-shadow:inset 0 0 0 1px var(--accent, #94661F); }
.igb-umschalter-feld:focus-visible{ outline:2px solid var(--accent, #94661F); outline-offset:1px; }
.igb-umschalter-feld:disabled, .igb-umschalter-feld[aria-disabled="true"]{ opacity:0.55; cursor:default; }


/* ---------- 7 Dialog ----------
   Werte von .modal-card/.modal-overlay (immobilie-detail.html ~:427-433, in 16 Seiten gleich): Grund rgba(0,0,0,0.55),
   24 px Rand; Karte --surface, Rahmen --border, Ecken 16 px, 20 px, hoechstens 340 px (am Desktop die Breiten-Klassen
   dlg-formular/-auswahl/-rueckfrage aus components.js), hoechstens 80 % der Fensterhoehe; Titel 16 px (seit V1600 Inter 600).
   Sichtbar ist der Grund mit .ist-offen (die Seite schaltet nur die Klasse). Knoepfe darin: .igb-knopf aus Abschnitt 3,
   z. B. in einer .igb-knopf-reihe. */
.igb-dialog-grund{ box-sizing:border-box; display:none; position:fixed; inset:0; z-index:100; align-items:center;
  justify-content:center; padding:24px; background:rgba(0,0,0,0.55); }
.igb-dialog-grund.ist-offen{ display:flex; }
.igb-dialog{ box-sizing:border-box; width:100%; max-width:340px; max-height:80vh; overflow-y:auto; padding:20px;
  background:var(--surface, #FFFFFF); border:1px solid var(--border, #E6D8CC); border-radius:16px; color:var(--text, #241C18);
  font-family:'Inter', sans-serif; }
.igb-dialog-titel{ font-family:'Inter', sans-serif; font-size:16px; font-weight:600; margin:0 0 14px; color:var(--text, #241C18); }
.igb-dialog-text{ font-size:12.5px; line-height:1.5; color:var(--text-dim, #6B5A51); margin:0 0 4px; }


/* ---------- 8 Formularfeld ----------
   Mietkonto-Feld (.field ~:164): Feldgrund --surface-2, Rahmen --border, Ecken 10 px, 13,5 px, 10 x 12 px; Fokus Rahmen
   --accent. Beschriftung 12,5 px --text-dim (Vorschlag 8; das Mietkonto selbst hat 12 px). Felder einer Zeile unten
   ausgerichtet (V1312: bricht eine Beschriftung um, bleiben die Felder auf einer Linie). Fehler wie im Mietkonto
   (.kontakt-fehler): Schrift --text, Balken --accent - nie nur Farbe. Deaktiviert wie die Knoepfe. */
.igb-feld{ margin-bottom:12px; min-width:0; }
.igb-feld > label, .igb-feld-beschriftung{ display:block; margin-bottom:6px; font-family:'Inter', sans-serif; font-size:12.5px;
  color:var(--text-dim, #6B5A51); }
.igb-feld input, .igb-feld select, .igb-feld textarea{ box-sizing:border-box; display:block; width:100%; margin:0;
  padding:10px 12px; background:var(--surface-2, #F1E7DE); border:1px solid var(--border, #E6D8CC); border-radius:10px;
  color:var(--text, #241C18); font-family:'Inter', sans-serif; font-size:13.5px; line-height:1.35; outline:none; }
.igb-feld textarea{ resize:vertical; min-height:80px; }
.igb-feld input:focus, .igb-feld select:focus, .igb-feld textarea:focus{ border-color:var(--accent, #94661F); }
.igb-feld input[aria-invalid="true"], .igb-feld select[aria-invalid="true"], .igb-feld textarea[aria-invalid="true"]{
  border-color:var(--accent, #94661F); }
.igb-feld input:disabled, .igb-feld select:disabled, .igb-feld textarea:disabled{ opacity:0.55; cursor:default; }
/* Auswahlkaestchen und Knoepfe des Systems behalten ihre eigene Form. */
.igb-feld input[type="checkbox"], .igb-feld input[type="radio"]{ display:inline-block; width:16px; height:16px; padding:0;
  vertical-align:-3px; margin-right:6px; }
.igb-feld-reihe{ display:flex; gap:10px; align-items:flex-end; }
.igb-feld-reihe > .igb-feld{ flex:1; }
.igb-feld-hilfe{ margin-top:4px; font-size:11.5px; line-height:1.5; color:var(--text-dim, #6B5A51); }
.igb-feld-fehler{ margin-top:6px; padding:2px 0 2px 8px; border-left:3px solid var(--accent, #94661F); font-size:12px;
  line-height:1.45; color:var(--text, #241C18); }
/* V1533 (Vorrat 894 j): Auswahlkaestchen mit Text im Feld (<label class="igb-feld-kaestchen"><input type="checkbox">
   <span>Text</span></label> in .igb-feld; rent-kosten "Umlagefaehig auf die Mieter") - der Text ist normale Schrift
   (13 px --text) neben dem Kaestchen, keine graue Feldbeschriftung. */
.igb-feld > .igb-feld-kaestchen{ display:flex; align-items:center; gap:8px; margin:0; font-size:13px; color:var(--text, #241C18);
  cursor:pointer; }
.igb-feld .igb-feld-kaestchen input[type="checkbox"], .igb-feld .igb-feld-kaestchen input[type="radio"]{ margin:0; flex-shrink:0; }
/* V1533 (Vorrat 894 e): kompakte Eingabe ohne Beschriftung, in einer Zeile mit einem kleinen Knopf (Notiz und
   Checklisten-Punkt am Vorgang, rent-vorgaenge .vn-eingabe). Feldwerte des Standards (Grund --surface-2, Rahmen, Ecken
   10 px, 13,5 px, Fokus --accent), nur das Polster kompakt wie im Bestand (8 x 10 px), damit Feld und kleiner Knopf
   gleich hoch stehen. Mehrzeilig mit --mehrzeilig. */
.igb-eingabe{ box-sizing:border-box; display:block; width:100%; margin:0; padding:8px 10px; background:var(--surface-2, #F1E7DE);
  border:1px solid var(--border, #E6D8CC); border-radius:10px; color:var(--text, #241C18); font-family:'Inter', sans-serif;
  font-size:13.5px; line-height:1.35; outline:none; }
.igb-eingabe:focus{ border-color:var(--accent, #94661F); }
.igb-eingabe:disabled{ opacity:0.55; cursor:default; }
.igb-eingabe--mehrzeilig{ resize:vertical; min-height:54px; }
.igb-eingabe-zeile{ display:flex; gap:6px; align-items:flex-start; }
.igb-eingabe-zeile > .igb-eingabe{ flex:1; min-width:0; }
.igb-eingabe-zeile > .igb-knopf{ flex-shrink:0; white-space:nowrap; }
/* V1581 (Vorrat 934): Lesefeld fuer einen Link oder Code, den man ansehen und kopieren soll (Empfehlungs-Link in mehr und
   rent-mehr, V1570). <input readonly class="igb-eingabe igb-eingabe--lesefeld"> in .igb-eingabe-zeile--lesefeld, "Kopieren"
   als kleiner Zweitknopf daneben. Schreibmaschinenschrift 12 px in EINER Zeile, zu lang mit "…" am Ende; markiert wird beim
   Antippen von der Seite (focus -> select()), damit man auch ohne Kopierknopf den ganzen Wert erwischt. Am Handy (bis
   480 px) steht das Feld in voller Breite, die Knoepfe teilen sich die Zeile darunter. Nicht fuer Werte, die man ganz lesen
   oder abtippen muss (IBAN im Portal, Zwei-Faktor-Schluessel im Profil) - die brechen um statt abzuschneiden.
   Schrift --text auf --surface-2: 13,73 : 1 hell / 11,29 : 1 dunkel (wie jedes Feld). */
.igb-eingabe--lesefeld{ font-family:'IBM Plex Mono', monospace; font-size:12px; white-space:nowrap; overflow:hidden;
  text-overflow:ellipsis; }
.igb-eingabe-zeile--lesefeld{ align-items:center; }
@media (max-width:480px){
  .igb-eingabe-zeile--lesefeld{ flex-wrap:wrap; }
  .igb-eingabe-zeile--lesefeld > .igb-eingabe{ flex:1 1 100%; }
  .igb-eingabe-zeile--lesefeld > .igb-knopf{ flex:1; }
}


/* ---------- 9 Blatt (V1599, Vorrat 957) ----------
   Aus dem Mietkonto (dialog.blatt, rent-vertrag-detail.html V1547/V1548, Nutzer 25.10.2026 Variante B): ein Schreiben oder
   Formular als eigenes Blatt ueber der Seite - <dialog class="igb-blatt">, geoeffnet mit showModal() (oberste Ebene, Esc
   schliesst). Gebaut, geoeffnet und nach dem Neuzeichnen wiederhergestellt wird es mit blatt.js (immoBlatt.html/zeigen/
   merken/zuhoeren) - die Seite laedt blatt.js dafuer selbst. Am Handy fuellt das Blatt den Schirm, ab 900 px ist es ein
   Fenster (bis 1120 px) mit dem Papier links und den Angaben rechts (320 px); ohne Papier nehmen die Angaben die ganze
   Breite. Kopf und Fuss auf --surface, der Rumpf rollt allein; html.igb-blatt-offen sperrt das Rollen der Seite.
   Das Papier (.igb-blatt-seite) ist in beiden Designs weiss mit eigenen hellen Werten - auch fuer Felder und Knoepfe
   darin: Schrift #241C18 auf #FFFFFF 16,7 : 1, Nebenschrift #6B5A51 6,55 : 1, Pflicht-Toenung #FBF3E6. Jeder Absatz
   (.igb-blatt-absatz mit data-blatt-absatz, role="button", tabindex="0") laesst sich antippen; der offene (.ist-aktiv)
   traegt oben die Leiste .igb-blatt-aktiv-kopf mit "Fertig" (haengt beim Rollen fest, sticky). .igb-blatt-luecke markiert
   ein leeres Feld im Text ("hier eintragen").
   Am Handy (bis 899 px) alle Eingaben 16 px (Safari auf dem iPhone zoomt bei kleinerer Schrift beim Antippen in die
   Seite), und das Blatt nimmt Hoehe und Lage des sichtbaren Ausschnitts an (--igb-blatt-hoehe/-oben aus blatt.js); ist
   die Tastatur offen (html.igb-blatt-tastatur), weicht der Fuss.
   Was nur ein Brief des Block-Editors braucht (Absender, Ruecksendezeile, Datum, Betreff, Pflicht-Marke mit Norm),
   bleibt in der Seite. Ausnahme von "keine Elementselektoren": html.igb-blatt-offen sperrt auch body. */
.igb-blatt{ box-sizing:border-box; width:100%; max-width:100%; height:100%; max-height:100%; margin:0; padding:0; border:none;
  background:var(--bg, #FAF6F2); color:var(--text, #241C18); flex-direction:column; overflow:hidden; }
.igb-blatt[open]{ display:flex; }
.igb-blatt::backdrop{ background:rgba(36,28,24,0.5); }
@media (min-width:900px){
  .igb-blatt{ width:min(1120px, calc(100vw - 48px)); height:calc(100vh - 48px); margin:auto; border-radius:14px; box-shadow:0 10px 40px rgba(0,0,0,0.25); }
}
.igb-blatt-offen, .igb-blatt-offen body{ overflow:hidden; }
.igb-blatt-kopf{ display:flex; align-items:center; gap:12px; padding:12px 16px; border-bottom:1px solid var(--border, #E6D8CC); background:var(--surface, #FFFFFF); flex-shrink:0; }
.igb-blatt-zu{ width:36px; height:36px; flex-shrink:0; display:flex; align-items:center; justify-content:center; border-radius:10px;
  border:1px solid var(--border, #E6D8CC); background:var(--surface, #FFFFFF); color:var(--text, #241C18); cursor:pointer; padding:0; }
.igb-blatt-zu svg{ width:18px; height:18px; }
.igb-blatt-zu:focus-visible{ outline:2px solid var(--accent, #94661F); outline-offset:2px; }
.igb-blatt-kopf-text{ min-width:0; }
.igb-blatt-titel{ font-family:'Inter', sans-serif; font-size:16px; font-weight:600; line-height:1.3; }
.igb-blatt-unter{ font-size:11.5px; color:var(--text-dim, #6B5A51); margin-top:1px; overflow-wrap:anywhere; }
.igb-blatt-rumpf{ flex:1; min-height:0; overflow:auto; padding:14px 16px 20px; display:flex; flex-direction:column; gap:16px; }
.igb-blatt-angaben{ font-size:12.5px; }
.igb-blatt-angaben .igb-umschalter{ margin-bottom:10px; }
/* Drei Felder einer Reihe passen in die 320 px der Angaben nicht nebeneinander - hoechstens zwei (Datumsfelder der
   Kuendigung). */
.igb-blatt-angaben .igb-feld-reihe > .igb-feld{ flex:1 1 130px; min-width:130px; }
.igb-blatt-zurueck{ font-size:12.5px; margin-bottom:6px; }
.igb-blatt-abschnitt{ font-weight:600; font-size:13px; margin:14px 0 6px; }
.igb-blatt-zurueck + .igb-blatt-abschnitt{ margin-top:6px; }
@media (min-width:900px){
  .igb-blatt-rumpf{ flex-direction:row; align-items:flex-start; padding:22px 26px; gap:26px; }
  .igb-blatt-angaben{ order:2; width:320px; flex-shrink:0; }
  .igb-blatt-angaben:only-child{ order:0; width:auto; flex:1; min-width:0; }
  .igb-blatt-papier{ order:1; flex:1; min-width:0; }
}
.igb-blatt-fuss{ flex-shrink:0; border-top:1px solid var(--border, #E6D8CC); background:var(--surface, #FFFFFF); padding:10px 16px calc(10px + env(safe-area-inset-bottom)); }
.igb-blatt-seite{ --surface:#FFFFFF; --surface-2:#F1E7DE; --bg:#FAF6F2; --text:#241C18; --text-dim:#6B5A51; --border:#E6D8CC; --accent:#94661F; --petrol:#B0472A;
  color-scheme:light; box-sizing:border-box; max-width:680px; margin:0 auto; background:#FFFFFF; color:#241C18; border:1px solid #E6D8CC;
  border-radius:4px; box-shadow:0 2px 12px rgba(36,28,24,0.12); padding:20px 18px 24px; font-family:'Inter', sans-serif; font-size:13px; line-height:1.5; }
@media (min-width:900px){ .igb-blatt-seite{ padding:40px 48px 44px; font-size:13.5px; } }
.igb-blatt-absatz{ display:block; border-radius:6px; padding:3px 6px; margin:0 -6px; white-space:pre-wrap; overflow-wrap:anywhere; cursor:pointer; outline:1px dashed transparent; }
.igb-blatt-absatz:hover{ outline-color:#C9B6A6; background:#FBF7F3; }
.igb-blatt-absatz:focus-visible{ outline:2px solid #94661F; outline-offset:1px; }
.igb-blatt-absatz.ist-pflicht{ background:#FBF3E6; }
.igb-blatt-luecke{ display:inline-block; background:#F1E7DE; border:1px dashed #94661F; border-radius:4px; padding:0 5px; color:#6B5A51; }
.igb-blatt-absatz.ist-aktiv{ cursor:auto; white-space:normal; text-align:left; background:#FFF8EE; outline:2px solid #94661F; padding:8px; margin:0 -8px; }
.igb-blatt-aktiv-kopf{ position:sticky; top:0; z-index:1; display:flex; align-items:center; justify-content:space-between; gap:8px;
  margin:-8px -8px 8px; padding:6px 8px; background:#FFF8EE; border-bottom:1px solid #E6D8CC; border-radius:6px 6px 0 0; font-size:11.5px; color:#6B5A51; }
.igb-blatt-fertig{ flex-shrink:0; }
.igb-blatt-neu{ margin-top:6px; }
/* V1632 (Vorrat 962, Rent-Formulare als Blatt): zwei Teile, die bisher jede Seite mit Blatt selbst hielt.
   (a) Knoepfe im Fuss: eine .igb-knopf-reihe ohne Abstand nach oben (das Polster des Fusses reicht); am Handy teilen sich
       die Knoepfe die Breite, ab 900 px stehen sie rechts, jeder mindestens 180 px - drei passen in das schmale Blatt
       (Mietkonto .mahn-knoepfe: 220 px, Exposé #exposeKnoepfe: nur der Abstand - beide behalten ihre Regel). Eine
       Fehlerzeile darueber haelt 8 px Abstand. Mit --umbruch (Kontakte: drei Knoepfe) bricht die Reihe am Handy um.
   (b) Blatt ohne Papier (.igb-blatt--schmal, setzt immoBlatt.formular von selbst): ein Formular mit einer Spalte Felder
       stand am Desktop sonst 1.120 px breit - jetzt ein Fenster von hoechstens 640 px, so hoch wie sein Inhalt (hoechstens
       das Fenster minus 48 px, dann rollt der Rumpf; fit-content wie der Grundwert des Browsers fuer <dialog> - "auto"
       zoege es wegen inset:0 auf die volle Hoehe). Am Handy fuellt es den Schirm wie jedes Blatt. */
.igb-blatt-fuss > .igb-knopf-reihe{ margin-top:0; }
.igb-blatt-fuss > .igb-feld-fehler, .igb-blatt-fuss > .igb-hinweis{ margin:0 0 8px; }
@media (min-width:900px){
  .igb-blatt-fuss > .igb-knopf-reihe{ justify-content:flex-end; }
  .igb-blatt-fuss > .igb-knopf-reihe > .igb-knopf{ flex:0 0 auto; min-width:180px; }
  .igb-blatt--schmal{ width:min(640px, calc(100vw - 48px)); height:fit-content; max-height:calc(100vh - 48px); }
}
@media (max-width:899px){
  .igb-blatt input, .igb-blatt textarea, .igb-blatt select{ font-size:16px !important; }
  .igb-blatt{ height:var(--igb-blatt-hoehe, 100%); inset:var(--igb-blatt-oben, 0px) 0 auto 0; }
  .igb-blatt-tastatur .igb-blatt-fuss{ display:none; }
}


/* ---------- Reihenfolge: muss hinter Abschnitt 8 stehen ----------
   V1533 (Vorrat 894 l): das versteckte Kaestchen im Auswahl-Chip (Abschnitt 6a). Gleich gewichtig wie die Kaestchen-Regel
   des Formularfelds; steht ein Chip in einem .igb-feld (rent-unterkonten), gewinnt die spaetere Regel. */
.igb-chip input[type="checkbox"], .igb-chip input[type="radio"]{ position:absolute; opacity:0; width:1px; height:1px; margin:0; }
