/* ============================================================================
   LORENZEN VERSICHERUNGSMAKLER — unabhaengige Beratung in der HafenCity Hamburg
   Basis-Stufe (Starter). Standbilder, ein Einblende-Effekt je Abschnitt, dazu
   Hover, Fokus und die zwei Bedienungs-Rueckmeldungen des Entwurfs (die drei
   Bilder im Abschnitt Leistungen blenden ueber, das Plus in den Fragen
   dreht sich). Kein Parallax, kein Pinning, kein Scrub, kein Zaehler, kein
   Bildwechsel, kein `background-attachment: fixed`.

   HERKUNFT
   --------
   1:1 uebertragen aus dem Claude-Design-Entwurf "Versicherungsmakler Lorenzen
   Hamburg.dc.html" (Projekt 9e200815-1fb2-4f84-b0ef-82a1c23232f8), Uebernahme
   am 30.10.2026 nach `docs/regeln/vorlagen.md` und den Entscheidungen von
   Benedikt vom 30.10.2026: Aufbau, Reihenfolge, Texte, Farben, Schriften,
   Groessen, Abstaende, Schatten und Bildzuschnitte wie im Entwurf; Schriften
   1:1; Kontaktdaten wie im Entwurf; Logo als Bild; Bewegung ruhig.

   Der Entwurf lag Base64-verpackt vor. Er laedt Source Serif 4 (optische
   Groesse 8-60, Schnitte 500 und 600) und IBM Plex Sans (400, 500, 600) von
   Google Fonts und die Laufzeit `support.js`. Er traegt Hover-Angaben der
   Claude-Design-Umgebung an neun Knoten (vier Menuepunkte, Knopf in der
   Kopfleiste, Hero-Knopf breit, Knopf im Leistungsfeld, Knopf "Ueber mich",
   Formular-Knopf), eine Fokus-Angabe (Sprungverweis), zehn
   Bedingungsbloecke sc-if (Menuezeile, Menue-Knopf, Handy-Menue, Hero breit,
   Hero schmal, drei Fehlermeldungen, Statusmeldung, E-Mail-Knopf), sechs
   Schleifen sc-for (Bereiche, Merkpunkte, Schritte, Fragen, Themen,
   Gespraechsart) und eine `DCLogic`-Klasse mit Breiten- und Scroll-Zustand,
   Bereichswahl, Formularpruefung und einer fertigen Mail fuers
   Mailprogramm. Nichts davon laeuft ohne die Claude-Design-Umgebung (V1).

   Alle Masse sind die des Entwurfs, auch sein Kastenmodell: Er setzt selbst
   `*, *::before, *::after { box-sizing: border-box }`, und so steht es hier.
   Was der Entwurf je nach Fenster per Skript umschaltet (matchMedia), steht
   hier in Media Queries an denselben Grenzen, nur min-width (V5):
     ab 1080 px                     Menuezeile mit Knopf statt Menue-Knopf,
                                    Logo 40 statt 32 px hoch
     ab 900 px und Fenster ab 6:5   Hero breit: Foto als Buehne, Schleier,
                                    Text darauf (Entwurf ab 1:1, siehe
                                    Abweichung 7); sonst Text oben, Foto 4:3
                                    darunter
   Die Raster laufen wie im Entwurf ohne Media Query ueber
   `repeat(auto-fit, minmax(min(100%, X), 1fr))`.

   ABWEICHUNGEN VOM ENTWURF, JEDE MIT GRUND
   ----------------------------------------
    1. LAUFZEIT ENTFERNT (V1, V6). x-dc, helmet, die Bedingungsbloecke und
       Schleifen, die Platzhalter in doppelten geschweiften Klammern, die
       Hover- und Fokus-Angaben, `onClick`/`onInput`/`onChange`/`onSubmit`,
       `DCLogic`, `support.js`, das Werkzeug-Skript von Claude Design und die
       Bildschirm-Etiketten sind weg. Inline-Stile sind Klassen mit den Werten
       aus `:root`, die Hover-Angaben `:hover`, alle Listen ausgeschrieben.
       Hover gibt es genau dort, wo der Entwurf eine Hover-Angabe traegt: Der
       Hero-Knopf dunkelt deshalb nur in der breiten Fassung, "Termin" im
       Handy-Menue gar nicht. Wo der Entwurf einem Verweis eine Farbe inline
       gibt, gewinnt sie dort gegen `a:hover`; hier halten das eigene
       `:hover`-Regeln fest, sonst wuerde weisse Schrift auf Blau beim
       Darueberfahren zu #14212B.
    2. EIN HERO STATT ZWEIER FASSUNGEN. Der Entwurf legt den Hero zweimal an
       (breit und schmal, beide mit id="hero-h1") und blendet per Skript eine
       davon aus. Hier steht er einmal, und CSS schaltet an derselben Grenze
       um. Grund: Die Kopf-Markierungen der persoenlichen Vorschau muessen je
       genau einmal vorkommen (V20), und eine id darf es nur einmal geben. Das
       Wort "Unabhaengiger" der Vorzeile stand nur in der breiten Fassung; es
       steht in `.nur-breit` und erscheint auch nur dort. Im Quelltext steht
       der Text vor dem Foto, wie in der schmalen Fassung; in der breiten
       liegt er per `z-index` darueber.
    3. SCHRIFTEN SELBST AUSGELIEFERT (V3, V4, Entscheidung 2). Dieselben
       Familien und Schnitte, die die Seite zeigt: Source Serif 4, Schnitt
       500, mit der Achse fuer die optische Groesse (opsz 8-60, der Browser
       waehlt sie wie bei Google nach der Schriftgroesse), 52 344 B; IBM Plex
       Sans als variable Datei, freigegeben 400-600, 45 712 B. latin-Teilmenge
       mit demselben `unicode-range` wie bei Google. Zusammen 98 056 B =
       95,8 KB, Budget 120 KB. Kein preconnect, kein Stylesheet von Google.
       Der Entwurf bestellt Source Serif zusaetzlich in 600, setzt ihn aber an
       keiner Stelle ein (alle Serifen-Stellen tragen 500). Fuer "opsz + 500 +
       600" liefert Google die ganze variable Datei mit wght 200-900 aus
       (122 360 B); zusammen waeren das 168 072 B, ueber dem Budget der Basis-
       und sogar der Premium-Stufe. Die kleinere Datei ist Googles eigene
       Fassung "opsz, nur 500": uebereinandergelegt bei 20 bis 82 px kein
       sichtbarer Unterschied, Zeilenbreite hoechstens 0,12 % anders. Wer die
       bitgleiche Datei will: `source-serif-4-500-600-latin.woff2` (liegt im
       Arbeitsordner der Uebernahme) und `font-weight: 500 600`.
    4. VERMERK-LEISTE UND UMBRANDUNG (A17, V14, V19). Die feste Leiste ist
       26 px hoch (--notice). Deshalb beginnen Seitengrund und Kopfleiste
       26 px tiefer, die Sprungziele halten 110 statt 84 px Abstand, #top und
       #inhalt halten 26 px (sonst rutschte beim Klick aufs Logo und nach
       "Zum Inhalt springen" der Hero 26 px unter die Kopfleiste; so landen
       beide wie im Entwurf bei 0), und der Sprungverweis "Zum Inhalt
       springen" erscheint unter der Leiste statt dahinter. Die Hoehe der
       Hero-Buehne bleibt die Formel des Entwurfs (92svh - 84 px).
    5. SPERRHINWEIS (V14). `noindex, nofollow`; Seitenbeschreibung und
       og:description enden auf "Fiktives Beispielprojekt."
    6. BILDER LOKAL (V3, V18, Entscheidung 6). Dieselben Dateien unter img/
       statt versicherung/img/. Das Titelbild ist von 4096 x 2294 auf
       1920 x 1075 px verkleinert (73 474 B, Budget 250 KB), der Dateiname
       des Entwurfs bleibt; `width`/`height` im Markup nennen die echten
       Masse. Genau ein Bild vorgeladen, das Titelbild, wie im Entwurf;
       og:image zeigt auf img/hero-4k.webp.
    7. HERO BREIT: SCHLEIER UND UMSCHALTPUNKT (V9). Der Entwurf legt den
       Schleier rgba(246,247,247, .78 bei 0 % / .5 bei 30 % / 0 bei 48 %) an
       und schaltet ab 900 px bei Seitenverhaeltnis ab 1:1 auf breit. Am echten
       Foto faellt das durch (siehe KONTRASTE): Ein dunkler Fensterpfosten
       laeuft durch Vorzeile, Ueberschrift, Vorspann und "Leistungen
       ansehen", und in fast quadratischen Fenstern liegt Vorspann-Text auf
       dem Sakko. Hier: .78 bei 0 % / .7 bei 38 % / 0 bei 50 % (Anfang gleich,
       der Mann ab etwa der Bildmitte bleibt unberuehrt) und breit erst ab
       Seitenverhaeltnis 6:5; fast quadratische Fenster bekommen die schmale
       Fassung, wie im Entwurf sonst nur Hochformat.
    8. NUMMER DER NICHT GEWAEHLTEN BEREICHE #677178 STATT #7A868E (V9).
       3,48 : 1 auf #F6F7F7 bei 20 px Schnitt 500 (kein "grosser Text");
       #677178 ist dieselbe Farbe, gerade so weit abgedunkelt, dass sie mit
       Reserve traegt: 4,65 : 1.
    9. PLATZHALTER IM TEXTFELD #45525B (V9). Der Entwurf setzt keine Farbe;
       die Browser zeigen ihn hellgrau, bis hinunter auf etwa 2,35 : 1. Hier
       die Zweittext-Farbe des Entwurfs, deckend: 8,04 : 1 auf #FFFFFF.
   10. FOKUSRING IM FUSS WEISS (V9, Nicht-Text). Der Ring des Entwurfs
       (#1B3A57) liegt dort auf #14212B bei 1,40 : 1 und ist unsichtbar; im
       Fuss ist er #FFFFFF (16,38 : 1). Im dunklen Makler-Band gibt es nichts,
       das den Fokus bekommt.
   11. LINIE UNTER DER KOPFLEISTE OHNE SCROLL-LISTENER (V7, Entscheidung 5).
       Der Entwurf liest `scrollY > 20` bei jedem Scroll-Ereignis. Hier setzt
       js/seite.js `is-gescrollt`, sobald ein 20 px hoher Waechter am
       Seitenanfang das Bild verlaesst (IntersectionObserver). Ohne Skript
       bleibt die Linie durchsichtig, wie am Seitenanfang des Entwurfs.
   12. HANDY-MENUE OHNE ZUSTAND IM SKRIPT (V8). Statt Knopf plus Zustand ein
       <details>/<summary>, gestaltet wie der Knopf des Entwurfs; "Menue" und
       "Schliessen" wechselt CSS, "aufgeklappt" meldet der Browser selbst.
       Die Liste liegt absolut unter der Leiste, an derselben Stelle wie im
       Entwurf, und traegt deshalb Grund und Weichzeichner der Leiste selbst
       und, wenn die Seite gescrollt ist, unten deren Linie. Damit ihr
       Weichzeichner wirkt, liegen Grund und Weichzeichner der Leiste auf
       ::before statt am <header>, die Linie auf ::after; die Leiste sieht
       dadurch nicht anders aus. Nach einem Sprung und beim Wechsel auf die
       breite Ansicht klappt js/seite.js das Menue zu (closeMenu, onMq im
       Entwurf); ohne Skript bleibt es offen, bis man "Schliessen" drueckt.
   13. BEREICHSWAHL, THEMA UND GESPRAECHSART UEBER RADIOS (V8). Kein Skript,
       Muster wie `autohaus`: Die Radios der Bereichswahl stehen versteckt vor
       den beiden Spalten, ihre Beschriftungen sind die Reiter des Entwurfs,
       `:checked` schaltet Markierung, Bild und Text. Die Rollen
       tablist/tab/tabpanel und `aria-selected` entfallen, ein Radio meldet
       "ausgewaehlt" selbst; der Name der Reiterliste ("Versicherungsbereiche")
       haengt als Beschreibung an jedem Radio. Fokusring an der Beschriftung,
       mit den Werten des Entwurfs. Kleine Abweichung: Ein gewaehltes Thema
       laesst sich nicht wieder abwaehlen (im Entwurf hob ein zweiter Klick es
       auf); "Sonstiges" bleibt waehlbar. Der Knopf "Beratung zur ..." waehlt
       das Thema wie im Entwurf vor (pickTopic, js/seite.js); ohne Skript
       springt er nur zum Formular.
   14. FORMULAR SENDET NICHTS (V12). Pruefung, Fehlermeldungen (#A3352A),
       Statusmeldung und der Aufbau der Mail sind weg, ebenso `aria-invalid`
       und `aria-describedby`, die auf diese Meldungen zeigten. Der Knopf ist
       type="button", das Formular hat kein Ziel, nichts faengt ein Absenden
       ab. Hinter dem Knopf stand im Entwurf die leere Statuszeile; den
       Abstand, den sie hielt (20 px), haelt jetzt ein Rand unter dem Knopf,
       damit der weisse Kasten gleich hoch bleibt.
   15. EINBLENDEN ERGAENZT (V7, Entscheidung 5). Der Entwurf blendet nichts
       ein. Die sechs Abschnitte unter dem Hero tragen [data-reveal] und
       erscheinen einmal (400 ms, 12 px). Der Hero nicht: das LCP-Element
       steht im ersten Frame. Der Fuss auch nicht. Ohne Skript und bei
       "Bewegung reduzieren" ist alles sofort da.
   16. MAKLER-BAND AUF DEM HANDY (V5). Jede der drei Zeilen ist im Entwurf
       ohne Bedingung zweispaltig, `minmax(0, 200px) minmax(0, 1fr)`. Bei
       360 px bleiben dem Text 96 px, ein bis zwei Woerter je Zeile. Unter
       560 px steht der Begriff deshalb ueber dem Text, mit dem Zeilenabstand
       des Entwurfs (`gap: 8px 24px`; seine 8 px wirken nur so); ab 560 px
       genau wie im Entwurf.
   17. "Berufsunfaehigkeitsversicherung" MIT WEICHEM TRENNSTRICH (V5). In
       28 px ist das eine Wort etwa 400 px breit und ragte unter etwa 440 px
       Fensterbreite rechts aus der Seite (waagerechtes Scrollen). Ein &shy;
       nach "Berufsunfaehigkeits" bricht es nur dort, wo es nicht in die
       Zeile passt; ueberall sonst steht es wie im Entwurf.
   18. KONTAKTDATEN WIE IM ENTWURF (Entscheidung 3, bewusst abweichend von
       V10): Hafenstrasse 114, 20457 Hamburg, 01230 123456789,
       ostseemakler@eineuroweb.de, "Mo-Fr nach Vereinbarung". Benedikt hat sie
       geprueft. Ebenso die Platzhalter [REGISTERNUMMER] und [DOKUMENT FOLGT]
       in der Pflichtzeile im Fuss; im Markup steht "Vom Kunden zu ersetzen".
   19. IMPRESSUM UND DATENSCHUTZERKLAERUNG zeigen wie im Entwurf auf
       eineuroweb.de (Entscheidung 7) und fuehren damit nicht ins Leere (V17);
       am Seitenende steht trotzdem der Abschnitt #rechtliches wie in jeder
       Vorlage.
   20. ZUSAETZLICH AUS DEM MUSTER salon-kammrath: <html lang="de">,
       `decoding="async"` an beiden Logos, das Symbol im Reiter als data:-
       Adresse (eine blaue Flaeche ohne Buchstaben; ohne fragt der Browser
       /favicon.ico ab, und dort liefert die App nichts) und der Block fuer
       reduzierte Bewegung um die Einblend-Regeln erweitert.

   KONTRASTE — GERECHNET, NICHT GESCHAETZT (V9)
   --------------------------------------------
   WCAG-2.1-Relativluminanz, sRGB. Halbtransparente Flaechen sind vorher im
   sRGB-Raum verrechnet, so wie der Browser es tut.

     --tinte #14212B      auf --grund #F6F7F7 ......... 15,26 : 1   OK
     --tinte              auf --weiss #FFFFFF ......... 16,38 : 1   OK
     --tinte              auf --band #EAEDEE .......... 13,92 : 1   OK
     --blau #1B3A57       auf --grund (Vorzeilen, Verweise) 10,93 : 1   OK
     --blau               auf --weiss (Verweis im Formular) 11,74 : 1   OK
     --blau               auf --band .................  9,97 : 1   OK
     --text #2C3943       auf --grund ................. 11,03 : 1   OK
     --text               auf --weiss ................. 11,84 : 1   OK
     --text               auf --band .................. 10,06 : 1   OK
     --grau #45525B       auf --grund .................  7,49 : 1   OK
     --grau               auf --weiss (Pflichtfeld, Platzhalter) 8,04 : 1   OK
     --grau               auf --band ..................  6,84 : 1   OK
     --rost #A4482E       auf --grund ("Fuer ...", Nummern) 5,52 : 1   OK
     --nummer #677178     auf --grund .................  4,65 : 1   OK
       (Entwurf #7A868E: 3,48 : 1 — FAELLT DURCH, Abweichung 8)
     --weiss              auf --blau (Knoepfe, gewaehlte Felder) 11,74 : 1   OK
     --weiss              auf --tinte (Hover, Band, Fuss) 16,38 : 1   OK
     --hell #C9D1D6       auf --tinte (Band, Fuss) .... 10,59 : 1   OK

   KOPFLEISTE UND HANDY-MENUE. rgba(246,247,247,.97) laesst 3 % durch.
   Gerechnet gegen das Dunkelste, was darunter durchlaeuft: ueber Schwarz
   wird sie #EFF0F0 (--tinte 14,34, --blau 10,28), ueber --tinte #EFF1F1
   (14,45 / 10,35) — OK. Der Weichzeichner aendert daran nichts.

   HERO SCHMAL. Text auf --grund, das Foto ohne Text darunter: Werte oben.

   HERO BREIT. Dunkle Schrift auf hellem Schleier ueber dem Foto. Der
   unguenstigste denkbare Fall ist ein schwarzer Bildpunkt unter dem Schleier:
     Deckung 0,78 -> #C0C1C1: --tinte 9,08, --text 6,56, --blau 6,50
     Deckung 0,70 -> #ACADAD: --tinte 7,28, --text 5,26, --blau 5,22
     Deckung 0,50 -> #7B7C7C: --tinte 3,91, --text 2,83, --blau 2,80
   Wo der Schleier unter 0,70 faellt, gilt deshalb nur der Messwert am echten
   Foto. Gemessen im Browser an dieser Seite: Schrift unsichtbar geschaltet,
   dann jeder Bildpunkt unter jeder Textzeile gegen ihre Schriftfarbe
   gerechnet; je Fenster der DUNKELSTE Punkt unter der jeweiligen Zeile:
     Fenster        Vorzeile   h1   Vorspann   "Leistungen ansehen"
     900 x 750        6,30    8,36    6,45          10,82
     1024 x 600       6,45    8,38    6,26          10,44
     1024 x 768       6,25    8,28    6,33          10,52
     1080 x 900       6,38    8,28    6,45          10,70
     1180 x 820       5,98    8,19    6,31           7,98
     1200 x 1000      5,77    8,47    6,53          13,25
     1280 x 720       6,18    8,28    6,38           8,71
     1280 x 800       6,25    8,28    6,31           9,01
     1280 x 1024      6,20    8,38    6,58           9,91
     1366 x 768       5,92    8,26    6,31           8,79
     1440 x 900       6,11    8,19    6,38           8,63
     1600 x 1200      6,05    8,18    6,25           8,81
     1680 x 1050      5,98    8,09    6,25           8,64
     1920 x 1080      5,92    8,00    6,24           8,73
     2560 x 1440      5,98    7,92    6,23          14,02
     3440 x 1440      5,92    6,57    5,62          11,74      alles OK
   900 x 760, 900 x 900 und alle Fenster unter 6:5 zeigen die schmale Fassung.
   Gegenprobe, dieselbe Messung mit dem Schleier des Entwurfs: 1280 x 800
   Vorzeile 2,83, h1 3,43, Vorspann 2,86, "Leistungen ansehen" 4,27;
   1920 x 1080 Vorzeile 2,42, h1 3,05, Vorspann 2,74 — FAELLT DURCH (der
   dunkle Fensterpfosten). Mit dem neuen Schleier, aber breit schon ab 1:1
   wie im Entwurf: 900 x 900 Vorspann 1,01, 1100 x 1100 Vorspann 1,00,
   1050 x 900 "Leistungen ansehen" 1,47 — die Zeilen enden auf dem Sakko.
   > Folge: Abweichung 7 (Schleier und 6:5).

   NICHT-TEXT (nur zur Einordnung; V9 gilt fuer Text). Fokusring --blau auf
   --grund 10,93, auf --weiss 11,74, auf --band 9,97, im Fuss --weiss auf
   --tinte 16,38. Rahmen der Eingabefelder und Themen #BFC8CD auf #FFFFFF
   1,70, Linien #D3D9DC auf --grund 1,33 und #34444F auf --tinte 1,63 — unter
   den 3 : 1 fuer Bedienelemente; Entwurf so gelassen, jedes Feld traegt
   seine Beschriftung, gewaehlte Themen und Gespraechsarten sind blau
   gefuellt (11,74 : 1 gegen ihre Schrift).
   ========================================================================= */


/* ── Schriften · selbst ausgeliefert, kein Abruf zu einem fremden Server ── */

@font-face {
  font-family: "IBM Plex Sans";
  font-style: normal;
  font-weight: 400 600;          /* Datei traegt wght 100-700, freigegeben 400-600 wie im Entwurf bestellt */
  font-display: swap;
  src: url("../vendor/fonts/ibm-plex-sans-400-600-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 500;              /* Schnitt 500 mit Achse opsz 8-60 (Abweichung 3) */
  font-display: swap;
  src: url("../vendor/fonts/source-serif-4-500-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


/* ── Tokens · jeder Wert aus dem Entwurf ─────────────────────────────────── */

:root {
  --grund: #F6F7F7;        /* Seitengrund, Kopfleiste, Schleier */
  --weiss: #FFFFFF;        /* Schrift auf Blau und Dunkel, Formular, Felder */
  --tinte: #14212B;        /* Text, Ueberschriften, Makler-Band, Fuss, Hover der Knoepfe */
  --blau: #1B3A57;         /* Verweise, Knoepfe, Vorzeilen, Fokusring, Gewaehltes */
  --rost: #A4482E;         /* Strich der Vorzeilen, "Fuer ...", Nummern, Markierung */
  --text: #2C3943;         /* Fliesstext */
  --grau: #45525B;         /* Zweittext, Bezeichnungen, Platzhalter */
  --nummer: #677178;       /* Nummer der nicht gewaehlten Bereiche (Entwurf #7A868E, Abweichung 8) */
  --hell: #C9D1D6;         /* Text auf Dunkel, Linien der Fragen */
  --linie-dunkel: #34444F; /* Linien im Makler-Band und im Fuss */
  --linie: #D3D9DC;        /* helle Linien und Rahmen */
  --feld: #BFC8CD;         /* Rahmen der Eingabefelder, Themen und Gespraechsart */
  --band: #EAEDEE;         /* Grund "Ueber mich" und Fragen */
  --hero-grund: #EEF0F0;   /* Grund hinter dem Titelbild */
  --bild-grund: #E3E7E9;   /* Grund hinter den uebrigen Bildern */
  --kopf-grund: rgba(246, 247, 247, 0.97);

  --schrift: "IBM Plex Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
  --titelschrift: "Source Serif 4", Georgia, serif;

  --breite: 1400px;
  --rand: clamp(20px, 4vw, 56px);
  --kopf: 84px;            /* Kopfleiste */
  --notice: 26px;          /* feste Hinweisleiste aus A17 */
}


/* ── Grundlage · die globalen Regeln des Entwurfs ────────────────────────── */

html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  padding-top: var(--notice);
  background: var(--grund);
  color: var(--tinte);
  font-family: var(--schrift);
  -webkit-font-smoothing: antialiased;
}

*,
*::before,
*::after { box-sizing: border-box; }

a { color: var(--blau); text-underline-offset: 3px; }
a:hover { color: var(--tinte); }

:focus-visible {
  outline: 2px solid var(--blau);
  outline-offset: 3px;
  border-radius: 2px;
}

summary::-webkit-details-marker { display: none; }

.rahmen {
  max-width: var(--breite);
  margin: 0 auto;
}

/* Sprungverweis. Unter die Vermerk-Leiste gesetzt (Abweichung 4). */
.skip {
  position: absolute;
  left: -9999px;
  top: calc(var(--notice) + 8px);
  z-index: 100;
  padding: 10px 16px;
  background: var(--blau);
  color: var(--weiss);
}

.skip:hover { color: var(--weiss); }
.skip:focus { left: 8px; }

/* Vorzeile mit Strich davor. Der Strich ist im Entwurf ein leeres <span> im
   selben Flex-Behaelter; als ::before verhaelt er sich genauso, auch darin,
   dass er schmaler wird, wenn die Zeile umbricht. */
.vorzeile {
  margin: 0;
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--blau);
}

.vorzeile::before {
  content: "";
  display: block;
  width: 24px;
  height: 2px;
  background: var(--rost);
}

.kopfgruppe {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 500;
  font-size: clamp(38px, 4.2vw, 66px);
  line-height: 1.06;
  letter-spacing: -0.01em;
}

/* `text-wrap: balance` setzt der Entwurf nur bei Leistungen und "Ueber mich". */
.titel--balance { text-wrap: balance; }

.abschnitt {
  padding: clamp(80px, 10vw, 152px) var(--rand);
  scroll-margin-top: calc(var(--notice) + var(--kopf));
}

.abschnitt--band { background: var(--band); }

/* Hauptknopf. Hoehe, Innenabstand und Groesse je Stelle wie im Entwurf. */
.knopf {
  display: inline-flex;
  align-items: center;
  background: var(--blau);
  color: var(--weiss);
  text-decoration: none;
  font-weight: 600;
}

.knopf:hover {
  background: var(--tinte);
  color: var(--weiss);
}

.knopf--kopf { height: 50px; padding: 0 24px; font-size: 15px; }

.knopf--feld {
  align-self: flex-start;
  height: 54px;
  padding: 0 24px;
  font-size: 15px;
  margin-top: 6px;
}

.knopf--ueber {
  align-self: flex-start;
  height: 56px;
  padding: 0 28px;
  font-size: 16px;
  margin-top: 4px;
}

/* Versteckte Radios fuer Bereichswahl, Thema und Gespraechsart (Abweichung
   13). `position: absolute` haelt sie aus Raster und Flex-Zeile heraus; ohne
   top/left bleiben sie an Ort und Stelle, damit der Tastaturfokus dort
   landet, wo ihre Beschriftung steht. */
.wahl-radio {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}


/* ── Kopfleiste ──────────────────────────────────────────────────────────── */

/* Grund und Weichzeichner der Leiste liegen auf ::before, die Linie auf
   ::after, nicht an <header> selbst: Ein Element mit `backdrop-filter`
   laesst darunter liegende Elemente nur noch sich selbst weichzeichnen. So
   bekommt das Handy-Menue unter der Leiste denselben Weichzeichner wie im
   Entwurf, wo es in der Leiste steht. Das Bild ist dasselbe: 84 px Leiste,
   1 px Linie darunter, beides rgba(246,247,247,.97) mit blur(10px). */
.kopf {
  position: fixed;
  top: var(--notice);
  left: 0;
  right: 0;
  z-index: 50;
  border-bottom: 1px solid transparent;
}

.kopf::before {
  content: "";
  position: absolute;
  inset: 0 0 -1px;
  z-index: -1;
  background: var(--kopf-grund);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

.kopf::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 1px;
}

/* Gesetzt von js/seite.js, sobald die Seite mehr als 20 px gescrollt ist
   (Abweichung 11). */
.kopf.is-gescrollt::after { background: var(--linie); }

.kopf__innen {
  max-width: var(--breite);
  margin: 0 auto;
  padding: 0 var(--rand);
  height: var(--kopf);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}

.kopf__marke {
  display: flex;
  align-items: center;
}

.kopf__logo {
  display: block;
  height: 32px;
  width: auto;
}

.kopf__nav {
  display: none;
  align-items: center;
  gap: 32px;
}

.kopf__link {
  color: var(--tinte);
  text-decoration: none;
  font-size: 15px;
  font-weight: 500;
}

.kopf__link:hover { text-decoration: underline; }

/* Handy-Menue: <details> statt Knopf mit Zustand (Abweichung 12). Der Knopf
   traegt die Werte des <button> im Entwurf. */
.menue__knopf {
  display: flex;
  align-items: center;
  height: 46px;
  padding: 0 18px;
  border: 1px solid var(--tinte);
  background: transparent;
  color: var(--tinte);
  font: 600 15px var(--schrift);
  cursor: pointer;
  list-style: none;
}

.menue[open] .menue__zu,
.menue:not([open]) .menue__auf { display: none; }

/* Bezugsrahmen ist die feste Kopfleiste, nicht <details>: So liegt die Liste
   ueber die volle Breite direkt unter der Zeile mit Logo und Knopf, wie im
   Entwurf. Weil sie dort nicht mehr in der Leiste steht, traegt sie deren
   Grund und Weichzeichner selbst. */
.menue__liste {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  display: flex;
  flex-direction: column;
  padding: 4px var(--rand) 24px;
  border-top: 1px solid var(--linie);
  background: var(--kopf-grund);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

.kopf.is-gescrollt .menue__liste { border-bottom: 1px solid var(--linie); }

.menue__link {
  padding: 15px 0;
  border-bottom: 1px solid var(--linie);
  color: var(--tinte);
  text-decoration: none;
  font-family: var(--titelschrift);
  font-size: 24px;
  font-weight: 500;
}

.menue__knoepfe {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-top: 20px;
}

.menue__anruf,
.menue__termin {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 54px;
  text-decoration: none;
  font-size: 15px;
  font-weight: 600;
}

/* Farbe aus `a`, wie im Entwurf: #1B3A57, beim Darueberfahren #14212B. */
.menue__anruf { border: 1px solid var(--blau); }

.menue__termin,
.menue__termin:hover {
  background: var(--blau);
  color: var(--weiss);
}

@media (min-width: 1080px) {
  .kopf__logo { height: 40px; }
  .kopf__nav { display: flex; }
  .menue { display: none; }
}


/* ── Hero ────────────────────────────────────────────────────────────────── */
/* Ein Markup fuer beide Fassungen des Entwurfs (Abweichung 2). Ausgang ist
   die schmale: Text oben auf dem Seitengrund, das Foto 4:3 darunter. Kein
   Einblenden: das LCP-Element steht im ersten Frame. */

.hero {
  padding-top: var(--kopf);
  scroll-margin-top: var(--notice);
}

/* Ziel von "Zum Inhalt springen". <main> beginnt mit dem Hero 26 px tiefer
   und haelt deshalb dieselben 26 px wie #top; so landet der Sprung wie im
   Entwurf bei 0 (Abweichung 4). */
#inhalt { scroll-margin-top: var(--notice); }

.hero__buehne {
  display: flex;
  flex-direction: column;
}

.hero__rahmen { padding: 36px clamp(20px, 6vw, 56px); }

.hero__text {
  display: flex;
  flex-direction: column;
  gap: 22px;
}

.vorzeile--hero { font-size: 13px; }

.nur-breit { display: none; }

.hero__titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 500;
  font-size: clamp(40px, 10vw, 68px);
  line-height: 1.06;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

.hero__vorspann {
  margin: 0;
  font-size: 17px;
  line-height: 1.7;
  color: var(--text);
  text-wrap: pretty;
}

.hero__knoepfe {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* Schmal ohne Hover, wie im Entwurf; die Farbe bleibt weiss. */
.hero__knopf {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 56px;
  background: var(--blau);
  color: var(--weiss);
  text-decoration: none;
  font-size: 16px;
  font-weight: 600;
}

.hero__knopf:hover { color: var(--weiss); }

.hero__link {
  align-self: center;
  color: var(--tinte);
  font-size: 16px;
  font-weight: 600;
}

.hero__bild {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  object-position: 72% 30%;
  background: var(--hero-grund);
}

.hero__schleier { display: none; }

/* Breit: das Foto fuellt die Buehne, der Schleier liegt links, der Text
   darauf. Entwurf: (min-width: 900px) and (min-aspect-ratio: 1/1);
   hier 6/5 und ein kraeftigerer Schleier (Abweichung 7). */
@media (min-width: 900px) and (min-aspect-ratio: 6/5) {
  .hero__buehne {
    position: relative;
    min-height: clamp(600px, calc(92svh - 84px), 940px);
    flex-direction: row;
    align-items: center;
    overflow: hidden;
    background: var(--hero-grund);
  }

  .hero__bild {
    position: absolute;
    inset: 0;
    height: 100%;
    aspect-ratio: auto;
    object-position: 70% 30%;
  }

  .hero__schleier {
    display: block;
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, rgba(246, 247, 247, 0.78) 0%, rgba(246, 247, 247, 0.7) 38%, rgba(246, 247, 247, 0) 50%);
  }

  .hero__rahmen {
    position: relative;
    z-index: 1;
    width: 100%;
    max-width: var(--breite);
    margin: 0 auto;
    padding: 64px var(--rand);
  }

  .hero__text {
    max-width: min(600px, 44vw);
    gap: 28px;
  }

  .vorzeile--hero { font-size: 14px; }

  .nur-breit { display: inline; }

  .hero__titel {
    font-size: clamp(46px, 4.9vw, 82px);
    line-height: 1.04;
    letter-spacing: -0.015em;
  }

  .hero__vorspann {
    max-width: 500px;
    font-size: clamp(17px, 1.3vw, 19px);
  }

  .hero__knoepfe {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: 14px 28px;
  }

  .hero__knopf {
    display: inline-flex;
    justify-content: flex-start;
    height: 58px;
    padding: 0 30px;
  }

  .hero__knopf:hover { background: var(--tinte); }

  .hero__link { align-self: auto; }
}


/* ── Makler statt Vertreter ──────────────────────────────────────────────── */

.band {
  background: var(--tinte);
  color: var(--weiss);
  padding: clamp(72px, 8vw, 120px) var(--rand);
}

.band__raster {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 380px), 1fr));
  gap: 40px clamp(48px, 7vw, 120px);
  align-items: start;
}

.band__titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 500;
  font-size: clamp(34px, 3.6vw, 56px);
  line-height: 1.1;
  text-wrap: balance;
  color: var(--weiss);
}

.band__liste {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}

/* Unter 560 px Begriff ueber dem Text (Abweichung 16). */
.band__zeile {
  border-top: 1px solid var(--linie-dunkel);
  padding: 22px 0;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 8px 24px;
}

.band__zeile:last-child { border-bottom: 1px solid var(--linie-dunkel); }

@media (min-width: 560px) {
  .band__zeile { grid-template-columns: minmax(0, 200px) minmax(0, 1fr); }
}

.band__begriff {
  font-family: var(--titelschrift);
  font-size: 22px;
  font-weight: 500;
}

.band__text {
  font-size: 16px;
  line-height: 1.7;
  color: var(--hell);
}


/* ── Leistungen: drei Bereiche zum Umschalten ────────────────────────────── */
/* Ohne Skript (Abweichung 13). Die drei Radios sind die ersten Kinder des
   Rasters; Beschriftungen (links) und Feld (rechts) folgen ihnen, darum
   greift `~`. */

.leistungen {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 420px), 1fr));
  gap: 48px clamp(40px, 6vw, 96px);
  align-items: start;
}

.leistungen__links {
  display: flex;
  flex-direction: column;
  gap: 32px;
}

.reiter {
  display: flex;
  flex-direction: column;
}

.reiter__feld {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr);
  gap: 16px;
  align-items: baseline;
  text-align: left;
  padding: 22px 16px 22px 18px;
  border-top: 1px solid var(--linie);
  background: transparent;
  color: var(--tinte);
  cursor: pointer;
}

.reiter__nr {
  font-family: var(--titelschrift);
  font-size: 20px;
  font-weight: 500;
  color: var(--nummer);
}

.reiter__text {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.reiter__titel {
  font-family: var(--titelschrift);
  font-size: clamp(22px, 1.9vw, 28px);
  font-weight: 500;
  line-height: 1.2;
  color: var(--grau);
}

.reiter__kurz {
  font: 400 15px/1.6 var(--schrift);
  color: var(--grau);
}

.reiter__ende { border-top: 1px solid var(--linie); }

#bereich-bu:checked ~ .leistungen__links .reiter__feld[for="bereich-bu"],
#bereich-pkv:checked ~ .leistungen__links .reiter__feld[for="bereich-pkv"],
#bereich-gewerbe:checked ~ .leistungen__links .reiter__feld[for="bereich-gewerbe"] {
  box-shadow: inset 3px 0 0 var(--rost);
}

#bereich-bu:checked ~ .leistungen__links .reiter__feld[for="bereich-bu"] .reiter__nr,
#bereich-pkv:checked ~ .leistungen__links .reiter__feld[for="bereich-pkv"] .reiter__nr,
#bereich-gewerbe:checked ~ .leistungen__links .reiter__feld[for="bereich-gewerbe"] .reiter__nr {
  color: var(--rost);
}

#bereich-bu:checked ~ .leistungen__links .reiter__feld[for="bereich-bu"] .reiter__titel,
#bereich-pkv:checked ~ .leistungen__links .reiter__feld[for="bereich-pkv"] .reiter__titel,
#bereich-gewerbe:checked ~ .leistungen__links .reiter__feld[for="bereich-gewerbe"] .reiter__titel {
  color: var(--tinte);
}

/* Fokusring an der Beschriftung, mit den Werten des globalen :focus-visible. */
#bereich-bu:focus-visible ~ .leistungen__links .reiter__feld[for="bereich-bu"],
#bereich-pkv:focus-visible ~ .leistungen__links .reiter__feld[for="bereich-pkv"],
#bereich-gewerbe:focus-visible ~ .leistungen__links .reiter__feld[for="bereich-gewerbe"] {
  outline: 2px solid var(--blau);
  outline-offset: 3px;
  border-radius: 2px;
}

.bereich {
  display: flex;
  flex-direction: column;
  gap: 28px;
  min-width: 0;
}

/* Alle drei Bilder liegen uebereinander und sind geladen; das gewaehlte ist
   deckend. So blendet der Wechsel wie im Entwurf ueber, ohne graues
   Aufblitzen. */
.bereich__bilder {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 5;
  max-height: 640px;
  overflow: hidden;
  background: var(--bild-grund);
}

.bereich__bild {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 0.35s ease;
}

.bereich__bild--pkv { object-position: 50% 30%; }

.bereich__text {
  display: none;
  flex-direction: column;
  gap: 18px;
}

#bereich-bu:checked ~ .bereich .bereich__bild--bu,
#bereich-pkv:checked ~ .bereich .bereich__bild--pkv,
#bereich-gewerbe:checked ~ .bereich .bereich__bild--gewerbe { opacity: 1; }

#bereich-bu:checked ~ .bereich .bereich__text--bu,
#bereich-pkv:checked ~ .bereich .bereich__text--pkv,
#bereich-gewerbe:checked ~ .bereich .bereich__text--gewerbe { display: flex; }

.bereich__fuer {
  margin: 0;
  font-size: 14px;
  font-weight: 600;
  color: var(--rost);
}

.bereich__titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 500;
  font-size: clamp(28px, 2.6vw, 40px);
  line-height: 1.15;
}

.bereich__beschreibung {
  margin: 0;
  font-size: 17px;
  line-height: 1.75;
  color: var(--text);
  text-wrap: pretty;
}

.merkpunkte {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.merkpunkte__titel {
  margin: 0 0 6px;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--grau);
}

.merkpunkte__liste {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
  gap: 0 24px;
}

.merkpunkte__liste li {
  border-top: 1px solid var(--linie);
  padding: 12px 0;
  font-size: 16px;
  line-height: 1.5;
  display: flex;
  gap: 12px;
}

/* Das Quadrat ist im Entwurf ein leeres <span aria-hidden>. */
.merkpunkte__liste li::before {
  content: "";
  flex: none;
  width: 6px;
  height: 6px;
  margin-top: 9px;
  background: var(--rost);
}


/* ── Ueber mich ──────────────────────────────────────────────────────────── */

.ueber {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), 1fr));
  gap: clamp(40px, 7vw, 120px);
  align-items: center;
}

.ueber__text {
  display: flex;
  flex-direction: column;
  gap: 26px;
}

.ueber__absatz {
  margin: 0;
  max-width: 560px;
  font-size: 18px;
  line-height: 1.75;
  color: var(--text);
  text-wrap: pretty;
}

.ueber__bild {
  display: block;
  width: 100%;
  max-width: 560px;
  justify-self: end;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  background: var(--bild-grund);
}


/* ── Ablauf ──────────────────────────────────────────────────────────────── */

.ablauf {
  display: flex;
  flex-direction: column;
  gap: clamp(48px, 6vw, 80px);
}

.ablauf__kopf {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 420px), 1fr));
  gap: 20px 72px;
  align-items: end;
}

.ablauf__intro {
  margin: 0;
  max-width: 500px;
  font-size: 17px;
  line-height: 1.75;
  color: var(--grau);
}

.schritte {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
  gap: 40px 40px;
}

.schritt {
  border-top: 2px solid var(--tinte);
  padding-top: 24px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.schritt__nr {
  font-family: var(--titelschrift);
  font-size: 48px;
  font-weight: 500;
  line-height: 1;
  color: var(--rost);
}

.schritt__titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 500;
  font-size: 24px;
  line-height: 1.25;
}

.schritt__text {
  margin: 0;
  font-size: 16px;
  line-height: 1.7;
  color: var(--grau);
  text-wrap: pretty;
}


/* ── Fragen ──────────────────────────────────────────────────────────────── */
/* <details> wie im Entwurf, alle zu beim Laden. */

.faq {
  background: var(--band);
  padding: clamp(80px, 10vw, 144px) var(--rand);
  scroll-margin-top: calc(var(--notice) + var(--kopf));
}

.faq__raster {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr));
  gap: 40px clamp(48px, 7vw, 120px);
  align-items: start;
}

.faq__liste {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.frage { border-top: 1px solid var(--hell); }

.frage__kopf {
  list-style: none;
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 24px;
  padding: 22px 0;
  font-size: 18px;
  font-weight: 600;
  line-height: 1.4;
}

.faq-plus {
  flex: none;
  font-size: 28px;
  font-weight: 400;
  line-height: 1;
  transition: transform 0.2s ease;
}

details[open] .faq-plus { transform: rotate(45deg); }

.frage__antwort {
  margin: 0;
  padding: 0 48px 24px 0;
  font-size: 16px;
  line-height: 1.75;
  color: var(--text);
  text-wrap: pretty;
}

.faq__ende { border-top: 1px solid var(--hell); }


/* ── Kontakt ─────────────────────────────────────────────────────────────── */

.kontakt {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), 1fr));
  gap: 56px clamp(48px, 7vw, 120px);
  align-items: start;
}

.kontakt__links {
  display: flex;
  flex-direction: column;
  gap: 30px;
}

.kontakt__kopf { gap: 22px; }

.kontakt__titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 500;
  font-size: clamp(40px, 4.6vw, 74px);
  line-height: 1.04;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

.kontakt__intro {
  margin: 0;
  max-width: 460px;
  font-size: 17px;
  line-height: 1.75;
  color: var(--text);
}

.kontaktliste {
  margin: 0;
  display: flex;
  flex-direction: column;
}

.kontaktliste__zeile {
  border-top: 1px solid var(--linie);
  padding: 16px 0;
  display: grid;
  grid-template-columns: 100px minmax(0, 1fr);
  gap: 16px;
}

.kontaktliste__zeile:last-child { border-bottom: 1px solid var(--linie); }

.kontaktliste dt {
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--grau);
  padding-top: 3px;
}

.kontaktliste dd {
  margin: 0;
  font-size: 17px;
}

.kontaktliste__adresse { line-height: 1.5; }
.kontaktliste__adresse address { font-style: normal; }
.kontaktliste__stark { font-weight: 600; }
.kontaktliste__mail { overflow-wrap: anywhere; }


/* ── Formular ────────────────────────────────────────────────────────────── */
/* Sendet nichts (V12, Abweichung 14). */

.formular {
  background: var(--weiss);
  border: 1px solid var(--linie);
  padding: clamp(24px, 4vw, 48px);
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.formular__titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 500;
  font-size: 30px;
}

.gruppe {
  margin: 0;
  padding: 0;
  border: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-width: 0;
}

.gruppe__titel {
  font-size: 15px;
  font-weight: 600;
  margin-bottom: 10px;
}

.themen {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

/* Die Themen tragen die Werte der Knoepfe im Entwurf. */
.thema {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 8px 16px;
  border: 1px solid var(--feld);
  background: var(--weiss);
  color: var(--tinte);
  font: 500 15px var(--schrift);
  text-align: center;
  cursor: pointer;
}

.wahl-radio:checked + .thema {
  border-color: var(--blau);
  background: var(--blau);
  color: var(--weiss);
}

.arten {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  border: 1px solid var(--feld);
}

.art {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 50px;
  padding: 0 6px;
  background: var(--weiss);
  color: var(--tinte);
  font: 600 14px var(--schrift);
  text-align: center;
  cursor: pointer;
}

.wahl-radio:checked + .art {
  background: var(--blau);
  color: var(--weiss);
}

.wahl-radio:focus-visible + .thema,
.wahl-radio:focus-visible + .art {
  outline: 2px solid var(--blau);
  outline-offset: 3px;
  border-radius: 2px;
}

.feldreihe {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr));
  gap: 20px;
}

.feld {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.feld__name {
  font-size: 15px;
  font-weight: 600;
}

/* `border-radius: 0` steht im Entwurf inline und gewinnt dort gegen die 2 px
   des Fokusrings; hier steht die Regel deshalb nach :focus-visible. */
.feld__eingabe {
  height: 52px;
  padding: 0 14px;
  border: 1px solid var(--feld);
  border-radius: 0;
  background: var(--weiss);
  color: var(--tinte);
  font: 400 16px var(--schrift);
}

.feld__text {
  padding: 12px 14px;
  border: 1px solid var(--feld);
  border-radius: 0;
  background: var(--weiss);
  color: var(--tinte);
  font: 400 16px/1.6 var(--schrift);
  resize: vertical;
}

/* Abweichung 9. */
.feld__text::placeholder {
  color: var(--grau);
  opacity: 1;
}

.einwilligung {
  display: flex;
  gap: 12px;
  align-items: flex-start;
}

.einwilligung__kasten {
  flex: none;
  width: 22px;
  height: 22px;
  margin: 2px 0 0;
  accent-color: var(--blau);
}

.einwilligung__text {
  font-size: 15px;
  line-height: 1.55;
  color: var(--text);
}

/* Der Rand unten haelt den Abstand der leeren Statuszeile des Entwurfs. */
.formular__knopf {
  height: 58px;
  margin-bottom: 20px;
  border: 0;
  background: var(--blau);
  color: var(--weiss);
  font: 600 16px var(--schrift);
  cursor: pointer;
}

.formular__knopf:hover { background: var(--tinte); }

.formular__hinweis {
  margin: 0;
  font-size: 13px;
  color: var(--grau);
}


/* ── Fuss ────────────────────────────────────────────────────────────────── */

.fuss {
  background: var(--tinte);
  color: var(--hell);
  padding: 64px var(--rand) 40px;
}

.fuss__rahmen {
  display: flex;
  flex-direction: column;
  gap: 36px;
}

.fuss__oben {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: flex-end;
  gap: 32px;
}

.fuss__logo {
  display: block;
  height: 52px;
  width: auto;
  max-width: 100%;
}

.fuss__kontakt {
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 15px;
  line-height: 1.6;
}

/* Weiss bleibt weiss, auch beim Darueberfahren (inline im Entwurf). */
.fuss a,
.fuss a:hover { color: var(--weiss); }

/* Abweichung 10. */
.fuss :focus-visible { outline-color: var(--weiss); }

.fuss__pflicht {
  margin: 0;
  font-size: 14px;
  line-height: 1.6;
  color: var(--hell);
}

.fuss__unten {
  border-top: 1px solid var(--linie-dunkel);
  padding-top: 24px;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 16px;
}

.fuss__name { font-size: 14px; }

.fuss__recht {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 28px;
}

.fuss__recht a {
  font-size: 15px;
  font-weight: 600;
}


/* ── Einblenden: genau ein Effekt je Abschnitt ──────────────────────────── */
/* Der Ausgangszustand haengt an `.has-reveal`, und die Klasse setzt allein
   `js/reveal.js`. Ohne Javascript ist deshalb nichts versteckt. */

.has-reveal [data-reveal] {
  opacity: 0;
  transform: translateY(12px);
}

.has-reveal [data-reveal].is-in {
  opacity: 1;
  transform: none;
  transition: opacity 400ms ease-out, transform 400ms ease-out;
}


/* ── Rechtlicher Hinweis am Seitenende ──────────────────────────────────── */

.rechtliches {
  padding: 48px var(--rand) 64px;
  background: var(--grund);
  color: var(--grau);
  scroll-margin-top: calc(var(--notice) + var(--kopf));
}

.rechtliches__titel {
  margin: 0 0 10px;
  font-family: var(--titelschrift);
  font-weight: 500;
  font-size: 24px;
  line-height: 1.25;
  color: var(--tinte);
}

.rechtliches__text {
  margin: 0;
  max-width: 64ch;
  font-size: 15px;
  line-height: 1.7;
}


/* ── Weniger Bewegung: abschalten, nicht verkuerzen ─────────────────────── */
/* Die erste Regel ist die des Entwurfs, die zweite gehoert zum Einblenden. */

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  * {
    transition: none !important;
    animation: none !important;
  }

  .has-reveal [data-reveal],
  .has-reveal [data-reveal].is-in {
    opacity: 1;
    transform: none;
  }
}
