/* ============================================================================
   HAUSARZTPRAXIS AM JUNGFERNSTIEG — Dr. Marina Becker, Hamburg
   Basis-Stufe (Starter). Standbilder, ein Einblende-Effekt je Abschnitt, dazu
   Hover und Fokus. Kein Parallax, kein Pinning, kein Scrub, kein Zaehler,
   kein Bildwechsel, kein `background-attachment: fixed`.

   HERKUNFT
   --------
   1:1 uebertragen aus dem Claude-Design-Entwurf
   "Hausarztpraxis Jungfernstieg.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, Rundungen und Bildzuschnitte wie im Entwurf; Schriften 1:1;
   Kontaktdaten wie im Entwurf; Bewegung ruhig. Das Logo ist im Entwurf
   Text (der Name, darunter "Dr. Marina Becker"); eine Logo-Datei gibt es
   fuer diese Praxis nicht. Es steht deshalb hier wie dort als Text.

   Der Entwurf laedt Cormorant Garamond (500 und 600, aufrecht und kursiv)
   und Plus Jakarta Sans (400 bis 700) von Google Fonts und die Laufzeitdatei
   von Claude Design. Er traegt Hover-Angaben der Claude-Design-Umgebung an
   zehn Knoten (zwei Verweise der Oberleiste, vier Menuepunkte, "Termin
   vereinbaren" in Kopf und Hero, "Jetzt anrufen", Formular-Knopf), eine
   Fokus-Angabe (Sprungverweis), neun Bedingungsbloecke sc-if (Oberleiste,
   Menuezeile, Menue-Knopf, Handy-Menue, vier Fehlermeldungen,
   Statusmeldung), drei Schleifen sc-for (Sprechzeiten, Leistungen, Fragen)
   und eine `DCLogic`-Klasse mit Breiten-, Scroll- und Menue-Zustand, der
   Sprechzeit von heute und einer Formularpruefung. Nichts davon laeuft ohne
   die Claude-Design-Umgebung (V1).

   Alle Masse sind die des Entwurfs, auch sein Kastenmodell: Er setzt
   `box-sizing: border-box` global, hier ebenso. Was der Entwurf per Skript
   nach der Fensterbreite umschaltet (matchMedia mit min-width 1060 px), steht
   hier als Media Query an derselben Grenze, nur min-width (V5):
     unter 1060 px  Kopfzeile 76 px, Menue-Knopf, aufklappbares Handy-Menue
     ab 1060 px     Oberleiste 38 px dazu, Menuezeile statt Menue-Knopf,
                    Kopf 114 px (Hero oben und Sprungziele rechnen damit)
   Die Raster laufen wie im Entwurf ohne Media Query ueber
   `repeat(auto-fit, minmax(min(100%, X), 1fr))`, die zwei Fakten im Hero
   ueber `minmax(150px, 1fr)` ohne min(), auch das wie im Entwurf.

   ABWEICHUNGEN VOM ENTWURF, JEDE MIT GRUND
   ----------------------------------------
    1. LAUFZEIT ENTFERNT (V1, V6). Die Laufzeit-Elemente des Entwurfs, die
       Bedingungsbloecke und Schleifen, die Platzhalter in doppelten
       geschweiften Klammern, die Hover- und Fokus-Angaben, `onClick`,
       `onInput`, `onChange`, `onSubmit`, `DCLogic`, die Etiketten der
       Abschnitte fuer den Editor, die Laufzeitdatei und das Werkzeug-Skript
       von Claude Design sind weg. Inline-Stile sind Klassen mit den Werten
       aus `:root`, die Hover-Angaben sind `:hover`, Sprechzeiten, Leistungen
       und Fragen stehen ausgeschrieben. Hover gibt es genau dort, wo der
       Entwurf eine Hover-Angabe traegt. Wo der Entwurf einem Verweis die
       Farbe inline gibt, schlaegt sie seine globale Regel
       `a:hover { color: #1E2B2C }`; diese Verweise behalten deshalb auch hier
       beim Darueberfahren ihre Farbe. Die globale Regel wirkt wie im Entwurf
       nur am Verweis "Datenschutzerklaerung" im Formular.
    2. SCHRIFTEN SELBST AUSGELIEFERT (V3, V4, Entscheidung 2). Genau die
       Familien und Schnitte des Entwurfs, latin-Teilmenge mit demselben
       `unicode-range` wie bei Google: Cormorant Garamond aufrecht (37 640 B)
       und kursiv (39 260 B), je eine variable Datei mit Achse 300-700,
       freigegeben 500-600 wie im Entwurf bestellt; Plus Jakarta Sans
       (27 348 B), variable Datei mit Achse 200-800, freigegeben 400-700.
       Zusammen 104 248 B = 101,8 KB, Budget 120 KB. Cormorant 500 nutzt der
       Entwurf nirgends; der Schnitt steckt ohne Mehrkosten in derselben
       Datei. Kein preconnect, kein Stylesheet von Google. Vorgeladen werden
       die aufrechte Cormorant und Plus Jakarta Sans (Logo, Ueberschrift,
       Vorspann, Knoepfe ueber der Falz).
    3. VERMERK-LEISTE UND UMBRANDUNG (A17, V14, V19). Die feste Leiste ist
       26 px hoch (--notice). Deshalb beginnen Seitengrund und Kopfleiste
       26 px tiefer, der Sprungverweis "Zum Inhalt springen" steht bei 34
       statt 8 px, die Sprungziele halten 102 statt 76 px Abstand (ab 1060 px
       140 statt 114 px), und #top haelt 26 px, damit der Logo-Verweis wie im
       Entwurf ganz oben landet.
    4. SPERRHINWEIS (V14). `noindex, nofollow`; Seitenbeschreibung und
       og:description enden auf "Fiktives Beispielprojekt."
    5. BILDER LOKAL (V3, Entscheidung 6). Dieselben sechs Dateien unter img/
       statt praxis/img/, unveraendert (alle schmaler als 1920 px). Das
       Titelbild hat 68 960 B, Budget 250 KB. Genau ein Bild vorgeladen, das
       Titelbild, wie im Entwurf (V18); og:image zeigt auf img/hero.webp.
    6. "HEUTE" IM HERO PER KLEINEM SKRIPT (V8, Entscheidung 5). js/seite.js
       rechnet wie der Entwurf aus dem Wochentag (Ortszeit, einmal beim Laden)
       und uebernimmt die Zeit aus der Zeile desselben Tages in den
       Sprechzeiten; Samstag und Sonntag "Geschlossen". So steht jede Uhrzeit
       nur einmal im Markup. Ohne Skript steht dort "Termine nach
       Vereinbarung", woertlich aus dem Sprechzeiten-Absatz des Entwurfs; der
       Satz stimmt an jedem Tag.
    7. LINIE UNTER DER KOPFLEISTE OHNE scrollY (V7, V8). Der Entwurf zeigt
       sie nach mehr als 20 px Scrollen, ermittelt ueber einen Scroll-Listener.
       js/seite.js beobachtet stattdessen mit IntersectionObserver einen
       20 px hohen Streifen am Seitenanfang und setzt `.is-gescrollt`; die
       Linie erscheint ohne Uebergang, wie im Entwurf. Ohne Skript bleibt sie
       unsichtbar, also so wie im Entwurf am Seitenanfang.
    8. HANDY-MENUE OHNE SKRIPT (V8). Statt Knopf plus Zustand ein
       <details>/<summary>; "Menue" und "Schliessen" wechseln ueber [open],
       den aufgeklappten Zustand meldet der Browser selbst. Die Liste liegt
       absolut unter der Kopfzeile (Bezugsrahmen ist die feste Kopfleiste),
       ueber die volle Breite wie im Entwurf; ihre obere Linie deckt die Linie
       der Kopfleiste, ihre untere erscheint wie die der Kopfleiste erst nach
       dem Scrollen. Im Entwurf gehoert die Liste zur Kopfleiste und liegt
       damit unter deren Weichzeichnung (backdrop-filter, 10 px) zu 97 %
       deckend; die Seite darunter ist dort nicht zu sehen. Hier erreicht die
       Weichzeichnung die Liste nicht, weil die Kopfleiste selbst schon eine
       traegt; zu 97 % deckend schiene die Ueberschrift des Hero scharf als
       Schatten durch (in Chrome gesehen). Die Liste ist deshalb deckend in
       --grund #FAF8F4, wie die Kopfleiste am Seitenanfang aussieht. Nach
       einem Klick auf einen Sprungverweis und beim Wechsel ueber 1060 px
       klappt js/seite.js das Menue zu (closeMenu und onMq im Entwurf);
       "Anrufen" schliesst es wie im Entwurf nicht. Ohne Skript bleibt es
       offen, bis man den Knopf noch einmal drueckt.
    9. FORMULAR SENDET NICHTS (V12). Pruefung, die vier Fehlermeldungen
       (#A1301F) samt roten Rahmen und die Statusmeldung sind weg, ebenso
       `aria-invalid` und `aria-describedby`, die auf diese Meldungen
       zeigten. Der Knopf ist type="button", das Formular hat kein action.
       Zwischen Knopf und "* Pflichtfeld" stand im Entwurf die leere
       Statuszeile, also zweimal der Abstand von 20 px; den zweiten haelt
       jetzt ein Rand unter dem Knopf, damit der Kasten gleich hoch bleibt.
   10. SCHLUSSLINIE DER SPRECHZEITEN. Der Entwurf zieht sie mit einem leeren
       <div> in der <dl>; das ist dort ungueltig. Dieselbe Linie zieht jetzt
       die letzte Zeile als border-bottom (gleiches Bild). Die Schlusslinie
       der Fragen steht in einem <div> und bleibt, wie sie ist.
   11. FOKUSRING AUF GRUEN UND DUNKEL (V9, Nicht-Text). Der Ring des Entwurfs
       (#2F5D57) ist im Sprechzeiten-Band und in der Oberleiste unsichtbar
       (1,00 : 1) und im Fuss zu schwach (1,97 : 1). Dort ist er hell:
       #F4F1EA im Band und in der Oberleiste (6,59 : 1), #FAF8F4 im Fuss
       (13,78 : 1).
   12. EINBLENDEN ERGAENZT (V7, Entscheidung 5). Der Entwurf blendet nichts
       ein. Die sieben Abschnitte unter dem Hero tragen je ein [data-reveal]
       und erscheinen einmal (400 ms, 12 px). Der Hero nicht: das LCP-Element
       steht im ersten Frame. Ohne Skript und bei "Bewegung reduzieren" ist
       alles sofort da.
   13. ABSCHNITT #rechtliches AM ENDE (V17, wie in jeder Vorlage).
       Impressum und Datenschutzerklaerung im Fuss und im Formular zeigen wie
       im Entwurf auf eineuroweb.de (Entscheidung 7) und fuehren damit nicht
       ins Leere.
   14. KONTAKTDATEN WIE IM ENTWURF (Entscheidung 3, bewusst abweichend von
       V10): Jungfernstieg 112, 20354 Hamburg, 040 123456789,
       privatpraxis@eineuroweb.de, die Sprechzeiten und "U/S Jungfernstieg".
       Benedikt hat sie geprueft.
   15. ZUSAETZLICH AUS DEN MUSTERN (salon-kammrath, kiosk-wolff):
       <html lang="de"> und ein Symbol im Reiter als data:-Adresse (V3), eine
       Flaeche in --gruen ohne Buchstaben. Ohne fragt der Browser
       /favicon.ico an der Wurzel ab, und dort liegt nichts; ein Buchstabe
       gehoerte umgebrandet.
   16. SPRECHZEITEN AUF DEM HANDY (V5). Der Entwurf laesst die Spalte mit
       dem Wochentag auf 0 schrumpfen (`minmax(0, 1fr)`). Ist die Zeile zu
       schmal, laeuft der Tag deshalb in die Uhrzeit: "Donnerstag" unter
       365 px Fensterbreite (bei 360 px 4 px Ueberlappung), "Dienstag" unter
       341, "Montag" unter 330 px; zwischen 365 und 380 px bleiben vom
       Abstand des Entwurfs (16 px) nur 1 bis 15 px. Hier ist die Spalte nie
       schmaler als ihr Wort (`minmax(min-content, 1fr)`), der Abstand von
       16 px bleibt also immer; passt die Zeile nicht, bricht die Uhrzeit um,
       rechtsbuendig und ausgewogen am Punkt ("8:00-12:00 ·" ueber
       "15:00-19:00"). Das betrifft nur Fenster unter 381 px; ab 381 px ist
       jede Zeile einzeilig und wie im Entwurf, nachgemessen von 300 bis
       1920 px.

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

     --tinte #1E2B2C      auf --grund #FAF8F4 ......... 13,78 : 1   OK
     --tinte              auf --sand #F1EDE6 .......... 12,52 : 1   OK
     --tinte              auf --weiss #FFFFFF ......... 14,61 : 1   OK
     --tinte              auf --hell #F4F1EA (Knopf) .. 12,95 : 1   OK
     --text #3E4B4B       auf --grund .................  8,56 : 1   OK
     --text               auf --sand ..................  7,78 : 1   OK
     --leise #4E5B5A      auf --grund .................  6,67 : 1   OK
     --leise              auf --sand ..................  6,06 : 1   OK
     --gruen #2F5D57      auf --grund .................  7,01 : 1   OK
     --gruen              auf --sand ..................  6,37 : 1   OK
     --weiss              auf --gruen (Knoepfe) .......  7,44 : 1   OK
     --weiss              auf --tinte (Hover) ......... 14,61 : 1   OK
   SPRECHZEITEN-BAND und OBERLEISTE, Grund --gruen #2F5D57:
     --hell #F4F1EA ....................................  6,59 : 1   OK
     --z-vorzeile #CFE0DA ..............................  5,43 : 1   OK
     --z-text #E4EDE9 ..................................  6,23 : 1   OK
     --weiss (116 117, 112) ............................  7,44 : 1   OK
   FUSS, Grund --tinte #1E2B2C:
     --fuss-text #D5DCD9 ............................... 10,49 : 1   OK
     --grund #FAF8F4 (Name, Impressum, Datenschutz) .... 13,78 : 1   OK
   SPRUNGVERWEIS: --grund auf --tinte ................. 13,78 : 1   OK

   KOPFLEISTE. rgba(250,248,244,.97) laesst 3 % durch, und beim Scrollen
   laeuft alles darunter durch, auch die Fotos. Gerechnet gegen den
   unguenstigsten denkbaren Bildpunkt, Schwarz; dann wird der Grund #F2F1ED,
   und das gilt unabhaengig davon, welches Bild oder Band gerade darunter
   steht:
     --tinte (Name, Menuepunkte, Knopf-Rand) ........... 12,93 : 1   OK
     --leise (Zeile unter dem Namen) ...................  6,26 : 1   OK
     --gruen (Hover der Menuepunkte) ...................  6,58 : 1   OK
   Ueber dem Band (#2F5D57) wird der Grund #F4F3EF (--tinte 13,16), ueber
   dem Fuss #F3F2EE — beides heller als der Fall oben. Das Handy-Menue ist
   deckend --grund (Abweichung 8): --tinte 13,78, --gruen ("Anrufen")
   7,01, --weiss auf --gruen ("Termin") 7,44. Auf einem Foto liegt sonst
   keine Schrift: Der Hero ist geteilt, Text und Bild stehen nebeneinander
   bzw. untereinander.

   NICHT-TEXT (3 : 1 nach WCAG 1.4.11). Fokusring #2F5D57 auf --grund 7,01,
   auf --sand 6,37, auf der Kopfleiste 6,58; im Band und in der Oberleiste
   #F4F1EA 6,59, im Fuss #FAF8F4 13,78 (Abweichung 11). Rand des
   Menue-Knopfs --tinte auf der Kopfleiste 12,93. Rahmen der Eingabefelder
   #CFC7BA auf #FFFFFF 1,68 : 1 — Entwurf so gelassen: das weisse Feld hebt
   sich zusaetzlich vom Sand ab, und ueber jedem Feld steht die
   Beschriftung. Die Linien #DDD6CB (1,36), #CFC7BA und #4F7A73 (1,55) sind
   Zierlinien, keine Bedienelemente.
   ========================================================================= */


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

@font-face {
  font-family: "Cormorant Garamond";
  font-style: italic;
  font-weight: 500 600;          /* Datei traegt wght 300-700, freigegeben 500-600 */
  font-display: swap;
  src: url("../vendor/fonts/cormorant-garamond-500-600-italic-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: "Cormorant Garamond";
  font-style: normal;
  font-weight: 500 600;          /* Datei traegt wght 300-700, freigegeben 500-600 */
  font-display: swap;
  src: url("../vendor/fonts/cormorant-garamond-500-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: "Plus Jakarta Sans";
  font-style: normal;
  font-weight: 400 700;          /* Datei traegt wght 200-800, freigegeben 400-700 */
  font-display: swap;
  src: url("../vendor/fonts/plus-jakarta-sans-400-700-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: #FAF8F4;        /* Seitengrund, Hero, Handy-Menue, Name und Verweise im Fuss, Sprungverweis */
  --kopf-grund: rgba(250, 248, 244, 0.97);   /* Kopfleiste */
  --tinte: #1E2B2C;        /* Text, Ueberschriften, Linien ueber Leistungen und Team, Fuss */
  --gruen: #2F5D57;        /* Akzent, Verweise, Knoepfe, Oberleiste, Sprechzeiten, Fokusring */
  --text: #3E4B4B;         /* Fliesstext */
  --leise: #4E5B5A;        /* Etiketten, Bildunterschrift, Rollen, Hinweise */
  --sand: #F1EDE6;         /* Ueberblick, Fragen, Formular, Grund unter Fotos */
  --sand-tief: #E4DED3;    /* Grund unter den drei Fotos im Ueberblick */
  --linie: #DDD6CB;        /* Linien auf hellem Grund */
  --linie-sand: #CFC7BA;   /* Linien auf Sand, Rahmen der Felder */
  --hell: #F4F1EA;         /* Schrift in Oberleiste und Band, Knopf "Jetzt anrufen" */
  --z-vorzeile: #CFE0DA;   /* Vorzeile im Sprechzeiten-Band */
  --z-text: #E4EDE9;       /* Absaetze im Sprechzeiten-Band */
  --z-linie: #4F7A73;      /* Zeilenlinien im Sprechzeiten-Band */
  --weiss: #FFFFFF;        /* Knopftext, Felder, Hervorhebung im Band */
  --fuss-text: #D5DCD9;    /* Text im Fuss */

  --schrift: "Plus Jakarta Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
  --titelschrift: "Cormorant Garamond", Georgia, serif;

  --rand: clamp(20px, 4vw, 48px);
  --notice: 26px;          /* feste Hinweisleiste aus A17 */
  --kopf: 76px;            /* headerH des Entwurfs; ab 1060 px 114 px */
}


/* ── 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(--gruen);
  text-underline-offset: 3px;
}

a:hover { color: var(--tinte); }

/* Steht vor allen Klassen: Wo der Entwurf einem Element eine eigene Rundung
   gibt (Knoepfe, Felder), behaelt es sie auch mit Fokus, wie dort. */
:focus-visible {
  outline: 2px solid var(--gruen);
  outline-offset: 3px;
  border-radius: 2px;
}

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

.skip {
  position: absolute;
  left: -9999px;
  top: calc(var(--notice) + 8px);
  z-index: 100;
  padding: 10px 16px;
  background: var(--tinte);
  color: var(--grund);
}

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


/* ── Wiederkehrende Bausteine ────────────────────────────────────────────── */

.vorzeile {
  margin: 0;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gruen);
}

.vorzeile--hell { color: var(--z-vorzeile); }

.titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 600;
  font-size: clamp(40px, 4.4vw, 66px);
  line-height: 1.04;
}

.titel--balance { text-wrap: balance; }

.titel--gross {
  font-size: clamp(44px, 5vw, 74px);
  line-height: 1.02;
  text-wrap: balance;
}

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

.einleitung {
  margin: 0;
  max-width: 480px;
  font-size: 17px;
  line-height: 1.7;
  color: var(--text);
}

.einleitung--schmal { max-width: 460px; }

.etikett {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--leise);
}

.foto {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  border-radius: 4px;
  background: var(--sand);
}

.foto--tief { background: var(--sand-tief); }

/* Knoepfe: gross im Hero, im Band und (als <button>) im Formular, klein im Kopf. */
.knopf {
  display: inline-flex;
  align-items: center;
  height: 56px;
  padding: 0 28px;
  border-radius: 999px;
  background: var(--gruen);
  color: var(--weiss);
  text-decoration: none;
  font-size: 16px;
  font-weight: 600;
}

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

.knopf--kopf {
  height: 46px;
  padding: 0 22px;
  font-size: 15px;
}

.knopf--hell {
  align-self: flex-start;
  background: var(--hell);
  color: var(--tinte);
}

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


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

.kopf {
  position: fixed;
  top: var(--notice);
  left: 0;
  right: 0;
  z-index: 50;
  background: var(--kopf-grund);
  border-bottom: 1px solid transparent;
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

/* Abweichung 7: setzt js/seite.js nach 20 px Scrollen. */
.kopf.is-gescrollt { border-bottom-color: var(--linie); }

.kopf__rahmen {
  max-width: 1320px;
  margin: 0 auto;
  padding: 0 var(--rand);
}

.oberleiste {
  display: none;
  background: var(--gruen);
  color: var(--hell);
}

.oberleiste__innen {
  height: 38px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  font-size: 13px;
}

.oberleiste__links {
  display: flex;
  gap: 28px;
}

.oberleiste a {
  color: var(--hell);
  text-decoration: none;
}

.oberleiste a:hover {
  color: var(--hell);
  text-decoration: underline;
}

/* Abweichung 11: auf #2F5D57 waere der Ring unsichtbar. */
.oberleiste :focus-visible { outline-color: var(--hell); }

.kopf__zeile {
  height: 76px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}

.brand {
  display: flex;
  flex-direction: column;
  gap: 2px;
  text-decoration: none;
  color: var(--tinte);
  line-height: 1.1;
}

.brand__name {
  font-family: var(--titelschrift);
  font-weight: 600;
  font-size: 24px;
}

.brand__sub {
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--leise);
}

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

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

.kopf__link:hover {
  color: var(--gruen);
  text-decoration: underline;
}

/* Handy-Menue: <details> statt Knopf mit Zustand (Abweichung 8). Der
   Knopf sieht aus wie der <button> des Entwurfs. */
.menue__knopf {
  display: inline-flex;
  align-items: center;
  height: 44px;
  padding: 0 18px;
  border-radius: 999px;
  border: 1px solid var(--tinte);
  background: transparent;
  color: var(--tinte);
  font: 600 15px "Plus Jakarta Sans", sans-serif;
  cursor: pointer;
  list-style: none;
}

.menue__zu { display: none; }
.menue[open] .menue__auf { display: none; }
.menue[open] .menue__zu { display: inline; }

/* Bezugsrahmen ist die feste Kopfleiste, nicht <details>: So liegt die Liste
   ueber die volle Breite direkt unter der Kopfzeile, wie im Entwurf. Deckend
   statt 97 %: siehe Abweichung 8. */
.menue__liste {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  display: flex;
  flex-direction: column;
  padding: 8px var(--rand) 24px;
  background: var(--grund);
  border-top: 1px solid var(--linie);
  border-bottom: 1px solid transparent;
}

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

.menue__link,
.menue__link:hover {
  padding: 14px 0;
  border-bottom: 1px solid var(--linie);
  color: var(--tinte);
  text-decoration: none;
  font-size: 18px;
  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: 52px;
  border-radius: 999px;
  text-decoration: none;
  font-size: 15px;
  font-weight: 600;
}

.menue__anruf,
.menue__anruf:hover {
  border: 1px solid var(--gruen);
  color: var(--gruen);
}

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


/* ── Hero ────────────────────────────────────────────────────────────────── */

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

.hero__raster {
  max-width: 1600px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 460px), 1fr));
  min-height: clamp(560px, 84svh, 920px);
}

.hero__text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 28px;
  padding: clamp(48px, 7vw, 104px) clamp(20px, 5vw, 80px);
}

.hero__vorzeile {
  display: flex;
  align-items: center;
  gap: 14px;
}

.hero__strich {
  display: block;
  width: 36px;
  height: 1px;
  background: var(--gruen);
}

.hero__titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 600;
  font-size: clamp(50px, 5.8vw, 96px);
  line-height: 0.98;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

.hero__titel em { color: var(--gruen); }

.hero__vorspann {
  margin: 0;
  max-width: 500px;
  font-size: clamp(17px, 1.3vw, 19px);
  line-height: 1.65;
  color: var(--text);
  text-wrap: pretty;
}

.hero__knoepfe {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 14px 28px;
  padding-top: 4px;
}

.hero__tel {
  color: var(--tinte);
  font-size: 16px;
  font-weight: 600;
  text-underline-offset: 5px;
}

.hero__fakten {
  margin: 12px 0 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 20px;
  border-top: 1px solid var(--linie);
  padding-top: 24px;
  max-width: 520px;
}

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

.hero__fakt dd {
  margin: 0;
  font-size: 16px;
  font-weight: 600;
}

.hero__bildspalte {
  position: relative;
  min-height: 340px;
}

.hero__bild {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 38% 50%;
  background: var(--sand);
}


/* ── Abschnitte ──────────────────────────────────────────────────────────── */

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

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


/* ── Willkommen ──────────────────────────────────────────────────────────── */

.praxis__raster {
  max-width: 1200px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 380px), 1fr));
  gap: clamp(48px, 7vw, 112px);
  align-items: center;
}

.praxis__bild {
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.praxis__unterschrift {
  font-size: 14px;
  color: var(--leise);
}

.praxis__text {
  display: flex;
  flex-direction: column;
  gap: 24px;
}

.brief {
  display: flex;
  flex-direction: column;
  gap: 18px;
  font-size: 17px;
  line-height: 1.75;
  color: var(--text);
}

.brief p { margin: 0; }
.brief .brief__lang { text-wrap: pretty; }

.signatur {
  margin: 4px 0 0;
  font-family: var(--titelschrift);
  font-weight: 600;
  font-style: italic;
  font-size: 28px;
  color: var(--gruen);
}


/* ── Sprechzeiten ────────────────────────────────────────────────────────── */

.zeiten {
  background: var(--gruen);
  color: var(--hell);
  padding: clamp(72px, 9vw, 128px) var(--rand);
  scroll-margin-top: calc(var(--notice) + var(--kopf));
}

.zeiten__raster {
  max-width: 1200px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 380px), 1fr));
  gap: 48px clamp(48px, 7vw, 112px);
  align-items: start;
}

.zeiten__absatz {
  margin: 0;
  max-width: 440px;
  font-size: 17px;
  line-height: 1.7;
  color: var(--z-text);
}

.zeiten__notfall {
  margin: 12px 0 0;
  max-width: 440px;
  font-size: 15px;
  line-height: 1.6;
  color: var(--z-text);
}

.zeiten__notfall strong { color: var(--weiss); }

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

/* Abweichung 16: Der Entwurf schreibt `minmax(0, 1fr) auto`. */
.zeiten__zeile {
  display: grid;
  grid-template-columns: minmax(min-content, 1fr) auto;
  gap: 16px;
  padding: 20px 0;
  border-top: 1px solid var(--z-linie);
}

/* Abweichung 10: statt des leeren <div> am Ende der <dl>. */
.zeiten__zeile:last-child { border-bottom: 1px solid var(--z-linie); }

.zeiten__zeile dt {
  font-size: 18px;
  font-weight: 600;
}

.zeiten__zeile dd {
  margin: 0;
  font-size: 18px;
  text-align: right;
  line-height: 1.5;
  text-wrap: balance;      /* Abweichung 16: bricht, wenn noetig, am Punkt um */
}

/* Abweichung 11: auf #2F5D57 waere der Ring unsichtbar. */
.zeiten :focus-visible { outline-color: var(--hell); }


/* ── Leistungen ──────────────────────────────────────────────────────────── */

.leistungen__innen {
  max-width: 1200px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: clamp(48px, 6vw, 80px);
}

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

.leistungen__liste {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr));
  gap: 0 56px;
}

.leistung {
  border-top: 1px solid var(--tinte);
  padding: 28px 0 36px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.leistung__nr {
  font-size: 13px;
  font-weight: 600;
  color: var(--gruen);
}

.leistung__titel {
  margin: 0;
  font-family: var(--titelschrift);
  font-weight: 600;
  font-size: 30px;
  line-height: 1.2;
}

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


/* ── Praxis im Ueberblick ────────────────────────────────────────────────── */

.ueberblick__innen {
  max-width: 1200px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: clamp(40px, 5vw, 72px);
}

.ueberblick__kopf {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 380px), 1fr));
  gap: 32px 64px;
  align-items: start;
}

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

.punkte li {
  display: flex;
  gap: 16px;
  align-items: baseline;
  padding: 16px 0;
  border-top: 1px solid var(--linie-sand);
  font-size: 17px;
}

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

.punkt {
  flex: none;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--gruen);
  transform: translateY(-2px);
}

.ueberblick__bilder {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
  gap: clamp(12px, 1.6vw, 24px);
}

/* Das Gespraech ist quer (3:2) und steht hochkant (4:5): Ausschnitt wie im Entwurf. */
.foto--gespraech { object-position: 62% 50%; }


/* ── Team ────────────────────────────────────────────────────────────────── */

.team__innen {
  max-width: 1200px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: clamp(40px, 5vw, 64px);
}

.team__kopf { max-width: 720px; }

.team__bild {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  object-position: 50% 25%;
  border-radius: 4px;
  background: var(--sand);
}

.team__namen {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
  gap: 0 48px;
}

.person {
  border-top: 1px solid var(--tinte);
  padding: 24px 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

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

.person__rolle {
  margin: 0;
  font-size: 15px;
  color: var(--leise);
}


/* ── Haeufige Fragen ─────────────────────────────────────────────────────── */

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

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

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

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

.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;
  color: var(--gruen);
  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.7;
  color: var(--text);
  text-wrap: pretty;
}

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


/* ── Termine und Anfahrt ─────────────────────────────────────────────────── */

.kontakt__raster {
  max-width: 1200px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), 1fr));
  gap: 56px clamp(48px, 7vw, 112px);
  align-items: start;
}

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

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

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

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

.kontakt__zeile dt { padding-top: 4px; }

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

.kontakt__zeile .kontakt__mehrzeilig { line-height: 1.55; }
.kontakt__zeile .kontakt__fett { font-weight: 600; }
.kontakt__zeile .kontakt__mail { overflow-wrap: anywhere; }

.kontakt__adresse { font-style: normal; }

.kontakt__zeile a { color: var(--tinte); }


/* ── Formular ────────────────────────────────────────────────────────────── */
/* Kein `action`, Knopf `type="button"`: die Vorlage hat keinen Empfaenger,
   an den sie etwas schicken koennte. Was nichts tut, tut hier auch nicht so
   (V12, Abweichung 9). */

.formular {
  background: var(--sand);
  border-radius: 6px;
  padding: clamp(24px, 4vw, 48px);
  display: flex;
  flex-direction: column;
  gap: 20px;
}

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

.formular__hinweis {
  margin: -8px 0 0;
  font-size: 14px;
  line-height: 1.55;
  color: var(--leise);
}

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

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

.feld__eingabe,
.feld__wahl {
  height: 52px;
  padding: 0 16px;
  border: 1px solid var(--linie-sand);
  border-radius: 4px;
  background: var(--weiss);
  color: var(--tinte);
  font: 400 16px "Plus Jakarta Sans", sans-serif;
}

.feld__wahl { padding: 0 14px; }

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

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

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

.formular__knopf {
  height: 56px;
  margin-bottom: 20px;     /* Abweichung 9: Platz der leeren Statuszeile */
  border: 0;
  border-radius: 999px;
  background: var(--gruen);
  color: var(--weiss);
  font: 600 16px "Plus Jakarta Sans", sans-serif;
  cursor: pointer;
}

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

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


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

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

.fuss__innen {
  max-width: 1200px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: flex-end;
  gap: 32px;
}

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

.fuss__name {
  font-family: var(--titelschrift);
  font-weight: 600;
  font-size: 32px;
  color: var(--grund);
}

.fuss__zeile { font-size: 15px; }

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

.fuss__recht a,
.fuss__recht a:hover {
  color: var(--grund);
  font-size: 15px;
  font-weight: 500;
}

/* Abweichung 11: auf #1E2B2C waere der Ring zu schwach. */
.fuss :focus-visible { outline-color: var(--grund); }


/* ── Rechtlicher Hinweis am Seitenende (V17, Abweichung 13) ──────────────── */

.rechtliches {
  box-sizing: content-box;  /* Textkante wie im Fuss: 1200 px Inhalt, Rand aussen */
  max-width: 1200px;
  margin: 0 auto;
  padding: 28px var(--rand) 40px;
  font-size: 14px;
  line-height: 1.7;
  color: var(--text);
  scroll-margin-top: calc(var(--notice) + var(--kopf));
}

.rechtliches h2 {
  margin: 0 0 6px;
  font-size: 15px;
  font-weight: 600;
  color: var(--tinte);
}

.rechtliches p {
  margin: 0;
  max-width: 64ch;
}


/* ── Breite · dieselbe Grenze wie im Skript des Entwurfs ─────────────────── */

@media (min-width: 1060px) {
  :root { --kopf: 114px; }

  .oberleiste { display: block; }
  .kopf__nav { display: flex; }
  .menue { display: none; }
}


/* ── Einblenden: genau ein Effekt je Abschnitt (Abweichung 12) ───────────── */
/* 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;
}


/* ── Weniger Bewegung: abschalten, nicht verkuerzen ─────────────────────── */
/* Die ersten beiden Regeln stehen so im Entwurf. */

@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;
  }
}
