/* Seegarten Klinik - gemeinsames Stylesheet.
   Zusammengefuehrt aus den drei fruheren HTML-Dateien; Blockgrenzen unten markiert. */

:root{color-scheme:light}
img{max-width:100%}
[hidden]:not([hidden=until-found]){display:none!important}

  :root{
    --bg:#F4F6F4;
    --surface:#FFFFFF;
    --surface-2:#EAEEEA;
    --ink:#242220;
    --ink-muted:#6E6763;
    --slate:#5C544F;
    --accent:#8F0000;
    --accent-fill:#BF0000;
    --accent-tint:#FBEAEA;
    --line:#DFD9D5;
    --focus:#0B6E8F;
    /* Formularfelder (27.09.2026, Punkte 294/295). Vorher lagen die Felder
       dunkel auf dem noch dunkleren Seitengrund, der Rand bei 1,3 : 1 -
       "kaum sichtbar, fast schwarz" (Chefarzt). Ein erster Anlauf (Feld
       #2A231E, Rand #756B63) war ihm noch zu wenig: "nicht freundlich".
       Jetzt dunkel ein deutlich helleres Feld und ein heller Rand (rund
       5 : 1 gegen die Flaeche); hell der Rand rund 3 : 1 gegen Weiss statt
       vorher 1,35 : 1, der Feldgrund bleibt der Seitengrund. */
    --feld-grund:#F4F6F4;
    --feld-rand:#9C938C;
    /* Abgrenzung der haftenden Navigationszeile, sobald sie oben klebt (.is-stuck).
       Auf dunklem Grund traegt ein Schatten kaum; die Abgrenzung leistet dort vor
       allem die durchgehende untere Linie, der Schatten gibt nur Tiefe dazu. */
    --nav-stuck:0 8px 16px -10px rgba(20,30,36,0.5);
  }
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]){
      --bg:#15120F;
      --surface:#1D1815;
      --surface-2:#241E19;
      --ink:#ECE8E5;
      --ink-muted:#B7AFA9;
      --slate:#ADA49D;
      --accent:#FF4D4D;
      --accent-fill:#D10000;
      --accent-tint:rgba(209,0,0,0.20);
      --line:#332E29;
      --focus:#6FD3E8;
      --feld-grund:#3A322C;
      --feld-rand:#93887F;
      --nav-stuck:0 10px 20px -10px rgba(0,0,0,0.85);
    }
  }
  :root[data-theme="dark"]{
    --bg:#15120F;
    --surface:#1D1815;
    --surface-2:#241E19;
    --ink:#ECE8E5;
    --ink-muted:#B7AFA9;
    --slate:#ADA49D;
    --accent:#FF4D4D;
    --accent-fill:#D10000;
    --accent-tint:rgba(209,0,0,0.20);
    --line:#332E29;
    --focus:#6FD3E8;
    --feld-grund:#3A322C;
    --feld-rand:#93887F;
    --nav-stuck:0 10px 20px -10px rgba(0,0,0,0.85);
  }

  *{box-sizing:border-box;}
  /* Abstand fuer Sprungmarken, damit die haftende Navigationszeile nichts verdeckt */
  html{scroll-behavior:smooth; scroll-padding-top:72px;}
  @media (prefers-reduced-motion: reduce){ html{scroll-behavior:auto;} *{animation-duration:0.001ms !important; transition-duration:0.001ms !important;} }

  body{
    margin:0;
    background:var(--bg);
    color:var(--ink);
    font-family:"Work Sans", -apple-system, "Segoe UI", sans-serif;
    font-size:16px;
    line-height:1.55;
  }

  /* Deutsche Komposita brauchen eine Trennstelle.
     Gemeldet am 18.09.2026 fuer zwei Artikel, die bei 320 px waagrecht
     ueberliefen - die Ursache war nicht die Tabelle, sondern der Seitentitel:
     "Krampfaderverödung" ist bei 32 px 326 px breit, der Platz misst 265.
     Nachgemessen mit der echten Schrift ueber alle 452 Titel: Von 70 Woertern
     ab 15 Zeichen passen 53 nicht - "Konsultationsvorbereitung" braucht 402 px.
     Es waren also nie zwei Seiten, sondern jede mit einem langen Wort im Titel.
     hyphens:auto trennt nach den Regeln der Sprache (<html lang="de">) und
     wird nur taetig, wenn der Platz nicht reicht - auf breiten Schirmen aendert
     sich nichts. overflow-wrap:break-word bleibt als Netz fuer das, was die
     Trennung nicht kann: Markennamen, Messwerte, Adressen. */
  h1,h2,h3{
    font-family:"Fraunces", Georgia, serif;
    font-weight:460;
    color:var(--ink);
    text-wrap:balance;
    hyphens:auto;
    overflow-wrap:break-word;
    margin:0;
  }

  a{color:inherit;}
  a:focus-visible, button:focus-visible{outline:2px solid var(--focus); outline-offset:3px;}

  .mono{font-family:"IBM Plex Mono", ui-monospace, monospace; font-variant-numeric: tabular-nums;}
  /* Die Rubrik ueber Titeln und Abschnitten. Bis zum 23.09.2026 stand sie auf
     0,72 rem (11,5 px) - die kleinste Schrift der Website, und auf dem Foto
     der Startseite ging sie unter. Auf Wunsch des Chefarztes erst dort, dann
     auf der Startseite und schliesslich ueberall groesser und kraeftiger.
     Schrift und Versalien bleiben, damit sie als Rubrik erkennbar bleibt. */
  .eyebrow{
    font-family:"IBM Plex Mono", monospace;
    font-size:0.98rem;
    font-weight:500;
    letter-spacing:0.1em;
    text-transform:uppercase;
    color:var(--slate);
    /* Seit der groesseren Schrift passt ein langes Einzelwort in Versalien
       und Festbreite schmal nicht mehr in die Zeile: "KONSULTATIONS-
       VORBEREITUNG" schob den Gesundheitsfragebogen bei 320 px um 19 px
       hinaus. Erst trennt die Sprache, und nur wo sie nichts findet, bricht
       overflow-wrap notfalls irgendwo. */
    hyphens:auto; overflow-wrap:anywhere;
  }
  @media (max-width:560px){ .eyebrow{font-size:0.84rem;} }

  /* --wrap-rand steht als Variable da, damit etwas, das randlos ueber die
     ganze Fensterbreite laufen soll, sich mit genau diesem Mass wieder
     herausschieben kann - ohne die Zahl ein zweites Mal zu nennen. Benutzt
     vom Bandfoto der Startseite (.hero-band-hell .wrap::before). */
  .wrap{--wrap-rand:32px; max-width:1180px; margin:0 auto; padding-left:var(--wrap-rand); padding-right:var(--wrap-rand);}
  @media (max-width:720px){ .wrap{--wrap-rand:20px;} }

  /* logo
     Seit dem 17.09.2026 eine Zeichnung statt zweier Bilddateien: Das SVG
     steht als <symbol> im Dokument (siehe app/partials/header.php), die
     Schrift zeichnet in currentColor.
     Damit faellt die ganze Umschalterei weg. Vorher lagen zwei PNG vor,
     hell und dunkel, und fuenf Regeln blendeten je nach Farbschema die
     eine ein und die andere aus - waehrend der Browser BEIDE holte, auch
     die unsichtbare. Jetzt ist es eine Farbe.
     Die Hoehe kommt aus der Regel, die Breite rechnet der Browser aus dem
     viewBox (296 x 74 mit den Quadraten, 270 x 80,9 mit dem Wellenzeichen -
     welche Fassung gilt, steht in app/config.php). Die Masse am Bild, die am selben Tag noetig waren,
     damit die Kopfzeile nicht zurechtrutscht, eruebrigen sich: Ein SVG
     bringt sein Seitenverhaeltnis mit, es muss auf nichts warten. */
  .brand{display:flex; align-items:center; gap:10px; text-decoration:none;}
  /* Die drei Logohoehen laufen ueber --logo-skala. Gesetzt wird der Wert am
     <html> (app/layout.php) aus der eingestellten Logofassung; ohne ihn gilt
     1, also genau die bisherigen Masse.
     Gemessen wird das Logo ueber die Hoehe - eine hoehere Zeichnung heisst
     bei gleicher Hoehe kleinerer Schriftzug. Die Wellenfassung ist 80,9 statt
     74 Einheiten hoch; ohne diese Rechnung waere SEEGARTEN KLINIK 8,6 %
     kleiner geworden. */
  .brand .logo{height:calc(72px * var(--logo-skala, 1)); width:auto; display:block; color:#434242;}
  /* Fusszeile 48 statt 40 px, also 20 % groesser (27.09.2026, Punkt 296). */
  footer .brand .logo{height:calc(48px * var(--logo-skala, 1));}
  /* Im Dunkelmodus schreibt das Logo weiss - wie die bisherige zweite
     Datei. Das Rot bleibt in beiden Faellen #BF0000; es steckt fest in der
     Zeichnung und folgt absichtlich NICHT dem dunklen Akzent (#D10000). */
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]) .brand .logo{color:#FFFFFF;}
  }
  :root[data-theme="dark"] .brand .logo{color:#FFFFFF;}
  .brand-tag{font-family:"IBM Plex Mono", monospace; font-size:0.68rem; letter-spacing:0.08em; color:var(--ink-muted); border-left:1px solid var(--line); padding-left:10px;}

  /* header: obere Zeile mit grossem Logo, darunter die haftende Navigationszeile */
  /* Der ganze Header haftet, aber um die Hoehe der Logo-Zeile nach oben versetzt:
     beim Scrollen laeuft das Logo hinaus und die Navigationszeile bleibt oben stehen.
     Der Wert entspricht Logohoehe 72px plus Innenabstand 20px + 18px.
     Die Logohoehe zieht mit --logo-skala mit (siehe .brand .logo), der
     Versatz muss also mitrechnen - sonst bliebe bei einer hoeheren Fassung
     ein Streifen des Logos oben stehen oder die Navigationszeile rutschte
     darunter weg. Bei Skala 1 ergibt die Rechnung wieder genau -110px. */
  header{position:sticky; top:calc(-38px - 72px * var(--logo-skala, 1)); z-index:20; background:var(--bg);}
  /* nur oben/unten setzen: die seitlichen Abstaende kommen von .wrap */
  .headertop{display:flex; align-items:center; justify-content:space-between; gap:24px; padding-top:20px; padding-bottom:18px;}
  .headertools{display:flex; align-items:center; gap:18px;}
  .headertools a.tel{font-family:"IBM Plex Mono", monospace; font-size:0.86rem; color:var(--ink); text-decoration:none; white-space:nowrap;}
  .headertools a.tel:hover{color:var(--accent);}
  /* Der Sprachumschalter (24.09.2026): "DE | EN" in der Schrift der
     Telefonnummer. Die aktuelle Sprache steht kraeftig und ohne Verweis da,
     die andere ist ein Verweis. Der Trennstrich kommt aus dem CSS, damit ein
     Vorleseprogramm ihn nicht mitliest. Er bleibt auch auf dem Telefon
     sichtbar, wo die Nummer ausgeblendet wird - dort braucht man ihn am
     ehesten, wenn ein Verweis auf die falsche Sprache geteilt wurde. */
  .sprachwahl{display:flex; align-items:center; font-family:"IBM Plex Mono", monospace; font-size:0.86rem;}
  .sprachwahl > * + *::before{content:"|"; color:var(--line); margin:0 8px;}
  .sprachwahl span{color:var(--ink); font-weight:600;}
  .sprachwahl a{color:var(--ink-muted); text-decoration:none;}
  .sprachwahl a:hover{color:var(--accent);}

  .headernavrow{
    position:relative; z-index:1;
    background:var(--bg);
    border-top:1px solid var(--line);
    border-bottom:1px solid var(--line);
  }
  /* Die Klasse setzt site.js, sobald die Zeile oben anstoesst: dann kommt zur
     Linie noch ein Schatten, damit sich die Zeile vom durchlaufenden Inhalt abhebt.
     Bewusst ohne transition: der Uebergang von box-shadow:none auf einen Wert
     blieb in Chrome beim transparenten Startwert haengen, der Schatten kam gar
     nicht erst zum Vorschein. */
  .headernavrow.is-stuck{box-shadow:var(--nav-stuck);}
  .navbar{display:flex; align-items:center; justify-content:space-between; gap:24px;}
  /* Traegt seit dem 21.09.2026 nur noch den Menue-Knopf; auf dem Desktop ist
     sie damit leer und nimmt keinen Platz mehr weg. Die Regel fuer den roten
     Knopf darin ist mit ihm weggefallen. */
  .navactions{display:flex; align-items:center; gap:14px;}

  nav.mainnav ul{display:flex; list-style:none; margin:0; padding:0;}
  nav.mainnav li{display:flex; align-items:center; position:relative;}
  /* Trennstrich zwischen den Menuepunkten: nur in Texthoehe, nicht ueber die
     ganze Zeile - sonst wirkt die Navigation wie eine Tabelle. */
  nav.mainnav li + li::before{
    content:""; position:absolute; left:0; top:50%; transform:translateY(-50%);
    width:1px; height:1.05em; background:var(--line);
  }
  /* Die seitliche Polsterung stand vom 07.09.2026 bis zum 21.09.2026 auf 22px
     (Punkt 27, "Hauptnavigation groesser"). Der neunte Punkt hat einen Teil
     davon gekostet: Die Kopfzeile ist wie der ganze Inhalt auf 1180px
     gedeckelt und waechst mit dem Fenster NICHT mit, der Leiste bleiben also
     1116px, davon 110 fuer den Anmeldeknopf.

     Zweimal an einem Abend gemessen, und der zweite Messwert zaehlt:

       (1) neun Punkte, Etikett "International", roter Knopf noch da (110px):
           pad 22 -> 1249, 133 zu viel; pad 16 -> 1141, 25 zu viel;
           pad 14 -> 1105, 11 uebrig. Genommen war 14.

       (2) derselbe Stand OHNE den roten Knopf "Anmeldung" - er ist auf
           Entscheid des Chefarztes aus der Kopfzeile weg:
           pad 24 -> 1175, 59 zu viel      pad 20 -> 1103, 13 uebrig
           pad 22 -> 1139, 23 zu viel      pad 18 -> 1067, 49 uebrig
           pad 21 -> 1121,  5 zu viel      pad 16 -> 1031, 85 uebrig

     Genommen ist 18px. Nicht 20 oder 21, obwohl sie naeher an den frueheren
     22 lagen: 5 bzw. 13 Pixel Reserve sind keine - eine andere Schriftfassung
     oder ein Browser, der anders rundet, und die Leiste faellt wieder um.
     Bei 18px sind es 49.

     ACHTUNG BEI EINEM ZEHNTEN PUNKT: Er passt nur, wenn er kurz ist - 49px
     reichen fuer ein Wort von etwa vier Zeichen. Nachmessen, nicht
     schaetzen: Die Leiste hat 1116px. */
  nav.mainnav a{
    display:inline-flex; align-items:center; gap:8px;
    font-size:0.98rem; font-weight:600; color:var(--ink); text-decoration:none;
    padding:16px 18px; white-space:nowrap;
    border-bottom:2px solid transparent;
  }
  nav.mainnav li:first-child a{padding-left:0;}
  nav.mainnav a:hover{color:var(--accent);}
  nav.mainnav .chev{width:10px; height:7px; flex-shrink:0; opacity:0.7;}

  /* Aufklappmenue: oeffnet bei Mauszeiger und bei Tastaturfokus */
  nav.mainnav .sub{
    position:absolute; top:100%; left:0; min-width:266px; z-index:30;
    background:var(--surface); border:1px solid var(--line);
    box-shadow:0 20px 44px -24px rgba(20,30,36,0.45);
    padding:6px 0; display:none;
  }
  nav.mainnav li:first-child .sub{left:-4px;}
  nav.mainnav .hassub:hover > .sub,
  nav.mainnav .hassub:focus-within > .sub{display:block;}
  nav.mainnav .hassub:hover > a .chev{transform:rotate(180deg);}
  /* Untermenue eine Stufe leichter als die Hauptpunkte */
  nav.mainnav .sub a{display:block; padding:10px 18px; font-size:0.88rem; font-weight:400; border-bottom:none;}
  nav.mainnav .sub a:hover{background:var(--surface-2); color:var(--ink);}
  .theme-toggle{
    display:inline-flex; align-items:center; justify-content:center;
    width:36px; height:36px; padding:0;
    border:1px solid var(--line); border-radius:2px;
    background:none; color:var(--ink); cursor:pointer;
  }
  .theme-toggle:hover{border-color:var(--ink-muted);}
  .theme-toggle svg{width:17px; height:17px; display:block;}
  .theme-toggle .icon-moon{display:none;}
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]) .theme-toggle .icon-sun{display:none;}
    :root:not([data-theme="light"]) .theme-toggle .icon-moon{display:block;}
  }
  :root[data-theme="dark"] .theme-toggle .icon-sun{display:none;}
  :root[data-theme="dark"] .theme-toggle .icon-moon{display:block;}
  /* Mobiler Menue-Knopf: drei Striche statt des Wortes "Menue", und er steht
     rechts aussen (die Anordnung kommt aus dem Umschaltpunkt weiter unten).
     Bei geoeffnetem Menue werden daraus ein Kreuz - das zeigt, dass derselbe
     Knopf wieder schliesst. Die Umschaltung haengt an aria-expanded, das
     site.js ohnehin setzt; so gibt es keinen zweiten Zustand, der davon
     abweichen koennte. 44 mal 44 Pixel wie die Aufklapper im Menue selbst. */
  .menubtn{display:none; align-items:center; justify-content:center;
    width:44px; height:44px; padding:0;
    background:none; border:1px solid var(--line); border-radius:2px;
    color:var(--ink); cursor:pointer;}
  .menubtn:hover{border-color:var(--ink-muted);}
  .menubtn svg{width:20px; height:14px; display:block;}
  .menubtn .icon-kreuz{display:none;}
  .menubtn[aria-expanded="true"] .icon-striche{display:none;}
  .menubtn[aria-expanded="true"] .icon-kreuz{display:block;}
  /* Umschaltpunkt zum Mobilmenue. Er richtet sich nach der Breite, die die
     Navigationszeile braucht: mit ACHT Punkten sind das 1140px, nachgemessen
     am 20.09.2026 beim Nachbau der Akademie (Punkt 198). Mit sieben Punkten
     waren es 1083px.
     Zum Vergleich: sechs Punkte brauchten 981px. Acht Punkte gab es schon
     einmal - als Medaesthetics kurz eigenstaendig stand -, sie brauchten mit
     diesem langen Wort aber 1222px und damit mehr als der Inhaltsbereich
     (1180px), weshalb es unter MediWiki gewandert ist. "Akademie" ist kurz
     genug, dass die Leiste einzeilig bleibt.
     Kommt ein Menuepunkt dazu, muss dieser Wert MITWACHSEN. Nachmessen: die
     Seite in einem Rahmen schmaler ziehen und die kleinste Breite nehmen, bei
     der documentElement.scrollWidth noch hineinpasst. Vergisst man es, laeuft
     die Leiste still unter dem Fensterrand hinaus - und zwar nur in einem
     schmalen Band von Fensterbreiten, das beim Ausprobieren niemand trifft. */
  @media (max-width:1139px){
    nav.mainnav{display:none;}
    /* Die Navigationszeile traegt mobil nur noch die drei Striche. Bis zum
       21.09.2026 stand links davon der rote Knopf "Anmeldung"; dafuer waren
       order:2 und space-between da - Anmeldung links, Striche rechts aussen.
       Mit einem einzigen Kind schoebe space-between es nach LINKS, also
       flex-end: Die Striche gehoeren an den rechten Rand, wo die Hand ist. */
    .menubtn{display:inline-flex;}
    .navactions{flex:1 1 auto; justify-content:flex-end;}
    .headertools a.tel{display:none;}
    /* 44px Logo + 14px + 12px Innenabstand; die Logohoehe zieht wie oben
       mit --logo-skala mit, der Versatz rechnet mit. Bei Skala 1: -70px. */
    header{top:calc(-26px - 44px * var(--logo-skala, 1));}
    .headertop{padding-top:14px; padding-bottom:12px;}
    .brand .logo{height:calc(44px * var(--logo-skala, 1));}
    .navbar{justify-content:space-between; padding-top:8px; padding-bottom:8px;}
  }
  /* Das Mobilmenue ist mit sieben Punkten und achtzehn Unterpunkten rund
     1500px hoch. Es haengt als absolute Ebene in der haftenden Kopfzeile und
     wandert damit beim Scrollen mit, statt den unteren Teil freizugeben - ohne
     eigenes Scrollen waren auf einem Telefon mit 667px Hoehe nur 11 der 29
     Punkte erreichbar, Team, Patienten-Info, MediWiki und Kontakt gar nicht.
     Das Feld scrollt deshalb selbst. overscroll-behavior haelt den Schwung
     darin, statt ihn an die Seite dahinter weiterzugeben.
     Die genaue Hoehe setzt site.js beim Oeffnen und beim Scrollen; der Wert
     hier ist der Rueckfall ohne Javascript. 128px ist die Kopfzeile in voller
     Hoehe, dvh statt vh, weil die Adressleiste auf dem Telefon ein- und
     ausfaehrt. */
  .mobile-nav{position:absolute; top:100%; left:0; right:0; background:var(--surface); border-bottom:1px solid var(--line); box-shadow:0 18px 40px -22px rgba(20,30,36,0.35);
    max-height:calc(100vh - 128px); max-height:calc(100dvh - 128px);
    overflow-y:auto; overscroll-behavior:contain; -webkit-overflow-scrolling:touch;}
  .mobile-nav .wrap{display:flex; flex-direction:column; padding-top:8px; padding-bottom:8px;}
  .mobile-nav a{font-size:0.95rem; color:var(--ink); text-decoration:none; padding:14px 0; border-bottom:1px solid var(--line);}
  .mobile-nav .wrap > a:last-child{border-bottom:none;}
  .mobile-nav .sublink{padding-left:16px; font-size:0.88rem; color:var(--ink-muted);}
  /* Hauptpunkt mit Aufklapper. Der Name traegt weiter zur Bereichsseite, der
     Pfeil daneben oeffnet die Unterpunkte - beides getrennt, damit der Bereich
     selbst erreichbar bleibt. Die Trennlinie wandert dabei vom Verweis auf die
     Zeile, sonst endete sie vor dem Pfeil. */
  .mobile-nav .mobile-zeile{display:flex; align-items:center; border-bottom:1px solid var(--line);}
  .mobile-nav .mobile-zeile > a{flex:1 1 auto; border-bottom:none;}
  /* 16 + 12 + 16 = 44px breit, und align-self:stretch gibt ihm die volle
     Zeilenhoehe von 52px - die uebliche Mindestgroesse fuer eine Tippflaeche
     auf dem Telefon ist 44 mal 44.

     Der Pfeil steht MITTIG (21.09.2026, auf deinen Wunsch). Bis dahin klebte
     er rechts (22px links, 10px rechts) - richtig, solange er nur ein Zeichen
     am Zeilenende war, falsch, seit der Block eine eigene sichtbare Flaeche
     ist: Was in einer Flaeche steht, gehoert in ihre Mitte. Die 44px Breite
     bleiben, die Polsterung ist nur gleichmaessig verteilt.

     Der Block ist EINGEFAERBT (21.09.2026, auf Befund des Chefarztes): Bis
     dahin stand dort nur ein blasser grauer Pfeil, und niemand konnte sehen,
     dass die Zeile zwei verschiedene Ziele hat - links der Name, der auf die
     Bereichsseite fuehrt, rechts der Pfeil, der die Unterpunkte aufklappt. Der
     Pfeil sah nach Verzierung der Zeile aus, nicht nach eigener Flaeche.

     Die Farbe steht als var(--accent-fill), NICHT als #BF0000: Im dunklen
     Modus ist der Akzent #D10000, und eine feste Farbe bliebe dort stehen.
     Im Stylesheet stehen ueberhaupt nur zwei fest geschriebene Farben, und
     das soll so bleiben. */
  .mobile-auf{flex:none; align-self:stretch; display:flex; align-items:center;
    justify-content:center; border:none; cursor:pointer; padding:0 16px;
    background:var(--accent-tint); color:var(--accent-fill);
    border-left:1px solid var(--line);
    transition:background-color 0.18s ease, color 0.18s ease;}
  .mobile-auf .chev{width:12px; height:8px; transition:transform 0.18s ease;}
  /* Offen kehrt sich der Block um: volle Akzentflaeche, weisser Pfeil. Damit
     sagt dieselbe Flaeche zweierlei - dass sie ein eigenes Ziel ist, und
     welche Unterpunkte gerade offen stehen. Der Pfeil dreht sich ohnehin. */
  .mobile-auf[aria-expanded="true"]{background:var(--accent-fill); color:#fff;}
  .mobile-auf[aria-expanded="true"] .chev{transform:rotate(180deg);}
  /* Im dunklen Modus ist der Akzent auf seinem eigenen blassen Grund nicht mehr
     zu lesen: Die Flaeche ist dort rgba(209,0,0,0.20) und mischt mit dem
     Seitengrund zu rgb(65,19,17) - ein #D10000 darauf ergibt GEMESSEN 2.80 : 1,
     unter der Schwelle von 3 : 1 fuer Bedienzeichen. Hell stimmt dasselbe Rot
     mit 5.62 : 1.

     Die vier Werte nach der Regel: hell zu 5.62, hell offen 6.53, dunkel zu
     12.99, dunkel offen 5.66.

     Das rote Feld bleibt also in beiden Modi, nur der Pfeil darauf wird hell.
     Dieselbe Lehre wie bei der Sonne im Wellenband: Farbe wirkt relativ zum
     Grund, und dasselbe Rot kann nicht auf hellem und auf dunklem Grund
     zugleich tragen. Offen braucht es die Regel nicht - dort steht der Pfeil
     weiss auf der vollen Flaeche (5.66 : 1). */
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]) .mobile-auf[aria-expanded="false"]{color:var(--ink);}
  }
  :root[data-theme="dark"] .mobile-auf[aria-expanded="false"]{color:var(--ink);}
  .mobile-unter{display:flex; flex-direction:column;}
  .mobile-nav .mobile-tel{font-family:"IBM Plex Mono",monospace; color:var(--ink-muted);}
  /* Die Gegenregel zum Umschaltpunkt oben: ab 1140px traegt die Hauptleiste
     wieder, das Feld muss weg. Die Zahl MUSS die Zahl oben plus eins sein.
     Sie stand auf 1021, als der Umschaltpunkt schon auf 1082 lag - zwischen
     1021 und 1082 Pixeln war nav.mainnav ausgeblendet und das Feld zugleich
     zwangsweise versteckt, der Menue-Knopf konnte also nichts oeffnen. */
  @media (min-width:1140px){ .mobile-nav{display:none !important;} }

  /* buttons */
  .btn{
    display:inline-flex; align-items:center; gap:8px;
    padding:12px 22px; font-size:0.92rem; font-weight:500;
    text-decoration:none; border-radius:2px; border:1px solid transparent;
    white-space:nowrap;
  }
  .btn-primary{background:var(--accent-fill); color:#fff;}
  .btn-primary:hover{background:var(--accent);}
  /* background:transparent ist nicht ueberfluessig. Bis zum 19.09.2026 stand
     hier keiner, und bei den zehn Geisterknoepfen auf <a> fiel das nie auf -
     ein <a> hat keinen eigenen Grund. Der erste Geisterknopf auf einem
     <button> (Fragebogen, "Auswertung drucken") bekam dagegen die graue
     Vorgabe des Browsers, und darauf stand im Dunkelmodus helle Schrift:
     gemessen 1,07 : 1. Ein Knopf, der aussieht wie die anderen, muss auch
     dasselbe Element sein duerfen. */
  .btn-ghost{background:transparent; border-color:var(--line); color:var(--ink);}
  .btn-ghost:hover{border-color:var(--ink-muted);}
  /* Knopf in einer Karte. Der volle Knopf ist fuer einen Seitenabschluss
     gemacht; zwoelf davon nebeneinander in den Sprechstunden-Karten wirkten
     schwer und draengten den Text an den Rand. */
  .btn-klein{padding:9px 16px; font-size:0.84rem;}
  /* In einer Karte darf die Beschriftung umbrechen. .btn setzt sonst
     white-space:nowrap, und damit bestimmt der laengste Knopf die
     Mindestbreite der Rasterspalte - bei 320 px schob "Zum
     ME/CFS-Triageformular" samt Pfeil das ganze Raster um 1,7 px ueber den
     Rand (19.09.2026, beim Nachziehen der zwoelf Pfeile entstanden).
     Ein paar Pixel Reserve am Zeichen waeren brueckig gewesen: Eine andere
     Schriftwiedergabe, und der Ueberlauf ist zurueck. Umbrechen loest es
     an der Wurzel - die Spalte misst dann ein Wort, nicht die ganze Zeile.
     Auf breiten Schirmen aendert sich nichts, dort ist Platz. */
  .fach-anmeldung .btn{white-space:normal;}

  /* hero
     Die zweispaltige Aufteilung (.hero-grid) traegt seit dem 17.09.2026 das
     Band der Startseite: links der Text, rechts die Zitatkarte, beide auf dem
     Foto. Die Regeln selbst sind aelter - sie lagen vom 13. bis 17.09. mit
     dem Vermerk "falls die Aufteilung zurueckkommen soll" still und wurden
     an diesem Tag zweimal gebraucht: erst fuer Text neben Foto, dann fuer
     Text und Karte auf dem Foto. Was tragfaehig gebaut ist, ueberlebt einen
     Entwurf.
     Die Farben und der Verlauf des Bandes stehen weiter unten bei
     .hero-band-hell. */
  .hero{padding:76px 0 88px; border-bottom:1px solid var(--line); overflow:hidden;}
  .hero-grid{display:grid; grid-template-columns:1.05fr 0.95fr; gap:56px; align-items:center;}
  @media (max-width:900px){ .hero-grid{grid-template-columns:1fr; gap:40px;} }
  .hero h1{font-size:clamp(2.3rem, 4.6vw, 3.6rem); line-height:1.08; letter-spacing:-0.01em;}
  /* Das Kopfband der Startseite setzt seinen Titel groesser als die
     Unterseiten - dort steht ein Rubriktitel, hier der Auftritt des Hauses. */
  .hero-start h1{font-size:clamp(2.3rem, 4.6vw, 3.6rem); line-height:1.08; letter-spacing:-0.01em; max-width:20ch;}
  .hero-lede{font-size:1.08rem; color:var(--ink-muted); max-width:46ch; margin-top:20px;}
  .hero-ctas{display:flex; gap:14px; margin-top:32px; flex-wrap:wrap;}
  /* .hero-meta - Sprechzeiten, Telefon und Adresse im Aufmacher - ist am
     13.09.2026 auf Wunsch der Klinik entfallen. Alle drei Angaben stehen in
     der Fusszeile jeder Seite und auf der Kontaktseite. Die Regeln sind mit
     entfernt worden: Sie hingen nur an dieser einen Stelle. */

  /* Die Zitatkarte sitzt auf der Wellengrafik - die Anordnung des ersten
     Aufmachers, zurueckgeholt am 15.09.2026. Sie ueberdeckt die linke untere
     Ecke; die Sonne steht bei 72 bis 80 % der Breite und bleibt frei. */
  /* .hero-art - STILLGELEGT seit dem 17.09.2026 (abends). Die Spalte trug
     nacheinander die Wellengrafik und dann ein Foto; heute liegt das Bild als
     Bandgrund hinter allem, und die Zitatkarte steht in .hero-band-zitat.
     Die Regeln bleiben stehen wie .hero-grid es von 13. bis 17.09. tat -
     genau diese Geduld hat die Aufteilung an einem Tag zweimal gerettet.
     Die Karte haengt mit negativem Rand an der Unterkante der Grafik; absolut
     gesetzt brauchte die Spalte ein eigenes Seitenverhaeltnis, und schmal
     blieb darunter Leere. */
  .hero-art{position:relative;}
  .hero-art .wellenleiste{
    width:100%; height:auto; aspect-ratio:1200/300; margin:0;
  }
  .hero-art .quote-card{margin:-26px 12% 0 0;}
  @media (max-width:900px){
    /* Schmal steht die Karte unter der Grafik statt darauf. */
    .hero-art .quote-card{margin:16px 0 0 0;}
  }
  .quote-card{
    background:var(--surface); border:1px solid var(--line);
    padding:22px 24px; box-shadow:0 18px 40px -22px rgba(20,30,36,0.35);
  }
  .quote-card p{font-family:"Fraunces", serif; font-style:italic; font-size:1.15rem; margin:0; color:var(--ink);}
  .quote-card cite{display:block; margin-top:10px; font-style:normal; font-size:0.8rem; color:var(--ink-muted);}

  /* ---- Aufmacher der Startseite ----
     Seit dem 13.09.2026 traegt die Startseite dasselbe Kopfband wie die
     uebrigen zwoelf Seiten - das Foto der Parkbruecke am Seeufer. Vorher
     stand rechts eine gezeichnete Wellengrafik als Platzhalter, weil kein
     eigenes Bildmaterial vorlag (Punkt 44).
     Was neben der Grafik stand - Lauftext, Knoepfe, Sprechzeiten und das
     Zitat des Chefarztes -, steht jetzt unter dem Band. Das Band selbst ist
     hoeher als auf den Unterseiten: Es ist der Auftritt der Startseite. */
  /* Nicht mittig ausrichten wie die Unterseiten: Auf diesem Bild liegt alles,
     was es ausmacht - der Bogen des Gelaenders, das Wasser links, die Baeume -
     in der oberen Haelfte. Mittig beschnitten zeigt das Band fast nur
     Bruecken-Planken.
     Beide Klassen im Selektor, weil .page-hero-bild weiter unten steht und
     sonst mit gleicher Spezifitaet gewinnt. */
  .page-hero-bild.hero-start{padding:98px 0 106px; background-position:center 26%;}
  .hero-fuss{padding:46px 0 62px; border-bottom:1px solid var(--line);}
  .hero-fuss-grid{display:grid; grid-template-columns:1.05fr 0.95fr; gap:56px; align-items:center;}
  .hero-fuss .hero-lede{margin-top:0;}
  @media (max-width:900px){
    .page-hero-bild.hero-start{padding:64px 0 68px;}
    .hero-fuss-grid{grid-template-columns:1fr; gap:30px;}
  }
  /* ---- Heller Aufmacher der Startseite (17.09.2026, zweite Fassung) ----

     Dasselbe Bauteil wie .page-hero-bild weiter unten - Foto als Bandgrund,
     Verlauf darueber, Text darauf -, nur mit UMGEDREHTER POLARITAET:
     dort dunkelblauer Verlauf und weisse Schrift, hier heller Verlauf und
     schwarze Schrift. Der Wunsch der Klinik lautete genau so: "heller
     Hintergrund mit schwarzem Schriftzug".

     Warum es mit diesem Foto leicht geht: Schwarze Schrift verlangt einen
     hellen Grund. Gemessen am 17.09.2026 (tools/bild-helligkeit.py) ist
     "zurisee-berge" das einzige im Bestand, das ihn selbst mitbringt - 186
     von 255 im linken Drittel, schwaechster Streifen 150, nur 7 % dunkle
     Flaeche. Die uebrigen lagen bei 95 bis 153, wo es ab etwa 170 lesbar
     wird.

     Der Verlauf ist darum SCHWACH. Er ist nicht geschaetzt, sondern
     gerechnet: Der Himmel in der oberen Bildhaelfte liegt bei 203 bis 233
     und traegt Schrift ohne jede Nachhilfe; nur unten links, wo die
     Ortschaft am Ufer steht, faellt es auf 133 bis 145. Genau diese Ecke
     hebt der Verlauf, der Rest bleibt unangetastet. Ein Vorgaengerfoto
     brauchte an derselben Stelle 0,74 Deckkraft - hier sind es 0,42, und
     das Foto bleibt durchgehend sichtbar.

     Die Vorgaenger stehen in der Notiz (Punkte 125-127), nicht hier: Ein
     Stylesheet soll sagen, was gilt, nicht was einmal galt.

     background-position mittig. Das Foto ist mit 2,77:1 fast so flach wie
     das Band selbst - es wird kaum beschnitten, und es gibt keine Ecke, die
     unbedingt stehenbleiben muesste. */
  .hero-band-hell{
    background-image:linear-gradient(90deg,
      rgba(255,255,255,0.42) 0%,
      rgba(255,255,255,0.34) 16%,
      rgba(255,255,255,0.20) 32%,
      rgba(255,255,255,0.08) 48%,
      rgba(255,255,255,0) 64%), var(--kopfbild);
    background-position:center 45%; background-size:cover; background-repeat:no-repeat;
    padding:92px 0 96px;
  }
  /* Auf dem Band gelten die HELLEN Farben in beiden Modi. Ein Foto dreht sich
     im Dunkelmodus nicht mit; wuerde die Schrift es tun, stuende sie hell auf
     hellem Grund. .page-hero-bild macht es mit #fff genauso, nur andersherum.
     Darum feste Werte und nicht var(--ink): Die Variablen kippen. */
  /* Wellengang (26.09.2026, Punkt 290): Die Leinwand liegt ueber dem
     Hintergrundfoto und unter dem Inhalt. Unsichtbar, bis hero-wasser.js das
     erste Bild gezeichnet hat - bis dahin und ohne Skript bleibt das
     CSS-Foto.
     Schmal ist das Foto ein Band in .wrap::before (siehe unten: 2:1,
     hoechstens 300 px, volle Breite, oben buendig). Die Leinwand nimmt dort
     genau diese Masse an und liegt UEBER .wrap, sonst verdeckte das Band
     sie - .wrap hat keinen Hintergrund, nur das Pseudoelement. */
  .hero-band-hell{position:relative;}
  .hero-band-hell > .wrap{position:relative; z-index:1;}
  .hero-wasser{position:absolute; inset:0; width:100%; height:100%; z-index:0;
    pointer-events:none; opacity:0; transition:opacity 0.8s ease;}
  .hero-wasser.laeuft{opacity:1;}
  @media (max-width:900px){
    .hero-wasser{inset:0 0 auto 0; height:auto; aspect-ratio:2/1; max-height:300px; z-index:2;}
  }
  .hero-band-hell h1{color:#242220;}
  .hero-band-hell .eyebrow{color:#3F3A36;}
  .hero-band-hell .hero-lede{color:#3F3A36;}
  /* Der Geisterknopf holt seine Farben aus den Variablen und wuerde im
     Dunkelmodus hell auf dem hellen Foto stehen - im ersten Versuch war er
     praktisch unsichtbar. Gefunden bei der Durchsicht am 17.09.2026. */
  .hero-band-hell .btn-ghost{
    background:rgba(255,255,255,0.86); border-color:#C9C2BD; color:#242220;
  }
  .hero-band-hell .btn-ghost:hover{background:#fff; border-color:#6E6763;}
  /* Dasselbe fuer die Zitatkarte: Sie liegt auf dem Foto, also gilt fuer sie
     das Foto und nicht das Farbschema. Dunkel gefaerbt sass im Dunkelmodus
     ein schwarzer Block neben schwarzer Schrift auf demselben hellen Grund. */
  .hero-band-hell .quote-card{
    background:#FFFFFF; border-color:#DFD9D5;
  }
  .hero-band-hell .quote-card p{color:#242220;}
  .hero-band-hell .quote-card cite{color:#6E6763;}
  /* Kein fester Umbruch im Markup: text-wrap:balance laesst den Browser die
     Zeilen selbst ausgleichen - das haelt jede Breite aus, ein festes br
     nicht. Im Band darf der Titel wieder gross werden; er trug hier schon
     einmal die Flaeche allein. */
  .hero-band-hell h1{
    font-size:clamp(2.2rem, 3.8vw, 3.1rem);
    max-width:18ch; text-wrap:balance;
  }
  /* Rechte Spalte des Bandes: Wellenleiste oben, Zitatkarte darunter.
     Die Karte haengt mit negativem Rand an der Unterkante der Leiste - die
     unterste Welle laeuft hinter ihre Oberkante, die Sonne steht bei 72 bis
     80 % der Breite und bleibt frei.
     aspect-ratio MUSS dem viewBox des SVG entsprechen (1200 x 300). Weicht
     es ab, laesst preserveAspectRatio="meet" die Grafik im Kasten schweben,
     statt ihn zu fuellen - das hat am 16.09.2026 schon einmal Zeit gekostet.
     Die Leiste liegt auf dem Foto und nicht mehr auf hellem Grund; sie
     zeichnet in var(--accent-fill), und dieses Rot traegt auf dem hellen
     Himmel wie auf dem Wasser. */
  /* Der Einleitungssatz unter dem Aufmacher (23.09.2026). Er stand vorher
     als .hero-lede auf dem Foto, vor den Bergen, und war schwer zu lesen.
     Jetzt der erste Satz der Seite auf dem Seitengrund - gross, in der
     Titelschrift und mit der Akzentlinie links, damit er als Auftakt und
     nicht als gewoehnlicher Absatz gelesen wird. Oben und unten weniger Luft
     als ein Abschnitt sonst hat. Unten stand bis zum 27.09.2026 nichts, weil
     der naechste Abschnitt auf demselben Grund lag; seit die Zusagen weiss
     sind (Wechsel der Hintergruende, Punkt 316), endete das Grau direkt an
     der letzten Zeile und die Akzentlinie wirkte abgeschnitten. */
  .startseite-einleitung{padding:64px 0;}
  .startseite-einleitung p{
    font-family:"Fraunces", Georgia, serif; font-weight:400;
    font-size:clamp(1.25rem, 2.1vw, 1.6rem); line-height:1.45;
    color:var(--ink); max-width:44ch; margin:0;
    padding-left:22px; border-left:3px solid var(--accent-fill);
    text-wrap:pretty;
  }
  @media (max-width:560px){
    .startseite-einleitung{padding:44px 0;}
    .startseite-einleitung p{padding-left:16px;}
  }
  .hero-band-zitat{display:block;}
  .hero-band-zitat .wellenleiste{
    display:block; width:100%; height:auto; aspect-ratio:1200/300; margin:0;
  }
  .hero-band-hell .quote-card{max-width:30ch; margin:-26px 12% 0 auto;}
  @media (max-width:900px){
    /* Schmal traegt das Foto keinen Text mehr: Der Titel braeuchte die ganze
       Breite und liefe in den hellen Wasserteil, wo kein Verlauf mehr steht.
       Also Band oben, Text darunter auf dem Seitengrund - dieselbe Ordnung
       wie auf dem Telefon ueberall sonst. */
    .hero-band-hell{
      background-image:none; background-color:var(--bg);
      padding:0 0 56px;
    }
    /* DIE HELLEN FARBEN GELTEN HIER NICHT MEHR (19.09.2026).
       Weiter oben stehen Titel, Rubrik, Fliesstext, Geisterknopf und
       Zitatkarte fest auf helle Werte - richtig, solange sie AUF dem Foto
       stehen, denn ein Foto dreht sich im Dunkelmodus nicht mit. Schmal
       steht nichts mehr auf dem Foto: Das Band liegt oben, der Text
       darunter auf dem Seitengrund. Im Dunkelmodus schrieb der Titel
       dadurch #242220 auf #15120F - gemessen 1,18 : 1, also praktisch
       unsichtbar; Fliesstext 1,66 und Rubrik 2,52, alle drei unter den
       4,5 : 1, ab denen Text als lesbar gilt.
       Darum hier zurueck auf die Farbmarken, die sich mitdrehen. Die Werte
       sind dieselben wie in den Grundregeln (h1, .eyebrow, .hero-lede,
       .btn-ghost, .quote-card) - sie stehen ausgeschrieben da, weil es in
       CSS kein "nimm wieder die Vorgabe" gibt.
       Kein @media (min-width:901px) um die hellen Werte herum: Zwischen
       900 und 901 liegt eine Luecke, in die gebrochene Fensterbreiten
       fallen. So greift auf jeder Breite genau eine der beiden Fassungen. */
    .hero-band-hell h1{color:var(--ink);}
    .hero-band-hell .eyebrow{color:var(--slate);}
    .hero-band-hell .hero-lede{color:var(--ink-muted);}
    .hero-band-hell .btn-ghost{
      background:transparent; border-color:var(--line); color:var(--ink);
    }
    .hero-band-hell .btn-ghost:hover{
      background:transparent; border-color:var(--ink-muted);
    }
    .hero-band-hell .quote-card{background:var(--surface); border-color:var(--line);}
    .hero-band-hell .quote-card p{color:var(--ink);}
    .hero-band-hell .quote-card cite{color:var(--ink-muted);}
    .hero-band-hell .wrap::before{
      /* Gedeckelt: Bei 774 px Breite waere das Band sonst 464 px hoch und
         schoebe den Titel unter die Falz - gemessen 1024 px Gesamthoehe.
         Mit dem Deckel bleibt es auf dem Telefon bei 2:1 und wird auf
         breiteren Schirmen nur flacher, nicht groesser. */
      /* RANDLOS. Das Band ist hier ein Pseudoelement IN .wrap, und .wrap
         traegt seitlich Innenabstand - das Foto stand dadurch schmal mit
         einem Streifen Seitengrund links und rechts, waehrend es breit die
         ganze Fensterbreite fuellt. Ein Kopfbild mit Raendern ist kein
         Kopfbild. Die negativen Aussenabstaende schieben es um genau diesen
         Innenabstand wieder heraus, die Breite nimmt ihn ausdruecklich
         wieder auf. Kein 100vw: das wuerde auf Schirmen mit fester
         Bildlaufleiste einen waagrechten Ueberlauf erzeugen, und der ist auf
         allen 316 Seiten muehsam beseitigt.

         DIE BREITE MUSS AUSGESCHRIEBEN STEHEN - mit width:auto war das Band
         zwischen etwa 560 und 900 px Fensterbreite rechts zu kurz (19.09.2026).
         Grund ist das Zusammenspiel von aspect-ratio und max-height: Greift
         der Deckel, rechnet der Browser bei automatischer Breite aus der
         gedeckelten Hoehe die Breite ZURUECK - 300 x 2 = 600 px, ganz gleich
         wie breit der Platz ist. Gemessen bei 648 px Sichtbreite: Platz 688,
         Band 600, also 88 px Seitengrund rechts. Mit ausgeschriebener Breite
         ist die Breite fest, aspect-ratio rechnet die Hoehe daraus, und
         max-height deckelt nur noch sie. Dieselbe Falle steckt ueberall, wo
         aspect-ratio und max-height zusammenkommen; im ganzen Stylesheet ist
         das die einzige Stelle - alle anderen aspect-ratio-Regeln setzen
         width:100%. */
      content:""; display:block; aspect-ratio:2/1; max-height:300px;
      width:calc(100% + var(--wrap-rand) * 2);
      margin-left:calc(var(--wrap-rand) * -1);
      margin-right:calc(var(--wrap-rand) * -1);
      background-image:var(--kopfbild); background-size:cover;
      background-position:center 45%;
      /* Kein eigener Rand: .wrap traegt hier .hero-grid, das Pseudoelement
         ist also eine Grid-Zeile - den Abstand macht schon gap:40px. Mit
         beidem klaffte eine Luecke von 74 px unter dem Bild.
         2:1 statt 5:3 seit dem Wechsel auf "zurisee-berge": Das Foto ist
         2,77:1: In ein hochformatigeres Fenster geschnitten fiele der Kahn
         am rechten Rand heraus. */
    }
    /* Kleiner als der Grenzwert der breiten Fassung: Bei 32 px passt
       "Ursachenorientiert heilen," nicht mehr in die 360 px breite Spalte
       und der Titel fiel in drei Zeilen mit einer kurzen Mitte ("heilen,").
       Ab etwa 27 px traegt die erste Zeile beide Woerter. */
    .hero-band-hell h1{font-size:clamp(1.68rem, 6.6vw, 2.5rem); max-width:20ch;}
    /* Schmal steht die Karte unter der Leiste statt darauf - der negative
       Rand wird zu einem Abstand, und die Karte nimmt die ganze Breite. */
    .hero-band-zitat{margin-top:4px;}
    .hero-band-hell .quote-card{max-width:none; margin:16px 0 0 0;}
  }

  section{padding:80px 0;}
  section.alt{background:var(--surface); border-top:1px solid var(--line); border-bottom:1px solid var(--line);}
  /* Rubrik und Titel oben, der Einleitungssatz IMMER darunter (20.09.2026,
     Punkt 194). Vorher war der Kopf eine Zeile mit space-between: Breit
     stand der Satz RECHTS neben dem Titel, schmal darunter - gemeldet vom
     Chefarzt bei "Sind Sie bei uns richtig?". Eine Anordnung, die je nach
     Fensterbreite eine andere ist, liest sich zweimal verschieden; und
     Ruhe war hier ausdruecklich das Ziel. */
  .section-head{margin-bottom:44px;}
  .section-head h2{font-size:clamp(1.6rem, 2.6vw, 2.1rem);}
  .section-intro{max-width:58ch; color:var(--ink-muted); margin-top:14px;}
  /* Steht ein Abschnitt nur aus Rubrik, Titel und einem Satz - wie "Der
     Unterschied", seit die Pyramiden weg sind -, haengt der Abstand des
     Kopfes sonst als Leerraum unter dem letzten Satz. */
  .section-head:last-child{margin-bottom:0;}
  /* about */
  .about-grid{display:grid; grid-template-columns:1.1fr 0.9fr; gap:64px;}
  @media (max-width:900px){ .about-grid{grid-template-columns:1fr; gap:44px;} }
  .pull{font-family:"Fraunces", serif; font-style:italic; font-size:1.5rem; line-height:1.35; color:var(--ink); margin:26px 0;}
  .pull cite{display:block; font-style:normal; font-family:"IBM Plex Mono",monospace; font-size:0.74rem; letter-spacing:0.04em; color:var(--ink-muted); margin-top:10px;}
  .values{display:grid; grid-template-columns:1fr 1fr; gap:18px 28px; margin-top:30px; list-style:none; padding:0;}
  .values li{font-size:0.86rem; padding-left:16px; border-left:1px solid var(--accent-fill); color:var(--ink-muted);}

  /* ---- Startseite: Die Bedeutung des Logos (26.09.2026) ----
     Links das Logo gross (dasselbe Symbol wie in der Kopfzeile, darum
     faerbt sich der Schriftzug mit currentColor), rechts der Text. Das Logo
     bleibt beim Scrollen stehen, solange der lange Text daneben laeuft. */
  .logo-erklaerung{display:grid; grid-template-columns:0.8fr 1.2fr; gap:64px; align-items:start;}
  @media (max-width:900px){ .logo-erklaerung{grid-template-columns:1fr; gap:36px;} }
  .logo-erklaerung-bild{position:sticky; top:120px; color:var(--ink);}
  @media (max-width:900px){ .logo-erklaerung-bild{position:static; max-width:340px;} }
  .logo-gross{display:block; width:100%; height:auto;}
  .logo-drei{list-style:none; padding:0; margin:0 0 18px; display:grid; gap:12px;}
  .logo-drei li{padding-left:16px; border-left:1px solid var(--accent-fill); color:var(--ink-muted);}
  .logo-drei strong{color:var(--ink); font-weight:600;}
  .logo-claim{font-family:"Fraunces", serif; font-size:1.25rem; color:var(--ink); margin:8px 0 0;}

  .team-photo{width:100%; border:1px solid var(--line); display:block; object-fit:cover; aspect-ratio:4/3;}
  /* Der Ausschnitt auf der Startseite (23.09.2026): Patientin und die
     Aerztin im Profil, ohne den leeren Rand des Originals. Auf 420 px
     gedeckelt, auf Wunsch des Chefarztes.
     height:auto ist noetig: Sonst setzt sich das height-Attribut gegen
     aspect-ratio durch, und object-fit schneidet seitlich ab. */
  .team-photo-ausschnitt{aspect-ratio:6/5; max-width:420px; height:auto;}   /* Punkt 301 */
  .team-photo-ausschnitt + .team-photo-cap{max-width:420px;}
  .team-photo-cap{font-size:0.76rem; color:var(--ink-muted); margin-top:8px;}

  /* contact */
  .contact-grid{display:grid; grid-template-columns:1fr 1fr; gap:56px;}
  @media (max-width:860px){ .contact-grid{grid-template-columns:1fr; gap:40px;} }
  /* minmax(0,auto) statt auto: Eine auto-Spalte wird so breit wie ihr
     laengstes Wort und laesst sich nicht stauchen. Im Impressum steht
     "Unternehmens-Identifikationsnummer" - damit war die Liste bei 320 px
     7 px breiter als die Seite. Das Sicherheitsnetz overflow-wrap:break-word
     half nicht: Es bricht zwar, verkleinert aber die Mindestbreite nicht.
     Mit minmax(0,auto) darf die Spalte schrumpfen, und hyphens:auto trennt
     dann nach den Regeln der Sprache statt mitten im Wort. */
  dl.contactlist{margin:0; display:grid; grid-template-columns:minmax(0,auto) 1fr; gap:10px 20px;}
  dl.contactlist dt{font-family:"IBM Plex Mono",monospace; font-size:0.72rem; text-transform:uppercase; letter-spacing:0.06em; color:var(--slate); align-self:start; padding-top:2px; hyphens:auto;}
  dl.contactlist dd{margin:0; font-size:0.94rem;}
  dl.contactlist a{text-decoration:underline; text-decoration-color:var(--line); text-underline-offset:3px;}
  dl.contactlist a:hover{text-decoration-color:var(--accent-fill);}

  .hours-table{width:100%; border-collapse:collapse; margin-top:8px;}
  .hours-table td{padding:6px 0; font-size:0.9rem; border-bottom:1px solid var(--line);}
  .hours-table td:first-child{color:var(--ink-muted);}
  .hours-table td:last-child{text-align:right; font-family:"IBM Plex Mono",monospace;}

  .transit{margin-top:26px; padding-top:22px; border-top:1px solid var(--line);}
  .transit ul{list-style:none; padding:0; margin:14px 0 0; display:flex; flex-direction:column; gap:10px;}
  .transit li{font-size:0.86rem; color:var(--ink-muted); display:flex; gap:10px;}
  .transit li b{color:var(--ink); font-weight:500; min-width:64px;}

  footer{border-top:1px solid var(--line); padding:56px 0 32px;}
  /* Vier Spalten: Marke, Bereiche, haeufig Gesuchtes, Kontakt. Feste
     Mindestbreite statt fester Spaltenzahl, damit die Zeile von selbst
     umbricht und keine eigenen Umschaltpunkte braucht. */
  .footcols{
    display:grid; gap:36px 40px; align-items:start;
    grid-template-columns:1.4fr repeat(3, minmax(150px, 1fr));
  }
  @media (max-width:900px){ .footcols{grid-template-columns:repeat(2, minmax(150px, 1fr));} }
  @media (max-width:520px){ .footcols{grid-template-columns:1fr; gap:28px;} }
  .footbrand .brand{margin-bottom:14px;}
  .footclaim{font-size:0.86rem; color:var(--ink-muted); max-width:32ch; margin:0 0 20px;}
  .footcol .eyebrow{display:block; margin-bottom:14px;}
  .footcol ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:9px;}
  .footcol a{font-size:0.86rem; color:var(--ink-muted); text-decoration:none;}
  .footcol a:hover{color:var(--accent);}
  .footcol address{font-style:normal; font-size:0.86rem; color:var(--ink-muted); line-height:1.8;}
  .footcol address a{display:inline;}
  .foothours{font-size:0.8rem; color:var(--slate); margin:14px 0 0;}
  /* Schlusszeile: Rechtsform und die rechtlichen Verweise */
  .footbottom{
    display:flex; justify-content:space-between; align-items:center; gap:16px; flex-wrap:wrap;
    margin-top:44px; padding-top:22px; border-top:1px solid var(--line);
  }
  .footmeta{font-size:0.78rem; color:var(--ink-muted); font-family:"IBM Plex Mono",monospace; margin:0;}
  .foottop{font-size:0.78rem; color:var(--ink-muted); text-decoration:none; border-bottom:1px solid var(--line);}
  .foottop:hover{color:var(--ink); border-color:var(--accent-fill);}

/* ---- Team- und Unterseiten ---- */
  /* team page */
  .team-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:28px; margin-top:8px;}
  @media (max-width:760px){ .team-grid{grid-template-columns:1fr;} }
  .member-card{background:var(--surface); border:1px solid var(--line); padding:28px;}
  .member-card .name{font-family:"Fraunces", serif; font-size:1.25rem; margin-bottom:2px;}
  /* Kopf der Personenkarte: Portrait links, Name und Titel rechts daneben.
     Gestapelt und 72 px gross stand das Bild allein auf einer Zeile von rund
     520 px Breite und wirkte wie ein Abzeichen statt wie das Bild eines
     Menschen. Vgl. .admin-card, das dieselbe Anordnung kleiner fuehrt. */
  /* Oben ausgerichtet, nicht mittig (19.09.2026). Mittig haengt die Hoehe
     des Bildes am Textblock daneben: Sobald die Qualifikationszeile eine
     Zeile mehr bricht, wandert das Portrait um eine halbe Zeilenhoehe.
     Zwischen 1200 und 761 px waren das bis zu 21 px, und in einer Reihe
     aus zwei Karten standen die beiden Gesichter verschieden hoch. */
  .member-head{display:flex; align-items:flex-start; gap:22px; margin-bottom:18px;}
  .member-photo{width:120px; height:120px; border-radius:50%; object-fit:cover; display:block; border:1px solid var(--line); flex-shrink:0;}
  /* Elf der zwoelf Fachpersonen liefert sgk.swiss schon schwarz-weiss, die
     Administration und Angel Reve Robles dagegen farbig. Statt die Dateien
     umzurechnen wird hier entfaerbt: verlustfrei, umkehrbar, und ein spaeter
     nachgeladenes Farbbild faellt nicht wieder aus der Reihe.

     HIER STEHEN ALLE PORTRAITS DER WEBSITE - eine Stelle, nicht mehrere.
     Am 22.09.2026 kam .fach-card .portrait dazu (die Ansprechpersonen auf
     /internationale-gaeste, Entscheid des Chefarztes "alle drei grau").
     Es war schon fast eine zweite Regel daneben entstanden, weil ich die
     Dateien gemessen hatte statt der Anzeige: Die beiden Teamfotos SIND
     farbig, angezeigt wurden sie auch vorher grau. Wer kuenftig Portraits
     einfaerbt oder entfaerbt, sucht zuerst hier. */
  .member-photo, .admin-card img, .inhalt-bild.portraet img,
  .fach-card .portrait{filter:grayscale(1);}
  /* Den Abstand nach unten traegt jetzt .member-head, nicht mehr die fmh-Zeile */
  .member-card .member-head .fmh{margin-bottom:0;}
  /* Auf schmalen Bildschirmen wuerde ein 120-px-Kreis den Namen erdruecken */
  @media (max-width:520px){ .member-head{gap:16px;} .member-photo{width:88px; height:88px;} }
  /* Schmal steht das Foto UEBER dem Namen, nicht daneben (19.09.2026).
     Gemessen bei 310 px Sichtbreite: Der Textblock ist dort 278 px hoch, das
     Foto 88 - bei align-items:center klaffte darueber eine leere Flaeche von
     95 px, und die Textspalte blieb mit 129 px so schmal, dass die
     Qualifikationen in neun Zeilen brachen. Uebereinander sind es 213 px
     Textbreite, fuenf Zeilen, und die Karte wird 20 px kuerzer.
     Die Grenze liegt bei 600 px wie bei den uebrigen Kartenrastern. */
  @media (max-width:600px){
    .member-head{flex-direction:column; align-items:flex-start;}
  }
  .member-card .role{color:var(--accent); font-size:0.88rem; font-weight:500; margin-bottom:6px;}
  .member-card .fmh{font-family:"IBM Plex Mono", monospace; font-size:0.72rem; color:var(--slate); margin-bottom:14px;}
  .member-card p{color:var(--ink-muted); font-size:0.92rem; margin:0;}
  .team-cta{background:var(--surface); border:1px solid var(--accent-fill); padding:48px; text-align:center; margin-top:64px;}
  .team-cta p{color:var(--ink-muted); max-width:52ch; margin:14px auto 26px;}
  .team-subhead{margin:0 0 24px; padding-top:56px;}
  .team-subhead:first-child{padding-top:0;}
  /* Gruppentitel: h2 auf Klinik- und Info-Seite, h3 auf der Teamseite unter deren h2 */
  .team-subhead h2, .team-subhead h3{font-family:"Fraunces", serif; font-size:1.3rem; margin-bottom:6px;}
  .team-subhead p{color:var(--ink-muted); font-size:0.9rem; max-width:60ch; margin:0;}
  .member-card .quote{font-family:"Fraunces", serif; font-style:italic; color:var(--ink); font-size:0.95rem; margin:0;}
  .admin-roster{margin-top:8px;}
  .admin-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:18px; margin-top:8px;}
  @media (max-width:900px){ .admin-grid{grid-template-columns:repeat(2,1fr);} }
  @media (max-width:560px){ .admin-grid{grid-template-columns:1fr;} }
  .admin-card{background:var(--surface); border:1px solid var(--line); padding:18px; display:flex; align-items:flex-start; gap:18px;}
  /* Mitgewachsen mit dem Portrait der Personenkarte (Punkt 40). Kleiner als
     dort, weil die Karte nur Name und Funktion traegt und zu dritt in einer
     Reihe steht - aber gross genug, um ein Gesicht zu erkennen. */
  .admin-card img{width:76px; height:76px; border-radius:50%; object-fit:cover; flex-shrink:0; border:1px solid var(--line); display:block;}
  .admin-card .name{font-size:0.9rem; font-weight:500;}
  .admin-card .role{font-size:0.76rem; color:var(--ink-muted); margin-top:2px;}

/* ---- "Sind Sie bei uns richtig?" auf der Startseite ---- */
  /* Zwei Listen nebeneinander statt Kacheln mit Icons: dieselbe Formensprache
     wie der Leistungsabschnitt - Haarlinie, Name, Erlaeuterung. */
  .passung-listen{display:grid; grid-template-columns:1fr 1fr; gap:64px;}
  @media (max-width:880px){ .passung-listen{grid-template-columns:1fr; gap:48px;} }
  .passung-liste .eyebrow{display:block; margin-bottom:18px;}
  .pz{border-top:1px solid var(--line); padding:16px 0;}
  .pz:last-child{border-bottom:1px solid var(--line);}
  .pz-name{font-size:0.98rem; font-weight:500;}
  .pz-desc{font-size:0.84rem; color:var(--ink-muted); margin-top:4px;}
  /* Die zweite Liste tritt zurueck - sie zaehlt auf, was hier nicht hingehoert. */
  .passung-liste-nein .pz-name{color:var(--ink-muted); font-weight:400;}

  /* Die Akademie und die Zahlen vor dem Kontakt (20.09.2026, Punkte 196/197).
     Die Akademie steht oben und allein: Sie ist ein Angebot und keine Zahl -
     in der Reihe der Zahlen waere sie eine Zahl, die keine ist.

     Bis Punkt 198 fuehrte sie hinaus zu health.sgk.swiss und trug darum den
     schraegen Pfeil. Seit dem Nachbau liegt sie auf dieser Website, und der
     Pfeil zeigt wieder geradeaus. */
  .akademie{
    display:block; text-decoration:none; color:inherit;
    border-top:1px solid var(--line); border-bottom:1px solid var(--line);
    padding:18px 0; margin-bottom:56px;
  }
  .akademie-name{
    display:block; font-family:"Fraunces", serif; font-size:1.9rem;
    line-height:1.1;
  }
  .akademie-desc{display:block; color:var(--ink-muted); font-size:0.88rem; margin-top:4px; max-width:48ch;}
  /* Der Pfeil haengt am letzten Wort, damit er nicht allein umbricht (Punkt 195). */
  .akademie-nowrap{white-space:nowrap;}
  .akademie-nowrap::after{
    content:""; display:inline-block; width:0.62em; height:0.62em;
    margin-left:0.3em;
    background-color:var(--accent);
    -webkit-mask:var(--pfeil-vor) no-repeat center / contain;
            mask:var(--pfeil-vor) no-repeat center / contain;
    transition:transform 0.15s ease;
  }
  .akademie:hover .akademie-nowrap::after{transform:translateX(0.22em);}

  /* "Die SGK in Zahlen": Haarlinien wie die Zusagen und die Rubriken - drei
     Aufzaehlungen auf einer Seite sollen dieselbe Sprache sprechen. Die Zahl
     ist gross, aber nicht laut: Fraunces wie die Ueberschriften, in der
     Textfarbe und nicht in Rot. Rot traegt auf dieser Website die Handlung
     (Knopf, Verweis), nicht die Behauptung. */
  .belege-titel{margin:0 0 28px;}
  .belege-liste{display:grid; grid-template-columns:1fr; gap:0;}
  .beleg{
    display:block; text-decoration:none; color:inherit;
    border-top:1px solid var(--line); padding:18px 0;
  }
  .belege-liste .beleg:last-child{border-bottom:1px solid var(--line);}
  .beleg-zahl{
    display:block; font-family:"Fraunces", serif; font-size:1.9rem;
    line-height:1.1;
  }
  .beleg-desc{display:block; color:var(--ink-muted); font-size:0.88rem; margin-top:4px; max-width:30ch;}
  /* Der Pfeil haengt am letzten Wort, damit er nicht allein umbricht - wie
     bei den Rubriken (Punkt 195). Die Patientenzahl traegt keinen: Sie fuehrt
     nirgendwohin, weil es dazu nichts nachzulesen gibt. */
  .beleg-nowrap{white-space:nowrap;}
  .beleg-nowrap::after{
    content:""; display:inline-block; width:0.62em; height:0.62em;
    margin-left:0.3em;
    background-color:var(--accent);
    -webkit-mask:var(--pfeil-vor) no-repeat center / contain;
            mask:var(--pfeil-vor) no-repeat center / contain;
    transition:transform 0.15s ease;
  }
  .beleg:hover .beleg-nowrap::after{transform:translateX(0.22em);}
  @media (min-width:821px){
    .belege-liste{grid-template-columns:repeat(4,1fr); gap:0 36px;}
    .beleg{border-bottom:1px solid var(--line);}
    /* Seit Punkt 297 sieben Zahlen, also zwei Reihen: Die zweite Reihe
       braucht keine eigene obere Linie, sonst stuenden zwei Haarlinien
       aufeinander. */
    .belege-liste .beleg:nth-child(n+5){border-top:0;}
  }

  /* Die drei Rubriken der Leistungen (20.09.2026, Punkt 194). Kein Kasten,
     keine Flaeche - dieselbe Haarlinie wie bei den Zusagen und bei "Sind Sie
     bei uns richtig?". Die ganze Zeile ist der Verweis; ein zweiter Verweis
     darin waere ein Verweis im Verweis (Punkt 182). */
  .rubriken{display:grid; grid-template-columns:1fr; gap:0;}
  .rubrik{
    display:block; text-decoration:none; color:inherit;
    border-top:1px solid var(--line); padding:20px 0;
  }
  .rubriken .rubrik:last-child{border-bottom:1px solid var(--line);}
  /* KEIN inline-flex fuer den Namen (20.09.2026): Der Text ist dann EIN
     Flex-Element, und bricht er um, ist dessen Breite die der laengsten
     Zeile - der Pfeil stand weit hinter dem letzten Wort. Gemeldet vom
     Chefarzt bei "Grundversorgung & Diagnostik". Als inline-block hinter
     dem Text laeuft er mit und schliesst an das letzte Wort an. */
  .rubrik-name{font-family:"Fraunces", serif; font-size:1.15rem;}
  /* Letztes Wort und Pfeil bleiben zusammen. */
  .rubrik-letztes{white-space:nowrap;}
  .rubrik-letztes::after{
    content:""; display:inline-block; width:0.62em; height:0.62em;
    margin-left:0.3em;
    background-color:var(--accent);
    -webkit-mask:var(--pfeil-vor) no-repeat center / contain;
            mask:var(--pfeil-vor) no-repeat center / contain;
    transition:transform 0.15s ease;
  }
  .rubrik:hover .rubrik-letztes::after{transform:translateX(0.22em);}
  .rubrik-desc{display:block; color:var(--ink-muted); font-size:0.92rem; margin-top:4px; max-width:56ch;}
  @media (min-width:821px){
    .rubriken{grid-template-columns:repeat(3,1fr); gap:0 48px;}
    .rubrik{border-bottom:1px solid var(--line);}
  }
  /* Seit dem 25.09.2026 stehen hier statt der drei Rubriken die elf
     Eintraege des Angebots, nur mit Namen - also mehrere Reihen. Jede Zeile
     traegt nur noch die Linie UNTER sich, die erste Reihe die Linie des
     Rasters darueber; sonst stuenden zwischen den Reihen zwei Linien. */
  .rubriken:has(.rubrik-kurz){border-top:1px solid var(--line);}
  .rubrik-kurz{border-top:0; border-bottom:1px solid var(--line); padding:14px 0;}
  /* Die Spezial-Sprechstunden nach der alphabetischen Liste auf einer eigenen
     Zeile (25.09.2026): Sie sind kein Fachbereich, sondern führen auf die
     Sprechstundenseite. */
  .rubrik-eigene-zeile{grid-column:1 / -1;}

/* ---- Die drei Zusagen unter dem Aufmacher (20.09.2026, Punkt 192) ---- */
  /* Dieselben Haarlinien wie bei "Sind Sie bei uns richtig?" - das ist die
     Sprache, die die Startseite fuer Aufzaehlungen schon hat (Punkt 52). Kein
     Rahmen, keine Flaeche, kein Symbol: Zurueckhaltung ist hier das Mittel,
     und eine Kachel mit Icon wuerde anpreisen statt zu sagen. */
  .zusagen .eyebrow{display:block;}
  .zusagen h2{margin:6px 0 28px;}
  /* Schmal zuerst, breit in EINER Medienabfrage - nicht max-width hier und
     min-width dort. Gemessen am 20.09.2026: Bei einer Pixeldichte von
     1,875 ist innerWidth 820, die Abfrage (max-width:820px) aber FALSCH -
     zwischen den beiden Regeln klaffte eine Luecke von unter einem Pixel,
     und darin stand die dreispaltige Reihe ohne ihre untere Linie.
     Dieselbe Falle wie beim Aufmachertext im Dunkelmodus (Punkt 161). */
  .zusagen-liste{display:grid; grid-template-columns:1fr; gap:0;}
  .zusage{border-top:1px solid var(--line); padding:18px 0;}
  .zusagen-liste .zusage:last-child{border-bottom:1px solid var(--line);}
  @media (min-width:821px){
    .zusagen-liste{grid-template-columns:repeat(3,1fr); gap:0 48px;}
    .zusage{border-bottom:1px solid var(--line);}
  }
  /* Die drei Icons (25.09.2026, Punkt 254): flaechig in zwei Rottoenen.
     Die Klassen stehen im SVG in public/index.php. */
  .zusage-icon{display:block; width:56px; height:56px; margin:2px 0 14px;}
  .zusage-icon .d{fill:var(--accent-fill);}
  .zusage-icon .h{fill:var(--accent-fill); fill-opacity:.28;}
  .zusage-icon .s{fill:none; stroke:var(--accent-fill); stroke-width:1.8; stroke-linecap:round;}
  .zusage-icon .w{fill:#fff;}
  /* Auf dunklem Grund wird das helle Rot mit 28 % zu trübem Dunkelrot und
     verschwindet neben dem kräftigen. Dort ein hellerer Ton mit mehr
     Deckkraft - Farbe wirkt relativ zum Grund, wie beim Wellenband. */
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]) .zusage-icon .h{fill:#FF8080; fill-opacity:.45;}
  }
  :root[data-theme="dark"] .zusage-icon .h{fill:#FF8080; fill-opacity:.45;}
  .zusage-name{font-size:1rem; font-weight:500; margin:0;}
  .zusage-desc{font-size:0.88rem; color:var(--ink-muted); margin:6px 0 0; max-width:34ch;}

/* ---- Fachbereiche-Seite ---- */
  .fach-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:24px; margin-top:8px;}
  @media (max-width:900px){ .fach-grid{grid-template-columns:repeat(2,1fr);} }
  @media (max-width:600px){ .fach-grid{grid-template-columns:1fr;} }
  .fach-card{background:var(--surface); border:1px solid var(--line); padding:24px; display:flex; flex-direction:column; gap:8px;}
  /* h2 ODER h3: Auf den Fachbereichen stehen die Karten unter einer
     Gruppenueberschrift (h2) und sind darum h3; auf den Spezial-
     Sprechstunden stehen sie direkt unter der h1 und sind h2. Dieselbe
     Karte, dieselbe Gestaltung - die Ebene richtet sich nach dem Ort,
     nicht nach dem Aussehen. */
  .fach-card :is(h2,h3){font-family:"Fraunces", serif; font-size:1.1rem; margin:0;}
  /* Die Sprachenzeile auf den Karten der Ansprechpersonen (21.09.2026,
     /internationale-gaeste). Leiser als der Name darueber: Sie ist die
     Angabe, nach der jemand sucht, aber nicht das, was die Karte benennt. */
  .fach-card .sprachen{font-size:0.88rem; color:var(--ink-muted); margin:0;}
  /* Das Portrait auf derselben Karte (22.09.2026). Rund und 76px wie auf der
     Teamseite - dieselbe Person, dieselbe Groesse. Es steht OBEN und nicht
     links: Die Karte traegt drei Zeilen (Herkunft, Name, Sprachen), und
     daneben blieben fuer sie keine 200px.

     Entfaerbt wird es mit allen uebrigen Portraits der Website; die Regel
     dazu steht bei .member-photo und nicht hier. */
  .fach-card .portrait{
    width:76px; height:76px; border-radius:50%; object-fit:cover;
    border:1px solid var(--line); display:block; margin-bottom:4px;
  }
  .fach-card.has-photo{padding:0; gap:0;}
  /* height:auto ist noetig, sonst gewinnt das height-Attribut des img gegen aspect-ratio */
  .fach-photo{width:100%; height:auto; aspect-ratio:3/2; object-fit:cover; display:block; border-bottom:1px solid var(--line);}
  .fach-body{padding:24px; display:flex; flex-direction:column; gap:8px;}
  .fach-card:not(.has-photo) .fach-body{padding:0;}
  .fach-icon{width:52px; height:auto; display:block; margin-bottom:4px;}
  .fach-link{margin:4px 0 0; font-size:0.86rem;}
  /* Der Anmeldeknopf einer Sprechstunde. Er steht ueber dem Aufklapper: Als
     Textzeile darunter war er nicht zu finden - bei geoeffnetem Aufklapper
     rutschte er weit nach unten, und neben "Mehr erfahren" ging er unter.
     Die Anmeldung ist das Ziel der Karte, "Mehr erfahren" nur der Weg dahin. */
  .fach-anmeldung{margin:14px 0 0;}
/* ---- Aufklapper in der Karte ---- */
  .fach-more{margin-top:4px;}
  .fach-more > summary{
    cursor:pointer; font-size:0.86rem; color:var(--accent);
    list-style:none; display:inline-flex; align-items:center; gap:8px;
    /* Halbfett wie die Weiter-Links (27.09.2026, Punkt 308, Chefarzt: "Die
       wichtigsten Indikationen ... auch nicht halbfett"). Die FAQ-Fragen
       setzen ihr eigenes Gewicht, siehe .faq > summary. */
    font-weight:600;
  }
  .fach-more > summary::-webkit-details-marker{display:none;}
  .fach-more > summary::after{content:"+"; font-family:"IBM Plex Mono", monospace; font-size:0.95rem;}
  .fach-more[open] > summary::after{content:"\2013";}
  .fach-more > summary:hover{text-decoration:underline;}
  .member-card .fach-more{margin-top:14px;}
  .fach-more .prose{margin-top:14px;}
  .fach-more .prose strong{color:var(--ink); font-weight:500;}
  /* Unabhaengig von der Ebene: Seit dem 17.09.2026 setzt mit_stufen() die
     Ueberschriften der Aufklapper je nach Gliederung der Quelle auf h4 bis h6
     (die Karte selbst ist eine h3). Die kleine Versalzeile ist hier aber eine
     Gestaltungsentscheidung fuer ALLE Zwischentitel im Aufklapper, nicht fuer
     eine bestimmte Stufe. */
  .fach-more .prose :is(h2,h3,h4,h5,h6){font-size:0.82rem; letter-spacing:0.04em; text-transform:uppercase;
    color:var(--slate); font-family:"IBM Plex Mono", monospace; font-weight:500; margin:18px 0 6px;}
  .fach-more .prose :is(h2,h3,h4,h5,h6):first-child{margin-top:0;}
  .fach-more .prose ul{margin:0 0 12px; padding-left:18px; color:var(--ink-muted); font-size:0.88rem;}
  .fach-more .prose li{margin-bottom:4px;}
  /* Die Indikationen auf der Startseite (25.09.2026): zwei lange Listen im
     Abschnitt "Sind Sie bei uns richtig?" - auf breiten Schirmen zweispaltig,
     damit der offene Aufklapper nicht sechzig Zeilen tief wird. */
  .indikationen{margin-top:28px;}
  /* Die Eintraege mit MediWiki-Artikel (Punkt 309): halbfett mit Pfeil wie
     .weiter-link - Verweise auf einen eigenen Artikel, keine Stelle im
     Fliesstext. */
  .indikationen .prose li a.verweis{
    color:var(--accent); font-weight:600; text-decoration:none;
  }
  .indikationen .prose li a.verweis::after{
    content:""; display:inline-block; vertical-align:-0.1em;
    width:0.85em; height:0.85em; margin-left:0.35em;
    background-color:currentColor;
    -webkit-mask:var(--pfeil-vor) no-repeat center / contain;
            mask:var(--pfeil-vor) no-repeat center / contain;
    transition:transform 0.15s ease;
  }
  .indikationen .prose li a.verweis:hover::after{transform:translateX(0.22em);}
  .indikationen .prose{max-width:none;}
  @media (min-width: 720px){
    .indikationen .prose ul{columns:2; column-gap:40px;}
    .indikationen .prose li{break-inside:avoid;}
  }
  .fach-more-sub{margin:14px 0;}
  /* Die FAQ der Angebotsseiten (25.09.2026, faq_der_quelle()): Fragen als
     Zeilen mit Haarlinie, so breit wie der Fliesstext darueber. Die Frage ist
     Lesetext, kein "Mehr erfahren" - darum volle Groesse und Tintenfarbe,
     das Plus rechts in der Akzentfarbe. */
  .wiki-artikel > details.faq{max-width:74ch; margin:0; padding:14px 0; border-top:1px solid var(--line);}
  .wiki-artikel > details.faq:has(+ :not(details.faq)),
  .wiki-artikel > details.faq:last-child{border-bottom:1px solid var(--line); margin-bottom:28px;}
  .faq > summary{display:flex; justify-content:space-between; gap:18px; width:100%;
    font-size:1rem; font-weight:500; color:var(--ink);}
  .faq > summary::after{color:var(--accent); flex:none;}
  .faq > summary:hover{text-decoration:none; color:var(--accent);}
  .faq .prose p{margin:0 0 12px;}
  .fach-more-sub > summary{font-size:0.82rem;}
  /* Die Medientabelle der Personenkarte (19.09.2026). Sie ist in der Quelle
     eine Tabelle mit zwei Spalten und Jahresbaendern quer darueber; als Liste
     uebernommen standen Titel und Medium abwechselnd untereinander.
     Sie nimmt das Tabellenkleid der Wissensseiten (.info-tabelle) und setzt
     nur das Jahresband und den schmalen Fall obendrauf. */
  .profil-tabelle{font-size:0.8rem;}
  .profil-tabelle tr.jahr th{
    font-family:"Fraunces", serif; font-size:0.95rem; color:var(--ink);
    padding-top:16px; border-bottom:1px solid var(--ink);
  }
  .profil-tabelle tbody tr:first-child th{padding-top:0;}
  /* Schmal stapeln statt quetschen: Bei 320 px blieben der zweiten Spalte
     rund 120 px, und "Verlag für Wissenschaft und Medizin GmbH" brach in
     sieben Zeilen. Untereinander steht das Medium als zweite Zeile unter dem
     Titel - dieselbe Ueberlegung wie bei den Teamkarten (Punkt 168). */
  @media (max-width:600px){
    .profil-tabelle, .profil-tabelle tbody, .profil-tabelle tr, .profil-tabelle td{display:block; width:auto;}
    .profil-tabelle thead{display:none;}
    .profil-tabelle tbody tr{border-bottom:1px solid var(--line); padding:7px 0;}
    .profil-tabelle tbody tr.jahr{border-bottom:0; padding-bottom:0;}
    .profil-tabelle td{border:0; padding:0;}
    .profil-tabelle td:last-child{font-size:0.94em;}
    .profil-tabelle tr.jahr th{display:block; padding-top:14px;}
  }
  .fach-more .prose p{color:var(--ink-muted); font-size:0.88rem; margin:0 0 12px;}
  .fach-more .prose p:last-child{margin-bottom:0;}
  .fach-card .lead{font-size:0.92rem; margin:0;}
  .fach-card .detail{color:var(--ink-muted); font-size:0.88rem; margin:0;}
  .team-cta .btn + .btn{margin-left:12px;}

/* ---- Kontaktseite ---- */
  .page-hero{padding:56px 0 40px; border-bottom:1px solid var(--line);}
  .page-hero h1{font-size:clamp(2rem, 4vw, 3rem); line-height:1.1;}
  .page-hero p{color:var(--ink-muted); max-width:60ch; margin-top:18px; font-size:1.05rem;}

/* ---- aktiver Navigationspunkt (frueher als Inline-Style pro Seite) ---- */
  nav.mainnav a.is-active{color:var(--accent); border-bottom-color:var(--accent-fill);}
  .mobile-nav a.is-active{color:var(--ink);}



  /* ---- Kopfbild der Unterseiten ----
     Vorbild sgk.swiss: ein flaches Band, in dem Rubrik und Titel weiss auf der
     abgedunkelten linken Bildhaelfte stehen. Die Bilder bringen diese Abdunklung
     selbst mit; der Verlauf unten fuehrt sie nur etwas weiter nach rechts. Der
     Einleitungstext steht darunter in .page-intro auf normalem Grund. */
  .page-hero-bild{
    /* Der Verlauf zieht die Abdunklung der Bilder etwas weiter nach rechts,
       sonst laeuft eine zweite Titelzeile in den hellen Bildteil. */
    background-image:linear-gradient(90deg, rgba(38,54,80,0.88) 0%, rgba(38,54,80,0.72) 34%, rgba(38,54,80,0) 66%), var(--kopfbild);
    background-position:center; background-size:cover; background-repeat:no-repeat;
    border-bottom:none;
    padding:74px 0 78px;
  }
  .page-hero-bild .eyebrow{color:rgba(255,255,255,0.82);}
  .page-hero-bild h1{color:#fff; max-width:26ch;}

  /* ---- Gezeichnetes Kopfband (zweite Bildsprache, 15.09.2026) ----
     Wie .page-hero-bild, nur dass statt des Fotos ein SVG dahinterliegt, das
     app/wellenband.php aus dem Artikelschluessel rechnet. Das Band bringt
     seine Abdunklung selbst mit - der Verlauf steckt im SVG, damit er
     dieselbe Zeichnung beschneidet und nicht die Seite darunter. */
  .page-hero-welle{
    position:relative; overflow:hidden;
    /* Der Grund kommt von der Seite, damit er nur an einer Stelle steht -
       WELLENBAND_GRUND in app/wellenband.php, das ihn auch dem Verlauf im
       SVG gibt. Der Wert hier ist nur der Rueckfall. */
    background:var(--bandgrund, #2E2420);
    border-bottom:none;
    padding:74px 0 78px;
  }
  .page-hero-welle .wellenband{
    position:absolute; inset:0; width:100%; height:100%; display:block;
  }
  /* Der Inhalt muss ueber das absolut gesetzte SVG - ohne position greift
     z-index nicht, und der Titel verschwaende dahinter. */
  .page-hero-welle .wrap{position:relative;}
  .page-hero-welle .eyebrow{color:rgba(255,255,255,0.82);}
  .page-hero-welle h1{color:#fff; max-width:26ch;}
  @media (max-width:760px){ .page-hero-welle{padding:52px 0 56px;} }

  /* ---- Zierleiste im Fliesstext (zweite Bildsprache, 15.09.2026) ----
     Dasselbe Zeichen flach und leise, auf dem Grund der Seite. Anders als das
     Kopfband steht sie in den Farbmarken und wechselt darum mit dem dunklen
     Modus mit - die Farben kommen als var() aus dem SVG selbst.
     Das Seitenverhaeltnis haelt CSS; im SVG steht deshalb kein slice. */
  .wellenleiste{
    display:block; width:100%; height:auto; aspect-ratio:1200/150;
    margin:30px 0 26px;
  }
  @media (max-width:760px){ .wellenleiste{margin:22px 0 20px;} }
  /* Im Fliesstext trennt sie zwei Abschnitte (seit 16.09.2026, 55 Stellen in
     MediWiki-Artikeln, drei weitere in Klinik und Patienten-Info). Die eigene
     Klasse statt einer Liste von Behaeltern: Sie steht in MediWiki-Artikeln,
     im Klinik-Portrait und in zwei Sorten Aufklappern, und bei jedem weiteren
     Ort soll niemand daran denken muessen, hier etwas nachzutragen.
     Sie gehoert zu dem, was FOLGT - sie kuendigt den naechsten
     Abschnitt an, wie eine Kapitelvignette, und steht darum naeher an der
     Ueberschrift dahinter als am Text davor. Nachgemessen bei 736 px Spalte:
     61 px Luft darueber, 27 px darunter.
     Die Zahlen im Rand sind nicht die Zahlen, die man sieht: Das SVG laesst
     oben 25 und unten 20 seiner 150 Einheiten leer (bei 92 px Hoehe also 15
     bzw. 12 px). Wer hier etwas verschiebt, muss das mitrechnen.
     Der untere Rand ist negativ, weil Raender zwischen Geschwistern
     zusammenfallen: -6 gegen die 21 px der <h4> ergibt 15. Ohne ihn stuenden
     die vollen 21 px plus der leere Fuss des SVG zwischen beiden. */
  .wellenleiste-text{margin:46px 0 -6px;}
  @media (max-width:760px){ .wellenleiste-text{margin:34px 0 -4px;} }
  /* Im Aufklapper ist sie enger gesetzt, und das hat einen gemessenen Grund:
     Der Kasten zeigt nur 60vh auf einmal (449 px), die Spalte ist dort aber
     mit 1031 px breiter als die 736 px des Artikels - die Leiste wird also
     HOEHER (129 statt 92 px) und der Ausschnitt KLEINER. Mit den Raendern des
     Artikels nahm sie 39 Prozent eines Aufklapper-Fensters ein, gegenueber 19
     Prozent im Artikel; mit 30 px sind es 29.
     Flacher zeichnen laesst sie sich hier NICHT per CSS: Das aspect-ratio muss
     dem viewBox des SVG entsprechen, sonst laesst preserveAspectRatio="meet"
     die Grafik seitlich weiss stehen. Eine flachere Leiste brauchte einen
     anderen viewBox, also den Zusammenhang bis in inhalt_block() hinein - und
     das weiss dort mit Absicht niemand. Sie skaliert darum mit ihrer Spalte,
     wie ein Band das tut. */
  .fach-more .prose .wellenleiste-text{margin:30px 0 -4px;}
  /* Das Kopfbild setzt die Seite selbst als Inline-Eigenschaft --kopfbild, damit
     es ueber asset() einen Versionsstempel bekommt; im Stylesheet ginge das
     nicht, und ein ueberschriebenes Bild bliebe in den Zwischenspeichern stehen.
     Die Adresse dort MUSS mit / beginnen: Der Browser loest eine relative
     Adresse in einem Custom Property gegen das Stylesheet auf, das sie benutzt,
     nicht gegen die Seite, die sie setzt. Aus "assets/img/..." wurde so
     "assets/css/assets/img/..." - das Bild fehlte auf allen sieben Seiten. */
  .page-intro{padding:40px 0 8px; border-bottom:1px solid var(--line);}
  /* Erscheinungsdatum eines einzelnen Beitrags, unter dem Titel. */
  .beitrag-datum{
    margin:14px 0 0; font-family:"IBM Plex Mono", monospace;
    font-size:0.78rem; letter-spacing:0.05em; color:var(--slate);
  }
  /* Steht es im Kopfband, muss es hell sein wie Rubrik und Titel darueber. */
  .beitrag-datum.auf-bild{color:rgba(255,255,255,0.82);}
  .page-intro p{color:var(--ink-muted); max-width:60ch; font-size:1.05rem; margin:0 0 32px;}
  /* Schmaler wird der Bildausschnitt sonst zu eng um den Titel */
  @media (max-width:720px){
    .page-hero-bild{padding:52px 0 56px;}
    /* Schmal nimmt der Titel die ganze Breite ein und liefe sonst in den hellen
       Bildteil - der Verlauf muss darum weiter nach rechts reichen. */
    .page-hero-bild{background-image:linear-gradient(90deg, rgba(38,54,80,0.90) 0%, rgba(38,54,80,0.80) 55%, rgba(38,54,80,0.45) 100%), var(--kopfbild);}
  }

  /* ---- Patienten-Info ---- */
  /* Die Ueberschrift einer Karte zeigt auf sich selbst (19.09.2026). Grund:
     Der Chefarzt schickt Patientinnen und Patienten Verweise auf einzelne
     Abschnitte ("patienten-info#konsultation"); ohne eine sichtbare Marke
     muesste er die Adresse im Quelltext suchen. Fuer den Leser sieht die
     Ueberschrift aus wie vorher - erst beim Ueberfahren erscheint das
     Zeichen, und wer sie anklickt, hat die Adresse in der Adresszeile. */
  .karten-marke{color:inherit; text-decoration:none;}
  .karten-marke:hover, .karten-marke:focus-visible{color:var(--accent);}
  .karten-marke::after{
    content:"#"; margin-left:0.35em; color:var(--accent);
    opacity:0; transition:opacity 0.15s ease;
  }
  .karten-marke:hover::after, .karten-marke:focus-visible::after{opacity:1;}
  /* Auf Zeigegeraeten ohne Mauszeiger gibt es kein Ueberfahren - dort bleibt
     das Zeichen ganz weg, statt dauerhaft dazustehen. */
  @media (hover:none){ .karten-marke::after{content:none;} }
  .info-liste{display:grid; gap:18px; margin-top:8px;}
  /* min-width:0 und Trennung: Ein Rasterelement darf von sich aus nicht
     schmaler werden als sein laengster unzerbrechlicher Inhalt. Auf dem
     Klinik-Portrait dehnte "Berichterstattung" in der Karte "Medien" die
     Spalte von 270 auf 285 px und schob die Seite bei 310 px Sichtbreite um
     vier Pixel hinaus - sichtbar erst mit geoeffnetem Aufklapper, deshalb
     lange unentdeckt (gefunden am 19.09.2026). Dieselbe Behandlung wie bei
     den Ueberschriften und den Ankreuzzeilen des Fragebogens. */
  .info-card{background:var(--surface); border:1px solid var(--line); padding:26px 28px;
    min-width:0; hyphens:auto; overflow-wrap:break-word;}
  .info-card h3{font-family:"Fraunces", serif; font-size:1.2rem; margin-bottom:6px;}
  .info-card .lead{color:var(--ink-muted); font-size:0.95rem; margin:0;}
  /* Nachschlagewerke wie das Glossar Versicherungsrecht werden lang; der
     Aufklapper bekommt darum eine eigene Bildlaufflaeche statt die Seite
     um mehrere Bildschirmhoehen zu strecken. */
  .info-card .prose{max-height:60vh; overflow-y:auto; padding-right:12px;}
  /* Hier sind es echte Zwischenueberschriften, keine Rubriken wie in den
     Fachbereichs-Aufklappern - deren Versalien aus .fach-more .prose h4
     muessen darum zurueckgenommen werden. */
  .info-card .prose :is(h2,h3,h4,h5,h6){
    font-family:"Fraunces", serif; font-size:1.02rem; margin:22px 0 6px;
    text-transform:none; letter-spacing:normal; color:var(--ink); font-weight:500;
  }
  .info-card .prose :is(h2,h3,h4,h5,h6):first-child{margin-top:0;}
  .info-card .prose ul{margin:8px 0 14px; padding-left:20px;}
  .info-card .prose li{margin-bottom:4px;}
  /* Anfangsbuchstaben in den Glossaren */
  .info-card .prose .glossar-buchstabe{
    font-family:"IBM Plex Mono", monospace; font-size:0.78rem; letter-spacing:0.1em;
    color:var(--accent); margin:20px 0 4px; border-bottom:1px solid var(--line); padding-bottom:4px;
  }
  .tabelle-scroll{overflow-x:auto; margin:12px 0 18px;}
  /* max-width haelt die Tabelle im Textmass, statt sie im Scrollrahmen auf ihre
     max-content-Breite wachsen zu lassen. Eine Tabelle mit einem langen Satz in
     einer Zelle war damit 7600 px breit - der waagrechte Scrollbalken kam nicht
     von zu vielen Spalten, sondern von einem einzigen Satz. */
  .info-tabelle{border-collapse:collapse; width:100%; max-width:100%; font-size:0.88rem;}
  .info-tabelle th, .info-tabelle td{
    border-bottom:1px solid var(--line); padding:7px 12px 7px 0; text-align:left; vertical-align:top;
      /* break-word statt anywhere: "anywhere" darf eine Spalte schmaler
         machen als ihr laengstes Wort und bricht dann mitten durch - das war
         der gemeldete Fehler, "Cayennepfeffe/r". "break-word" bricht ein Wort
         nur, wenn es allein schon zu breit ist, und laesst die Spaltenbreite
         sonst in Ruhe. Die Adressen und Wirkstoffketten ohne Trennstelle -
         die laengste hat 121 Zeichen - sind damit weiter abgefangen; sie
         machen jetzt nur ihre eigene Spalte breit statt alle schmal. */
      overflow-wrap:break-word;
    }
  /* Kein white-space:nowrap: Die Quellen kennen keine Kopfzeile - von 382
     Tabellen tragen drei ein <th> -, unsere Ausgabe macht die erste Zeile dazu.
     In 186 von 348 Tabellen steht dort darum ein ganzer Satz, den nowrap auf
     einer Zeile hielt. Kurze Spaltentitel brechen von allein nicht um. */
  .info-tabelle th{font-weight:600; color:var(--ink);}
  .info-tabelle td{color:var(--ink-muted);}
  /* ---- Gefaerbte Zellen ----
     Die Quelle faerbt Zellen mit bgcolor, und die Farbe ist dort INHALT: In
     "Temperatur und deren Bedeutung" traegt sie die Skala von heiss nach
     kalt, anderswo die Zugehoerigkeit zu einer Gruppe. Gemessen am
     18.09.2026: 1519 gefaerbte Zellen in 67 Tabellen auf 52 Seiten.
     Roh gesetzt ginge das nicht. Die Werte stammen aus den Neunzigern -
     #FF3300, #00FFFF, #CCFF66 - und waeren auf dieser Seite grell; im
     Dunkelmodus stuende dunkle Schrift auf leuchtendem Grund.
     Darum wird die Farbe der Quelle nur als HINWEIS uebernommen und hier
     eingemischt: Der Farbton bleibt unterscheidbar, die Helligkeit kommt vom
     Seitengrund. Die Information ueberlebt, der Ton passt sich an. */
  .info-tabelle th[style*="--zellfarbe"],
  .info-tabelle td[style*="--zellfarbe"]{
    background:color-mix(in srgb, var(--zellfarbe) 30%, var(--surface));
    padding-left:12px;
  }
  /* Im Dunkelmodus weniger Farbe: Auf dunklem Grund wirkt derselbe Anteil
     deutlich lauter, und die Schrift muss hell bleiben koennen. */
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]) .info-tabelle th[style*="--zellfarbe"],
    :root:not([data-theme="light"]) .info-tabelle td[style*="--zellfarbe"]{
      background:color-mix(in srgb, var(--zellfarbe) 18%, var(--surface));
    }
  }
  :root[data-theme="dark"] .info-tabelle th[style*="--zellfarbe"],
  :root[data-theme="dark"] .info-tabelle td[style*="--zellfarbe"]{
    background:color-mix(in srgb, var(--zellfarbe) 18%, var(--surface));
  }
  /* Eine gefaerbte Zelle traegt ihren Inhalt in der normalen Textfarbe:
     Der gedaempfte Ton von .info-tabelle td waere auf der Flaeche zu blass. */
  .info-tabelle td[style*="--zellfarbe"]{color:var(--ink);}

  /* Klinik-Portrait steht offen auf der Seite, nicht im Aufklapper */
  /* Textspalte: Klinik-Portrait sowie Impressum und Datenschutzerklaerung */
  .portrait-text, .textseite{max-width:74ch; padding:8px 0 40px;}
  .portrait-text p, .textseite p{color:var(--ink-muted); margin:0 0 16px;}
  /* ---- Zwischentitel der uebernommenen Texte ----
     Seit dem 17.09.2026 tragen sie die Gliederung der Quelle: mit_stufen()
     legt die vorkommenden Quellstufen lueckenlos auf h2, h3, h4 ... Vorher
     wurde alles zwischen Stufe 1 und 4 auf h4 gedeckelt, und ein h4 hatte im
     Artikel ueberhaupt keine Regel - Abschnitt und Unterabschnitt sahen
     gleich aus, 16 px fett in der Fliesstextschrift.
     Die Abstufung hier ist die Antwort darauf. Die Werte fuer h2 und h3
     standen schon im Stylesheet (.textseite h2 mit 1,35rem, die uebrigen mit
     1,15rem) - sie sind uebernommen, damit die Rechtsseiten aussehen wie
     bisher, und nach unten fortgesetzt. */
  .wiki-artikel :is(h2,h3,h4,h5,h6),
  .textseite :is(h2,h3,h4,h5,h6),
  .portrait-text :is(h2,h3,h4,h5,h6){
    font-family:"Fraunces", Georgia, serif; font-weight:500; color:var(--ink);
    text-transform:none; letter-spacing:normal; text-wrap:balance;
  }
  .wiki-artikel h2, .textseite h2, .portrait-text h2{font-size:1.35rem; margin:38px 0 12px;}
  .wiki-artikel h3, .textseite h3, .portrait-text h3{font-size:1.15rem; margin:30px 0 10px;}
  .wiki-artikel h4, .textseite h4, .portrait-text h4{font-size:1.02rem; margin:26px 0 8px;}
  .wiki-artikel :is(h5,h6),
  .textseite :is(h5,h6),
  .portrait-text :is(h5,h6){font-size:0.94rem; margin:22px 0 6px; color:var(--slate);}
  /* Der erste Zwischentitel steht direkt unter dem Kopfband oder der
     Einleitung und braucht seinen Abstand nach oben nicht. */
  .wiki-artikel > :is(h2,h3,h4,h5,h6):first-child,
  .textseite > :is(h2,h3,h4,h5,h6):first-child,
  .portrait-text > :is(h2,h3,h4,h5,h6):first-child{margin-top:0;}
  .portrait-text ul, .textseite ul{margin:0 0 16px; padding-left:20px; color:var(--ink-muted);}
  /* Die Angaben im Impressum stehen enger als die Kontaktliste der Kontaktseite */
  .textseite dl.contactlist{margin:0 0 16px; gap:8px 20px;}

/* ---- Anmeldeformular ---- */
  .anmeldeformular{background:var(--surface); border:1px solid var(--line); padding:32px; margin-top:8px;}
  @media (max-width:560px){ .anmeldeformular{padding:22px;} }
  /* Die kurzen Angaben stehen zu zweit nebeneinander, Nachricht und Auswahl
     ueber die volle Breite - sonst wandert das Auge staendig zurueck. */
  .feld-raster{display:grid; grid-template-columns:1fr 1fr; gap:20px 24px;}
  @media (max-width:640px){ .feld-raster{grid-template-columns:1fr;} }
  .feld{display:flex; flex-direction:column; gap:6px; margin:0;}
  .feld > label, .feldgruppe > legend{
    font-size:0.78rem; text-transform:uppercase; letter-spacing:0.06em;
    color:var(--slate); font-family:"IBM Plex Mono", monospace;
  }
  .pflicht{color:var(--accent);}
  .anmeldeformular input[type="text"], .anmeldeformular input[type="email"],
  .anmeldeformular input[type="tel"], .anmeldeformular textarea,
  .anmeldeformular select{
    font:inherit; font-size:0.94rem; color:var(--ink); background:var(--feld-grund);
    border:1px solid var(--feld-rand); border-radius:0; padding:11px 12px; width:100%;
  }
  /* Die Auswahl "Zu wem moechten Sie?". appearance:none nimmt das Systemfeld
     zurueck, damit sie wie die uebrigen Felder aussieht; das Dreieck kommt als
     Hintergrundbild dazu, sonst fehlte jeder Hinweis, dass es eine Auswahl ist.
     Es ist als data:-Adresse eingebettet - fuer zwoelf Striche lohnt keine
     eigene Datei, und ein zweiter Abruf entfiele ohnehin nicht. */
  .anmeldeformular select{
    appearance:none; -webkit-appearance:none; padding-right:38px; cursor:pointer;
    background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23667' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
    background-repeat:no-repeat; background-position:right 14px center; background-size:10px 6px;
  }
  /* Dunkel ein hellerer Pfeil - das eingebettete Bild kennt keine
     Farbvariablen, darum eine eigene Fassung (27.09.2026, Punkt 294). */
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]) .anmeldeformular select{
      background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23B7AFA9' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
    }
  }
  :root[data-theme="dark"] .anmeldeformular select{
    background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23B7AFA9' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
  }
  .anmeldeformular select:hover{border-color:var(--ink-muted);}
  /* Im Feld traegt der Abstand schon die Luecke der Spalte - der eigene
     Aussenabstand von .feld-hilfe gilt der Verwendung in einer Feldgruppe. */
  .feld > .feld-hilfe{margin-top:0;}
  .anmeldeformular textarea{resize:vertical; min-height:140px;}
  .anmeldeformular ::placeholder{color:var(--ink-muted); opacity:0.75;}
  .anmeldeformular :focus-visible{outline:2px solid var(--focus); outline-offset:1px;}
  /* Ein fehlerhaftes Feld traegt Farbe UND Text - Farbe allein sieht nicht jeder. */
  .anmeldeformular .hat-fehler input, .anmeldeformular .hat-fehler textarea{border-color:var(--accent-fill);}
  .feld-fehler{font-size:0.8rem; color:var(--accent); margin-top:2px;}
  .feld-hilfe{font-size:0.8rem; color:var(--ink-muted); margin:12px 0 0; max-width:62ch;}
  /* Erklaerender Hinweis zwischen zwei Fragen - im ME/CFS-Triageformular etwa
     die Erlaeuterung zu PEM oder der Verweis auf den Notruf. Anders als
     .feld-hilfe gehoert er nicht zu einem einzelnen Feld, sondern steht fuer
     sich; die Linie links setzt ihn vom Fragenfluss ab. */
  .feld-hinweis{
    font-size:0.88rem; color:var(--ink-muted); max-width:70ch;
    margin:22px 0 0; padding-left:14px; border-left:2px solid var(--line);
  }
  .feldgruppe + .feld-hinweis{margin-top:14px;}
  .feldgruppe{border:0; padding:0; margin:26px 0 0; min-width:0;}
  .feldgruppe > legend{padding:0; margin-bottom:10px;}
  .wahl{display:flex; align-items:flex-start; gap:10px; margin-top:9px; font-size:0.92rem; cursor:pointer;}
  .wahl input{margin:2px 0 0; accent-color:var(--accent-fill); flex-shrink:0;}
  /* Dieselbe Behandlung wie bei den Ueberschriften (siehe dort), und aus
     demselben Grund: Ein einzelnes langes Wort passt bei 320 px nicht in die
     Zeile und schiebt die ganze Seite hinaus. Im Fragebogen nach den
     Kanadischen Kriterien tat das "Bewegungskoordinationsstoerungen" - 31
     Zeichen, 250 px, gemessen am 19.09.2026 bei 310 px Sichtbreite.
     hyphens:auto trennt nach den Regeln der Sprache und wird nur taetig,
     wenn der Platz fehlt; overflow-wrap bleibt das Netz fuer das, was die
     Trennung nicht kann. */
  .wahl span{min-width:0; hyphens:auto; overflow-wrap:break-word;}
  /* Der Abstand zwischen zwei Feldern, die untereinander stehen. Er kam mit
     der Auswahl "Zu wem moechten Sie?" dazu: Bis dahin folgte auf ein Feld
     immer ein Raster oder eine Feldgruppe, nie ein zweites Feld.
     Der Kindselektor ist noetig: Als blosses ".feld + .feld" traf die Regel
     auch die Felder IM Raster. Dort bekam jedes ausser dem ersten 26px
     Abstand nach oben - und damit stand "Geburtsdatum" 26px tiefer als
     "Vorname und Name", waehrend die Paare darunter fluchteten, weil beide
     verschoben waren. */
  .feld-raster + .feld, .feldgruppe + .feld,
  .anmeldeformular > .feld + .feld{margin-top:26px;}
  .form-hinweis{
    border-left:3px solid var(--accent-fill); background:var(--accent-tint);
    padding:12px 16px; margin:0 0 22px; font-size:0.9rem; color:var(--ink);
  }
  /* Der Kasten wird meist selbst als <p> gesetzt (Fehlermeldungen der
     Formulare), traegt aber auch Absaetze in sich - dann bestimmt sonst der
     Ort, wo er steht, seine Schriftfarbe: in .textseite gewann deren
     gedaempfte Farbe, daneben die volle. Derselbe Baustein sah damit auf
     zwei Seiten verschieden aus (gemessen am 19.09.2026). Ein Bauteil legt
     seine eigene Farbe fest. */
  .form-hinweis p{color:var(--ink); margin:0;}
  .form-hinweis p + p{margin-top:8px;}
  .form-fuss{
    display:flex; align-items:center; gap:24px; flex-wrap:wrap;
    margin-top:30px; padding-top:24px; border-top:1px solid var(--line);
  }
  .form-datenschutz{font-size:0.8rem; color:var(--ink-muted); margin:0; max-width:44ch;}
  /* Der Honigtopf gegen Roboter: fuer das Auge weg, fuer den Vorleser weg
     (aria-hidden im Markup), aber im Formular vorhanden. display:none waere
     verdaechtig - manche Skripte pruefen darauf. */
  .feld-paar{position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden;}

  /* Bestaetigungsseite */
  .danke-karte{background:var(--surface); border:1px solid var(--accent-fill); padding:48px; text-align:center;}
  .danke-karte p{color:var(--ink-muted); max-width:52ch; margin:14px auto 0;}
  .danke-karte .hero-ctas{justify-content:center;}

/* ---- Nachtraege: Ausrichtung und ehemalige Inline-Styles ---- */
  /* Der Aufklapper sitzt am Kartenfuss, damit die "Mehr erfahren"-Zeilen einer
     Reihe auf einer Linie stehen - auch wenn ein Titel zweizeilig umbricht. */
  .fach-card .fach-more, .member-card .fach-more, .fach-card .fach-link{margin-top:auto; padding-top:14px;}
  /* Traegt die Karte einen Anmeldeknopf, uebernimmt er das Ausrichten nach
     unten - er steht ja ueber dem Aufklapper. Sonst haengte er am Ende des
     Einleitungstextes und stuende in jeder Karte auf anderer Hoehe, waehrend
     "Mehr erfahren" darunter sauber auf einer Linie liegt. Genau das machte
     die Reihe unruhig. Der Aufklapper folgt dann dicht darunter. */
  .fach-card .fach-anmeldung{margin-top:auto; padding-top:14px;}
  .fach-card .fach-anmeldung + .fach-more{margin-top:10px; padding-top:0;}
  /* margin-top:auto wirkt nur in einem Flex-Container - die Personenkarte war bisher keiner */
  .member-card{display:flex; flex-direction:column;}
  .fach-card .fach-body{flex:1;}
  /* Abstand nach einem Absatz, der nur einen Knopf traegt (frueher inline) */
  .btn-zeile{margin-top:32px;}
  .btn-zeile-eng{margin-top:24px;}
  /* Einleitungstext eines Abschnitts auf der Startseite (frueher inline) */
  .abschnitt-text{margin-top:18px; color:var(--ink-muted); max-width:56ch;}
  /* Abstand ueber Kontaktliste und Knopfgruppe der Kontaktseite (frueher inline) */
  .abstand-oben{margin-top:28px;}
  /* Fuer das Auge weg, fuer den Vorleser da. Gebraucht fuer die Legende der
     Bell-Skala: Eine Feldgruppe ohne <legend> ist fuer einen Screenreader
     eine Gruppe ohne Namen, sichtbar waere die Zeile hier aber doppelt. */
  .visuell-versteckt{
    position:absolute; width:1px; height:1px; margin:-1px; padding:0;
    overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0;
  }

/* ---- Die zwei Behandlungspyramiden (Klinik-Portrait) ---- */
  /* Nebeneinander, sobald Platz ist. Untereinander sind sie kein Vergleich,
     sondern zwei Bilder - und die Aussage der beiden IST der Vergleich:
     dieselben drei Baender, andere Reihenfolge. Die Grenze liegt bei 720 px,
     weil darunter eine Spalte schmaler als 300 px wuerde und die
     Beschriftungen im Dreieck dann nicht mehr nebeneinander passen.
     Gezeichnet werden sie in app/behandlungspyramide.php; sie tragen keinen
     eigenen Grund und schreiben in currentColor. */
  .pyramiden-paar{display:grid; gap:14px 34px; margin:26px 0 0;}
  @media (min-width:720px){ .pyramiden-paar{grid-template-columns:1fr 1fr;} }
  .pyramiden-spalte{min-width:0;}
  .pyramiden-spalte > h2, .pyramiden-spalte > h3,
  .pyramiden-spalte > h4, .pyramiden-spalte > h5{margin:0 0 6px;}
  .pyramiden-spalte > p{margin:0 0 12px; color:var(--ink-muted);}
  /* Die Zeichnung fuellt ihre Spalte, hoert aber bei 420 px auf: Auf einem
     breiten Schirm waere eine einzelne Pyramide sonst so gross wie ein Foto,
     und sie ist ein Schema, kein Bild. Vorher waren es 541 px je Stueck,
     untereinander - zusammen mehr als eine Bildschirmhoehe. */
  .pyramide{display:block; width:100%; max-width:420px; height:auto;}

  /* Das Netz "Ganzheitsmedizin". Kein weisser Grund mehr - die Zeichnung
     traegt keinen, und .inhalt-bild img gilt hier nicht, weil es kein <img>
     ist. Die 560 px sind die bisherige Darstellungsgroesse der PNG; das
     Schaubild braucht sie, weil neun Beschriftungen aussen herum stehen. */
  .schaubild-netz{margin:24px 0; max-width:560px;}
  .netz{display:block; width:100%; height:auto;}
  /* Schmal traegt die Schrift sonst nicht: Bei 270 px Darstellungsbreite
     sind die 18 Einheiten der Zeichnung noch gut 6 px. CSS schlaegt die
     Schriftgroesse im SVG, also laesst sie sich hier anheben - bis 26, mehr
     nicht: Ab 28 stossen "Zahnmedizin" und "Innere Medizin" oben zusammen
     (nachgemessen an den Textrechtecken). Klein bleibt es trotzdem; ein Ring
     mit neun aussen stehenden Namen braucht Breite. */
  @media (max-width:600px){
    .netz text{font-size:26px;}
    .netz text:last-of-type{font-size:34px;}
  }

/* ---- Fragebogen Kanadische Kriterien und Bell-Score ---- */
  /* Der Fragebogen unter /me-cfs-fragebogen. Er folgt dem PDF, von dem er
     stammt: Jede der sieben Kategorien steht in einem eigenen Kasten, wie
     auf dem Blatt. Das ist hier nicht Zierde - beim Ausfuellen muss man
     sehen, welche Punkte zusammengehoeren, weil die Regel je Kategorie
     zaehlt. */
  .kriterien-titel{font-size:1.25rem; margin:46px 0 6px;}
  .kriterien-einleitung{color:var(--ink-muted); max-width:70ch; margin:0 0 6px;}
  .kriterien-vorab .form-hinweis{margin-bottom:16px;}
  /* Der Wegweiser zur Auswertung. Er steht im Einleitungstext und ist der
     einzige Hinweis darauf, dass unten etwas mitlaeuft - darum bekommt der
     Verweis eine sichtbare Unterlaengslinie und nicht nur Farbe. */
  .kriterien-wegweiser{margin-top:14px; color:var(--ink-muted);}
  .kriterien-wegweiser a{color:var(--ink); text-decoration:underline; text-underline-offset:3px;}
  .kriterien-wegweiser a:hover{color:var(--accent);}
  .kriterien-kategorie{
    border:1px solid var(--line); padding:18px 22px 22px; margin:20px 0 0; min-width:0;
  }
  .kriterien-kategorie > legend{
    padding:0 8px; margin-left:-8px; font-size:0.98rem; font-weight:600;
    display:flex; align-items:baseline; gap:10px;
  }
  .kriterien-nr{
    font-family:"IBM Plex Mono", monospace; color:var(--accent);
    font-size:0.86rem; font-weight:400;
  }
  .kriterien-regel{
    font-family:"IBM Plex Mono", monospace; font-size:0.72rem; letter-spacing:0.06em;
    text-transform:uppercase; color:var(--slate); margin:2px 0 10px;
  }
  /* Eine angekreuzte Zeile hebt sich ab - sonst muss man beim Zaehlen
     suchen, und Zaehlen ist genau das, was die Regel verlangt. */
  .kriterien-kategorie .wahl:has(input:checked){color:var(--ink);}
  .kriterien-kategorie .wahl:has(input:checked) span{font-weight:500;}

  .bell-skala .bell-stufe{
    align-items:baseline; gap:14px; padding:9px 0; border-top:1px solid var(--line);
  }
  .bell-skala .bell-stufe:first-of-type{border-top:0;}
  .bell-zahl{
    font-family:"IBM Plex Mono", monospace; font-size:1.02rem; color:var(--accent);
    min-width:3ch; text-align:right; flex-shrink:0;
  }
  .bell-text{font-size:0.9rem; color:var(--ink-muted);}
  .bell-skala .wahl:has(input:checked) .bell-text{color:var(--ink);}

  /* Der Auswertungskasten. Er traegt die Akzentlinie, weil er das Ergebnis
     ist und nicht eine weitere Frage. */
  .kriterien-auswertung{
    margin:46px 0 0; padding:26px 28px; background:var(--surface);
    border:1px solid var(--line); border-left:3px solid var(--accent-fill);
  }
  .kriterien-auswertung h2{font-size:1.15rem; margin-bottom:14px;}
  .auswertung-stand{color:var(--ink-muted); font-size:0.92rem; margin:0;}
  .auswertung-urteil{font-size:1.02rem; font-weight:500; margin:0 0 16px;}
  .auswertung-urteil.ist-erfuellt{color:var(--ink);}
  .auswertung-urteil.ist-offen{color:var(--ink-muted);}
  .auswertung-liste{list-style:none; margin:0; padding:0;}
  .auswertung-liste li{
    display:grid; grid-template-columns:1.4em 1fr auto; gap:0 10px;
    align-items:baseline; padding:7px 0; border-top:1px solid var(--line);
    font-size:0.92rem;
  }
  .auswertung-liste li:first-child{border-top:0;}
  /* Die Marke traegt Farbe UND Zeichen - Farbe allein sieht nicht jeder,
     dieselbe Regel wie bei den Formularfehlern. */
  .auswertung-marke{font-family:"IBM Plex Mono", monospace;}
  .auswertung-liste .ist-erfuellt .auswertung-marke{color:var(--accent);}
  .auswertung-liste .ist-offen{color:var(--ink-muted);}
  .auswertung-zahl{font-family:"IBM Plex Mono", monospace; font-size:0.82rem; white-space:nowrap;}
  .auswertung-noetig{color:var(--ink-muted);}
  .auswertung-offen{margin-top:18px;}
  .auswertung-offen ul{margin:8px 0 0; padding-left:20px; font-size:0.9rem; color:var(--ink-muted);}
  .auswertung-offen li{margin-top:5px;}
  .auswertung-bell{margin-top:18px; font-size:0.92rem;}
  .auswertung-hinweis, .auswertung-warnung{
    margin-top:16px; font-size:0.86rem; color:var(--ink-muted); max-width:70ch;
  }
  .auswertung-warnung{padding-top:14px; border-top:1px solid var(--line);}

  .kriterien-senden{margin-top:40px;}
  .kriterien-senden h2{font-size:1.15rem;}
  .kriterien-senden > p{color:var(--ink-muted); max-width:66ch; margin-top:10px;}
  .kriterien-versand{margin-top:26px; border-top:1px solid var(--line); padding-top:20px;}
  .kriterien-versand > summary{
    cursor:pointer; font-weight:500; font-size:0.96rem; list-style:none;
  }
  .kriterien-versand > summary::-webkit-details-marker{display:none;}
  .kriterien-versand > summary::before{content:"+ "; color:var(--accent);}
  .kriterien-versand[open] > summary::before{content:"– ";}
  .kriterien-versand > summary + *{margin-top:16px;}
  /* Differentialdiagnosen und Komorbiditaeten (23.09.2026): die Tabellen
     von Seite 3 des Blattes, je Fachgebiet eine Liste. Das Raster statt
     einer Tabelle, weil sieben Spalten auf keinem Telefon Platz haben -
     so bricht es um, wie der Platz reicht, und bleibt je Fachgebiet lesbar. */
  .dd-titel{font-size:1.1rem; margin:40px 0 14px;}
  /* Die Linien sitzen an den Feldern, nicht als Hintergrund im Spalt: So
     bleibt der Rest einer umgebrochenen Zeile leer statt als grauer Block
     dazustehen. 140 px Mindestbreite: Bei voller Breite passen so alle
     sieben Fachgebiete der zweiten Tabelle in eine Zeile. */
  .dd-raster{
    display:grid; grid-template-columns:repeat(auto-fill, minmax(140px, 1fr));
    border-top:1px solid var(--line); border-left:1px solid var(--line);
  }
  .dd-fach{
    padding:14px 14px 16px; min-width:0;
    border-right:1px solid var(--line); border-bottom:1px solid var(--line);
  }
  .dd-fachgebiet{
    margin:0 0 8px; font-family:"IBM Plex Mono", monospace; font-size:0.72rem;
    letter-spacing:0.06em; text-transform:uppercase; color:var(--slate);
    hyphens:auto; overflow-wrap:break-word;
  }
  .dd-fach ul{list-style:none; margin:0; padding:0; font-size:0.9rem;}
  .dd-fach li{margin-top:6px; hyphens:auto; overflow-wrap:break-word;}
  .dd-stern{color:var(--accent); margin-left:1px;}
  .dd-fussnote{font-size:0.82rem; color:var(--ink-muted); margin:10px 0 0;}
  .quellenliste{font-size:0.86rem; color:var(--ink-muted); padding-left:20px;}
  .quellenliste li{margin-top:8px;}
  @media (max-width:600px){
    .kriterien-kategorie{padding:16px 14px 18px;}
    /* minmax(0,1fr) statt 1fr: Eine 1fr-Spalte darf von sich aus nicht
       unter ihre Mindestbreite schrumpfen, und die bestimmt hier der
       laengste unzerbrechliche Inhalt. Zusammen mit dem nowrap der
       Zahlenzeile schob das die Seite bei 310 px um 22 px hinaus - und
       zwar NUR mit gefuellter Auswertung, weshalb ein Durchgang ueber die
       leere Seite es nicht fand (19.09.2026). */
    .auswertung-liste li{grid-template-columns:1.4em minmax(0, 1fr);}
    .auswertung-zahl{grid-column:2; white-space:normal;}
  }

  /* Gedruckt wird das Ergebnis, nicht die Website. Wer den Fragebogen zum
     Termin mitbringt, braucht die Auswertung und seine Kreuze - nicht
     Navigation, Fusszeile und den Knopf, den er gerade gedrueckt hat. */
  @media print{
    header, footer, .kriterien-vorab, .kriterien-senden, .page-hero,
    .kriterien-wegweiser, .feld-paar, .btn{display:none !important;}
    body{background:#fff; color:#000;}
    section{padding:0;}
    .kriterien-auswertung{
      background:#fff; border:1px solid #000; border-left:3px solid #000;
      page-break-inside:avoid; margin-top:0;
    }
    /* Angekreuztes bleibt, Nichtangekreuztes faellt weg: Auf Papier zaehlt,
       was zutrifft - die uebrigen 30 Zeilen sind Rauschen. */
    .kriterien-kategorie .wahl:not(:has(input:checked)){display:none;}
    .kriterien-kategorie:not(:has(input:checked)) .kriterien-regel{display:none;}
    .bell-skala .wahl:not(:has(input:checked)){display:none;}
    .kriterien-kategorie{border-color:#000; page-break-inside:avoid;}
    a[href]::after{content:"";}
  }

/* ---- Gesundheitsfragebogen ---- */
  /* Der Fragebogen unter /gesundheitsfragebogen (23.09.2026). 78 Fragen mit
     derselben Skala - darum eine Zeile je Frage wie auf dem Blatt: Frage,
     vier Antworten, Kommentar. Die Antworten stehen als zusammenhaengende
     Knopfleiste da, damit das Auge bei 78 Zeilen immer an derselben Stelle
     sucht. Die Klassen des Kriterien-Fragebogens (Titel, Kasten, Senden)
     werden mitbenutzt. */
  .gf-geschlecht .wahl{display:inline-flex; margin-right:26px;}
  .gf-abschnitt{margin-top:10px;}
  .gf-frage{
    display:grid; grid-template-columns:minmax(0, 1fr) auto minmax(150px, 15rem);
    gap:8px 20px; align-items:center; padding:9px 0; border-top:1px solid var(--line);
  }
  .gf-abschnitt h2 + .gf-frage{border-top:0;}
  .gf-frage[hidden]{display:none;}
  .gf-text{margin:0; font-size:0.93rem; hyphens:auto; overflow-wrap:break-word;}
  .gf-nur{color:var(--ink-muted); font-size:0.84rem; white-space:nowrap;}
  .gf-skala{display:flex;}
  .gf-skala label{position:relative; cursor:pointer;}
  /* Das Feld selbst liegt unsichtbar ueber seiner Beschriftung - so bleibt
     es fuer Tastatur und Vorleseprogramm ein gewoehnlicher Radioknopf, und
     die Pfeiltasten wandern durch die Leiste wie durch jede Gruppe. */
  .gf-skala input{position:absolute; inset:0; margin:0; opacity:0; cursor:pointer;}
  .gf-skala span{
    display:block; min-width:4.6em; padding:7px 9px; text-align:center;
    font-size:0.8rem; border:1px solid var(--line); margin-left:-1px;
    color:var(--ink-muted); background:var(--bg);
  }
  .gf-skala label:first-child span{margin-left:0;}
  .gf-skala label:hover span{color:var(--ink); border-color:var(--ink-muted); position:relative;}
  .gf-skala input:checked + span{
    background:var(--accent-fill); border-color:var(--accent-fill); color:#fff;
    position:relative;
  }
  .gf-skala input:focus-visible + span{outline:2px solid var(--focus); outline-offset:1px; position:relative;}
  .anmeldeformular input.gf-kommentar{padding:7px 10px; font-size:0.86rem;}
  .gf-summe{
    margin:0; padding:12px 0 0; border-top:1px solid var(--ink-muted);
    font-family:"IBM Plex Mono", monospace; font-size:0.8rem; color:var(--slate);
  }
  .gf-summe strong{font-size:0.98rem; color:var(--ink); margin-left:4px;}
  /* Die Zusammenfassung: Jede Zeile ist ihr eigenes Raster, die Zahlenspalte
     also je Zeile so breit wie ihr Inhalt - "1 von 8" stand darum versetzt
     unter "11 von 19". Feste Zeichenbreiten fuer beide Teile halten die
     Zahlen buendig, ohne der Bezeichnung Platz wegzunehmen. */
  .gf-summen li{grid-template-columns:minmax(0, 1fr) auto minmax(110px, 32%); align-items:center;}
  /* Der Balken je Abschnitt (23.09.2026, Wunsch des Chefarztes): ein
     durchgehender Verlauf Gruen - Gelb - Rot, und eine Marke bei Anzahl /
     Fragen des Abschnitts. Stufenlos, denn Stufen hat das Blatt nicht
     erklaert und der Chefarzt nicht gewollt (Punkt 217). Die Marke ist ein
     senkrechter Strich in Textfarbe mit einem Rand in Grundfarbe - so hebt
     sie sich auf jeder der drei Farben ab, hell wie dunkel. */
  .gf-balken{
    position:relative; display:block; height:10px; margin-left:14px;
    border-radius:5px;
    background:linear-gradient(to right, #2e9e4f 0%, #e6c229 50%, #c62828 100%);
  }
  .gf-marke{
    position:absolute; top:-5px; bottom:-5px; width:4px; border-radius:2px;
    left:calc(var(--anteil, 0) * 100%); transform:translateX(-50%);
    background:var(--ink); box-shadow:0 0 0 2px var(--bg);
  }
  @media (max-width:560px){
    /* Schmal: Bezeichnung ueber die volle Breite, darunter Zahl und Balken. */
    .gf-summen li{grid-template-columns:auto minmax(0, 1fr); row-gap:6px;}
    .gf-summen .auswertung-sache{grid-column:1 / -1;}
    .gf-summen .auswertung-zahl{grid-column:1;}
    .gf-summen .gf-balken{grid-column:2;}
  }
  @media print{
    .gf-balken, .gf-marke{-webkit-print-color-adjust:exact; print-color-adjust:exact;}
    .gf-marke{background:#000; box-shadow:0 0 0 2px #fff;}
  }
  .gf-summen strong{font-size:0.98rem; display:inline-block; min-width:2ch; text-align:right;}
  .gf-summen .auswertung-noetig{display:inline-block; min-width:6ch;}
  .gf-formular .form-fuss{gap:12px;}
  /* Unter 900 px reicht die Zeile nicht fuer alle drei; die Frage steht
     dann ueber Skala und Kommentar. */
  @media (max-width:900px){
    .gf-frage{grid-template-columns:auto minmax(0, 1fr); padding:12px 0;}
    .gf-text{grid-column:1 / -1;}
  }
  /* Unter 560 px auch der Kommentar auf eine eigene Zeile, und die Leiste
     nimmt die ganze Breite - vier gleich breite Knoepfe. */
  @media (max-width:560px){
    .gf-frage{grid-template-columns:minmax(0, 1fr);}
    .gf-skala label{flex:1 1 0;}
    .gf-skala span{min-width:0; padding:9px 4px;}
  }
  @media print{
    .gf-formular .form-fuss, .gf-formular .kriterien-senden > p,
    .gf-formular .feld-hilfe, .kriterien-wegweiser{display:none !important;}
    .gf-frage{grid-template-columns:minmax(0, 1fr) auto 12rem; page-break-inside:avoid; padding:4px 0;}
    .gf-skala span{border-color:#000; color:#000; padding:3px 6px;}
    .gf-skala input:checked + span{background:#000 !important; color:#fff !important;
      -webkit-print-color-adjust:exact; print-color-adjust:exact;}
    .gf-kommentar{border-color:#000 !important;}
    /* Name und Geburtsdatum gehoeren aufs Papier wie auf das alte Blatt -
       anders als beim Kriterien-Fragebogen, dessen Druckregel oben den
       ganzen Sendeteil ausblendet. */
    .gf-formular .kriterien-senden{display:block !important;}
  }

/* ---- Bilder aus der maschinellen Uebernahme ---- */
  /* Bilder stehen in den Aufklappern und im Klinik-Portrait zwischen den
     Absaetzen. height:auto ist noetig, sonst gewinnt das height-Attribut des
     img gegen die Breitenbegrenzung (dieselbe Falle wie bei .fach-photo). */
  .inhalt-bild{margin:18px 0; max-width:560px;}
  /* Weiss ist hier bewusst fest: Die uebernommenen Grafiken sind fuer hellen
     Grund gezeichnet. Ohne eigenen Untergrund verschwinden die durchsichtigen
     unter ihnen im Dunkelmodus - schwarze Schrift auf schwarzem Grund. */
  /* width:auto statt 100%: Die Quelle liefert ihre Bilder als kleine Ableitungen
     - 84 % sind unter 600 px breit, im Mittel 300 px. Auf Spaltenbreite gezogen
     wurden sie unscharf, ohne lesbarer zu werden; jetzt stehen sie hoechstens in
     ihrer eigenen Groesse. Grosse Bilder begrenzt weiterhin die Figur. */
  .inhalt-bild img{max-width:100%; width:auto; height:auto; display:block; border:1px solid var(--line); background:#fff;}
  /* Ein freigestelltes Schaubild (transparenter Grund, 25.09.2026: die
     Longevity-Pyramide) steht ohne Rahmen und ohne weissen Grund - sonst
     saesse es in einem Kasten, und die Freistellung waere umsonst. */
  .inhalt-bild.freigestellt img{border:0; background:none;}
  .inhalt-bild figcaption{font-size:0.88rem; color:var(--ink-muted); margin-top:8px;}
  /* Bildbeschreibungen halbfett (Chefarzt, 26.09.2026: erst versucht, dann "So behalten"). Nicht
     die Zeile unter der Anfahrtskarte (.anfahrt): Sie ist Quellenangabe
     ("Kartengrundlage © swisstopo") und Verweis, keine Beschreibung. */
  .inhalt-bild figcaption, .inhalt-galerie figcaption,
  .anfahrt-bilder figcaption, .akademie-plan figcaption{font-weight:600;}
  /* Etliche uebernommene Bilder sind eingescannte Tabellen - der Text darin ist
     im Fliesstext zu klein. Ein Klick oeffnet die Datei selbst, dort laesst sie
     sich zoomen. */
  a.bild-gross{display:block; cursor:zoom-in;}
  /* Galerien: Impressionen aus der Klinik, Medien- und Vereinslogos, die
     Deckblaetter der Info-Flyer. Feste Spaltenbreite statt fester Spaltenzahl,
     damit dieselbe Regel fuer zwoelf Fotos wie fuer drei Logos passt. */
  .inhalt-galerie{
    display:grid; gap:12px; margin:18px 0;
    grid-template-columns:repeat(auto-fill, minmax(150px, 1fr));
  }
  .inhalt-galerie img{
    width:100%; height:auto; aspect-ratio:3/2; object-fit:cover;
    display:block; border:1px solid var(--line); background:#fff;
  }
  /* Logos und Deckblaetter duerfen nicht beschnitten werden - sie sind hoch
     oder quer und tragen Schrift. */
  .inhalt-galerie.laesst-ganz img{aspect-ratio:auto; object-fit:contain;}
  /* Galeriebilder mit Unterschrift stehen in einer eigenen <figure>. Sie
     verhaelt sich wie die Bilder daneben, damit das Raster nicht verrutscht -
     eine Zelle bleibt eine Zelle, die Unterschrift haengt darunter. */
  .inhalt-galerie figure{margin:0; display:flex; flex-direction:column;}
  .inhalt-galerie figcaption{
    font-size:0.88rem; line-height:1.35; color:var(--ink-muted); margin-top:6px;
  }
  /* Ein Portrait im Fliesstext wird wie auf der Teamseite gesetzt: klein und
     rund, nicht auf Spaltenbreite gezogen. Vgl. .member-photo. */
  .inhalt-bild.portraet{max-width:none;}
  .inhalt-bild.portraet img{
    width:96px; height:96px; border-radius:50%; object-fit:cover; background:none;
  }
  /* Die beiden "Wanted"-Plakate der Stellenausschreibungen. Sie sind 300 px
     breit und wurden auf Spaltenbreite hochgezogen; klein daneben wirken sie
     wie das Anschlagbild, das sie sind. */
  .inhalt-bild.plakat{max-width:150px;}
  /* Die Plakate bringen ihren eigenen Rand mit - das ausgefranste Papier.
     Ein Rahmen darum schneidet ihn wie ein Passepartout ab. */
  .inhalt-bild.plakat img{border:none;}
  /* Rechtliche Verweise und "Nach oben" in der Fusszeile */
  .footlinks{display:flex; align-items:center; gap:20px; flex-wrap:wrap;}
  .footlinks a{font-size:0.78rem; color:var(--ink-muted); text-decoration:none; border-bottom:1px solid var(--line);}
  .footlinks a:hover{color:var(--ink); border-color:var(--accent-fill);}
  .footlinks a[aria-current="page"]{color:var(--ink);}
  /* Die frueher hier stehende Sonderregel fuer .textseite h2 ist entfallen:
     Die Abstufung weiter oben deckt sie ab, mit denselben Werten. */
  .textseite > h2:first-child{margin-top:0;}

/* ---- MediWiki ---- */
  /* Umschalter und Suchfeld stehen nebeneinander, solange Platz ist; darunter
     beginnt die Liste. */
  .wiki-kopf{
    display:flex; align-items:flex-end; justify-content:space-between;
    gap:28px; flex-wrap:wrap; margin-bottom:28px;
  }
  .wiki-kopf .wiki-filter{margin-bottom:0; flex:1 1 280px;}
  .wiki-ansicht{display:flex; gap:2px; order:-1;}
  .wiki-ansicht a{
    padding:10px 18px; font-size:0.86rem; text-decoration:none;
    color:var(--ink-muted); background:var(--surface);
    border:1px solid var(--line); border-radius:2px;
  }
  .wiki-ansicht a:hover{color:var(--ink);}
  /* Die gewaehlte Ordnung wird gefuellt wie der Anmeldeknopf - auf dem Rot
     muss die Schrift weiss stehen, sonst ist sie nicht zu lesen. */
  .wiki-ansicht a[aria-current]{
    color:#fff; background:var(--accent-fill); border-color:var(--accent-fill);
  }
  .wiki-ansicht a[aria-current]:hover{color:#fff;}
  .wiki-filter{margin-bottom:28px; max-width:420px;}
  .wiki-filter label{
    display:block; font-family:"IBM Plex Mono", monospace; font-size:0.72rem;
    letter-spacing:0.12em; text-transform:uppercase; color:var(--slate); margin-bottom:8px;
  }
  .wiki-filter input{
    width:100%; padding:11px 14px; font:inherit; font-size:0.94rem;
    color:var(--ink); background:var(--surface);
    border:1px solid var(--feld-rand); border-radius:2px;
  }
  .wiki-filter input:focus{outline:2px solid var(--accent); outline-offset:1px;}
  .wiki-treffer{font-size:0.78rem; color:var(--ink-muted); margin:8px 0 0;}
  /* Einspaltig (Entscheid vom 11.09.2026). Die Liste wird damit lang, aber
     ein Titel bricht nicht mehr auf zwei Zeilen um, und das Auge muss nicht
     zwischen drei Kolonnen entscheiden, in welcher es weiterliest. */
  .wiki-liste{list-style:none; margin:0; padding:0;}
  .wiki-liste li{border-top:1px solid var(--line);}
  .wiki-liste a{
    display:block; padding:11px 0; font-size:0.92rem;
    color:var(--ink); text-decoration:none;
  }
  .wiki-liste a:hover{color:var(--accent); text-decoration:underline;}
  .wiki-leer{margin-top:24px; color:var(--ink-muted); font-size:0.9rem;}
  /* Die Lesespalte begrenzt den TEXT, nicht den Artikel.
     Rueckmeldung der Klinik am 18.09.2026: In den Tabellen brachen Woerter
     mitten durch, "Cayennepfeffer" stand als "Cayennepfeffe/r". Gemessen war
     die Kette Fenster 1439 -> .wrap 1180 -> .wiki-artikel 736; die Tabelle
     sass in der 74-Zeichen-Spalte, die fuer Fliesstext gedacht ist, und ihre
     sechs Spalten bekamen je 104 bis 145 px.
     Frueher trug .wiki-artikel selbst max-width:74ch. Jetzt tragen es die
     Textbausteine, und breite Bausteine - Tabellen - nehmen die volle Breite
     des Seitenrasters.
     Warum nicht mit Fensterbreiten gerechnet: 100vw schliesst den
     Scrollbalken ein (hier 15 px), die nutzbare Breite aber nicht. Jede
     vw-Rechnung haette die Seite um diese 15 px ueberlaufen lassen - genau
     den waagrechten Balken, den der 12.09. beseitigt hat. */
  .wiki-artikel{max-width:none;}
  .wiki-artikel > p,
  .wiki-artikel > ul,
  .wiki-artikel > ol,
  .wiki-artikel > :is(h2,h3,h4,h5,h6),
  .wiki-artikel > figure,
  .wiki-artikel > .galerie,
  .wiki-artikel > .wellenleiste,
  .wiki-artikel > .wiki-zurueck{max-width:74ch;}
  .wiki-zurueck{margin:36px 0 0; font-size:0.88rem;}
  /* Sicherheitsnetz fuer den uebernommenen Fliesstext: Im MediWiki stehen
     zwoelf Zeichenfolgen ohne jede Trennstelle, die laengste eine Adresse mit
     121 Zeichen. Ohne break-word schoben sie die Seite breiter als das Fenster
     und loesten einen waagrechten Scrollbalken aus - auf dem Telefon schon bei
     der Haelfte davon. break-word bricht nur, was sonst nicht passt; normale
     Woerter umbrechen unveraendert an der Wortgrenze. */
  .wiki-artikel, .prose, .textseite, .portrait-text{overflow-wrap:break-word;}

  /* Verschachtelte Listen der Quelle (seit 15.09.2026, 21 Listen auf 17 von
     425 Quellseiten). Die innere Liste haengt im Punkt darueber - ein eigener
     Abstand nach unten risse dort eine Luecke auf, die die Quelle nicht hat.
     Der offene Kreis als Aufzaehlungszeichen sagt ohne Einrueckungsraten,
     dass "Phytonadione K1" unter "Fettloeslich" haengt und nicht daneben.
     Die beiden Karten-Umgebungen stehen mit dabei, weil .fach-more .prose ul
     und .info-card .prose ul sonst gewinnen und ihren Abstand nach unten
     (12 px) auch der inneren Liste geben - unter "Patient ist beschwerdefrei"
     klaffte damit eine Luecke mitten im Punkt. */
  .wiki-artikel ul ul, .prose ul ul, .textseite ul ul, .portrait-text ul ul,
  .fach-more .prose ul ul, .info-card .prose ul ul{
    margin:4px 0 0; padding-left:20px; list-style-type:circle;
  }
  /* Die dritte Stufe braucht ein eigenes Zeichen: In calcium-in-der-nahrung
     stehen "Milch: 100 bis 150" und "Vollmilch" untereinander, nur um zwanzig
     Pixel versetzt - mit demselben Kreis liest sich das wie eine Reihe. */
  .wiki-artikel ul ul ul, .prose ul ul ul, .textseite ul ul ul,
  .portrait-text ul ul ul{list-style-type:square;}

  /* Hervorhebung im uebernommenen Fliesstext (seit 13.09.2026, 2498 Stellen).
     Work Sans ist mit 400, 500 und 600 geladen. Ohne eigene Regel nimmt der
     Browser fuer <strong> den Wert 700, findet keinen Schnitt dafuer und
     rechnet sich einen fetteren selbst aus - das wirkt im Absatz unruhig.
     600 ist der kraeftigste Schnitt, den wir wirklich haben; dieselbe Wahl
     wie bei .fach-more .prose strong. */
  .wiki-artikel strong, .prose strong, .textseite strong, .portrait-text strong,
  .info-tabelle strong{font-weight:600; color:var(--ink);}
  .wiki-artikel em, .prose em, .textseite em, .portrait-text em,
  .info-tabelle em{font-style:italic;}
  /* Eine Rubrik mit Verweis - "MediWiki", "Spezial-Sprechstunden",
     "ME/CFS-Sprechstunde", "Aktuelles". Sie alle fuehren zurueck zur
     uebergeordneten Seite, nie irgendwohin sonst; darum ein RUECKWAERTSPFEIL
     und keine Unterstreichung (Entscheid vom 19.09.2026).

     ALLE DREI ORTE IN EINER REGEL. Vorher stand dasselbe zweimal da, einmal
     fuer .page-hero-welle und einmal fuer .page-intro - und .page-hero-bild
     fehlte, weshalb die Zeile beim Fragebogen unterstrichen dastand. Eine
     Regel, drei Orte: Der naechste Kopf braucht keinen vierten Eintrag.

     WARUM MASKE UND NICHT HINTERGRUNDBILD: Die Rubrik steht mal dunkel auf
     hellem Grund (.page-intro), mal hell auf einem Foto (.page-hero-bild)
     und dreht im Dunkelmodus mit. In einer data:-Adresse laesst sich
     currentColor nicht schreiben - eine feste Farbe waere an einer der
     Stellen falsch. Als Maske faerbt background-color das Zeichen, und das
     ist currentColor. Dieselbe Ueberlegung wie beim Logo, das in
     currentColor zeichnet.

     WARUM KEIN PFEIL-ZEICHEN AUS DER SCHRIFT: Ein Text-Pfeil haengt daran,
     dass die geladene Schrift ihn fuehrt; fehlt er, springt der Browser in
     eine Ersatzschrift und der Pfeil sieht anders aus als die Zeile. */
  /* Ein Zeichen, zwei Richtungen. Die Rubrik fuehrt ZURUECK zur
     uebergeordneten Seite, ein Weiter-Verweis fuehrt VOR zu einer anderen
     Seite - dieselbe Zeichnung, gespiegelt. Beides als Maske, damit die
     Farbe aus currentColor kommt (siehe unten). */
  :root{
    --pfeil-zurueck:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M7 3 2.5 8 7 13M2.5 8H14' fill='none' stroke='%23000' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    --pfeil-vor:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M9 3 13.5 8 9 13M13.5 8H2' fill='none' stroke='%23000' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    /* Schraeg nach oben rechts: verlaesst die Website, oeffnet ein neues
       Fenster. Dieselbe Aussage wie das bisherige Schriftzeichen "\2197",
       aber gezeichnet - ein Textpfeil haengt daran, dass die geladene
       Schrift ihn fuehrt. */
    --pfeil-aus:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 11.5 11.5 4.5M6 4.5h5.5V10' fill='none' stroke='%23000' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  }
  .page-intro .eyebrow a,
  .page-hero-welle .eyebrow a,
  .page-hero-bild .eyebrow a,
  .wiki-zurueck a{
    color:inherit; text-decoration:none;
    display:inline-flex; align-items:center; gap:0.55em;
    /* Nicht breiter als der Platz - sonst wuerde ein langes Wort nie
       umbrechen muessen und liefe einfach aus der Seite. */
    max-width:100%;
  }
  .page-intro .eyebrow a::before,
  .page-hero-welle .eyebrow a::before,
  .page-hero-bild .eyebrow a::before,
  .wiki-zurueck a::before{
    content:""; flex-shrink:0;
    /* An der Schriftgroesse der Rubrik gemessen, nicht in Pixeln: Der Pfeil
       soll so gross sein wie die Versalien daneben. */
    width:0.95em; height:0.95em;
    background-color:currentColor;
    -webkit-mask:var(--pfeil-zurueck) no-repeat center / contain;
            mask:var(--pfeil-zurueck) no-repeat center / contain;
    transition:transform 0.15s ease;
  }
  /* Beim Ueberfahren rueckt der Pfeil ein Stueck zurueck - das ist die
     Rueckmeldung, die vorher die Unterstreichung gab. Zusaetzlich die
     Akzentfarbe, damit es nicht allein an der Bewegung haengt: Wer
     Bewegung abgestellt hat, sieht trotzdem etwas. */
  .page-intro .eyebrow a:hover::before,
  .page-hero-welle .eyebrow a:hover::before,
  .page-hero-bild .eyebrow a:hover::before,
  .wiki-zurueck a:hover::before{transform:translateX(-0.22em);}
  .page-intro .eyebrow a:hover,
  .wiki-zurueck a:hover{color:var(--accent);}
  .page-hero-welle .eyebrow a:hover,
  .page-hero-bild .eyebrow a:hover{color:#fff;}
  @media (prefers-reduced-motion:reduce){
    .page-intro .eyebrow a::before,
    .page-hero-welle .eyebrow a::before,
    .page-hero-bild .eyebrow a::before,
    .wiki-zurueck a::before{transition:none;}
  }

  /* ---- Weiter-Verweis ----
     Dasselbe Prinzip wie bei der Rubrik, nur andersherum: ein Verweis, der
     auf eine andere Seite FUEHRT, traegt den Pfeil hinter sich und keine
     Unterstreichung. Gebraucht am Fuss des Fragebogens ("Triageformular")
     und als Knopf auf der Bestaetigungsseite.

     NICHT fuer jeden Verweis im Fliesstext: Dort ist die Unterstreichung
     richtig, weil ein Wort mitten im Satz sonst nicht als Verweis zu
     erkennen ist. Der Weiter-Verweis steht fuer sich, meist am Ende eines
     Abschnitts, und sagt "hier geht es weiter". */
  .weiter-link{
    display:inline-flex; align-items:center; gap:0.45em;
    text-decoration:none; color:var(--accent);
    /* Halbfett (Chefarzt, 26.09.2026: "bitte auch alle diese Links in
       Halbfett") - wie die Bildbeschreibungen seit Punkt 269. */
    font-weight:600;
  }
  .weiter-link::after{
    content:""; flex-shrink:0;
    width:0.95em; height:0.95em;
    background-color:currentColor;
    -webkit-mask:var(--pfeil-vor) no-repeat center / contain;
            mask:var(--pfeil-vor) no-repeat center / contain;
    transition:transform 0.15s ease;
  }
  .weiter-link:hover::after{transform:translateX(0.22em);}
  /* Fuehrt der Verweis aus der Website HINAUS und oeffnet ein neues Fenster,
     zeigt der Pfeil schraeg nach oben - geradeaus hiesse "hier geht es
     weiter", und das stimmt dann nicht mehr. Beim Ueberfahren rueckt er
     entsprechend schraeg. */
  .weiter-link.fuehrt-hinaus::after{
    -webkit-mask-image:var(--pfeil-aus); mask-image:var(--pfeil-aus);
  }
  .weiter-link.fuehrt-hinaus:hover::after{transform:translate(0.16em, -0.16em);}
  /* Im Knopf bringt .btn schon Ausrichtung und Abstand mit - hier fehlt nur
     das Zeichen. Es faerbt sich mit der Knopfschrift, also weiss auf dem
     vollen und Textfarbe auf dem Geisterknopf. */
  .btn-weiter::after{
    content:""; flex-shrink:0;
    width:1em; height:1em;
    background-color:currentColor;
    -webkit-mask:var(--pfeil-vor) no-repeat center / contain;
            mask:var(--pfeil-vor) no-repeat center / contain;
    transition:transform 0.15s ease;
  }
  .btn-weiter:hover::after{transform:translateX(0.18em);}
  @media (prefers-reduced-motion:reduce){
    .weiter-link::after, .btn-weiter::after{transition:none;}
  }

/* ---- Verweise im uebernommenen Fliesstext ---- */
  /* Global gilt a{color:inherit}. Fuer die Navigation ist das richtig, im
     Fliesstext nicht: Dort blieb vom Verweis nur die Unterstreichung, und die
     allein liest sich wie eine Hervorhebung. mit_verweisen() setzt deshalb die
     Klasse, und nur sie wird hier ausgezeichnet. */
  a.verweis{
    color:var(--accent); text-decoration:underline;
    text-decoration-thickness:1px; text-underline-offset:2px;
    text-decoration-color:var(--accent-tint);
  }
  a.verweis:hover{text-decoration-color:currentColor;}
  /* Was das Haus verlaesst, oeffnet in einem neuen Fenster - der Pfeil sagt es
     vorher. aria-hidden waere an einem ::after wirkungslos, deshalb traegt der
     Pfeil keine Bedeutung, die nicht auch im Text steht. */
  a.verweis-extern::after{
    content:""; display:inline-block;
    width:0.72em; height:0.72em; margin-left:0.25em; vertical-align:-0.02em;
    background-color:currentColor;
    -webkit-mask:var(--pfeil-aus) no-repeat center / contain;
            mask:var(--pfeil-aus) no-repeat center / contain;
  }

/* ---- Verweise auf das MediWiki in den Fachbereichskarten ---- */
  /* Bis zu 26 Verweise je Karte: einspaltig, weil die Karte schmal ist, dafuer
     kleiner gesetzt und eng gefuehrt, damit die Liste den Text nicht erschlaegt. */
  .fach-more .prose .fach-wiki{list-style:none; margin:0; padding:0;}
  .fach-wiki li{margin-bottom:2px;}
  .fach-wiki a{
    display:block; padding:4px 0; font-size:0.82rem;
    color:var(--accent); text-decoration:none;
    border-bottom:1px solid var(--line);
  }
  .fach-wiki a:hover{text-decoration:underline;}

/* ---- MediWiki: Gruppierung nach Anfangsbuchstaben ---- */
  /* Die Gruppen sind <section>, greifen sich sonst die 80px Abschnittspolsterung. */
  .wiki-gruppe{padding:0;}
  .wiki-gruppe + .wiki-gruppe{margin-top:30px;}
  .wiki-buchstabe{
    font-family:"IBM Plex Mono", monospace; font-size:0.8rem; font-weight:500;
    letter-spacing:0.12em; color:var(--accent);
    margin:0 0 10px; padding-bottom:8px;
    border-bottom:1px solid var(--accent-fill, var(--line));
  }
  /* Ein Fachgebiet traegt einen ganzen Namen statt eines Buchstabens - es
     bekommt mehr Luft davor und wird nicht gesperrt gesetzt. */
  .wiki-fach{
    font-size:1.05rem; font-weight:600; color:var(--ink);
    margin:0 0 12px; padding-bottom:8px;
    border-bottom:1px solid var(--accent-fill, var(--line));
  }
  .wiki-gruppe + .wiki-gruppe:has(> .wiki-fach){margin-top:44px;}

/* ---- Anfahrtsplan auf der Kontaktseite ---- */
  .anfahrt{margin:0;}
  .anfahrt img{
    width:100%; height:auto; display:block;
    border:1px solid var(--line);
  }
  .anfahrt figcaption{
    font-size:0.88rem; color:var(--ink-muted); margin-top:10px;
    display:flex; justify-content:space-between; gap:18px; flex-wrap:wrap;
  }
  .anfahrt figcaption a{color:var(--ink-muted);}
  .anfahrt figcaption a:hover{color:var(--accent);}
  /* Im Dark Mode ist die Karte als einziges helles Feld zu grell. */
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]) .anfahrt img{filter:brightness(0.88) saturate(0.9);}
  }
  :root[data-theme="dark"] .anfahrt img{filter:brightness(0.88) saturate(0.9);}

/* ---- International: Uebersichtskarte Flughafen - Klinik (25.09.2026) ----
   Links die hochformatige Karte, rechts die drei Wege untereinander. Die
   Karte ist ein Bild (tools/karte-flughafen.py); die beiden Marken liegen
   als HTML darueber, damit ihr Text uebersetzt wird. Der Punkt jeder Marke
   sitzt genau auf der Koordinate (left/top im style-Attribut), die
   Beschriftung steht rechts daneben. Die Karte bleibt auch im Dark Mode
   hell, darum feste Farben statt der Themenvariablen. */
  .transfer-layout{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:32px; align-items:start; margin-top:8px;}
  @media (max-width:820px){ .transfer-layout{grid-template-columns:1fr;} }
  .transfer-wege{display:grid; gap:24px;}
  .karte-marken{position:relative;}
  .karte-marke{
    position:absolute; transform:translate(-8px,-50%);
    display:flex; align-items:center; gap:8px; white-space:nowrap;
    font-size:0.82rem; font-weight:600; line-height:1; color:#1c1c1c;
  }
  .karte-marke::before{
    content:""; width:16px; height:16px; border-radius:50%; flex:none;
    background:#1c1c1c; border:3px solid #fff; box-shadow:0 0 0 1px rgba(0,0,0,.35);
    box-sizing:border-box;
  }
  .karte-marke-ziel::before{background:var(--accent);}
  /* Die Beschriftung auf weissem Grund, sonst geht sie in den Ortsnamen der
     Landeskarte unter. */
  .karte-marke > span{background:rgba(255,255,255,.94); padding:5px 8px; box-shadow:0 1px 3px rgba(0,0,0,.25);}

/* ---- Anfahrt: die drei Aufnahmen unter der Karte ---- */
  .anfahrt-bilder{display:grid; grid-template-columns:repeat(3,1fr); gap:24px; margin-top:36px;}
  @media (max-width:820px){ .anfahrt-bilder{grid-template-columns:1fr; gap:28px;} }
  .anfahrt-bilder figure{margin:0;}
  /* Die drei Vorlagen haben unterschiedliche Seitenverhaeltnisse (400x306 und
     zweimal 600x400); aspect-ratio bringt sie auf eine Linie. height:auto ist
     noetig, sonst gewinnt das height-Attribut des img. */
  .anfahrt-bilder img{
    width:100%; height:auto; aspect-ratio:3/2; object-fit:cover; display:block;
    border:1px solid var(--line);
  }
  .anfahrt-bilder figcaption{font-size:0.88rem; color:var(--ink-muted); margin-top:10px;}
  .anfahrt-bilder figcaption b{color:var(--ink); font-weight:700;}

/* ---- Anfahrt: Regionsbild ueber der Karte ---- */
  .anfahrt-region{margin-bottom:30px;}
  /* Nur eine Haelfte in der Unterschrift - space-between schoebe sie sonst
     ganz nach links, was neben dem breiten Bild verloren wirkt. */
  .anfahrt-region figcaption{justify-content:flex-start;}

/* ---- Aktuelles: Kachelgitter ---- */
  .news-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:28px;}
  @media (max-width:980px){ .news-grid{grid-template-columns:repeat(2,1fr);} }
  @media (max-width:660px){ .news-grid{grid-template-columns:1fr;} }
  .news-card{
    background:var(--surface); border:1px solid var(--line);
    display:flex; flex-direction:column;
  }
  .news-link{
    display:flex; flex-direction:column; height:100%;
    padding:24px; text-decoration:none; color:inherit;
  }
  /* Bildplatz: leer, solange kein Bildmaterial vorliegt. Mit Bild ruecken
     Rand und Innenabstand so, dass es buendig oben sitzt. */
  .news-card:has(.news-bild) .news-link{padding-top:0;}
  .news-bild{
    /* Das Bild soll den Innenabstand der Karte nach beiden Seiten ueberlaufen
       und buendig im Rahmen sitzen. Dazu ist es um die beiden 24px breiter und
       wird per negativem Rand zurueckgezogen.
       max-width:none ist dabei nicht schmueckend, sondern noetig: Die globale
       Regel img{max-width:100%} ganz oben im Stylesheet deckelt sonst genau
       diese Absicht. Sie gewann bisher - das Bild war 354 statt 402 Pixel
       breit, sass links am Rahmen und liess rechts 49 Pixel frei. */
    width:calc(100% + 48px); max-width:none; margin:0 -24px 20px; height:auto;
    aspect-ratio:3/2; object-fit:cover; display:block;
    border-bottom:1px solid var(--line);
  }
  .news-meta{
    font-family:"IBM Plex Mono", monospace; font-size:0.72rem;
    letter-spacing:0.06em; color:var(--slate); margin:0 0 10px;
  }
  /* Erscheinungsdatum ueber dem Titel, wie im Vorbild. Es steht nicht in den
     ausgelieferten Seiten der Quelle, sondern nur in deren Datenbank - siehe
     app/data/erscheinungsdaten.php. */
  .news-datum{
    margin:0 0 6px; font-family:"IBM Plex Mono", monospace;
    font-size:0.72rem; letter-spacing:0.05em; color:var(--slate);
  }
  .news-titel{font-size:1.12rem; line-height:1.3; margin:0 0 10px;}
  .news-anriss{font-size:0.88rem; color:var(--ink-muted); margin:0 0 16px;}
  /* Autorenzeile am Fuss, wie beim Vorbild - margin-top:auto schiebt sie nach
     unten, damit sie in allen Kacheln einer Reihe auf gleicher Hoehe steht. */
  /* Der Fuss der Kachel haengt unten, nicht die Verfasserzeile: Vier der
     44 Kacheln haben keinen Verfasser (die Newsletter-Ausgaben), und dort
     stand "Weiterlesen" bis zu 272 px ueber dem Kartenrand mitten in der
     Luft. Gemessen am 20.09.2026; die uebrigen sassen bei 41 px. */
  .news-autor{margin:0 0 6px; font-size:0.8rem; color:var(--slate);}
  .news-fuss{margin:auto 0 0;}
  .news-extern{
    display:inline-block; margin-left:8px; padding:1px 7px;
    font-family:"IBM Plex Mono", monospace; font-size:0.68rem;
    color:var(--ink-muted); border:1px solid var(--line); border-radius:2px;
  }
  /* Der Abschluss der Kachel: "Weiterlesen" mit dem Pfeil (20.09.2026).
     Gemeldet hat der Chefarzt, dass er fehlt - die Kachel war ganz ein
     Verweis, sagte das aber nirgends.

     KEIN <a>: Die Kachel selbst ist schon einer, und ein Verweis im
     Verweis ist ungueltiges HTML. Der Browser loest es auf, indem er
     den aeusseren zerschneidet - genau der Fehler, der die Flyerbilder
     ins Zickzack brachte (Punkt 182). Hier steht darum ein <span>, das
     aussieht wie ein Verweis und keiner ist. Angeklickt wird ohnehin
     die ganze Kachel. */
  .news-weiter{
    display:inline-flex; align-items:center; gap:0.45em;
    margin:14px 0 0; color:var(--accent); font-size:0.9rem;
    font-weight:600;   /* wie .weiter-link (26.09.2026) */
  }
  .news-weiter::after{
    content:""; flex-shrink:0;
    width:0.95em; height:0.95em;
    background-color:currentColor;
    -webkit-mask:var(--pfeil-vor) no-repeat center / contain;
            mask:var(--pfeil-vor) no-repeat center / contain;
    transition:transform 0.15s ease;
  }
  .news-link:hover .news-weiter::after{transform:translateX(0.22em);}
  /* Fuehrt die Kachel hinaus, zeigt der Pfeil schraeg nach oben und
     wandert beim Ueberfahren auch schraeg - dieselbe Sprache wie bei
     "Route planen" (Punkt 172). */
  .news-link.fuehrt-hinaus .news-weiter::after{
    -webkit-mask-image:var(--pfeil-aus);
            mask-image:var(--pfeil-aus);
  }
  .news-link.fuehrt-hinaus:hover .news-weiter::after{transform:translate(0.18em, -0.18em);}
  .news-card:hover{border-color:var(--ink-muted);}
  .news-card:hover .news-titel{color:var(--accent);}
  .page-intro .news-meta{margin-top:-18px;}

/* ---- Dateityp-Marke in der Fusszeile ---- */
  .dateityp{
    display:inline-block; margin-left:6px; padding:0 5px;
    font-family:"IBM Plex Mono", monospace; font-size:0.62rem;
    letter-spacing:0.06em; color:var(--ink-muted);
    border:1px solid var(--line); border-radius:2px;
    vertical-align:0.1em;
  }

/* ---- SGK-Akademie (20.09.2026, Punkt 198) ----
   Nachbau von health.sgk.swiss/de-CH/lehre-forschung. Fast alles kommt aus
   dem Bestand: Die Vortragskarten sind .fach-card (dieselbe Karte wie bei
   den Spezial-Sprechstunden), die Unterseiten .info-card, das Formular ist
   das Anmeldeformular. Neu ist nur, was ein Vortrag mehr hat als ein Text -
   ein Datum, eine Angabenliste und die Aufzeichnungen. */

  /* Das Datum steht ueber dem Titel der Karte, klein und in Versalien wie
     die Rubrikzeilen. Es ist der Grund, warum jemand hinsieht: Bei einem
     Termin entscheidet sich am Datum, ob die Karte einen angeht. */
  .vortrag-datum{
    margin:0 0 4px; font-family:"IBM Plex Mono", monospace;
    font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase;
    color:var(--accent);
  }
  .info-card .vortrag-datum{margin-bottom:6px;}

  .vortrag-bild{
    display:block; width:100%; height:auto; margin:0 0 28px;
    border-radius:2px;
  }

  /* Die Angaben zum Event: Bezeichnung und Wert, mit derselben Haarlinie wie
     die uebrigen Aufzaehlungen der Website. Einspaltig auf dem Telefon,
     zweispaltig ab 560px - ein Wert unter seiner Bezeichnung liest sich auf
     schmalem Schirm besser als eine 8ch-Spalte, in der jedes Wort umbricht. */
  .vortrag-angaben{margin:0 0 28px;}
  .vortrag-angaben dt{
    padding-top:12px; border-top:1px solid var(--line);
    font-size:0.78rem; letter-spacing:0.06em; text-transform:uppercase;
    color:var(--ink-muted);
  }
  .vortrag-angaben dd{margin:0 0 12px; padding-top:2px;}
  @media (min-width:560px){
    /* column-gap:0 und stattdessen Polsterung am Wert: Mit einem Spalten-
       abstand klafft die Haarlinie zwischen Bezeichnung und Wert auseinander -
       zwei Striche je Zeile statt einem. */
    .vortrag-angaben{
      display:grid; grid-template-columns:9.5rem 1fr; column-gap:0;
      align-items:start;
    }
    .vortrag-angaben dt{grid-column:1; padding-right:24px;}
    .vortrag-angaben dd{grid-column:2; padding-top:12px; padding-left:24px; border-top:1px solid var(--line);}
  }

  /* Anmeldung obligatorisch - der eine Satz, an dem das Event haengt. Kein
     Kasten und keine Farbflaeche: Die Website warnt sonst nirgends mit Farbe,
     und ein einzelner roter Balken laese sich wie eine Fehlermeldung. */
  .vortrag-pflicht{
    margin:28px 0 0; padding-left:16px;
    border-left:2px solid var(--accent);
  }

  /* Ein Vortrag, der vorbei ist. Steht GANZ OBEN auf seiner Seite, vor dem
     Text: Wer von einem alten Verweis kommt, soll es lesen, bevor er sich
     das Datum merkt. */
  .vortrag-vorbei{
    margin:0 0 24px; padding:14px 16px;
    background:var(--surface-2); border:1px solid var(--line);
    color:var(--ink-muted); font-size:0.92rem;
  }
  .vortrag-leer{max-width:62ch; color:var(--ink-muted);}

  /* ---- Aufzeichnungen ----
     Haarlinien wie bei den Zusagen, den Rubriken und den Zahlen. Die
     Aufnahmen selbst liegen nicht hier: Ein eingebettetes YouTube-Fenster
     setzt beim blossen Aufruf Cookies von Google, und diese Website kommt
     ohne Einwilligungsbanner aus. Darum Verweise mit schraegem Pfeil. */
  .aufzeichnungen{display:grid; grid-template-columns:1fr; gap:0;}
  .aufzeichnung{
    padding:22px 0; border-top:1px solid var(--line);
  }
  .aufzeichnung:last-child{border-bottom:1px solid var(--line);}
  .aufzeichnung-datum{
    margin:0 0 4px; font-family:"IBM Plex Mono", monospace;
    font-size:0.72rem; letter-spacing:0.08em; color:var(--ink-muted);
  }
  .aufzeichnung-titel{
    margin:0; font-family:"Fraunces", serif; font-size:1.25rem; line-height:1.25;
  }
  .aufzeichnung-unterzeile{margin:4px 0 0; color:var(--ink-muted); font-size:0.92rem;}
  .aufzeichnung-referenten{margin:6px 0 0; font-size:0.92rem;}
  .aufzeichnung-hinweis{
    margin:8px 0 0; color:var(--ink-muted); font-size:0.86rem; max-width:62ch;
  }
  /* Jede Aufnahme auf eigener Zeile: Zwei Verweise nebeneinander stuenden
     auf dem Telefon uebereinander, aber ohne Abstand - und der Pfeil des
     ersten saesse dann mitten im Satz des zweiten. */
  .aufzeichnung-medien{margin:12px 0 0; display:flex; flex-direction:column; gap:6px; align-items:flex-start;}
  /* Verweis und Dateimarke bilden ein Paar, das zusammen umbricht - nicht
     mitten zwischen "Skript zum Vortrag" und "PDF . 13 MB". */
  .aufzeichnung-medium{display:inline-flex; align-items:baseline; gap:2px;}
  /* Lageplan und Aussenansicht der Galerie. height:auto ist noetig, sonst
     gewinnt das height-Attribut des img und das Bild wird gestreckt. */
  .akademie-plan{margin:0 0 28px;}
  .akademie-plan img{display:block; width:100%; height:auto; border:1px solid var(--line);}
  .akademie-plan figcaption{
    margin-top:8px; color:var(--ink-muted); font-size:0.88rem;
  }

/* ---- Auslöseseite für die Präsenzlisten (20.09.2026, Punkt 201) ----
   Interne Seite hinter einem geheimen Schlüssel. Haarlinien wie überall
   sonst; je Vortrag eine Zeile mit Zahl links und Knopf rechts. */
  /* Dieselbe Spaltenbreite wie der Text darueber (.textseite): Eine Liste,
     die ueber die volle Seite laeuft, waehrend der Text auf halber Breite
     endet, sieht aus wie zwei Seiten uebereinander. */
  .praesenz-liste{display:grid; grid-template-columns:1fr; gap:0; margin:36px 0; max-width:74ch;}
  .praesenz-zeile{
    display:flex; flex-wrap:wrap; gap:16px 24px;
    align-items:center; justify-content:space-between;
    padding:20px 0; border-top:1px solid var(--line);
  }
  .praesenz-zeile:last-child{border-bottom:1px solid var(--line);}
  .praesenz-titel{
    margin:2px 0 0; font-family:"Fraunces", serif; font-size:1.25rem; line-height:1.25;
  }
  .praesenz-zahl{margin:6px 0 0; color:var(--ink-muted); font-size:0.92rem;}
  .praesenz-zahl strong{color:var(--ink); font-size:1.05rem;}
  .praesenz-zeile form{margin:0;}
  /* Ein Knopf, der nichts auslösen kann, soll auch nicht danach aussehen. */
  .praesenz-zeile button[disabled]{opacity:0.45; cursor:not-allowed;}

  /* Die Rückmeldung nach dem Senden. .form-hinweis ist der Fehlerton der
     Formulare; hat es geklappt, tritt er zurück. */
  .form-hinweis.hinweis-gut{
    border-left-color:var(--ink-muted); background:var(--surface-2); color:var(--ink);
  }

/* ---- Chronik der Klinik (20.09.2026, Punkt 202) ----
   Jahreszahl links, Ereignis rechts, Haarlinie je Zeile - dieselbe Sprache
   wie die Vortragsdaten und die Aufzeichnungen der Akademie.

   Die Jahreszahl steht in der Schreibmaschinenschrift und ist NICHT rot:
   Rot trägt auf dieser Website die Handlung (Knopf, Verweis), nicht die
   Behauptung - derselbe Entscheid wie bei den Zahlen der Startseite. */
/* ---- Ablauf eines Aufenthalts (/internationale-gaeste) ---- */
  /* Derselbe Aufbau wie die Chronik darunter - links die Marke, rechts der
     Text -, aber eigene Klassen, und zwar aus einem Grund: Die linke Spalte
     traegt hier WOERTER ("Vor der Anreise") statt vierstelliger Jahreszahlen.
     Sie muss breiter sein und darf umbrechen; die Chronik dagegen lebt davon,
     dass ihre Spalte schmal bleibt. Eine gemeinsame Klasse haette eine der
     beiden Seiten verdorben.

     Die Marke steht wie dort in der Schreibmaschinenschrift und NICHT rot:
     Rot traegt auf dieser Website die Handlung, nicht die Behauptung. */
  .ablauf{list-style:none; margin:0; padding:0; max-width:74ch;}
  .ablauf-zeile{
    display:grid; grid-template-columns:1fr; gap:4px;
    padding:18px 0; border-top:1px solid var(--line);
  }
  .ablauf-zeile:last-child{border-bottom:1px solid var(--line);}
  .ablauf-marke{
    font-family:"IBM Plex Mono", monospace; font-size:0.86rem;
    letter-spacing:0.06em; color:var(--ink-muted);
  }
  .ablauf-text p{margin:0;}
  .ablauf-text .fach-anmeldung{margin-top:8px;}
  @media (min-width:600px){
    .ablauf-zeile{grid-template-columns:10.5rem 1fr; gap:0 24px;}
    .ablauf-marke{font-size:0.92rem;}
  }

  .chronik{list-style:none; margin:0; padding:0; max-width:74ch;}
  .chronik-zeile{
    display:grid; grid-template-columns:1fr; gap:2px;
    padding:18px 0; border-top:1px solid var(--line);
  }
  .chronik-zeile:last-child{border-bottom:1px solid var(--line);}
  .chronik-jahr{
    font-family:"IBM Plex Mono", monospace; font-size:0.86rem;
    letter-spacing:0.06em; color:var(--ink-muted);
  }
  .chronik-text{color:var(--ink);}
  .chronik-text strong{font-weight:600;}
  /* Ab 560px nebeneinander. Die Spalte ist breit genug für vier Ziffern und
     bleibt es auch, wenn ein Eintrag einmal "Ende der 1980er" heisst. */
  @media (min-width:560px){
    .chronik-zeile{grid-template-columns:7.5rem 1fr; gap:0 24px; align-items:baseline;}
    .chronik-jahr{font-size:0.92rem;}
  }
