/* ⚠ KORREKTUR gegenueber der gelieferten Fassung (Claude Code, 02.09.2026)
   ".mvr-namenszug img" hat die Spezifitaet (0,1,1) und ueberstimmt damit
   ".mvr-zeichen" (0,1,0). Das Zeichen wurde dadurch auf 20 px Hoehe
   gezwungen (Telefon 14 px) statt auf die vorgegebenen 100x83 bzw. 72x60 —
   gemessen 17x14 px. Behoben mit :not(.mvr-zeichen) an 3 Stellen.
   Die gelieferte Fassung liegt daneben als mvr.css.geliefert. */

/* =========================================================================
   mvr.css — Template mvrhamburg, Joomla 6.1.3
   Die EINZIGE Quelle der Wahrheit für Maße und Farben.
   Entwurf A „Perspektive“, Stand 01.09.2026.
   Kein Aufruf fremder Server. Kein prefers-color-scheme (siehe 30-NICHT-GEBAUT).
   ========================================================================= */

/* --- Schrift, lokal ------------------------------------------------------ */
@font-face { font-family:"Source Serif 4"; src:url(../fonts/SourceSerif4-Regular.woff2) format("woff2");
  font-weight:400; font-style:normal; font-display:swap; }
@font-face { font-family:"Source Sans 3"; src:url(../fonts/SourceSans3-Regular.woff2) format("woff2");
  font-weight:400; font-style:normal; font-display:swap; }
/* ⚠ Source Sans 3 ist eine variable Schrift: Googles Latin-Ausschnitt fuer
   400 und 700 ist byteweise DIESELBE Datei. Deshalb zeigt auch der fette
   Schnitt auf SourceSans3-Regular.woff2 — eine eigene Bold-Datei gibt es
   nicht, der Verweis darauf lief ins Leere (HTTP 404), und fetter Text fiel
   auf die Ersatzschrift zurueck. Spart nebenbei 28 kB. */
@font-face { font-family:"Source Sans 3"; src:url(../fonts/SourceSans3-Regular.woff2) format("woff2");
  font-weight:700; font-style:normal; font-display:swap; }
@font-face { font-family:"Source Sans 3"; src:url(../fonts/SourceSans3-It.woff2) format("woff2");
  font-weight:400; font-style:italic; font-display:swap; }

/* --- Farben als Rollen -------------------------------------------------- */
:root {
  --mvr-grund:#FFFFFF;
  --mvr-grund-sand:#FBEAD4;
  --mvr-text:#324958;
  --mvr-text-stark:#1D3849;
  --mvr-text-leise:#475F6F;
  --mvr-akzent:#725229;
  --mvr-flaeche-dunkel:#1D3849;
  --mvr-flaeche-dunkel-2:#324958;
  --mvr-schrift-auf-dunkel:#FBEAD4;
  --mvr-schrift-auf-dunkel-2:#D0B798;
  --mvr-linie:#D0B798;
  --mvr-linie-leise:#FBEAD4;
  --mvr-linie-dunkel:#475F6F;
  --mvr-zier:#AD906B;
  --mvr-knopf:#1D3849;
  --mvr-knopf-text:#FBEAD4;
  --mvr-knopf-hell:#FBEAD4;
  --mvr-knopf-hell-text:#1D3849;
  --mvr-feldrahmen:#8997A1;
  --mvr-blau-hell:#B3C4CF;            /* Füllung der Kreispunkte, gleicher Farbton aufgehellt */

  --mvr-inhalt:1120px;
  --mvr-rand:160px;
  --mvr-serif:"Source Serif 4",Georgia,serif;
  --mvr-sans:"Source Sans 3","Helvetica Neue",Helvetica,Arial,sans-serif;
}

/* ── Schriftgrößen ──────────────────────────────────────────────────
 *
 * ERZEUGT von scripts/schriftgroessen.py — die Werte sind die, die vor
 * der Umstellung fest in den Regeln standen. Am Aussehen ändert sich
 * dadurch nichts.
 *
 * ⚠ Nur außerhalb der Medienabfragen. Auf dem Telefon behalten die
 *   Bauteile ihre eigenen, kleineren Werte — siehe das Skript.
 */
:root {
  --mvr-gross:   62px;    /* Große Überschrift */
  --mvr-mittel:  30px;    /* Zwischenüberschrift */
  --mvr-bedien:  17px;    /* Menü und Knöpfe */
  --mvr-lesen:   16px;    /* Fließtext */
  --mvr-klein:   13px;    /* Nebentext */
}

/* ── Schrift je Bauteil ─────────────────────────────────────────────
 *
 * ERZEUGT von scripts/bauteilschriften.py.
 *
 * Jedes Bauteil hat eine eigene Schrift. Vorgabe ist die Grundschrift,
 * die es bisher benutzt hat — am Aussehen ändert sich dadurch nichts.
 *
 * ⚠ Wer die Grundschrift ändert, ändert alle Bauteile mit, die noch
 *   auf ihr stehen. Wer ein einzelnes Bauteil umstellt, löst es aus
 *   dieser Bindung.
 */
:root {
  --mvr-gross-schrift:     var(--mvr-serif);
  --mvr-mittel-schrift:    var(--mvr-serif);
  --mvr-bedien-schrift:    var(--mvr-sans);
  --mvr-lesen-schrift:     var(--mvr-sans);
  --mvr-klein-schrift:     var(--mvr-sans);
}


/* --- Grundlagen --------------------------------------------------------- */
*,*::before,*::after { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; }
body { margin:0; }
img,svg { max-width:100%; }
:focus-visible { outline:2px solid var(--mvr-akzent); outline-offset:2px; }

/* Alles Anklickbare kommt dem Zeiger leicht entgegen: 2 px Anhebung in 160 ms.
   Wer Bewegung reduziert haben möchte, bekommt nur den Farbwechsel (siehe unten). */
a, button, summary, .mvr-knopf, .mvr-liste-kachel, .mvr-akkordeon-balken,
.mvr-nav-link, .mvr-verweis, .mvr-toc-link {
  transition:transform .16s ease, background-color .16s ease, color .16s ease, border-color .16s ease; }
a:hover, button:hover, summary:hover, .mvr-knopf:hover, .mvr-liste-kachel:hover,
.mvr-akkordeon-balken:hover, .mvr-nav-link:hover, .mvr-verweis:hover, .mvr-toc-link:hover {
  transform:translateY(-2px); }
/* Nicht bei den Eingabefeldern und nicht bei der Einwilligung — dort wäre es Unruhe. */
.mvr-eingabe:hover, .mvr-einwilligung:hover { transform:none; }

@media (prefers-reduced-motion:reduce) {
  a, button, summary, .mvr-knopf, .mvr-liste-kachel, .mvr-akkordeon-balken,
  .mvr-nav-link, .mvr-verweis, .mvr-toc-link { transition:none; }
  a:hover, button:hover, summary:hover, .mvr-knopf:hover, .mvr-liste-kachel:hover,
  .mvr-akkordeon-balken:hover, .mvr-nav-link:hover, .mvr-verweis:hover,
  .mvr-toc-link:hover { transform:none; }
}

a { color:var(--mvr-akzent); text-decoration:underline; text-underline-offset:2px; }
a:hover { color:var(--mvr-text-stark); }

.mvr-sprunglink { position:absolute; left:-9999px; top:0; z-index:99;
  background:var(--mvr-grund-sand); color:var(--mvr-text-stark); padding:14px 20px; font:400 var(--mvr-lesen)/1 var(--mvr-lesen-schrift); }
.mvr-sprunglink:focus { left:0; }

.mvr-nur-vorlesen { position:absolute; width:1px; height:1px; margin:-1px; padding:0;
  overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }

.mvr-seite { font:400 18px/1.68 var(--mvr-lesen-schrift); color:var(--mvr-text);
  background:var(--mvr-grund); overflow-x:hidden; }

.mvr-inhalt { max-width:var(--mvr-inhalt); margin:0 auto; padding-inline:0; }

/* --- Kopfleiste --------------------------------------------------------- */
.mvr-kopfleiste { height:112px; background:var(--mvr-flaeche-dunkel);
  display:flex; align-items:center; justify-content:space-between; gap:24px;
  padding-inline:var(--mvr-rand); }
.mvr-zeichen { width:100px; height:83px; flex:none; display:block; }
.mvr-namenszug { display:flex; align-items:center; gap:20px; }
.mvr-namenszug img:not(.mvr-zeichen) { height:20px; width:auto; display:block; }
.mvr-hauptnav { display:flex; gap:28px; align-items:center; }
.mvr-nav-link { font-size:14px; letter-spacing:.1em; text-transform:uppercase;
  color:var(--mvr-schrift-auf-dunkel-2); text-decoration:none; }
.mvr-nav-link:hover,.mvr-nav-link:focus-visible { color:var(--mvr-schrift-auf-dunkel); text-decoration:underline; }
/* Die Klapptaste steht in JEDER Breite — auf dem Bildschirm mit dem Wort „Menü“
   neben den drei Strichen, damit niemand die Navigation suchen muss. */
.mvr-klapptaste { display:flex; align-items:center; gap:12px; border:0; background:none;
  padding:0 0 0 28px; border-left:1px solid var(--mvr-linie-dunkel);
  color:var(--mvr-schrift-auf-dunkel-2); font:400 var(--mvr-klein)/1 var(--mvr-klein-schrift);
  letter-spacing:.14em; text-transform:uppercase; cursor:pointer; }
.mvr-klapptaste-striche { width:44px; height:44px; flex:none;
  display:flex; flex-direction:column; justify-content:center; gap:6px; }
.mvr-klapptaste-striche span { display:block; height:2px; background:var(--mvr-schrift-auf-dunkel-2); }
.mvr-klapptaste:hover { color:var(--mvr-schrift-auf-dunkel); }
.mvr-klapptaste:hover .mvr-klapptaste-striche span { background:var(--mvr-schrift-auf-dunkel); }
.mvr-klappnav { display:none; background:var(--mvr-flaeche-dunkel-2); }
.mvr-klappnav[data-offen] { display:block; }
.mvr-klappnav a { display:flex; align-items:center; min-height:56px; padding-inline:20px;
  color:var(--mvr-schrift-auf-dunkel); text-decoration:none; font-size:var(--mvr-bedien);
  border-bottom:1px solid var(--mvr-linie-dunkel); }
/* Zwischentitel in der Klappnavigation („Geschützter Bereich“, „Website“) */
.mvr-klappnav-titel { padding:16px 20px 6px; font-size:12px; letter-spacing:.12em;
  text-transform:uppercase; color:var(--mvr-schrift-auf-dunkel-2); }
/* Angemeldet: Name als erste Zeile der Klappnavigation, Punkt auf der Klapptaste */
.mvr-klappnav-benutzer { display:flex; align-items:center; gap:12px; min-height:64px;
  padding:12px 20px; border-bottom:1px solid var(--mvr-linie-dunkel); }
.mvr-klapptaste { position:relative; }
.mvr-klapptaste[data-angemeldet]::after { content:""; position:absolute; top:2px; right:2px;
  width:9px; height:9px; border-radius:50%; background:var(--mvr-schrift-auf-dunkel); }
.mvr-benutzer { display:flex; align-items:center; gap:10px;
  padding-left:24px; border-left:1px solid var(--mvr-linie-dunkel);
  color:var(--mvr-schrift-auf-dunkel-2); font-size:15px; }
.mvr-benutzer-kuerzel { width:26px; height:26px; border-radius:50%; background:var(--mvr-linie-dunkel);
  color:var(--mvr-schrift-auf-dunkel); display:flex; align-items:center; justify-content:center; font-size:12px; }
.mvr-geschuetzt-nav { height:44px; background:var(--mvr-flaeche-dunkel-2);
  display:flex; align-items:center; gap:28px; padding-inline:var(--mvr-rand);
  font-size:14px; color:var(--mvr-schrift-auf-dunkel); }

/* --- Bühne -------------------------------------------------------------- */
.mvr-buehne { background:var(--mvr-flaeche-dunkel); padding:88px var(--mvr-rand) 96px;
  display:grid; grid-template-columns:1fr 420px; gap:80px; align-items:center; }
.mvr-buehne-titel { margin:0 0 32px; font:400 var(--mvr-gross)/1.08 var(--mvr-gross-schrift);
  color:var(--mvr-schrift-auf-dunkel); text-wrap:pretty; }
.mvr-buehne-fuchs { width:420px; height:420px; border-radius:50%; object-fit:cover; display:block; }
.mvr-zierstrich { width:72px; height:2px; background:var(--mvr-zier); margin-bottom:32px; }

/* --- Knöpfe ------------------------------------------------------------- */
.mvr-knopf { display:inline-flex; align-items:center; justify-content:center;
  min-height:56px; padding:16px 32px; background:var(--mvr-knopf); color:var(--mvr-knopf-text);
  border:0; font:400 var(--mvr-bedien)/1 var(--mvr-bedien-schrift); letter-spacing:.06em; text-decoration:none; cursor:pointer; }
.mvr-knopf:hover { background:var(--mvr-flaeche-dunkel-2); color:var(--mvr-knopf-text); }
.mvr-knopf--rand { background:none; border:1px solid var(--mvr-linie); color:var(--mvr-schrift-auf-dunkel); }
.mvr-knopf--rand:hover { background:var(--mvr-linie); color:var(--mvr-text-stark); }
.mvr-knopf--hell { background:var(--mvr-knopf-hell); color:var(--mvr-knopf-hell-text); }
.mvr-knopf--hell:hover { background:var(--mvr-schrift-auf-dunkel-2); color:var(--mvr-knopf-hell-text); }
.mvr-knopf--voll { display:flex; width:100%; }

/* --- Abschnitte --------------------------------------------------------- */
.mvr-abschnitt { padding:96px var(--mvr-rand); }
.mvr-abschnitt--sand { background:var(--mvr-grund-sand); padding-top:88px; }
.mvr-abschnitt--dunkel { background:var(--mvr-flaeche-dunkel); color:var(--mvr-schrift-auf-dunkel); }
.mvr-augenbraue { font-size:var(--mvr-klein); letter-spacing:.16em; text-transform:uppercase;
  color:var(--mvr-akzent); margin-bottom:36px; }
.mvr-dreisatz { display:grid; grid-template-columns:repeat(3,1fr); gap:48px; }
.mvr-fliesstext { margin:0 0 16px; font-size:18px; line-height:1.68; max-width:68ch; text-wrap:pretty; }

/* --- Fuchs-Folge -------------------------------------------------------- */
/* Fünf Spalten: drei Stufen, dazwischen zwei Pfeilspalten. Der Pfeil steht also
   NUR zwischen den Stufen — nach der dritten kommt keiner, dort endet die Aussage.
   Reihenweises Raster (Bilder in Reihe 1, Unterschriften in Reihe 2), damit die
   Unterschriften auf einer Linie beginnen, auch bei ungleicher Länge. */
.mvr-folge { display:grid; grid-template-columns:1fr 56px 1fr 56px 1fr;
  column-gap:24px; row-gap:24px; align-items:start; }
/* Blockpfeil als SVG im Markup (Schaft + Spitze, eine Fläche in --mvr-akzent).
   Kein Textzeichen mehr: die Form ist in jeder Schrift gleich und lässt sich
   für das Telefon einfach um 90° gedreht ausliefern.
     quer:    viewBox="0 0 56 28"  path="M0 9 H32 V1 L56 14 L32 27 V19 H0 Z"
     abwärts: viewBox="0 0 28 56"  path="M9 0 H19 V32 H27 L14 56 L1 32 H9 Z" */
.mvr-folge-pfeil { align-self:start; width:48px; height:auto; display:block;
  margin:8px auto 0; }
.mvr-folge-pfeil path { fill:var(--mvr-akzent); }
.mvr-folge-bild { width:100%; aspect-ratio:1; border-radius:50%; object-fit:cover; display:block; }
/* Der Text sitzt IM Pfeil: ein dunkles Band, rechts zur Spitze beschnitten.
   Reines CSS, keine Grafik — der Text bleibt Text, markierbar und durchsuchbar.
   Browser ohne clip-path zeigen ein rechteckiges Band; das ist unschädlich. */
.mvr-folge-text { font:400 23px/1.4 var(--mvr-mittel-schrift); color:var(--mvr-text-stark);
  text-wrap:pretty; }
.mvr-folge-text { font:400 23px/1.4 var(--mvr-mittel-schrift); color:var(--mvr-text-stark); }

/* --- Drei Karten -------------------------------------------------------- */
.mvr-karten { display:grid; grid-template-columns:repeat(3,1fr); gap:40px; }
.mvr-karte { border:1px solid var(--mvr-linie); padding:36px 32px 40px;
  display:flex; flex-direction:column; gap:24px; }
.mvr-karte-titel { margin:0; font:400 var(--mvr-mittel)/1.25 var(--mvr-mittel-schrift); color:var(--mvr-text-stark); }
.mvr-karte-grafik { width:100%; height:auto; display:block; }
.mvr-karte-text { margin:0; font-size:var(--mvr-bedien); line-height:1.6; }

/* --- Die 93 Leistungen -------------------------------------------------- */
.mvr-leistungen { padding:0 var(--mvr-rand) 96px; }
.mvr-leistungen-kopf { display:flex; align-items:baseline; justify-content:space-between; gap:40px;
  border-top:1px solid var(--mvr-linie); padding-top:40px; margin-bottom:36px; }
.mvr-leistungen-kopf h2 { margin:0; font:400 38px/1.2 var(--mvr-mittel-schrift); color:var(--mvr-text-stark); }
.mvr-leistungen-zahlen { font-size:15px; color:var(--mvr-text-leise); }
.mvr-akkordeon { display:flex; flex-direction:column; gap:10px; }
.mvr-akkordeon-balken { min-height:68px; background:var(--mvr-flaeche-dunkel);
  color:var(--mvr-schrift-auf-dunkel); padding:22px 28px; cursor:pointer;
  display:flex; align-items:center; justify-content:space-between; gap:24px; list-style:none; }
.mvr-akkordeon-balken::-webkit-details-marker { display:none; }
.mvr-akkordeon-balken:hover { background:var(--mvr-flaeche-dunkel-2); }
.mvr-akkordeon-nr { width:26px; height:26px; flex:none; display:flex; align-items:center;
  justify-content:center; border:1px solid var(--mvr-linie-dunkel);
  font-size:14px; color:var(--mvr-schrift-auf-dunkel-2); margin-right:18px; }
.mvr-akkordeon-titel { font-size:21px; line-height:1.3; }
.mvr-akkordeon-anzahl { font-size:14px; letter-spacing:.08em; color:var(--mvr-schrift-auf-dunkel-2); }
.mvr-akkordeon-zeichen { width:16px; text-align:center; font-size:20px;
  color:var(--mvr-schrift-auf-dunkel-2); }
.mvr-akkordeon-zeichen::after { content:"+"; }
details[open] .mvr-akkordeon-zeichen::after { content:"\2013"; }
.mvr-akkordeon-fach { border:1px solid var(--mvr-linie); border-top:0; padding:32px 28px 36px; }
.mvr-akkordeon-hinweis { font-size:14px; font-style:italic; color:var(--mvr-akzent); margin-bottom:24px; }
.mvr-liste { column-count:2; column-gap:56px; margin:0; padding:0; list-style:none; }
.mvr-liste-zeile { break-inside:avoid; padding:9px 0; display:flex; gap:10px; align-items:baseline;
  font-size:var(--mvr-lesen); line-height:1.45; }
/* Führungslinie: schließt die Zeile bis zum Spaltenrand ab. Leeres <span> im Markup. */
.mvr-liste-linie { flex:1; min-width:24px; border-bottom:1px dotted var(--mvr-zier);
  transform:translateY(-5px); }
/* Zeilenabschluss: Kacheln mit den Nummern der anderen Kategorien.
   Dieselbe Form wie .mvr-akkordeon-nr auf dem Balken — daran ist der Bezug ablesbar. */
.mvr-liste-auch { flex:none; display:flex; gap:4px; }
/* Die Kachel ist ein Knopf: sie öffnet die Zielkategorie und scrollt dorthin.
   Ohne JavaScript bleibt sie ein Anker auf #kategorie-N (die Kategorien sind
   <details>, :target öffnet sie) — deshalb als <a> ausgeliefert, nicht <button>. */
.mvr-liste-kachel { width:22px; height:22px; padding:0; box-sizing:border-box;
  display:flex; align-items:center; justify-content:center; flex:none;
  background:var(--mvr-grund-sand); border:1px solid var(--mvr-linie);
  font:400 var(--mvr-klein)/1 var(--mvr-klein-schrift); color:var(--mvr-akzent);
  text-decoration:none; cursor:pointer; }
.mvr-liste-kachel:hover { background:var(--mvr-flaeche-dunkel);
  border-color:var(--mvr-flaeche-dunkel); color:var(--mvr-schrift-auf-dunkel); }
.mvr-liste-kachel:focus-visible { outline:2px solid var(--mvr-akzent); outline-offset:2px; }
.mvr-leistungen-hinweis { margin:0 0 28px; font-size:var(--mvr-bedien); line-height:1.65;
  color:var(--mvr-text-leise); max-width:88ch; }
/* Die Einleitung kommt seit dem 06.09.2026 aus einem Editor und kann
   Absaetze und Listen tragen. Als <div> braucht sie dann Regeln fuer ihre
   Kinder — ohne die brechen deren eigene Raender den Abstand nach unten
   auf und die Zeile steht schief unter der Ueberschrift. */
.mvr-leistungen-hinweis > :first-child { margin-top:0; }
.mvr-leistungen-hinweis > :last-child  { margin-bottom:0; }
.mvr-leistungen-hinweis p  { margin:0 0 .85em; }
.mvr-leistungen-hinweis ul,
.mvr-leistungen-hinweis ol { margin:0 0 .85em; padding-left:1.4em; }
.mvr-leistungen-hinweis li { margin:0 0 .3em; }
.mvr-leistungen-hinweis a  { color:var(--mvr-akzent); }

/* --- Kontakt ------------------------------------------------------------ */
/* Der Fuchs als Hintergrund, von rechts einlaufend und stark abgedunkelt:
   das Motiv ist das eigene Zeichen, kein fremdes Bild. Die Abdunkelung liegt als
   Verlauf DARÜBER, damit die Schrift links auf ruhigem Grund steht (10,40:1);
   rechts bleibt der Fuchs eben erkennbar. Auf dem Telefon läuft er von unten ein. */
.mvr-kontakt { padding:104px var(--mvr-rand); background:
  linear-gradient(100deg, var(--mvr-flaeche-dunkel) 0%, rgba(29,56,73,.97) 38%,
    rgba(29,56,73,.78) 70%, rgba(29,56,73,.62) 100%),
  url(/images/Logos/fuchs-scharf-840.webp) right center/cover no-repeat,
  var(--mvr-flaeche-dunkel); }
.mvr-kontakt > div { padding:64px 0; max-width:820px;
  display:flex; flex-direction:column; align-items:flex-start; gap:36px; }
.mvr-kontakt-titel { margin:0; max-width:900px; font:400 42px/1.22 var(--mvr-mittel-schrift);
  color:var(--mvr-schrift-auf-dunkel); text-wrap:pretty; }
.mvr-verweise { display:flex; flex-wrap:wrap; justify-content:center; align-items:center;
  gap:10px 18px; font-size:15px; }
.mvr-verweis { color:var(--mvr-schrift-auf-dunkel-2); text-decoration:none; letter-spacing:.04em; }
.mvr-verweis:hover { color:var(--mvr-schrift-auf-dunkel); text-decoration:underline; }
.mvr-trenner { color:var(--mvr-zier); }

/* --- Formulare ---------------------------------------------------------- */
.mvr-formular { display:flex; flex-direction:column; gap:20px; }
.mvr-feldpaar { display:grid; grid-template-columns:1fr 1fr; gap:20px; }
.mvr-feld { display:flex; flex-direction:column; gap:8px; }
.mvr-feld-name { font-size:15px; color:var(--mvr-text); }
.mvr-pflicht { color:var(--mvr-akzent); }
.mvr-eingabe { height:52px; padding:0 16px; border:1px solid var(--mvr-feldrahmen);
  background:var(--mvr-grund); font:400 var(--mvr-bedien)/1.5 var(--mvr-bedien-schrift); color:var(--mvr-text-stark); }
textarea.mvr-eingabe { height:auto; padding:14px 16px; resize:vertical; }
.mvr-eingabe:focus { border-color:var(--mvr-text-stark); outline:2px solid var(--mvr-linie); outline-offset:0; }
.mvr-eingabe--fehler { border:2px solid var(--mvr-akzent); }
.mvr-feldfehler { font-size:15px; color:var(--mvr-akzent); }
/* Sicherheitsfrage statt Captcha-Dienst: eine ausgeschriebene Rechenaufgabe,
   serverseitig erzeugt und geprüft. Kein Fremdserver, kein Bild, kein Ton —
   und mit Vorleseprogramm bedienbar, weil die Frage echter Text ist. */
.mvr-sicherheitsfrage { display:flex; flex-direction:column; gap:8px;
  padding:20px; border:1px solid var(--mvr-linie); background:var(--mvr-grund-sand); }
.mvr-sicherheitsfrage-zeile { display:flex; gap:16px; align-items:center; flex-wrap:wrap; }
.mvr-sicherheitsfrage-aufgabe { display:flex; align-items:center; gap:10px; padding:12px 18px;
  background:var(--mvr-flaeche-dunkel); color:var(--mvr-schrift-auf-dunkel);
  font:400 22px/1 var(--mvr-mittel-schrift); letter-spacing:.06em; }
.mvr-sicherheitsfrage-aufgabe span { color:var(--mvr-schrift-auf-dunkel-2); }
.mvr-sicherheitsfrage .mvr-eingabe { width:120px; }
.mvr-sicherheitsfrage-neu { min-height:44px; padding:12px 18px; border:1px solid var(--mvr-zier);
  background:none; font:400 15px/1 var(--mvr-lesen-schrift); color:var(--mvr-akzent); cursor:pointer; }
.mvr-sicherheitsfrage-neu:hover { background:var(--mvr-grund); }
/* ⚠ Hier standen zwei Regeln fuer .mvr-einwilligung aus dem gelieferten
   Blatt. Sie gehoerten zum Entwurf .mvr-sicherheitsfrage, den unser Markup
   nicht benutzt, und kollidierten mit der eigenen Fassung weiter unten.
   Eine Klasse zweimal im selben Blatt ist eine Falle: geaendert wird an der
   einen Stelle, gewinnen tut die andere. Entfernt am 02.09.2026. */

/* --- Meldungen und Bestätigung ------------------------------------------ */
.mvr-meldung { border-left:4px solid var(--mvr-flaeche-dunkel); background:var(--mvr-grund-sand);
  padding:14px 20px; font-size:var(--mvr-lesen); color:var(--mvr-text-stark); }
.mvr-meldung--hinweis { border-left-color:var(--mvr-flaeche-dunkel); }
.mvr-meldung--erfolg { border-left-color:var(--mvr-text-leise); }
.mvr-meldung--warnung { border-left-color:var(--mvr-akzent); color:var(--mvr-akzent); }
.mvr-meldung--fehler { border-left-color:var(--mvr-akzent); background:var(--mvr-flaeche-dunkel);
  color:var(--mvr-schrift-auf-dunkel); }
.mvr-bestaetigung { background:var(--mvr-flaeche-dunkel); color:var(--mvr-schrift-auf-dunkel-2);
  padding:36px 32px; display:flex; flex-direction:column; align-items:flex-start; gap:16px; }
.mvr-bestaetigung h1 { margin:0; font:400 28px/1.2 var(--mvr-mittel-schrift); color:var(--mvr-schrift-auf-dunkel); }

/* --- Unterseiten -------------------------------------------------------- */
.mvr-seitenleiste { width:280px; border-top:2px solid var(--mvr-flaeche-dunkel); padding-top:18px; }
.mvr-toc-link { display:block; font-size:var(--mvr-lesen); padding:8px 0;
  border-bottom:1px solid var(--mvr-linie-leise); color:var(--mvr-text-leise); text-decoration:none; }
.mvr-toc-link:hover { color:var(--mvr-text-stark); }
.mvr-platzhalter { border:1px dashed var(--mvr-zier); padding:14px 18px; max-width:68ch;
  background:repeating-linear-gradient(135deg,var(--mvr-grund-sand) 0 10px,var(--mvr-grund) 10px 20px);
  font:400 var(--mvr-klein)/1.5 ui-monospace,Menlo,Consolas,monospace; color:var(--mvr-akzent); }
.mvr-fehlerzahl { font:400 96px/1 var(--mvr-mittel-schrift); color:var(--mvr-schrift-auf-dunkel-2); margin-bottom:24px; }
.mvr-attrappe { display:grid; grid-template-columns:1fr 220px; gap:48px; align-items:start; }
/* Wie der Kontaktabschnitt: der Fuchs von rechts, darüber der Verlauf. */
.mvr-wartung { color:var(--mvr-schrift-auf-dunkel-2);
  min-height:100vh; padding:72px var(--mvr-rand) 80px;
  display:flex; flex-direction:column; align-items:flex-start; gap:24px;
  background:
    linear-gradient(100deg, var(--mvr-flaeche-dunkel) 0%, rgba(29,56,73,.97) 38%,
      rgba(29,56,73,.78) 70%, rgba(29,56,73,.62) 100%),
    url(/images/Logos/fuchs-scharf-840.webp) right center/cover no-repeat,
    var(--mvr-flaeche-dunkel); }
/* Anmeldung auf der Wartungsseite: Joomla lässt nur freigegebene Benutzer
   (Super User, Administrator) hinein — sie sehen die Website im Wartungszustand.
   Eigene Feldfarben, weil der Grund hier dunkel ist. */
/* Auf der Wartungsseite steht das Zeichen frei, ohne Kopfleiste — daher größer. */
.mvr-wartung .mvr-zeichen { width:144px; height:120px; }
.mvr-wartung .mvr-namenszug { gap:24px; }
.mvr-wartung .mvr-namenszug img:not(.mvr-zeichen) { height:28px; }
.mvr-wartung-anmeldung { width:100%; max-width:420px; margin-top:24px;
  border-top:1px solid var(--mvr-linie-dunkel); padding-top:28px; }
.mvr-wartung-anmeldung .mvr-feld-name { color:var(--mvr-schrift-auf-dunkel-2); }
.mvr-wartung-anmeldung .mvr-eingabe { border-color:var(--mvr-linie-dunkel);
  background:var(--mvr-grund-sand); }
.mvr-wartung-anmeldung .mvr-eingabe:focus { border-color:var(--mvr-schrift-auf-dunkel);
  outline-color:var(--mvr-zier); }
.mvr-wartung-anmeldung .mvr-knopf { width:100%; background:var(--mvr-knopf-hell);
  color:var(--mvr-knopf-hell-text); }
.mvr-wartung-anmeldung .mvr-knopf:hover { background:var(--mvr-schrift-auf-dunkel-2); }
.mvr-wartung-anmeldung .mvr-meldung { background:rgba(251,234,212,.08);
  border-left-color:var(--mvr-zier); color:var(--mvr-schrift-auf-dunkel-2); }

/* =========================================================================
   Umbruchpunkte
   ========================================================================= */
@media (max-width:1439px) { :root { --mvr-rand:80px; } }

@media (max-width:1023px) {
  .mvr-buehne-titel { font-size:48px; }
  .mvr-kontakt-titel { font-size:36px; }
  .mvr-leistungen-kopf h2 { font-size:32px; }
}

@media (max-width:899px) {
  /* Telefon: untereinander, der Pfeil zeigt nach unten */
  .mvr-folge { grid-template-columns:1fr; row-gap:20px; }
  .mvr-folge-pfeil { width:26px; margin:0 auto; }
  .mvr-karten { grid-template-columns:repeat(2,1fr); }
  .mvr-karten > .mvr-karte:last-child { grid-column:1 / -1; }
}

@media (max-width:767px) {
  :root { --mvr-rand:20px; }
  .mvr-kopfleiste { height:84px; }
  .mvr-zeichen { width:72px; height:60px; }
  .mvr-namenszug img:not(.mvr-zeichen) { height:14px; }
  .mvr-hauptnav { display:none; }
  /* Telefon: nur die Striche, ohne Wort und ohne Trennlinie */
  .mvr-klapptaste { padding:0; border-left:0; gap:0; }
  .mvr-klapptaste > span:first-child { display:none; }
  .mvr-klapptaste-striche { gap:5px; }
  .mvr-geschuetzt-nav { padding-inline:20px; overflow-x:auto; }

  .mvr-buehne { grid-template-columns:1fr; gap:28px; justify-items:center;
    text-align:center; padding:36px 20px 44px; }
  .mvr-buehne > div { order:2; }
  .mvr-buehne-fuchs { order:1; width:200px; height:200px; }
  .mvr-buehne-titel { font-size:34px; line-height:1.14; margin-bottom:28px; }
  .mvr-zierstrich { display:none; }
  .mvr-knopf { width:100%; }

  .mvr-abschnitt { padding:40px 20px; }
  .mvr-abschnitt--sand { padding-top:36px; }
  .mvr-dreisatz { grid-template-columns:1fr; gap:20px; }
  .mvr-fliesstext { font-size:17px; line-height:1.62; }
  .mvr-folge-text { font-size:21px; }
  .mvr-karten { grid-template-columns:1fr; gap:28px; }
  .mvr-karte { padding:24px 20px; gap:18px; }
  .mvr-karte-titel { font-size:26px; }
  .mvr-karte-text { font-size:16px; }

  .mvr-leistungen { padding:8px var(--mvr-rand) 44px; } /* Karte 67, 11.09.2026: Variable statt fester 20px — wertgleich (--mvr-rand ist hier 20px), im Pagemaker-Raum greift so die 0 */
  .mvr-leistungen-kopf { flex-direction:column; align-items:flex-start; gap:8px; padding-top:24px; }
  .mvr-leistungen-kopf h2 { font-size:30px; }
  .mvr-akkordeon { gap:8px; }
  .mvr-akkordeon-balken { min-height:56px; padding:16px 18px; gap:12px; }
  /* Nummernkachel bleibt auch auf dem Telefon — sie ist der Bezugspunkt der
     Querverweis-Kacheln am Zeilenende. */
  .mvr-akkordeon-nr { width:24px; height:24px; font-size:13px; margin-right:0; }
  /* Der längste Kategoriename ist dreizeilig — die linke Gruppe muss schrumpfen
     dürfen, sonst schiebt sie das Plus-Zeichen aus dem Balken. */
  .mvr-akkordeon-balken > span:first-child { min-width:0; }
  .mvr-akkordeon-titel { font-size:17px; overflow-wrap:anywhere; }
  /* Auf dem Telefon nur die Zahl, ohne das Wort — sie unterscheidet sich von der
     Nummernkachel dadurch, dass sie keinen Rahmen trägt. */
  .mvr-akkordeon-anzahl { font-size:13px; }
  .mvr-akkordeon-anzahl span { display:none; }
  .mvr-akkordeon-fach { padding:20px 18px 24px; }
  .mvr-liste { column-count:1; }
  /* Telefon: keine Führungslinie — der Name bricht auf 2–3 Zeilen um, die Linie
     fiele auf einen Stummel zurück. Abschluss stattdessen als eigene Zeile,
     rechtsbündig, dazu der durchgehende Trenner zurück. */
  .mvr-liste-zeile { display:block; padding:10px 0; border-bottom:1px solid var(--mvr-linie-leise); }
  .mvr-liste-linie { display:none; }
  /* Telefon: 44 px Trefffläche, die Kachel bleibt optisch 32 px.
     Der Knopf ist die Trefffläche, das innere <span> die sichtbare Kachel. */
  .mvr-liste-auch { display:flex; justify-content:flex-end; margin-top:1px; margin-right:-6px; }
  .mvr-liste-kachel { width:44px; height:44px; background:none; border:0; }
  .mvr-liste-kachel span { width:32px; height:32px; display:flex; align-items:center;
    justify-content:center; background:var(--mvr-grund-sand);
    border:1px solid var(--mvr-linie); font-size:14px; }
  .mvr-liste-kachel:hover { background:none; }
  .mvr-liste-kachel:hover span { background:var(--mvr-flaeche-dunkel);
    border-color:var(--mvr-flaeche-dunkel); color:var(--mvr-schrift-auf-dunkel); }
  .mvr-leistungen-hinweis { font-size:16px; line-height:1.6; margin-bottom:22px; }

  .mvr-kontakt { padding:20px; background:
    linear-gradient(180deg, var(--mvr-flaeche-dunkel) 0%, rgba(29,56,73,.97) 42%,
      rgba(29,56,73,.7) 100%),
    url(/images/Logos/fuchs-scharf-400.webp) center bottom/cover no-repeat,
    var(--mvr-flaeche-dunkel); }
  .mvr-kontakt > div { padding:36px 4px 44px; gap:26px; }
  .mvr-kontakt-titel { font-size:26px; line-height:1.26; }

  .mvr-feldpaar { grid-template-columns:1fr; }
  .mvr-sicherheitsfrage { padding:16px; gap:10px; }
  .mvr-sicherheitsfrage-aufgabe { font-size:19px; padding:11px 14px; }
  .mvr-sicherheitsfrage .mvr-eingabe { flex:1; min-width:0; width:auto; }
  .mvr-sicherheitsfrage-neu { align-self:flex-start; }
  .mvr-attrappe { grid-template-columns:1fr; gap:18px; }
  .mvr-attrappe img { width:150px; height:150px; }
  .mvr-seitenleiste { width:100%; }
  .mvr-fehlerzahl { font-size:72px; }
  .mvr-wartung { padding:44px 20px 48px; background:
    linear-gradient(180deg, var(--mvr-flaeche-dunkel) 0%, rgba(29,56,73,.97) 42%,
      rgba(29,56,73,.7) 100%),
    url(/images/Logos/fuchs-scharf-400.webp) center bottom/cover no-repeat,
    var(--mvr-flaeche-dunkel); }
}

/* --- Druck: Akkordeon offen, keine Flächen ------------------------------- */
@media print {
  .mvr-kopfleiste,.mvr-klappnav,.mvr-geschuetzt-nav,.mvr-klapptaste,.mvr-sprunglink { display:none; }
  .mvr-seite,.mvr-abschnitt,.mvr-abschnitt--sand,.mvr-abschnitt--dunkel,
  .mvr-buehne,.mvr-kontakt,.mvr-kontakt > div { background:#fff; color:#000; padding-inline:0; }
  .mvr-buehne-titel,.mvr-kontakt-titel,.mvr-akkordeon-titel,.mvr-akkordeon-nr,
  .mvr-akkordeon-anzahl { color:#000; }
  .mvr-akkordeon-balken { background:#fff; color:#000; border-bottom:1px solid #000; }
  .mvr-akkordeon-fach { display:block !important; border:0; padding-inline:0; }
  .mvr-liste { column-count:2; }
  .mvr-knopf,.mvr-akkordeon-zeichen { display:none; }
}


/* =========================================================================
   KORREKTUREN gegenueber der gelieferten Fassung — Claude Code, 02.09.2026
   Jede Aenderung ist gemessen und begruendet.
   ========================================================================= */

/* 1 — Die Bilder der Fuchs-Folge waren OVAL statt rund.
   Gemessen: 193 x 668 px. Die Breite kam aus der Spalte, die Hoehe aus dem
   height-Attribut des <img>. "aspect-ratio:1" wirkt nur, wenn eine Seite
   auto ist; die gelieferte Regel setzt kein height:auto. */
.mvr-folge-bild { height:auto; }

/* 2 — Die Pfeile standen oben neben dem Bild (align-self:start, 8 px unter
   der Bildkante). Der Entwurf zeigt sie auf Hoehe der Bildunterschrift.
   Dafuer wird das Raster zweizeilig: Zeile 1 Bilder, Zeile 2 Texte und
   Pfeile. Die Klasse .mvr-folge-stufe hatte in der gelieferten Fassung
   keine Regel — sie bekommt hier ihre. */
.mvr-folge { grid-template-rows:auto auto; }
.mvr-folge-stufe { display:contents; }
.mvr-folge-stufe > .mvr-folge-bild { grid-row:1; }
.mvr-folge-stufe > .mvr-folge-text { grid-row:2; margin:24px 0 0; }
.mvr-folge-pfeil { grid-row:2; align-self:start; margin:24px auto 0; }

/* Bei display:contents verteilt das Raster die Kinder selbst — dabei
   landete das zweite Bild in der 56-px-Pfeilspalte. Deshalb jede Spalte
   ausdruecklich zuweisen. */
.mvr-folge > .mvr-folge-stufe:nth-child(1) > * { grid-column:1; }
.mvr-folge > .mvr-folge-pfeil:nth-child(2)     { grid-column:2; }
.mvr-folge > .mvr-folge-stufe:nth-child(3) > * { grid-column:3; }
.mvr-folge > .mvr-folge-pfeil:nth-child(4)     { grid-column:4; }
.mvr-folge > .mvr-folge-stufe:nth-child(5) > * { grid-column:5; }

/* 3 — Der Sandabschnitt hatte 88 px Polster oben und 96 unten; zwischen
   der letzten Textzeile und dem Abschnittsende lagen dadurch 128 px.
   Auf Wunsch des Betreibers verringert. Der Text steht jetzt mittig unter
   dem Kreis: gemessen war er exakt buendig zum Bild (0–299 gegen 0–299),
   doch der Kreis ist auf Texthoehe laengst nach innen gebogen — linksbuendig
   wirkt er deshalb uebergestellt. */
.mvr-abschnitt--sand { padding-top:56px; padding-bottom:56px; }
.mvr-folge-text { text-align:center; }

@media (max-width:899px) {
  /* einspaltig: die Stufen stehen untereinander, der Pfeil dazwischen */
  .mvr-folge-stufe { display:block; }
  .mvr-folge-pfeil { grid-row:auto; margin:0 auto; }
  .mvr-folge > .mvr-folge-stufe:nth-child(1) > *,
  .mvr-folge > .mvr-folge-pfeil:nth-child(2),
  .mvr-folge > .mvr-folge-stufe:nth-child(3) > *,
  .mvr-folge > .mvr-folge-pfeil:nth-child(4),
  .mvr-folge > .mvr-folge-stufe:nth-child(5) > * { grid-column:auto; }
}


/* 4 — Der Klappblock schob beim Oeffnen die ganze Seite nach unten: er stand
   als Block im Fluss unter dem Kopf. Jetzt legt er sich als Kasten rechts
   UEBER die Seite und blendet sanft ein — die Seite bleibt stehen.
   Der Kopf braucht dafuer position:relative als Bezugspunkt. */
.mvr-kopfleiste { position:relative; z-index:20; }

.mvr-klappnav {
  display:block;                 /* nicht mehr per display umschalten */
  position:absolute;
  top:100%; right:0;
  width:min(320px, 100vw);
  z-index:19;
  background:var(--mvr-flaeche-dunkel-2);
  border-top:1px solid var(--mvr-linie-dunkel);
  box-shadow:0 12px 28px rgba(29,56,73,.28);
  opacity:0;
  visibility:hidden;
  transform:translateY(-8px);
  transition:opacity .2s ease, transform .2s ease, visibility .2s;
}
.mvr-klappnav[data-offen] { opacity:1; visibility:visible; transform:none; }

/* 5 — Das Menue faehrt beim Ueberfahren der Klapptaste herunter und beim
   Verlassen wieder hoch. Der Bereich .mvr-menue umfasst Taste UND Block
   und reicht ueber die volle Kopfhoehe (align-self:stretch) — sonst
   verliert der Zeiger auf dem Weg nach unten den Kontakt und das Menue
   klappte sofort wieder zu.
   :focus-within haelt es fuer die Tastatur offen, der Klick bleibt fuer
   Touch-Geraete, wo es kein Ueberfahren gibt. */
.mvr-menue { align-self:stretch; display:flex; align-items:center; }

.mvr-menue:hover      .mvr-klappnav,
.mvr-menue:focus-within .mvr-klappnav { opacity:1; visibility:visible; transform:none; }

/* Nach oben aus dem Blick fahren statt nur auszublenden */
.mvr-klappnav { transform:translateY(-12px); transform-origin:top right; }

@media (prefers-reduced-motion:reduce) {
  .mvr-klappnav { transition:none; }
}

@media (hover:none) {
  /* Ohne Zeiger gibt es kein Ueberfahren — dort zaehlt nur der Klick. */
  .mvr-menue:hover .mvr-klappnav { opacity:0; visibility:hidden; transform:translateY(-12px); }
  .mvr-klappnav[data-offen] { opacity:1; visibility:visible; transform:none; }
}


/* 6 — Die Buehnenueberschrift lief bei 1440 px einzeilig ueber gut 1000 px.
   Der Entwurf setzt sie dreizeilig neben den Fuchs. Die gelieferte Regel
   hat keine Breitenbegrenzung; die Textspalte ist 1fr und damit sehr weit. */
.mvr-buehne-titel { max-width:520px; }

/* 7 — Das Menue rollt jetzt wie eine Jalousie herunter statt nur
   einzublenden: clip-path schneidet es von unten weg und gibt es Zeile fuer
   Zeile frei. Vorteil gegenueber scaleY: der Inhalt wird nicht gestaucht,
   und gegenueber max-height: es braucht keine geratene Hoehe. */
.mvr-klappnav {
  transform:none;
  clip-path:inset(0 0 100% 0);
  transition:clip-path .34s cubic-bezier(.22,.61,.36,1),
             opacity .18s ease,
             visibility .34s;
}
.mvr-klappnav[data-offen],
.mvr-menue:hover      .mvr-klappnav,
.mvr-menue:focus-within .mvr-klappnav {
  opacity:1; visibility:visible; transform:none;
  clip-path:inset(0 0 0 0);
}

@media (prefers-reduced-motion:reduce) {
  .mvr-klappnav { transition:none; }
}

@media (hover:none) {
  .mvr-menue:hover .mvr-klappnav { opacity:0; visibility:hidden; clip-path:inset(0 0 100% 0); }
  .mvr-klappnav[data-offen] { opacity:1; visibility:visible; clip-path:inset(0 0 0 0); }
}


/* 8 — Die Buehne war der EINZIGE Abschnitt ohne Breitenbegrenzung: alle
   anderen laufen auf der 1120er Schiene (.mvr-inhalt), die Buehne nahm die
   volle Fensterbreite. Gemessen bei 1905 px: Titel bei 160, der Text des
   naechsten Abschnitts bei 393 — 233 px Versatz auf derselben Seite, und
   645 px Leerraum zwischen Titel und Fuchs.
   Bei 1440 px (der Entwurfsbreite) geht die Rechnung zufaellig auf
   (1440 − 2×160 = 1120), deshalb faellt es dort nicht auf.
   Die dunkle Flaeche bleibt ueber die volle Breite, nur ihr Inhalt sitzt
   jetzt auf der Schiene. */
/* Nicht ueber max-width: das haette die dunkle Flaeche mitbegrenzt und
   weisse Raender neben der Buehne erzeugt (gemessen: Flaeche 1440 statt
   1905). Stattdessen waechst das seitliche Polster mit dem Fenster — die
   Flaeche bleibt voll, ihr Inhalt sitzt auf der Schiene. */
.mvr-buehne {
  padding-inline:max(var(--mvr-rand), calc((100% - var(--mvr-inhalt)) / 2));
}


/* 9 — Die Buehnenflaeche wirkte gleichfoermig, und der Fuchs schwamm
   darauf ohne Ort. Zwei Mittel, beide AUS DER PALETTE (#324958 ist der
   naechsthellere Blauton):
   - ein weicher Schein DIREKT AM FUCHS, der ihn verankert
   - ein kaum merklicher Verlauf von oben nach unten

   ⚠ Erster Versuch war ein radial-gradient auf der Buehne mit Prozentwerten
   ("at 78% 46%"). Gemessen bei 1905 px: der Schein sass 183 px NEBEN dem
   Fuchs und ueberlappte den Titel — Prozente auf der Buehne verschieben
   sich mit der Fensterbreite, der Fuchs nicht. Als box-shadow am Bild
   selbst wandert der Schein immer mit.

   Gerechnet: selbst am hellsten Punkt (#324958) bleibt der Titel bei
   7,99:1 und der Nebentext bei 4,89:1 — beides ueber AA.
   Kein Muster, keine Textur: das waere Dekoration statt Gestaltung. */
.mvr-buehne {
  background-color:var(--mvr-flaeche-dunkel);
  /* ⚠ Der Verlauf darf OBEN nicht aufhellen: sonst ist die Buehne direkt
     unter der Kopfleiste heller als diese, und es entsteht eine sichtbare
     waagerechte Kante — der Block grenzt sich dann vom Seitenkopf ab.
     Deshalb beginnt er bei 0 und hellt erst zur Mitte hin auf. */
  /* Das Licht kommt aus der linken oberen Ecke: dort ist die Flaeche am
     hellsten, zur rechten unteren Ecke faellt sie ab. Der Verlauf beginnt
     bei 0, damit an der Naht zur Kopfleiste keine Kante entsteht. */
  background-image:linear-gradient(148deg,
    rgba(50,73,88,0)   0%,
    rgba(50,73,88,.34) 30%,
    rgba(50,73,88,.06) 78%,
    rgba(0,0,0,.10)   100%);
}

/* Licht von links oben: der Schein sitzt oben links am Kreis, der Schatten
   faellt nach rechts unten. Erster Wert ist der Kernschatten, zweiter der
   weiche Abfall, dritter der Lichtsaum auf der Gegenseite. */
.mvr-buehne-fuchs {
  box-shadow:
    28px 34px  60px -12px rgba(9,20,28,.55),
    56px 68px 130px -30px rgba(9,20,28,.38),
   -18px -22px 70px -20px rgba(50,73,88,.85);
}

/* Derselbe Lichteinfall am Knopf — deutlich kleiner, weil er naeher an der
   Flaeche liegt. */
.mvr-buehne .mvr-knopf {
  box-shadow:6px 8px 18px -6px rgba(9,20,28,.45),
             12px 16px 34px -12px rgba(9,20,28,.28);
}

@media (max-width:767px) {
  .mvr-buehne { background-image:linear-gradient(180deg,
      rgba(50,73,88,0) 0%, rgba(50,73,88,.26) 48%, rgba(50,73,88,.08) 100%); }
  .mvr-buehne-fuchs { box-shadow:
      14px 18px 34px -8px rgba(9,20,28,.50),
      28px 36px 70px -20px rgba(9,20,28,.32),
     -10px -12px 40px -14px rgba(50,73,88,.80); }
  .mvr-buehne .mvr-knopf { box-shadow:4px 6px 14px -5px rgba(9,20,28,.42); }
}


/* 10 — Schatten auch am Text, damit die Lichtrichtung durchgehend stimmt.
   Zum Ansehen und Entscheiden: heller Text auf dunklem Grund wirft nur
   einen schwachen Schatten, weil die Flaeche selbst schon dunkel ist. */
.mvr-buehne-titel {
  text-shadow:7px 9px 10px rgba(9,20,28,.85),
              14px 18px 28px rgba(9,20,28,.55);
}
.mvr-buehne .mvr-augenbraue,
.mvr-buehne .mvr-knopf {
  text-shadow:3px 4px 6px rgba(9,20,28,.60);
}
.mvr-zierstrich {
  box-shadow:4px 6px 9px rgba(9,20,28,.70);
}

@media (max-width:767px) {
  /* Am Telefon ist die Ueberschrift 34 statt 62 px — der Schatten muss
     mitschrumpfen, sonst ist er anteilig doppelt so gross und verwaescht
     die Buchstaben. */
  .mvr-buehne-titel { text-shadow:4px 5px 6px rgba(9,20,28,.80),
                                  8px 10px 16px rgba(9,20,28,.50); }
  .mvr-zierstrich { box-shadow:1px 2px 3px rgba(9,20,28,.40); }
}


/* 11 — Schattenwurf auf den Grund.
   Das Licht kommt von links oben; Schrift, Zierstrich und Knopf liegen auf
   einer gedachten Scheibe und werfen ihren Schatten auf den weiter hinten
   liegenden Grund.

   ⚠ Drei Fehlversuche davor, alle mit derselben Ursache — ich habe die
   Scheibe als Element gebaut:
   1. sichtbare Platte mit eigener Flaeche
   2. durchsichtiges Element mit box-shadow — dessen Schatten zeichnete
      wieder eine Kante rings um die Buehne
   3. box-shadow an der Textgruppe — daraus wurde eine Kachel, auf der der
      Text zu stehen schien
   Richtig ist: KEIN Traegerelement. Jede Form wirft ihren eigenen Schatten,
   die Buchstaben eingeschlossen. Der Versatz ist gross und die
   Weichzeichnung klein — sonst ist der Schatten ein Fleck statt lesbarer
   Schrift. */
.mvr-buehne { position:relative; isolation:isolate; }
.mvr-buehne > div { width:auto; box-shadow:none; }

.mvr-buehne-titel {
  text-shadow:64px 47px 11px rgba(6,15,22,.55);
}
.mvr-buehne .mvr-augenbraue { text-shadow:32px 23px 7px rgba(6,15,22,.50); }

/* Knopf und Zierstrich sind Flaechen, keine Schrift — sie werfen einen
   Schatten ihrer Umrissform, die Knopfbeschriftung keinen eigenen. */
.mvr-buehne .mvr-knopf {
  text-shadow:none;
  box-shadow:64px 47px 16px -4px rgba(6,15,22,.50);
}
.mvr-zierstrich { box-shadow:54px 39px 10px -2px rgba(6,15,22,.50); }

/* Der Fuchs im Kreis, schlicht — kein gezeichneter Rand.
   ⚠ Zwei Versuche, ihn zu einer Muenze zu machen, sind verworfen:
   der CSS-Nachbau (border + inset-Schatten) und ein gerendertes Bild mit
   Rand und Materialstaerke. Beide trugen einen sichtbaren Ring rundum.
   Die Muenzfassung erstellt der Betreiber im Grafikprogramm; hier bleibt
   das Kreisbild und der Schlagschatten auf den Grund. */
.mvr-buehne-fuchs {
  border:0;
  border-radius:50%;
  box-shadow:none;
  filter:drop-shadow(76px 56px 26px rgba(6,15,22,.52))
         drop-shadow(118px 87px 70px rgba(6,15,22,.30));
}

@media (max-width:767px) {
  /* Bei 34 statt 62 px Schrift muss der Versatz mitschrumpfen, sonst loest
     sich der Schatten von den Buchstaben. */
  .mvr-buehne-titel { text-shadow:33px 24px 7px rgba(6,15,22,.55); }
  .mvr-buehne .mvr-augenbraue { text-shadow:18px 13px 5px rgba(6,15,22,.48); }
  .mvr-buehne .mvr-knopf { box-shadow:33px 24px 9px -3px rgba(6,15,22,.48); }
  .mvr-zierstrich { box-shadow:28px 21px 7px -2px rgba(6,15,22,.48); }
  .mvr-buehne-fuchs {
    border:0;
    box-shadow:none;
    filter:drop-shadow(39px 29px 15px rgba(6,15,22,.50))
           drop-shadow(63px 47px 42px rgba(6,15,22,.30)); }
}

/* === Korrektur 12: Tiefe in der Fuchs-Folge ==============================
   Drei Eingriffe, alle mit derselben Sonne wie auf der Bühne: Licht von
   links oben, Schatten nach rechts unten im Verhältnis rund 1 : 0,73.

   Der Unterschied zur Bühne ist die HÖHE über dem Grund, nicht die Richtung.
   Dort schwebt die Scheibe weit vor dem Boden (64px 47px), hier sitzt alles
   AUF der Sandfläche — also naher Schatten. Zwei verschiedene Abstände bei
   einem Lichtstand, nicht zwei Sonnen.

   Der Schatten ist warm getönt (aus dem Akzentbraun, nicht neutralgrau).
   Auf #FBEAD4 wirkt ein grauer Schatten schmutzig statt tief. */

.mvr-folge-bild {
  box-shadow: 14px 10px 26px -6px rgba(64, 42, 18, .38),
              26px 19px 48px -12px rgba(64, 42, 18, .22);
}

/* Der Pfeil ist eine SVG-Fläche: drop-shadow folgt der Silhouette,
   box-shadow würde ein Rechteck werfen. */
.mvr-folge-pfeil { filter: drop-shadow(5px 4px 4px rgba(64, 42, 18, .40)); }

/* ⚠ Die Stellung des Pfeils bleibt, wie sie war: Zeile 2 des Rasters, also
   auf Texthöhe (siehe Zeile 492). Ein erster Versuch mit align-self:center
   hat ihn 234 px nach unten gezogen — center zentriert in der Textzeile,
   nicht auf Kreismitte. Geändert wird nur die Form und der Schatten. */

@media (max-width: 900px) {
  .mvr-folge-bild { box-shadow: 8px 6px 16px -4px rgba(64, 42, 18, .38),
                                15px 11px 28px -8px rgba(64, 42, 18, .20); }
  .mvr-folge-pfeil { filter: drop-shadow(3px 2px 3px rgba(64, 42, 18, .40)); }
}

/* --- Fassung B: zusätzlich Kacheln ---------------------------------------
   Wird über die Klasse mvr-folge--kachel am Container zugeschaltet. Steht
   hier zum Vergleich; ohne die Klasse ist der Block wirkungslos. */
.mvr-folge--kachel .mvr-folge-stufe {
  background: #FFF7EC;
  padding: 32px 28px 36px;
  box-shadow: 10px 8px 22px -6px rgba(64, 42, 18, .28),
              20px 16px 44px -14px rgba(64, 42, 18, .18);
}
.mvr-folge--kachel .mvr-folge-bild {
  box-shadow: 8px 6px 16px -5px rgba(64, 42, 18, .30);
}

/* ⚠ Fassung B brauchte mehr als Fläche und Schatten: .mvr-folge-stufe steht
   auf display:contents (Zeile 489) — ein solches Element erzeugt GAR KEINE
   BOX. Hintergrund, Polster und Schatten waren gesetzt und wirkungslos,
   gemessene Breite 0. Für die Kachelfassung muss die Stufe wieder eine
   eigene Box werden; damit wird sie selbst zum Rasterfeld, und die Zellen
   müssen neu zugewiesen werden. */
@media (min-width: 901px) {
  .mvr-folge--kachel .mvr-folge-stufe { display: block; }
  .mvr-folge--kachel > .mvr-folge-stufe:nth-child(1) { grid-column: 1; grid-row: 1; }
  .mvr-folge--kachel > .mvr-folge-stufe:nth-child(3) { grid-column: 3; grid-row: 1; }
  .mvr-folge--kachel > .mvr-folge-stufe:nth-child(5) { grid-column: 5; grid-row: 1; }
  /* Bei Kacheln steht der Strich mittig zwischen ihnen, nicht auf Texthöhe —
     es gibt keine zweite Rasterzeile mehr, an der er sich ausrichten könnte. */
  .mvr-folge--kachel > .mvr-folge-pfeil { grid-row: 1; align-self: center; margin: 0 auto; }
  .mvr-folge--kachel .mvr-folge-text { margin: 24px 0 0; }
}

/* Der Strich steht eine Textzeile tiefer als der Text beginnt.
   Gemessen: .mvr-folge-text hat 23px/1.4 = 32,2px Zeilenhöhe, der Pfeil sass
   mit margin-top:24px auf derselben Oberkante wie der Text (beide 347).
   24 + 32 = 56 setzt ihn auf Höhe der ZWEITEN Zeile.

   Warum Zeile 2 und nicht die Mitte: die drei Texte sind 2, 3 und 2 Zeilen
   hoch. Eine echte Zentrierung wuerde je Spalte anders sitzen; Zeile 2 ist
   der einzige Anker, den alle drei haben.

   Nur ab 901px — darunter stehen die Stufen untereinander und der Strich
   liegt ohnehin zwischen ihnen (Zeile 515). */
@media (min-width: 901px) {
  .mvr-folge > .mvr-folge-pfeil { margin-top: 56px; }
}

/* === Korrektur 13: Karten nach der Designvorgabe =========================
   Gemessen war: Textoberkanten 352 / 398 / 352 — die mittlere Karte begann
   46 px tiefer, weil das Fuchsfoto 276 px hoch ist und die beiden SVG nur
   230. Der Betreiber gleicht die Textmengen noch an; dann müssen die Texte
   auf gleicher Höhe beginnen, sonst nützt das nichts.

   Lösung: alle drei Grafikflächen quadratisch. Die SVG bekommen dadurch
   oben und unten Luft (object-fit:contain verzerrt nicht), das Foto füllt
   die Fläche (cover) und wird als Kreis beschnitten. */
.mvr-karte-grafik { aspect-ratio: 1; height: auto; object-fit: contain; }
.mvr-karte-grafik--rund { object-fit: cover; border-radius: 50%; }

/* === Korrektur 14: Tiefe im Kartenblock =================================
   Entschieden: Rahmen bleibt, Schatten kommt dazu, Grund bleibt weiss.

   Licht wie überall auf dieser Seite — von links oben, Schatten nach rechts
   unten im Verhältnis 1 : 0,73. Der Ton ist hier KÜHL (#1D3849), nicht warm
   wie auf der Sandfläche: auf Weiss wirkt ein brauner Schatten wie
   Vergilbung. Zwei Lagen, damit der Übergang weich bleibt. */
.mvr-karte {
  box-shadow: 14px 10px 28px -10px rgba(29, 56, 73, .22),
              26px 20px 54px -18px rgba(29, 56, 73, .14);
}
@media (max-width: 900px) {
  .mvr-karte { box-shadow: 8px 6px 16px -6px rgba(29, 56, 73, .22),
                           15px 11px 30px -10px rgba(29, 56, 73, .14); }
}

/* === Korrektur 15: Rahmen des aufgeklappten Akkordeonfachs ===============
   Entschieden: #8997A1 statt #D0B798.

   Balken und Fach sind ein Körper — der Rahmen gehört deshalb in dieselbe
   Farbfamilie wie der Balken darüber (#1D3849), nicht in die warme Reihe.
   Genommen ist aber die HELLSTE Stufe der Blaureihe, nicht die Balkenfarbe:
   ein 1-px-Strich in #1D3849 ergibt eine harte Kontur, und bei fünf
   Kategorien untereinander werden daraus fünf schwere Rechtecke.

   Die Fläche wird ausdrücklich auf Weiss gesetzt statt sie durchsichtig zu
   lassen. Bisher nahm sie den Grund des Blocks an — bei getöntem Grund war
   das aufgeklappte Fach deshalb ebenfalls getönt. Mit dem festen Weiss
   bleibt es weiss, unabhängig davon, wie der Block später hinterlegt wird,
   und die 166 warmen Querverweis-Kacheln stehen weiter auf Weiss. */
.mvr-akkordeon-fach { border-color: #8997A1; background: #FFFFFF; }

/* === Korrektur 16: Block "So beginnt eine Zusammenarbeit" ================
   Neuer weisser Block zwischen den Dienstleistungen und dem Kontakt.

   Er ist INHALTLICH begründet — er führt von der Leistungsliste zum Kontakt
   und nimmt diesem die Schwelle. Dass er nebenbei den Farbübergang löst
   (blaugrau ginge sonst direkt in das Dunkelblau des Kontaktblocks über),
   ist Nebeneffekt, nicht Zweck.

   Bewusst OHNE Rahmen und OHNE Schatten: sonst stünde direkt vor dem
   Kontakt eine zweite Kartenreihe, und die drei echten Karten verlören ihre
   Sonderstellung. Die feine Linie über jedem Schritt genügt.

   Bewusst OHNE eigenen Knopf: der Kontaktblock direkt darunter trägt die
   Handlungsaufforderung. Zwei kurz hintereinander schwächen einander. */
.mvr-ablauf-titel { margin:0 0 12px; font:400 38px/1.2 var(--mvr-mittel-schrift);
  color:var(--mvr-text-stark); }
.mvr-ablauf-vorspann { margin:0; font-size:19px; line-height:1.6;
  color:var(--mvr-text-leise); }
.mvr-ablauf-schritte { display:grid; grid-template-columns:repeat(3,1fr);
  gap:56px; margin-top:48px; }
.mvr-ablauf-schritt { border-top:1px solid var(--mvr-linie); padding-top:22px; }
.mvr-ablauf-nr { margin:0 0 14px; font:400 var(--mvr-klein)/1 var(--mvr-klein-schrift);
  letter-spacing:.16em; color:var(--mvr-akzent); }
.mvr-ablauf-schritt-titel { margin:0 0 14px; font:400 26px/1.25 var(--mvr-mittel-schrift);
  color:var(--mvr-text-stark); }
.mvr-ablauf-text { margin:0; font-size:var(--mvr-bedien); line-height:1.65; }
@media (max-width:900px) {
  .mvr-ablauf-titel { font-size:30px; }
  .mvr-ablauf-schritte { grid-template-columns:1fr; gap:36px; margin-top:36px; }
}

/* === Korrektur 17: Grundton des Dienstleistungsblocks ====================
   #E9EEF1 — die Blaureihe um eine sehr helle Stufe erweitert (#8997A1
   aufgehellt). Die Sandreihe hat mit #FBEAD4 eine solche Stufe, die
   Blaureihe hatte keine.

   ⚠ In 23-CI-Farben-mvr-hamburg.md nachtragen, sonst steht hier in einem
   halben Jahr eine Farbe, die niemand zuordnen kann.

   Die Trennlinie über der Überschrift entfällt: sie war die Abgrenzung,
   solange beide Blöcke weiss waren. Jetzt leistet das der Farbwechsel. */
/* Kurz auf #DFE7EB gestellt, weil der Ton zu blass wirkte — die Ursache war
   aber der Zwischenspeicher, nicht die Farbe. Zurueck auf die Wahl aus dem
   Vergleich. Naechste Stufe waere #DFE7EB. */
/* ⚠ DIE FARBE IST UMGEZOGEN — 10.09.2026.
   Hier stand `background:#E9EEF1`. Sie steht jetzt am
   Akkordeon selbst: Komponenten -> MvR-Akkordeon ->
   „Leistungsuebersicht MvR" -> Abschnitt -> Flaeche.
   Sichtbar aendert das nichts.

   Grund: Solange die Farbe hier stand, liess sie sich ueber
   die Oberflaeche nicht abstellen. Wer das Feld in der
   Ansicht leerte, bekam sie aus dieser Zeile zurueck — und
   ein Akkordeon an anderer Stelle brachte eine Flaeche mit,
   die dort etwas verdeckte.

   Der Abstand bleibt: er ist Abstand, keine Farbe. */
.mvr-leistungen { padding-top:56px; }
.mvr-leistungen-kopf { border-top:0; padding-top:0; }

/* === Korrektur 18: Kopfleiste läuft mit ==================================
   Die Seite ist 5077 px hoch und hat genau EINEN Kontaktpunkt — den Knopf
   im dunkelblauen Block ganz unten. Bisher scrollte die Kopfleiste weg
   (position:relative), also war "Kontakt" ab etwa 700 px nicht mehr
   erreichbar, ohne die halbe Seite zu scrollen.

   Sticky statt eines zweiten Knopfes im Inhalt: zwei Handlungsaufforderungen
   kurz hintereinander schwächen einander, eine mitlaufende Leiste nicht.

   Sie ist dunkelblau wie die Bühne darunter — solange man oben ist, sieht
   man keine Leiste, sondern einen durchgehenden Kopf. Erst ab dem weissen
   Block löst sie sich sichtbar ab. Der Schatten ist deshalb kein Zierrat,
   sondern zeigt an, dass sie jetzt VOR dem Inhalt liegt — dieselbe Sonne wie
   überall, Licht von links oben, hier nur nach unten aufgefächert, weil die
   Leiste über die volle Breite läuft. */
.mvr-kopfleiste {
  position: sticky;
  top: 0;
  z-index: 100;
  /* ⚠ Erster Versuch war 0 6px 18px -8px: der negative Spread von -8 frisst
     den Schatten weg, bevor er unter der Leiste hervorkommt — rechnerisch
     blieben 6 + 18/2 - 8 = 7 px stark verblasst, also praktisch nichts.
     Jetzt ohne Spread: eine Kontaktkante direkt unter der Leiste und eine
     weiche Lage darunter, zusammen rund 14 px Reichweite. */
  box-shadow: 0 5px 12px rgba(9, 20, 28, .30),
              0 16px 36px rgba(9, 20, 28, .50);
}

/* === Korrektur 19: verdünnter Sandton für die grosse Fläche ==============
   #FBEAD4 hat 83 % Sättigung — fast das Vierfache des Blaugrau (22 %) und
   die gesättigtste Fläche der Seite. Auf 556 px Höhe über die volle Breite
   trug das zu stark auf, zumal darauf Graustufenbilder stehen: ein kräftig
   gesättigter Grund unter entsättigten Bildern zieht die Aufmerksamkeit auf
   sich statt auf die Füchse.

   #F2E9DD ist DIESELBE Farbe, nur verdünnt — Farbton 34° und Helligkeit
   91 % unverändert, Sättigung 83 → 45 %. Wie mehr Wasser im Tuschkasten.
   Der Textkontrast fällt dabei nur von 10,4 auf 10,2 : 1.

   ⚠ EIGENE Variable, nicht --mvr-grund-sand ändern. Dieser Wert steckt an
   acht weiteren Stellen: Querverweis-Kacheln (22 x 22 px), Sprunglink,
   Meldungen, Formularflächen. Dort ist der kräftige Ton ein Akzent auf
   kleiner Fläche und richtig — verdünnt würde er dort verschwinden.
   #FBEAD4 ist ausserdem --mvr-schrift-auf-dunkel, also die Schriftfarbe auf
   der Bühne (19 Verwendungen).

   ⚠ In 23-CI-Farben-mvr-hamburg.md nachtragen: Flächenstufe der Sandreihe,
   Gegenstück zu #E9EEF1 in der Blaureihe. */
:root { --mvr-flaeche-sand: #F2E9DD; }
.mvr-abschnitt--sand { background: var(--mvr-flaeche-sand); }

/* === Korrektur 20: Kontaktblock wie die Bühne ===========================
   Zwei Angleichungen, beide gemessen.

   1 EINRÜCKUNG. Bei 1440 px stehen beide Blöcke bei 160 — dort ist nichts
   zu sehen. Bei 660 px lief es auseinander: Bühne 70, Kontakt 24. Ursache
   ist der Aufbau, nicht das Polster (beide haben 20 px): Die Bühne ist ein
   Grid mit justify-items:center, ihr Inhalt (Titel max-width 520) wird in
   der 620er Spalte zentriert und rückt dadurch 50 px ein. Der Kontaktblock
   ist ein schlichter Block und bleibt links.

   2 SCHATTEN. Der Kontaktblock hatte keinen. Übernommen sind die Werte der
   Bühne unverändert — dieselbe imaginäre Scheibe, dasselbe Licht von links
   oben, Schatten weit nach rechts unten auf den dahinterliegenden Grund. */
.mvr-kontakt-titel { text-shadow: 64px 47px 11px rgba(6, 15, 22, .55); }
.mvr-kontakt .mvr-knopf { box-shadow: 64px 47px 16px -4px rgba(6, 15, 22, .50); }
.mvr-verweise { text-shadow: 32px 23px 7px rgba(6, 15, 22, .50); }

@media (max-width: 900px) {
  /* ⚠ Hier stand die Zentrierung des Kontaktblocks nach dem Vorbild der
     Bühne. Das war die falsche Angleichung: die Bühne ist bei schmalen
     Breiten die AUSNAHME, nicht die Regel — gemessen bei 760 px standen
     Bühne und Kontakt bei 113, die sechs übrigen Blöcke bei 20.
     Zurückgenommen, siehe Korrektur 23. */
  /* Das seitliche Polster von 4px liess den Block um genau diesen Betrag
     nach rechts wandern — gemessen 74 gegen 70. Senkrechtes Polster bleibt. */
  .mvr-kontakt > div { padding-inline: 0; }
  /* Die kleineren Schattenwerte der Bühne für dieselbe Breite. */
  .mvr-kontakt-titel { text-shadow: 33px 24px 7px rgba(6, 15, 22, .55); }
  .mvr-kontakt .mvr-knopf { box-shadow: 33px 24px 9px -3px rgba(6, 15, 22, .48); }
  .mvr-verweise { text-shadow: 18px 13px 5px rgba(6, 15, 22, .48); }
}

/* === Korrektur 21: Kontaktblock auf die Schiene ==========================
   ⚠ Mein Messfehler: Ich habe bei 1440 px geprüft und "alle Blöcke bei 160,
   nichts zu tun" gemeldet. Bei genau dieser Breite fällt der Fehler nicht
   auf — dort ergibt (1440 − 1120) / 2 zufällig exakt 160.

   Die übrigen Blöcke zentrieren ihren Inhalt auf --mvr-inhalt (1120px):
   je breiter das Fenster, desto grösser der Rand. Der Kontaktblock hatte
   einen FESTEN Rand von --mvr-rand (160px). Ab 1440 px laufen sie deshalb
   auseinander, und zwar immer weiter:

       1440 px → beide 160          (kein Unterschied)
       1920 px → Inhalt 400, Kontakt 160   Versatz 240
       2116 px → Inhalt 498, Kontakt 160   Versatz 338

   Dieselbe Regel, die schon die Bühne trägt (Zeile 619). Die Fläche bleibt
   voll, nur der Inhalt sitzt auf der Schiene. */
.mvr-kontakt {
  padding-inline: max(var(--mvr-rand), calc((100% - var(--mvr-inhalt)) / 2));
}

/* === Korrektur 22: Kopfleiste auf dieselbe Schiene ======================
   Beim Prüfen von Korrektur 21 aufgefallen: Die Kopfleiste hatte denselben
   Fehler wie der Kontaktblock — fester Rand statt zentriertem Inhalt. Bei
   1920 px stand der Namenszug bei 160, während alle Inhaltsblöcke bei 393
   beginnen.

   Damit fluchten jetzt alle acht Blöcke, von der Kopfleiste bis zum
   Kontakt. Die dunkle Fläche der Leiste bleibt voll über die Breite. */
.mvr-kopfleiste {
  padding-inline: max(var(--mvr-rand), calc((100% - var(--mvr-inhalt)) / 2));
}

/* === Korrektur 23: durchgehende Flucht bei jeder Breite =================
   Vorgabe: die Ausrichtung soll sich vom ersten bis zum letzten Block
   durchziehen. Gemessen bei 760 px stand sie nicht durch — Bühne und
   Kontakt bei 113, die sechs übrigen bei 20.

   Ursache ist justify-items:center an der Bühne (Zeile 381), gesetzt für
   die einspaltige Fassung. Der Inhalt wird dort in der Spalte zentriert und
   rückt dadurch ein, während alle anderen Blöcke links am Rand stehen.

   Beide auf linksbündig gestellt. Die Bühne behält ihr einspaltiges
   Raster, nur die waagerechte Zentrierung entfällt — der Fuchs sitzt
   weiterhin unter dem Text, jetzt aber auf derselben Kante wie alles
   andere. */
@media (max-width: 900px) {
  .mvr-buehne { justify-items: stretch; }
  .mvr-buehne > div { justify-self: start; }
  .mvr-buehne-fuchs { justify-self: start; }
}

/* === Korrektur 24: Akkordeon =============================================
   Fünf Punkte, alle vorher gemessen.

   1 ÜBERSCHRIFT LINKS. Der Balken ist flex mit space-between; bei vier
   Kindern (Nummer, Titel, Anzahl, Zeichen) verteilt das den Titel in die
   Mitte — gemessen 467…656 in einem 1105 breiten Balken. Mit margin-right
   auto am Titel wandert der Rest nach rechts, der Titel schliesst an die
   Nummer an.

   3 ANZAHL NEBEN DAS ZEICHEN. Vorher standen Anzahl (891…986) und Zeichen
   (1221…1237) 235 px auseinander. Jetzt bilden sie eine Gruppe am rechten
   Ende. Die Anzahl ist rechtsbündig und hat eine feste Breite — sonst
   endete "18 Leistungen" an anderer Stelle als "21 Leistungen", und die
   Zeichen stünden nicht mehr untereinander.

   4 SCHATTEN. Nicht am Balken und nicht am Fach einzeln, sondern am
   <details> — sonst hätte der aufgeklappte Zustand zwei Schatten mit einer
   Naht dazwischen. So bleibt Balken plus Fach ein Körper, geschlossen wie
   geöffnet. Kühler Ton wie bei den Karten, dieselbe Sonne von links oben.
   Der Abstand zwischen den Kategorien wächst von 10 auf 18 px, damit die
   Schatten Platz haben und sich nicht gegenseitig anschneiden. */

.mvr-akkordeon { gap: 18px; }

.mvr-akkordeon details,
.mvr-akkordeon > details {
  /* ⚠ Erste Fassung war 8/6/16/-6 + 16/12/32/-12 — Reichweite 10 und 20 px
     gegen 18 und 35 px bei den Karten, also gut halb so weit. Auf den
     Kartenwerten, Deckung leicht darüber: der Balken ist dunkelblau, unter
     einem dunklen Körper ist ein Schatten schwerer zu sehen als unter
     einem hellen. */
  box-shadow: 14px 10px 28px -8px rgba(29, 56, 73, .32),
              26px 20px 54px -16px rgba(29, 56, 73, .22);
}

.mvr-akkordeon-titel { margin-right: auto; }

.mvr-akkordeon-anzahl {
  text-align: right;
  min-width: 8.5em;          /* "21 Leistungen" ist der längste Fall */
  margin-right: 18px;
}

@media (max-width: 900px) {
  .mvr-akkordeon { gap: 12px; }
  .mvr-akkordeon-anzahl { min-width: 0; margin-right: 10px; }
  .mvr-akkordeon details { box-shadow: 5px 4px 10px -4px rgba(29, 56, 73, .26); }
}

/* === Korrektur 25: Volumen für die Akkordeonbalken ======================
   Der Schatten allein blieb wirkungslos, und das ist kein Stärkeproblem:
   Ein Schatten macht plastisch, wenn er die FORM zeigt. Bei den weissen
   Karten auf weissem Grund ist er das Einzige, was die Kante sichtbar
   macht. Der Balken ist fast schwarzblau auf hellem Blaugrau — seine Form
   ist durch den Kontrast schon eindeutig, der Schatten hat nichts mehr zu
   erklären. Volumen entsteht durch Licht AUF dem Körper.

   Zwei Mittel, beide in der Lichtrichtung der ganzen Seite (links oben):

   1 LICHTKANTE — 1 px Weiss bei 14 % an Ober- und linker Kante, 1 px
     Schwarz bei 20 % an den abgewandten Kanten. Sie zeigt, wo das Licht
     auftrifft.
   2 WÖLBUNG — die Fläche fällt von #35505F oben links auf #1D3849 nach
     unten rechts ab. Beide Töne aus der Blaureihe.

   ⚠ Der Hover muss den Verlauf mitmachen. Vorher war er eine flächige
   Aufhellung auf #324958; bliebe er das, spränge die Wölbung bei
   Mauskontakt weg. Bei künftigen Farbänderungen ist diese Stelle
   mitzuziehen.

   ⚠ Bewusst KEIN Innenschatten an der Unterkante (Fassung f4): dort grenzt
   im aufgeklappten Zustand direkt das weisse Fach an, und eine dunkle Naht
   würde Balken und Fach wieder auseinanderziehen. */
.mvr-akkordeon-balken {
  /* ⚠ Startton #314957 statt #35505F: An der hellsten Stelle des Verlaufs
     sitzt die Kategorienummer, deren Schrift (#D0B798) dort nur 4,43 : 1
     erreichte — knapp unter AA. Mit #314957 sind es 4,91 : 1. Die Wölbung
     bleibt sichtbar, die Balkenschrift gewinnt sogar (7,2 auf 8,0 : 1). */
  background: linear-gradient(152deg, #314957 0%, #1D3849 62%);
  box-shadow: inset 1px 1px 0 rgba(255, 255, 255, .14),
              inset -1px -1px 0 rgba(0, 0, 0, .20);
}
.mvr-akkordeon-balken:hover {
  background: linear-gradient(152deg, #3A5464 0%, #253F52 62%);
}

/* === Korrektur 26: Erklärfenster statt Nummernkacheln ===================
   Die Zeile brauchte einen Abschluss — ohne ihn wirken kurze Einträge wie
   "Leadmanagement" unfertig. Bis hierher waren das klickbare Nummernkacheln.
   Sie versprachen einen Sprung, der nur eine andere Kategorie öffnete und
   den Leser aus seiner Zeile riss; die eigentliche Frage — worin sich die
   Betrachtung dort unterscheidet — blieben sie schuldig.

   Jetzt eine Marke, die genau das erklärt. Vorgaben des Betreibers:
     · Sie öffnet nur, wo ein Text vorliegt. Sonst steht sie da und tut
       nichts — schliesst die Zeile aber trotzdem ab.
     · Sie ist NICHT als Schaltfläche gestaltet: kein Rahmen, keine Fläche.
     · Angemeldet öffnet jede Marke, auch die leeren, damit der
       Bearbeitungsstand prüfbar ist.
     · Am Telefon öffnet der Tipp statt des Mauskontakts, und das Fenster
       braucht einen Schliessen-Knopf. Am Schreibtisch entfällt er, weil das
       Fenster beim Verlassen von selbst zugeht. */

/* ⚠ Raster statt column-count. In einem Mehrspaltenlayout wird ein absolut
   positioniertes Element über die Spaltengrenze fragmentiert: die CSS sagte
   width:400px, gemessen waren es 892 — die Vereinigung beider Fragmente.
   --reihen kommt aus dem Markup, CSS kann es nicht berechnen. */
.mvr-liste {
  column-count: auto; display: grid; grid-auto-flow: column;
  grid-template-rows: repeat(var(--reihen, 10), auto);
  grid-template-columns: 1fr 1fr; column-gap: 56px;
}

.mvr-erklaer-huelle { position: relative; flex: none; display: flex; }
.mvr-erklaer-marke {
  width: 18px; height: 18px; padding: 0; flex: none; border: 0; background: none;
  display: flex; align-items: center; justify-content: center;
  font: 400 14px/1 var(--mvr-mittel-schrift); font-style: italic;
  color: var(--mvr-zier); cursor: default;
}
.mvr-erklaer-marke--aktiv { cursor: help; }
.mvr-erklaer-marke--aktiv:hover,
.mvr-erklaer-marke--aktiv:focus-visible { color: var(--mvr-akzent); outline: none; }

.mvr-erklaer-fenster {
  position: absolute; right: -4px; bottom: calc(100% + 8px); z-index: 30;
  width: min(400px, 78vw); padding: 18px 20px 16px; text-align: left;
  background: #FFFFFF; border: 1px solid #8997A1;
  box-shadow: 10px 8px 24px -8px rgba(29, 56, 73, .36);
  font: 400 14px/1.55 var(--mvr-lesen-schrift); color: var(--mvr-text);
  opacity: 0; visibility: hidden; transition: opacity .16s ease, visibility .16s;
}
.mvr-erklaer-fenster > b { display: block; margin-bottom: 8px; font-weight: 600;
  color: var(--mvr-text-stark); font-size: 15px; }
.mvr-erklaer-frage { display: block; margin: 0 0 10px;
  font: 400 var(--mvr-lesen)/1.45 var(--mvr-lesen-schrift); font-style: italic; color: var(--mvr-akzent); }
.mvr-erklaer-text { display: block; }
.mvr-erklaer-titel { display: block; margin: 14px 0 6px; font-size: 11px;
  letter-spacing: .1em; text-transform: uppercase; color: var(--mvr-text-leise); }
.mvr-erklaer-abgrenzung { display: block; margin-bottom: 5px; font-size: var(--mvr-klein);
  line-height: 1.45; }
.mvr-erklaer-abgrenzung b { font-weight: 600; color: var(--mvr-text-stark);
  margin-right: 6px; }
.mvr-erklaer-fehlt { display: block; font-style: italic; color: #B0574B; }
.mvr-erklaer-zu { display: none; }

/* Schreibtisch: Mauskontakt öffnet, Verlassen schliesst. Das Fenster bleibt
   offen, solange die Maus DARIN steht — sonst wäre ein längerer Text nicht
   zu Ende zu lesen. */
@media (hover: hover) {
  .mvr-erklaer-marke--aktiv:hover + .mvr-erklaer-fenster,
  .mvr-erklaer-marke--aktiv:focus-visible + .mvr-erklaer-fenster,
  .mvr-erklaer-fenster:hover { opacity: 1; visibility: visible; }
}
/* Telefon: der Tipp öffnet, ein Knopf schliesst. */
@media (hover: none) {
  .mvr-erklaer-huelle.offen .mvr-erklaer-fenster { opacity: 1; visibility: visible; }
  .mvr-erklaer-zu { display: block; margin: 14px 0 0 auto; padding: 9px 15px;
    background: var(--mvr-flaeche-dunkel); color: var(--mvr-schrift-auf-dunkel);
    border: 0; font: 400 13px/1 var(--mvr-lesen-schrift); cursor: pointer; }
}
/* Angemeldet: auch die leeren Marken öffnen, in Warnfarbe. */
body.mvr-verwaltung .mvr-erklaer-huelle[data-leer] .mvr-erklaer-marke {
  color: #B0574B; cursor: help;
}
@media (max-width: 900px) {
  .mvr-liste { display: block; column-count: 1; }
  .mvr-erklaer-fenster { width: min(400px, 86vw); }
}

/* === Korrektur 27: Marke deutlicher, Kategorienummer entfällt ===========
   1 Die Kategorienummer im Balken ist aus dem Markup heraus. Sie war der
     sichtbare Bezug für die Querverweis-Kacheln ("auch in 3 und 5"); ohne
     die Kacheln hat sie keinen Adressaten mehr. Die Kennung kategorie-N am
     <details> bleibt — sie trägt die Sprungziele.

   2 Die Marke war mit 18 px zu klein und lud nicht zum Darüberfahren ein.
     Jetzt 24 px bei 17 px Schrift, im Ruhezustand kräftiger (Akzentbraun
     statt Zierton).

     Bei Mauskontakt öffnet sich hinter dem Zeichen ein zarter Kreis, und es
     wächst leicht — beides in 180 ms. Das ist die Einladung; die Fläche
     entsteht erst dabei, im Ruhezustand bleibt die Marke rahmenlos.

     ⚠ Nur die AKTIVEN Marken animieren. Eine leere, die auf Mauskontakt
     reagiert und dann nichts zeigt, wäre eine Enttäuschung — sie sieht im
     Ruhezustand gleich aus, bewegt sich aber nicht. Sobald ein Text
     hinterlegt ist, animiert sie von selbst mit.

     Bei "Bewegung reduzieren" bleibt die Vergrößerung aus, der Farbwechsel
     nicht — er trägt die Information. */
.mvr-erklaer-marke {
  width: 24px; height: 24px;
  font-size: var(--mvr-bedien);
  color: var(--mvr-akzent);
  border-radius: 50%;
  transition: color .18s ease, background-color .18s ease, transform .18s ease;
}
.mvr-erklaer-marke--aktiv:hover,
.mvr-erklaer-marke--aktiv:focus-visible {
  color: var(--mvr-schrift-auf-dunkel);
  background-color: var(--mvr-flaeche-dunkel);
  transform: scale(1.16);
}
@media (prefers-reduced-motion: reduce) {
  .mvr-erklaer-marke { transition: color .18s ease, background-color .18s ease; }
  .mvr-erklaer-marke--aktiv:hover,
  .mvr-erklaer-marke--aktiv:focus-visible { transform: none; }
}
/* Der Zeilenabstand darf durch die grössere Marke nicht wachsen. */
.mvr-liste-zeile { padding: 7px 0; }

/* === Korrektur 28: Die Marke bekommt einen Kreis ========================
   Vorgaben des Betreibers:

   RUHEZUSTAND     ein "i" mit dezentem Kreis darum — bei jeder Marke,
                   ob mit Inhalt oder ohne. Der Kreis ist die Einladung.
   MAUSKONTAKT     wo ein Text vorliegt, füllt sich der Kreis dunkel
                   (#1D3849). ⚠ Die Palette hat kein Grün; das ist der
                   dunkelste Blauton und der einzige, der als "dunkelgrün"
                   in Frage kommt.
   OHNE INHALT     verändert sich nichts. Kein Farbwechsel, keine Bewegung.
   TELEFON         nur der dezente Kreis, kein Zustandswechsel.
   VERWALTUNG      jede Marke reagiert. ⚠ NICHT für jeden angemeldeten
                   Benutzer — nur wer core.manage auf com_content hat, also
                   die Inhalte verwalten darf. Ein registrierter Besucher
                   sieht genau das, was ein Gast sieht.
                   Wo KEIN Text hinterlegt ist, füllt
                   sich der Kreis DUNKEL SANDFARBEN (#725229) statt dunkel-
                   blau — daran ist auf einen Blick zu sehen, was noch
                   fehlt, ohne dass ein Besucher es je zu sehen bekommt. */

.mvr-erklaer-marke {
  border: 1px solid var(--mvr-linie);
  background-color: transparent;
  transform: none;
}

/* Mauskontakt nur am Schreibtisch — am Telefon bleibt der dezente Kreis. */
@media (hover: hover) {
  .mvr-erklaer-marke--aktiv:hover,
  .mvr-erklaer-marke--aktiv:focus-visible {
    background-color: var(--mvr-flaeche-dunkel);
    border-color: var(--mvr-flaeche-dunkel);
    color: var(--mvr-schrift-auf-dunkel);
    transform: none;
  }
  /* Angemeldet und ohne Text: dunkel sandfarben statt dunkelblau. */
  body.mvr-verwaltung .mvr-erklaer-huelle[data-leer] .mvr-erklaer-marke:hover,
  body.mvr-verwaltung .mvr-erklaer-huelle[data-leer] .mvr-erklaer-marke:focus-visible {
    background-color: var(--mvr-akzent);
    border-color: var(--mvr-akzent);
    color: var(--mvr-knopf-text);
  }
}
/* Angemeldet trägt die leere Marke ihre Farbe schon im Ruhezustand — sonst
   müsste man jede einzeln anfahren, um den Stand zu sehen. */
body.mvr-verwaltung .mvr-erklaer-huelle[data-leer] .mvr-erklaer-marke {
  color: var(--mvr-akzent); cursor: help;
}

/* === Korrektur 29: Klappmenü bündig zur Inhaltsschiene ==================
   Gemessen bei 1920 px: Inhaltsschiene endet bei 1513, das Klappmenü erst
   bei 1905 — es ragte 393 px darüber hinaus und klebte am Fensterrand.

   ⚠ Die Ursache ist eine Eigenheit der absoluten Positionierung: right:0
   bezieht sich auf die PADDING-BOX des positionierten Vorfahren, also auf
   dessen Außenkante. Das padding-inline der Kopfleiste, das den Inhalt auf
   die Schiene setzt, zählt dort NICHT mit. Deshalb muss dieselbe Rechnung
   hier noch einmal stehen. */
.mvr-klappnav {
  right: max(var(--mvr-rand), calc((100% - var(--mvr-inhalt)) / 2));
}

/* === Korrektur 30: Am Telefon gab es kein Menü ==========================
   ⚠ Beim Prüfen von Korrektur 29 gefunden, unabhängig davon: Zeile 374
   setzt in der Telefonregel .mvr-hauptnav auf display:none. In dieser
   Fassung enthält die hauptnav aber NUR die Klapptaste und das Klappmenü —
   keine Verweise daneben. Damit war unter 900 px gar kein Menü erreichbar:
   Klapptaste gemessen 0 px breit, Klappmenü nicht zu öffnen.

   Die Regel stammt offenbar aus einer früheren Fassung, in der dort noch
   Menüpunkte nebeneinander standen, die am Telefon durch die Klapptaste
   ersetzt werden sollten. Nach dem Umbau blieb sie stehen.

   Die Zeilen 376-378 belegen die ursprüngliche Absicht: Sie gestalten die
   Klapptaste eigens für das Telefon ("nur die Striche, ohne Wort") — was
   sinnlos wäre, wenn sie dort gar nicht erscheinen soll. */
@media (max-width: 900px) {
  .mvr-hauptnav { display: flex; }
}

/* === Korrektur 31: Kontaktseite =========================================
   Aufbau nach dem Entwurf: weisse Karte mit Schatten auf dem dunklen
   Fuchshintergrund. Der Hintergrund ist derselbe wie auf der Wartungsseite
   von mvr-hamburg.de — Bild und Farbschicht byteweise von dort übernommen
   (templates/shaper_helix3/css/mvr-offline.css, Zeile 34-47). */

.mvr-kontaktseite {
  min-height: calc(100vh - 112px);
  background-color: var(--mvr-flaeche-dunkel);
  background-image:
    linear-gradient(100deg,
      rgba(29, 56, 73, .94) 0%,
      rgba(29, 56, 73, .93) 45%,
      rgba(29, 56, 73, .92) 62%,
      rgba(29, 56, 73, .72) 100%),
    url(/images/Logos/mvr-fuchs-hintergrund.webp);
  background-size: cover;
  background-position: center right;
  background-repeat: no-repeat;
  padding: 64px max(var(--mvr-rand), calc((100% - var(--mvr-inhalt)) / 2)) 88px;
}

.mvr-kontaktkarte {
  background: var(--mvr-grund);
  max-width: 760px;
  padding: 52px 56px 56px;
  box-shadow: 14px 10px 28px -10px rgba(6, 15, 22, .40),
              26px 20px 54px -18px rgba(6, 15, 22, .30);
}
.mvr-kontakt-h1 { margin: 0 0 14px; font: 400 44px/1.15 var(--mvr-mittel-schrift);
  color: var(--mvr-text-stark); }
.mvr-kontakt-vorspann { margin: 0 0 40px; font-size: var(--mvr-bedien); line-height: 1.65;
  color: var(--mvr-text-leise); max-width: 46ch; }

/* --- Felder ------------------------------------------------------------- */
.mvr-formular { display: flex; flex-direction: column; gap: 22px; }
.mvr-feldpaar { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
.mvr-feld { display: flex; flex-direction: column; gap: 7px; }
.mvr-feld label { font-size: 14px; color: var(--mvr-text); }
/* Der Stern kommt aus Joomlas Pflichtfeld-Auszeichnung; die eigene Klasse
   ist nur der Anker für die Fehlerdarstellung. */
.mvr-feld label .star, .mvr-feld label .required { color: var(--mvr-akzent); }

.mvr-feld input[type="text"], .mvr-feld input[type="email"],
.mvr-feld input[type="tel"], .mvr-feld textarea {
  width: 100%; box-sizing: border-box;
  min-height: 46px; padding: 11px 14px;
  border: 1px solid var(--mvr-feldrahmen); background: var(--mvr-grund);
  font: 400 var(--mvr-lesen)/1.5 var(--mvr-lesen-schrift); color: var(--mvr-text-stark);
}
.mvr-feld textarea { min-height: 150px; resize: vertical; }
.mvr-feld input:focus, .mvr-feld textarea:focus {
  border-color: var(--mvr-flaeche-dunkel);
  outline: 2px solid var(--mvr-zier); outline-offset: 0;
}
/* Joomlas eigene Fehlerauszeichnung übernehmen — sie setzt invalid. */
.mvr-feld input:user-invalid, .mvr-feld textarea:user-invalid,
.mvr-feld .invalid { border-color: var(--mvr-akzent); border-width: 2px; }

/* --- Sicherheitsabfrage ------------------------------------------------- */
.mvr-sicherheit {
  background: var(--mvr-grund-sand); padding: 20px 22px;
  display: flex; flex-wrap: wrap; align-items: center; gap: 16px 22px;
}

/* --- Fuss --------------------------------------------------------------- */
.mvr-formular-fuss { display: flex; flex-direction: column; align-items: flex-start;
  gap: 14px; margin-top: 6px; }
.mvr-knopf--senden {
  min-height: 52px; padding: 0 30px; border: 0; cursor: pointer;
  background: var(--mvr-flaeche-dunkel); color: var(--mvr-schrift-auf-dunkel);
  font: 400 var(--mvr-lesen)/1 var(--mvr-lesen-schrift); letter-spacing: .04em;
  transition: background-color .16s ease;
}
.mvr-knopf--senden:hover { background: var(--mvr-flaeche-dunkel-2); }
.mvr-pflichthinweis { margin: 0; font-size: var(--mvr-klein); color: var(--mvr-text-leise); }

@media (max-width: 900px) {
  .mvr-kontaktseite {
    min-height: calc(100vh - 84px);
    background-image:
      linear-gradient(100deg, rgba(29,56,73,.95) 0%, rgba(29,56,73,.86) 100%),
      url(/images/Logos/mvr-fuchs-hoch.webp);
    padding: 32px 20px 48px;
  }
  .mvr-kontaktkarte { padding: 32px 22px 36px; }
  .mvr-kontakt-h1 { font-size: 32px; }
  .mvr-feldpaar { grid-template-columns: 1fr; }
}

/* === Korrektur 32: Sicherheitsabfrage und Einwilligung ==================
   Der sandfarbene Block nach dem Entwurf: links die Beschriftung, rechts
   der Hinweis "schützt vor maschinellen Anfragen"; darunter die Aufgabe in
   Serifenschrift, das Eingabefeld und der Knopf "Andere Frage".

   Der Knopf erscheint nur mit JavaScript (Klasse --schaltbar kommt aus
   mvr-kontakt.js). Ohne Skript bleibt die erste Aufgabe stehen und ist
   beantwortbar — ein Knopf, der dann nichts täte, wäre schlechter als
   keiner. */
.mvr-rechnen { background: var(--mvr-grund-sand); padding: 20px 22px 22px; }
.mvr-rechnen-kopf { display: flex; flex-wrap: wrap; align-items: baseline;
  justify-content: space-between; gap: 8px 20px; margin-bottom: 14px; }
.mvr-rechnen-titel { font-size: 14px; color: var(--mvr-text-stark); }
.mvr-pflichtstern { color: var(--mvr-akzent); }
.mvr-rechnen-hinweis { font-size: var(--mvr-klein); color: var(--mvr-text-leise); }
.mvr-rechnen-zeile { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; }
.mvr-rechnen-frage { font: 400 26px/1 var(--mvr-mittel-schrift); color: var(--mvr-text-stark);
  letter-spacing: .02em; }
.mvr-rechnen-feld { width: 86px; min-height: 46px; padding: 10px 12px; box-sizing: border-box;
  border: 1px solid var(--mvr-feldrahmen); background: var(--mvr-grund);
  font: 400 18px/1 var(--mvr-lesen-schrift); color: var(--mvr-text-stark); text-align: center; }
.mvr-rechnen-feld:focus { border-color: var(--mvr-flaeche-dunkel);
  outline: 2px solid var(--mvr-zier); outline-offset: 0; }
.mvr-rechnen-andere { display: none; margin-left: auto;
  min-height: 38px; padding: 0 16px; cursor: pointer;
  background: transparent; border: 1px solid var(--mvr-linie);
  font: 400 14px/1 var(--mvr-lesen-schrift); color: var(--mvr-text);
  transition: background-color .16s ease, border-color .16s ease; }
.mvr-rechnen--schaltbar .mvr-rechnen-andere { display: inline-flex;
  align-items: center; justify-content: center; }
.mvr-rechnen-andere:hover { background: var(--mvr-grund);
  border-color: var(--mvr-flaeche-dunkel); }

/* --- Einwilligung ------------------------------------------------------- */
.mvr-einwilligung { display: flex; align-items: flex-start; gap: 12px; }
.mvr-einwilligung input[type="checkbox"] {
  width: 20px; height: 20px; margin: 2px 0 0; flex: none;
  accent-color: var(--mvr-flaeche-dunkel); cursor: pointer;
}
.mvr-einwilligung label { font-size: 14px; line-height: 1.55; color: var(--mvr-text);
  cursor: pointer; max-width: 62ch; }
.mvr-einwilligung a { color: var(--mvr-akzent); }

@media (max-width: 900px) {
  .mvr-rechnen-andere { margin-left: 0; }
  .mvr-rechnen-frage { font-size: 22px; }
}


/* === Korrektur 33: Kontaktformular nach den Vorgaben vom 02.09.2026 ======

   Sechs Punkte des Betreibers, dazu zwei Befunde aus der Nachschau.

   1 · Vorspann auf zwei Zeilen — geloest ueber den Text, nicht ueber die
       Breite (siehe MVR_KONTAKT_VORSPANN in der Sprachdatei).
   2 · Einwilligung: kleine Schrift, ein Kaestchen. Der Satz stand dreimal
       da, weil Joomlas checkboxes-Layout ihn als Feldbeschriftung, als
       <legend> und als Optionstext ausgibt — letzteren mit sichtbarem
       "<a href=...>". Das Markup baut der Override jetzt selbst.
   3 · Betreff vor die Nachricht — im Override.
   4 · Sicherheitsabfrage: eine Beschriftung statt dreier, klein und rechts.
   5 · Pflichthinweis vor den Knopf — im Override.
   6 · Schatten an der Karte, siehe unten.
============================================================================ */

/* --- 4 · Sicherheitsabfrage ---------------------------------------------
   Der Kopf traegt nur noch EINEN Text und rueckt nach rechts aussen.

   ⚠ .mvr-sicherheit brachte Sandflaeche und Polster mit, .mvr-rechnen
   ebenfalls — zusammen ein Sandblock im Sandblock mit 40 px Polster.
   Sichtbar war das als heller Rahmen um die Aufgabe. Die Huelle gibt beides
   ab; die Flaeche gehoert dem Block, der die Aufgabe traegt. */
.mvr-sicherheit { background: none; padding: 0; display: block; }
.mvr-rechnen-kopf { justify-content: flex-end; margin-bottom: 12px; }
.mvr-rechnen-hinweis { font-size: 12px; letter-spacing: .01em;
  color: var(--mvr-text-leise); text-align: right; }

/* --- 2 · Einwilligung ---------------------------------------------------
   13 px gegen 17 px Fliesstext: klein, aber ueber der Grenze, ab der man
   zusammenkneift. Das Kaestchen bleibt bei 18 px — kleiner wird es auf dem
   Telefon zum Zielproblem (44 px Mindestflaeche gilt fuer die Beschriftung
   mit, und die ist mehrzeilig). */
.mvr-einwilligung-feld { margin-top: 2px; }
.mvr-einwilligung { display: flex; align-items: flex-start; gap: 10px; }
.mvr-einwilligung input[type="checkbox"] {
  width: 18px; height: 18px; margin: 1px 0 0; flex: none;
  accent-color: var(--mvr-flaeche-dunkel); cursor: pointer;
}
.mvr-einwilligung label { font-size: var(--mvr-klein); line-height: 1.5;
  color: var(--mvr-text-leise); cursor: pointer; max-width: 68ch; }
.mvr-einwilligung a { color: var(--mvr-akzent); text-underline-offset: 2px; }
.mvr-einwilligung a:hover { color: var(--mvr-flaeche-dunkel); }

/* --- 5 · Fuss: Hinweis ueber dem Knopf ---------------------------------- */
.mvr-formular-fuss { gap: 12px; margin-top: 10px; }

/* --- 6 · Schatten der Karte ---------------------------------------------
   ⚠ Die Karte HATTE einen Schatten — mit den Werten der Karten aus Block 4.
   Die stehen aber auf hellem Grund. Hier liegt die Karte auf dem dunklen
   Fuchsbild (#1D3849 unter 94 % Deckung), und ein Schatten in
   rgba(6,15,22,.40) verschwindet darauf: gerechnet ergibt er #142835 gegen
   #1D3849 — ein Unterschied, den ein 28-px-Verlauf vollends auffrisst.

   Die Erfahrung der Startseite fuer DUNKLEN Grund steht an der Buehne:
   grosser Versatz, kleiner Radius, hohe Deckung (64px 47px 16px -4px bei
   .50). Hier auf Kartengroesse gebracht — Verhaeltnis 1 : 0,73 wie ueberall,
   Licht von links oben.

   Der Spread bleibt klein: -10px hatten den Schatten weggefressen, derselbe
   Fehler wie an der Kopfleiste.

   Gewaehlt ist Fassung B (Betreiber, 02.09.) — von drei Staerken, die
   nebeneinander gezeigt wurden, die mittlere: rgba(3,9,14,.72) statt .55
   und ein noch tieferer Ton. Fassung A war auf dem Fuchsgrund kaum zu
   sehen, C liess die Karte schwer wirken.

   Das Telefonmass ist proportional gerechnet, Verhaeltnis 1 : 0,73
   (15:11 und 30:22) — dasselbe Licht von links oben wie auf der ganzen
   Website. */
.mvr-kontaktkarte {
  box-shadow: 26px 19px 40px -4px rgba(3, 9, 14, .72),
              54px 39px 90px -14px rgba(3, 9, 14, .58);
}

@media (max-width: 900px) {
  .mvr-kontaktkarte {
    box-shadow: 15px 11px 24px -2px rgba(3, 9, 14, .72),
                30px 22px 52px -8px rgba(3, 9, 14, .58);
  }
  .mvr-rechnen-kopf { justify-content: flex-start; }
  .mvr-rechnen-hinweis { text-align: left; }
}


/* === Korrektur 34: Wortmarke groesser (Entscheidung 02.09.2026) ==========

   Gemessen, warum sie zu klein wirkte: die x-Hoehe der Wortmarke lag bei
   7,9 px, die Menuebeschriftung daneben hat bei 13 px Schrift rund 6,5 px.
   Die Marke war also kaum groesser als eine Navigationsbeschriftung.
   30 px Bildhoehe ergeben 11,9 px x-Hoehe — Verhaeltnis 1,8 : 1 zum Menue.

   Die Datei ist 1288 x 134; bei 288 px Breite bleibt eine Reserve von
   4,5-fach, auf einem Retina-Schirm also immer noch mehr als genug.

   ⚠ Das Bild traegt oben 35 px Leerraum (26 % der Dateihoehe) — die Schrift
   sitzt darin von Zeile 35 bis 129. Mittig gesetzt steht sie deshalb
   optisch zu tief, und der Fehler waechst mit der Groesse: bei 20 px waren
   es 2,2 px, bei 30 px sind es 3,4 px. Das translateY holt das zurueck, ohne
   das Layout anzufassen. Wer die Bilddatei einmal beschneidet, kann die
   Zeile ersatzlos streichen. */
.mvr-namenszug img:not(.mvr-zeichen) { height: 30px; transform: translateY(-3.4px); }

/* ⚠ Die Telefonfassung MUSS hier mit stehen. Die Regel oben ist eine
   Grundregel am Dateiende — sie ueberholt die Medienabfrage aus Zeile 376
   (gleiche Spezifitaet, spaeter gewinnt). Ohne diesen Block bekam das
   Telefon ebenfalls 30 px: der Schriftzug lief 68 px ueber die Menuetaste
   hinweg bis an den Fensterrand.

   Die Hoehe bleibt am Telefon bei 14 px — Entscheidung des Betreibers vom
   02.09.: dort soll die Schrift so gross bleiben wie bisher. Vergroessert
   wird nur die Schreibtischfassung.

   Die Ausrichtung wird trotzdem mitgezogen: sie aendert die Groesse nicht,
   sondern holt nur die 1,6 px zurueck, um die die Schrift wegen des
   Leerraums im Bild zu tief sass. */
@media (max-width: 900px) {
  .mvr-namenszug img:not(.mvr-zeichen) { height: 14px; transform: translateY(-1.6px); }
}


/* === Korrektur 35: Kontaktseite, Fehler- und Erfolgsfall =================
   Die beiden Zustaende nach dem Absenden, nach dem Entwurf.
============================================================================ */

/* --- Fehlerkasten -------------------------------------------------------
   Sandflaeche wie die Sicherheitsabfrage, aber mit kraeftiger Kante links:
   dieselbe Sprache wie die umrandeten Felder darunter. */
.mvr-fehlerkasten {
  margin: 0 0 32px;
  padding: 18px 22px 20px;
  background: var(--mvr-grund-sand);
  border-left: 4px solid var(--mvr-akzent);
}
.mvr-fehlerkasten-titel {
  margin: 0 0 6px; font-size: var(--mvr-bedien); font-weight: 600;
  color: var(--mvr-text-stark);
}
.mvr-fehlerkasten-text { margin: 0; font-size: 15px; line-height: 1.55; color: var(--mvr-text); }
/* Joomlas eigene Meldungen — sie nennen den Grund, den die Umrandung allein
   nicht mitteilt ("Die Antwort stimmt nicht"). Leise gesetzt, damit sie den
   Kopfsatz nicht ueberlagern. */
.mvr-fehlerkasten-liste {
  margin: 10px 0 0; padding: 0 0 0 18px;
  font-size: var(--mvr-klein); line-height: 1.5; color: var(--mvr-text-leise);
}
.mvr-fehlerkasten-liste:empty { display: none; }
.mvr-fehlerkasten-liste li { margin: 2px 0; }

/* --- Beanstandete Felder ------------------------------------------------
   ⚠ Nicht ueber die Farbe allein. Wer Rot und Braun nicht unterscheidet,
   saehe sonst gar nichts — deshalb 2 px Rahmen gegen 1 px und ein
   Sandschimmer im Feld. Der Kasten oben nennt zusaetzlich die Anzahl. */
.mvr-feld--schlecht input,
.mvr-feld--schlecht textarea,
.mvr-feld--schlecht select {
  border-width: 2px;
  border-color: var(--mvr-akzent);
  background: color-mix(in srgb, var(--mvr-grund-sand) 45%, var(--mvr-grund));
}
.mvr-feld--schlecht label { color: var(--mvr-akzent); }
.mvr-einwilligung-feld.mvr-feld--schlecht {
  padding: 10px 14px;
  background: color-mix(in srgb, var(--mvr-grund-sand) 45%, var(--mvr-grund));
  border-left: 3px solid var(--mvr-akzent);
}
.mvr-sicherheit.mvr-feld--schlecht .mvr-rechnen { box-shadow: inset 0 0 0 2px var(--mvr-akzent); }
.mvr-sicherheit.mvr-feld--schlecht .mvr-rechnen-feld { border-width: 2px; border-color: var(--mvr-akzent); }

/* --- Bestaetigung -------------------------------------------------------
   Dunkler Kasten mit Haken, an der Stelle des Formulars. */
.mvr-dank {
  display: flex; flex-direction: column; align-items: flex-start;
  gap: 14px;
  padding: 40px 42px 44px;
  background: var(--mvr-flaeche-dunkel);
  color: var(--mvr-schrift-auf-dunkel);
}
/* Haken im Ring, wie im Entwurf. Beides aus Kanten gebaut — kein Bild,
   keine Icon-Schrift; das waeren zwei Dateien fuer einen Kreis und einen
   Winkel. Der Haken sitzt im Ring leicht ueber der Mitte: gedreht steht
   sein optischer Schwerpunkt tiefer als sein Kasten. */
.mvr-dank-ring {
  width: 52px; height: 52px; flex: none;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--mvr-schrift-auf-dunkel-2);
  border-radius: 50%;
  margin: 0 0 10px;
}
.mvr-dank-haken {
  width: 17px; height: 9px; flex: none;
  border-left: 2px solid var(--mvr-schrift-auf-dunkel);
  border-bottom: 2px solid var(--mvr-schrift-auf-dunkel);
  transform: rotate(-45deg);
  margin-top: -4px;
}
.mvr-dank-titel {
  margin: 0; font: 400 34px/1.2 var(--mvr-mittel-schrift);
  color: var(--mvr-schrift-auf-dunkel);
}
.mvr-dank-text {
  margin: 0; font-size: var(--mvr-bedien); line-height: 1.6;
  color: var(--mvr-schrift-auf-dunkel-2); max-width: 46ch;
}
/* Umriss, nicht gefuellt — so zeigt es der Entwurf. Auf dunklem Grund
   traegt der Rahmen; eine sandfarbene Flaeche waere hier der Hauptknopf
   und zoege den Blick von der Nachricht ab. */
.mvr-dank-zurueck {
  margin-top: 12px; min-height: 52px; padding: 0 30px;
  display: inline-flex; align-items: center;
  background: transparent; color: var(--mvr-schrift-auf-dunkel);
  border: 1px solid var(--mvr-schrift-auf-dunkel-2);
  text-decoration: none;
  font: 400 var(--mvr-lesen)/1 var(--mvr-lesen-schrift); letter-spacing: .04em;
  transition: background-color .16s ease, border-color .16s ease;
}
.mvr-dank-zurueck:hover {
  background: rgba(251, 234, 212, .12);
  border-color: var(--mvr-schrift-auf-dunkel);
  color: var(--mvr-schrift-auf-dunkel);
}

@media (max-width: 900px) {
  .mvr-dank { padding: 28px 22px 32px; }
  .mvr-dank-titel { font-size: 27px; }
  .mvr-fehlerkasten { padding: 14px 16px 16px; margin-bottom: 24px; }
}


/* === Korrektur 36: Bestaetigung NEBEN dem Formular =======================
   Vorgabe des Betreibers vom 02.09.: Nach dem Absenden bleibt das Formular
   stehen, damit man nachlesen kann, was man geschrieben hat. Es ist dann
   gesperrt, der Knopf ausgegraut; die Bestaetigung steht daneben. Ein
   Neuladen raeumt beides ab.

   Auf der Vergleichsseite abgestimmt, dort auch die Alternativen.
============================================================================ */

/* Zweispaltig, sobald eine Bestaetigung danebensteht — sonst bleibt alles
   wie bisher.

   ⚠ KEIN justify-content. Die Seite hat links ein Polster von --mvr-rand;
   dort steht die Karte auch im Normalzustand. Ein zentriertes Raster
   verschob sie um 10 px, sobald die Bestaetigung erschien — ein Sprung
   genau zwischen den beiden Zustaenden, die man vergleichen will. */
.mvr-kontaktseite--bestaetigt {
  display: grid;
  grid-template-columns: minmax(0, 760px) 300px;
  align-items: start;
  gap: 40px;
}
.mvr-kontaktseite--bestaetigt > .mvr-kontaktkarte { max-width: none; margin: 0; }
.mvr-kontaktseite--bestaetigt .mvr-dank {
  padding: 30px 28px 32px;
  box-shadow: 26px 19px 40px -4px rgba(3, 9, 14, .72),
              54px 39px 90px -14px rgba(3, 9, 14, .58);
}
.mvr-kontaktseite--bestaetigt .mvr-dank-titel { font-size: 27px; }
.mvr-kontaktseite--bestaetigt .mvr-dank-text  { font-size: 15px; }

/* --- Gesperrtes Formular ------------------------------------------------
   ⚠ Browser setzen den Text gesperrter Felder auf ein blasses Grau. Der
   Nutzer soll aber LESEN koennen, was er geschrieben hat — die Schriftfarbe
   wird deshalb zurueckgeholt und nur die Flaeche gedaempft. Safari braucht
   dafuer zusaetzlich -webkit-text-fill-color; ohne das bleibt es grau. */
.mvr-formular-felder { border: 0; margin: 0; padding: 0; min-width: 0; }
.mvr-formular-felder:disabled input,
.mvr-formular-felder:disabled textarea,
.mvr-formular-felder:disabled select {
  color: var(--mvr-text-stark);
  -webkit-text-fill-color: var(--mvr-text-stark);
  background: #faf8f5;
  border-color: #e2ddd3;
  opacity: 1;
  cursor: default;
}
.mvr-formular-felder:disabled label,
.mvr-formular-felder:disabled .mvr-rechnen-hinweis,
.mvr-formular-felder:disabled .mvr-einwilligung label { color: var(--mvr-text-leise); }
.mvr-formular-felder:disabled .mvr-rechnen { opacity: .55; }
.mvr-formular-felder:disabled .mvr-einwilligung input { opacity: .6; }
.mvr-formular-felder:disabled .mvr-knopf--senden {
  background: #c9c2b5; color: #6f6a62; cursor: not-allowed;
}
.mvr-formular-felder:disabled .mvr-knopf--senden:hover { background: #c9c2b5; }

/* --- Schmale Schirme ----------------------------------------------------
   Unter 1180 px passen 760 + 300 nicht mehr nebeneinander. Die Bestaetigung
   rutscht dann UNTER das Formular — Entscheidung des Betreibers: erst
   lesen, was man geschrieben hat, dann die Antwort, und zwar dort, wo
   vorher der Senden-Knopf war.

   ⚠ Gemessen liegt sie damit 1234 px unter dem Seitenanfang, also mehr als
   einen Telefonschirm tief. Damit sie nicht uebersehen wird, holt
   mvr-kontakt.js sie einmal ins Bild. Ohne JavaScript steht sie am Ende —
   erreichbar, nur ohne Sprung. */
@media (max-width: 1180px) {
  .mvr-kontaktseite--bestaetigt { grid-template-columns: minmax(0, 760px); }
  .mvr-kontaktseite--bestaetigt .mvr-dank { padding: 28px 22px 32px; }
}

/* Der Kopf steht (sticky, 84 px am Telefon). Ohne diesen Abstand verdeckt
   er beim Sprung die obere Kante der Bestaetigung samt Haken. */
#mvr-dank { scroll-margin-top: 100px; }

/* === Korrektur 37: Erklärfenster dynamisch platzieren ===================
   Das Fenster stand fest über der Marke (bottom: calc(100% + 8px)). In der
   obersten Zeile eines aufgeklappten Fachs lief es damit hinter die
   klebende Kopfleiste (z-index 100) und war halb abgeschnitten — gemeldet
   am 03.09.2026 mit Bildschirmfoto.

   mvr-erklaer.js misst jetzt Marke und Fenster und setzt es frei: bevorzugt
   darüber wie bisher, sonst darunter, waagerecht in den Bildschirm geklemmt.
   Reicht es nirgends, bekommt es eine Höhengrenze und wird scrollbar.

   ⚠ position: fixed statt absolute — nur so ist das Fenster von keinem
   Elternelement mehr beschnitten. Es funktioniert hier, weil kein Vorfahre
   transform, filter oder contain trägt; sonst wäre der Bezugsrahmen nicht
   das Sichtfenster, sondern jener Vorfahre.

   Ohne JavaScript bleibt die alte, feste Lage. Dann ist das Fenster an
   ungünstigen Stellen beschnitten — aber nie ganz fort. */
.mvr-erklaer-fenster[data-frei] {
  position: fixed;
  right: auto;
  bottom: auto;
  z-index: 120;                 /* über der Kopfleiste (100) */
  overflow-y: auto;
  overscroll-behavior: contain;
  /* Deckel gegen den einen Fall, den das seitliche Klemmen nicht heilen
     kann: ein Fenster, das breiter ist als der Bildschirm. Mit
     width: min(400px, 78vw) tritt er nicht auf — die Regel kostet nichts
     und faengt kuenftige Aenderungen an der Breite ab. */
  max-width: calc(100vw - 20px);
}


/* === Korrektur 38: Fehlerkasten NEBEN das Formular ======================
   Vorgabe des Betreibers vom 03.09.: Die Fehlermeldung soll dort stehen,
   wo die Bestaetigung steht — gleiche Groesse, gleiche Stelle, gleicher
   Schatten. Am Telefon darunter.

   Der Unterschied zwischen den beiden Zustaenden liegt danach NICHT mehr
   in der Lage des Kastens, sondern nur noch im Formular:

       Fehler   Formular voll bedienbar, beanstandete Felder umrandet
       Erfolg   Formular gesperrt, Knopf ausgegraut, nur noch Beleg

   Bisher sass der Fehlerkasten IN der Karte ueber dem Formular. Der Platz
   dort war eng: bei mehreren Meldungen schob er den Vorspann und die
   ersten Felder nach unten, und auf einem 1440er Schirm blieben rechts
   340 px leer, waehrend der Kasten die Karte laenger machte.

   ⚠ Dieser Block steht am DATEIENDE und ueberholt damit die Regeln aus
   Korrektur 36 (gleiche Spezifitaet, spaeter gewinnt) — auch deren
   Medienabfrage bei 1180 px. Deshalb ist das Raster hier VOLLSTAENDIG neu
   aufgeschrieben, Schreibtisch wie Telefon. Die Werte sind dieselben; die
   Bestaetigung sieht unveraendert aus. Wer hier etwas aendert, muss wissen,
   dass Korrektur 36 nichts mehr dagegen ausrichtet.
============================================================================ */

/* --- Das gemeinsame Raster ---------------------------------------------
   --daneben traegt das Raster, --bestaetigt und --beanstandet sagen nur,
   WELCHER Kasten daneben steht. So gibt es die Masse einmal statt zweimal.

   ⚠ KEIN justify-content — siehe Korrektur 36: ein zentriertes Raster
   verschob die Karte um 10 px, sobald der Kasten erschien. Genau der
   Sprung zwischen den Zustaenden, die man vergleichen will. */
.mvr-kontaktseite--daneben {
  display: grid;
  grid-template-columns: minmax(0, 760px) 300px;
  align-items: start;
  gap: 40px;
}
.mvr-kontaktseite--daneben > .mvr-kontaktkarte {
  max-width: none;
  margin: 0;
  grid-column: 1;
  grid-row: 1;
}

/* ⚠ Die Lage MUSS ausdruecklich gesetzt werden. Der Fehlerkasten steht im
   Markup VOR der Karte (damit Vorlesesoftware ihn zuerst nennt) — ohne
   diese Regel legte die selbsttaetige Verteilung ihn in die erste Spalte
   und die Karte in die zweite. Die Bestaetigung steht dahinter und braeuchte
   sie nicht; sie bekommt sie trotzdem, damit beide Zustaende von derselben
   Regel getragen werden. */
.mvr-kontaktseite--daneben > .mvr-fehlerkasten,
.mvr-kontaktseite--daneben > .mvr-dank {
  grid-column: 2;
  grid-row: 1;

  /* ⚠ Der Schatten der Formularkarte fiel AUF diese Karte und schmutzte
     sie ein — auf der sandfarbenen Fassung deutlich sichtbar, gemeldet am
     03.09.2026.

     Das war nicht nur haesslich, sondern falsch: Beide Karten liegen auf
     derselben Hoehe ueber dem Fuchsgrund. Dann wirft keine ihren Schatten
     auf die andere — beide werfen ihn auf den Grund dahinter. Sichtbar
     wurde er nur, weil die Formularkarte im Markup SPAETER steht und
     deshalb darueber gezeichnet wurde. Eine Zufaelligkeit der
     Zeichenreihenfolge, keine Absicht.

     z-index hebt diese Karte auf dieselbe Ebene wie die Formularkarte;
     position: relative ist dafuer noetig, sonst wirkt z-index nicht. Ihr
     eigener Schatten faellt weiterhin nach rechts unten auf den Grund. */
  position: relative;
  z-index: 1;
}

/* --- Der Fehlerkasten in der Spalte ------------------------------------
   Masse und Schatten wie die Bestaetigung. Die sandfarbene Flaeche und die
   kraeftige Kante links bleiben — sie sind die Sprache der umrandeten
   Felder daneben; ein dunkler Kasten wuerde Fehler und Erfolg auf den
   ersten Blick gleich aussehen lassen. */
.mvr-kontaktseite--daneben > .mvr-fehlerkasten {
  margin: 0;
  padding: 30px 28px 32px;
  box-shadow: 26px 19px 40px -4px rgba(3, 9, 14, .72),
              54px 39px 90px -14px rgba(3, 9, 14, .58);
}

/* --- Schmale Schirme ---------------------------------------------------
   Unter 1180 px passen 760 + 300 nicht mehr nebeneinander. Beide Kaesten
   rutschen UNTER das Formular.

   ⚠ order statt Markupreihenfolge. Der Fehlerkasten steht im Markup vorn,
   soll im Bild aber unten stehen (Vorgabe des Betreibers). order verschiebt
   nur das Bild; Vorlesesoftware bleibt bei der Markupreihenfolge und nennt
   die Meldung weiterhin zuerst. Das geht hier gefahrlos, weil der Kasten
   kein anspringbares Element enthaelt — sonst liefen Tabulator und Auge
   auseinander. */
@media (max-width: 1180px) {
  .mvr-kontaktseite--daneben { grid-template-columns: minmax(0, 760px); }
  .mvr-kontaktseite--daneben > .mvr-kontaktkarte {
    grid-column: 1; grid-row: auto; order: 1;
  }
  .mvr-kontaktseite--daneben > .mvr-fehlerkasten,
  .mvr-kontaktseite--daneben > .mvr-dank {
    grid-column: 1; grid-row: auto; order: 2;
  }
  .mvr-kontaktseite--daneben > .mvr-dank { padding: 28px 22px 32px; }
  .mvr-kontaktseite--daneben > .mvr-fehlerkasten { padding: 28px 22px 32px; }
}

/* Der Kopf steht (sticky). Ohne diesen Abstand verdeckt er beim Sprung die
   obere Kante des Kastens samt Ueberschrift. */
#mvr-fehler { scroll-margin-top: 100px; }

/* Sprungziel im Fehlerfall auf schmalen Schirmen — siehe mvr-kontakt.js.
   Ohne diesen Abstand schoebe der stehende Kopf das angesteuerte Feld
   samt Beschriftung unter sich. */
.mvr-feld--schlecht { scroll-margin-top: 100px; }


/* === Korrektur 39: der Grund steht am Feld ==============================
   Nach dem Entwurf des Designers, gemeldet am 03.09.2026 mit Bildvergleich.

   Vorher standen alle Gruende als Aufzaehlung IM Kasten. Der Kasten sagte
   also „drei Angaben sind unvollstaendig" und darunter, welche — und der
   Leser musste die Liste selbst auf die umrandeten Felder verteilen. Jetzt
   steht der Grund dort, wo nachzubessern ist; im Kasten bleibt nur der
   zusammenfassende Satz.
============================================================================ */

.mvr-feldhinweis {
  margin: 0;
  font-size: var(--mvr-klein);
  line-height: 1.5;
  color: var(--mvr-akzent);
}

/* Die Rechenaufgabe steht in einem waagerechten Flexkasten; ihr Hinweis
   sitzt als Geschwister DAHINTER und braucht deshalb einen eigenen
   Abstand — die 7 px Luecke der uebrigen Felder gibt es dort nicht. */
.mvr-sicherheit + .mvr-feldhinweis { margin-top: 7px; }

/* --- Die Beschriftung bleibt, wie sie ist -------------------------------
   Korrektur 35 hat sie ocker eingefaerbt. Der Entwurf tut das nicht: dort
   steht „E-Mail *" in derselben Farbe wie jede andere Beschriftung, und
   getragen wird der Befund vom 2-px-Rahmen, vom Sandschimmer im Feld und
   vom Hinweis darunter.

   Das ist auch das bessere Verfahren. Drei Signale, von denen nur eines
   die Farbe ist — wer Rot und Braun nicht unterscheidet, sieht immer noch
   den staerkeren Rahmen und liest den Satz. Eine ocker gefaerbte
   Beschriftung neben einem ocker gefaerbten Hinweis waere dagegen bloss
   mehr von derselben Farbe. */
.mvr-feld--schlecht label { color: var(--mvr-text); }

/* ⚠ Ausgenommen der Stern am Pflichtfeld — der war schon immer ocker und
   gehoert nicht zur Fehlerdarstellung. */
.mvr-feld--schlecht label .star,
.mvr-feld--schlecht label .required { color: var(--mvr-akzent); }


/* === Korrektur 40: die Umrandung hat NIE gewirkt ========================
   Gefunden am 03.09.2026 beim Nachmessen der Feldhinweise.

   Korrektur 35 setzte am 02.09. `.mvr-feld--schlecht input` — Spezifitaet
   (0,1,1). Die Grundregel in Zeile 1407 lautet aber
   `.mvr-feld input[type="email"]` und hat mit dem Attributselektor (0,2,1).
   Sie gewinnt. Ein beanstandetes Textfeld sah deshalb aus wie jedes andere:
   1 px grau, weisser Grund.

   Sichtbar war die Beanstandung nur an der Einwilligung und an der
   Rechenaufgabe — die beiden werden ueber andere, spezifischere Selektoren
   angesprochen. Genau deshalb ist es einen Tag lang niemandem aufgefallen.

   ⚠ Und mir auch nicht: Ich hatte „3 umrandete Felder" gemeldet und dabei
   die KLASSE gezaehlt, nicht die Wirkung. Der Merksatz aus dem
   Schwesterprojekt gilt hier woertlich — ein Wert, der im HTML ankommt,
   ist noch keine Wirkung.

   Der Kasten daneben behauptet „Sie stehen im Formular umrandet". Ohne
   diese Regel war das unwahr.
============================================================================ */

.mvr-feld--schlecht input[type="text"],
.mvr-feld--schlecht input[type="email"],
.mvr-feld--schlecht input[type="tel"],
.mvr-feld--schlecht textarea,
.mvr-feld--schlecht select {
  border: 2px solid var(--mvr-akzent);
  background: color-mix(in srgb, var(--mvr-grund-sand) 45%, var(--mvr-grund));
}

/* Der Rahmen im Fokus bleibt der Fokusrahmen — sonst saehe man beim
   Nachbessern nicht, in welchem Feld man gerade steht. */
.mvr-feld--schlecht input:focus,
.mvr-feld--schlecht textarea:focus {
  border-color: var(--mvr-flaeche-dunkel);
}


/* === Korrektur 41: der Fehlerfall nach dem Entwurf ======================
   Entscheidung des Betreibers vom 03.09.2026, mit Begruendung:

     „Es ist fuer den User besser erkennbar was falsch ist, wenn er darauf
      hingewiesen wird in einem extra Text, als wenn es nur irgendwelche
      Einfaerbungen im Formular sind. Er kann richtig und falsch
      unterscheiden und sieht wo er was aendern muss."

   Der Entwurf setzt das konsequent um: KEINE Flaechen, nur eine kraeftige
   Kante um das Feld und darunter ein Satz. Was hier wegfaellt, sind
   ausschliesslich Einfaerbungen — die drei Signale, auf die es ankommt,
   bleiben und sind sogar staerker geworden:

       1  der Satz unter dem Feld          (Korrektur 39)
       2  2 px Kante gegen 1 px            (Korrektur 40)
       3  aria-invalid und aria-describedby fuer Vorlesesoftware

   ⚠ Die alte Begruendung fuer den Sandschimmer war „nicht ueber die Farbe
   allein — wer Rot und Braun nicht unterscheidet, saehe sonst gar nichts".
   Die gilt weiter, wird aber jetzt vom Satz getragen. Ein Text ist das
   staerkste farbunabhaengige Signal, das es gibt; eine zweite Toenung
   daneben fuegt nichts hinzu, was ein Mensch ohne Farbsehen nutzen kann.
============================================================================ */

/* --- Kein Sandschimmer im beanstandeten Feld --------------------------- */
.mvr-feld--schlecht input[type="text"],
.mvr-feld--schlecht input[type="email"],
.mvr-feld--schlecht input[type="tel"],
.mvr-feld--schlecht textarea,
.mvr-feld--schlecht select {
  background: var(--mvr-grund);
}

/* --- Keine Flaeche und keine Kante an der Einwilligung ------------------
   Der Entwurf zeigt dort eine gewoehnliche Zeile mit Kaestchen; darunter
   den Satz. Die sandfarbene Flaeche und der 3-px-Balken entfallen. */
.mvr-einwilligung-feld.mvr-feld--schlecht {
  padding: 0;
  background: none;
  border-left: 0;
}

/* --- Die Sicherheitsabfrage: dunkle Kachel statt Sandblock -------------
   Der Entwurf setzt die Aufgabe auf eine dunkle Flaeche in Serifenschrift,
   das Antwortfeld daneben auf Weiss. Darum herum ist nichts.

   ⚠ Damit weicht die Abfrage von Korrektur 32 ab, die den Sandblock „nach
   dem Entwurf" gebaut hat. Beides stammt vom selben Designer, aus zwei
   Fassungen — die neuere gilt. Der kleine Kopftext bleibt rechts oben, das
   war eine ausdrueckliche Vorgabe des Betreibers vom 02.09. und keine
   Sache des Entwurfs.

   ⚠ Zwei Sandflaechen lagen uebereinander: .mvr-sicherheit aus dem
   Override UND .mvr-rechnen aus dem Captcha-Plugin. Beide muessen weg,
   sonst bleibt ein Rahmen aus Innenabstand stehen. */
.mvr-sicherheit,
.mvr-rechnen {
  background: none;
  padding: 0;
}
.mvr-rechnen-kopf { margin-bottom: 10px; }

/* ⚠ :not([hidden]) ist Pflicht. Von den drei Aufgaben traegt jeweils zwei
   das Merkmal hidden — und `display` aus einer Autorenregel schlaegt die
   Vorgabe des Browsers dafuer. Ohne die Ausnahme stuenden alle drei
   Aufgaben nebeneinander da. Dieselbe Falle wie schon zweimal in diesem
   Projekt. */
.mvr-rechnen-frage:not([hidden]) {
  display: inline-flex;
  align-items: center;
  min-height: 48px;
  padding: 0 20px;
  background: var(--mvr-flaeche-dunkel);
  color: var(--mvr-schrift-auf-dunkel);
  font: 400 22px/1 var(--mvr-mittel-schrift);
  letter-spacing: .02em;
}

/* Das Antwortfeld steht auf Weiss und traegt im Fehlerfall die einzige
   farbige Kante des Blocks. */
.mvr-rechnen-feld { background: var(--mvr-grund); }

/* Der Ring um den ganzen Block entfaellt — er war die Ersatzloesung fuer
   eine Zeit ohne Hinweistext. Beanstandet wird jetzt das Feld, in das man
   schreiben muss, und der Satz sagt warum. */
.mvr-sicherheit.mvr-feld--schlecht .mvr-rechnen { box-shadow: none; }

@media (max-width: 900px) {
  .mvr-rechnen-frage:not([hidden]) { font-size: 19px; min-height: 44px; padding: 0 14px; }
}


/* === Korrektur 42: der Kasten daneben wird zur Karte ====================
   Vorgabe des Betreibers vom 03.09.2026, an seinem Entwurfsbild abgelesen:
   Neben dem Formular steht eine WEISSE KARTE mit Schatten — Groesse und
   Schatten wie die Bestaetigung —, und darin steht nicht nur die Meldung,
   sondern darunter jedes beanstandete Feld noch einmal: Beschriftung, der
   eingegebene Wert und der Grund.

   Damit beantwortet die Karte allein schon die Frage „was ist falsch und
   wo muss ich hin", ohne dass man das Formular absuchen muss. Im Formular
   selbst bleibt alles stehen und bedienbar; die Karte ist ein Abbild.

   ⚠ Die Felder in der Karte sind ABBILDER, keine Eingabefelder — kein
   name, kein id, nichts Anspringbares. Zwei bedienbare Fassungen desselben
   Feldes auf einer Seite waeren eine Falle: man tippt in der Karte und
   schickt aus dem Formular den alten Wert ab.
============================================================================ */

/* ⚠ Fassung A, vom Betreiber am 03.09.2026 aus vier Vorschlaegen gewaehlt.

   Weiss ging nicht: die Karte stand als weisse Flaeche neben der weissen
   Formularkarte, und die beiden liefen ineinander. --mvr-flaeche-sand ist
   die Flaechenfarbe der Website — dieselbe, die auf der Startseite ganze
   Abschnitte traegt. Sie setzt sich von Weiss ab, ohne lauter zu werden
   als die Meldung darin: die bleibt mit --mvr-grund-sand der kraeftigere
   Ton, zwei Schichten aus einer Familie.

   Nicht genommen: das Dunkelblau der Bestaetigung. Fehler und Erfolg
   saehen sich damit auf den ersten Blick gleich — der Unterschied waere
   erst beim Lesen erkennbar. Das Dunkelblau bleibt der Bestaetigung
   vorbehalten.

   Gemessen in dieser Fassung: Beschriftung 7,84:1, Grund-Satz 5,91:1 —
   beides ueber AA. */
.mvr-kontaktseite--daneben > .mvr-fehlerkasten {
  padding: 24px 22px 26px;
  background: var(--mvr-flaeche-sand);
  border-left: 0;
}

/* Die Meldung behaelt ihr Sandkleid samt Kante — sie ist der Kopf der
   Karte, nicht die Karte selbst. */
.mvr-fehlerkasten__meldung {
  background: var(--mvr-grund-sand);
  border-left: 4px solid var(--mvr-akzent);
  padding: 14px 16px 16px;
  margin: 0 0 22px;
}
.mvr-fehlerkasten__meldung .mvr-fehlerkasten-titel { font-size: var(--mvr-lesen); }
.mvr-fehlerkasten__meldung .mvr-fehlerkasten-text  { font-size: 14px; }
.mvr-fehlerkasten__meldung .mvr-fehlerkasten-liste { font-size: 12.5px; }

/* --- Die Felder darunter ------------------------------------------------ */
.mvr-fehlerkasten__felder { display: flex; flex-direction: column; gap: 18px; }
.mvr-fehlerkasten__feld   { display: flex; flex-direction: column; gap: 6px; }

.mvr-fehlerkasten__marke { font-size: var(--mvr-klein); color: var(--mvr-text); }

/* Sieht aus wie das Feld im Formular — dieselbe Kante, dieselbe Flaeche.
   Nur eben ohne Eingabe.

   ⚠ min-height statt height: ein langer Wert soll umbrechen und nicht
   abgeschnitten werden. In 256 px Innenbreite passt eine lange Adresse
   sonst nicht. */
.mvr-fehlerkasten__wert {
  display: block;
  min-height: 40px;
  padding: 9px 12px;
  border: 2px solid var(--mvr-akzent);
  background: var(--mvr-grund);
  font: 400 14px/1.5 var(--mvr-lesen-schrift);
  color: var(--mvr-text-stark);
  overflow-wrap: anywhere;
}
.mvr-fehlerkasten__wert:empty::before { content: ""; }

/* Die Rechenaufgabe: dunkle Kachel und daneben das leere Antwortfeld —
   dieselbe Sprache wie im Formular.

   ⚠ Die Antwort steht bewusst NICHT da. Das Captcha-Plugin bewahrt sie
   nicht auf, und das ist richtig so: bei jedem Aufbau gilt eine neue
   Aufgabe, eine alte Antwort waere dazu ohnehin falsch. */
.mvr-fehlerkasten__aufgabe { display: flex; align-items: stretch; gap: 8px; }
.mvr-fehlerkasten__kachel {
  display: inline-flex; align-items: center;
  padding: 0 12px; min-height: 40px;
  background: var(--mvr-flaeche-dunkel);
  color: var(--mvr-schrift-auf-dunkel);
  font: 400 15px/1 var(--mvr-mittel-schrift); letter-spacing: .02em;
  white-space: nowrap;
}
.mvr-fehlerkasten__wert--kurz { width: 58px; flex: none; }

/* Das leere Kaestchen der Einwilligung. */
.mvr-fehlerkasten__haken {
  width: 20px; height: 20px;
  border: 2px solid var(--mvr-akzent);
  background: var(--mvr-grund);
}

.mvr-fehlerkasten__satz {
  font-size: 12.5px; line-height: 1.45; color: var(--mvr-akzent);
}

/* Am Telefon steht die Karte unter dem Formular und ist dort breiter. */
@media (max-width: 1180px) {
  .mvr-kontaktseite--daneben > .mvr-fehlerkasten { padding: 24px 22px 26px; }
  .mvr-fehlerkasten__felder { gap: 16px; }
}

/* =========================================================================
   Hinweisseite für geschützte Bereiche (HTTP 403)
   Eingebaut am 04.09.2026 nach dem Entwurf des Betreibers.

   Sie erscheint, sobald ein Gast einen Link anklickt, den er nicht sehen
   darf — gleich welchen. Kein Fehler, sondern eine Auskunft: Die Seite gibt
   es, sie ist nur nicht für ihn.

   ⚠ Die Regeln hängen an `.mvr-zugang`, nicht an `.mvr-abschnitt` — die
   404-Seite benutzt dieselbe Datei und darf nichts davon abbekommen.
   ========================================================================= */

/* Zwei Spalten: der Text links, der Fuchs rechts. Er ist Schmuck und trägt
   keine Aussage — deshalb im Markup mit aria-hidden und hier ohne feste
   Höhe, damit er die Zeile nicht auseinanderzieht. */
.mvr-zugang-raster {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 200px;
  gap: 48px;
  align-items: start;
}

.mvr-zugang-text > :first-child { margin-top: 0; }

/* Die Fehlerzahl und die beiden Marken stehen dicht beieinander — sie
   gehören zusammen und bilden den Kopf des Blocks.

   ⚠ Die Grundregel gibt der Augenbraue 36 px Abstand nach unten. Zwischen
   zwei Augenbrauen wäre das eine Lücke, in der die Zugehörigkeit verloren
   geht; deshalb steht hier ein eigener, kleinerer Wert. */
.mvr-zugang-text .mvr-fehlerzahl { margin-bottom: 10px; }
.mvr-zugang-text .mvr-augenbraue { margin-bottom: 6px; }
.mvr-zugang-text .mvr-augenbraue + .mvr-augenbraue { margin-bottom: 28px; }

.mvr-zugang-text h1 { margin-bottom: 20px; }

.mvr-zugang-text .mvr-fliesstext { max-width: 46ch; }

/* Der Fuchs steht in einem Kreis. Die Bilddatei ist freigestellt — der Grund
   kommt von hier, nicht aus dem Bild. So lässt sich die Farbe ändern, ohne
   eine neue Datei zu erzeugen. */
.mvr-zugang-bild {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background: var(--mvr-grund-sand);
  display: grid;
  place-items: center;
  overflow: hidden;
  justify-self: end;

  /* Derselbe Lichteinfall wie beim Fuchs auf der Startseite: von links oben,
     Schatten nach rechts unten. Zwei Lagen — Kernschatten und weicher Abfall.

     ⚠ Die Werte sind NICHT übernommen, sondern umgerechnet. Der Kreis auf
     der Startseite misst 420 px, dieser 200 — die Streuung wurde im selben
     Verhältnis verkleinert (Faktor 0,48). Ein unveränderter Schatten sähe an
     einem halb so großen Kreis aus, als schwebte er einen Meter über der
     Seite.

     Die dritte Lage der Startseite fehlt hier: Dort liegt ein heller
     Lichtsaum auf der Gegenseite, der nur auf dunklem Grund wirkt. Auf
     weißem Grund wäre er unsichtbar.

     Auch die Deckkraft ist geringer (.30 statt .55): Derselbe Schatten wirkt
     auf Weiß deutlich härter als auf Dunkelblau. */
  box-shadow:
     13px 16px 29px -6px rgba(9, 20, 28, .30),
     27px 32px 62px -14px rgba(9, 20, 28, .16);
}

/* Das Bild füllt den Kreis vollständig. `cover` statt einer Breitenangabe:
   Die Datei ist quadratisch, aber der Kreis kann sich ändern — mit `cover`
   bleibt der Ausschnitt in jedem Fall unverzerrt. */
.mvr-zugang-bild img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  /* Die Datei ist bereits in Grautönen. Der Filter kostet nichts und fängt
     ab, falls später eine farbige Fassung an dieselbe Stelle tritt. */
  filter: grayscale(1);
}

/* Zwei Wege nebeneinander: anmelden oder Zugang anfragen. Auf schmalen
   Schirmen untereinander, beide über die volle Breite — ein Knopf, der auf
   dem Telefon nur halb so breit ist wie der andere, sieht nach Rangfolge
   aus, wo keine gemeint ist. */
.mvr-knopfpaar {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 28px;
}

/* Der zweite Weg ist gleichwertig, aber nicht der erwartete — deshalb
   Umriss statt Fläche. */
.mvr-knopf--umriss {
  background: transparent;
  color: var(--mvr-flaeche-dunkel);
  border: 1px solid var(--mvr-linie);
}

.mvr-knopf--umriss:hover,
.mvr-knopf--umriss:focus-visible {
  background: var(--mvr-grund-sand);
  color: var(--mvr-flaeche-dunkel);
  border-color: var(--mvr-flaeche-dunkel);
}

@media (max-width: 720px) {
  .mvr-zugang-raster {
    grid-template-columns: 1fr;
    gap: 28px;
  }

  /* Auf dem Telefon steht der Fuchs über dem Text — sonst sieht ihn
     niemand, weil er hinter zwei Absätzen und zwei Knöpfen läge. */
  .mvr-zugang-bild {
    order: -1;
    justify-self: start;
    width: 132px;
    height: 132px;
    /* Noch einmal im Verhältnis kleiner (132 von 200) — sonst nimmt der
       Schatten am Telefon mehr Platz ein als der Kreis selbst. */
    box-shadow:
       9px 11px 19px -4px rgba(9, 20, 28, .28),
      18px 21px 41px -10px rgba(9, 20, 28, .14);
  }

  .mvr-knopfpaar { flex-direction: column; }
  .mvr-knopfpaar .mvr-knopf { text-align: center; }
}


/* =========================================================================
   Anmeldeseite — im Design der Wartungsseite
   Eingebaut am 04.09.2026.

   Derselbe dunkle Verlauf und dasselbe Fuchsbild wie `.mvr-wartung`. Der
   Unterschied: Die Wartungsseite IST die ganze Seite, diese hier ist ein
   Abschnitt im normalen Rahmen — Kopfleiste und Verweiszeile bleiben, damit
   der Besucher weiterkommt, ohne den Zurück-Knopf zu suchen.
   ========================================================================= */

.mvr-anmeldung {
  color: var(--mvr-schrift-auf-dunkel-2);
  /* ⚠ Vorher „72px var(--mvr-rand) 88px" — ein FESTER Rand, waehrend die
     Kopfleiste seit Korrektur 22 auf der zentrierten Schiene sitzt. Bei
     1400 px stand der Namenszug oben bei 133, der Anmeldekasten bei 80;
     mit wachsendem Fenster lief es weiter auseinander (1920: 400 gegen
     160). Dieselbe Regel wie Buehne, Kontakt und Kopfleiste. */
  padding-block: 72px 88px;
  padding-inline: max(var(--mvr-rand), calc((100% - var(--mvr-inhalt)) / 2));
  background:
    linear-gradient(100deg, var(--mvr-flaeche-dunkel) 0%, rgba(29, 56, 73, .97) 38%,
      rgba(29, 56, 73, .78) 70%, rgba(29, 56, 73, .62) 100%),
    url(/images/Logos/fuchs-scharf-840.webp) right center/cover no-repeat,
    var(--mvr-flaeche-dunkel);
}

/* Der dunkle Bereich reicht bis zum unteren Fensterrand.

   Vorher blieb darunter ein weisser Streifen: Das Formular ist kuerzer als
   der Bildschirm, und es gibt auf dieser Seite keine Fusszeile, die den
   Rest fuellt (gemessen bei 1400x900: Block 112..774, darunter 126 px
   Koerperfarbe).

   ⚠ NICHT `calc(100dvh - 112px)`. Die Kopfleiste ist nicht ueberall gleich
   hoch — 112 px am Schreibtisch, 84 px am Telefon; die Zahl waere dort um
   28 px falsch. Stattdessen der Weg ohne Zahl: Der Koerper wird zur
   Flex-Spalte, und der Anmeldeblock nimmt sich, was uebrig bleibt. Das
   stimmt bei jeder Kopfhoehe von selbst.

   `min-height`, nicht `height`: Wird das Formular laenger als der Schirm —
   etwa mit einer Fehlermeldung darueber —, waechst die Seite weiter.

   Die Regeln haengen an `:has(.mvr-anmeldung)`, greifen also nur hier. Alle
   uebrigen Seiten behalten ihr Blocklayout. */
body:has(.mvr-anmeldung) {
  min-height: 100vh;    /* Rueckfall fuer Browser ohne dvh */
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
}

/* `main` traegt vor dem Abschnitt noch Joomlas Meldungsbereich. Als
   Flex-Spalte bleibt der oben stehen und der Abschnitt nimmt den Rest —
   eine Anmeldemeldung schiebt den Kasten also nicht aus dem Bild. */
body:has(.mvr-anmeldung) > main {
  flex: 1;
  display: flex;
  flex-direction: column;
}

body:has(.mvr-anmeldung) > main > .mvr-anmeldung { flex: 1; }

.mvr-anmeldung-inhalt {
  max-width: 420px;
}

.mvr-anmeldung h1 {
  color: var(--mvr-schrift-auf-dunkel);
  margin: 0 0 12px;
}

.mvr-anmeldung .mvr-augenbraue {
  color: var(--mvr-zier);
}

.mvr-anmeldung-satz {
  margin: 0 0 28px;
  color: var(--mvr-schrift-auf-dunkel-2);
  max-width: 38ch;
}

/* Die Felder kommen von Joomla und tragen dessen Auszeichnung. Deshalb wird
   hier nicht nach eigenen Klassen gegriffen, sondern nach dem, was
   tatsächlich ankommt: Label und Eingabefeld. */
.mvr-anmeldung .mvr-formular { display: flex; flex-direction: column; gap: 16px; }

.mvr-anmeldung .mvr-formular label {
  display: block;
  margin-bottom: 5px;
  font-size: .92rem;
  color: var(--mvr-schrift-auf-dunkel-2);
}

.mvr-anmeldung .mvr-formular input[type="text"],
.mvr-anmeldung .mvr-formular input[type="password"],
.mvr-anmeldung .mvr-formular input[type="email"] {
  width: 100%;
  padding: 11px 13px;
  border: 1px solid var(--mvr-linie-dunkel);
  background: var(--mvr-grund-sand);
  color: var(--mvr-flaeche-dunkel);
  font: inherit;
}

/* Joomlas PasswordField haengt an jedes Passwortfeld einen Knopf
   „Passwort anzeigen". Der Betreiber will ihn nicht.

   ⚠ Nicht ueber das Feldattribut `lock`: Das entfernt den Knopf zwar
   (layouts/joomla/form/field/password.php:148 `if (!$lock)`), DEAKTIVIERT
   aber zugleich das Eingabefeld — die Anmeldung waere unmoeglich. Deshalb
   hier, und nur auf dieser Seite; `display: none` nimmt den Knopf auch aus
   der Tabulatorfolge, er bleibt also nicht als unsichtbare Station stehen.

   Die beiden Huellen, die Joomla darum baut, muessen ihre Flex-Eigenschaft
   verlieren — sonst behielte das Feld die Breite von vorher minus Knopf. */
.mvr-anmeldung .input-password-toggle { display: none; }

.mvr-anmeldung .password-group,
.mvr-anmeldung .input-group { display: block; }

.mvr-anmeldung .mvr-formular input:focus {
  border-color: var(--mvr-schrift-auf-dunkel);
  outline: 2px solid var(--mvr-zier);
  outline-offset: 1px;
}

/* „Angemeldet bleiben" steht neben seinem Kästchen, nicht darunter. */
.mvr-anmeldung .mvr-feld--kaestchen {
  display: flex;
  align-items: center;
  gap: 9px;
}

.mvr-anmeldung .mvr-feld--kaestchen label { margin: 0; }

/* Joomla legt die Pflichtkennzeichnung als eigenes Element daneben; auf
   dunklem Grund ginge sie sonst unter. */
.mvr-anmeldung .mvr-formular .star,
.mvr-anmeldung .mvr-formular .required { color: var(--mvr-zier); }

.mvr-knopf--breit { width: 100%; text-align: center; }

.mvr-anmeldung .mvr-knopf {
  background: var(--mvr-knopf-hell);
  color: var(--mvr-knopf-hell-text);
  border: 1px solid transparent;
}

.mvr-anmeldung .mvr-knopf:hover,
.mvr-anmeldung .mvr-knopf:focus-visible {
  background: var(--mvr-schrift-auf-dunkel-2);
  color: var(--mvr-flaeche-dunkel);
}

/* Ein Zusatzknopf einer anderen Anmeldeart steht optisch hinter dem
   Hauptknopf zurück — er ist die Ausnahme, nicht der Regelweg. */
.mvr-anmeldung .mvr-knopf--umriss {
  background: transparent;
  color: var(--mvr-schrift-auf-dunkel-2);
  border-color: var(--mvr-linie-dunkel);
}

.mvr-anmeldung .mvr-knopf--umriss:hover,
.mvr-anmeldung .mvr-knopf--umriss:focus-visible {
  background: rgba(251, 234, 212, .1);
  color: var(--mvr-schrift-auf-dunkel);
  border-color: var(--mvr-schrift-auf-dunkel-2);
}

.mvr-anmeldung-hilfe {
  margin-top: 22px;
  padding-top: 18px;
  border-top: 1px solid var(--mvr-linie-dunkel);
  font-size: .9rem;
}

.mvr-anmeldung-hilfe a {
  color: var(--mvr-schrift-auf-dunkel-2);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.mvr-anmeldung-hilfe a:hover { color: var(--mvr-schrift-auf-dunkel); }

.mvr-anmeldung-hilfe .mvr-trenner {
  margin: 0 10px;
  color: var(--mvr-linie-dunkel);
}

/* Meldungen — etwa „Benutzername und Passwort stimmen nicht überein" —
   erscheinen im Rahmen über diesem Abschnitt und stünden sonst auf hellem
   Grund direkt über dem dunklen. Das ist gewollt: Sie gehören zur Seite,
   nicht zum Formular. */

@media (max-width: 720px) {
  .mvr-anmeldung {
    padding: 44px 20px 56px;
    /* Auf dem Telefon trägt das Bild nicht — es läge hinter dem Text und
       machte ihn schwer lesbar. Nur der Verlauf bleibt. */
    background:
      linear-gradient(160deg, var(--mvr-flaeche-dunkel) 0%, rgba(29, 56, 73, .94) 100%),
      var(--mvr-flaeche-dunkel);
  }

  .mvr-anmeldung-inhalt { max-width: none; }
}


/* =========================================================================
   Aussenverweise im Menue — 04.09.2026
   Entscheidung des Betreibers: der leise Weg (Pfeil und Sprechblase), kein
   Dialog vor dem Sprung.

   ⚠ Der Pfeil ist ::after, kein Zeichen im Text. Zwei Gruende:
     · Vorlesesoftware soll „Mats von Reinicken" sagen, nicht
       „Mats von Reinicken Nordost-Pfeil" — CSS-Inhalt wird von den meisten
       Programmen uebersprungen. Die Erklaerung traegt das title-Attribut.
     · Wer den Menuepunkt im Backend umbenennt, kann den Pfeil nicht
       versehentlich mitloeschen.

   ⚠ Die Klappnav-Verweise sind display:flex. Ein ::after wird darin ein
     eigenes Flex-Element — deshalb margin-left statt eines Leerzeichens im
     content, sonst klebte der Pfeil am Wort.
   ========================================================================= */
.mvr-extern::after {
  content: "\2197";        /* ↗ Nordost-Pfeil */
  margin-left: .4em;
  font-size: .85em;
  opacity: .75;
  /* Damit der Pfeil in der Flex-Zeile nicht gestreckt wird und auf der
     Schriftlinie bleibt. */
  flex: none;
  align-self: center;
}

/* Beim Mauskontakt tritt er mit hervor — sonst wirkte er wie abgeblendet,
   waehrend der Verweis selbst aufleuchtet. */
.mvr-extern:hover::after,
.mvr-extern:focus-visible::after { opacity: 1; }

/* =========================================================================
   Abmelden in der Kopfleiste — 04.09.2026

   ⚠ Es gab bis heute keine Abmeldung. Wer sich anmeldete, kam nur ueber
   /administrator oder durch Loeschen der Cookies wieder heraus.

   Der Knopf steht bewusst leise: Umriss statt Flaeche. Er ist ein Ausgang,
   keine Handlungsaufforderung — die Kopfleiste soll nicht zum Abmelden
   einladen, sondern es nur ermoeglichen.
   ========================================================================= */
.mvr-abmelden { margin: 0; display: flex; }

.mvr-abmelden button {
  padding: 6px 14px;
  border: 1px solid var(--mvr-linie-dunkel);
  background: transparent;
  color: var(--mvr-schrift-auf-dunkel-2);
  font: inherit;
  font-size: 14px;
  cursor: pointer;
  /* Damit die Beschriftung nicht umbricht, wenn die Kopfleiste eng wird. */
  white-space: nowrap;
}

.mvr-abmelden button:hover,
.mvr-abmelden button:focus-visible {
  background: var(--mvr-linie-dunkel);
  color: var(--mvr-schrift-auf-dunkel);
  border-color: var(--mvr-schrift-auf-dunkel-2);
}

/* ⚠ Der Name traegt links eine Trennlinie; zwischen Name und Knopf braucht
   es keine zweite — sonst stehen zwei Striche fast nebeneinander. */
.mvr-benutzer + .mvr-abmelden { margin-left: 14px; }

@media (max-width: 767px) {
  /* Auf dem Telefon ist die Kopfleiste 84 px hoch und traegt Zeichen,
     Namen und Klapptaste. Der ausgeschriebene Name faellt weg — das
     Kuerzel im Kreis genuegt, und der Ausgang bleibt erreichbar. */
  .mvr-benutzer { padding-left: 14px; font-size: 0; gap: 0; }
  .mvr-benutzer-kuerzel { font-size: 12px; }
  .mvr-abmelden button { padding: 6px 10px; font-size: 13px; }
  .mvr-benutzer + .mvr-abmelden { margin-left: 10px; }
}

/* =========================================================================
   Systemmeldungen — 04.09.2026

   Vorgabe des Betreibers: „eine kleine sandfarbene Meldung in der
   Kopfzeile". Woertlich — der Kasten sitzt IN der Leiste, zwischen
   Namenszug und Klapptaste, nicht als Band darunter.

   ⚠ ZWEI URSACHEN fuer das, was vorher zu sehen war:

   1 `.visually-hidden` fehlte im ganzen Stylesheet. Joomla setzt den Titel
     („Erfolg", „Warnung") ausdruecklich in ein Element dieser Klasse — er
     ist fuer Vorlesesoftware gedacht, nicht fuers Auge. Ohne die Regel
     stand er als Ueberschrift da. Dieselbe Luecke hatte im
     Schwesterprojekt am 26.08. die Foliennamen sichtbar gemacht.

   2 Fuer `joomla-alert` gab es keine eigene Regel — es wirkte nur Joomlas
     Vendor-Stylesheet.

   ⚠ WARUM JEDER SELEKTOR MIT DER CONTAINER-ID BEGINNT.
     Gemessen: Die Stylesheets laden in dieser Reihenfolge —
       0 button.min.css   1 mvr.css   2 joomla-alert.min.css
     Joomlas Vendor-Datei kommt NACH unserer. Bei gleicher Spezifitaet
     gewinnt die spaetere; ein blosses `joomla-alert` (0,0,1) verliert
     also. Mit der id davor sind es (1,0,1) — das gewinnt unabhaengig von
     der Reihenfolge und bleibt ueberschreibbar, anders als `!important`.
   ========================================================================= */

/* Aus dem Bild genommen, fuer Vorlesesoftware erhalten. Kein
   `display: none` — das nimmt es auch aus der Vorlesereihenfolge. */
.visually-hidden {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* ⚠ Der Container bleibt auch leer im Dokument — Joomla fuellt ihn erst
   per JavaScript. Ohne `:empty` entstuende eine Luecke in der Leiste. */
.mvr-kopfleiste #system-message-container { display: flex; align-items: center; }
.mvr-kopfleiste #system-message-container:empty { display: none; }

#system-message-container joomla-alert {
  display: flex;
  align-items: center;
  gap: 10px;
  /* ⚠ Hoechstbreite noetig: „Benutzername und Passwort falsch oder das
     Benutzerkonto existiert noch nicht." ist 74 Zeichen lang und wuerde
     die Leiste sprengen. Der Text bricht dann auf zwei Zeilen um — die
     Leiste ist 112 px hoch, das traegt sie. */
  /* ⚠ `min-width: 0` ist der entscheidende Wert: Joomlas Vendor-Stylesheet
     gibt dem Element eine MINDESTBREITE von 250 px, und die schlaegt jede
     automatische Breite. Der Inhalt brauchte 258 px — das Schliesskreuz
     stand deshalb 8 px neben dem Kasten auf dunklem Grund. */
  width: auto;
  min-width: 0;
  max-width: 460px;
  padding: 8px 12px;
  background: var(--mvr-grund-sand);
  border: 0;
  border-radius: 3px;
  box-shadow: none;
  margin: 0;
  color: var(--mvr-text);
  font-size: 14px;
  line-height: 1.35;
}

/* Der Titel ist unsichtbar (siehe oben); der Punkt davor traegt die Art
   der Meldung im Bild. Wer Farben nicht unterscheidet, bekommt den Titel
   von der Vorlesesoftware. */
#system-message-container joomla-alert .alert-heading {
  order: 1;
  display: flex;
  align-items: center;
  flex: none;
  margin: 0;
  font-size: 0;
}

#system-message-container joomla-alert .alert-heading > span:first-child {
  display: block;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--mvr-text-leise);
}

#system-message-container joomla-alert .alert-wrapper { order: 2; flex: 1; min-width: 0; }
#system-message-container joomla-alert .alert-message { margin: 0; }
#system-message-container joomla-alert .alert-message + .alert-message { margin-top: 3px; }

/* ⚠ `order` statt `margin-left: auto`: Joomla setzt den Knopf als ERSTES
   Kind ins Element, noch vor Titel und Text. Ein automatischer linker Rand
   schoebe ihn nur von der Kante weg, nicht ans Ende. */
#system-message-container joomla-alert .joomla-alert--close {
  order: 3;
  flex: none;
  /* ⚠ Joomlas Vendor-CSS setzt `position: relative` mit right:-20px und
     top:-8px. Ohne diese Zeile steht der Knopf neben dem Kasten. */
  position: static;
  inset: auto;
  width: 22px; height: 22px;
  /* ⚠ KEIN negativer Rand — er zog den Knopf aus dem Kasten heraus. */
  margin: 0 0 0 4px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--mvr-text);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  opacity: .5;
  border-radius: 2px;
}
#system-message-container joomla-alert .joomla-alert--close:hover,
#system-message-container joomla-alert .joomla-alert--close:focus-visible { opacity: 1; }

/* Die Arten unterscheiden sich am Punkt — die Flaeche bleibt sandfarben,
   damit der Kasten beim Wechsel nicht springt. */
#system-message-container joomla-alert[type="success"] .alert-heading > span:first-child { background: #4a7a5c; }
#system-message-container joomla-alert[type="info"] .alert-heading > span:first-child { background: var(--mvr-flaeche-dunkel); }
#system-message-container joomla-alert[type="warning"] .alert-heading > span:first-child { background: var(--mvr-akzent); }

/* ⚠ Fehler ist die einzige Art, die aus der Reihe tanzen darf: Wer eine
   Fehlermeldung uebersieht, verliert unter Umstaenden seine Eingabe. */
#system-message-container joomla-alert[type="danger"],
#system-message-container joomla-alert[type="error"] {
  background: var(--mvr-akzent);
  color: var(--mvr-schrift-auf-dunkel);
}
#system-message-container joomla-alert[type="danger"] .alert-heading > span:first-child,
#system-message-container joomla-alert[type="error"] .alert-heading > span:first-child { background: var(--mvr-grund-sand); }
#system-message-container joomla-alert[type="danger"] .joomla-alert--close,
#system-message-container joomla-alert[type="error"] .joomla-alert--close { color: var(--mvr-grund-sand); }

/* Der noscript-Rueckfall — ohne JavaScript. */
#system-message-container .alert {
  /* ⚠ `min-width: 0` ist der entscheidende Wert: Joomlas Vendor-Stylesheet
     gibt dem Element eine MINDESTBREITE von 250 px, und die schlaegt jede
     automatische Breite. Der Inhalt brauchte 258 px — das Schliesskreuz
     stand deshalb 8 px neben dem Kasten auf dunklem Grund. */
  width: auto;
  min-width: 0;
  max-width: 460px;
  padding: 8px 12px;
  background: var(--mvr-grund-sand);
  border: 0;
  border-radius: 3px;
  font-size: 14px;
}

@media (max-width: 767px) {
  /* ⚠ Auf dem Telefon ist die Leiste 84 px hoch und traegt Zeichen und
     Klapptaste — ein Kasten dazwischen passt nicht. Er rutscht deshalb
     unter die Leiste, ueber die volle Breite. */
  .mvr-kopfleiste #system-message-container {
    position: absolute;
    top: 100%; left: 0; right: 0;
    display: block;
  }
  #system-message-container joomla-alert,
  #system-message-container .alert {
    max-width: none;
    border-radius: 0;
    padding: 9px 20px;
    border-bottom: 1px solid var(--mvr-linie);
  }
}
/* ═══════════════════════════════════════════════════════════════════
   KOPIERBLOCK — ein Textabschnitt, den man mit einem Klick mitnimmt
   ═══════════════════════════════════════════════════════════════════

   Gebaut für die Applikationsseite (Fortsetzungstexte für Claude),
   aber nicht darauf zugeschnitten: Jeder Beitrag kann ihn benutzen.

   Auszeichnung im Beitrag — nur Klassen, damit TinyMCE sie beim
   Speichern stehen lässt:

     <div class="mvr-kopierblock">
       <pre>… der Text …</pre>
       <p><button class="mvr-kopieren" type="button">Text kopieren</button></p>
     </div>

   ⚠ `white-space: pre-wrap`, nicht `pre`.

   Der Text enthält lange Zeilen. Mit `pre` bekäme der Kasten eine
   waagerechte Bildlaufleiste, und auf dem Telefon schöbe er die ganze
   Seite zur Seite — Punkt 9 des Prüfplans verlangt das Gegenteil.  */

.mvr-kopierblock {
  margin: 0 0 34px;
}

.mvr-kopierblock pre {
  margin: 0;
  padding: 20px 22px;
  background: var(--mvr-grund-sand);
  border: 1px solid var(--mvr-linie-leise);
  border-left: 3px solid var(--mvr-zier);
  color: var(--mvr-text);
  font: 13.5px/1.62 ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.mvr-kopierblock > p:last-child {
  margin: 14px 0 0;
  display: flex;
  gap: 12px;
  align-items: center;
  flex-wrap: wrap;
}

/* ⚠ Mindesthöhe 44 px. Das ist das Maß, unter dem ein Bedienelement
   auf dem Telefon mit dem Finger nicht mehr sicher zu treffen ist. */
.mvr-kopieren {
  min-height: 44px;
  padding: 12px 26px;
  background: var(--mvr-knopf);
  color: var(--mvr-knopf-text);
  border: 1px solid var(--mvr-knopf);
  font: var(--mvr-bedien) / 1 var(--mvr-sans);
  letter-spacing: .04em;
  cursor: pointer;
}

.mvr-kopieren:hover {
  background: var(--mvr-flaeche-dunkel-2);
  border-color: var(--mvr-flaeche-dunkel-2);
}

.mvr-kopieren:focus-visible {
  outline: 2px solid var(--mvr-akzent);
  outline-offset: 2px;
}

/* ⚠ Wort UND Farbe, nicht Farbe allein.
   Wer Grün und Braun nicht unterscheidet, liest sonst nichts. */
.mvr-kopieren__meldung {
  font-size: var(--mvr-klein);
  font-weight: 700;
  color: #2F6B3F;
}

.mvr-kopieren__meldung--schlecht {
  color: var(--mvr-akzent);
  font-weight: 400;
}

/* Der Hinweis, dass etwas vorübergehend ist. */
.mvr-weg {
  background: var(--mvr-grund-sand);
  border-left: 4px solid var(--mvr-akzent);
  padding: 14px 18px;
  margin: 0 0 30px;
  font-size: 14.5px;
}

.mvr-weg strong {
  color: var(--mvr-akzent);
}

/* ═══════════════════════════════════════════════════════════════════
   KACHELREIHE — vier gleich hohe Felder nebeneinander
   ═══════════════════════════════════════════════════════════════════

   Für die Applikationsseite. Der Betreiber hat die Aufteilung am
   08.09.2026 als Skizze vorgegeben: vier Kacheln in einer Reihe,
   die erste mit Inhalt, zwei leer, die letzte als Verweis.

   Auszeichnung im Beitrag — nur Klassen, damit TinyMCE beim Speichern
   nichts wegwirft:

     <div class="mvr-kacheln">
       <div class="mvr-kachel"> … </div>
       <div class="mvr-kachel mvr-kachel--leer"><p>frei</p></div>
       <a class="mvr-kachel mvr-kachel--link" href="…"> … </a>
     </div>

   ⚠ `auto-fit` mit `minmax`, keine feste Spaltenzahl.

   `repeat(4, 1fr)` gäbe auf dem Telefon vier Spalten zu 70 px. So
   bricht die Reihe von selbst um: vier, zwei, eine — je nachdem, was
   passt. Punkt 9 des Prüfplans verlangt kein waagerechtes Scrollen.  */

.mvr-kacheln {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(232px, 1fr));
  gap: 20px;
  margin: 34px 0;
  align-items: stretch;
}

.mvr-kachel {
  display: flex;
  flex-direction: column;
  padding: 22px 20px;
  background: var(--mvr-grund);
  border: 1px solid var(--mvr-linie);
  /* ⚠ min-width: 0 — sonst spannt der lange Text im <pre> die Spalte
     über ihre Rasterbreite hinaus auf. Bei Rasterkindern die häufigste
     übersehene Ursache. */
  min-width: 0;
}

.mvr-kachel__titel {
  margin: 0 0 6px;
  font: 400 20px/1.25 var(--mvr-serif);
  color: var(--mvr-text-stark);
}

.mvr-kachel__unter {
  margin: 0 0 16px;
  font-size: var(--mvr-klein);
  color: var(--mvr-text-leise);
}

/* ── Die leere Kachel ──────────────────────────────────────────────
   Gestrichelt und blass: Sie sagt „hier ist Platz", nicht „hier fehlt
   etwas". Ein durchgezogener Rahmen sähe aus wie ein Fehler.        */
.mvr-kachel--leer {
  border-style: dashed;
  border-color: var(--mvr-linie-leise);
  background: transparent;
  align-items: center;
  justify-content: center;
  min-height: 220px;
}

.mvr-kachel--leer p {
  margin: 0;
  font-size: var(--mvr-klein);
  color: var(--mvr-linie);
  letter-spacing: .08em;
  text-transform: uppercase;
}

/* ── Die Kachel als Verweis ────────────────────────────────────────*/
.mvr-kachel--link {
  align-items: center;
  justify-content: center;
  gap: 14px;
  text-align: center;
  text-decoration: none;
  color: var(--mvr-text-stark);
  min-height: 220px;
}

.mvr-kachel--link:hover {
  border-color: var(--mvr-akzent);
  background: var(--mvr-grund-sand);
}

.mvr-kachel--link:focus-visible {
  outline: 2px solid var(--mvr-akzent);
  outline-offset: 2px;
}

.mvr-kachel__logo {
  display: block;
  width: 64px;
  height: auto;
  margin: 0;
}

/* ⚠ Das Datenbanksymbol steckt IN DER CSS, nicht im Beitrag.
   Ein <svg> im Beitragstext überlebt das Speichern in TinyMCE nicht
   zuverlässig — Attribute wie `viewBox` werden verändert. Als
   Hintergrundbild an einer Klasse kann der Editor nichts anfassen.

   Drei gestapelte Ellipsen: das übliche Zeichen für eine Datenbank.
   Farbe fest #1D3849, weil `currentColor` in einem data:-URI nicht
   aufgelöst wird. */
.mvr-kachel__db {
  display: block;
  width: 46px;
  height: 52px;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 46 52' fill='none' stroke='%231D3849' stroke-width='2.4'%3E%3Cellipse cx='23' cy='9' rx='19' ry='7'/%3E%3Cpath d='M4 9v17c0 3.9 8.5 7 19 7s19-3.1 19-7V9'/%3E%3Cpath d='M4 26v17c0 3.9 8.5 7 19 7s19-3.1 19-7V26'/%3E%3C/svg%3E") center / contain no-repeat;
}

.mvr-kachel__wort {
  font: 400 22px/1 var(--mvr-serif);
  letter-spacing: .06em;
  color: var(--mvr-text-stark);
}

/* ── Kopierblock in einer Kachel ───────────────────────────────────
   Der Text ist länger, als die Kachel hoch sein darf. Er bekommt
   deshalb seinen eigenen Bildlauf — nicht die Seite.               */
.mvr-kachel .mvr-kopierblock {
  margin: 0;
  display: flex;
  flex-direction: column;
  flex: 1;
}

.mvr-kachel .mvr-kopierblock pre {
  max-height: 190px;
  overflow-y: auto;
  padding: 14px 16px;
  font-size: 12px;
  line-height: 1.55;
}

.mvr-kachel .mvr-kopierblock > p:last-child {
  margin-top: auto;
  padding-top: 14px;
}

.mvr-kachel .mvr-kopieren {
  padding: 12px 18px;
  font-size: 15px;
}

/* ── Kachel mit dem Logo einer Website ─────────────────────────────
   Nachtrag 08.09.2026. Die leeren Kacheln sind ersetzt: Der Betreiber
   dazu — „dann sieht das so aus, als ob hier schon was Wichtiges ist."
   Ein gestrichelter Platzhalter sagt „hier fehlt etwas"; ein Logo sagt
   „hier geht es hin".                                               */

.mvr-kachel__bild {
  display: block;
  width: auto;
  max-width: 100%;
  /* ⚠ Feste Höhe, keine feste Breite. Die drei Logos haben
     verschiedene Seitenverhältnisse (296×320, 180×180, 720×720) —
     über die Höhe gebunden wirken sie gleich groß, über die Breite
     gebunden nicht. */
  height: 104px;
  object-fit: contain;
  margin: 0;
}

.mvr-kachel__name {
  font: 400 17px/1.3 var(--mvr-serif);
  color: var(--mvr-text-stark);
}

.mvr-kachel__adresse {
  font-size: var(--mvr-klein);
  color: var(--mvr-text-leise);
  letter-spacing: .02em;
}

/* Die Task-Kachel trägt drei Zeichen übereinander und braucht deshalb
   etwas weniger Höhe je Zeichen. */
.mvr-kachel--task .mvr-kachel__logo {
  width: 56px;
}

/* =========================================================================
   NACHTRAG 19.09.2026 — Wartungsseite lesbar
   Gemeldet vom Betreiber: Ueberschriften nicht lesbar. Gemessen:
   - keine Schrift gesetzt: .mvr-wartung erbte nichts, der Browser nahm
     Times New Roman (die Seite hat nicht die Klasse .mvr-seite);
   - Feldbeschriftungen #324958 auf #1D3849 — dunkel auf dunkel;
     die Regel .mvr-feld-name greift nicht, das Markup benutzt <label>;
   - „Zugang für Redaktion …“ in #725229 auf dunklem Grund;
   - Benutzername-Feld weiss, Passwort-Feld sand: .mvr-feld input[type=text]
     (Kontaktformular) traf nur das erste.
   ========================================================================= */
.mvr-wartung { font:400 var(--mvr-lesen, 18px)/1.68 var(--mvr-lesen-schrift); }
.mvr-wartung h1 { font-family:var(--mvr-gross-schrift); font-weight:400;
  color:var(--mvr-schrift-auf-dunkel); }
.mvr-wartung .mvr-augenbraue { color:var(--mvr-schrift-auf-dunkel-2); }  /* zier nur 4,1:1 */
.mvr-wartung-anmeldung .mvr-feld label { color:var(--mvr-schrift-auf-dunkel-2); }
.mvr-wartung-anmeldung .mvr-feld input[type="text"],
.mvr-wartung-anmeldung .mvr-feld input[type="password"] {
  width:100%; box-sizing:border-box; min-height:46px; padding:11px 14px;
  border:1px solid var(--mvr-linie-dunkel); background:var(--mvr-grund-sand);
  font:400 var(--mvr-lesen, 18px)/1.5 var(--mvr-lesen-schrift); color:var(--mvr-text-stark); }
.mvr-wartung-anmeldung .mvr-feld--kaestchen { flex-direction:row; align-items:center; gap:10px; }
.mvr-wartung-anmeldung .mvr-knopf { font-family:var(--mvr-bedien-schrift); }
/* Knopf „Zur Website …“ auf der Wartungsseite der Sandbox: sonst dunkel auf dunkel. */
.mvr-wartung-inhalt > p > a.mvr-knopf { display:inline-block; background:transparent;
  border:1px solid var(--mvr-schrift-auf-dunkel-2); color:var(--mvr-schrift-auf-dunkel);
  font-family:var(--mvr-bedien-schrift); text-decoration:none; }
.mvr-wartung-inhalt > p > a.mvr-knopf:hover { background:var(--mvr-knopf-hell); color:var(--mvr-knopf-hell-text); }

/* Anmeldeseite: Weg zurueck (19.09.2026) — mit Abstand unter dem Formular,
   als Umrissknopf: gleich breit wie „Anmelden“, aber klar zweitrangig. */
.mvr-anmeldung-zurueck { margin:18px 0 0; }
.mvr-anmeldung-zurueck .mvr-knopf { display:block; text-align:center; text-decoration:none; }
/* =========================================================================
   NACHTRAG 19.09.2026 — Klappmenü auf dem iPhone
   Gemeldet: Menü erscheint nicht oder erst beim Scrollen; ein Tipp landet
   nicht dort, wo man hingetippt hat.
   Ursache (bekannter WebKit-Fehler): ein absolut gesetzter Block mit
   animiertem clip-path INNERHALB eines position:sticky-Kopfes. Safari
   zeichnet ihn verspätet neu, trifft Tipps aber schon an der neuen Stelle —
   Bild und Trefferfläche laufen auseinander.
   Auf Touch-Geräten deshalb: keine Bewegung, kein clip-path, schlichtes
   Ein- und Ausblenden über display. Am Rechner bleibt die Jalousie.
   ========================================================================= */
@media (hover:none), (pointer:coarse) {
  .mvr-klappnav,
  .mvr-menue:hover .mvr-klappnav,
  .mvr-menue:focus-within .mvr-klappnav {
    display:none; clip-path:none; transform:none; transition:none;
    opacity:1; visibility:visible; }
  .mvr-klappnav[data-offen] { display:block; }
}

/* NACHTRAG 19.09.2026, zweite Runde — die eigentliche Ursache auf dem iPhone.
   Safari setzt beim Antippen :hover und laesst es stehen, bis man scrollt
   oder woanders tippt. Die Regel „.mvr-menue:hover .mvr-klappnav → verbergen“
   (0,3,0) war STAERKER als „.mvr-klappnav[data-offen] → zeigen“ (0,2,0):
   Der Tipp oeffnete das Menue und verbarg es im selben Augenblick; erst das
   Scrollen hob :hover auf. Jetzt hat „offen“ auf Touch-Geraeten den hoechsten
   Rang, und :hover/:focus-within bewegen dort gar nichts mehr. */
@media (hover:none), (pointer:coarse) {
  .mvr-menue .mvr-klappnav,
  .mvr-menue:hover .mvr-klappnav,
  .mvr-menue:focus-within .mvr-klappnav { display:none; }
  .mvr-menue .mvr-klappnav[data-offen],
  .mvr-menue:hover .mvr-klappnav[data-offen],
  .mvr-menue:focus-within .mvr-klappnav[data-offen] {
    display:block; opacity:1; visibility:visible; clip-path:none; transform:none; }
}

/* =========================================================================
   NACHTRAG 23.09.2026 — Klappmenue: Deckel, Scrollen, Anschnitt.

   BEFUND: Das Klappmenue hatte keine Hoehenbegrenzung (max-height:none) und
   kein Scrollen (overflow:visible). Ausgeloggt sind es 5 Eintraege = 349 px,
   das passt. Angemeldet kommen der geschuetzte Bereich und die Benutzerzeile
   dazu: 13 Eintraege plus 2 Zwischenueberschriften = rund 810 px. Zusammen
   mit der Kopfleiste ist das hoeher als ein uebliches Fenster — der untere
   Teil lief aus dem Bild, „Login“ war nicht mehr erreichbar.

   1) DECKEL: hoechstens Fensterhoehe minus Kopfleiste minus Abstand. Was
      nicht hineinpasst, wird INNERHALB des Menues gescrollt. Damit kann es
      nie wieder herauslaufen, gleich wie viele Eintraege dazukommen.
      100dvh statt 100vh: dvh meint auf dem Telefon die Hoehe ohne die ein-
      und ausfahrende Browserleiste. Mit vh waere das Menue dort zu hoch.
      overscroll-behavior:contain: am Ende der Liste rollt die Seite dahinter
      nicht mit.

   2) ABSTAND ZUR FENSTERKANTE (28 px): Das Menue endet sichtbar VOR dem
      unteren Fensterrand. Sonst sieht es aus, als waere es abgeschnitten.

   3) ANSCHNITT: Die Hoehe endet bewusst mitten in einer Zeile. Ein halb
      sichtbarer Eintrag ist das staerkste Zeichen fuer „hier geht es
      weiter“ — am Rechner zum Rollen, am Telefon zum Wischen.

   4) WEICHE KANTEN: Oben und unten blendet je ein Streifen aus, aber nur
      dort, wo wirklich noch etwas liegt. Gesetzt wird das in mvr-kopf.js
      ueber data-oben und data-unten; ohne Skript fehlen nur die beiden
      Andeutungen.

   5) ENGER AB ZEHN EINTRAEGEN: :has(a:nth-of-type(10)) trifft nur den
      angemeldeten Zustand. Zeilen dann 44 statt 56 px, das spart bei 13
      Eintraegen rund 160 px. 44 px ist die uebliche Untergrenze fuer eine
      Flaeche, die mit dem Finger getroffen wird.
   ========================================================================= */
.mvr-klappnav {
  /* 112 Kopfleiste + 28 Abstand + 10 Anschnitt-Versatz (endet in der Zeile) */
  max-height: calc(100dvh - 112px - 28px - 10px);
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-width: thin;
  scrollbar-color: var(--mvr-linie-dunkel) transparent;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 20px;   /* Auslauf, damit der weiche Rand am Listenende auf
                             leere Flaeche faellt und keinen Eintrag verdeckt */
}

/* Weiche Kanten: zwei mitlaufende Streifen im Menue selbst. Sie nehmen
   keinen Platz weg (height 20, margin -20) und erscheinen nur, wenn das
   Skript data-oben bzw. data-unten setzt (mvr-kopf.js, Nachtrag 23.09.). */
.mvr-klappnav::before,
.mvr-klappnav::after {
  content: "";
  display: block;
  position: sticky;
  height: 20px;
  z-index: 2;
  pointer-events: none;
  opacity: 0;
  transition: opacity .18s;
}
.mvr-klappnav::before { top: 0; margin-bottom: -20px;
  background: linear-gradient(to bottom, var(--mvr-flaeche-dunkel-2), transparent); }
.mvr-klappnav::after  { bottom: 0; margin-top: -20px;
  background: linear-gradient(to top, var(--mvr-flaeche-dunkel-2), transparent); }
.mvr-klappnav[data-oben]::before  { opacity: 1; }
.mvr-klappnav[data-unten]::after  { opacity: 1; }

.mvr-klappnav:has(a:nth-of-type(10)) a { min-height: 44px; }
.mvr-klappnav:has(a:nth-of-type(10)) .mvr-klappnav-titel { padding-top: 12px; padding-bottom: 4px; }
.mvr-klappnav:has(a:nth-of-type(10)) .mvr-klappnav-benutzer { min-height: 56px; }

@media (max-width: 767px) {
  /* Kopfleiste ist dort 84 px hoch. */
  .mvr-klappnav { max-height: calc(100dvh - 84px - 24px - 10px); }
}

/* === Knopfreihe im Kontaktblock (02.10.2026) ==============================
   Neben „Kontakt" steht „Antworten zur Vertriebssteuerung" (Bandübersicht).
   Kontakt bleibt der Hauptknopf (hell gefüllt), der zweite steht als Umriss
   daneben — der Anruf ist das Ziel, die Bücher der Weg dorthin. */
.mvr-knopfreihe { display:flex; flex-wrap:wrap; align-items:center; gap:24px 40px; margin:0; }
/* Nachtrag: Schatten wie bei „Kontakt" (Wunsch des Betreibers). Damit er
   nicht als zweites Rechteck durch den Knopf scheint, bekommt der Umriss die
   dunkle Fläche des Bandes. */
.mvr-kontakt .mvr-knopf--rand { background:var(--mvr-flaeche-dunkel); }
.mvr-kontakt .mvr-knopf--rand:hover { background:var(--mvr-linie); }
@media (max-width:767px) {
  .mvr-knopfreihe { width:100%; gap:16px; }
}
