/* Full-page theme layer for the cooperation document. The source document
   keeps its print-friendly light palette; this layer only changes the live UI. */
.mm-contract-theme-toggle {
  position: fixed;
  /* 29.08.2026 — Mert: "toggle passender setzen". Er sass auf 14px und damit
     auf derselben Hoehe wie die Navigationspille, die mittig oben schwebt -
     bei 390px standen beide fast aneinander. Jetzt sitzt er UNTER der
     Navigation, rechtsbuendig: kein Gedraenge, und der Blick trifft zuerst
     die Navigation. */
  top: calc(max(14px, env(safe-area-inset-top)) + 62px);
  right: max(14px, env(safe-area-inset-right));
  z-index: 1600;
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  padding: 0;
  border: 1px solid rgba(255, 255, 255, 0.15);
  border-radius: 50%;
  background: rgba(22, 17, 20, 0.72);
  color: #f3e9ec;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12), 0 14px 34px -18px rgba(0, 0, 0, 0.85);
  -webkit-backdrop-filter: blur(18px) saturate(145%);
  backdrop-filter: blur(18px) saturate(145%);
  cursor: pointer;
  transition: transform 180ms ease, background-color 180ms ease, border-color 180ms ease;
}

.mm-contract-theme-toggle:hover { transform: translateY(-1px); }
.mm-contract-theme-toggle:active { transform: scale(0.96); }
.mm-contract-theme-toggle:focus-visible { outline: 2px solid #ff607b; outline-offset: 3px; }
.mm-contract-theme-toggle svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.mm-contract-theme-toggle .theme-sun { display: none; }

:root[data-contract-theme="dark"] {
  color-scheme: dark;
}

:root[data-contract-theme="dark"] .mm-contract-theme-toggle .theme-moon { display: none; }
:root[data-contract-theme="dark"] .mm-contract-theme-toggle .theme-sun { display: block; }

:root[data-contract-theme="light"] .mm-contract-theme-toggle {
  border-color: rgba(38, 24, 30, 0.13);
  background: rgba(255, 255, 255, 0.78);
  color: #241318;
}

:root[data-contract-theme="dark"] body {
  background-color: #0b090b !important;
  background-image:
    radial-gradient(900px 620px at 15% -5%, rgba(229, 20, 42, 0.13), transparent 62%),
    radial-gradient(760px 520px at 100% 12%, rgba(113, 63, 84, 0.09), transparent 64%) !important;
  color: #f3e9ec !important;
}

/* 29.08.2026 — Mert: "fehler texte sieht man nicht bei paar sections".
   URSACHE, gemessen: Die Farbvariablen standen nur auf `main.doc`. Alles, was
   ausserhalb dieses Elements liegt oder anders in der Kaskade haengt, bekam
   weiter den HELLMODUS-Wert - z. B. --akzent-text #b70d22 (dunkelrot) auf
   dunklem Grund, Kontrast 2,75, und --gold-pale/--fg noch schlechter (1,03 bis
   1,06). Gemessen wurden 13 solche Stellen, darunter der Kasten
   "Geldvergütung ist erfolgsabhängig" und die Caption-Zeile mit
   @magicmilk.original.
   LOESUNG: Die Variablen gehoeren auf :root, damit sie ausnahmslos ueberall
   gelten. `main.doc` bleibt zusaetzlich stehen, weil dort noch `color` gesetzt
   wird. Der Druck bleibt unberuehrt - @media print weiter unten setzt eigene
   helle Werte, und Druckregeln stehen ueber diesen hier. */
:root[data-contract-theme="dark"],
:root[data-contract-theme="dark"] main.doc {
  --ink: #f3e9ec !important;
  --ink-soft: #b8a9af !important;
  --ink-dim: #8d8087 !important;
  --paper: #151116 !important;
  --cream: #1a1418 !important;
  --beige: #21181d !important;
  --rose: #25171e !important;
  --line: rgba(243, 233, 236, 0.11) !important;
  --gold: #e5142a !important;
  --gold-deep: #ff607b !important;
  --gold-pale: #24141a !important;
  /* --gold-pale ist im Dunkelmodus eine FLAECHE (#24141a). An ein paar Stellen
     wurde dieselbe Variable als TEXTFARBE benutzt - dort verschwand der Text
     komplett (Kontrast 1,06 gegen den Grund). Deshalb eine eigene Variable
     fuer Akzenttext. Kein Rosa: Pink als Textfarbe auf Dunkel ist ausgeschlossen
     (Regel Mert), Akzentwoerter tragen die normale Textfarbe. */
  --akzent-text: #f3e9ec !important;
  --dark: #0b090b !important;
  --dark-soft: #f3e9ec !important;
  /* Diese vier fehlten im Dunkelmodus ganz und behielten ihren Hellmodus-Wert.
     --fg war dabei der schlimmste Fall: #1b1712 ist fast schwarz und wurde als
     Textfarbe auf schwarzem Grund benutzt. */
  --fg: #f3e9ec !important;
  --soft: #b8a9af !important;
  --card: #1a1418 !important;
  --bg: #0b090b !important;
}

:root[data-contract-theme="dark"] main.doc {
  color: var(--ink) !important;
}

:root[data-contract-theme="dark"] main.doc > section[data-screen-label] {
  background-color: var(--paper) !important;
  color: var(--ink) !important;
  box-shadow: 0 34px 84px -42px rgba(0, 0, 0, 0.9), inset 0 1px 0 rgba(255, 255, 255, 0.035) !important;
}

:root[data-contract-theme="dark"] main.doc > section[data-screen-label="Cover"],
:root[data-contract-theme="dark"] main.doc > section[data-screen-label="Rueckseite"] {
  background-color: var(--dark) !important;
}

:root[data-contract-theme="dark"] main.doc [style*="background:#fff"],
:root[data-contract-theme="dark"] main.doc [style*="background: #fff"],
:root[data-contract-theme="dark"] main.doc [style*="background:#ffffff"],
:root[data-contract-theme="dark"] main.doc [style*="background: #ffffff"] {
  background: var(--paper) !important;
}

:root[data-contract-theme="dark"] .vg-input,
:root[data-contract-theme="dark"] .vg-select,
:root[data-contract-theme="dark"] .vg-textarea,
:root[data-contract-theme="dark"] .vg-panel,
:root[data-contract-theme="dark"] .vg-chip,
:root[data-contract-theme="dark"] .vg-vorabversand-hinweis,
:root[data-contract-theme="dark"] .mm-ein {
  background: #191419 !important;
  border-color: rgba(243, 233, 236, 0.13) !important;
  color: #f3e9ec !important;
}

:root[data-contract-theme="dark"] .vg-input::placeholder,
:root[data-contract-theme="dark"] .vg-textarea::placeholder {
  color: #806f77 !important;
}

:root[data-contract-theme="dark"] .vg-chip.on {
  background: rgba(229, 20, 42, 0.14) !important;
  border-color: rgba(255, 96, 123, 0.7) !important;
}

/* These agreement blocks have legacy hard-coded white surfaces. Keep the
   whole signing flow inside the same dark AUREON visual system. */
:root[data-contract-theme="dark"] .vg-ack-master,
:root[data-contract-theme="dark"] .vg-ack-master.on,
:root[data-contract-theme="dark"] .vg-success-card,
:root[data-contract-theme="dark"] .vg-success-card.on,
:root[data-contract-theme="dark"] .vg-success-step,
:root[data-contract-theme="dark"] .vg-success-result,
:root[data-contract-theme="dark"] .au-select-button {
  background: #191419 !important;
  border-color: rgba(243, 233, 236, 0.13) !important;
  color: #f3e9ec !important;
  box-shadow: none !important;
}

:root[data-contract-theme="dark"] .vg-success-card,
:root[data-contract-theme="dark"] .vg-success-card.on {
  background: linear-gradient(145deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.018)) !important;
  border-color: rgba(255, 96, 123, 0.34) !important;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08) !important;
}

:root[data-contract-theme="dark"] .vg-success-result {
  background: rgba(229, 20, 42, 0.08) !important;
  border-left-color: #e5142a !important;
}

:root[data-contract-theme="dark"] .vg-ack-master .box,
:root[data-contract-theme="dark"] .vg-success-toggle {
  background: rgba(255, 255, 255, 0.025) !important;
}

:root[data-contract-theme="dark"] .vg-ack-master.on .box,
:root[data-contract-theme="dark"] .vg-success-card.on .vg-success-toggle {
  background: #e5142a !important;
  border-color: #e5142a !important;
}

:root[data-contract-theme="dark"] .vg-success-kicker,
:root[data-contract-theme="dark"] .vg-success-result b {
  color: #ff7188 !important;
}

/* Die Bestaetigungskarte bleibt im Dunkelmodus hell (gemessen rgb(252,250,246)).
   Pink darauf ergab 2,53 - und Pink ist als Textfarbe ohnehin nicht vorgesehen.
   Dunkle Betonung auf heller Karte statt Signalfarbe. */
:root[data-contract-theme="dark"] .vg-ack-master .txt b {
  color: #26221d !important;
}

/* Confirmed contract rules read as a clean checklist: only the tick remains. */
#vertrag .vg-ack .row.on .box {
  border-color: transparent !important;
  background: transparent !important;
  box-shadow: none !important;
}

#vertrag .vg-ack .row.on .box svg {
  opacity: 1 !important;
  stroke: var(--gold-deep) !important;
  width: 16px !important;
  height: 16px !important;
}

@media (max-width: 640px) {
  .mm-contract-theme-toggle {
    /* 29.08.2026 - hier lag der eigentliche Fehler: Diese Regel setzte `top`
       auf 10px zurueck und hat den Versatz aus der Grundregel genau dort
       aufgehoben, wo Mert das Gedraenge gemeldet hat. Gemessen bei 390px:
       die Navigationspille steht von y=14 bis y=62 und von x=69 bis x=321,
       der Knopf sass auf y=10..50 bei x=340 - vertikal ueberlappend, seitlich
       nur 19px Luft. `top` steht deshalb nicht mehr hier, sondern kommt aus
       der Grundregel (Navigationsunterkante + Abstand). Nur Groesse und
       rechter Rand bleiben handygerecht. */
    right: max(10px, env(safe-area-inset-right));
    width: 40px;
    height: 40px;
  }
}

@media print {
  .mm-contract-theme-toggle { display: none !important; }
  :root[data-contract-theme="dark"] main.doc {
    --ink: #26221d !important;
    --ink-soft: #73695b !important;
    --paper: #fcfaf6 !important;
    --cream: #f6f0e6 !important;
    --line: #e5dcc9 !important;
    --akzent-text: #b70d22 !important;
  }
}

/* ============================================================
   Produktwahl: hoechstens vier (Mert, 29.08.2026)
   „mach bis 4 kann man nur waehlen bei der produktwahl, nicht mehr"

   Sichtbar gemacht statt still gesperrt: der Zaehler sagt jederzeit, wie
   viele sitzen, und die gesperrten Kacheln nehmen sich zurueck, ohne zu
   verschwinden. Wer abwaehlen will, kann das weiterhin - gesperrt sind nur
   die noch NICHT gewaehlten.
   ============================================================ */
.vg-paket-zaehler {
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: .01em;
  color: var(--ink-soft, #b8a9af);
  margin: 0 0 10px;
  transition: color .25s cubic-bezier(.22, .61, .36, 1);
}
.vg-paket-zaehler.ist-voll {
  color: var(--gold-deep, #ff607b);
}

.vg-prod--gesperrt {
  opacity: .38;
  cursor: not-allowed;
  filter: saturate(.55);
  transition: opacity .25s cubic-bezier(.22, .61, .36, 1), filter .25s cubic-bezier(.22, .61, .36, 1);
}
/* Der Kasten selbst bleibt sichtbar, damit erkennbar ist, dass hier nichts
   fehlt - er nimmt nur keine Eingabe mehr an. */
.vg-prod--gesperrt input { cursor: not-allowed; }

/* ============================================================
   Fokus-Rot heller (Mert, 29.08.2026)
   „wenn man drauf drueckt bisschen heller das rot machen"

   Im Dunkelmodus lag der Fokusrahmen auf --gold (#e5142a). Dieses satte Rot
   hat gegen den fast schwarzen Grund zu wenig Helligkeitsunterschied - man
   sieht kaum, welches Feld gerade dran ist. #ff4058 ist dasselbe Rot, nur
   aufgehellt: eindeutig Rot, kein Rosa (Pink bleibt Grafik-Akzent, nie
   Bedienfarbe). Der Schein aussen wird gleichzeitig etwas traegt, damit das
   Feld sichtbar "anspringt", ohne zu leuchten.
   ============================================================ */
:root[data-contract-theme="dark"] .vg-input:focus,
:root[data-contract-theme="dark"] .vg-select:focus,
:root[data-contract-theme="dark"] .vg-textarea:focus,
:root[data-contract-theme="dark"] .au-select-button:focus-visible {
  border-color: #ff4058 !important;
  box-shadow: 0 0 0 3px rgba(255, 64, 88, 0.22) !important;
}

/* Der Platzhalter im Feld war ebenfalls zu dunkel zum Lesen (#b7ab97 ist fuer
   hellen Grund gedacht). */
:root[data-contract-theme="dark"] .vg-input::placeholder,
:root[data-contract-theme="dark"] .vg-textarea::placeholder {
  color: #8b7d85 !important;
}

/* ============================================================
   „Vereinbarung absenden" im Design des dunklen Metallknopfs
   (Mert, 29.08.2026: „vereinbarung absenden design von 3.bild nehmen")

   Vorlage ist der dunkle Pillenknopf mit heller Kante: schwarze Flaeche,
   ein schmaler Lichtsaum oben, weisse Schrift, Symbol links. Genau das
   Gegenteil des bisherigen flaechigen Rosa - und es passt zur Regel, dass
   rote/rosa Vollflaechen als Bedienfarbe vermieden werden.

   Aufbau wie beim Metallknopf: die Flaeche traegt den Verlauf, ein
   ::before legt die Lichtkante darueber. Kein overflow:hidden noetig, es
   ragt nichts hinaus.
   ============================================================ */
:root[data-contract-theme="dark"] #vgSubmit.btn.solid-gold {
  /* Mert, 29.08.2026: "vereinbarung absenden (wie bild5, nur in roetlich)."
     Vorher ein dunkler Knopf, der sich vom Blatt kaum abhob - fuer den
     letzten Schritt eines Vertrags zu leise. Jetzt der Verlauf mit
     Lichtkegel wie auf der Management-Seite, in der Markenfarbe.
     Der helle Saum an der Oberkante (::before) bleibt, der Lichtkegel
     (::after) kommt aus dem Stilblock der Seite. */
  position: relative;
  overflow: hidden;
  isolation: isolate;
  background: linear-gradient(96deg, #B00D20 0%, #E5142A 46%, #FF3B54 100%) !important;
  border: 1px solid rgba(255, 255, 255, 0.18) !important;
  color: #fff !important;
  border-radius: 999px !important;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.24),
    0 1px 2px rgba(8, 8, 11, 0.5),
    0 14px 30px -14px rgba(229, 20, 42, 0.85) !important;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  transition: transform 180ms cubic-bezier(.22, .61, .36, 1),
              box-shadow 180ms cubic-bezier(.22, .61, .36, 1) !important;
}

/* Der helle Saum an der Oberkante - das Erkennungszeichen der Vorlage. */
:root[data-contract-theme="dark"] #vgSubmit.btn.solid-gold::before {
  content: "";
  position: absolute;
  left: 14%;
  right: 14%;
  top: -1px;
  height: 1px;
  border-radius: 999px;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.75), transparent);
  pointer-events: none;
}

:root[data-contract-theme="dark"] #vgSubmit.btn.solid-gold:hover {
  transform: translateY(-2px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.3),
    0 2px 4px rgba(8, 8, 11, 0.5),
    0 18px 38px -16px rgba(229, 20, 42, 0.95) !important;
}
:root[data-contract-theme="dark"] #vgSubmit.btn.solid-gold:active {
  transform: translateY(0) scale(.985);
}
:root[data-contract-theme="dark"] #vgSubmit.btn.solid-gold svg {
  stroke: #fff !important;
  position: relative;
  z-index: 1;
}


/* ============================================================
   Theme-Schalter in der Schnellwahl (Mert, 29.08.2026)
   „auch im schnellwahl rein irgendwo passend"

   Sitzt in der unteren Leiste der Schnellwahl, wo schon Titel und Suche
   stehen. Bewusst ruhig gehalten - er ist eine Nebenfunktion, kein
   Hauptweg; der Wortwechsel (Hell/Dunkel) sagt, was passiert, nicht was
   gerade ist.
   ============================================================ */
.mm-quickswitch {
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 32px;
  margin-left: 10px;
  padding: 0 13px;
  border-radius: 999px;
  border: 1px solid rgba(243, 233, 236, 0.16);
  background: rgba(243, 233, 236, 0.05);
  color: #f3e9ec;
  font: 600 12.5px/1 'Manrope', system-ui, sans-serif;
  letter-spacing: .01em;
  cursor: pointer;
  -webkit-backdrop-filter: blur(14px) saturate(150%);
  backdrop-filter: blur(14px) saturate(150%);
  transition: background-color .22s cubic-bezier(.22, .61, .36, 1),
              border-color .22s cubic-bezier(.22, .61, .36, 1),
              transform .22s cubic-bezier(.22, .61, .36, 1);
}
.mm-quickswitch:hover {
  background: rgba(243, 233, 236, 0.1);
  border-color: rgba(243, 233, 236, 0.26);
}
.mm-quickswitch:active { transform: scale(.96); }
.mm-quickswitch:focus-visible { outline: 2px solid #ff4058; outline-offset: 2px; }
.mm-quickswitch .mm-qs-icon {
  width: 15px; height: 15px; flex: none;
  fill: none; stroke: currentColor; stroke-width: 1.9;
  stroke-linecap: round; stroke-linejoin: round;
}
/* Im Hellmodus zeigt das Symbol den Mond - man schaltet ja nach dunkel. */
:root[data-contract-theme="light"] .mm-quickswitch {
  border-color: rgba(38, 24, 30, 0.16);
  background: rgba(38, 24, 30, 0.05);
  color: #241318;
}

/* ============================================================
   THEME-SCHALTER TRITT ZURUECK   ·   Mert, 29.08.2026:
   "das darf den creator nicht stoeren."

   Der Schalter schwebte dauerhaft ueber dem Blatt: 44 px, voller Rand,
   Schlagschatten, Weichzeichner - und der rosa Fokusring blieb nach dem
   Klick stehen. Waehrend jemand einen Vertrag liest und ausfuellt, ist das
   ein staendiger Stoerpunkt im Blickfeld.

   Er bleibt erreichbar, nimmt sich aber zurueck:
   - im Ruhezustand kleiner und halb durchsichtig
   - bei Hover, Tastaturfokus oder Beruehrung sofort voll da
   - waehrend des Tippens in ein Feld ganz ausgeblendet (dort stoert er am
     meisten und wird in dem Moment sicher nicht gebraucht)
   - Fokusring in der Textfarbe statt in Pink
   ============================================================ */
/* Mert, 29.08.2026: "auf pc groesser, auf handy bisschen groesser, aber
   nicht wie auf pc, tablet."
   Drei Stufen statt einer Groesse fuer alles. Diese Grundangabe ist die
   Handy-Stufe; Tablet und Rechner setzen weiter unten nach oben.
   Der Knopf ist Bedienung, kein Inhalt - die Regel "auf PC nie einfach
   mitskalieren" gilt fuer Karten und Bilder, nicht fuer einen Knopf, den
   man am grossen Schirm auch mit der Maus sicher treffen soll. */
.mm-contract-theme-toggle {
  width: 40px !important;
  height: 40px !important;
  opacity: .38;
  border-color: rgba(255, 255, 255, 0.10) !important;
  box-shadow: none !important;
  transition: opacity 220ms cubic-bezier(.2,.8,.2,1),
              transform 180ms ease,
              background-color 180ms ease,
              border-color 180ms ease !important;
}
.mm-contract-theme-toggle svg { width: 19px !important; height: 19px !important; }

.mm-contract-theme-toggle:hover,
.mm-contract-theme-toggle:focus-visible,
.mm-contract-theme-toggle:active {
  opacity: 1;
  border-color: rgba(255, 255, 255, 0.22) !important;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12),
              0 14px 34px -18px rgba(0, 0, 0, 0.85) !important;
}

/* Pink als Fokusfarbe faellt weg - er soll nicht ins Auge springen. */
.mm-contract-theme-toggle:focus-visible {
  outline: 2px solid rgba(243, 233, 236, 0.7) !important;
  outline-offset: 3px;
}

/* Waehrend des Ausfuellens verschwindet er. Die Klasse setzt das Skript
   der Seite, sobald ein Eingabefeld den Fokus hat. */
/* Auf schmalen Geraeten ist der Platz am knappsten. Diese Regel steht
   bewusst VOR dem Ausblenden beim Tippen - so gewinnt dort die spaetere
   Regel und der Schalter verschwindet wirklich. */
/* Handy: die Grundgroesse (40 px) bleibt, nur etwas zurueckhaltender. */
@media (max-width: 560px) {
  .mm-contract-theme-toggle { opacity: .32; }
}

/* Tablet: eine Stufe groesser. */
@media (min-width: 561px) and (max-width: 1023px) {
  .mm-contract-theme-toggle { width: 46px !important; height: 46px !important; }
  .mm-contract-theme-toggle svg { width: 22px !important; height: 22px !important; }
}

/* Rechner: die groesste Stufe - hier trifft man mit der Maus, nicht mit
   dem Finger, und der Schirm hat den Platz. */
@media (min-width: 1024px) {
  .mm-contract-theme-toggle { width: 52px !important; height: 52px !important; }
  .mm-contract-theme-toggle svg { width: 25px !important; height: 25px !important; }
}

/* Waehrend des Ausfuellens verschwindet er ganz. */
body.vg-tippt .mm-contract-theme-toggle,
body.vg-tippt .mm-contract-theme-toggle:hover {
  opacity: 0 !important;
  pointer-events: none !important;
}

@media (prefers-reduced-motion: reduce) {
  .mm-contract-theme-toggle { transition: none !important; }
}

@media print { .mm-contract-theme-toggle { display: none !important; } }

/* ============================================================
   SPRECHBLASE AM THEME-SCHALTER   ·   Mert, 29.08.2026:
   "Mach hier so eine Sprechblase. Lieber heller? oder so, ab und zu soll
   sie das sagen."

   Der Schalter allein erklaert sich nicht - ein Kreis mit Sonne sagt nicht,
   dass man das ganze Blatt heller stellen kann. Die Blase sagt es, aber sie
   haelt sich an dieselbe Regel wie der Schalter: sie darf nicht stoeren.
   Deshalb taucht sie nur ab und zu auf, verschwindet von selbst und kommt
   nie waehrend des Ausfuellens.
   ============================================================ */
.mm-theme-blase {
  position: fixed;
  z-index: 1599;                 /* eine Stufe unter dem Schalter */
  padding: 8px 13px;
  border-radius: 13px;
  border: 1px solid rgba(255, 255, 255, 0.14);
  background: rgba(28, 22, 26, 0.94);
  -webkit-backdrop-filter: blur(16px) saturate(140%);
  backdrop-filter: blur(16px) saturate(140%);
  color: #f3e9ec;
  font: 600 12.5px/1.25 'Manrope', system-ui, sans-serif;
  white-space: nowrap;
  box-shadow: 0 12px 30px -16px rgba(0, 0, 0, 0.9);
  pointer-events: none;
  opacity: 0;
  transform: translateY(-4px) scale(.96);
  transform-origin: top right;
  transition: opacity 260ms cubic-bezier(.2,.8,.2,1),
              transform 260ms cubic-bezier(.2,.8,.2,1);
}
/* Das Zipfelchen zum Schalter hin. */
.mm-theme-blase::after {
  content: "";
  position: absolute;
  top: -5px;
  right: 15px;
  width: 9px;
  height: 9px;
  transform: rotate(45deg);
  background: rgba(28, 22, 26, 0.94);
  border-left: 1px solid rgba(255, 255, 255, 0.14);
  border-top: 1px solid rgba(255, 255, 255, 0.14);
}
.mm-theme-blase[data-an="1"] {
  opacity: 1;
  transform: translateY(0) scale(1);
}
/* Solange die Blase steht, ist der Schalter voll sichtbar - sonst zeigt ein
   Hinweis auf etwas, das man kaum sieht. */
body.mm-blase-offen .mm-contract-theme-toggle { opacity: 1 !important; }

:root[data-contract-theme="light"] .mm-theme-blase {
  background: rgba(252, 250, 246, 0.96);
  color: #26221d;
  border-color: rgba(27, 23, 18, 0.14);
}
:root[data-contract-theme="light"] .mm-theme-blase::after {
  background: rgba(252, 250, 246, 0.96);
  border-color: rgba(27, 23, 18, 0.14);
}

@media (prefers-reduced-motion: reduce) {
  .mm-theme-blase { transition: none; }
}
@media print { .mm-theme-blase { display: none !important; } }

/* ============================================================
   SYMBOLWECHSEL AM SCHALTER   ·   zweiter Teil der 21st-Vorlage
   "Animated Theme Toggler" (Mert, 29.08.2026).

   In der Vorlage macht das framer-motion: das alte Symbol geht mit
   Verkleinern und Drehung raus, das neue kommt gedreht herein. Dasselbe
   in CSS - die Symbole sind ohnehin schon beide da, es wechselt nur,
   welches angezeigt wird.

   Der Kreisuebergang beim Umschalten laeuft parallel und betrifft die
   ganze Seite; dieser Teil betrifft nur das Symbol im Knopf.
   ============================================================ */
.mm-contract-theme-toggle .theme-moon,
.mm-contract-theme-toggle .theme-sun {
  /* 29.08.2026 - opacity:1 steht BEWUSST vor der Animation.
     Vorher war die Animation die einzige Quelle der Sichtbarkeit: laeuft sie
     nicht durch - Tab im Hintergrund, gedrosselte Bildrate, unterbrochener
     Neustart beim Attributwechsel -, blieb das Symbol auf 0 stehen und der
     Knopf war LEER. Genau das hat Mert am Handy fotografiert.
     Mit diesem Grundwert ist das Zeichen immer da; die Animation schmueckt
     nur noch den Auftritt. */
  opacity: 1;
  /* forwards statt both: "both" legt schon VOR dem Start den from-Zustand
     an (opacity 0). Laeuft die Animation dann nicht durch, bleibt das Symbol
     unsichtbar - der Grundwert darueber nuetzt nichts, weil die Animation
     staerker ist. Mit "forwards" gilt vor dem Lauf der Grundwert und danach
     der Endwert; unsichtbar ist das Zeichen nur waehrend der 330 ms. */
  animation: mmSymbolRein 330ms cubic-bezier(.2,.8,.2,1) forwards;
}
@keyframes mmSymbolRein {
  from { opacity: 0; transform: scale(.55) rotate(-25deg); }
  to   { opacity: 1; transform: scale(1) rotate(0deg); }
}
/* Die Sonne kommt aus der anderen Richtung - wie in der Vorlage. */
:root[data-contract-theme="dark"] .mm-contract-theme-toggle .theme-sun {
  animation-name: mmSymbolReinSonne;
}
@keyframes mmSymbolReinSonne {
  from { opacity: 0; transform: scale(.55) rotate(25deg); }
  to   { opacity: 1; transform: scale(1) rotate(0deg); }
}

/* Waehrend der Kreis laeuft, soll der alte Seitenzustand nicht mitwandern -
   er liegt still darunter, nur das neue Bild waechst darueber auf. */
::view-transition-old(root) { animation: none; mix-blend-mode: normal; }
::view-transition-new(root) { animation: none; mix-blend-mode: normal; }

@media (prefers-reduced-motion: reduce) {
  .mm-contract-theme-toggle .theme-moon,
  .mm-contract-theme-toggle .theme-sun { animation: none; }
}

/* ============================================================
   Der Schalter laesst sich fassen und tritt ab
   (Mert, 29.08.2026 - Verhalten steht in contract-theme.js).

   `touch-action: none` ist Pflicht: ohne das nimmt der Browser die Geste
   als Scrollen und der Knopf bleibt beim Ziehen am Finger kleben.
   ============================================================ */
.mm-contract-theme-toggle {
  cursor: grab;
  touch-action: none;
  -webkit-user-select: none;
  user-select: none;
}
.mm-contract-theme-toggle:active { cursor: grabbing; }

/* Das Ausblenden nach der Ruhezeit soll ruhig ablaufen, das Zurueckkommen
   schneller - man wartet nicht gern auf einen Knopf, den man gerade sucht. */
.mm-contract-theme-toggle {
  transition: opacity 420ms cubic-bezier(.2,.8,.2,1),
              transform 180ms ease,
              background-color 180ms ease,
              border-color 180ms ease !important;
}
.mm-contract-theme-toggle:hover,
.mm-contract-theme-toggle:focus-visible {
  transition-duration: 140ms, 180ms, 180ms, 180ms !important;
}

/* ============================================================
   SPRECHBLASE AM UMSCHALTER
   Mert, 29.08.2026: "sprechblase bei toggle ... er soll nicht immer das
   gleiche sagen. Wenn es dunkel ist, soll er sagen: heller? Wenn es hell
   ist: magst du es dunkel?"

   Der Satz steht in data-spruch und wird von contract-theme.js je nach
   Zustand gesetzt - vier Formulierungen pro Zustand.

   ÖFFNET NACH LINKS. Der Knopf klebt rechts am Rand; eine Blase nach rechts
   waere sofort ueber die Bildkante gelaufen. Genau der Fehler, den Mert am
   selben Tag am Unterschreiben-Knopf gemeldet hat.
   ============================================================ */
.mm-contract-theme-toggle::after {
  content: attr(data-spruch);
  position: absolute;
  top: 50%;
  right: calc(100% + 10px);
  transform: translateY(-50%) translateX(6px);
  padding: 7px 12px;
  border-radius: 999px;
  background: rgba(22, 17, 20, .94);
  border: 1px solid rgba(255, 255, 255, .14);
  color: #F3E9EC;
  font: 500 13px/1 Manrope, system-ui, sans-serif;
  white-space: nowrap;          /* der Satz ist kurz - er soll nicht brechen */
  pointer-events: none;         /* die Blase faengt keine Klicks ab */
  opacity: 0;
  transition: opacity .22s ease, transform .22s cubic-bezier(.2,.8,.2,1);
}

/* Am Rechner beim Zeigen, ueberall beim Tastatur-Fokus. */
@media (hover: hover) {
  .mm-contract-theme-toggle:hover::after { opacity: 1; transform: translateY(-50%) translateX(0); }
}
.mm-contract-theme-toggle:focus-visible::after { opacity: 1; transform: translateY(-50%) translateX(0); }

/* Am Handy gibt es kein Zeigen: die Blase meldet sich einmal von selbst und
   verschwindet wieder. Sie laeuft genau einmal, nicht in Schleife. */
@media (hover: none) {
  .mm-contract-theme-toggle::after { animation: mm-blase-einmal 5s ease 1.2s 1 both; }
}
@keyframes mm-blase-einmal {
  0%   { opacity: 0; transform: translateY(-50%) translateX(6px); }
  8%   { opacity: 1; transform: translateY(-50%) translateX(0); }
  75%  { opacity: 1; transform: translateY(-50%) translateX(0); }
  100% { opacity: 0; transform: translateY(-50%) translateX(6px); }
}

@media (prefers-reduced-motion: reduce) {
  .mm-contract-theme-toggle::after { transition: none; animation: none; }
}

/* ============================================================
   Der Hell/Dunkel-Schalter über "So läuft es ab"
   Mert, 29.08.2026: "mach hell button raus hier und setz es oben über
   so läuft es ab."

   Er stand in der Schnellwahl-Leiste und nahm dort den Platz weg, den das
   Suchfeld braucht. Jetzt steht er im Seitenfluss, rechtsbündig über dem
   Abschnitt — dort, wo man beim Lesen entscheidet, ob es zu dunkel ist.
   ============================================================ */
.mm-qs-zeile {
  display: flex;
  justify-content: flex-end;
  padding: 0 60px 10px;
  background: var(--paper, transparent);
}
@media (max-width: 720px) {
  .mm-qs-zeile { padding: 0 20px 8px; }
}
.mm-qs-zeile .mm-quickswitch {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 16px;
  border-radius: 999px;
  border: 1px solid var(--line, rgba(255,255,255,.16));
  background: transparent;
  color: inherit;
  font: 500 13px/1 Manrope, system-ui, sans-serif;
  cursor: pointer;
  transition: border-color .2s ease, background .2s ease;
}
.mm-qs-zeile .mm-quickswitch:hover { border-color: currentColor; }
.mm-qs-zeile .mm-qs-icon {
  width: 15px; height: 15px; flex: none;
  fill: none; stroke: currentColor; stroke-width: 2;
  stroke-linecap: round; stroke-linejoin: round;
}
/* Der Text darf nie aus dem Knopf laufen (feste Regel, 29.08.2026). */
.mm-qs-zeile .mm-qs-text { white-space: nowrap; }
