/* ISKA — Stylesheet, von null geschrieben.
   ─────────────────────────────────────────────────────────────────────────
   Die Vorgängerfassung (site.css.peinert-erbe, 654 Zeilen) stammte aus dem
   Muster eines Schwesterprojekts: gleiche Schrift, gleiche Bausteine, gleicher
   Bandrhythmus. Sie war nicht zu retten, weil das Problem in der Struktur lag
   und nicht in den Farben.

   Drei Entscheidungen, die diese Fassung trägt:

   1  TYPOGRAFIE  Instrument Sans durchgehend, Überschriften enger gesetzt
      und schwerer. Bis zum 22.08.2026 lief hier eine Antiqua (Newsreader) —
      der Auftraggeber hat sie verworfen, sie ließ die Seite wie einen
      Kanzleibogen aussehen. Die Mischung war fachlich begründbar (JAFFÉ,
      Flöther & Wissing und Grub Brugger setzen alle Serifen), aber sie war
      nicht gewollt. Unverwechselbar bleibt ISKA über Palette, Raster und
      Bauteile.

   2  RASTER  Ein hängendes Raster mit Randspalte statt zentrierter Bänder.
      Abschnittsnummer und Etikett stehen links im Rand, der Text hängt
      eingerückt daneben. Das ist eine redaktionelle Struktur, keine
      Kachelwand.

   3  KEINE KARTEN  Getrennt wird über Linien und Weißraum. Kachelraster mit
      Rahmen war das prägende Element der alten Fassung.

   BEWEGUNG: nur transform und opacity. Kein animierter box-shadow, kein
   backdrop-filter auf fixierten Leisten, kein mix-blend-mode, kein
   dauerhaftes will-change. */

/* ── Schriften ─────────────────────────────────────────────────────────── */
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/ibm-plex-mono-v20-latin_latin-ext-regular.woff2") format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;
  src:url("../fonts/ibm-plex-mono-v20-latin_latin-ext-500.woff2") format("woff2")}
@font-face{font-family:"Instrument Sans";font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/instrument-sans-v4-latin_latin-ext-regular.woff2") format("woff2")}
@font-face{font-family:"Instrument Sans";font-style:normal;font-weight:500;font-display:swap;
  src:url("../fonts/instrument-sans-v4-latin_latin-ext-500.woff2") format("woff2")}
@font-face{font-family:"Instrument Sans";font-style:normal;font-weight:600;font-display:swap;
  src:url("../fonts/instrument-sans-v4-latin_latin-ext-600.woff2") format("woff2")}

/* ── Werte ─────────────────────────────────────────────────────────────── */
:root{
  /* Flächen. Wärmer als die alte Fassung — Papier statt Bildschirmgrau. */
  --papier:#FBF9F4;    /* Elfenbein statt Bildschirmweiss */
  --papier-2:#F1EDE4;
  --tinte:#141920;      /* 16,6:1 auf --papier */
  --tinte-2:#4E5661;    /*  7,3:1 — Fließtext zweiter Ordnung */
  --tinte-3:#616974;    /*  5,3:1 auf --papier, 4,9:1 auf --papier-2.
                             Erster Ansatz war #6C7480 — auf dem hellen Papier
                             gerade noch 4,53:1, auf der stillen Fläche aber
                             nur 4,15:1. Ein Ton muss auf BEIDEN Gründen
                             tragen, sonst fällt er genau dort durch, wo man
                             ihn nicht prüft. */
  --linie:#DDD9D2;
  --linie-stark:#7E8794;/*  3,4:1 — Ränder von Bedienelementen, WCAG 1.4.11 */

  --nacht:#0D3266;      /* aus der Bildmarke */
  --nacht-tief:#08203F;
  --nacht-text:#9EBEE6; /*  6,0:1 auf --nacht */
  --signal:#004AAD;    /* Markenblau, aus der Logodatei des Kunden
                          abgenommen (haeufigster Farbwert im
                          Bildzeichen). 7,73:1 auf Papier. Vorher
                          stand hier das dunklere Nachtblau - die
                          Seite und das Logo sprachen zwei Blaus. */

  /* Ueberschriftenschrift. Bis zum 22.08.2026 stand hier Newsreader, eine
     Antiqua - die Seite las sich wie ein Kanzleibogen. Der Auftraggeber hat
     das ausdruecklich verworfen ("das ganze roemische Design gefaellt mir
     nicht"). Ueberschriften laufen jetzt in derselben Grotesk wie der
     Fliesstext, nur enger gesetzt und schwerer - das ist die Bauform, die
     das Schwesterprojekt fuehrt und die der Auftraggeber besser findet.
     Unverwechselbar bleibt ISKA ueber Palette, Raster und Bauteile, nicht
     ueber die Schriftmischung. */
  --titel:"Instrument Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --grotesk:"Instrument Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  /* Mono fuer die technische Beschriftung. IBM Plex Mono und bewusst NICHT
     JetBrains Mono - das ist die Handschrift des Schwesterprojekts. */
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;

  /* Ein hängendes Raster: schmale Randspalte, breite Textspalte. */
  --rand:12.5rem;
  --spalte:min(1140px,100% - 3rem);
  --luft:clamp(64px,7vw,116px);

  --schnell:140ms;
  --kurve:cubic-bezier(.2,.9,.3,1);
}

/* ── Grundlagen ────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--papier);color:var(--tinte);
  font:400 17px/1.62 var(--grotesk);overflow-wrap:break-word;
  -webkit-font-smoothing:antialiased}
img,svg{display:block;max-width:100%;height:auto}
p{margin:0}
a{color:var(--signal);text-underline-offset:.2em}
:focus-visible{outline:2.5px solid var(--signal);outline-offset:3px}

/* clamp(): Um + und - MUSS Leerzeichen stehen. Ohne sie ist die gesamte
   Rechnung ungueltig, die Deklaration faellt lautlos weg und die Ueber-
   schrift landet auf der Browser-Vorgabe (2em). Genau das war hier vier
   Stunden lang der Fall - die Seite sah nur deshalb halbwegs aus, weil die
   Vorgabewerte zufaellig plausibel sind. Aufgefallen ist es erst beim
   Nachmessen von getComputedStyle. */
h1,h2,h3{margin:0;font-family:var(--titel);font-weight:500;
  letter-spacing:-.022em;line-height:1.1;text-wrap:balance}
h1{font-size:clamp(2.2rem, 1.3rem + 3.2vw, 3.9rem);line-height:1.02;
  letter-spacing:-.034em;font-weight:600}
h2{font-size:clamp(1.6rem, 1.2rem + 1.7vw, 2.4rem);letter-spacing:-.026em}
h3{font-size:clamp(1.1rem, 1rem + .45vw, 1.28rem);font-weight:600;letter-spacing:-.018em}

.rahmen{width:var(--spalte);margin-inline:auto}
.skip{position:absolute;left:-9999px;top:0;z-index:99;background:var(--nacht);
  color:#fff;padding:.8rem 1.2rem;font-weight:600}
.skip:focus{left:0}
.versteckt{position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap}

/* ── Briefkopf ─────────────────────────────────────────────────────────────
   Anschrift links, Marke mittig, Ruf rechts — der Aufbau eines Briefbogens.
   Darunter eine echte Doppellinie (kräftig/fein, 3 px Abstand) und die
   Navigation in gesperrten Versalien. Das ist der Hauptträger der
   „alteingesessenen Kanzlei": kein Element davon ist Dekoration, alle drei
   Blöcke stehen auch auf dem Papierbogen. */
/* ══ Kopf ═════════════════════════════════════════════════════════════════
   Zweistufig. Vorher stand hier ein Briefkopf mit MITTIGER Marke — die
   Anordnung eines Geschäftsbogens, nicht die einer Website. */

/* Stufe 1: Dienstzeile. Dunkel, schmal, scrollt weg. Sie trägt die Angaben,
   die man nachschlägt und nicht liest — Anschrift, Register, Rufnummer. */
.dienst{background:var(--nacht-tief);color:#B7CBE4}
.dienst-innen{display:flex;flex-wrap:wrap;align-items:center;gap:.2rem 1.6rem;
  padding:.5rem 0;font-size:.76rem;letter-spacing:.02em}
.dienst-tel{margin-left:auto;color:#fff;text-decoration:none;font-weight:600;
  letter-spacing:.01em}
.dienst-tel:hover{color:var(--nacht-text)}
@media (max-width:640px){.dienst-reg{display:none}}

/* Stufe 2: Arbeitszeile. Bleibt beim Scrollen oben. Eigener Hintergrund ist
   hier Pflicht und nicht Geschmack: Eine klebende Leiste ohne Fläche lässt
   den Text darunter durchscheinen. Das Korn fehlt ihr dadurch — bei 1 px
   Abstand zur Papierfläche sieht das niemand, bei transparentem Grund
   dagegen jeder. */
.kopf-fest{position:sticky;top:0;z-index:50;background:var(--papier);
  border-bottom:1px solid var(--linie)}
.kopf-zeile{display:flex;align-items:center;gap:1.2rem 2rem;
  padding:.85rem 0}
.marke{display:block;flex:none;line-height:0}
.marke img{width:200px;height:auto}

/* Die Navigation steht LINKS neben der Marke, nicht mittig unter ihr. Der
   Knopf wird per margin-left:auto nach rechts geschoben. */
.nav{display:flex;flex-wrap:wrap;align-items:center;gap:.2rem 1.7rem}
.nav a{text-decoration:none;color:var(--tinte-2);font-size:.9rem;
  font-weight:500;letter-spacing:-.006em;padding:.35rem 0;
  border-bottom:1.5px solid transparent;
  transition:color var(--schnell) var(--kurve)}
.nav a:hover{color:var(--tinte)}
.nav a[aria-current="page"]{color:var(--tinte);border-bottom-color:var(--signal)}

/* ── Menüschalter ─────────────────────────────────────────────────────────
   Auf breiten Schirmen gibt es ihn nicht. Beide Zusatzteile stehen hier auf
   `display:none` und werden erst im Schmal-Block eingeschaltet — so kann
   keine Fassung sie versehentlich auf dem Tisch-Bildschirm zeigen.

   Kein reines Sinnbild, sondern Strich UND Wort: Diese Seite ist
   typografisch gebaut, und drei Striche allein sind auf einer Kanzleiseite
   ein Fremdkörper. Das Wort kostet 34 px und spart die Rätselei. */
.nav-schalter,.nav-kontakt{display:none}
/* min-height 44 px, nicht nur Innenabstand: Gemessen kam der Schalter sonst
   auf 31 px und war damit flacher als die Menüzeilen, die er öffnet — das
   kleinste Ziel im Kopf wäre ausgerechnet das gewesen, das man zuerst
   treffen muss. */
.nav-schalter{align-items:center;gap:.55rem;min-height:44px;
  padding:.5rem .8rem;margin-left:auto;
  font:600 .82rem/1 var(--grotesk);letter-spacing:.02em;
  color:var(--tinte);background:transparent;
  border:1px solid var(--linie-stark);border-radius:2px;
  cursor:pointer;-webkit-tap-highlight-color:transparent}
.nav-schalter:hover{border-color:var(--tinte-2)}

/* Das Zeichen ist EIN Kasten mit zwei Schatten-Strichen darüber und darunter.
   Beim Öffnen wandern die beiden auf die Mitte und drehen sich zum Kreuz.
   Nur `transform` und `opacity` — beides läuft im Compositor und erzeugt
   kein Neuberechnen des Layouts in der klebenden Leiste. */
.nav-schalter-kreuz{position:relative;display:block;width:15px;height:9px}
.nav-schalter-kreuz::before,.nav-schalter-kreuz::after{
  content:"";position:absolute;left:0;width:15px;height:1.5px;
  background:currentColor;
  transition:transform var(--schnell) var(--kurve)}
.nav-schalter-kreuz::before{top:0}
.nav-schalter-kreuz::after{bottom:0}
.nav-schalter[aria-expanded="true"] .nav-schalter-kreuz::before{
  transform:translateY(3.75px) rotate(45deg)}
.nav-schalter[aria-expanded="true"] .nav-schalter-kreuz::after{
  transform:translateY(-3.75px) rotate(-45deg)}
@media (prefers-reduced-motion:reduce){
  .nav-schalter-kreuz::before,.nav-schalter-kreuz::after{transition:none}
}

/* ── Aufmacher ─────────────────────────────────────────────────────────── */
.auf{position:relative;background:var(--nacht-tief);color:#fff;overflow:hidden;
  isolation:isolate}
.auf-bild{position:absolute;inset:0;z-index:-3}
.auf-bild img{width:100%;height:100%;object-fit:cover;object-position:center 58%}
/* Die Stecherei liegt ÜBER dem Foto, aber unter dem Verlauf: So bekommt das
   Bild den Ton eines gestochenen Briefkopfs, ohne dass der Text darunter
   leidet. multiply statt eigener Deckkraft-Schicht wäre teurer — ein
   mix-blend-mode auf einer Vollbildfläche war im Schwesterprojekt eine der
   Ruckelursachen. */
.auf-stich{position:absolute;inset:0;z-index:-2;opacity:.5}
.auf-stich img{width:100%;height:100%;object-fit:cover;object-position:right center}
.auf::after{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(92deg,rgba(6,26,52,.95) 0%,rgba(6,26,52,.86) 38%,
    rgba(6,26,52,.55) 72%,rgba(6,26,52,.42) 100%)}
.auf-innen{padding:clamp(84px,11vw,168px) 0 clamp(64px,8vw,116px)}
.auf h1{color:#fff;max-width:17ch}
.auf-vor{margin-top:1.6rem;max-width:54ch;font-size:1.1rem;line-height:1.6;
  color:#CFDDEF}
.auf-akt{display:flex;gap:1.6rem;align-items:center;flex-wrap:wrap;margin-top:2.3rem}

/* Schaltflächen: Text mit Linie, keine Kästen. */
.tat{font:600 1rem/1 var(--grotesk);text-decoration:none;color:#fff;
  padding-bottom:.5rem;border-bottom:2px solid rgba(255,255,255,.45);
  transition:border-color var(--schnell) var(--kurve)}
.tat:hover{border-bottom-color:#fff}
.tat-hell{color:var(--tinte);border-bottom-color:var(--linie-stark)}
.tat-hell:hover{border-bottom-color:var(--tinte)}

/* ── Hängendes Raster ──────────────────────────────────────────────────── */
.teil{padding:var(--luft) 0}
.teil + .teil{border-top:1px solid var(--linie)}
.teil-dunkel{background:var(--nacht);color:#fff;border-top:0}
.teil-dunkel h2,.teil-dunkel h3{color:#fff}
.teil-dunkel .weich{color:#C3D5EA}
.teil-still{background:var(--papier-2)}

/* ══ Abschnittsraster ═════════════════════════════════════════════════════
   BIS ZUM 22.08.2026 hing hier eine 200 px breite Randspalte, in der nur die
   Abschnittsmarke und die Überschrift standen. Gemessen über zwanzig
   Abschnitte: Inhaltsspalte 7.754 px hoch, Randspalte davon 1.391 px belegt —
   82 % leer, 1,27 Millionen Bildpunkte tote Fläche.

   Schlimmer als die Leere war, was die schmale Spalte mit den Überschriften
   machte. Deutsche Komposita passen nicht in 200 px: „Insolvenzberatung"
   braucht allein 226 px. Auf dem Schirm stand deshalb „Was War-/tezeit
   kostet", „Der Regis-/terauszug", „Die Geschäfts-/führung". Repariert wurde
   das seinerzeit mit `hyphens:auto` — ein zu schmaler Kasten, geflickt mit
   Silbentrennung, statt den Kasten zu verbreitern.

   Beide Schwesterprojekte machen es andersherum: keine Randspalte, die Marke
   direkt über der Überschrift auf derselben linken Kante, und die
   Silbentrennung auf dem Desktop ausdrücklich AUS. Deren Überschriften
   bleiben einzeilig.

   Der Gegenbeweis lag im eigenen Projekt: Unter 900 px fiel das Raster schon
   immer auf eine Spalte zusammen — und dort las sich die Seite besser als auf
   dem großen Schirm. */
.haenge{display:grid;grid-template-columns:minmax(0,1fr);gap:1.1rem}
.haenge-rand{position:static;max-width:none}
/* ── Randmarke ────────────────────────────────────────────────────────────
   Die Marke ueber jeder Abschnittsueberschrift. Vorher: ein waagerechter
   Strich, darunter gesperrte Grossbuchstaben - der Auftraggeber hat dieses
   "--- 01" zweimal als stoerend benannt.

   Zwei Aenderungen. Erstens tragen die Marken jetzt WOERTER statt Ziffern:
   Eine "03" im Rand beantwortet keine Frage, weil niemand mitzaehlt, und sie
   sagt auch nicht, wo man ist. Zweitens ist aus dem Strich darueber ein
   kurzer Strich DANEBEN geworden - er markiert den Zeilenanfang, statt eine
   zweite waagerechte Linie in eine Seite zu legen, die ohnehin voller
   Haarlinien ist.

   Die Sperrung ist von .19em auf .12em zurueck: Bei einem Wort wie
   "Geschaeftsfuehrung" zerfaellt .19em in Einzelbuchstaben. */
.nr{display:inline-flex;align-items:center;gap:.55rem;
  font:600 .74rem/1.4 var(--grotesk);letter-spacing:.12em;
  text-transform:uppercase;color:var(--tinte-3);border-top:0;padding-top:0}
.nr::before{content:"";width:1.6rem;height:1.5px;flex:none;
  background:currentColor;opacity:.55}
.teil-dunkel .nr{color:var(--nacht-text)}
/* Die Randspalte ist schmal, die Ueberschriften darin sind deutsche
   Komposita ("Ausserg  erichtliche Sanierung", "Insolvenzberatung"). Das
   globale overflow-wrap:break-word aus dem body haut sie ohne Trennstrich
   mitten durch - "Insolvenzber / atung". Hier deshalb zurueck auf normales
   Umbruchverhalten plus echte Silbentrennung; <html lang="de"> liefert
   Chromium das Woerterbuch dazu. */
/* Volle Überschriftengröße, keine Silbentrennung: Beides war nur nötig,
   solange die Überschrift in einer 200-px-Spalte stand. */
.haenge-rand h2{margin-top:.5rem;overflow-wrap:normal;
  hyphens:manual;-webkit-hyphens:manual}
.haenge-rand .nr + h2{margin-top:.55rem}

.weich{color:var(--tinte-2)}
.fliess{display:grid;gap:1.05rem;max-width:66ch}
.fliess p{font-size:1.03rem}
.gross{font-size:1.16rem;line-height:1.55}

/* ── Liste mit Trennlinien statt Karten ────────────────────────────────── */
.reihe{display:grid;gap:0}
.reihe > *{padding:1.5rem 0;border-top:1px solid var(--linie)}
.reihe > *:first-child{border-top:0;padding-top:0}
.teil-dunkel .reihe > *{border-top-color:rgba(255,255,255,.16)}
.posten{display:grid;grid-template-columns:2.6rem minmax(0,1fr);gap:0 1.4rem}
.posten-nr{font:500 .78rem/1.6 var(--grotesk);color:var(--tinte-3);
  font-variant-numeric:tabular-nums}
.teil-dunkel .posten-nr{color:var(--nacht-text)}
.posten h3{margin-bottom:.4rem}
.posten p{color:var(--tinte-2);font-size:.98rem;max-width:62ch}
.teil-dunkel .posten p{color:#C3D5EA}
.posten a{display:inline-block;margin-top:.6rem;font-weight:600;font-size:.94rem}

/* ── Zwei Spalten ──────────────────────────────────────────────────────── */
.paar{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));
  gap:2.6rem}

/* ── Registerzeile ─────────────────────────────────────────────────────── */
.register{border-top:1px solid var(--linie);padding:1.15rem 0;
  display:flex;flex-wrap:wrap;gap:.4rem 2rem;font-size:.86rem;color:var(--tinte-3)}
.register b{font-weight:500;color:var(--tinte-2)}

/* ── Fuß ───────────────────────────────────────────────────────────────── */
.fuss{background:var(--nacht-tief);color:#fff;padding:clamp(52px,6vw,84px) 0 2.4rem}
.fuss-gitter{display:grid;grid-template-columns:1.4fr repeat(3,1fr);gap:2.4rem}
.fuss h2{font:600 .72rem/1 var(--grotesk);letter-spacing:.19em;
  text-transform:uppercase;color:var(--nacht-text);margin-bottom:1.1rem}
.fuss ul{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}
.fuss a{color:#E4ECF6;text-decoration:none;font-size:.94rem}
.fuss a:hover{text-decoration:underline}
.fuss-marke img{width:228px;height:auto}
.fuss-marke p{margin-top:.8rem;font-size:.92rem;color:#A8BDD8;max-width:34ch}
.fuss-zeile{margin-top:2.8rem;padding-top:1.3rem;
  border-top:1px solid rgba(255,255,255,.15);font-size:.82rem;color:#93A9C6;
  display:flex;flex-wrap:wrap;gap:.4rem 1.6rem}
.fuss-zeile a{font-size:.82rem;color:#93A9C6}

/* ── Auftritt ──────────────────────────────────────────────────────────── */
@keyframes heben{from{opacity:0;transform:translate3d(0,14px,0)}to{opacity:1;transform:none}}
.js .auf h1{animation:heben .7s var(--kurve) .08s backwards}
.js .auf-vor{animation:heben .7s var(--kurve) .18s backwards}
.js .auf-akt{animation:heben .7s var(--kurve) .28s backwards}
@media (prefers-reduced-motion:reduce){
  .js .auf h1,.js .auf-vor,.js .auf-akt{animation:none}
}
@media (prefers-contrast:more){
  :root{--tinte-2:#2C333C;--tinte-3:#454C56;--linie:#B8B2A8}
}

/* ── Schmal ────────────────────────────────────────────────────────────── */
@media (max-width:900px){
  /* minmax(0,1fr) und NICHT 1fr: Eine Rasterspur mit `1fr` hat
     min-width:auto, also die Mindestbreite ihres Inhalts - ein langes Wort
     wie "Insolvenzbekanntmachungen" auf einem Knopf sprengt die Spur dann
     ueber den Bildschirmrand hinaus. Gemessen bei 320 px: Dokument 351 px
     statt 320. Die klassische Grid-Falle, und sie faellt nur auf dem
     schmalsten Geraet auf. */
  .fuss-gitter{grid-template-columns:1fr 1fr}
  /* Der Kopf bricht auf zwei Zeilen: Marke und Knopf oben, Navigation
     darunter. `order` statt umgestelltem Markup — sonst braeuchte es ein
     zweites Logo, das jemand pflegen muss. */
  .kopf-zeile{flex-wrap:wrap;gap:.7rem 1.2rem;padding:.75rem 0}
  .marke img{width:178px}
  .kopf-tat,.nav a.kopf-tat{order:1;margin-left:auto}
  .nav{order:2;width:100%;gap:.2rem 1.4rem;
    border-top:1px solid var(--linie);padding-top:.5rem}
  .nav a{font-size:.86rem}

  /* ── Eingeklappte Navigation ────────────────────────────────────────────
     NUR unter `.js`. Ohne Skript bliebe die Navigation sonst zugeklappt und
     der Schalter, der sie öffnet, tut nichts — die Seite wäre unbedienbar.
     So bleibt der Zustand ohne JavaScript exakt der bisherige. */
  .js .nav-schalter{display:inline-flex;order:1}
  .js .kopf-tat{display:none}          /* wandert ins Menü, siehe _grund.html */
  .js .nav-kontakt{display:block}
  .js .nav{display:none}
  .js .nav[data-offen]{display:flex;flex-direction:column;align-items:stretch;
    gap:0;padding-top:.25rem;padding-bottom:.5rem}

  /* Im Klappmenü sind die Verweise Zeilen, keine Reiter: volle Breite,
     Trennlinie dazwischen und mindestens 44 px hoch — das ist das Maß, unter
     dem ein Ziel mit dem Daumen nicht mehr sicher zu treffen ist. */
  .js .nav[data-offen] a{display:flex;align-items:center;min-height:44px;
    padding:.2rem 0;font-size:.95rem;border-bottom:1px solid var(--linie)}
  .js .nav[data-offen] a:last-child{border-bottom:0}
  .js .nav[data-offen] a[aria-current="page"]{
    color:var(--tinte);border-bottom-color:var(--linie);
    box-shadow:inset 2px 0 0 var(--signal);padding-left:.7rem}
}
@media (max-width:560px){
  :root{--spalte:min(1140px,100% - 2rem)}
  .fuss-gitter{grid-template-columns:1fr}
  .posten{grid-template-columns:1fr;gap:.3rem}
  /* Auf dem Telefon bleibt in der Dienstzeile nur die Rufnummer. Die
     Anschrift steht ohnehin im Fuss, die Registernummer auch. */
  .dienst-innen span{display:none}
  .dienst-innen{justify-content:flex-end}
}
@media print{
  .auf-bild,.nav,.dienst,.kopf-tat{display:none}
  .kopf-fest{position:static}
  body{background:#fff;color:#000}
}

/* Prüfliste. Bis zum 23.08.2026 stand vor jedem Punkt eine Ziffer: 01, 02,
   03, 04. Der Auftraggeber hat das zweimal beanstandet, und der Grund ist
   nicht Geschmack:

   Eine Ziffernfolge behauptet eine REIHENFOLGE. „Der Kaufvertrag nennt den
   Eigentümer", „Die Bankverbindung steht im Vertrag", „Jede Zahlung trägt
   eine Belegnummer", „Kein Bargeld" — das sind vier voneinander unabhängige
   Tatsachen. Es gibt kein Erstes und kein Viertes. Wer sie nummeriert,
   verspricht dem Leser eine Ordnung, die er dann vergeblich sucht.

   Stattdessen eine kurze Linie im Rand: dasselbe Zeichen, das auf dieser
   Seite schon die Abschnittsmarke trägt. Sie sagt „hier fängt ein Punkt an"
   und sonst nichts.

   Die Schrittliste auf /ablauf behält ihre Ziffern. Dort sind es wirklich
   sechs Schritte in fester Folge. */
.pruefen{list-style:none;margin:.4rem 0 0;padding:0;
  display:grid;gap:.95rem;max-width:62ch}
.pruefen li{position:relative;padding-left:2.4rem;
  font-size:1.01rem;color:var(--tinte-2)}
.pruefen li::before{content:"";position:absolute;left:0;top:.62em;
  width:1.5rem;height:1px;background:var(--linie-stark)}
.pruefen b{color:var(--tinte);font-weight:600}
/* Auf dunklem Grund und auf Fotogrund ist die Haarlinie in Tinte unsichtbar. */
.teil-dunkel .pruefen li::before,.foto-grund .pruefen li::before{
  background:rgba(255,255,255,.45)}

/* ── Protokoll: Registerangaben als Wertetafel ─────────────────────────────
   Zwei Spalten, Haarlinie je Zeile. Bewusst keine Karte drumherum: Diese
   Angaben sind Tatsachen aus einem Register, keine Werbeaussage, die man
   hervorheben müsste. */
/* column-gap ist Pflicht: Ohne ihn enden alle Feldnamen an derselben
   Bildpunktspalte, an der die Werte anfangen. Bei kurzen Namen faellt das
   nicht auf, bei "Unternehmensgegenstand" klebt die Beschriftung am Wert. */
.protokoll{margin:0;display:grid;grid-template-columns:11rem minmax(0,1fr);
  gap:0 1.6rem;font-size:.96rem;max-width:46rem}
.protokoll dt{padding:.72rem 0;border-top:1px solid var(--linie);
  color:var(--tinte-3);font-size:.82rem;letter-spacing:.04em}
.protokoll dd{padding:.72rem 0;border-top:1px solid var(--linie);margin:0;
  color:var(--tinte)}
.protokoll dt:first-of-type,.protokoll dd:first-of-type{border-top:0}

/* ── Schritte ──────────────────────────────────────────────────────────────
   Die Zahl hängt im linken Rand, der Text läuft daneben. Dieselbe Logik wie
   das Seitenraster — eine Struktur, nicht zwei. */
.schritte{list-style:none;counter-reset:st;margin:0;padding:0;display:grid;gap:0}
.schritte li{counter-increment:st;display:grid;
  grid-template-columns:3.4rem minmax(0,1fr);gap:0 1.4rem;
  padding:1.45rem 0;border-top:1px solid var(--linie)}
.schritte li:first-child{border-top:0;padding-top:0}
/* Das ::before ist im Grid ein eigenes Element und belegt Spalte 1. Ohne die
   ausdrueckliche Zuweisung unten rutscht der zweite Kindknoten (<p>) in die
   naechste Zeile und damit zurueck in Spalte 1 - der Absatz war dann 3,4rem
   breit und lief mit einem Wort je Zeile. Sichtbar erst im Vollbildschuss:
   die Seite war 10.103 px hoch. */
.schritte li::before{content:counter(st,decimal-leading-zero);
  grid-column:1;grid-row:1;
  font:500 .78rem/1.7 var(--grotesk);color:var(--tinte-3);
  font-variant-numeric:tabular-nums}
.schritte li > *{grid-column:2}
.schritte b{display:block;font:500 1.14rem/1.3 var(--titel);
  letter-spacing:-.01em;margin-bottom:.3rem}
.schritte p{color:var(--tinte-2);font-size:.98rem;max-width:60ch}

/* ── Notiz: Einschub mit Randlinie, kein Kasten ────────────────────────── */
.notiz{border-left:2px solid var(--linie-stark);padding-left:1.1rem;
  font-size:.94rem;color:var(--tinte-2);max-width:56ch}
.notiz b{color:var(--tinte);font-weight:600}

/* ── Formular ──────────────────────────────────────────────────────────────
   Felder mit weißem Grund und einer einzigen Linie unten. Rechenblattlogik:
   Man schreibt auf eine Linie, nicht in eine Schachtel. Die untere Linie
   trägt 3,4:1 und ist damit die nach WCAG 1.4.11 erforderliche Begrenzung. */
/* ══ Eingabefelder ════════════════════════════════════════════════════════
   NEU GEBAUT am 22.08.2026. Die alte Fassung war ein weisses Feld mit einer
   Unterstreichung und sonst nichts. Auf dem beigen Grund sah das nicht
   zurueckhaltend aus, sondern unfertig - als haette jemand vergessen, das
   Formular fertig zu gestalten. Genau das war der Befund des Auftraggebers
   ("das Kontaktding fuer normal und Verwertung, beides billig").

   Drei Dinge machen den Unterschied, keines davon ist Zierrat:
   1  Ein RUNDUM-Rand. Ein Feld ist ein Behaelter; eine Linie darunter ist
      eine Schreiblinie. Der Behaelter sagt, wo die Eingabe hingehoert.
   2  Ein INNENSCHATTEN. Eine Vertiefung liest sich als Schlitz, in den
      etwas hineingeht. Ohne ihn liegt das Feld auf dem Papier statt darin.
   3  Ein FOKUSHOF. Der farbige Ring um das aktive Feld ist das, was
      gebaute Oberflaechen von Formularen aus dem Baukasten unterscheidet.

   Radius 2 px und nicht 8: Eine abgerundete Pille sieht aus wie jede zweite
   Vorlage. Zwei Pixel lesen sich als geschnittenes Papier. */
.formular{display:grid;gap:1.25rem;max-width:36rem}
.feld{display:grid;gap:.42rem}

/* Kleinbuchstaben statt gesperrter Grossbuchstaben. Die gesperrte Variante
   traegt die Abschnittsmarken (.nr); traegt sie AUCH die Feldbeschriftung,
   wirkt beides gleich wichtig und das Formular wie eine Tabelle. */
.feld > label{font:500 .88rem/1.35 var(--grotesk);color:var(--tinte);
  letter-spacing:0;text-transform:none}
.feld > label span[aria-hidden]{color:var(--signal);font-weight:600}

.feld input,.feld select,.feld textarea{
  font:400 1rem/1.5 var(--grotesk);color:var(--tinte);background:#fff;
  border:1px solid var(--linie);border-radius:2px;
  padding:.78rem .85rem;width:100%;
  box-shadow:inset 0 1px 2px rgba(20,25,32,.045);
  transition:border-color var(--schnell) var(--kurve),
             box-shadow var(--schnell) var(--kurve)}
.feld textarea{min-height:8.5rem;resize:vertical;line-height:1.55}

/* Eigener Pfeil. Der System-Pfeil sieht auf jeder Plattform anders aus und
   ist der zweite Grund, warum Formulare nach Baukasten aussehen. */
.feld select{appearance:none;padding-right:2.4rem;cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,var(--tinte-2) 50%),
    linear-gradient(135deg,var(--tinte-2) 50%,transparent 50%);
  background-position:right 1.15rem center,right .8rem center;
  background-size:6px 6px,6px 6px;background-repeat:no-repeat}

.feld input:hover,.feld select:hover,.feld textarea:hover{
  border-color:var(--linie-stark)}
/* outline:0 ist hier vertretbar, weil der Fokus DEUTLICHER wird statt zu
   verschwinden: farbiger Rand plus 3 px Hof. Ohne diesen Ersatz waere es
   ein Verstoss gegen WCAG 2.4.7. */
.feld input:focus,.feld select:focus,.feld textarea:focus{
  border-color:var(--signal);outline:0;
  box-shadow:inset 0 1px 2px rgba(20,25,32,.03),
             0 0 0 3px rgba(0,74,173,.16)}
.feld input[readonly]{background:var(--papier-2);color:var(--tinte-2);
  box-shadow:none}
.hilfe{font-size:.86rem;color:var(--tinte-2);max-width:46ch}
.honig{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.knopf{font:600 .96rem/1 var(--grotesk);letter-spacing:.02em;
  background:var(--nacht);color:#fff;border:0;border-radius:0;
  padding:1.05rem 1.9rem;cursor:pointer;justify-self:start;
  transition:background var(--schnell) var(--kurve),transform var(--schnell) var(--kurve)}
.knopf:hover{background:var(--nacht-tief)}
.knopf:active{transform:translateY(1px)}
.knopf[disabled]{opacity:.6;cursor:progress}

.meldung{margin:0;padding:.9rem 0 .9rem 1.1rem;font-size:.96rem;
  border-left:3px solid var(--linie-stark)}
.meldung-gut{border-left-color:#1C6B45;color:#12492F}
.meldung-schlecht{border-left-color:#9B2F26;color:#7E241D}

/* ── Fragen ────────────────────────────────────────────────────────────── */
.frage{border-top:1px solid var(--linie)}
.frage summary{cursor:pointer;list-style:none;padding:1.05rem 2rem 1.05rem 0;
  font:500 1.04rem/1.4 var(--titel);position:relative}
.frage summary::-webkit-details-marker{display:none}
.frage summary::after{content:"";position:absolute;right:.35rem;top:1.5rem;
  width:9px;height:9px;border-right:1.5px solid var(--tinte-3);
  border-bottom:1.5px solid var(--tinte-3);transform:rotate(45deg);
  transition:transform var(--schnell) var(--kurve)}
.frage[open] summary::after{transform:rotate(-135deg)}
.frage p{padding:0 0 1.2rem;color:var(--tinte-2);font-size:.98rem;max-width:62ch}

/* ── Bild mit Bildunterschrift ─────────────────────────────────────────── */
.ort{margin:0}
.ort img{width:100%}
.ort figcaption{margin-top:.7rem;font-size:.86rem;color:var(--tinte-3);
  max-width:44ch;border-top:1px solid var(--linie);padding-top:.7rem}

/* ── Rechtstexte ───────────────────────────────────────────────────────── */
.recht{max-width:68ch}
.recht h2{font-size:clamp(1.25rem, 1.1rem + .6vw, 1.55rem);margin-top:2.4rem}
.recht h2:first-of-type{margin-top:1.6rem}
.recht p{margin-top:.75rem;color:var(--tinte-2);font-size:1rem}
.recht ul{margin:.75rem 0 0;padding-left:1.2rem;color:var(--tinte-2);
  font-size:1rem;display:grid;gap:.4rem}

/* ── Kontaktangaben ────────────────────────────────────────────────────── */
.direkt{display:grid;gap:.35rem}
.direkt .gross-tel{font:400 clamp(1.5rem, 1.2rem + 1vw, 2rem)/1.15 var(--titel);
  letter-spacing:-.02em}
.direkt .gross-tel a{color:var(--tinte);text-decoration:none}
.direkt .gross-tel a:hover{color:var(--signal)}
.anschrift{margin-top:1.8rem;display:grid;gap:.15rem;font-size:.97rem;
  color:var(--tinte-2)}
.anschrift b{color:var(--tinte);font-weight:600}

@media (max-width:560px){
  .protokoll{grid-template-columns:1fr;gap:0}
  .protokoll dt{padding-bottom:0;border-top:1px solid var(--linie)}
  .protokoll dd{padding-top:.15rem;border-top:0}
  .protokoll dd:first-of-type{border-top:0}
  .schritte li{grid-template-columns:1fr;gap:.3rem}
}

/* Abstände zwischen den Blöcken der Kontaktspalte. */
.anschrift + .notiz{margin-top:2rem}
.haenge-rand + .paar h2{margin-bottom:1.3rem}
.formular .hilfe + .knopf{margin-top:.4rem}

/* ── Zierlinie ─────────────────────────────────────────────────────────────
   Feine Doppellinie mit Raute zwischen den Abschnitten (_aufmacher.py →
   zierlinie.svg). Steht bewusst nur zwischen gleichfarbigen Abschnitten:
   an einer Farbkante trennt schon die Fläche, dort wäre sie Dekoration. */
.schluss{display:flex;justify-content:center;padding:clamp(40px,4.5vw,64px) 0}
.schluss img{width:240px;height:12px;opacity:.5}

/* ── Papierkorn ────────────────────────────────────────────────────────────
   Ein feines, gerechnetes Rauschen als Grund von <body>. Gibt dem Elfenbein
   die Anmutung von Papier statt Bildschirmweiß.

   Bewusst KEINE fixierte Vollbildschicht darüber: Genau so eine Schicht war
   im Schwesterprojekt die Ursache für sichtbares Ruckeln — sie erzwingt bei
   jedem Scrollen eine eigene Compositing-Ebene über der ganzen Seite. Als
   Hintergrund von body kachelt der Browser die 120 px einmal und ist fertig,
   und die dunklen Abschnitte decken ihn ohnehin ab.

   Als data:-SVG eingebettet, damit `img-src 'self'` in der CSP reicht und
   kein zusätzlicher Abruf entsteht. */
body{background-color:var(--papier);
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='k'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23k)' opacity='.14'/%3E%3C/svg%3E");
  background-repeat:repeat}
@media print{body{background-image:none}}

/* ── Szenenband ────────────────────────────────────────────────────────────
   Ein Bild über die volle Textspalte, mit einer Zeile darunter. Ersetzt die
   Kachelwand der alten Fassung: ein großes Bild trägt mehr als sechs kleine. */
.band-bild{margin:0}
.band-bild img{width:100%}
.band-bild figcaption{margin-top:.8rem;padding-top:.7rem;
  border-top:1px solid var(--linie);font-size:.86rem;color:var(--tinte-3);
  max-width:62ch}
.teil-dunkel .band-bild figcaption{border-top-color:rgba(255,255,255,.18);
  color:var(--nacht-text)}

/* Bildband und Liste im selben hängenden Abschnitt: Das Bild sitzt in der
   ersten Rasterzeile der Inhaltsspalte, die Liste in der zweiten. */
.reihe-nach{margin-top:2.4rem;grid-column:2}
@media (max-width:900px){.reihe-nach{grid-column:1}}
.fliess .band-bild{margin:.6rem 0 .4rem}

/* Pruefliste auf dunklem Grund. Sie stand urspruenglich nur auf hellem Papier;
   nach dem Umzug auf /kontakt (dunkler Abschnitt) trug die Tinte noch 1,40:1
   und war praktisch unsichtbar. Gefunden hat das die Kontrastmessung, nicht
   das Auge - auf dem Schirm sah es nur "etwas dunkel" aus. */
.teil-dunkel .pruefen li{color:#C3D5EA}
.teil-dunkel .pruefen b{color:#fff}
.teil-dunkel .pruefen li::before{color:var(--nacht-text)}

/* ══════════════════════════════════════════════════════════════════════════
   SCHALTFLÄCHEN
   Die erste Fassung hatte auf der ganzen Seite genau EINE sichtbare
   Schaltfläche (der Absenden-Knopf). Peinert hat 26, Techet 20 — gemessen,
   nicht geschätzt. Reine Textlinks lesen sich vornehm und werden übersehen.

   Drei Stufen, damit die Hierarchie sichtbar bleibt:
     .knopf-voll   gefüllt, dunkel  — genau EINE Hauptaktion je Abschnitt
     .knopf-linie  Umriss           — gleichwertige Nebenwege
     .tat          Text mit Linie   — beiläufige Verweise
   ══════════════════════════════════════════════════════════════════════════ */
/* Elementname davor, damit die Regel (0,1,1) erreicht. Sonst schlagen
   `.posten a`, `.nav a` und `.fliess a` den Knopf: display faellt auf
   inline-block zurueck, die Reihe ist kein Flexkasten mehr und der Pfeil
   klebt am Text. Genau so war es bei den drei kleinen Knoepfen im
   Abschnitt „Fuer wen wir arbeiten". */
a.knopf-voll,a.knopf-linie,button.knopf-voll,button.knopf-linie{
  display:inline-flex;align-items:center;gap:.6rem;
  font:600 .93rem/1 var(--grotesk);letter-spacing:.02em;
  padding:.95rem 1.5rem;border-radius:0;text-decoration:none;cursor:pointer;
  transition:background var(--schnell) var(--kurve),
             color var(--schnell) var(--kurve),
             border-color var(--schnell) var(--kurve)}
.knopf-voll{background:var(--nacht);color:#fff;border:1.5px solid var(--nacht)}
.knopf-voll:hover{background:var(--nacht-tief);border-color:var(--nacht-tief)}
.knopf-linie{background:transparent;color:var(--tinte);
  border:1.5px solid var(--linie-stark)}
.knopf-linie:hover{border-color:var(--tinte);background:rgba(13,50,102,.05)}
.knopf-voll::after,.knopf-linie::after{content:"→";font-size:1em;line-height:1;
  transition:transform var(--schnell) var(--kurve)}
.knopf-voll:hover::after,.knopf-linie:hover::after{transform:translateX(3px)}
.knopf-klein{padding:.62rem 1.05rem;font-size:.84rem}

/* Auf dunklem Grund kehren sich die beiden um.
   `:is()` statt einer Aufzaehlung je Kontext: Beim Einbau der Aufmacher-Tafel
   (.tafel) hiess es hier nur `.teil-dunkel, .auf` — der Umriss-Knopf stand
   danach mit dunkler Schrift auf dunkelblauem Grund, rund 1,5:1. Jeder neue
   dunkle Abschnitt muss in diese Liste, sonst wiederholt sich das. */
:is(.teil-dunkel,.auf,.tafel,.leiste) .knopf-voll{background:#fff;
  color:var(--nacht-tief);border-color:#fff}
:is(.teil-dunkel,.auf,.tafel,.leiste) .knopf-voll:hover{background:#E4ECF6;
  border-color:#E4ECF6}
:is(.teil-dunkel,.auf,.tafel,.leiste) .knopf-linie{color:#fff;
  border-color:rgba(255,255,255,.55)}
:is(.teil-dunkel,.auf,.tafel,.leiste) .knopf-linie:hover{border-color:#fff;
  background:rgba(255,255,255,.08)}

.knopf-reihe{display:flex;flex-wrap:wrap;gap:.9rem;align-items:center;
  margin-top:1.9rem}

/* Schaltfläche im Briefkopf — Peinert und Techet haben beide eine.
   `.nav a` (0,1,1) schlaegt `.knopf-voll` (0,1,0): Ohne die zusaetzliche
   Verschachtelung unten erbt der Knopf die Navigationsfarbe und stand mit
   1,70:1 auf dem dunklen Grund. Die Messung hat es gefunden, nicht das Auge. */
.kopf-tat{margin-left:auto;flex:none}
.nav a.kopf-tat{margin-left:auto;color:#fff;border-bottom:0;
  letter-spacing:.02em;text-transform:none;padding:.62rem 1.05rem}
.nav a.kopf-tat:hover{color:#fff}
@media (max-width:900px){.kopf-tat{display:none}}

/* ══════════════════════════════════════════════════════════════════════════
   VERTRAUENSLEISTE
   Schmales dunkles Band unter dem Aufmacher mit drei knappen Aussagen.
   Jede muss nachprüfbar oder eine Zusage sein — keine Behauptung über die
   Vergangenheit, die eine Gesellschaft dieses Alters nicht belegen kann.
   ══════════════════════════════════════════════════════════════════════════ */
.leiste{background:var(--nacht-tief);color:#fff}
.leiste-innen{display:flex;flex-wrap:wrap;justify-content:center;
  gap:.4rem 0;padding:.95rem 0}
.leiste span{display:flex;align-items:center;gap:.6rem;padding:0 1.8rem;
  font-size:.83rem;letter-spacing:.04em;color:#D3E0F0}
.leiste span + span{border-left:1px solid rgba(255,255,255,.22)}
.leiste svg{width:15px;height:15px;flex:none;stroke:#9EBEE6;fill:none;
  stroke-width:1.6}

/* ── Vertrauensleiste auf dem Telefon ─────────────────────────────────────
   Der senkrechte Trennstrich oben ist für EINE Zeile gedacht. Sobald die
   drei Aussagen untereinander stehen, trennt er nichts mehr, sondern hängt
   als Strich links neben dem Text in der Luft — bei zweizeiligen Aussagen
   über die volle Höhe. Gemessen bei 390 px: 151 px hoch, zwei solche
   Striche, dazu 1,8 rem Einzug ins Nichts.

   Untereinander trennt eine waagerechte Linie, und der Text beginnt an der
   Kante statt eingerückt. `align-items:start` setzt das Sinnbild auf die
   ERSTE Zeile: mittig zentriert schwebte es bei zwei Zeilen zwischen
   beiden. */
@media (max-width:700px){
  .leiste-innen{gap:0;padding:.5rem 0}
  .leiste span{width:100%;padding:.6rem 0;align-items:start}
  .leiste span + span{border-left:0;border-top:1px solid rgba(255,255,255,.16)}
  .leiste svg{margin-top:.15em}
}

/* ══════════════════════════════════════════════════════════════════════════
   ZAHLEN — „Der Betrieb in Zahlen" nach dem Muster von Peinert.
   Bei ISKA stehen dort ZUSAGEN und keine Bilanz: Eine im März 2026
   eingetragene Gesellschaft kann keine 400 Kunden vorweisen, und eine
   erfundene Quote wäre nach § 5 UWG irreführend. Eine Zusage darf man
   dagegen geben — sie gilt ab heute.
   ══════════════════════════════════════════════════════════════════════════ */
.zahlen{display:grid;gap:0;margin:0;padding:0;list-style:none}
.zahlen li{display:grid;grid-template-columns:2rem minmax(0,1fr);gap:0 1.1rem;
  padding:1.15rem 0;border-top:1px solid var(--linie)}
.zahlen li:first-child{border-top:0;padding-top:0}
.zahlen svg{width:19px;height:19px;margin-top:.3rem;stroke:var(--signal);
  fill:none;stroke-width:1.5}
.zahlen b{display:block;font:600 1.06rem/1.35 var(--grotesk);
  color:var(--tinte);margin-bottom:.2rem;font-variant-numeric:tabular-nums}
.zahlen p{color:var(--tinte-2);font-size:.95rem;max-width:52ch}

/* ══════════════════════════════════════════════════════════════════════════
   FÄLLE — drei typische Auftragslagen als Karten mit Umriss.
   Bewusst FALLTYPEN und keine Referenzfälle: kein Kundenname, keine
   Summe, kein Datum.
   ══════════════════════════════════════════════════════════════════════════ */
.faelle{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));
  gap:1.5rem}
.fall{border:1px solid var(--linie);padding:1.5rem 1.4rem 1.3rem;
  display:flex;flex-direction:column;gap:.55rem;background:rgba(255,255,255,.5)}
.fall .nr{border:0;padding:0}
.fall h3{font-size:1.1rem}
.fall p{color:var(--tinte-2);font-size:.94rem;flex:1}
.fall a{font-weight:600;font-size:.9rem;margin-top:.3rem}

/* ── Sprungliste ───────────────────────────────────────────────────────────
   Übersicht über die Abschnitte einer langen Seite. Reine Ankerverweise —
   kein JavaScript, funktioniert auch mit abgeschaltetem Skript und im Druck. */
/* Spaltenabstand ist hier nicht Kosmetik: Ohne ihn steht der Pfeil des
   linken Eintrags direkt neben der Nummer des rechten und die Zeile liest
   sich als „↓02". */
.sprung{list-style:none;margin:0;padding:0;display:grid;gap:0 3rem;
  grid-template-columns:repeat(auto-fit,minmax(min(250px,100%),1fr))}
.sprung a{display:flex;align-items:baseline;gap:.9rem;padding:.95rem 0;
  border-top:1px solid var(--linie);text-decoration:none;color:var(--tinte);
  font-size:1rem;transition:color var(--schnell) var(--kurve)}
.sprung a:hover{color:var(--signal)}
.sprung a span{font:500 .74rem/1 var(--grotesk);letter-spacing:.14em;
  color:var(--tinte-3);font-variant-numeric:tabular-nums;flex:none}
.sprung a::after{content:"↓";margin-left:auto;color:var(--tinte-3);
  transition:transform var(--schnell) var(--kurve)}
.sprung a:hover::after{transform:translateY(2px)}

/* Ankersprung darf die Überschrift nicht an die Fensterkante kleben. */
[id]{scroll-margin-top:2rem}

/* ══════════════════════════════════════════════════════════════════════════
   RISS — Aufmacher als Konstruktionszeichnung
   ──────────────────────────────────────────────────────────────────────────
   Gebaut nach drei Referenzen, die der Auftraggeber genannt hat:

   bklit.com     das freigelegte Konstruktionsraster mit Achsen, Knoten und
                 schraffierten Feldern. Der tragende Gedanke.
   motion.dev    die dunkle Tafel, die auf einer flachen Fläche liegt, mit
                 Mono-Mikrobeschriftung in den Ecken und harten Kanten.
   kokonutui     die sehr große, ruhig gesetzte Überschrift.

   Warum das hier inhaltlich passt und nicht nur hübsch ist: Eine Halle ist
   ein Raster, ein Verzeichnis ist ein Raster, und das Kernversprechen dieser
   Seite lautet „jede Position eine eigene Zeile". Das Bild sagt das, bevor
   der erste Satz gelesen ist — und es ist das Gegenteil des Foto-Aufmachers
   im Schwesterprojekt.
   ══════════════════════════════════════════════════════════════════════════ */
.riss{position:relative;background:var(--papier);overflow:hidden;
  border-bottom:1px solid var(--linie)}
.riss-bild{position:absolute;inset:0;z-index:0}
.riss-bild img{width:100%;height:100%;object-fit:cover}
.riss-innen{position:relative;z-index:1;
  padding:clamp(28px,3.4vw,52px) 0 clamp(36px,4.4vw,68px)}

/* Mikrobeschriftung. Mono ist hier nicht Dekoration: Eine technische
   Zeichnung wird beschriftet, nicht getextet. */
.riss-zeile{display:flex;justify-content:space-between;gap:1rem;
  font:400 .7rem/1.6 var(--mono);letter-spacing:.16em;text-transform:uppercase;
  color:var(--tinte-3)}
.riss-zeile span{white-space:nowrap}
.riss-zeile-unten{margin-top:clamp(24px,3vw,44px)}

/* Der Cursor blinkt. Einzige Dauerbewegung auf der Seite, und sie kostet
   nichts: nur opacity, kein Layout, kein Paint außerhalb eines Zeichens. */
.riss-cursor{display:inline-block;width:.55em;color:var(--signal)}
@keyframes blinken{0%,48%{opacity:1}52%,100%{opacity:0}}
.js .riss-cursor{animation:blinken 1.15s steps(1,end) infinite}

/* Die Tafel. Liegt im Raster wie ein aufgelegtes Blatt — deshalb der
   Schlagschatten und die harte Kante ohne Radius. */
.tafel{margin-top:clamp(22px,2.6vw,40px);background:var(--nacht-tief);
  color:#fff;padding:clamp(30px,3.4vw,56px) clamp(26px,3vw,52px)
  clamp(34px,3.8vw,60px);max-width:41rem;
  box-shadow:0 1px 0 rgba(13,50,102,.28), 0 18px 44px -28px rgba(8,32,63,.5)}
.tafel-marke{display:block;width:186px;height:auto;margin-bottom:clamp(22px,2.4vw,34px)}
.tafel h1{color:#fff;max-width:15ch}
.tafel h1 .zeile{display:block}
.tafel-vor{margin-top:1.5rem;max-width:46ch;font-size:1.06rem;line-height:1.6;
  color:#CFDDEF}
.tafel .knopf-reihe{margin-top:2rem}

/* Rechts neben der Tafel bleibt das Raster leer. Das ist Absicht und von
   motion.dev abgeschaut: Die Fläche trägt, wenn man ihr Platz lässt. */
@media (min-width:1100px){
  .riss-innen{min-height:clamp(520px,58vh,660px);display:flex;
    flex-direction:column;justify-content:center}
  .riss-zeile-unten{margin-top:auto;padding-top:clamp(28px,3.4vw,52px)}
}
@media (max-width:560px){
  .riss-zeile{font-size:.62rem;letter-spacing:.11em}
  .riss-zeile span:nth-child(2){display:none}
  .tafel-marke{width:150px}
}

/* Ausgangszustand für die Einblendung. Ohne die .js-Bedingung stünde die
   Seite ohne JavaScript unsichtbar da — der häufigste Fehler bei
   Scroll-Animationen. */
.js .riss-bild,.js .tafel,.js .riss-zeile,.js .tafel h1 .zeile,
.js .tafel-vor,.js .tafel .knopf-reihe{opacity:0}
@media (prefers-reduced-motion:reduce){
  .js .riss-bild,.js .tafel,.js .riss-zeile,.js .tafel h1 .zeile,
  .js .tafel-vor,.js .tafel .knopf-reihe{opacity:1}
  .js .riss-cursor{animation:none}
}

/* ══════════════════════════════════════════════════════════════════════════
   AUFSTELLUNG — die Arbeitsoberfläche als Aufmacher-Element
   ──────────────────────────────────────────────────────────────────────────
   Der Zug stammt von linear.app: Unter die Überschrift kommt kein Foto,
   sondern die Oberfläche selbst, in einem Rahmen mit Haarlinie und weichem
   Schein. Das ist der Unterschied zwischen „wir arbeiten sorgfältig" und
   „so sieht es aus".

   Inhaltlich ist es zugleich die Antwort auf das Schwesterprojekt: Peinert
   zeigt im Aufmacher die WARE. ISKA hat keinen öffentlichen Bestand und soll
   auch keinen haben — also zeigen wir das ARBEITSERGEBNIS. Das ist ehrlicher
   und für einen Insolvenzverwalter das stärkere Argument.

   Die Zeilen sind als MUSTER gekennzeichnet (Kopfzeile rechts). Sie
   behaupten keinen Bestand.
   ══════════════════════════════════════════════════════════════════════════ */
.flaeche{background:#0B1F3A;border:1px solid rgba(158,190,230,.22);
  border-radius:10px;overflow:hidden;
  box-shadow:0 1px 0 rgba(255,255,255,.05) inset,
             0 26px 70px -34px rgba(4,16,34,.85)}

/* Titelleiste. Die drei Punkte sind keine Fensterknöpfe, sondern der
   Hinweis, dass hier eine Anwendung gezeigt wird — dieselbe Konvention wie
   bei den Produktaufnahmen der Referenzseiten. */
.flaeche-kopf{display:flex;align-items:center;gap:.7rem;
  padding:.72rem .95rem;border-bottom:1px solid rgba(158,190,230,.16);
  background:rgba(255,255,255,.03)}
.flaeche-punkte{display:flex;gap:.32rem;flex:none}
.flaeche-punkte i{width:8px;height:8px;border-radius:50%;
  background:rgba(158,190,230,.3)}
.flaeche-titel{font:400 .74rem/1 var(--mono);letter-spacing:.06em;
  color:#9EBEE6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.flaeche-muster{margin-left:auto;flex:none;font:500 .62rem/1 var(--mono);
  letter-spacing:.18em;color:#0B1F3A;background:#9EBEE6;
  padding:.3rem .5rem;border-radius:3px}

/* Die Tabelle. Mono für alles Zählbare, damit die Spalten stehen. */
.flaeche-tab{width:100%;border-collapse:collapse;font-size:.82rem}
.flaeche-tab th{font:500 .62rem/1 var(--mono);letter-spacing:.14em;
  text-transform:uppercase;color:#7C9BC4;text-align:left;
  padding:.7rem .95rem;border-bottom:1px solid rgba(158,190,230,.14);
  font-weight:500}
.flaeche-tab td{padding:.72rem .95rem;color:#DCE7F5;
  border-bottom:1px solid rgba(158,190,230,.09);vertical-align:middle}
.flaeche-tab tr:last-child td{border-bottom:0}
.flaeche-tab .sp-nr{font-family:var(--mono);color:#7C9BC4;width:3.4rem}
.flaeche-tab .sp-zahl{font-family:var(--mono);text-align:right;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.flaeche-tab .sp-pap{font-family:var(--mono);color:#9EBEE6;text-align:center;
  width:4.2rem}

/* Zustands-Plakette. Punkt plus Wort — der Punkt allein wäre eine reine
   Farbcodierung und damit für Farbenblinde wertlos (WCAG 1.4.1). */
.zust{display:inline-flex;align-items:center;gap:.42rem;white-space:nowrap;
  font-size:.78rem}
.zust::before{content:"";width:6px;height:6px;border-radius:50%;flex:none}
.zust-gut::before{background:#5FD3A0}
.zust-mittel::before{background:#E8C46A}
.zust-offen::before{background:#8FA6C4}
.zust-gut{color:#9FE5C4}
.zust-mittel{color:#F0DCA6}
.zust-offen{color:#B6C6DC}

/* #A6BCD6 statt #8FA6C4: Die Fusszeile liegt auf .02-Weiss ueber #0B1F3A,
   also auf gemessenen (50,73,102). Der alte Ton kam dort auf 3,69:1 - unter
   der Norm. Gefunden hat das erst die Pixelmessung am gerenderten Bild; die
   Rechnung aus den CSS-Werten hatte ihn durchgelassen, weil sie gegen die
   Tafelfarbe rechnete statt gegen die zusammengesetzte Flaeche. */
.flaeche-fuss{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;
  justify-content:space-between;padding:.78rem .95rem;
  border-top:1px solid rgba(158,190,230,.16);background:rgba(255,255,255,.02);
  font:400 .72rem/1.5 var(--mono);color:#A6BCD6}
.flaeche-fuss b{color:#DCE7F5;font-weight:500}

@media (max-width:700px){
  .flaeche-tab .sp-pap,.flaeche-tab th:nth-child(3){display:none}
  .flaeche-tab td,.flaeche-tab th{padding:.6rem .7rem}
  .flaeche-tab{font-size:.76rem}
}

/* Pill über der Überschrift — von resend.com. Trägt eine echte Aussage,
   nicht „Neu!". */
.pille{display:inline-flex;align-items:center;gap:.5rem;
  font:500 .72rem/1 var(--grotesk);letter-spacing:.04em;
  padding:.45rem .8rem .45rem .55rem;border-radius:100px;
  border:1px solid rgba(158,190,230,.3);color:#CFDDEF;
  background:rgba(255,255,255,.04);margin-bottom:1.5rem}
.pille::before{content:"";width:6px;height:6px;border-radius:50%;
  background:#5FD3A0;flex:none}

/* Lichtstreif auf der dunklen Tafel — von resend.com. Ein einzelner,
   sehr flacher Verlauf; kein animierter Vollbildverlauf, der war im
   Schwesterprojekt eine der Ruckelursachen. */
.tafel{position:relative;isolation:isolate}
.tafel::before{content:"";position:absolute;inset:0;z-index:-1;
  background:radial-gradient(120% 80% at 12% 0%,
    rgba(120,170,235,.16) 0%, rgba(120,170,235,0) 58%)}

/* Aufmacher in zwei Spalten: Tafel links, Aufstellung rechts. Unter 1100 px
   stapeln sie — die Tabelle braucht Breite, sonst wird sie zur Wurst. */
@media (min-width:1100px){
  .riss-zwei{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.02fr);
    gap:0 clamp(28px,3vw,52px);align-items:start}
  .riss-zwei .riss-voll{grid-column:1 / -1}
  .riss-zwei .tafel{margin-top:clamp(22px,2.6vw,40px);max-width:none}
  .riss-zwei .flaeche{margin-top:clamp(22px,2.6vw,40px);align-self:center}
}
@media (max-width:1099px){
  .flaeche{margin-top:1.4rem}
}
/* Startzustand für die Einblendung — NUR im Aufmacher.
   Ungescopet war `.js .flaeche{opacity:0}` ein Bug: Auf /vorgang steht
   dieselbe Fläche außerhalb von .riss, das Skript animiert sie dort nicht,
   und die Statuskette samt Tabelle blieb unsichtbar. Ein Startzustand hinter
   `.js` muss immer genau so weit reichen wie die Animation, die ihn wieder
   aufhebt. */
.js .riss .flaeche,.js .riss .pille,.js .riss .flaeche tbody .fz{opacity:0}
@media (prefers-reduced-motion:reduce){
  .js .riss .flaeche,.js .riss .pille,.js .riss .flaeche tbody .fz{opacity:1}
}

/* ══════════════════════════════════════════════════════════════════════════
   KOSTENUHR
   Eingaben links, Ergebnis rechts auf dunklem Grund. Die Zahl ist das
   Argument, also bekommt sie die Größe.
   ══════════════════════════════════════════════════════════════════════════ */
.uhr{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(270px,100%),1fr));
  gap:1.6rem;margin:1.6rem 0 1.3rem;align-items:start}
.uhr-eingabe{display:grid;gap:1.15rem}
/* Dieselbe Bauform wie jedes andere Feld - Rand rundum, Radius, Innen-
   schatten, Fokushof. Vorher war auch das hier ein weisser Kasten mit einer
   Unterstreichung und stand direkt neben der dunklen Ergebniskarte: Der
   Unterschied zwischen gebaut und unfertig war auf einem Bild zu sehen.
   Der Fokus sitzt auf dem UMSCHLAG, nicht auf dem <input> - sonst laege der
   Ring innerhalb des Rahmens und die Einheit bliebe aussen vor. */
.feld-einheit{display:flex;align-items:stretch;background:#fff;
  border:1px solid var(--linie);border-radius:2px;
  box-shadow:inset 0 1px 2px rgba(20,25,32,.045);
  transition:border-color var(--schnell) var(--kurve),
             box-shadow var(--schnell) var(--kurve)}
.feld-einheit:hover{border-color:var(--linie-stark)}
.feld-einheit:focus-within{border-color:var(--signal);
  box-shadow:inset 0 1px 2px rgba(20,25,32,.03),
             0 0 0 3px rgba(0,74,173,.16)}
.feld-einheit input{border:0;background:transparent;flex:1;min-width:0;
  font:500 1.32rem/1 var(--mono);color:var(--tinte);
  padding:.78rem .2rem .78rem .85rem;
  font-variant-numeric:tabular-nums}
.feld-einheit input:focus{outline:0}
.feld-einheit span{display:flex;align-items:center;padding:0 .95rem 0 .4rem;
  font:400 .88rem/1 var(--mono);color:var(--tinte-3)}
/* Zahlenfeld-Pfeile weg: Sie sind winzig, treffen schlecht und stehen dem
   Mono-Satz im Weg. Getippt und gewischt wird ohnehin. */
.feld-einheit input::-webkit-outer-spin-button,
.feld-einheit input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.feld-einheit input[type=number]{-moz-appearance:textfield;appearance:textfield}

.uhr-ergebnis{background:var(--nacht-tief);color:#fff;padding:1.5rem 1.4rem 1.35rem;
  border-radius:8px}
.uhr-ergebnis .nr{color:var(--nacht-text)}
.uhr-summe{font:400 clamp(2.1rem, 1.4rem + 2.4vw, 3.1rem)/1 var(--titel);
  letter-spacing:-.02em;margin-top:.85rem;font-variant-numeric:tabular-nums}
.uhr-balken{position:relative;height:5px;border-radius:3px;margin:1.15rem 0 .95rem;
  background:rgba(255,255,255,.16);overflow:hidden}
.uhr-balken span{position:absolute;inset:0 auto 0 0;background:#5FD3A0;
  border-radius:3px;width:33%;transition:width var(--schnell) var(--kurve)}
.uhr-zeile{font-size:.94rem;color:#C3D5EA;margin-top:.35rem}
.uhr-zeile b{color:#fff;font-weight:600;font-variant-numeric:tabular-nums}
.uhr-delta b{color:#9FE5C4}

/* ── Hakenliste ──────────────────────────────────────────────────────────── */
.liste-haken{list-style:none;margin:0;padding:0;display:grid;gap:0}
.liste-haken li{position:relative;padding:.92rem 0 .92rem 1.9rem;
  border-top:1px solid var(--linie);font-size:.97rem;color:var(--tinte-2)}
.liste-haken li:first-child{border-top:0}
.liste-haken li::before{content:"";position:absolute;left:.1rem;top:1.28rem;
  width:9px;height:5px;border-left:1.6px solid var(--signal);
  border-bottom:1.6px solid var(--signal);transform:rotate(-45deg)}
.liste-haken b{color:var(--tinte);font-weight:600}

/* ── Karte ───────────────────────────────────────────────────────────────── */
/* Die Landkarte hat jetzt einen EIGENEN Namen. Vorher hiess sie `.karte`
   wie die Karteikarte, trug damit deren weissen Kasten mit Rand und Radius
   und sass als 760-px-Bild mittig darin - links und rechts je 70 px
   reinweisser Rand, der weder zum Bild noch zum Abschnitt passte. */
.gebietsbild{margin:0;background:transparent;border:0;box-shadow:none;
  padding:0}
.gebietsbild img{width:100%;max-width:760px;margin-inline:auto;
  background:transparent}
.gebietsbild figcaption{margin-top:.9rem}

/* ══════════════════════════════════════════════════════════════════════════
   VORGANGSABFRAGE
   ══════════════════════════════════════════════════════════════════════════ */
.abfrage{max-width:none;margin-top:1.9rem}
.abfrage-felder{display:grid;grid-template-columns:1fr 1fr auto;gap:1rem;
  align-items:end}
/* background-COLOR, nicht background: Die Kurzform wuerde das
   background-image der Karten-Regel darueber mit zuruecksetzen. */
.abfrage .feld input{background-color:#fff;font-family:var(--mono);font-size:.98rem}
.abfrage-karte{max-width:44rem;margin-top:1.9rem}
.abfrage-karte .abfrage{margin-top:0}
/* Der Knopf sitzt in der Feldzeile und muss unten buendig mit den Feldern
   stehen - nicht mit deren Beschriftung. */
.abfrage-felder .knopf-voll{align-self:end;width:auto}
@media (max-width:700px){.abfrage-felder{grid-template-columns:1fr}}

/* Statuskette. Sechs Schritte, der erreichte hervorgehoben. Die Marke „läuft"
   steht als Wort da, nicht nur als Farbe — Farbe allein ist nach WCAG 1.4.1
   keine Information. */
.kette{list-style:none;margin:0;padding:1.05rem .95rem .3rem;display:grid;
  gap:0;border-bottom:1px solid rgba(158,190,230,.16)}
.kette li{display:grid;grid-template-columns:16px 2.2rem minmax(0,1fr) auto;
  align-items:center;gap:.7rem;padding:.42rem 0;font-size:.85rem}
.kette-punkt{width:9px;height:9px;border-radius:50%;justify-self:center;
  border:1.5px solid rgba(158,190,230,.45)}
.kette-nr{font:400 .68rem/1 var(--mono);color:#7C9BC4;
  font-variant-numeric:tabular-nums}
.kette-label{color:#8FA6C4}
.kette-fertig .kette-punkt{background:#5FD3A0;border-color:#5FD3A0}
.kette-fertig .kette-label{color:#C9DAEE}
.kette-jetzt .kette-punkt{background:#9EBEE6;border-color:#9EBEE6;
  box-shadow:0 0 0 4px rgba(158,190,230,.2)}
.kette-jetzt .kette-label{color:#fff;font-weight:600}
.kette-marke{font:500 .6rem/1 var(--mono);letter-spacing:.14em;
  text-transform:uppercase;color:#0B1F3A;background:#9EBEE6;
  padding:.28rem .45rem;border-radius:3px}

/* ── Verlauf ─────────────────────────────────────────────────────────────── */
.verlauf{list-style:none;margin:.9rem 0 0;padding:0;display:grid;gap:0}
.verlauf li{display:grid;grid-template-columns:6.4rem minmax(0,1fr);gap:0 1rem;
  padding:.75rem 0;border-top:1px solid var(--linie);font-size:.94rem;
  color:var(--tinte-2)}
.verlauf li:first-child{border-top:0}
.verlauf time{font-family:var(--mono);font-size:.8rem;color:var(--tinte-3);
  font-variant-numeric:tabular-nums}

/* ── Belegtabelle ────────────────────────────────────────────────────────── */
.protokoll-tab{width:100%;border-collapse:collapse;margin-top:.9rem;
  font-size:.92rem}
.protokoll-tab th{font:500 .62rem/1 var(--mono);letter-spacing:.14em;
  text-transform:uppercase;color:var(--tinte-3);text-align:left;
  padding:.55rem 0;border-bottom:1px solid var(--linie);font-weight:500}
.protokoll-tab td{padding:.68rem 0;border-bottom:1px solid var(--linie);
  color:var(--tinte-2)}
.protokoll-tab tr:last-child td{border-bottom:0}
.protokoll-tab .sp-zahl{text-align:right;font-family:var(--mono);
  font-variant-numeric:tabular-nums;color:var(--tinte)}
.mono{font-family:var(--mono);font-size:.88rem}

/* Die Ergebnistabelle in der Fläche hat nur zwei Spalten. */
.flaeche-tab tbody td:first-child{color:#B6C6DC}

/* ══════════════════════════════════════════════════════════════════════════
   ANSPRECHPARTNER
   Eine Person statt eines Postfachs — die Idee stammt aus dem
   Schwesterprojekt, die Form nicht: dort eine Kachel mit Foto, hier eine
   Zeile im hängenden Raster.

   Die Leerstelle ist ABSICHTLICH sichtbar beschriftet. Ein Stockfoto wäre
   im Insolvenzumfeld das Gegenteil von Vertrauen: In dieser Branche werden
   Angebote im Namen fremder Häuser mit gestohlenen Gesichtern verschickt.
   ══════════════════════════════════════════════════════════════════════════ */
.person{display:grid;grid-template-columns:82px minmax(0,1fr);gap:1.1rem;
  align-items:start;padding-bottom:1.5rem;border-bottom:1px solid var(--linie)}
.person-bild{aspect-ratio:4/5;border:1px dashed var(--linie-stark);
  display:grid;place-items:center;background:
    repeating-linear-gradient(135deg,transparent 0 6px,rgba(126,135,148,.07) 6px 12px)}
.person-bild span{font:400 .58rem/1.3 var(--mono);letter-spacing:.1em;
  text-transform:uppercase;color:var(--tinte-3);text-align:center}
.person-name{font:400 1.28rem/1.2 var(--titel);letter-spacing:-.012em;
  margin:.55rem 0 .35rem}
.person-text p.weich{font-size:.94rem}
.person-ruf{margin-top:.6rem}
.person-ruf a{font:600 1.02rem/1 var(--grotesk);color:var(--tinte);
  text-decoration:none}
.person-ruf a:hover{color:var(--signal)}

/* ── Rückrufwunsch, zusammenklappbar ─────────────────────────────────────── */
.rueckruf{margin-top:1.4rem;border-bottom:1px solid var(--linie)}
.rueckruf summary{cursor:pointer;list-style:none;padding:1rem 2rem 1rem 0;
  font:500 1rem/1.4 var(--grotesk);color:var(--signal);position:relative}
.rueckruf summary::-webkit-details-marker{display:none}
.rueckruf summary::after{content:"";position:absolute;right:.4rem;top:1.35rem;
  width:9px;height:9px;border-right:1.5px solid currentColor;
  border-bottom:1.5px solid currentColor;transform:rotate(45deg);
  transition:transform var(--schnell) var(--kurve)}
.rueckruf[open] summary::after{transform:rotate(-135deg)}
.rueckruf .formular{padding-bottom:1.5rem;max-width:none}

/* Auswahlgruppe. fieldset hat Browser-Vorgaben, die das Raster stören. */
.feld-gruppe{border:0;margin:0;padding:0;min-width:0}
.feld-gruppe legend{padding:0;font:500 .8rem/1.4 var(--grotesk);
  letter-spacing:.05em;color:var(--tinte-2);text-transform:uppercase;
  margin-bottom:.5rem}
.wahl{display:grid;gap:.1rem}
.wahl label{display:flex;align-items:center;gap:.65rem;padding:.5rem .1rem;
  cursor:pointer;font-size:.97rem;color:var(--tinte-2)}
.wahl label:hover{color:var(--tinte)}
.wahl input{width:17px;height:17px;flex:none;accent-color:var(--signal);
  margin:0;cursor:pointer}
.wahl input:focus-visible{outline:2.5px solid var(--signal);outline-offset:2px}

/* Das Folgefeld bleibt im Dokument und wird nur gesperrt — ein per
   display:none eingeblendetes Feld wird nicht angesagt. */
.feld-folge{transition:opacity var(--schnell) var(--kurve)}
.feld-folge:has(input:disabled){opacity:.45}
.feld input:disabled{cursor:not-allowed;background:var(--papier-2)}

/* Feldfehler aus der Schnittstelle sichtbar machen. */
.feld input[aria-invalid="true"],.feld select[aria-invalid="true"],
.feld textarea[aria-invalid="true"]{border-bottom-color:#9B2F26;
  border-bottom-width:2px}

.mt-gross{margin-top:2.4rem}

/* ══ Katalogseite ═════════════════════════════════════════════════════════
   HIER STAND EIN TOTER BLOCK, und er war nicht harmlos.

   Der frueher nachgebaute Katalogdeckel (`.katalog-auf`, `.heft`,
   `.heft-siegel`, `.heft-innen`, `.heft-marke`, `.heft-titel`, `.heft-fuss`)
   ist bei einem Umbau aus den Vorlagen geflogen, seine Regeln blieben aber
   stehen - darunter zwei, die denselben Namen tragen wie Teile des echten
   Hefts weiter unten:

     .heft-buehne  gab der Buehne des Blaetterhefts 14,4 px / 22,4 px
                   Polsterung. Dadurch war der Inhaltsbereich 36,8 px
                   schmaler als die Buehne, jede Seite entsprechend
                   18,4 px zu schmal - und genau diese Luecke stand
                   zwischen Blattrand und Pfeil.
     .heft-stand   war ein Grossbuchstaben-Etikett des Deckels und
                   ueberschrieb den Seitenzaehler.

   Toter Code faellt nicht auf, solange er nur Speicher kostet. Er faellt
   auf, sobald er einen Namen belegt, den ein lebendes Bauteil braucht. */

/* ── Warengruppen ─────────────────────────────────────────────────────────
   Dieselbe Bauform wie `.schritte`: Zahl im Rand, Text daneben, Haarlinie
   statt Kasten. Die Zahl steht hier als echtes Element im Markup und nicht
   als ::before - dadurch entfaellt die Gridfalle, die `.schritte` sich
   einfangen musste. */
.gruppen{list-style:none;margin:2rem 0 0;padding:0;display:grid;gap:0}
/* 3,4 rem reichten fuer „01". Sie reichen NICHT fuer „SEITE 3-25", und die
   Angabe lief quer ueber die Ueberschrift. Gesperrte Grossbuchstaben brauchen
   Platz: „SEITE" misst bei .8rem und .17em Sperrung rund 60 px, die
   Zahlenzeile darunter bis 66 px. 6,4 rem deckt beides mit Rand. */
.gruppen li{display:grid;grid-template-columns:6.4rem minmax(0,1fr);
  gap:0 1.4rem;padding:1.7rem 0;border-top:1px solid var(--linie)}
.gruppen li:first-child{border-top:0;padding-top:0}
.gruppen .nr{padding-top:.32rem;align-self:start;line-height:1.5}
@media (max-width:640px){
  /* Auf dem Telefon steht die Angabe ueber der Ueberschrift statt daneben -
     6,4 rem Rand fressen dort ein Fuenftel der Zeilenbreite. */
  .gruppen li{grid-template-columns:minmax(0,1fr);gap:.35rem}
  .gruppen .nr{padding-top:0}
}
.gruppen h3{font:500 clamp(1.12rem, .95rem + .5vw, 1.34rem)/1.28 var(--titel);
  color:var(--tinte);margin:0 0 .5rem}
.gruppen p{font-size:1.01rem;color:var(--tinte-2);max-width:62ch;margin:0}

/* Der Preis-Absatz ist der Nutzwert der Seite und muss sich vom
   beschreibenden Satz darueber absetzen. Ein senkrechter Strich statt einer
   Hinterlegung: Auf dem stillen Papier waere eine zweite Flaeche eine
   Karte, und Karten hat diese Seite bewusst keine. */
.gruppen-zaehlt{margin-top:.85rem !important;padding-left:1.05rem;
  border-left:2px solid var(--linie-stark);
  font-size:.97rem !important;color:var(--tinte-2)}
.gruppen-zaehlt b{color:var(--tinte);font-weight:600}

/* Vorspann ueber einer Liste, die selbst kein .fliess ist. */
.einzug{max-width:62ch;margin:0}

/* Ein `.fliess` ist ein Grid. Steht es als Spalte in einem `.paar` neben
   einer hohen Nachbarspalte (etwa einem Formular), streckt es sich auf deren
   Hoehe und verteilt seine Absaetze ueber die ganze Strecke - zwischen zwei
   Saetzen klaffte auf /katalog eine Luecke von rund 200 px, und der
   Randstrich der Schlussnotiz lief ins Leere. `align-content:start` legt die
   Zeilen wieder oben aufeinander; der Abstand bleibt der aus `gap`. */
.paar > .fliess{align-content:start}

/* ══ Karten und Flächen ═══════════════════════════════════════════════════
   Nachgezogen am 22.08.2026. Bis dahin bestand die Seite unterhalb des
   Aufmachers fast nur aus Haarlinien auf Papier. Der Aufmacher selbst hatte
   eine dunkle Tafel, eine geschichtete Aufstellung und Schatten - und genau
   dieser Unterschied war der Befund: Die Startseite verspricht eine gebaute
   Oberfläche, die Unterseiten liefern Fließtext mit Trennstrichen.

   Die Karte ist deshalb KEIN Dekorationselement, sondern die Fortsetzung der
   Sprache, die der Aufmacher schon spricht: weiße Fläche über beigem Papier,
   ein Haarrand, ein sehr weicher tiefer Schatten. Zwei Schatten übereinander,
   weil ein einzelner entweder hart (nah) oder wolkig (weit) aussieht — der
   nahe zeichnet die Kante, der weite hebt das Blatt vom Papier. */
.karte{background:#fff;border:1px solid var(--linie);border-radius:3px;
  box-shadow:0 1px 2px rgba(20,25,32,.045),
             0 16px 34px -20px rgba(13,50,102,.34)}
.karte-innen{padding:clamp(1.35rem,2.1vw,1.95rem)}
.karte-kopf{padding:clamp(1.15rem,1.8vw,1.5rem) clamp(1.35rem,2.1vw,1.95rem);
  border-bottom:1px solid var(--linie);display:grid;gap:.35rem}
.karte-kopf h2,.karte-kopf h3{font-size:1.3rem;margin:0}

.karte-kopf p{font-size:.94rem;color:var(--tinte-2);max-width:46ch}
/* Auf dem weißen Karteninneren stünde ein weißes Feld sonst weiß auf weiß.
   background-COLOR und nicht background: Die Kurzform setzt auch
   background-image zurück — und genau dort steckt der eigene Pfeil des
   <select>. Mit der Kurzform war das Auswahlfeld auf der Kontaktseite
   pfeillos und damit nicht als Auswahl erkennbar. */
.karte .feld input,.karte .feld select,.karte .feld textarea,
.karte .feld-einheit{background-color:var(--papier)}
.karte .feld input:focus,.karte .feld select:focus,
.karte .feld textarea:focus{background-color:#fff}
.karte .formular{max-width:none}

/* ── Kontaktseite: zwei Spalten mit dunklem Anker ──────────────────────────
   Die linke Spalte hält die überprüfbaren Angaben und bleibt beim Scrollen
   stehen. Dunkel, weil die Seite sonst durchgehend beige-auf-beige ist und
   der Blick keinen Halt findet — und weil dieselbe Farbe schon die Tafel im
   Aufmacher trägt. */
.kontakt-gitter{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);
  gap:2.8rem;align-items:start}
@media (max-width:940px){.kontakt-gitter{grid-template-columns:minmax(0,1fr)}}

.tafel-kontakt{background:var(--nacht);color:#fff;border-radius:3px;
  padding:clamp(1.5rem,2.4vw,2.1rem);position:sticky;top:1.6rem;
  box-shadow:0 18px 40px -22px rgba(8,32,63,.7)}
@media (max-width:940px){.tafel-kontakt{position:static}}
.tafel-kontakt .nr{color:var(--nacht-text)}
.tk-ruf{margin:.9rem 0 0;font:400 clamp(1.6rem, 1.2rem + 1.4vw, 2.15rem)/1.1 var(--titel);
  letter-spacing:-.022em}
.tk-ruf a{color:#fff;text-decoration:none}
.tk-ruf a:hover{color:var(--nacht-text)}
.tk-unter{margin-top:.45rem;font-size:.93rem;color:#C3D5EA}
.tk-zeile{margin-top:1.35rem;padding-top:1.2rem;
  border-top:1px solid rgba(255,255,255,.16);display:grid;gap:.2rem}
.tk-zeile dt,.tk-marke{font:500 .7rem/1.4 var(--grotesk);letter-spacing:.17em;
  text-transform:uppercase;color:var(--nacht-text)}
.tk-zeile dd{margin:0;font-size:.98rem;color:#E4ECF6}
.tk-zeile a{color:#E4ECF6;text-underline-offset:.22em}
.tk-zeile a:hover{color:#fff}
/* Warnhinweis im dunklen Feld. Eigene Fläche statt nur eines Randstrichs:
   Er ist die einzige Stelle der Seite, die vor etwas warnt. */
.tk-warnung{margin-top:1.5rem;background:rgba(255,255,255,.07);
  border-left:3px solid var(--nacht-text);border-radius:0 2px 2px 0;
  padding:.95rem 1.1rem;font-size:.92rem;line-height:1.55;color:#D6E3F2}
.tk-warnung b{color:#fff;font-weight:600}

/* ── Ansprechpartner als echte Karte ──────────────────────────────────────
   Vorher: eine schraffierte Fläche neben Text, ohne Behälter. Das sah nicht
   nach Platzhalter aus, sondern nach einem Bild, das nicht geladen hat. */
.person-karte{display:grid;grid-template-columns:112px minmax(0,1fr);
  gap:1.25rem;align-items:start}
@media (max-width:420px){.person-karte{grid-template-columns:88px minmax(0,1fr);gap:1rem}}
.person-karte .person-bild{width:100%;margin:0}
.person-rolle{margin-top:.3rem;font-size:.94rem;color:var(--tinte-2)}
.person-zeile{margin-top:.9rem;padding-top:.85rem;
  border-top:1px solid var(--linie);display:flex;flex-wrap:wrap;
  align-items:baseline;gap:.35rem 1.4rem}
.person-zeile a{font:600 1.04rem/1 var(--grotesk);color:var(--tinte);
  text-decoration:none}
.person-zeile a:hover{color:var(--signal)}
.person-zeile .hilfe{margin:0}

/* ── Rückruf als Karte im Karteninneren ───────────────────────────────────
   Die alte Fassung war ein <details> mit einer Haarlinie darunter und hat
   sich optisch nicht von einem Absatz unterschieden. */
.rueckruf-karte{margin-top:1.3rem;border:1px solid var(--linie);
  border-radius:2px;background:var(--papier)}
.rueckruf-karte > summary{cursor:pointer;list-style:none;
  padding:.95rem 2.6rem .95rem 1.1rem;position:relative;
  font:500 .98rem/1.4 var(--grotesk);color:var(--signal)}
.rueckruf-karte > summary::-webkit-details-marker{display:none}
.rueckruf-karte > summary:hover{background:rgba(0,74,173,.045)}
.rueckruf-karte > summary::after{content:"";position:absolute;right:1.15rem;
  top:1.25rem;width:8px;height:8px;border-right:1.5px solid currentColor;
  border-bottom:1.5px solid currentColor;transform:rotate(45deg);
  transition:transform var(--schnell) var(--kurve)}
.rueckruf-karte[open] > summary{border-bottom:1px solid var(--linie)}
.rueckruf-karte[open] > summary::after{transform:rotate(-135deg)}
.rueckruf-karte .formular{padding:1.25rem 1.1rem 1.35rem;max-width:none}
.rueckruf-karte .feld input,.rueckruf-karte .feld select{background:#fff}

/* Zwei Felder nebeneinander. Name/Firma und E-Mail/Telefon gehören paarweise
   zusammen; untereinander wird das Formular unnötig lang und liest sich wie
   ein Antrag. auto-fit mit Mindestbreite statt fester Zweispaltigkeit: Auf
   dem Telefon wird daraus von selbst wieder eine Spalte. */
.feld-paar{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr));
  gap:1.25rem}
.kontakt-rechts{display:grid;gap:0}
.pflicht{color:var(--signal);font-weight:600}

/* ══ Leistungsabschnitt: Text und Faktentafel ═════════════════════════════
   Die fünf Leistungen bestanden aus Überschrift, zwei Absätzen, einem Knopf
   — und danach rund 400 px Leere. Fünfmal übereinander. Das ist der Grund,
   warum die Seite trotz sorgfältigem Text unfertig wirkte: Weißraum ohne
   etwas, das ihn hält, liest sich nicht als Ruhe, sondern als Lücke.

   Die Tafel rechts erfindet nichts. Sie zieht heraus, was im Absatz daneben
   ohnehin steht, und macht es nachschlagbar: Wer beauftragt, was herauskommt,
   was ausdrücklich NICHT geleistet wird. Genau die drei Fragen, die ein
   Verwalter zuerst stellt. */
.leistung{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);
  gap:2.4rem;align-items:start}
@media (max-width:900px){.leistung{grid-template-columns:minmax(0,1fr);gap:2rem}}
.leistung .fliess{max-width:58ch}

.fakten{background:#fff;border:1px solid var(--linie);border-radius:3px;
  padding:1.3rem 1.4rem 1.4rem;
  box-shadow:0 1px 2px rgba(20,25,32,.04),
             0 14px 30px -20px rgba(13,50,102,.28)}
/* Auf der stillen Fläche würde eine weiße Karte gegen das Beige kippen und
   wie ein Fremdkörper wirken — dort trägt sie das Papier des Abschnitts. */
.teil-still .fakten{background:var(--papier)}
/* Die Karten-Marke steht direkt ueber der ersten Feldmarke, und beide sind
   gesperrte Grossbuchstaben. Ohne Trennlinie liest man zwei Beschriftungen
   uebereinander und keine davon als Ueberschrift. */
.fakten > .nr{padding:0 0 .8rem;margin-bottom:1rem;display:flex;
  border-bottom:1px solid var(--linie);color:var(--tinte-2)}
.fakten dl{margin:0;display:grid;gap:0}
.fakten dt{font:500 .74rem/1.4 var(--grotesk);letter-spacing:.13em;
  text-transform:uppercase;color:var(--tinte-3);
  padding-top:.85rem;border-top:1px solid var(--linie)}
.fakten dl > dt:first-of-type{padding-top:0;border-top:0}
.fakten dd{margin:.22rem 0 .85rem;font-size:.96rem;line-height:1.5;
  color:var(--tinte)}
.fakten dd:last-of-type{margin-bottom:0}
.fakten dd b{font-weight:600}

/* Warengruppen als Marken statt als Aufzählung im Fließtext. Eine
   Kommaliste mit neun Gliedern liest niemand zu Ende; neun Marken erfasst
   man mit einem Blick. */
.marken{display:flex;flex-wrap:wrap;gap:.4rem;margin:.3rem 0 0;padding:0;
  list-style:none}
.marken li{font:400 .78rem/1 var(--mono);color:var(--tinte-2);
  background:var(--papier-2);border:1px solid var(--linie);border-radius:2px;
  padding:.42rem .6rem}
.teil-still .marken li{background:#fff}

/* Ein Hinweis, der eine Grenze zieht ("keine Rechtsberatung"). Er gehört
   sichtbar in die Tafel und nicht ans Ende eines Absatzes: Wer ihn dort
   überliest, hat eine falsche Erwartung. */
.grenze{margin-top:1.1rem;padding:.8rem .9rem;border-radius:2px;
  background:rgba(0,74,173,.055);border-left:3px solid var(--signal);
  font-size:.92rem;line-height:1.5;color:var(--tinte-2)}
.grenze b{color:var(--tinte);font-weight:600}

/* ── Schrittliste auf breiten Schirmen ────────────────────────────────────
   Bei 1440 px stand die Liste in einer 66-Zeichen-Spalte und liess das
   rechte Drittel der Seite leer. Ab 1000 px bekommt sie deshalb eine dritte
   Spalte: Nummer, Titel, Text nebeneinander. Das liest sich als Ablauf und
   nicht als Aufzaehlung — und es benutzt die Breite, die ohnehin da ist.

   ACHTUNG, dieselbe Falle wie zuvor: `::before` ist im Grid ein eigenes
   Rasterfeld. `.schritte li > *{grid-column:2}` weiter oben schiebt SONST
   auch den Absatz in Spalte 2, und beide lägen uebereinander. Deshalb hier
   Titel und Absatz ausdruecklich in Spalte 2 bzw. 3 und beide in Zeile 1. */
@media (min-width:1000px){
  .schritte li{grid-template-columns:3.4rem minmax(8rem,13rem) minmax(0,1fr);
    gap:0 2.4rem;padding:1.9rem 0}
  .schritte li > b{grid-column:2;grid-row:1;margin-bottom:0;
    font-size:1.2rem;line-height:1.24}
  .schritte li > p{grid-column:3;grid-row:1;max-width:66ch}
  /* EIN Schritt kann MEHR ALS EINEN Absatz haben. `grid-row:1` oben setzt
     jeden davon in dieselbe Zelle — zwei Absätze lagen damit uebereinander,
     Buchstabe auf Buchstabe. Gemessen: beide bei top 4646, Hoehe 127 px,
     eine einzige Rasterzeile.

     Der Geschwisterwaehler gibt jedem weiteren Absatz eine eigene Zeile.
     `auto` statt fester Nummern, damit auch ein dritter noch passt. */
  .schritte li > p ~ p{grid-row:auto}
  .schritte li{grid-auto-rows:auto}
}
/* Ein Schritt wird beim Ueberfahren hell hinterlegt. Bewusst sehr leise:
   Die Liste ist kein Menue, aber sie soll spuerbar zusammengehoerige Zeilen
   haben statt getrennter Absaetze. */
.schritte li{transition:background var(--schnell) var(--kurve);
  padding-inline:.9rem;margin-inline:-.9rem;border-radius:2px}
.schritte li:hover{background:rgba(13,50,102,.035)}

/* ── Zielgruppenliste auf breiten Schirmen ────────────────────────────────
   Gleiche Behandlung wie die Schrittliste: Ab 1000 px wandert der Titel in
   eine eigene Spalte neben den Text. Vorher stand der Block in einer
   62-Zeichen-Spalte und liess rechts ein Drittel der Seite frei.

   `.posten > div` ist der Container um h3, p und den Verweis — die drei
   liegen im Markup zusammen und lassen sich nur so trennen. */
@media (min-width:1000px){
  .posten > div{display:grid;
    grid-template-columns:minmax(8rem,13rem) minmax(0,1fr);
    gap:.3rem 2.4rem;align-items:start}
  .posten > div > h3{grid-column:1;grid-row:1;margin-bottom:0}
  .posten > div > p,.posten > div > a,.posten > div > .knopf-reihe{grid-column:2}
  .posten p{max-width:66ch}
}

/* Wertetafel auf dunklem Grund. Dieselbe Bauform wie `.protokoll`, nur mit
   den Linien und Tönen des dunklen Abschnitts. */
.teil-dunkel .protokoll dt{color:var(--nacht-text);
  border-top-color:rgba(255,255,255,.16)}
.teil-dunkel .protokoll dd{color:#E4ECF6;
  border-top-color:rgba(255,255,255,.16)}
.teil-dunkel .protokoll dt:first-of-type,
.teil-dunkel .protokoll dd:first-of-type{border-top:0}

/* Bildfläche im Aufmacher. Ersetzt die Muster-Tabelle. Derselbe Schatten und
   dieselbe Kantenschärfe wie die Tafel daneben, damit beide als ein Paar
   gelesen werden und nicht als Text mit Bild daneben. */
.riss-bildflaeche{margin:0;border-radius:8px;overflow:hidden;
  box-shadow:0 2px 4px rgba(6,26,52,.22), 0 26px 54px -22px rgba(6,26,52,.7)}
.riss-bildflaeche img{width:100%;height:auto;display:block}

/* ══ Fotohintergründe ═════════════════════════════════════════════════════
   Nachgebaut nach dem System des Schwesterprojekts. Bis zum 22.08.2026 hatte
   diese Seite KEIN einziges fotografisches Hintergrundbild — das ganze
   Stylesheet enthielt genau ein `background-image`, und das war ein
   Rausch-SVG. Sechs Fotos hingen als mittelgroße Bilder in der rechten
   Hälfte eines Zweispalters. Das ist einer der drei Gründe, warum die Seite
   generiert wirkte.

   DER VERLAUF IST PFLICHT, NICHT GESCHMACK.
   Ohne ihn steht weiße Schrift irgendwann auf einer hellen Bildstelle. Der
   Verlauf liegt deshalb im BASISREGELSATZ; eine Variante setzt nur noch das
   Bild. Wer eine neue Variante anlegt, kann den Verlauf gar nicht vergessen.

   Die Bildpfade stehen im STYLESHEET und nicht in einem style-Attribut:
   Die Richtlinie dieser Seite erlaubt kein Inline-CSS. */
.foto-grund{position:relative;isolation:isolate;
  background-color:var(--nacht-tief);color:#fff;
  background-size:cover;background-position:center;
  background-repeat:no-repeat;border-top:0}
.foto-grund::before{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(96deg,
    rgba(6,26,52,.94) 0%, rgba(6,26,52,.88) 42%,
    rgba(6,26,52,.62) 78%, rgba(6,26,52,.5) 100%)}
.foto-grund h2,.foto-grund h3{color:#fff}
.foto-grund .nr{color:var(--nacht-text)}
.foto-grund .weich,.foto-grund p{color:#CFDDEF}
.foto-grund b{color:#fff}
.foto-grund .pruefen li{color:#CFDDEF}
.foto-grund .pruefen b{color:#fff}
.foto-grund .pruefen li::before{color:var(--nacht-text)}

/* Auf schmalen Schirmen läuft der Verlauf senkrecht: Der seitliche Verlauf
   lässt bei 375 px die rechte Bildhälfte frei, und genau dort steht dann der
   umgebrochene Text. */
@media (max-width:760px){
  .foto-grund::before{background:linear-gradient(178deg,
    rgba(6,26,52,.93) 0%, rgba(6,26,52,.9) 55%, rgba(6,26,52,.86) 100%)}
}

/* Wer Transparenz abbestellt hat, bekommt die Fläche ohne Foto. */
@media (prefers-reduced-transparency:reduce){
  .foto-grund{background-image:none !important}
}

/* Die Varianten setzen NUR das Bild. */
.fg-halle{background-image:url("../img/szene/grund-halle-1600.webp")}
.fg-werkstatt{background-image:url("../img/szene/werkstatt-1440.webp")}
.fg-sichtung{background-image:url("../img/szene/sichtung-1440.webp")}
.fg-wand{background-image:url("../img/szene/wand-1920.webp")}
@media (max-width:760px){
  .fg-halle{background-image:url("../img/szene/grund-halle-960.webp")}
  .fg-werkstatt{background-image:url("../img/szene/werkstatt-960.webp")}
  .fg-sichtung{background-image:url("../img/szene/sichtung-960.webp")}
  .fg-wand{background-image:url("../img/szene/wand-960.webp")}
}

/* Trennband: ein schmaler Bildstreifen zwischen zwei Abschnitten. Format
   4,6:1 — das hat die Seite sonst nirgends, und es trennt, ohne eine eigene
   Bildfläche zu beanspruchen. */
.band{display:block;width:100%;height:clamp(120px,15vw,210px);
  object-fit:cover;object-position:center 45%}

/* Verweise auf dunklem Grund. `a{color:var(--signal)}` ist Markenblau und
   steht auf Nachtblau bei 2:1 — gemessen auf /kontakt, nachdem dort der neue
   Registerabschnitt dazugekommen war. Auf dunklen Flächen deshalb der helle
   Ton, der auch die Fußzeile trägt. */
.teil-dunkel .fliess a,.foto-grund .fliess a,
.teil-dunkel .protokoll a,.foto-grund .protokoll a,
.teil-dunkel p a,.foto-grund p a{color:#CFE0F4;text-underline-offset:.22em}
.teil-dunkel .fliess a:hover,.foto-grund .fliess a:hover,
.teil-dunkel p a:hover,.foto-grund p a:hover{color:#fff}
/* Schaltflaechen behalten ihre eigene Farbgebung. */
.teil-dunkel a.knopf-voll,.foto-grund a.knopf-voll{color:var(--nacht)}
.teil-dunkel a.knopf-linie,.foto-grund a.knopf-linie{color:#fff}

/* ══ Blätterbares Heft ════════════════════════════════════════════════════
   Zwei Seiten nebeneinander, dazwischen der Bund. Das drehende Blatt liegt
   als drittes Element darüber und ist im Ruhezustand versteckt.

   Ohne JavaScript zeigt `.heft-liste` alle Seiten untereinander. Erst wenn
   das Skript übernimmt, setzt es `.heft-bereit` — und erst dann wird die
   Liste zur Bühne umgebaut. So sieht niemand ein halb aufgebautes Heft. */
.heft-rahmen{margin:0}
.heft-liste{list-style:none;margin:0;padding:0;display:grid;gap:1rem;
  max-width:640px}
.heft-liste img{width:100%;height:auto;border:1px solid var(--linie);
  border-radius:2px}
.heft-buehne,.heft-steuer{display:none}

.heft-bereit .heft-liste{display:none}
.heft-bereit .heft-buehne,.heft-bereit .heft-steuer{display:flex}

/* Die BREITE der Buehne ist der eine Wert, aus dem alles andere folgt:
   Jede Seite ist die Haelfte davon, ihre Hoehe ergibt sich aus dem
   DIN-Verhaeltnis. Drei Deckel, alle drei noetig:
     78vw   - laesst links und rechts Luft fuer die Pfeile
     1000px - ab hier wird das Papier nicht mehr besser, nur groesser
     96vh   - Hoehendeckel, umgerechnet: Seitenhoehe = Buehnenbreite x 0,707,
              also passt 96vh Breite zu ~68vh Blatthoehe. Ohne diesen Wert
              stand die Bedienung auf einem 1366x768-Laptop unter der Falz. */
.heft-buehne{position:relative;justify-content:center;align-items:stretch;
  width:min(78vw,1000px,96vh);align-items:flex-start;
  gap:0;perspective:2400px;perspective-origin:center 42%;
  touch-action:pan-y}
/* Die Seite wird ueber die HOEHE bemessen, nicht ueber die Breite. Vorher
   war sie 430 px breit und damit 608 px hoch - zusammen mit der Kopfzeile und
   dem Abschnittsrand passte das Heft auf einem 1366x768-Laptop nicht ins
   Bild, und der Seitenzaehler stand 156 px unter der Falz.

   `min(52vh, 560px)` deckelt die Hoehe am Fenster: Auf einem kleinen Schirm
   wird das Heft kleiner, statt aus dem Bild zu laufen. Die Breite ergibt
   sich aus dem DIN-Verhaeltnis. */
/* Die Groesse haengt jetzt an der BREITE der Buehne und wird nur noch von
   der Fensterhoehe gedeckelt. Vorher war es umgekehrt: `height:min(52vh,...)`
   band die Seite an die Fensterhoehe, und auf einem 1440x900-Schirm blieb
   die Titelseite bei 331 px - 23 Prozent der Fensterbreite, mit 645 px
   ungenutztem Platz daneben. Ein Heft, das man aufschlaegt, muss das
   Bildfeld fuellen. */
/* `align-items:flex-start` auf der Buehne und das Bild absolut im Blatt:
   Sonst streckt der Flexcontainer die Seite auf die Zeilenhoehe, das
   Seitenverhaeltnis rechnet daraus eine neue BREITE zurueck, und die Seite
   wird schmaler als ihre halbe Buehne - gemessen 414 statt 432 px. Das ist
   der Grund, warum die Pfeile nicht am Blatt standen: Zwischen Blattrand
   und Buehnenrand lag Luft, die niemand angefordert hatte.
   1,415 ist das gemessene Verhaeltnis der 29 Seitenbilder (1400x1981), nicht
   das theoretische DIN-Mass 1,4142 - sonst bleibt oben ein weisser Strich. */
.heft-seite{flex:0 0 50%;position:relative;background:var(--papier-2);
  aspect-ratio:1 / 1.415;overflow:hidden}
.heft-seite img{position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;display:block}
/* Der Bund: ein schmaler Schatten in der Mitte, damit zwei Bilder als ein
   aufgeschlagenes Heft gelesen werden und nicht als zwei Kacheln. */
.heft-seite-links{box-shadow:inset -14px 0 22px -14px rgba(20,25,32,.45),
  0 12px 30px -18px rgba(13,50,102,.5)}
.heft-seite-rechts{box-shadow:inset 14px 0 22px -14px rgba(20,25,32,.45),
  0 12px 30px -18px rgba(13,50,102,.5)}

/* Das drehende Blatt. transform-style:preserve-3d ist Pflicht, sonst liegen
   Vorder- und Rückseite flach übereinander und die Rückseite erscheint nie. */
/* `will-change` steht NICHT mehr dauerhaft hier. Eine permanente
   Compositor-Ebene für ein Blatt, das die meiste Zeit versteckt ist, ist
   genau das Muster, das im Schwesterprojekt in Eisenach 50 ms Bildabstand
   verursacht hat. Gesetzt wird es erst, wenn wirklich gezogen wird —
   `.heft-zieht` liegt dann auf der Bühne. */
.heft-blatt{position:absolute;top:0;bottom:0;width:50%;
  transform-style:preserve-3d;z-index:3;
  pointer-events:none}
.heft-zieht .heft-blatt{will-change:transform}
.heft-blatt[data-richtung="vor"]{left:50%;transform-origin:left center}
.heft-blatt[data-richtung="zurueck"]{right:50%;transform-origin:right center}
.heft-blatt > div{position:absolute;inset:0;backface-visibility:hidden;
  -webkit-backface-visibility:hidden;background:var(--papier-2);
  box-shadow:0 14px 34px -16px rgba(13,50,102,.6)}
.heft-blatt > div img{width:100%;height:100%;object-fit:cover;display:block}
.heft-blatt [data-hinten]{transform:rotateY(180deg)}

.heft-steuer{align-items:center;justify-content:center;gap:1.1rem;
  margin-top:1.3rem}
/* NUR die Symbolknoepfe sind quadratisch. Die Regel traf vorher auch den
   Textknopf "Seite gross ansehen": Der bekam 44 px Breite, sein Text 140 px
   - und stand damit 57 px links und 34 px rechts ueber seinen eigenen
   Rahmen hinaus, quer ueber den Nachbartext. Genau das hat der Auftraggeber
   als "die Bedienelemente ueberlagern sich" gemeldet. */
.heft-steuer button:not(.knopf-linie):not(.knopf-voll){
  width:44px;height:44px}
.heft-steuer button{display:inline-flex;align-items:center;justify-content:center;
  min-height:44px;border:1px solid var(--linie-stark);border-radius:2px;
  padding:0 1rem;font:500 .9rem/1 var(--grotesk);white-space:nowrap;
  background:#fff;color:var(--tinte);cursor:pointer;
  transition:border-color var(--schnell) var(--kurve),
             background var(--schnell) var(--kurve)}
.heft-steuer button:hover:not(:disabled){border-color:var(--signal);
  color:var(--signal)}
.heft-steuer button:disabled{opacity:.38;cursor:default}
.heft-steuer button svg{width:17px;height:17px;fill:none;stroke:currentColor;
  stroke-width:1.8}
.heft-stand{font:400 .9rem/1 var(--mono);color:var(--tinte-2);
  min-width:16ch;text-align:center;font-variant-numeric:tabular-nums}

/* Schmaler Schirm: eine Seite. Das Umblättern ist dort ein Wechsel, keine
   Drehung — eine 3D-Drehung auf halber Bildschirmbreite sieht nach Fehler
   aus und kostet auf schwachen Geräten mehr, als sie zeigt. */
@media (max-width:760px){
  .heft-buehne{perspective:none}
  /* Auf dem Telefon muss ausser der Seite auch die Bedienung ins Bild -
     Pfeile und Zaehler stehen dort UNTER dem Heft. 44 vh laesst Platz dafuer;
     mit 58 vh standen beide unter der Falz. */
  .heft-buehne{width:min(100%,420px,46vh)}
  .heft-seite{flex:0 0 100%}
  .heft-seite-rechts{box-shadow:0 10px 26px -16px rgba(13,50,102,.5)}
  .heft-blatt{display:none}
}

/* ── Kopfzeile über Heft und Warenliste ───────────────────────────────────
   Diese beiden Abschnitte laufen über die volle Breite und nicht im
   hängenden Raster — ein aufgeschlagenes Heft in eine 66-Zeichen-Spalte zu
   setzen, wäre die Sache falsch herum. */
.heft-kopf{display:flex;flex-wrap:wrap;align-items:flex-end;
  justify-content:space-between;gap:.9rem 2.4rem;margin-bottom:1.9rem;
  padding-bottom:1.2rem;border-bottom:1px solid var(--linie)}
.heft-kopf h2{margin-top:.55rem}
.heft-hinweis{font-size:.92rem;line-height:1.55;color:var(--tinte-2);
  max-width:52ch}

/* ══ Weiche: drei Zielgruppen ═════════════════════════════════════════════
   An dieser Stelle entscheidet der Besucher, welcher der drei Fälle auf ihn
   zutrifft. Nebeneinander vergleicht man, untereinander liest man — deshalb
   Karten und keine Liste.

   Jede Karte trägt vier Teile in fester Reihenfolge: Symbol, Titel, Absatz,
   und eine Zeile „Sie bekommen", die das Versprechen greifbar macht. Ohne
   den vierten Teil sind es drei Selbstbeschreibungen. */
.wege{list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));
  gap:1.4rem}
.wege li{display:grid;align-content:start;gap:.75rem;
  background:#fff;border:1px solid var(--linie);border-radius:3px;
  padding:clamp(1.35rem,2vw,1.75rem);
  box-shadow:0 1px 2px rgba(20,25,32,.04),
             0 14px 30px -20px rgba(13,50,102,.28);
  transition:border-color var(--schnell) var(--kurve),
             transform var(--schnell) var(--kurve),
             box-shadow var(--schnell) var(--kurve)}
/* Beim Überfahren hebt die Karte sich einen Pixel. Mehr nicht — eine Karte,
   die springt, lenkt von der Entscheidung ab, die hier getroffen wird. */
.wege li:hover{border-color:var(--linie-stark);transform:translateY(-2px);
  box-shadow:0 2px 4px rgba(20,25,32,.05),
             0 20px 38px -20px rgba(13,50,102,.34)}
@media (prefers-reduced-motion:reduce){.wege li:hover{transform:none}}

.wege-symbol{display:inline-flex;align-items:center;justify-content:center;
  width:42px;height:42px;border-radius:2px;background:var(--nacht);flex:none}
.wege-symbol svg{width:21px;height:21px;fill:none;stroke:#fff;
  stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.wege h3{margin:.35rem 0 0}
.wege p{font-size:.97rem;line-height:1.58;color:var(--tinte-2);margin:0}

.wege-fakt{margin:.35rem 0 0;padding-top:.85rem;
  border-top:1px solid var(--linie);display:grid;gap:.2rem}
.wege-fakt dt{font:500 .7rem/1.4 var(--grotesk);letter-spacing:.15em;
  text-transform:uppercase;color:var(--tinte-3)}
.wege-fakt dd{margin:0;font-size:.93rem;line-height:1.5;color:var(--tinte)}

/* Der Verweis sitzt am Fuß der Karte. `margin-top:auto` schiebt ihn nach
   unten, damit bei unterschiedlich langen Texten alle drei auf einer Linie
   stehen — ungleiche Fußzeilen lassen ein Kartenraster unfertig wirken. */
.wege-tat{margin-top:auto;padding-top:1rem;justify-self:start;
  font:600 .93rem/1 var(--grotesk);color:var(--signal);text-decoration:none;
  display:inline-flex;align-items:center;gap:.45rem}
.wege-tat::after{content:"→";font-size:1.05em;
  transition:transform var(--schnell) var(--kurve)}
.wege li:hover .wege-tat::after{transform:translateX(3px)}

/* ── HIER STANDEN WARENLISTE UND BESTANDSFILTER ───────────────────────────
   168 Zeilen fuer eine Liste, die es nicht mehr gibt (siehe katalog.html).
   Mitgegangen ist die klebende Filterleiste — die, die beim Scrollen ueber
   dem Text schwebte und die der Auftraggeber als „sieht komisch aus"
   gemeldet hat.

   Die Lehre steht schon einen Bildschirm weiter oben beim toten
   Katalogdeckel: Weggeloeschtes Markup ohne die zugehoerigen Regeln
   hinterlaesst Namen, die spaeter ein anderes Bauteil trifft. */

/* ── Prüfkasten ───────────────────────────────────────────────────────────
   Die Seite behauptet an mehreren Stellen, sie sei nachprüfbar. Bis heute
   bot sie keinen einzigen Weg dorthin. Der Kasten hebt sich vom Fließtext
   ab, weil er kein Text ist, sondern eine Aufforderung. */
.pruefkasten{margin-top:1.9rem;padding:1.3rem 1.4rem;
  background:rgba(0,74,173,.045);border:1px solid rgba(0,74,173,.18);
  border-radius:3px;max-width:44rem;display:grid;gap:.7rem}
.pruefkasten .nr{color:var(--signal)}
.pruefkasten p{font-size:.98rem;line-height:1.6;color:var(--tinte-2)}
.pruefkasten b{color:var(--tinte)}
.pruefkasten .knopf-reihe{margin-top:.2rem}
.pruefkasten .hilfe{margin:0}

/* Auf dem schmalsten Geraet darf die Beschriftung eines Knopfes umbrechen.
   „Insolvenzbekanntmachungen" ist ein Wort von 25 Zeichen; ohne Trennung
   schiebt es bei 320 px den ganzen Abschnitt ueber den Rand. Die
   Trennstellen stehen als &shy; im Markup, hier wird nur erlaubt, sie zu
   benutzen. */
@media (max-width:400px){
  .pruefkasten .knopf-linie,.pruefkasten .knopf-voll{
    white-space:normal;text-align:left;hyphens:auto;-webkit-hyphens:auto}
}

/* ══ Objektkacheln ════════════════════════════════════════════════════════
   Sechs Positionen im ersten Drittel der Startseite. Die Bauform ist beim
   Schwesterprojekt abgeschaut, weil sie dort nachweislich funktioniert:
   Warengruppe als Marke, Titel, eine kleine Datentafel mit umrandeten
   Zellen, Preis mit Steuerhinweis, Verweis in den Katalog.

   Die Datentafel in Zellen und nicht als Fließtext ist der Punkt, an dem
   eine Kachel nach Datenblatt aussieht statt nach Anzeige — drei Werte, die
   man untereinander vergleichen kann, ohne zu lesen. */
.objekte{list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));
  gap:1.3rem}
.objekte li{display:grid;align-content:start;gap:.55rem;
  background:#fff;border:1px solid var(--linie);border-radius:3px;
  padding:1.25rem 1.3rem 1.1rem;
  box-shadow:0 1px 2px rgba(20,25,32,.04),
             0 14px 30px -20px rgba(13,50,102,.26);
  transition:border-color var(--schnell) var(--kurve),
             transform var(--schnell) var(--kurve),
             box-shadow var(--schnell) var(--kurve)}
.objekte li:hover{border-color:var(--linie-stark);transform:translateY(-2px);
  box-shadow:0 2px 4px rgba(20,25,32,.05),
             0 20px 38px -20px rgba(13,50,102,.32)}
@media (prefers-reduced-motion:reduce){.objekte li:hover{transform:none}}

.objekt-marke{align-self:start;justify-self:start;
  font:400 .72rem/1 var(--mono);color:var(--tinte-2);
  background:var(--papier-2);border:1px solid var(--linie);border-radius:2px;
  padding:.36rem .55rem}
.objekte h3{font-size:1.04rem;line-height:1.35;margin:.15rem 0 0;
  /* Katalogtitel sind lang und voll Sonderzeichen ("PANO|20''|HiFi3D").
     Ohne Deckel wird aus einer Kachel eine Textwand. */
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden}
.objekte h3 a{color:var(--tinte);text-decoration:none}
.objekte li:hover h3 a{color:var(--signal)}

.objekt-daten{margin:.5rem 0 0;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(72px,1fr));
  border:1px solid var(--linie);border-radius:2px;overflow:hidden}
.objekt-daten > div{padding:.5rem .6rem;border-left:1px solid var(--linie);
  min-width:0}
.objekt-daten > div:first-child{border-left:0}
.objekt-daten dt{font:500 .64rem/1.3 var(--grotesk);letter-spacing:.11em;
  text-transform:uppercase;color:var(--tinte-3)}
.objekt-daten dd{margin:.15rem 0 0;font:500 .88rem/1.3 var(--grotesk);
  color:var(--tinte);overflow-wrap:anywhere}

.objekt-fuss{margin-top:auto;padding-top:.85rem;
  border-top:1px solid var(--linie);
  display:flex;flex-wrap:wrap;align-items:baseline;
  justify-content:space-between;gap:.4rem 1rem}
.objekt-preis{font:600 1.1rem/1.2 var(--grotesk);color:var(--tinte);
  font-variant-numeric:tabular-nums}
.objekt-preis span{display:block;margin-top:.16rem;
  font:400 .74rem/1.3 var(--mono);color:var(--tinte-3)}
.objekt-tat{font:600 .88rem/1 var(--grotesk);color:var(--signal);
  text-decoration:none;white-space:nowrap}
.objekt-tat::after{content:" →"}

/* ── Sechs Prüfpunkte ─────────────────────────────────────────────────────
   Auf dem dunklen Fotogrund. Zweispaltig ab 820 px, sonst untereinander.
   Nummer und Text in getrennten Spalten, damit die Ziffern eine Linie
   bilden — sechs Punkte, die nicht ausgerichtet sind, liest man als
   Absätze und nicht als Liste. */
.pruefpunkte{list-style:none;margin:2.1rem 0 0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));
  gap:1.7rem 2.8rem}
.pruefpunkte li{display:grid;grid-template-columns:2.6rem minmax(0,1fr);
  gap:0 1rem;align-items:start;
  padding-top:1.1rem;border-top:1px solid rgba(255,255,255,.2)}
.pp-nr{font:500 .78rem/1.7 var(--mono);color:var(--nacht-text);
  font-variant-numeric:tabular-nums}
.pruefpunkte b{display:block;font:600 1.02rem/1.35 var(--grotesk);
  color:#fff;letter-spacing:-.01em;margin-bottom:.35rem}
.pruefpunkte p{font-size:.95rem;line-height:1.58;color:#CFDDEF;max-width:46ch}

/* Auf dem schmalsten Geraet steht die Prüfpunkt-Nummer über dem Text statt
   daneben — 2,6 rem für die Ziffer plus Abstand sind bei 288 px Spaltenbreite
   ein Zehntel der Fläche. */
@media (max-width:400px){
  .pruefpunkte li{grid-template-columns:minmax(0,1fr);gap:.3rem}
  .pp-nr{line-height:1.2}
}

/* Die Marke im Aufmacher ist jetzt ein Verweis in den Katalog. Sie muss sich
   deshalb wie einer verhalten — vorher war sie ein Absatz und sah nur so aus. */
a.pille-tat{text-decoration:none;transition:border-color var(--schnell) var(--kurve),
  background var(--schnell) var(--kurve)}
a.pille-tat:hover{background:rgba(255,255,255,.12);
  border-color:rgba(255,255,255,.5)}
a.pille-tat::after{content:" →";opacity:.75}

/* Zwei Wege statt drei: Bei nur zwei Karten zoege auto-fit sie auf halbe
   Breite und liesse rechts eine Luecke. */
.wege-zwei{grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr))}
.besichtigung-form{margin-top:2.6rem;align-items:start}
.besichtigung-form h3{margin-bottom:.2rem}

/* Ohne eigene Marke braucht die Faktentafel oben keinen Abstand mehr — der
   erste Feldname ist jetzt die Überschrift der Tafel. */
.fakten dl > dt:first-of-type{padding-top:0}

/* ── Bildband ─────────────────────────────────────────────────────────────
   Ein Bild zwischen zwei Abschnitten, über die volle Breite. Vorher hingen
   die Fotos IN der Textspalte: Überschrift, dann 570 px Foto, dann fing der
   Text an — das unterbricht das Lesen, statt es zu gliedern.

   Keine Bildunterschrift mehr. Die alten beschrieben durchweg etwas, das im
   Bild nicht zu sehen war („Aus dieser Liste wird später die Abrechnung").
   Ein Band trennt, es erklärt nicht.

   Feste Höhe plus object-fit: Die Vorlagen haben verschiedene Seitenver-
   hältnisse; ohne Deckel wäre jedes Band anders hoch und die Seite bekäme
   drei verschiedene Rhythmen. */
/* Der Platzhalter ist Papier, nicht Nachtblau. Die Baender laden verzoegert
   (`loading="lazy"`); bis das Bild da ist, sieht man die Flaeche. In
   Nachtblau sieht das aus wie ein gewollter dunkler Streifen - auf einer
   langsamen Leitung stand da ein Balken, den niemand entworfen hat. */
.bildband{margin:0;display:block;line-height:0;background:var(--papier-2)}
.bildband img{width:100%;height:clamp(200px,24vw,360px);object-fit:cover;
  object-position:center 46%;display:block}
/* Kein Rand oben und unten: Das Band grenzt direkt an die Abschnitte, sonst
   sieht es aus wie ein Bild, das in einer Lücke liegt. */
.teil + .bildband,.bildband + .teil{border-top:0}

/* ══ Heft: Bedienung ══════════════════════════════════════════════════════
   Gemessen am 22.08.2026: Die Knopfleiste stand unter dem Heft und damit auf
   ALLEN drei getesteten Bildschirmgrößen unter der Falz — auf 1366×768 volle
   156 px darunter. Links und rechts lagen gleichzeitig 351 bzw. 359 px brach.

   Deshalb stehen die Pfeile jetzt dort. Wer das Heft sieht, sieht auch, wie
   man blättert. */
/* `1fr` in der Mitte machte die Buehne so breit wie der Rahmen - die Pfeile
   sassen dadurch am Containerrand und standen gemessene 323 px vom Blatt
   entfernt. So liest sie niemand als Bedienung des Hefts. `max-content`
   zieht die Mittelspalte auf die Breite des Hefts zusammen, und die Pfeile
   ruecken heran. `justify-content:center` haelt die Gruppe mittig. */
.heft-rahmen{position:relative;display:grid;
  grid-template-columns:auto auto auto;
  justify-content:center;
  align-items:center;gap:0 clamp(1rem,2.5vw,2rem)}

.heft-pfeil{grid-row:1;align-self:center;
  display:inline-flex;align-items:center;justify-content:center;
  width:56px;height:56px;flex:none;
  background:#fff;border:1px solid var(--linie-stark);border-radius:50%;
  color:var(--tinte);cursor:pointer;
  box-shadow:0 2px 6px rgba(20,25,32,.07);
  transition:border-color var(--schnell) var(--kurve),
             color var(--schnell) var(--kurve),
             transform var(--schnell) var(--kurve)}
.heft-pfeil:hover:not(:disabled){border-color:var(--signal);color:var(--signal)}
.heft-pfeil:active:not(:disabled){transform:scale(.94)}
.heft-pfeil:disabled{opacity:.3;cursor:default;box-shadow:none}
.heft-pfeil svg{width:22px;height:22px;fill:none;stroke:currentColor;
  stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.heft-pfeil-links{grid-column:1}
.heft-pfeil-rechts{grid-column:3}

.heft-bereit .heft-buehne{grid-column:2;grid-row:1;display:flex}
/* Greifen muss man sehen, bevor man es probiert. */
.heft-buehne{cursor:grab;user-select:none;-webkit-user-select:none;
  outline-offset:6px}
.heft-buehne.heft-zieht{cursor:grabbing}
.heft-buehne img{-webkit-user-drag:none;user-drag:none}

.heft-bereit .heft-steuer{grid-column:1 / -1;grid-row:2;
  margin-top:1.2rem;gap:1.2rem}
.heft-hinweis-zieh{font:400 .8rem/1 var(--grotesk);color:var(--tinte-3)}
@media (max-width:640px){.heft-hinweis-zieh{display:none}}

/* Der Schatten am Bund wandert mit dem Blatt. Er ist am stärksten, wenn das
   Blatt hochkant steht — das ist der Teil, aus dem der Eindruck von Papier
   entsteht, nicht die Geometrie der Drehung. */
.heft-blatt::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(90deg,rgba(20,25,32,.55),rgba(20,25,32,0) 45%);
  opacity:var(--bund,0)}
.heft-blatt[data-richtung="zurueck"]::after{
  background:linear-gradient(270deg,rgba(20,25,32,.55),rgba(20,25,32,0) 45%)}
/* contain statt cover: Vorher war das drehende Blatt 645 px hoch gegen 608 px
   der liegenden Seite — die Seite wuchs während jeder Drehung um 6 % und
   wurde beschnitten. */
.heft-blatt > div img{object-fit:contain;background:var(--papier-2)}

/* ── Vollbild ─────────────────────────────────────────────────────────── */
.vollbild{position:fixed;inset:0;z-index:200;
  background:rgba(6,26,52,.94);
  display:flex;align-items:center;justify-content:center;padding:2.5rem 1rem}
.vollbild[hidden]{display:none}
.vollbild img{max-width:min(100%,860px);max-height:100%;
  width:auto;height:auto;object-fit:contain;
  box-shadow:0 30px 70px -20px rgba(0,0,0,.7)}
.vollbild-zu{position:absolute;top:1rem;right:1.2rem;
  width:44px;height:44px;border:1px solid rgba(255,255,255,.35);
  border-radius:50%;background:transparent;color:#fff;
  font:300 1.7rem/1 var(--grotesk);cursor:pointer}
.vollbild-zu:hover{border-color:#fff;background:rgba(255,255,255,.1)}

@media (max-width:760px){
  .heft-rahmen{grid-template-columns:minmax(0,1fr)}
  .heft-pfeil{grid-column:1;grid-row:2;width:52px;height:52px}
  .heft-pfeil-links{justify-self:start}
  .heft-pfeil-rechts{justify-self:end;grid-row:2}
  .heft-bereit .heft-buehne{grid-column:1;grid-row:1}
  .heft-bereit .heft-steuer{grid-row:3;margin-top:.9rem}
}

/* Der Vollbild-Knopf steht in einer Zeile mit Zähler und Hinweis. Ohne
   nowrap bricht „Seite groß ansehen" dreizeilig aus seinem Rahmen. */
.heft-steuer .knopf-linie{white-space:nowrap;flex:none}
.heft-steuer{flex-wrap:wrap}

/* Die Marke etwas größer, enger gesperrt und in der Signalfarbe: Auftraggeber
   UND ein unabhängiger Prüfer haben die Wörter unabhängig voneinander als
   Ziffernfolge gelesen und mussten dreifach vergrößern, um zu erkennen, dass
   dort „Kostenrechnung" steht. Gesperrte Versalien bei 11,8 px und 4,75:1
   werden als Muster gelesen, nicht als Wort. Das Schwesterprojekt fährt an
   derselben Stelle 7,93:1. */
.nr{font-size:.82rem;letter-spacing:.08em;color:var(--tinte-2)}
.foto-grund .nr,.teil-dunkel .nr{color:var(--nacht-text)}

/* ── Einzugsgebiet als Liste ──────────────────────────────────────────────
   Drei Ringe nebeneinander, in jedem die Orte mit Entfernung. Ersetzt die
   gerechnete Ringkarte: Die war auf dem Telefon mit 4,9 px Ortsnamen
   unlesbar und las sich auf dem großen Schirm als Radarschirm. */
.gebiet{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));
  gap:1.6rem;margin-top:1.8rem}
.gebiet-ring{display:grid;align-content:start;gap:.9rem}
.gebiet-kopf{padding-bottom:.8rem;border-bottom:2px solid var(--nacht)}
.gebiet-kopf h3{font-size:1.06rem;margin:0}
.gebiet-kopf p{margin-top:.3rem;font-size:.9rem;line-height:1.5;
  color:var(--tinte-2)}
.gebiet-orte{list-style:none;margin:0;padding:0;display:grid;gap:0}
.gebiet-orte li{display:flex;align-items:baseline;justify-content:space-between;
  gap:.8rem;padding:.55rem 0;border-top:1px solid var(--linie);font-size:.97rem}
.gebiet-orte li:first-child{border-top:0}
.gebiet-orte b{font:500 .92rem/1 var(--mono);color:var(--tinte-2);
  font-variant-numeric:tabular-nums;white-space:nowrap}

/* Der Heft-Abschnitt meldete bei 320 px einen scrollWidth von 329 px, ohne
   dass ein einziges Kindelement über den Rand ragte — das ist die Signatur
   eines absolut gesetzten, versteckten Elements (das drehende Blatt), dessen
   Kasten der Browser trotzdem in die Rollweite einrechnet. `overflow-x:clip`
   schneidet genau das ab und lässt senkrechtes Rollen unberührt; `hidden`
   würde hier zusätzlich einen eigenen Rollbereich anlegen und das klebende
   Verhalten der Filterleiste brechen. */
#heft{overflow-x:clip}

/* ══ Fotohintergrund auf HELLEN Abschnitten ═══════════════════════════════
   Zweite Bauform neben `.foto-grund`. Der Unterschied ist der Schleier: Auf
   dunklen Abschnitten liegt das Foto bei rund 40 % Sichtbarkeit unter einem
   Nachtblau-Verlauf und trägt weiße Schrift. Hier liegen 94 bis 97 % Papier
   darüber — das Foto ist dann keine Abbildung mehr, sondern Struktur.

   WARUM SO STARK GEDECKELT
   Der Kontrastprüfer dieses Projekts liest `background-color` und kann ein
   `background-image` nicht sehen. Ein Foto hinter Fließtext könnte den
   Kontrast also brechen, ohne dass die Messung anschlägt. Bei 94 % Papier
   ist der wirksame Grund rechnerisch nicht mehr von der reinen Fläche zu
   unterscheiden — die Struktur sieht man, die Messung bleibt gültig.

   Zwei Stufen, damit nicht jeder Abschnitt gleich aussieht: `.foto-hell`
   für die ruhigen, `.foto-hell-mehr` dort, wo mehr Textur guttut.

   ── WARUM BEIDE KLASSEN HIER STEHEN (gefunden am 22.08.2026) ──────────────
   `.foto-hell-mehr` war als Zusatz zu `.foto-hell` gedacht, wurde aber auf
   vier Abschnitten ALLEIN gesetzt (Start, /unternehmen, /verwalter,
   /kontakt). Alleinstehend fehlte ihm alles, was nur unter `.foto-hell`
   stand — und das war nicht bloß Kosmetik:

     * `::before` hatte kein `content` → der Schleier entstand gar nicht.
       Nachtblaue Schrift stand ungefiltert auf einer hellen Hallenaufnahme.
     * `background-repeat` fehlte → auf /kontakt KACHELTE das Foto vierfach.
     * `background-size:cover` fehlte → Bild in Originalgröße statt gefüllt.

   Die Sichtprüfung meldete alle vier Seiten grün, weil sie `background-color`
   misst und ein `background-image` nicht sehen kann. Gefunden wurde es erst
   im Bildschirmfoto. Deshalb trägt der Zusatz jetzt selbst den vollen Satz:
   Wer ihn allein setzt, bekommt einen Abschnitt, der funktioniert. */
.foto-hell,.foto-hell-mehr{position:relative;isolation:isolate;
  background-size:cover;background-position:center;background-repeat:no-repeat;
  background-attachment:local}
.foto-hell::before,.foto-hell-mehr::before{
  content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(180deg,
    rgba(251,249,244,.925) 0%, rgba(251,249,244,.875) 45%,
    rgba(251,249,244,.925) 100%)}
.foto-hell.teil-still::before{
  background:linear-gradient(180deg,
    rgba(241,237,228,.925) 0%, rgba(241,237,228,.885) 45%,
    rgba(241,237,228,.925) 100%)}
.foto-hell-mehr::before{
  background:linear-gradient(180deg,
    rgba(251,249,244,.88) 0%, rgba(251,249,244,.835) 45%,
    rgba(251,249,244,.88) 100%)}
.foto-hell-mehr.teil-still::before{
  background:linear-gradient(180deg,
    rgba(241,237,228,.9) 0%, rgba(241,237,228,.87) 45%,
    rgba(241,237,228,.9) 100%)}

/* Wer Transparenz abbestellt hat, bekommt die reine Fläche. Auch hier musste
   `.foto-hell-mehr` nachgezogen werden — sonst behielten genau die vier
   alleinstehenden Abschnitte ihr Foto, obwohl der Nutzer es abbestellt hat. */
@media (prefers-reduced-transparency:reduce){
  .foto-hell,.foto-hell-mehr{background-image:none !important}
}

/* ── Motive ───────────────────────────────────────────────────────────────
   Bewusst NICHT dabei: `verzeichnis` (inszeniertes Verfahrensdokument mit
   lesbarer Aufschrift) und `bibliothek` (Gesetzbücher für ein Haus, das
   keine Kanzlei ist). Beide sind aus den Bildbändern geflogen und haben auch
   als Hintergrund nichts verloren. */
.fg-akte{background-image:url("../img/szene/akte-1376.webp")}
.fg-gespraech{background-image:url("../img/szene/gespraech-1152.webp")}
.fg-unterschrift{background-image:url("../img/szene/unterschrift-1229.webp")}
.fg-ulm{background-image:url("../img/szene/ulm-1920.webp")}
.fg-putz{background-image:url("../img/szene/putz-1920.webp")}
.fg-halle-innen{background-image:url("../img/szene/halle-1800.webp")}
.fg-regal{background-image:url("../img/szene/band-regal-1600.webp")}

@media (max-width:760px){
  .fg-akte{background-image:url("../img/szene/akte-960.webp")}
  .fg-gespraech{background-image:url("../img/szene/gespraech-960.webp")}
  .fg-unterschrift{background-image:url("../img/szene/unterschrift-960.webp")}
  .fg-ulm{background-image:url("../img/szene/ulm-960.webp")}
  .fg-putz{background-image:url("../img/szene/putz-960.webp")}
  .fg-halle-innen{background-image:url("../img/szene/halle-960.webp")}
  .fg-regal{background-image:url("../img/szene/band-regal-960.webp")}
}


/* ── Textton auf Fotogrund ────────────────────────────────────────────────
   Der Kontrastprüfer dieses Projekts liest `background-color` und kann ein
   `background-image` nicht sehen. Über einem Foto muss der Fall deshalb
   gerechnet werden, und die Rechnung ist eindeutig:

   Schlimmster Fall ist eine reinschwarze Bildstelle unter dem Text. Bei
   einem Schleier von 0,875 auf Papier bleibt als Grund rgb(220,218,214).
   Darauf steht tinte-2 (#4E5661) bei 5,1:1 — in Ordnung.
   tinte-3 (#616974) steht bei 3,8:1 — NICHT in Ordnung.

   Deshalb wird der hellste Ton auf Fotogrund um eine Stufe angehoben. Das
   betrifft Hilfstexte, Feldbeschriftungen und die Randmarke. Sichtbar ist
   der Unterschied kaum; messbar ist er der zwischen bestanden und nicht. */
.foto-hell .hilfe,.foto-hell-mehr .hilfe,
.foto-hell .nr,.foto-hell-mehr .nr,
.foto-hell .kz-text,.foto-hell-mehr .kz-text,
.foto-hell .heft-hinweis,.foto-hell-mehr .heft-hinweis,
.foto-hell .objekt-marke,.foto-hell-mehr .objekt-marke,
.foto-hell .wege-fakt dt,.foto-hell-mehr .wege-fakt dt,
.foto-hell .fakten dt,.foto-hell-mehr .fakten dt,
.foto-hell .protokoll dt,.foto-hell-mehr .protokoll dt{color:var(--tinte-2)}

/* Die Regel darüber hebt den hellsten Textton an — und traf dabei AUCH die
   Randmarken in den dunklen Bauteilen, die zufällig in einem Fotoabschnitt
   liegen: die Kontakttafel und die Ergebniskachel der Kostenuhr. Dort stand
   die Marke danach bei 1,7:1. Gleiche Spezifität, spätere Regel gewinnt —
   deshalb hier die dunklen Fälle noch einmal, ganz am Ende. */
.foto-hell .tafel-kontakt .nr,.foto-hell-mehr .tafel-kontakt .nr,
.foto-hell .uhr-ergebnis .nr,.foto-hell-mehr .uhr-ergebnis .nr,
.foto-hell .expose-karte .nr,.foto-hell-mehr .expose-karte .nr,
.foto-hell .tafel .nr,.foto-hell-mehr .tafel .nr{color:var(--nacht-text)}
.foto-hell .tafel-kontakt .hilfe,.foto-hell-mehr .tafel-kontakt .hilfe,
.foto-hell .expose-karte .hilfe,.foto-hell-mehr .expose-karte .hilfe{color:#B7CBE4}

/* Zwei weitere Motive, die erst durch Beschnitt verwendbar wurden: Bei den
   Objektaufnahmen des Schwesterprojekts steht das Hallenschild mit dem
   fremden Firmennamen immer im oberen Drittel — darunter liegt eine saubere
   Halle. Zwei weitere Kandidaten sind bei derselben Prüfung durchgefallen,
   weil die fremde Marke in der Bildmitte stand (BMW-M-Logo auf dem Tank,
   Mercedes- und KTM-Schlüssel auf dem Tisch); Beschnitt hilft dagegen nicht. */
.fg-boden{background-image:url("../img/szene/halle-boden-960.webp")}
.fg-schreibtisch{background-image:url("../img/szene/schreibtisch-960.webp")}

/* Ein Feld statt zwei: Die Abfrage braucht nur noch die Verwertungsnummer.
   Ohne diese Regel bliebe das Raster dreispaltig und liesse rechts eine
   leere Spalte stehen. */
.abfrage-eins{grid-template-columns:minmax(0,1fr) auto}
@media (max-width:560px){.abfrage-eins{grid-template-columns:minmax(0,1fr)}}
.abfrage-eins input{font-size:1.06rem;letter-spacing:.06em}


/* ── Zweite Abstandsstufe ─────────────────────────────────────────────────
   Bis zum 23.08.2026 hatte JEDER Abschnitt der Seite denselben Abstand:
   100,8 px oben, 100,8 px unten, auf neun von zehn Seiten ausnahmslos.
   Dadurch liest sich eine Seite als eine Kette gleichwertiger Bloecke, und
   man merkt beim Scrollen nicht, dass etwas Neues anfaengt.

   Die Schwesterprojekte fahren zwei Stufen (Techet 96/64, Peinert setzt
   `.pt0` und klebt damit zwei Abschnitte zu einer Einheit zusammen). Hier
   dasselbe: `.teil-eng` fuer einen Abschnitt, der zum vorigen GEHOERT,
   `.teil-anschluss` fuer einen, der direkt anschliesst. */
.teil-eng{padding-block:calc(var(--luft) * .62)}
.teil-anschluss{padding-top:0;border-top:0}

/* ── Schlusszeichen ───────────────────────────────────────────────────────
   140 px leerer Streifen vor jedem Fuss, fuer ein Ornament von 240x12 px bei
   halber Deckkraft. Auf zehn Seiten gerechnet sind das 1.400 px, die nichts
   tragen. Der Abstand faellt auf ein Drittel. */
.schluss{padding:clamp(16px,2vw,30px) 0}

/* ── Trefferflaechen ──────────────────────────────────────────────────────
   Gemessen waren nur 23 Prozent aller Knoepfe und Verweise 44 px hoch. Die
   drei kleinsten lagen bei 14, 16 und 20 px - auf einem Telefon trifft die
   niemand zuverlaessig. Die Flaeche waechst ueber Polsterung, die Schrift
   bleibt gleich gross. */
.objekt-tat,.dienst-tel,.wege-tat,.objekt-fuss a{
  display:inline-flex;align-items:center;min-height:44px}
.fuss ul a{display:inline-flex;align-items:center;min-height:38px}
.nav a{padding-block:.62rem}
.person-zeile a{display:inline-flex;align-items:center;min-height:44px}

/* ── Druckzustand ─────────────────────────────────────────────────────────
   Zwei `:active`-Regeln bei 617 Selektoren. Ein Knopf, der beim Druecken
   nichts tut, fuehlt sich auf einem Telefon kaputt an - dort gibt es kein
   Hover, das den Klick vorher bestaetigt. */
.knopf-voll:active:not(:disabled),.knopf-linie:active:not(:disabled),
.heft-steuer button:active:not(:disabled),
.objekt-tat:active{transform:translateY(1px)}
@media (prefers-reduced-motion:reduce){
  .knopf-voll:active,.knopf-linie:active,
  .heft-steuer button:active,.objekt-tat:active{
    transform:none}
}

/* Steuerhinweis unter dem Heft. Er gehoert zu den Preisen auf den Seiten,
   nicht zum Abschnitt — deshalb dicht darunter und schmal genug, dass er
   als Fussnote gelesen wird und nicht als naechster Absatz. */
.notiz-heft{max-width:62ch;margin:1.6rem auto 0;text-align:center}
@media (max-width:760px){.notiz-heft{text-align:left}}

/* Die Ortsangabe im Rand der Warengruppen ist ein Verweis. Sie muss danach
   aussehen, ohne das ruhige Randetikett in einen blauen Link zu verwandeln:
   Farbe erst beim Ueberfahren, Unterstreichung ueber die Grundlinie hinweg
   gesetzt, damit die Ziffern nicht durchgestrichen wirken. */
.nr-sprung{color:inherit;text-decoration:none;
  border-bottom:1px solid transparent;
  transition:color var(--schnell) var(--kurve),
             border-color var(--schnell) var(--kurve)}
.nr-sprung:hover,.nr-sprung:focus-visible{color:var(--signal);
  border-bottom-color:currentColor}

/* ══ Gemeinschaftsbesichtigung ════════════════════════════════════════════
   Der Block, der als einziger ein hartes Datum trägt. Er ist bewusst KEINE
   Karte: Das Datum steht als Zeile in der Auszeichnungsschrift, darüber eine
   kräftige Linie. Dieselbe Bauform wie der Rest der Seite, nur eine Stufe
   lauter.

   Nach der Beanstandung vom 23.08.2026 („mach das mit der besichtigung
   besser zu erkennen") deutlich hervorgehoben: eigene Papierfläche mit
   Rahmen, dickerer Oberbalken in der Signalfarbe, und die Anschrift so groß
   wie eine Zwischenüberschrift. Bei einem Termin ohne Anmeldung ist die
   Adresse die Handlungsanweisung — sie muss man von zwei Metern lesen. */
.termin{margin:2.4rem 0 0;padding:1.5rem clamp(1.2rem,2.4vw,2rem) 1.7rem;
  background:var(--papier);border:1px solid var(--linie);
  border-top:4px solid var(--signal);border-radius:3px;
  box-shadow:0 1px 2px rgba(20,25,32,.04),
             0 18px 38px -26px rgba(13,50,102,.34);
  display:grid;gap:.5rem}
.termin-marke{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;
  font:500 .78rem/1 var(--grotesk);letter-spacing:.15em;
  text-transform:uppercase;color:var(--tinte-3);margin:0}
.termin-marke-text{color:var(--signal)}
/* Die Restfrist ist die einzige Stelle der Seite mit farbiger Fläche hinter
   Text. Sie darf das: Sie ist das einzige, was sich täglich ändert. */
.termin-frist{padding:.3rem .6rem;border-radius:2px;
  background:var(--signal);color:#fff;letter-spacing:.08em;
  font-variant-numeric:tabular-nums}
.termin-offen-marke{padding:.3rem .6rem;border-radius:2px;
  border:1px solid var(--linie-stark);color:var(--tinte-2);
  letter-spacing:.08em}
.termin-datum{margin:.15rem 0 0;
  font:400 clamp(1.72rem, 1.1rem + 2.3vw, 2.7rem)/1.1 var(--titel);
  color:var(--tinte);letter-spacing:-.018em}
/* Die Anschrift trägt bei einem offenen Termin die Handlung. Sie ist
   deshalb ein Verweis mit sichtbarer Unterlinie und nicht nur Text. */
.termin-adresse{margin:.5rem 0 0;
  font:400 clamp(1.05rem,.95rem + .5vw,1.28rem)/1.35 var(--grotesk);
  color:var(--tinte)}
.termin-adresse a{color:inherit;text-decoration:none;
  border-bottom:1px solid var(--signal);padding-bottom:1px;
  transition:color var(--schnell) var(--kurve)}
.termin-adresse a:hover,.termin-adresse a:focus-visible{color:var(--signal)}
.termin-angaben{margin:1.1rem 0 0;display:grid;
  grid-template-columns:auto minmax(0,1fr);gap:.55rem 1.6rem;
  padding-top:1rem;border-top:1px solid var(--linie)}
.termin-angaben dt{font:500 .74rem/1.5 var(--grotesk);letter-spacing:.13em;
  text-transform:uppercase;color:var(--tinte-3);padding-top:.15rem}
.termin-angaben dd{margin:0;font-size:.97rem;line-height:1.55;
  color:var(--tinte-2);max-width:56ch}
.termin-fuss{margin:1rem 0 0;font-size:.92rem;line-height:1.6;
  color:var(--tinte-3);max-width:64ch}
.termin-kompakt{margin-top:2rem}
.termin-leer{border-top-color:var(--linie-stark)}
.termin-leer .termin-datum{font-size:clamp(1.3rem,1.05rem + .9vw,1.7rem);
  color:var(--tinte-2)}
.termin-leer .termin-marke-text{color:var(--tinte-3)}
@media (max-width:640px){
  /* Zweispaltig bei 390 px hieße 9 Zeichen je Zelle. Untereinander. */
  .termin-angaben{grid-template-columns:minmax(0,1fr);gap:.1rem}
  .termin-angaben dd{margin-bottom:.7rem}
}
/* Auf dunklem Grund kehren sich Fläche und Textfarben um. Ohne diesen Satz
   steht ein Papierkasten mitten im nachtblauen Abschnitt. */
.teil-dunkel .termin,.foto-grund .termin{
  background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.2);
  border-top-color:var(--signal-hell,#7FB0FF);box-shadow:none}
.teil-dunkel .termin-datum,.foto-grund .termin-datum,
.teil-dunkel .termin-adresse,.foto-grund .termin-adresse{color:var(--nacht-text)}
.teil-dunkel .termin-marke-text,.foto-grund .termin-marke-text{color:#7FB0FF}
.teil-dunkel .termin-angaben,.foto-grund .termin-angaben{
  border-top-color:rgba(255,255,255,.2)}
.teil-dunkel .termin-angaben dt,.foto-grund .termin-angaben dt,
.teil-dunkel .termin-marke,.foto-grund .termin-marke{color:rgba(255,255,255,.64)}
.teil-dunkel .termin-angaben dd,.foto-grund .termin-angaben dd,
.teil-dunkel .termin-fuss,.foto-grund .termin-fuss{color:rgba(255,255,255,.82)}

/* Bedienung im Vollbild. Sie liegt UNTER dem Bild und nicht darauf: Auf einer
   Katalogseite steht unten der Fußzeilentext mit Anschrift und Seitenzahl —
   eine Leiste darüber würde genau das verdecken, was man vergrößert hat. */
.vollbild-steuer{position:absolute;left:50%;bottom:1.1rem;
  transform:translateX(-50%);display:flex;align-items:center;gap:1rem;
  padding:.5rem .7rem;border-radius:3px;
  background:rgba(13,19,28,.72);backdrop-filter:blur(8px)}
.vollbild-pfeil{display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;border:1px solid rgba(255,255,255,.34);
  border-radius:50%;background:transparent;color:#fff;cursor:pointer;
  transition:border-color var(--schnell) var(--kurve),
             background var(--schnell) var(--kurve)}
.vollbild-pfeil:hover:not(:disabled){border-color:#fff;
  background:rgba(255,255,255,.12)}
.vollbild-pfeil:active:not(:disabled){transform:scale(.94)}
.vollbild-pfeil:disabled{opacity:.3;cursor:default}
.vollbild-pfeil svg{width:20px;height:20px;fill:none;stroke:currentColor;
  stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.vollbild-stand{font:400 .86rem/1 var(--mono);color:rgba(255,255,255,.9);
  min-width:14ch;text-align:center;font-variant-numeric:tabular-nums}

/* Dass eine Seite anklickbar ist, muss man sehen, bevor man klickt. */
.heft-bereit .heft-seite{cursor:zoom-in}
.heft-bereit .heft-seite:focus-visible{outline:3px solid var(--signal);
  outline-offset:4px}
@media (max-width:560px){
  .vollbild-steuer{gap:.5rem;padding:.4rem .5rem}
  .vollbild-stand{min-width:11ch;font-size:.78rem}
}

/* Aufschlüsselung im Kostenbeitragsrechner. Zwei Spalten, Zahlen rechts
   ausgerichtet und tabellarisch — Beträge, die man untereinander vergleicht,
   müssen an derselben Stelle stehen. */
.kb-teile{display:grid;grid-template-columns:minmax(0,1fr) auto;
  gap:.35rem 1.2rem;margin:.9rem 0 1rem;padding:.85rem 0;
  border-top:1px solid rgba(255,255,255,.22);
  border-bottom:1px solid rgba(255,255,255,.22)}
/* Die Aufschluesselung liegt IM Ergebnisfeld, und das ist nachtblau. Mit
   den Tintenfarben stand sie bei 1,08:1 — praktisch unsichtbar. Gemessen mit
   _sichtpruef.py, nicht geschaetzt. */
.kb-teile dt{font:400 .88rem/1.4 var(--grotesk);color:rgba(255,255,255,.72)}
.kb-teile dd{margin:0;font:500 .88rem/1.4 var(--mono);
  color:var(--nacht-text);
  text-align:right;font-variant-numeric:tabular-nums}

/* Klartext am laufenden Schritt der Statuskette. Er steht eingerückt unter
   der Beschriftung, in derselben Spalte wie der Text — nicht neben der
   Nummer, sonst reißt die Kette optisch auseinander. */
.kette-klartext{grid-column:3 / -1;margin:.5rem 0 0;
  font-size:.95rem;line-height:1.55;color:var(--tinte-2);max-width:58ch}
@media (max-width:640px){.kette-klartext{grid-column:2 / -1}}

/* ══ Aufmacher mit Randtafel ══════════════════════════════════════════════
   DIE EINE URSACHE, aus der diese Seite neben den Schwesterprojekten abfiel.
   Gemessen am 23.08.2026 gegen Peinert und Techet mit denselben Sonden:

     Seite            Inhalt bis x   rechtes Drittel   Schwerpunkt
     iska/leistungen        888 px           0,6 %          0,29
     iska/unternehmen       866 px           0,3 %          0,29
     peinert/verwertung    1275 px          18,2 %          0,48
     techet/start          1439 px          59,4 %          0,47

   Die Rechenprobe geht exakt auf: 150 px Rand + 738 px Lesespalte
   (`.fliess{max-width:66ch}`) = 888 px. Die restlichen 552 px sind nicht
   grosszuegig leer gelassen — sie sind STRUKTURELL UNERREICHBAR. Keine Regel
   setzt dort je etwas hin.

   Warum das so kam: `--rand:12.5rem` steht als Token in Zeile 82 und wird im
   ganzen Stylesheet NICHT BENUTZT. Das haengende Raster, das der Dateikopf
   als Grundidee beschreibt, wurde auf eine Spalte zusammengestrichen —
   aus einem nachvollziehbaren Grund (deutsche Komposita zerbrachen in einer
   200-px-Spalte: „Insolvenzber/atung"). Nur wurde nichts an seine Stelle
   gesetzt. Seitdem hat die Seite keinen Ort mehr fuer alles, was nicht
   Fliesstext ist. Das erklaert in einem Zug die leeren Unterseiten, die
   austauschbaren Aufmacher und die zwei Bauformen je Seite.

   WARUM RECHTS: Links stand der Fliesstext, der zerbrach. Rechts steht kein
   Fliesstext, sondern kurze Etiketten und Werte — das Problem tritt dort
   nicht auf.

   WARUM KEINE KARTE: Getrennt wird ueber Haarlinie und Weissraum, wie in
   Zeile 23 f. festgelegt. Kein Kasten, kein Radius, kein Schatten.

   Was hier NICHT die Ursache war, ebenfalls gemessen: die Typografie (ISKA
   hat mit 62,4 px die groesste Ueberschrift der drei und den besseren
   Hierarchiesprung als Peinert), die Bewegung (Techet gilt als gelungen und
   hat NULL Keyframes), die Luft (Polsteranteil ueberall 17–25 %) und die
   Palette. */
@media (min-width:1000px){
  .haenge-auf{
    grid-template-columns:minmax(0,1fr) minmax(15rem,19rem);
    gap:0 clamp(2.5rem, 4vw, 4.5rem);
    align-items:start}
  /* Jedes Kind bekommt seine Zelle ausdruecklich. Im Raster belegt sonst
     jedes zusaetzliche Element die naechste freie Zelle und schiebt die
     Reihenfolge durcheinander — dieselbe Falle wie ::before im Grid. */
  .haenge-auf > .haenge-rand{grid-column:1;grid-row:1}
  .haenge-auf > .fliess     {grid-column:1;grid-row:2}
  .haenge-auf > .randtafel  {grid-column:2;grid-row:1 / span 2;
    border-left:1px solid var(--linie);
    padding-left:clamp(1.6rem, 2.4vw, 2.6rem);
    margin-top:.35rem}
}
/* Unter 1000 px faellt die Tafel unter den Text. Kein zweites Raster — nur
   ein Abstand und eine Linie OBEN statt links. */
.randtafel{margin-top:2.2rem}
@media (max-width:999px){
  .randtafel{border-top:1px solid var(--linie);padding-top:1.4rem;
    max-width:34rem}
}
.randtafel .nr{margin-bottom:.9rem}
/* Einspaltig gestapelt: In 19 rem ist fuer die zwei Spalten von `.protokoll`
   kein Platz. Die Haarlinie sitzt am dt, nicht an dt UND dd — sonst steht
   zwischen jedem Paar eine doppelte Linie. */
.randtafel .protokoll{grid-template-columns:1fr;gap:0;
  font-size:.92rem;max-width:none}
.randtafel .protokoll dt{padding:.62rem 0 0;
  border-top:1px solid var(--linie);
  font:500 .7rem/1.4 var(--mono);letter-spacing:.06em;
  text-transform:uppercase;color:var(--tinte-3)}
.randtafel .protokoll dd{padding:.14rem 0 .72rem;border-top:0;margin:0;
  color:var(--tinte);line-height:1.45}
.randtafel .protokoll dt:first-of-type{border-top:0;padding-top:0}
/* EINE hervorgehobene Zahl je Tafel. Sie gibt der Spalte einen Anker, damit
   sie nicht als Kleingedrucktes gelesen wird — und sie ist die einzige
   Stelle, an der das Markenblau ueberhaupt Flaeche bekommt. Gemessen deckt
   `--signal` auf der ganzen Startseite 2.301 px², also 0,02 % aller
   Farbflaechen. 7,73:1 auf Papier. */
.randtafel .zahl{font:600 1.9rem/1.05 var(--grotesk);color:var(--signal);
  letter-spacing:-.01em;display:block;margin-bottom:.1rem}
.teil-dunkel .randtafel{border-left-color:rgba(255,255,255,.16)}
.teil-dunkel .randtafel .protokoll dt{color:var(--nacht-text);
  border-top-color:rgba(255,255,255,.16)}
.teil-dunkel .randtafel .protokoll dd{color:#E4ECF6}

/* Dritte Abstandsstufe fuer den Aufmacher. Er erklaert nichts, er kuendigt
   an — er braucht nicht die Luft eines Inhaltsabschnitts. Gemessen lagen
   202 px zwischen letztem Knopf und erstem Folgeinhalt; Peinert kommt mit
   144–176 px aus. Bis heute hatte JEDE Seite genau zwei Stufen, jeder
   Abschnittswechsel wog gleich schwer. */
.teil:first-of-type{padding-bottom:calc(var(--luft) * .55)}

/* Der Katalogverweis in der Hauptnavigation. Er ist der einzige, der zur
   Ware führt; die anderen fünf führen zu Beschreibungen. Hervorgehoben wird
   über eine Zahl in der Signalfarbe, nicht über einen zweiten Knopf — rechts
   steht bereits „Kontakt" als voller Knopf, und zwei Knöpfe nebeneinander
   heben sich gegenseitig auf. */
/* Der Katalogverweis, hervorgehoben. Dritter Anlauf.

   ERST eine Zahl daneben („37") — sagte einem Erstbesucher nichts.
   DANN eine blaue Umrandung — sah aus wie ein Eingabefeld: eine dünne Linie,
   die den Text eng umschließt, mitten in einer Reihe rahmenloser Verweise.
   Der Auftraggeber: „warum sieht die umrandung so kacke aus???"

   Er hat recht, und der Grund ist die Bauform: Ein 1-px-Rahmen ist auf
   dieser Seite die Sprache der Formularfelder. In einer Navigationsreihe
   liest man ihn als „hier kann man etwas eintippen", nicht als „das ist
   wichtig".

   Jetzt eine getönte Fläche ohne Rahmen. Sie hebt sich ab, ohne eine Kante
   zu ziehen, und sie kann mit keinem anderen Bauteil verwechselt werden —
   getönte Flächen gibt es sonst nirgends in der Navigation.

   Die Zeilenhöhe bleibt die der Nachbarn: Der Verweis wächst nur seitlich,
   die Reihe behält ihre Grundlinie. */
/* .62rem senkrecht, nicht .45rem: Die Nachbarn bekommen ueber die
   Trefferflaechen-Regel `padding-block:.62rem` und sind damit 44 px hoch.
   Mit .45rem war der Katalogverweis 39 px — funf Pixel niedriger als seine
   Reihe, und genau solche Kleinigkeiten liest das Auge als „schief". */
.nav-katalog{padding:.62rem .85rem!important;border-radius:3px;
  background:rgba(0,74,173,.1);color:var(--signal)!important;
  transition:background var(--schnell) var(--kurve),
             color var(--schnell) var(--kurve)}
.nav-katalog:hover,.nav-katalog:focus-visible{
  background:var(--signal);color:#fff!important}
/* Auf der Katalogseite selbst gefüllt. Die Unterstreichung, die
   `aria-current` sonst setzt, säße unter einer Fläche und sähe aus wie ein
   zweiter Strich. */
.nav a.nav-katalog[aria-current="page"]{background:var(--signal);
  color:#fff!important;box-shadow:none}
.nav a.nav-katalog[aria-current="page"]::after{display:none}

/* ══ Die klebende Kopfzeile klebte nicht ══════════════════════════════════
   Gemessen am 23.08.2026 bei scrollY 0 / 600 / 1600 / 3000:
   `.kopf-fest` stand bei top = 60 / −535 / −1477 / −2790 px. Sie ist also
   mitgescrollt, und zwar von Anfang an — der Kommentar in `_grund.html`
   behauptet seit dem Umbau das Gegenteil.

   URSACHE: `position:sticky` klebt innerhalb des ELTERNKASTENS, nicht im
   Fenster. Der Elternkasten ist `header.kopf`, und der ist nur so hoch wie
   seine beiden Kinder zusammen (135 px). Die Leiste hatte damit genau
   135 − 75 = 60 px Weg, danach war der Kasten zu Ende und sie fuhr mit
   hinaus. Sticky war nie kaputt; es hatte nur keinen Platz.

   WAS DAS GEKOSTET HAT: Auf einer 13.957 px hohen Startseite lagen die
   Telefonverweise bei y = 8, 11.916 und 13.871 px. Zwischen 69 px und
   11.916 px — auf 85 % der Seite — war keine Rufnummer im Bild. Für den
   Geschäftsführer in der Krise, der nachts auf dem Telefon sucht, ist genau
   das der Ausstieg. Gemessen: 1 Telefonverweis im Bild bei scrollY 0, dann
   0 / 0 / 0.

   FIX: Die Sticky-Eigenschaft wandert an `header.kopf` selbst. Sein
   Elternkasten ist `body`, und der ist so hoch wie die Seite. Die Dienstzeile
   fährt dabei mit — 60 px, die dauerhaft stehen bleiben, wäre zu viel, also
   fährt sie ueber einen negativen `top`-Wert nach oben aus dem Bild und die
   eigentliche Leiste rastet bündig am Fensterrand ein.

   Nicht ueber `display:contents` geloest: Das haette die `banner`-Landmarke
   des `<header>` entfernt, und die brauchen Vorleseprogramme zur Orientierung. */
/* Der Versatz muss GENAU der Hoehe der Dienstzeile entsprechen, sonst
   verschwindet die klebende Leiste teilweise ueber dem Fensterrand. Genau
   das ist am 23.08.2026 passiert: Der Wert stand fest auf 60 px, dann fiel
   die Rufnummer aus der Dienstzeile, sie schrumpfte auf 36 px — und die
   Leiste stand 24 px zu hoch.
   Deshalb bekommt die Dienstzeile ihre Hoehe jetzt aus DERSELBEN Variable,
   aus der der Versatz gerechnet wird. Die beiden koennen nicht mehr
   auseinanderlaufen. */
:root{--dienst-hoehe:36px}
.dienst{height:var(--dienst-hoehe);overflow:hidden}
@media (max-width:760px){
  /* Auf dem Telefon faellt die Dienstzeile ganz weg statt auszufahren.
     Der Versuch, sie ueber eine kleinere Hoehe zu kuerzen, ging schief: Ihr
     Inhalt bricht dort auf zwei Zeilen um, die erzwungene Hoehe passte
     nicht mehr zum Versatz, und die klebende Leiste stand 44 px ueber dem
     Fensterrand.
     Anschrift und Registernummer stehen ohnehin im Fuss. Was auf dem
     Telefon wirklich gebraucht wird, ist der Waehlknopf — und der sitzt in
     der Leiste. */
  .dienst{display:none}
  :root{--dienst-hoehe:0px}
}
header.kopf{position:sticky;top:calc(-1 * var(--dienst-hoehe));
  z-index:50;background:var(--papier)}
.kopf-fest{position:static}
@media print{header.kopf{position:static}}

/* Wählknopf in der klebenden Leiste. Auf breitem Schirm überflüssig — dort
   stehen Rufnummer in der Dienstzeile und der Kontaktknopf rechts. */
.kopf-waehlen{display:none}
@media (max-width:760px){
  /* Auf dem Telefon fährt die Dienstzeile jetzt AUS. Sie ist 60 px hoch,
     und zusammen mit der Leiste standen dauerhaft 129 px — 15 % jedes
     Bildschirms, auf dem nichts als eine Adresse steht. Übrig bleiben 69 px
     mit Marke, Menü und Wählknopf. */
  /* Der feste Versatz von hier ist ENTFALLEN: Er stand noch auf 60 px,
     nachdem `--dienst-hoehe` schon die Steuerung uebernommen hatte, und
     zog die Leiste auf dem Telefon 60 px ueber den Fensterrand. Zwei
     Stellen, die dasselbe steuern, ist immer eine zu viel. */
  /* Der Knopf steht im Markup VOR der Marke — dort ist er in der
     Tabulatorreihenfolge früh erreichbar, was für den Notfall richtig ist.
     Gezeigt wird er trotzdem rechts: `order` verschiebt nur die Darstellung,
     nicht die Reihenfolge für Tastatur und Vorleseprogramm. */
  .kopf-zeile{gap:.5rem}
  .marke{order:0}
  .kopf-waehlen{order:8;display:inline-flex;align-items:center;
    justify-content:center;
    width:44px;height:44px;margin-left:auto;flex:none;
    border:1px solid var(--linie-stark);border-radius:50%;
    color:var(--signal);background:#fff;
    transition:border-color var(--schnell) var(--kurve),
               background var(--schnell) var(--kurve)}
  .kopf-waehlen:hover,.kopf-waehlen:focus-visible{border-color:var(--signal);
    background:rgba(0,74,173,.06)}
  .kopf-waehlen:active{transform:scale(.94)}
  .kopf-waehlen svg{width:20px;height:20px;fill:none;stroke:currentColor;
    stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
  /* Der Menüschalter stand vorher rechts über `margin-left:auto`. Jetzt tut
     das der Wählknopf, der Schalter rückt daneben. Ohne diese Zeile stünden
     beide links und die Marke rechts. */
  .nav-schalter{order:9;margin-left:.5rem}
}


/* Der Schreibzeiger im Aufmacher blinkte endlos (`infinite`) und war damit
   der einzige Dauerläufer der Seite — eine Animation, die nach dem Lesen
   nichts mehr sagt und trotzdem jede Sekunde eine Neuzeichnung anfordert.
   Zwölf Durchläufe reichen: Wer die Zeile liest, sieht ihn blinken; wer
   weitergescrollt hat, nicht mehr. */
.riss-cursor{animation-iteration-count:12!important}

/* Der Fristenblock auf /leistungen. Abgesetzt, weil er als einziger Block
   der Seite Wissen vermittelt statt eine Leistung zu beschreiben — und weil
   jemand, der ihn braucht, ihn beim Überfliegen finden muss. Kein Kasten:
   ein kräftiger Balken links, wie beim Terminblock oben. */
.fristen{margin:1.8rem 0 0;padding:1.3rem 0 .3rem 1.4rem;
  border-left:4px solid var(--signal)}
.fristen .nr{margin-bottom:.7rem;color:var(--signal)}
.fristen-vor{font-size:1rem;line-height:1.6;color:var(--tinte-2);
  max-width:62ch;margin:0 0 1.2rem}
.fristen .protokoll{grid-template-columns:9rem minmax(0,1fr);max-width:none}
.fristen .protokoll dt{color:var(--tinte);font-weight:600;
  font-variant-numeric:tabular-nums}
.fristen-nach{margin:1.3rem 0 0;font-size:.97rem;line-height:1.6;
  color:var(--tinte-2);max-width:62ch}
@media (max-width:640px){
  .fristen{padding-left:1rem}
  .fristen .protokoll{grid-template-columns:minmax(0,1fr);gap:0}
  .fristen .protokoll dt{padding-bottom:.1rem}
  .fristen .protokoll dd{padding-top:0;padding-bottom:.9rem;border-top:0}
}

/* Nachsatz in einem Schritt der Kaufkette. Er trägt eine Einschränkung, die
   der Schritt selbst nicht ist — abgesetzt über eine Haarlinie links, damit
   man ihn als Nebenbemerkung liest und nicht als weiteren Handlungsschritt. */
.schritt-hinweis{margin-top:.7rem!important;padding-left:.95rem;
  border-left:2px solid var(--linie-stark);
  font-size:.94rem!important;color:var(--tinte-3)!important}

/* Kästchen im Formular. Es gab bisher keins — die Bauform muss zu den
   Feldern passen: gleiche Höhe, gleicher Rahmen, gleicher Fokusring. */
.feld .kasten{display:flex;align-items:flex-start;gap:.65rem;
  cursor:pointer;font:400 .97rem/1.45 var(--grotesk);color:var(--tinte);
  padding:.55rem 0}
.feld .kasten input[type="checkbox"]{width:20px;height:20px;flex:none;
  margin-top:.1rem;accent-color:var(--signal);cursor:pointer}
.feld-kauf[hidden]{display:none}

/* Fragenliste. Die Haarlinie sitzt am `<details>`, nicht am letzten Element —
   sonst fehlt unter der letzten Frage der Abschluss. */
.fragen-liste{margin-top:1.4rem;border-bottom:1px solid var(--linie);
  max-width:74ch}

/* ══ Fachkreise als Klappmenü ═════════════════════════════════════════════
   Fünf Verweise, die sich an dieselbe Seite des Tisches richten, unter einem
   Punkt. Vorbild ist das Schwesterprojekt in Krefeld, das genauso gruppiert
   — übernommen ist die Mechanik samt Erklärzeile je Punkt, nicht das
   Aussehen.

   `<details>` bringt Tastatur und Vorleseprogramm mit. Was fehlt und hier
   ergänzt wird: das Dreieck des Browsers weg, eigenes Zeichen, und die
   Fläche muss aus dem Textfluss heraus — sonst schiebt sie beim Aufklappen
   die halbe Kopfzeile zur Seite. */
.nav-klapp{position:relative}
.nav-klapp > summary{cursor:pointer;list-style:none;
  display:inline-flex;align-items:center;gap:.4rem;
  padding:.62rem 0;color:var(--tinte-2);
  font:400 .98rem/1.4 var(--grotesk)}
.nav-klapp > summary::-webkit-details-marker{display:none}
.nav-klapp > summary::after{content:"";width:6px;height:6px;flex:none;
  border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;
  transform:rotate(45deg) translateY(-2px);
  transition:transform var(--schnell) var(--kurve)}
.nav-klapp[open] > summary::after{transform:rotate(-135deg) translateY(-2px)}
.nav-klapp > summary:hover{color:var(--signal)}
.nav-klapp-innen{position:absolute;top:100%;left:-1rem;z-index:60;
  min-width:22rem;display:grid;gap:.15rem;
  padding:.7rem;border:1px solid var(--linie);border-radius:3px;
  background:#fff;
  box-shadow:0 2px 6px rgba(20,25,32,.06),
             0 22px 44px -24px rgba(13,50,102,.4)}
.nav-klapp-innen a{display:grid;gap:.1rem;padding:.6rem .75rem!important;
  border-radius:2px;
  transition:background var(--schnell) var(--kurve)}
.nav-klapp-innen a:hover{background:rgba(0,74,173,.07)}
.nav-klapp-innen a b{font:600 .95rem/1.3 var(--grotesk);color:var(--tinte)}
.nav-klapp-innen a span{font:400 .84rem/1.4 var(--grotesk);
  color:var(--tinte-3)}
.nav-klapp-innen a[aria-current="page"]{background:rgba(0,74,173,.1)}
.nav-klapp-innen a[aria-current="page"] b{color:var(--signal)}
.nav-klapp-innen a::after{display:none}

/* Rufnummer in der klebenden Leiste, links vom Kontaktknopf. */
.kopf-ruf{display:inline-flex;align-items:center;min-height:44px;
  padding:0 .2rem;font:600 .95rem/1 var(--grotesk);
  color:var(--tinte)!important;letter-spacing:-.005em;
  font-variant-numeric:tabular-nums;
  transition:color var(--schnell) var(--kurve)}
.kopf-ruf:hover,.kopf-ruf:focus-visible{color:var(--signal)!important}
.kopf-ruf::after{display:none}

@media (max-width:980px){
  /* Im Klappmenü des Telefons ist die Fachkreise-Gruppe kein Überlager,
     sondern eine eingerückte Liste — ein Menü im Menü verwirrt. */
  .nav-klapp-innen{position:static;min-width:0;box-shadow:none;border:0;
    padding:.2rem 0 .4rem .9rem;background:transparent;
    border-left:2px solid var(--linie)}
}
/* Die Rufnummer verschwindet erst dort, wo der Waehlknopf uebernimmt — bei
   760 px. Vorher stand sie bis 980 px auf `display:none`, und weil die
   Dienstzeile sie nicht mehr traegt, war zwischen 761 und 980 px gar keine
   Nummer im Bild. */
@media (max-width:760px){.kopf-ruf{display:none}}

/* Auf einer Fachkreis-Seite wird der Schalter markiert, nicht aufgeklappt.
   Dieselbe Auszeichnung, die `aria-current` sonst auf einem Verweis setzt —
   ein Strich darunter, nicht eine geöffnete Fläche über dem Inhalt. */
.nav-klapp-hier > summary{color:var(--tinte)}
.nav-klapp-hier > summary::before{content:"";position:absolute;
  left:0;right:1rem;bottom:.28rem;height:2px;background:var(--signal)}
.nav-klapp > summary{position:relative}
