/* MEEYO — Gestaltung aus der Marke (Icon: Nacht-Pflaume, Korall → Violett). Eine Schrift, selbst gehostet. */
@font-face { font-family: "Jakarta"; src: url("/static/fonts/PlusJakartaSans-400.ttf") format("truetype"); font-weight: 400; font-display: swap }
@font-face { font-family: "Jakarta"; src: url("/static/fonts/PlusJakartaSans-600.ttf") format("truetype"); font-weight: 600; font-display: swap }
@font-face { font-family: "Jakarta"; src: url("/static/fonts/PlusJakartaSans-800.ttf") format("truetype"); font-weight: 800; font-display: swap }

:root {
  --nacht: #160a1c; --pflaume: #221230; --pflaume-hell: #2e1a40; --linie: #3a2750;
  --milch: #f6effa; --nebel: #b9a7c9; --korall: #ff4f7a; --violett: #8b3dff; --minze: #6bffb0; --rot: #ff6b6b;
  --verlauf: linear-gradient(100deg, var(--korall), var(--violett));
  --gelb: #ffc857;            /* Warnton: Hinweise in Raeumen, Rueckgaengig-Knopf */
  --tinte: #1a0f24;           /* Schrift auf hellem Grund (heller Modus) */
  /* 26.09. gemessen: Korall und Minze sind fuer DUNKLEN Grund gemischt. Als SCHRIFT auf hellem Grund
     kommen sie auf 3.16:1 und 3.46:1 — unter der Lesbarkeitsgrenze von 4.5:1. Darum ein eigenes Paar
     nur fuer Schrift: im dunklen Modus identisch (es aendert sich nichts), im hellen dunkler gemischt.
     Flaechen, Rahmen und der Verlauf behalten die Markenfarbe — sonst waere MEEYO im hellen Modus
     eine andere Marke. Gemessen mit `python tools/kontrast_pruefen.py`. */
  --korall-schrift: var(--korall); --minze-schrift: var(--minze);
  --gelb-schrift: var(--gelb);   /* 28.10.2026 (Pruefbefund 9): Gelb als SCHRIFT — im hellen Modus dunkler, sonst 1.6:1 auf Weiss */
  --radius: 14px; --radius-klein: 9px;
  color-scheme: dark;
}
/* Helles Thema (Owner 15.09.): dieselben Namen, andere Werte — der Nutzer waehlt oben rechts, gespeichert im Browser */
:root[data-theme="light"] {
  --nacht: #faf7fc; --pflaume: #ffffff; --pflaume-hell: #f1ebf6; --linie: #e3dbea;
  --milch: #1b1024; --nebel: #6b5d78; --minze: #1f9d63;
  --korall-schrift: #c3103f;  /* 6.06:1 auf Weiss, 5.03:1 auf dem getoenten Grund der Pillen */
  --minze-schrift: #127848;   /* 5.52:1 auf Weiss, 5.25:1 auf dem getoenten Grund */
  --gelb-schrift: #8a5a00;    /* 5.9:1 auf Weiss (vorher #ffc24f: 1.61:1) */
  color-scheme: light;
}
:root[data-theme="light"] body { background: var(--nacht) }
:root[data-theme="light"] .karte, :root[data-theme="light"] .schritt, :root[data-theme="light"] .seitenleiste, :root[data-theme="light"] .chat-panel, :root[data-theme="light"] .mee-panel, :root[data-theme="light"] .rechner, :root[data-theme="light"] .satz, :root[data-theme="light"] .sicher, :root[data-theme="light"] .mat, :root[data-theme="light"] .paket, :root[data-theme="light"] .antrag, :root[data-theme="light"] .pr-schritte div { box-shadow: 0 8px 30px rgba(60,20,90,.08); border-color: var(--linie) }
:root[data-theme="light"] .hero-glut { opacity: .45 } :root[data-theme="light"] .telefon { background: #1a0f22 } :root[data-theme="light"] .kopf, :root[data-theme="light"] .schritte-nav { background: var(--nacht) }
:root[data-theme="light"] .score-pille, :root[data-theme="light"] .mpille { background: rgba(255,255,255,.85); color: #1b1024 } :root[data-theme="light"] .nachricht.du, :root[data-theme="light"] .mee-msg.mee { background: var(--pflaume-hell) }
:root[data-theme="light"] .mee-knopf-schwebend { background: #fff } :root[data-theme="light"] .zahlen.pr-zahlen div { background: var(--pflaume) }
.thema-knopf { background: transparent; border: 1px solid var(--linie); color: var(--nebel); border-radius: 999px; width: 34px; height: 34px; padding: 0; display: grid; place-items: center; font-size: 1rem; cursor: pointer; margin-left: 8px } .thema-knopf:hover { color: var(--milch) }
* { box-sizing: border-box }
[hidden] { display: none !important }
html { -webkit-text-size-adjust: 100% }
body { margin: 0; font: 400 16px/1.55 "Jakarta", system-ui, sans-serif; background: var(--nacht); color: var(--milch); }
/* Hindi: Devanagari braucht zusammenhaengende Zeichen und Platz fuer Vokalzeichen. */
html[lang="hi"] body { font-family: "Jakarta", "Nirmala UI", "Noto Sans Devanagari", "Mangal", system-ui, sans-serif }
html[lang="hi"] :is(h1, h2, h3, .buehne-claim, button, .knopf) { letter-spacing: normal; line-height: 1.4 }
a { color: inherit }
h1, h2, h3 { font-weight: 800; letter-spacing: -0.015em; line-height: 1.12; margin: 0 0 .35em }
h1 { font-size: clamp(1.6rem, 3vw, 2rem) } h2 { font-size: 1.35rem; margin-top: 1.6em }
/* 26.09.: H3 stand auf 1.05rem — 16,8 px gegen 16 px Fliesstext. Eine Überschrift, die nicht
   grösser ist als der Text darunter, ist keine Überschrift, sondern ein fett gesetzter Satz. */
h3 { font-size: 1.2rem }
p { margin: .4em 0 }

/* Kopf */
.kopf { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 14px 22px; }
.marke { font-weight: 800; letter-spacing: .12em; font-size: 1.25rem; text-decoration: none; background: var(--verlauf); -webkit-background-clip: text; background-clip: text; color: transparent }
nav { display: flex; flex-wrap: wrap; gap: 4px 16px } nav a { color: var(--nebel); text-decoration: none; font-weight: 600; font-size: .95rem } nav a:hover, nav a:focus-visible { color: var(--milch) }
.inhalt { max-width: 720px; margin: 0 auto; padding: 24px 20px 60px }
.fuss { text-align: center; color: var(--nebel); padding: 28px 20px; font-size: .88rem }

/* Text-Hilfen */
.klein { color: var(--nebel); font-size: .9rem } .rechts { text-align: right } .fehler { color: var(--rot); font-weight: 600 } .gruen { color: var(--minze-schrift) } .rot { color: var(--rot) }
.held h1 { font-size: clamp(2.3rem, 7vw, 3.4rem) }

/* Formulare */
.formular { display: grid; gap: 16px } label { display: grid; gap: 6px; font-weight: 600; font-size: .95rem } label.zeile { grid-template-columns: auto 1fr; align-items: center; font-weight: 400 } label.zeile input { width: auto; margin: 0 } label.zeile > span, label.zeile > a { display: inline }
input, select, textarea { font: inherit; padding: 12px 14px; border-radius: var(--radius-klein); border: 1px solid var(--linie); background: var(--pflaume); color: var(--milch); width: 100% }
input:focus-visible, select:focus-visible, button:focus-visible, a:focus-visible { outline: 2px solid var(--korall); outline-offset: 2px }
button, .knopf { font: inherit; font-weight: 700; padding: 12px 20px; border: 0; border-radius: 999px; background: var(--verlauf); color: #fff; cursor: pointer; text-decoration: none; display: inline-block; line-height: 1.2 }
button[type=button], .knopf.leise, .s-weg, .c-toggle { background: var(--pflaume-hell); color: var(--milch) }
button:disabled { opacity: .5; cursor: default }
.pw-huelle { position: relative; display: grid } .pw-huelle input { padding-right: 46px }
.pw-auge { position: absolute; right: 6px; top: 50%; transform: translateY(-50%); background: transparent; padding: 4px 8px; font-size: 1.05rem; line-height: 1; border: 0; cursor: pointer }

/* Flächen — nur dort, wo eine Gruppe wirklich zusammengehört */
.karte { background: var(--pflaume); border-radius: var(--radius); padding: 18px 20px; margin: 14px 0 }
.daten { display: grid; grid-template-columns: minmax(120px, 160px) 1fr; gap: 6px 12px } .daten dt { color: var(--nebel) } .daten dd { margin: 0 }
.tabelle { width: 100%; border-collapse: collapse; font-size: .95rem } .tabelle td, .tabelle th { text-align: left; padding: 9px 8px; border-bottom: 1px solid var(--linie); vertical-align: top } .tabelle th { color: var(--nebel); font-weight: 600 }
.tabelle td.zahl, .tabelle th.zahl { text-align: right; font-variant-numeric: tabular-nums }
pre { white-space: pre-wrap; background: #0f0716; padding: 10px; border-radius: var(--radius-klein); font-size: .85rem }

/* Preise, Zähler */
.pakete { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px }
.pakete .karte { margin: 0; display: grid; gap: 8px } .preis { font-size: 2rem; font-weight: 800; margin: 0; letter-spacing: -0.02em }
.zaehler { display: flex; gap: 28px; font-size: 1.1rem } .zaehler b { font-size: 1.7rem; font-weight: 800 }

/* Kennzahlen als Typografie, keine Kacheln */
.zahlen { display: flex; flex-wrap: wrap; gap: 8px 36px; margin: 8px 0 4px }
.zahlen div { display: grid } .zahlen b { font-size: 2rem; font-weight: 800; letter-spacing: -0.02em; line-height: 1.05; font-variant-numeric: tabular-nums } .zahlen span { color: var(--nebel); font-size: .9rem }

/* Promoter-Ticket: das eine laute Element der Seite */
.ticket { display: grid; grid-template-columns: 1fr auto; gap: 18px; align-items: center; padding: 22px 24px; border-radius: 22px; background: var(--verlauf); color: #fff; margin: 12px 0 }
.ticket .code { font-size: clamp(2.2rem, 9vw, 3.6rem); font-weight: 800; letter-spacing: .12em; line-height: 1 }
.ticket .beschriftung { font-size: .95rem; opacity: .9 } .ticket .link { font-weight: 600; word-break: break-all; margin-top: 6px }
.ticket img { width: 118px; height: 118px; border-radius: 12px; background: #fff; padding: 6px }
.ticket .knopf { background: rgba(255,255,255,.18); color: #fff; padding: 8px 14px; font-size: .9rem; margin: 10px 8px 0 0 }
@media (max-width: 520px) { .ticket { grid-template-columns: 1fr } .ticket img { width: 96px; height: 96px } }

/* Baum: Linien nur, wo sie Struktur zeigen */
.baum { list-style: none; padding: 0; margin: 6px 0 }
.baum li { position: relative; padding: 6px 0 6px 22px; border-left: 2px solid var(--linie) }
.baum li::before { content: ""; position: absolute; left: -2px; top: 19px; width: 14px; border-top: 2px solid var(--linie) }
.baum ul { list-style: none; padding: 0 0 0 10px; margin: 4px 0 0 }
.baum .wer { font-weight: 600 } .baum .was { color: var(--nebel); font-size: .9rem }
.leer { color: var(--nebel); padding: 10px 0 }

/* Kopf mit Icon, breite Seiten */
.marke { display: inline-flex; align-items: center; gap: 10px } .marke img { border-radius: 9px }
nav .knopf.klein { padding: 8px 16px; font-size: .9rem; color: #fff } nav a.dev { opacity: .55 }
body.breit .inhalt { max-width: 1080px }
/* 27.09. (Owner: «der Satz muss in die Mitte noch»): `.mitte` zentrierte nur den TEXT, nicht den
   Kasten. Auf der Startseite ist `.hero-text` 34em breit; in einem 1000px-Abschnitt stand er damit
   links und der Text darin mittig — gemessen 20px links, 368px rechts. `margin-inline: auto` stellt
   den Kasten selbst in die Mitte.
   Die Regel stand vorher DREIMAL global im Haus (hier, bei .preis-teaser und bei #stimme-wahl); die
   beiden anderen sind weg. Wirksam war ohnehin die Vereinigung — bei .preis-teaser .hero-text hatte
   jemand schon einmal genau dieses Problem mit `margin: 0 auto` von Hand geflickt, an einer Stelle.
   Das ist der Grund, warum es hier gehoert und nicht dort: derselbe Fehler, drei Orte, eine Ursache. */
.mitte { text-align: center; margin-top: 18px; margin-inline: auto }
.mitte-liste { max-width: 640px; margin: 20px auto 0 }

/* Bühne: Marke links, Formular rechts */
.buehne { display: grid; grid-template-columns: minmax(280px, 1fr) minmax(320px, 460px); gap: 48px; align-items: start; margin-top: 12px }
.buehne-marke { position: sticky; top: 24px } .buehne-icon { width: 120px; height: 120px; border-radius: 26px; display: block; margin-bottom: 18px }
.buehne-claim { font-size: clamp(1.6rem, 3.2vw, 2.3rem); font-weight: 800; line-height: 1.1; letter-spacing: -0.015em; margin: 0 0 10px }
.buehne-wofuer { color: var(--nebel); font-size: 1rem; line-height: 1.45; margin: 0 0 22px; max-width: 26em }
.versprechen { list-style: none; padding: 0; margin: 0; display: grid; gap: 12px } .versprechen li { padding-left: 22px; position: relative; color: var(--nebel) }
.versprechen li::before { content: ""; position: absolute; left: 0; top: .5em; width: 10px; height: 10px; border-radius: 50%; background: var(--verlauf) }
.versprechen b { color: var(--milch) }
.buehne-form { background: var(--pflaume); border-radius: 22px; padding: 28px 28px 24px } .buehne-form h1 { font-size: 1.7rem }
.zwei { display: grid; grid-template-columns: 1fr 1fr; gap: 12px } .geburt { display: grid; grid-template-columns: 1fr 1fr 1.6fr; gap: 8px } .geburt input { text-align: center; font-weight: 700; letter-spacing: .04em } .formular label > .klein { display: block; margin: 2px 0 6px; color: var(--nebel) }
.code-feld { font-size: 1.8rem; letter-spacing: .5em; text-align: center; font-weight: 800 }
@media (max-width: 760px) { .buehne { grid-template-columns: 1fr; gap: 20px } .buehne-marke { position: static } .buehne-icon { width: 72px; height: 72px; border-radius: 16px } .zwei { grid-template-columns: 1fr } }

/* Hero der Startseite */
.hero { display: grid; grid-template-columns: 1.3fr 1fr; gap: 32px; align-items: center; padding: 24px 0 36px }
/* 27.09. (Owner: «kannst du schauen, dass die zentriert ist — nur die Schrift, dass es aber
   untereinander zentriert ist»): Der Titel stand linksbuendig und brach in drei Zeilen, wobei
   «viert.» allein auf der mittleren hing — gemessen bei 1029, 1400 und 1920 px, in jeder Breite
   dasselbe Bild.

   `text-wrap: balance` ist die zweite Haelfte der Antwort und die wichtigere: Zentrieren allein
   stellt die schiefen Zeilen nur mittig, es macht sie nicht gleich lang. Der Browser verteilt die
   Woerter damit gleichmaessig auf die Zeilen, statt jede bis zum Anschlag zu fuellen und den Rest
   fallen zu lassen. Genau dafuer gibt es die Eigenschaft — bei Titeln, nicht bei Fliesstext. */
.hero h1 { font-size: clamp(2.4rem, 5.6vw, 4rem); letter-spacing: -0.025em;
  text-align: center; text-wrap: balance } .glanz { background: var(--verlauf); -webkit-background-clip: text; background-clip: text; color: transparent }
.hero-text { font-size: 1.15rem; color: var(--nebel); max-width: 34em } .hero-knoepfe { display: flex; flex-wrap: wrap; gap: 10px; margin: 18px 0 }
.hero-icon { width: min(100%, 360px); justify-self: center; border-radius: 48px; box-shadow: 0 30px 80px rgba(139, 61, 255, .25) }
.zaehler-zeile { margin-top: 14px } .zaehler small { color: var(--nebel); font-size: .9rem; font-weight: 400 }
@media (max-width: 760px) { .hero { grid-template-columns: 1fr } .hero-icon { width: 180px; order: -1; border-radius: 36px } }
.versprechen-block h2, .schritte h2 { margin-top: 1.2em }
.versprechen-raster { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px 28px }
.versprechen-raster div { padding: 14px 0; border-top: 1px solid var(--linie) } .versprechen-raster b { display: block; margin-bottom: 4px } .versprechen-raster p { color: var(--nebel); margin: 0 }
.schritt-liste { counter-reset: s; list-style: none; padding: 0; display: grid; gap: 14px; max-width: 720px }
.schritt-liste li { counter-increment: s; position: relative; padding-left: 58px; min-height: 44px; color: var(--nebel) } .schritt-liste b { color: var(--milch); display: block }
.schritt-liste li::before { content: counter(s); position: absolute; left: 0; top: 0; width: 42px; height: 42px; border-radius: 50%; background: var(--verlauf); color: #fff; font-weight: 800; display: grid; place-items: center }

/* Preise */
.wahl { display: inline-flex; gap: 6px; background: var(--pflaume); border-radius: 999px; padding: 6px; margin: 10px 0 6px }
.wahl-knopf { background: transparent; color: var(--nebel); padding: 10px 18px } .wahl-knopf.aktiv { background: var(--verlauf); color: #fff }
.pakete { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; margin-top: 22px; max-width: 900px; margin-left: auto; margin-right: auto }
.paket { position: relative; background: var(--pflaume); border-radius: 22px; padding: 26px 22px; display: grid; gap: 6px; justify-items: center; text-align: center }
.paket.beliebt { outline: 2px solid var(--korall); outline-offset: -2px } .paket-dauer { font-weight: 600; color: var(--nebel) } .paket button { margin-top: 10px; min-width: 150px }
/* Owner 25.09.: «alle zahlen fett schwarz» — die Monatszahl stand grau da wie ein Hinweis, obwohl sie
   die Zahl ist, nach der man vergleicht. Jetzt in der Textfarbe und fett, Ziffern auf gleicher Breite. */
.paket .klein { color: var(--milch); font-weight: 700; font-variant-numeric: tabular-nums }
.paket .preis { font-variant-numeric: tabular-nums }
.etikett { position: absolute; top: -12px; background: var(--verlauf); color: #fff; font-size: .8rem; font-weight: 700; padding: 4px 12px; border-radius: 999px }

/* Profil */
.profil-kopf { display: flex; justify-content: space-between; align-items: flex-end; gap: 24px; flex-wrap: wrap } .profil-kopf h1 { margin-bottom: 4px }
.fortschritt { min-width: 220px; display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; align-items: baseline } .fortschritt b { font-size: 1.6rem } .fortschritt span { color: var(--nebel) }
.balken { grid-column: 1 / -1; height: 8px; border-radius: 999px; background: var(--pflaume-hell); overflow: hidden } .balken i { display: block; height: 100%; width: 0; background: var(--verlauf); transition: width .5s }
.schritte-nav { display: flex; gap: 8px; flex-wrap: wrap; position: sticky; top: 0; background: var(--nacht); padding: 12px 0; z-index: 2; border-bottom: 1px solid var(--linie) }
.schritte-nav a { color: var(--nebel); text-decoration: none; font-size: .9rem; font-weight: 600; padding: 6px 12px; border-radius: 999px; background: var(--pflaume) } .schritte-nav a.fertig { color: var(--milch) } .schritte-nav a.fertig::before { content: "✓ "; color: var(--minze-schrift) }
.schritt { background: var(--pflaume); border-radius: 22px; padding: 26px 28px; margin: 22px 0; scroll-margin-top: 70px } .schritt h2 { margin-top: 0 } .schritt h3 { margin: 22px 0 8px } .schritt .ok { margin-left: 10px; font-weight: 600 }
.schritt input, .schritt select, .schritt textarea { background: var(--nacht) }
.drei { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px } @media (max-width: 760px) { .drei { grid-template-columns: 1fr } .schritt { padding: 20px 18px } }
.fotos { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 12px; margin: 14px 0 }
/* 17.10.2026 (Owner: «Profilfoto angepasst an die Seite, also klein, und die Knöpfe dürfen niemals über das Foto gehen»):
   Kacheln höchstens 120 px breit, die Knöpfe stehen UNTER dem Bild (nicht mehr darüber), der Prüf-Hinweis ebenfalls. */
#fotos.fotos { grid-template-columns: repeat(auto-fill, minmax(112px, 120px)); justify-content: start; align-items: start }
#fotos .foto:not(.leer) { aspect-ratio: auto; overflow: visible; display: flex; flex-direction: column; gap: 6px; background: transparent; place-items: initial }
#fotos .foto:not(.leer) img { aspect-ratio: 4 / 5; height: auto; border-radius: 14px; background: var(--nacht) }
#fotos .foto.profilbild { outline: 0 } #fotos .foto.profilbild img { outline: 2px solid var(--korall); outline-offset: -2px }
#fotos .foto-knoepfe { position: static; justify-content: center; flex-wrap: wrap; gap: 3px } #fotos .foto-knoepfe button:first-child:has(+ button + button + button + button) { width: 100%; font-size: .75rem }   /* «MEE fragen» (mee.js) eigene Zeile */
#fotos .foto-knoepfe button { min-width: 26px; width: 26px; height: 26px; line-height: 26px; padding: 0; font-size: .8rem }
#fotos .foto-hinweis { position: static; padding: 0 2px; background: none; color: var(--nebel) } #fotos .foto-hinweis[data-q=schlecht] { color: #ffb3b3 }
#fotos .foto-stand { top: 6px; left: 6px; right: 6px }
.foto { position: relative; aspect-ratio: 4 / 5; border-radius: 16px; overflow: hidden; background: var(--nacht); display: grid; place-items: center; color: var(--nebel); font-size: .85rem }
.foto img { width: 100%; height: 100%; object-fit: cover } .foto.profilbild { outline: 2px solid var(--korall); outline-offset: -2px } .foto.leer { border: 2px dashed var(--linie) }
.foto-stand { position: absolute; left: 8px; top: 8px; right: 8px; font-size: .75rem; font-weight: 700; color: #fff; text-shadow: 0 1px 4px rgba(0,0,0,.7) }
.foto-knoepfe { position: absolute; z-index: 2; bottom: 6px; right: 6px; left: 6px; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 4px } .foto-knoepfe button { min-width: 30px; height: 30px; padding: 0 7px; font-size: .95rem; line-height: 30px; background: rgba(22,10,28,.85); color: #fff; border: 1px solid rgba(255,255,255,.25); border-radius: 10px } .foto-knoepfe button.weg { background: var(--korall); border-color: var(--korall) } .foto-knoepfe button:disabled { opacity: .35 }   /* 18.09.: Owner fand den Loeschknopf nicht — 8px-Symbole */
.upload { display: inline-block; cursor: pointer }
.chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 16px }
.chip { padding: 8px 14px; font-weight: 600; font-size: .9rem; background: var(--nacht); color: var(--nebel); border: 1px solid var(--linie) } .chip.an { background: var(--verlauf); color: #fff; border-color: transparent }
.regler-liste { display: grid; gap: 14px } .regler-liste label { grid-template-columns: 1fr 2fr 1fr; align-items: center; font-weight: 500; color: var(--nebel) } .regler-liste label :last-child { text-align: right }
input[type=range] { accent-color: var(--korall); padding: 0; background: transparent; border: 0 }
.alter-block { margin-bottom: 18px } #praeferenzen input, #praeferenzen select { padding: 8px 10px }
.geschuetzt-zeile { padding: 10px 0; border-bottom: 1px solid var(--linie) }
.sprachen-block { display: grid; gap: 6px } .feldname { font-weight: 600; font-size: .95rem } .sprachen-block .chips { margin: 4px 0 6px } .sprachen-block label { max-width: 320px }
.pref-liste { display: grid; gap: 4px } .pref-zeile { padding: 12px 0; border-bottom: 1px solid var(--linie) } .pref-zeile:last-child { border-bottom: 0 }
.pref-kopf { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 8px } .pref-kopf select { width: auto; padding: 6px 10px; font-size: .9rem }
.steuer .chips { margin: 4px 0 0 } .steuer input[type=range] { width: 100%; max-width: 420px } .regler-wert { display: block; color: var(--nebel); font-size: .9rem; margin-top: 2px }

/* MEE */
.mee-kopf { display: flex; gap: 16px; align-items: flex-start } .mee-kopf h2 { margin: 0 0 4px }
.mee-avatar { flex: 0 0 48px; width: 48px; height: 48px; border-radius: 50%; background: var(--verlauf); color: #fff; font-weight: 800; font-size: 1.3rem; display: grid; place-items: center; box-shadow: 0 8px 24px rgba(255, 79, 122, .35) }
.ki-karte { background: var(--nacht); margin-top: 16px }
.chat { display: grid; gap: 10px; max-height: 420px; overflow-y: auto; padding: 16px; background: var(--nacht); border-radius: 18px; margin-top: 16px }
.blase { max-width: 78%; padding: 12px 16px; border-radius: 18px; line-height: 1.45 } .blase.mee { background: var(--pflaume-hell); border-bottom-left-radius: 6px; justify-self: start } .blase.du { background: var(--verlauf); color: #fff; border-bottom-right-radius: 6px; justify-self: end }
.pending { margin: 12px 0; padding: 14px 16px; border-radius: 16px; background: var(--nacht); border: 1px solid var(--linie) } .pending > b { display: block; margin-bottom: 8px }
.pending-zeile { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; padding: 6px 0; border-top: 1px solid var(--linie) } .pending-zeile > span { flex: 1; min-width: 200px } .pending-zeile i { font-style: normal; color: var(--milch) } .pending-zeile b { color: var(--nebel); font-weight: 600 }
.klein-knopf { padding: 6px 14px; font-size: .85rem } .klein-knopf.leise { background: var(--pflaume-hell); color: var(--milch) }
.antwort-zeile { display: grid; grid-template-columns: 1fr auto auto; gap: 8px; align-items: end; margin-top: 12px } .antwort-zeile textarea { background: var(--nacht); resize: none }
.mikro { width: 52px; height: 52px; padding: 0; border-radius: 50%; background: linear-gradient(135deg, var(--korall), var(--violett)); color: #fff; box-shadow: 0 4px 14px rgba(255,79,122,.35); display: inline-grid; place-items: center; border: 2px solid rgba(255,255,255,.35) } .mikro::before, .mee-mikro::before { content: ''; width: 26px; height: 26px; background: currentColor; -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><rect x='9' y='2' width='6' height='12' rx='3'/><path d='M5 11a7 7 0 0 0 14 0h-2a5 5 0 0 1-10 0z'/><rect x='11' y='18' width='2' height='3'/><rect x='8' y='21' width='8' height='2' rx='1'/></svg>") center / contain no-repeat; mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><rect x='9' y='2' width='6' height='12' rx='3'/><path d='M5 11a7 7 0 0 0 14 0h-2a5 5 0 0 1-10 0z'/><rect x='11' y='18' width='2' height='3'/><rect x='8' y='21' width='8' height='2' rx='1'/></svg>") center / contain no-repeat } .mikro.an { background: var(--rot); color: #fff; animation: puls 1s infinite } .mikro.an::before, .mee-mikro.an::before { -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><rect x='5' y='5' width='14' height='14' rx='3'/></svg>"); mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><rect x='5' y='5' width='14' height='14' rx='3'/></svg>") }   /* 18.09.: Mikrofon als klares Symbol statt Emoji (Owner: «damit man es auch wirklich erkennt») */
@keyframes puls { 50% { box-shadow: 0 0 0 8px rgba(255, 107, 107, .25) } } @media (prefers-reduced-motion: reduce) { .mikro.an { animation: none } }
.leise-link { background: transparent; color: var(--nebel); padding: 0; font-weight: 600; text-decoration: underline } .leise-link:hover { color: var(--milch) }
.ergebnis { margin-top: 18px } .ergebnis summary { cursor: pointer; font-weight: 700; color: var(--nebel); padding: 8px 0 } .ergebnis[open] summary { color: var(--milch) } .ergebnis .formular { margin-top: 12px }
.bio-werkzeuge { display: flex; gap: 10px; flex-wrap: wrap; align-items: end; margin: 8px 0 14px } .bio-werkzeuge label { max-width: 180px }
.varianten { display: grid; gap: 12px; margin-bottom: 14px } .variante { background: var(--nacht); border-radius: 16px; padding: 14px 16px; display: grid; gap: 6px } .variante p { margin: 0 } .variante button { justify-self: start; padding: 8px 16px; font-size: .9rem }
.befunde { background: var(--nacht); border-radius: 16px; padding: 12px 16px; margin-bottom: 14px } .befunde p { margin: 4px 0 }
.foto-hinweis { position: absolute; inset: auto 0 0 0; padding: 26px 8px 44px; font-size: .75rem; line-height: 1.3; color: #fff; background: linear-gradient(transparent, rgba(22, 10, 28, .92)) } .foto-hinweis[data-q=schlecht] { color: #ffb3b3 }
.foto.profilbild .foto-stand { top: 8px; left: 8px }

/* Schutz */
.badge { display: inline-block; font-size: .8rem; font-weight: 700; padding: 4px 10px; border-radius: 999px; background: var(--minze); color: #0b2a1a; vertical-align: middle; margin-left: 8px }
.kamera { max-width: 420px; aspect-ratio: 3 / 4; border-radius: 18px; overflow: hidden; background: var(--nacht); margin: 10px 0 } .kamera video { width: 100%; height: 100%; object-fit: cover; transform: scaleX(-1) }
.geste b { font-size: 1.2rem; color: var(--korall-schrift) }
.foto-rejected img { filter: grayscale(1) brightness(.6) } .foto-pending img, .foto-review img { filter: brightness(.7) }
.banner-warnung { display: flex; gap: 12px; align-items: center; justify-content: space-between; flex-wrap: wrap; background: #3b2a12; border: 1px solid #8a6a2a; color: #ffe2a8; border-radius: 14px; padding: 12px 16px; margin: 0 0 16px } .banner-warnung button { padding: 8px 14px; font-size: .9rem; background: #8a6a2a; color: #fff }
.queue-bild { width: 96px; height: 120px; object-fit: cover; border-radius: 8px; background: var(--nacht) }
.queue-knoepfe { display: flex; gap: 6px; flex-wrap: wrap } .queue-knoepfe button { padding: 6px 10px; font-size: .8rem }
/* 10.10. Pruefqueue unterwegs (Owner: «auch mobil anschauen und akzeptieren oder verwarnen»): bis 600 px Karten statt Tabelle */
.queue-vertretung .zeile { margin: 6px 0 } .queue-vertretung select, .queue-vertretung input { max-width: 220px }
.queue-karten { display: none; gap: 14px }
.queue-karte { background: var(--nacht); border: 1px solid var(--linie); border-radius: 16px; padding: 12px; display: grid; gap: 8px; min-width: 0; transition: opacity .3s }
.queue-karte.erledigt { opacity: .35 }
.queue-karte p { margin: 0; overflow-wrap: anywhere }
.queue-karte-bild { width: 100%; max-height: 62vh; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 12px; background: var(--pflaume) }
.queue-karte-kopf { display: flex; justify-content: space-between; align-items: baseline; gap: 8px } .queue-karte-kopf b { font-size: 1.05rem }
.queue-karte-wer { color: var(--nebel); font-size: .9rem }
.queue-karte-eingabe { width: 100%; box-sizing: border-box; min-height: 44px; font-size: 1rem }
.queue-karte-knoepfe { display: grid; grid-template-columns: 1fr 1fr; gap: 8px }
.queue-karte-knoepfe .queue-gross { min-height: 52px; padding: 12px 10px; font-size: 1rem; border-radius: 14px; width: 100% }
.queue-karte-knoepfe .queue-gross.ja { grid-column: 1 / -1; background: var(--verlauf); color: #fff }
.queue-karte-knoepfe .queue-gross.warn { background: #8a6a2a; color: #fff }
/* 26.10.2026: Pruefqueue in Klartext — Satz, Empfehlung, Rohgrund klein; der empfohlene Knopf mit Ring */
.queue-was { margin: 0 0 4px } .queue-empfehlung { margin: 0 0 4px; color: var(--milch) } .queue-roh { margin: 0; opacity: .75 }
button.empfohlen { box-shadow: 0 0 0 3px var(--violett); font-weight: 700 }
.queue-karte-knoepfe .queue-gross.ja + .queue-gross.warn:last-child { grid-column: 1 / -1 }
.queue-karte-knoepfe .queue-gross.nein { background: var(--pflaume-hell); color: var(--milch) }
.queue-karte-mehr summary { cursor: pointer; padding: 10px 0; color: var(--nebel); font-weight: 600 } .queue-karte-mehr .queue-karte-knoepfe { margin-top: 4px }
@media (max-width: 600px) { #queue-tab { display: none } .queue-karten { display: grid } .queue-vertretung select, .queue-vertretung input { max-width: 100% } }

/* Entdecken */
.tabs { display: flex; gap: 6px; background: var(--pflaume); border-radius: 999px; padding: 6px; width: max-content; margin: 0 auto 18px }
.tab { background: transparent; color: var(--nebel); padding: 10px 22px } .tab.aktiv { background: var(--verlauf); color: #fff } .zahl-pille { background: #fff; color: var(--violett); border-radius: 999px; padding: 0 8px; font-size: .8rem; margin-left: 4px }
.stapel-huelle { max-width: 420px; margin: 0 auto } .stapel { position: relative; height: min(70vh, 620px) }
.wisch-karte { position: absolute; inset: 0; background: var(--pflaume); border-radius: 26px; overflow: hidden; box-shadow: 0 20px 60px rgba(0,0,0,.45); touch-action: none; user-select: none; transform: translateY(calc(var(--tiefe) * 10px)) scale(calc(1 - var(--tiefe) * .04)); transition: transform .3s; display: flex; flex-direction: column }
.fotos-rahmen { position: relative; flex: 1; min-height: 0; background: var(--nacht); cursor: pointer } .fotos-rahmen img { width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none }
.punkte { position: absolute; top: 10px; left: 12px; right: 12px; display: flex; gap: 4px } .punkte i { flex: 1; height: 3px; border-radius: 2px; background: rgba(255,255,255,.35) } .punkte i.an { background: #fff }
.score-pille { position: absolute; top: 22px; left: 14px; background: rgba(22,10,28,.75); backdrop-filter: blur(6px); color: #fff; padding: 6px 12px; border-radius: 999px; font-size: .85rem } .score-pille b { font-size: 1.05rem; background: var(--verlauf); -webkit-background-clip: text; background-clip: text; color: transparent }
.karte-unten { position: absolute; left: 0; right: 0; bottom: 0; padding: 60px 18px 16px; background: linear-gradient(transparent, rgba(22,10,28,.95)); color: #fff } .karte-unten h3 { margin: 0; font-size: 1.5rem } .karte-unten p { margin: 2px 0; color: #e8dcf0; font-size: .95rem }
.stempel { position: absolute; top: 60px; padding: 8px 16px; border: 4px solid; border-radius: 12px; font-weight: 800; font-size: 1.6rem; opacity: 0; transform: rotate(-12deg); pointer-events: none }
.stempel-nein { right: 20px; color: #ff6b6b; border-color: #ff6b6b } .stempel-ja { left: 20px; color: var(--minze-schrift); border-color: var(--minze); transform: rotate(12deg) } .stempel-sehr { left: 50%; top: 45%; translate: -50% -50%; color: var(--violett); border-color: var(--violett); transform: none; font-size: 2.4rem }
.details { max-height: 55%; overflow-y: auto; padding: 14px 18px; background: var(--pflaume) } .details h4 { margin: 14px 0 6px; color: var(--nebel); font-size: .9rem } .details .bio { margin: 0 } .details .chips { margin: 4px 0 } .details .chip { padding: 5px 11px; font-size: .82rem }
.fakten { display: grid; grid-template-columns: auto 1fr; gap: 3px 12px; margin: 8px 0; font-size: .9rem } .fakten dt { color: var(--nebel) } .fakten dd { margin: 0 }
.komponenten { display: grid; gap: 6px } .komp { display: grid; grid-template-columns: 130px 1fr 32px; gap: 8px; align-items: center; font-size: .85rem } .komp i { display: block; height: 8px; border-radius: 4px; background: var(--nacht); overflow: hidden } .komp b { display: block; height: 100%; background: var(--verlauf) } .komp em { font-style: normal; text-align: right; color: var(--nebel) }
.erklaerung { margin-top: 10px; padding: 10px 12px; background: var(--nacht); border-radius: 12px } .erklaerung p { margin: 4px 0 } .einstieg { color: var(--milch); font-weight: 600 }
.det-knoepfe { display: flex; gap: 8px; margin: 12px 0 0 } .det-knoepfe button { padding: 6px 12px; font-size: .85rem }
.aktionen { display: flex; justify-content: center; gap: 18px; margin: 18px 0 6px }
.akt { width: 68px; height: 68px; border-radius: 50%; padding: 0; font-size: 1.6rem; font-weight: 800; display: grid; place-items: center; box-shadow: 0 10px 30px rgba(0,0,0,.35); transition: transform .15s } .akt:hover { transform: scale(1.08) }
.akt.nein { background: var(--pflaume-hell); color: #ff6b6b } .akt.ja { background: var(--verlauf); color: #fff; width: 76px; height: 76px } .akt.sehr { background: var(--violett); color: #fff; font-size: 1.1rem; position: relative } .akt.sehr small { position: absolute; top: -4px; right: -4px; background: #fff; color: var(--violett); border-radius: 999px; font-size: .7rem; padding: 1px 6px }
.tasten { text-align: center } @media (pointer: coarse) { .tasten { display: none } }
.leer { text-align: center; padding: 60px 20px; background: var(--pflaume); border-radius: 26px }
.grund { position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%); background: var(--pflaume-hell); border-radius: 999px; padding: 10px 14px; display: flex; gap: 6px; align-items: center; flex-wrap: wrap; box-shadow: 0 10px 30px rgba(0,0,0,.4); z-index: 5 } .grund button { padding: 6px 12px; font-size: .85rem; background: var(--nacht); color: var(--milch) } .grund span { font-size: .9rem; margin-right: 4px }
.dialog { position: fixed; inset: 0; background: rgba(22,10,28,.8); display: grid; place-items: center; z-index: 10; padding: 20px } .dialog-karte { background: var(--pflaume); border-radius: 22px; padding: 26px; max-width: 420px; width: 100% } .dialog-karte h3 { margin-top: 0 } .dialog-karte textarea { background: var(--nacht) }
.match-karte { text-align: center } .match-karte h3 { font-size: 2rem; background: var(--verlauf); -webkit-background-clip: text; background-clip: text; color: transparent } .match-fotos { display: flex; justify-content: center; gap: -10px; margin: 10px 0 } .match-fotos img { width: 120px; height: 150px; object-fit: cover; border-radius: 20px; border: 4px solid var(--pflaume); background: var(--nacht) } .match-fotos img:last-child { margin-left: -24px }
.sehr-liste { display: flex; gap: 12px; overflow-x: auto; padding-bottom: 8px; margin-bottom: 18px } .sehr-karte { flex: 0 0 300px; display: flex; gap: 12px; background: var(--pflaume); border-radius: 18px; padding: 12px; outline: 2px solid var(--violett) } .sehr-karte img { width: 84px; height: 108px; object-fit: cover; border-radius: 12px; background: var(--nacht) } .sehr-karte .nachricht { margin: 4px 0 } .sehr-knoepfe { display: flex; gap: 6px; margin: 4px 0 0 }
.matches { display: grid; gap: 10px } .match-zeile { display: flex; gap: 14px; align-items: center; background: var(--pflaume); border-radius: 18px; padding: 12px } .match-zeile img { width: 72px; height: 90px; object-fit: cover; border-radius: 12px; background: var(--nacht) } .mz-text { flex: 1 } .mz-text p { margin: 4px 0 0 }

/* Chat */
.matches .match-zeile { width: 100%; text-align: left; font: inherit; color: inherit; cursor: pointer; border: 0; position: relative } .match-zeile.aktiv { outline: 2px solid var(--korall) } .match-zeile .letzte { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px }
.ungelesen { position: absolute; right: 12px; top: 12px; background: var(--korall); color: #fff; border-radius: 999px; font-size: .75rem; font-weight: 700; padding: 2px 8px }
.chat-panel { display: flex; flex-direction: column; background: var(--pflaume); border-radius: 22px; overflow: hidden; min-height: 60vh; max-height: 80vh }
.chat-kopf { display: flex; gap: 12px; align-items: center; padding: 12px 16px; border-bottom: 1px solid var(--linie) } .chat-kopf img { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; background: var(--nacht) } .chat-kopf > div:not(.chat-menu) { flex: 1 }
.chat-menu { display: flex; gap: 6px } .chat-menu button { padding: 6px 10px; font-size: .85rem } .chat-menu button.an { background: var(--verlauf); color: #fff } .zurueck { display: none; padding: 6px 12px; font-size: 1.3rem }
.chat-optionen { display: flex; gap: 6px; flex-wrap: wrap; padding: 8px 16px; border-bottom: 1px solid var(--linie) } .chat-optionen button { padding: 6px 10px; font-size: .82rem }
.chat-hinweise { margin: 12px 16px 0; padding: 12px 14px; background: var(--nacht); border-radius: 14px; font-size: .9rem } .chat-hinweise p { margin: 2px 0; color: var(--nebel) }
.chat-nachrichten { flex: 1; overflow-y: auto; padding: 14px 16px; display: flex; flex-direction: column; gap: 8px }
.nachricht { max-width: 78%; padding: 10px 14px; border-radius: 18px; position: relative } .nachricht.ich { align-self: flex-end; background: var(--verlauf); color: #fff; border-bottom-right-radius: 6px } .nachricht.du { align-self: flex-start; background: var(--pflaume-hell); border-bottom-left-radius: 6px }
.nachricht .text { white-space: pre-wrap; word-break: break-word } .nachricht .zeit { font-size: .72rem; opacity: .7; margin-top: 4px } .nachricht .uebersetzung { margin-top: 6px; padding-top: 6px; border-top: 1px dashed rgba(255,255,255,.3); font-style: italic; color: var(--nebel) } .nachricht .leise-link { font-size: .78rem; margin-top: 4px }
.sicherheits-hinweis { margin-top: 8px; padding: 8px 10px; border-radius: 10px; background: #3b2a12; color: #ffe2a8; font-size: .82rem }
.chat-form { display: grid; grid-template-columns: 1fr auto; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--linie) } .chat-form textarea { resize: none; background: var(--nacht); min-height: 44px } .chat-form button { align-self: end }
#chat-sperre { padding: 12px 16px; margin: 0 } blockquote { margin: 10px 0; padding: 10px 14px; border-left: 3px solid var(--korall); background: var(--nacht); border-radius: 0 10px 10px 0 }

/* Landingpage & Rechtliches */
/* 13.10.: Sprachauswahl als Dropdown (_sprachwahl.html) — Flagge + Name in der eigenen Sprache; nur Farb-Tokens */
.sprachwahl { position: relative; margin-left: 6px; flex: 0 0 auto }
.sprachwahl > summary { list-style: none; display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 4px 10px; border: 1px solid var(--linie); border-radius: 999px; color: var(--nebel); font-size: .82rem; font-weight: 600; cursor: pointer; user-select: none }
.sprachwahl > summary::-webkit-details-marker { display: none }
.sprachwahl > summary:hover, .sprachwahl[open] > summary { color: var(--milch); border-color: var(--nebel) }
.sprachwahl > summary:focus-visible, .sprachwahl .sw-liste a:focus-visible { outline: 2px solid var(--korall); outline-offset: 2px }
.sprachwahl .sw-name { display: none }
.sprachwahl .sw-pfeil { width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 5px solid currentColor; transition: transform .15s }
.sprachwahl[open] .sw-pfeil { transform: rotate(180deg) }
.sw-flagge { flex: 0 0 auto; border-radius: 2px; box-shadow: 0 0 0 1px var(--linie) }
.sprachwahl .sw-liste { position: absolute; right: 0; top: calc(100% + 6px); z-index: 60; margin: 0; padding: 6px; list-style: none; min-width: 190px; max-height: min(70vh, 420px); overflow-y: auto; background: var(--nacht); border: 1px solid var(--linie); border-radius: var(--radius-klein); box-shadow: 0 12px 32px rgba(0,0,0,.35) }
.sprachwahl .sw-liste a { display: flex; align-items: center; gap: 10px; min-height: 40px; padding: 8px 10px; border-radius: 8px; color: var(--milch); text-decoration: none; font-size: .95rem; font-weight: 600 }
.sprachwahl .sw-liste a:hover { background: var(--pflaume-hell) }
.sprachwahl .sw-liste a.aktiv { background: var(--pflaume-hell); color: var(--korall-schrift) }
.sprachwahl .sw-liste a.aktiv::after { content: "\2713"; margin-left: auto }
.sprachwahl.gross { margin-left: 0 } .sprachwahl.gross > summary { font-size: .95rem; padding: 8px 14px } .sprachwahl.gross .sw-name { display: inline } .sprachwahl.gross .sw-code { display: none } .sprachwahl.gross .sw-liste { left: 0; right: auto }
.ki-block h2, .preis-teaser h2, .sicherheit-block h2, .zwei-karten h2 { margin-top: 1.4em }
.ki-spalten { display: grid; grid-template-columns: 1fr 1fr; gap: 16px } .ki-spalte { background: var(--pflaume); border-radius: 22px; padding: 22px 24px } .ki-spalte h3 { margin: 0 0 10px } .ki-spalte ul { margin: 0; padding-left: 1.2em; color: var(--nebel) } .ki-spalte li { margin: 6px 0 } .ki-spalte.macht h3 { color: var(--minze-schrift) } .ki-spalte.nicht h3 { color: var(--korall-schrift) }
.preis-teaser { text-align: center } .preis-teaser .hero-text { margin: 0 auto 10px } .paket-preis { font-size: 1.9rem }
.zwei-karten { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 30px } .karte.gross { padding: 26px 28px; margin: 0 } .karte.gross h2 { margin-top: 0 }
.store-badges { display: flex; gap: 10px; flex-wrap: wrap } .store-badge { display: inline-block; padding: 10px 16px; border-radius: 12px; background: var(--nacht); color: var(--nebel); font-weight: 600; font-size: .9rem }
.recht { max-width: 760px; margin: 0 auto } .recht h1 { margin-top: 0 } .recht h2 { font-size: 1.15rem; margin: 1.6em 0 .4em } .recht li { margin: 6px 0 } .recht p, .recht li { color: var(--nebel) } .recht b { color: var(--milch) } .entwurf { background: #3b2a12; color: #ffe2a8; padding: 8px 12px; border-radius: 10px }
@media (max-width: 760px) { .ki-spalten, .zwei-karten { grid-template-columns: 1fr } }
.start-partner { margin-top: 30px; text-align: center } .start-partner p { max-width: 640px; margin-left: auto; margin-right: auto }   /* 16.10.: «Du hast einen Betrieb?» -> /partner */

.frei-text { max-width: 36em; margin: 8px 0 6px } .frei-balken { display: grid; gap: 6px; max-width: 360px } .frei-balken div { height: 6px; border-radius: 3px; background: var(--pflaume-hell); overflow: hidden } .frei-balken i { display: block; height: 100%; background: var(--verlauf) }
.frei-zaehler { font-size: 1.3rem; margin: 10px 0 } .frei-zaehler b { font-size: 1.8rem; background: var(--verlauf); -webkit-background-clip: text; background-clip: text; color: transparent }

/* ===== Design-Durchgang 14.09.: Hero mit Telefon und Kartenstapel ===== */
.hero { position: relative; grid-template-columns: 1.1fr 1fr; gap: 48px; padding: 36px 0 56px; overflow: visible }
@media (min-width: 901px) {
  .hero { grid-template-areas: "titel telefon" "text telefon"; grid-template-rows: auto auto; align-items: center; row-gap: 12px }
  .hero > h1 { grid-area: titel; align-self: end } .hero-text-block { grid-area: text; align-self: start } .telefon-buehne { grid-area: telefon }
}
.hero-glut { position: absolute; inset: -120px -200px auto -200px; height: 620px; pointer-events: none; z-index: -1;
  background: radial-gradient(600px 380px at 20% 30%, rgba(255,79,122,.28), transparent 70%), radial-gradient(520px 360px at 78% 45%, rgba(139,61,255,.32), transparent 70%); filter: blur(10px) }
.hero-text-block { max-width: 34em } .hero h1 { font-size: clamp(2.6rem, 5.8vw, 4.4rem); line-height: 1.02; margin: 0 0 18px }
.knopf.gross { padding: 15px 26px; font-size: 1.05rem } .knopf.gross:not(.leise) { box-shadow: 0 12px 30px rgba(255,79,122,.35) }
.telefon-buehne { position: relative; justify-self: center; width: 320px; height: 640px }
.telefon { position: relative; width: 320px; height: 640px; border-radius: 48px; background: #0d0512; border: 8px solid #2a1838; box-shadow: 0 40px 90px rgba(0,0,0,.6), inset 0 0 0 1px rgba(255,255,255,.06); padding: 54px 14px 20px; display: flex; flex-direction: column; animation: schweben 7s ease-in-out infinite }
.telefon-kerbe { position: absolute; top: 14px; left: 50%; transform: translateX(-50%); width: 110px; height: 28px; border-radius: 16px; background: #000 }
.stapel { position: relative; flex: 1 }
.mkarte { position: absolute; inset: 0; border-radius: 26px; overflow: hidden; background: var(--pflaume); box-shadow: 0 18px 40px rgba(0,0,0,.45) }
.mkarte.hinten1 { transform: translateY(12px) scale(.96) rotate(-2deg); opacity: .8 } .mkarte.hinten2 { transform: translateY(24px) scale(.92) rotate(2deg); opacity: .55 }
/* Durchlauf: jede Karte wandert vorne -> weggewischt -> versteckt -> hinten2 -> hinten1 -> vorne. Vier Karten, 16 s Runde,
   je 4 s vorne; die Verzoegerung ist negativ, damit beim Laden schon der ganze Stapel steht (kein leerer erster Moment). */
.stapel.lauf .mkarte { animation: durchlauf-ja 16s cubic-bezier(.4,0,.2,1) infinite; will-change: transform, opacity }
/* Je Karte die Geste, die ihr Stempel zeigt — sonst stimmt das Bild nicht mit sich selbst überein. */
.stapel.lauf .k2 { animation-name: durchlauf-nein }
.stapel.lauf .k3 { animation-name: durchlauf-sehr }
.stapel.lauf .k1 { animation-delay: 0s } .stapel.lauf .k2 { animation-delay: -12s } .stapel.lauf .k3 { animation-delay: -8s } .stapel.lauf .k4 { animation-delay: -4s }
.stapel.lauf .mstempel { animation: stempel-lauf 16s ease-in-out infinite }
.stapel.lauf .k1 .mstempel { animation-delay: 0s } .stapel.lauf .k2 .mstempel { animation-delay: -12s } .stapel.lauf .k3 .mstempel { animation-delay: -8s } .stapel.lauf .k4 .mstempel { animation-delay: -4s }
/* Drei Gesten statt einer (Owner 27.09.: «das Wischen sollte auch mal nach rechts gehen oder nach
   oben, und eben mit dem X oder ein Herz oder zwei Herzen, wie es dann richtig ist»).

   Vorher flogen alle vier Karten nach LINKS und stempelten dabei ein HERZ. Links ist in jeder App die
   Absage — die Attrappe zeigte also in jedem Durchlauf das Gegenteil von dem, was sie behauptete.

   Die Richtungen sind die echten, aus `entdecken.js` nachgelesen (`geste()`), nicht ausgedacht:
     dx >  110  -> ja    = nach rechts, ein Herz
     dx < -110  -> nein  = nach links,  ✕
     dy < -130  -> sehr  = nach oben,   zwei Herzen
   Wenn die Vorschau etwas anderes zeigt als die App tut, lernt der Besucher die falsche Geste — und
   merkt es erst, wenn er sie zum ersten Mal wirklich braucht.

   Nur der Weg HINAUS unterscheidet sich; der Rest des Durchlaufs (nach hinten, wieder nach vorn) ist
   in allen drei gleich. Darum drei fast gleiche Sätze statt einer Variablen: CSS kann Keyframes nicht
   teilweise überschreiben, und drei lesbare Sätze sind besser als ein Trick, den niemand mehr versteht. */
@keyframes durchlauf-nein {
  0%, 20%   { transform: translate(0,0) scale(1) rotate(0); opacity: 1; z-index: 3 }
  24%       { transform: translate(-130%, -30px) scale(.95) rotate(-16deg); opacity: 0; z-index: 4 }
  24.5%     { transform: translateY(34px) scale(.88) rotate(3deg); opacity: 0; z-index: 0 }
  45%       { transform: translateY(34px) scale(.88) rotate(3deg); opacity: 0; z-index: 0 }
  50%, 70%  { transform: translateY(24px) scale(.92) rotate(2deg); opacity: .55; z-index: 1 }
  75%, 95%  { transform: translateY(12px) scale(.96) rotate(-2deg); opacity: .8; z-index: 2 }
  100%      { transform: translate(0,0) scale(1) rotate(0); opacity: 1; z-index: 3 }
}
@keyframes durchlauf-ja {
  0%, 20%   { transform: translate(0,0) scale(1) rotate(0); opacity: 1; z-index: 3 }
  24%       { transform: translate(130%, -30px) scale(.95) rotate(16deg); opacity: 0; z-index: 4 }
  24.5%     { transform: translateY(34px) scale(.88) rotate(3deg); opacity: 0; z-index: 0 }
  45%       { transform: translateY(34px) scale(.88) rotate(3deg); opacity: 0; z-index: 0 }
  50%, 70%  { transform: translateY(24px) scale(.92) rotate(2deg); opacity: .55; z-index: 1 }
  75%, 95%  { transform: translateY(12px) scale(.96) rotate(-2deg); opacity: .8; z-index: 2 }
  100%      { transform: translate(0,0) scale(1) rotate(0); opacity: 1; z-index: 3 }
}
@keyframes durchlauf-sehr {
  0%, 20%   { transform: translate(0,0) scale(1) rotate(0); opacity: 1; z-index: 3 }
  24%       { transform: translate(0, -150%) scale(.95) rotate(0); opacity: 0; z-index: 4 }
  24.5%     { transform: translateY(34px) scale(.88) rotate(3deg); opacity: 0; z-index: 0 }
  45%       { transform: translateY(34px) scale(.88) rotate(3deg); opacity: 0; z-index: 0 }
  50%, 70%  { transform: translateY(24px) scale(.92) rotate(2deg); opacity: .55; z-index: 1 }
  75%, 95%  { transform: translateY(12px) scale(.96) rotate(-2deg); opacity: .8; z-index: 2 }
  100%      { transform: translate(0,0) scale(1) rotate(0); opacity: 1; z-index: 3 }
}
@keyframes stempel-lauf { 0%, 11% { opacity: 0 } 14%, 20% { opacity: 1 } 23%, 100% { opacity: 0 } }
/* MEE sagt zu jeder Karte etwas anderes — dieselbe Runde, dieselben Verzoegerungen */
.mee-saetze { display: grid } .mee-satz { grid-area: 1 / 1; margin: 2px 0 0; font-size: .86rem; line-height: 1.35; animation: satz-lauf 16s ease-in-out infinite }
.mee-satz.s1 { animation-delay: 0s } .mee-satz.s2 { animation-delay: -12s } .mee-satz.s3 { animation-delay: -8s } .mee-satz.s4 { animation-delay: -4s }
@keyframes satz-lauf { 0%, 20% { opacity: 1 } 23%, 97% { opacity: 0 } 100% { opacity: 1 } }
.mfoto { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block } .mfoto::after { content: ""; position: absolute; inset: 0; background: radial-gradient(120px 140px at 50% 38%, rgba(255,255,255,.28), transparent 70%) }
.f1 { background: linear-gradient(160deg, #f6b19c 0%, #c86a8f 45%, #4a2a6e 100%) } .f2 { background: linear-gradient(160deg, #9fd8ff 0%, #6b7fe8 50%, #2a1a5e 100%) } .f3 { background: linear-gradient(160deg, #ffd68a 0%, #ff8a5c 50%, #5a2050 100%) } .f4 { background: linear-gradient(160deg, #bff3d8 0%, #4fb8a8 45%, #23324f 100%) }
.mpille { position: absolute; top: 14px; left: 14px; background: rgba(22,10,28,.62); border: 1px solid rgba(255,255,255,.14); backdrop-filter: blur(6px); color: #fff; font-size: .78rem; padding: 6px 11px; border-radius: 999px } .mpille b { font-size: 1rem; color: var(--korall-schrift) }
.mstempel { position: absolute; top: 60px; left: 18px; color: var(--minze-schrift); border: 4px solid var(--minze); border-radius: 12px; font-size: 1.6rem; font-weight: 800; padding: 2px 14px; transform: rotate(-12deg); opacity: 0; animation: stempel 7s ease-in-out infinite }
/* Der Stempel steht auf der Seite, von der die Karte wegfliegt — so, wie es jede App macht:
   das Urteil erscheint dort, wo die Hand herkommt, nicht dort, wo die Karte hinwill. */
.mstempel.nein { left: auto; right: 18px; color: var(--korall-schrift); border-color: var(--korall); transform: rotate(12deg) }
.mstempel.sehr { left: 50%; right: auto; top: 40px; transform: translateX(-50%) rotate(0); color: var(--violett); border-color: var(--violett); letter-spacing: -.08em }
.munten { position: absolute; left: 0; right: 0; bottom: 0; padding: 70px 16px 16px; background: linear-gradient(transparent, rgba(22,10,28,.6) 40%, rgba(22,10,28,.96)); color: #fff; display: grid; gap: 2px } .munten b { font-size: 1.35rem } .munten i { font-style: normal; color: var(--minze-schrift); font-size: .9rem } .munten span { font-size: .82rem; color: #e8dcf0 }
.maktionen { display: flex; justify-content: center; gap: 16px; padding: 16px 0 6px } .ma { width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center; font-weight: 800; color: #fff; font-size: 1.2rem }
.ma.nein { background: var(--pflaume-hell); color: #ff6b6b } .ma.sehr { background: var(--violett); font-size: .9rem; box-shadow: 0 8px 20px rgba(139,61,255,.45) } .ma.ja { background: var(--verlauf); width: 60px; height: 60px; box-shadow: 0 10px 24px rgba(255,79,122,.45) }
.mtabs { display: flex; justify-content: space-around; padding: 6px 30px 0 } .mtabs i { width: 22px; height: 4px; border-radius: 2px; background: #3a2750 } .mtabs i.an { background: var(--korall) }
.karten-hinweis { color: var(--nebel); font-size: .72rem; line-height: 1.35; text-align: center; max-width: 30em; margin: 12px auto 0 }
.mee-blase { position: absolute; right: -90px; top: 150px; width: 250px; display: flex; gap: 10px; background: var(--pflaume); border: 1px solid rgba(255,255,255,.08); border-radius: 18px; padding: 12px; box-shadow: 0 20px 50px rgba(0,0,0,.5); animation: schweben 7s ease-in-out infinite reverse }
.mee-blase .mee-avatar { flex: 0 0 34px; width: 34px; height: 34px; font-size: 1rem } .mee-blase b { display: block; font-size: .8rem; color: var(--nebel) } .mee-blase p { margin: 2px 0 0; font-size: .86rem; line-height: 1.35 }
@keyframes schweben { 0%, 100% { transform: translateY(0) } 50% { transform: translateY(-12px) } }
@keyframes stempel { 0%, 55% { opacity: 0 } 62%, 78% { opacity: 1 } 85%, 100% { opacity: 0 } }
@media (prefers-reduced-motion: reduce) {
  .telefon, .mee-blase, .mstempel { animation: none } .mstempel { opacity: 0 }
  .stapel.lauf .mkarte, .mee-satz { animation: none }
  .stapel.lauf .k1 { transform: none; opacity: 1; z-index: 3 } .stapel.lauf .k2 { transform: translateY(12px) scale(.96) rotate(-2deg); opacity: .8; z-index: 2 }
  .stapel.lauf .k3 { transform: translateY(24px) scale(.92) rotate(2deg); opacity: .55; z-index: 1 } .stapel.lauf .k4 { opacity: 0 }
  .mee-satz { opacity: 0 } .mee-satz.s1 { opacity: 1 }
}
@media (max-width: 900px) {
  .hero { grid-template-columns: 1fr; gap: 14px; padding: 14px 0 30px }
  .hero h1 { font-size: clamp(2rem, 8.4vw, 2.7rem); margin: 0 0 6px }
  .telefon-buehne, .telefon { width: min(72vw, 300px); height: min(144vw, 600px) }
  .telefon-buehne { margin-top: 0 } .telefon { border-radius: 42px; padding: 46px 11px 14px }
  .mee-blase { position: static; width: auto; max-width: 340px; margin: 12px auto 0; animation: none }
  .telefon-buehne { height: auto; display: grid; justify-items: center }
  .telefon { flex: 0 0 auto }
  .munten b { font-size: 1.15rem } .munten span { font-size: .78rem }
}
/* Versprechen als Liste, Sicherheit mit Icons */
.versprechen-liste { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 6px 40px }
.versprechen-liste li { display: flex; gap: 14px; padding: 14px 0; border-bottom: 1px solid var(--linie) } .versprechen-liste b { display: block; margin-bottom: 3px } .versprechen-liste p { margin: 0; color: var(--nebel) }
.haken { flex: 0 0 28px; width: 28px; height: 28px; border-radius: 50%; background: rgba(107,255,176,.14); color: var(--minze-schrift); display: grid; place-items: center; font-weight: 800; margin-top: 2px }
.sicherheit-raster { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px }
.sicher { background: var(--pflaume); border: 1px solid rgba(255,255,255,.05); border-radius: 18px; padding: 20px } .sicher-icon { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 12px; background: rgba(255,79,122,.14); color: var(--korall-schrift); font-size: 1.2rem; margin-bottom: 12px } .sicher b { display: block; margin-bottom: 4px } .sicher p { margin: 0; color: var(--nebel); font-size: .875rem }
@media (max-width: 760px) { .versprechen-liste { grid-template-columns: 1fr } }
h2 { font-size: clamp(1.2rem, 1.8vw, 1.45rem); letter-spacing: -0.02em }

/* ===== Entdecken als App-Layout (14.09.): Matches links, Karte oder Chat rechts ===== */
#entdecken { display: grid; grid-template-columns: 340px minmax(0, 1fr); gap: 22px; align-items: start }
#entdecken .tabs { display: none }
.seitenleiste { background: var(--pflaume); border-radius: 24px; padding: 16px 12px; position: sticky; top: 84px; min-height: calc(100vh - 130px); max-height: calc(100vh - 110px); overflow-y: auto; border: 1px solid rgba(255,255,255,.05) }
.seite-kopf { display: flex; justify-content: space-between; align-items: baseline; padding: 4px 8px 12px } .seite-kopf h2 { margin: 0; font-size: 1.25rem }
.leer-hinweis { padding: 8px 10px }
.matches { gap: 4px } .matches .match-zeile { background: transparent; border-radius: 16px; padding: 10px } .matches .match-zeile:hover { background: var(--pflaume-hell) } .match-zeile.aktiv { outline: 0; background: var(--pflaume-hell) }
.match-zeile img { width: 56px; height: 56px; border-radius: 50%; flex: 0 0 56px } .match-zeile.neu img { outline: 3px solid transparent; box-shadow: 0 0 0 2px var(--nacht), 0 0 0 4px var(--korall) }
.match-zeile .mz-text b { font-size: .98rem } .match-zeile .letzte { max-width: 190px; margin-top: 2px }
.haupt { min-width: 0 }
.haupt-kopf { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 10px } .haupt-kopf h2 { margin: 0; font-size: 1.25rem }
#tab-fuer-dich .stapel-huelle { max-width: 440px } .stapel { height: min(68vh, 640px) }
#entdecken.chat-offen #tab-fuer-dich { display: none } #entdecken:not(.chat-offen) #tab-matches { display: none }
.chat-panel { min-height: calc(100vh - 130px); max-height: calc(100vh - 110px); border: 1px solid rgba(255,255,255,.05) }
.chat-kopf img { width: 46px; height: 46px; box-shadow: 0 0 0 2px var(--pflaume), 0 0 0 4px var(--korall) }
.mee-knopf { display: inline-flex; align-items: center; gap: 6px; border: 1px solid rgba(139,61,255,.45) !important } .mee-knopf i { font-style: normal; width: 18px; height: 18px; border-radius: 50%; background: var(--violett); color: #fff; font-size: .7rem; font-weight: 800; display: grid; place-items: center }
.chat-form { grid-template-columns: 1fr 46px; align-items: end } .chat-form textarea { border-radius: 22px; padding: 11px 16px } .chat-form .senden { width: 46px; height: 46px; border-radius: 50%; padding: 0; display: grid; place-items: center; font-size: 1.05rem; background: var(--verlauf); color: #fff; box-shadow: 0 8px 20px rgba(255,79,122,.35) }
.nachricht.ich { box-shadow: 0 6px 18px rgba(255,79,122,.25) }
@media (max-width: 999px) {
  #entdecken { display: block } #entdecken .tabs { display: flex }
  .seitenleiste { position: static; max-height: none; background: transparent; border: 0; padding: 0 }
  #entdecken[data-ansicht="fuer-dich"] .seitenleiste, #entdecken[data-ansicht="fuer-dich"] #tab-matches { display: none }
  #entdecken[data-ansicht="matches"] #tab-fuer-dich { display: none }
  #entdecken[data-ansicht="matches"].chat-offen .seitenleiste { display: none }
  .zurueck { display: inline-block } .chat-panel { max-height: none; min-height: 70vh }
  .seite-kopf { display: none } .matches .match-zeile { background: var(--pflaume) }
}
#sehr-block { max-width: 440px; margin: 0 auto 18px } #sehr-block h2 { font-size: 1.05rem; margin: 0 0 8px; color: var(--nebel); letter-spacing: 0 }
.sehr-liste { margin-bottom: 0 } .sehr-karte { flex: 0 0 100%; outline: 0; border: 1px solid rgba(139,61,255,.5); box-shadow: 0 10px 30px rgba(139,61,255,.15) } .sehr-karte b + span { margin-left: 6px; color: var(--nebel); font-weight: 400 } .sehr-karte img { width: 70px; height: 88px }
.seite-link { display: flex; gap: 12px; align-items: center; width: 100%; text-align: left; font: inherit; color: inherit; background: transparent; border: 0; border-radius: 16px; padding: 10px; margin-bottom: 10px; cursor: pointer; line-height: 1.3 } .seite-link:hover { background: var(--pflaume-hell) } .seite-link.aktiv { background: var(--pflaume-hell) }
.sl-icon { width: 56px; height: 56px; border-radius: 50%; background: var(--verlauf); color: #fff; display: grid; place-items: center; font-size: 1.4rem; flex: 0 0 56px; box-shadow: 0 8px 20px rgba(255,79,122,.3) }
.mz-text b + span.klein { margin-left: 6px }
@media (max-width: 999px) { .seite-link { display: none } }
/* Kopf auf dem Handy: eine Zeile, seitlich wischbar statt dreizeilig */
@media (max-width: 760px) { .kopf { flex-direction: column; align-items: stretch; gap: 8px; padding: 12px 16px 6px } nav { flex-wrap: nowrap; overflow-x: auto; gap: 18px; padding-bottom: 6px; scrollbar-width: none; -webkit-overflow-scrolling: touch } nav::-webkit-scrollbar { display: none } nav a { flex: 0 0 auto } nav a.dev { display: none } .sprachwahl { flex: 0 0 auto } }
.chat-kopf > div:not(.chat-menu) { flex: 1 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.3 }
@media (max-width: 760px) { .chat-kopf { gap: 8px; padding: 10px 12px } .chat-menu button { padding: 6px 8px } .mee-knopf { padding: 6px 10px !important } }
/* ===== MEE Support-Widget (Baustein 12 Stufe 1) ===== */
.mee-knopf-schwebend { position: fixed; right: 20px; bottom: 20px; z-index: 40; display: flex; align-items: center; gap: 8px; padding: 8px 16px 8px 8px; border-radius: 999px; background: var(--pflaume); border: 1px solid rgba(139,61,255,.5); color: var(--milch); font: inherit; font-weight: 700; cursor: pointer; box-shadow: 0 14px 40px rgba(0,0,0,.45), 0 0 0 0 rgba(139,61,255,.4); animation: mee-puls 3s ease-out infinite }
.mee-knopf-schwebend .mee-avatar { width: 34px; height: 34px; flex-basis: 34px; font-size: .95rem }
@keyframes mee-puls { 0% { box-shadow: 0 14px 40px rgba(0,0,0,.45), 0 0 0 0 rgba(139,61,255,.45) } 70% { box-shadow: 0 14px 40px rgba(0,0,0,.45), 0 0 0 14px rgba(139,61,255,0) } 100% { box-shadow: 0 14px 40px rgba(0,0,0,.45), 0 0 0 0 rgba(139,61,255,0) } }
@media (prefers-reduced-motion: reduce) { .mee-knopf-schwebend { animation: none } }
.mee-panel { position: fixed; right: 20px; bottom: 20px; z-index: 41; width: min(380px, calc(100vw - 24px)); height: min(560px, calc(100vh - 40px)); display: flex; flex-direction: column; background: var(--pflaume); border-radius: 22px; border: 1px solid rgba(255,255,255,.06); box-shadow: 0 30px 80px rgba(0,0,0,.6); overflow: hidden }
.mee-panel-kopf { display: flex; align-items: center; gap: 10px; padding: 12px 12px 12px 14px; border-bottom: 1px solid var(--linie) } .mee-panel-kopf .mee-avatar { width: 36px; height: 36px; flex-basis: 36px; font-size: 1rem } .mee-panel-kopf b { flex: 1; font-size: .95rem } .mee-zu { padding: 6px 10px }
.mee-verlauf { flex: 1; overflow-y: auto; padding: 14px; display: flex; flex-direction: column; gap: 8px }
.mee-msg { max-width: 85%; padding: 10px 14px; border-radius: 18px; font-size: .95rem; line-height: 1.45; white-space: pre-wrap } .mee-msg.mee { align-self: flex-start; background: var(--nacht); border-bottom-left-radius: 6px } .mee-msg.du { align-self: flex-end; background: var(--verlauf); color: #fff; border-bottom-right-radius: 6px } .mee-msg.warte { color: var(--nebel); font-style: italic }
.mee-aktion { align-self: flex-start; padding: 8px 14px; font-size: .9rem; border-radius: 999px; background: transparent; color: var(--milch); border: 1px solid rgba(139,61,255,.6) } .mee-aktion:hover { background: var(--pflaume-hell) }
.mee-hinweis { margin: 0; padding: 6px 14px; color: var(--nebel) }
.mee-form { display: grid; grid-template-columns: 1fr 42px 42px; gap: 8px; padding: 10px 12px; border-top: 1px solid var(--linie) } .mee-form input { background: var(--nacht); border-radius: 999px; padding: 10px 14px } .mee-form button { width: 42px; height: 42px; border-radius: 50%; padding: 0; display: grid; place-items: center; background: var(--verlauf); color: #fff }
@media (max-width: 760px) { .mee-knopf-schwebend { right: 14px; bottom: 14px } .mee-panel { right: 12px; bottom: 12px } }
/* Profil-Abschnitte zum Aufklappen */
.schritt > .klapp { cursor: pointer; position: relative; padding-right: 36px; user-select: none } .schritt > .klapp::after { content: ""; position: absolute; right: 4px; top: 50%; width: 10px; height: 10px; border-right: 2px solid var(--nebel); border-bottom: 2px solid var(--nebel); transform: translateY(-70%) rotate(45deg); transition: transform .2s }
.schritt.zu > .klapp::after { transform: translateY(-30%) rotate(-45deg) } .schritt.zu > *:not(.klapp) { display: none } .schritt.zu { padding: 18px 28px } .schritt.zu > h2 { margin: 0 } .schritt.zu > .mee-kopf { margin: 0 } .schritt.zu > .mee-kopf p { display: none }
@media (max-width: 760px) { .schritt.zu { padding: 16px 18px } }
.mee-mikro { width: 44px; height: 44px; border-radius: 50%; padding: 0; display: grid; place-items: center; background: linear-gradient(135deg, var(--korall), var(--violett)) !important; color: #fff; border: 2px solid rgba(255,255,255,.35) } .mee-mikro::before { width: 22px; height: 22px } .mee-mikro.an { background: var(--rot) !important } .mee-ton { padding: 6px 8px } .mee-ton.an { background: var(--pflaume-hell) }

/* ===== Volle Breite, fliessend (Owner 15.09.): der Inhalt nutzt den Bildschirm, Textzeilen bleiben lesbar (max. ~70 Zeichen) ===== */
.inhalt, body.breit .inhalt { max-width: 1680px; padding: 24px clamp(16px, 3.5vw, 64px) 60px }
.kopf { padding: 14px clamp(16px, 3.5vw, 64px) }
/* Formularseiten: das Formular mittig und schmal, die Seite bleibt breit */
.formular { max-width: 640px } .inhalt > .formular, .inhalt > form.formular { margin-left: auto; margin-right: auto }
/* Landingpage: Hero fuellt die Breite, Telefon rechts, Fliesstext begrenzt */
.hero { grid-template-columns: minmax(0, 1.25fr) minmax(320px, .9fr); gap: clamp(24px, 4vw, 80px); min-height: min(78vh, 760px) }
.hero-text-block { max-width: 40em } .hero h1 { font-size: clamp(2.6rem, 5vw, 5.2rem) } /* 26.09.: Vorspann war 16,6 px gegen 16 px Fliesstext — kein Unterschied, den ein Auge als
   Stufe liest, aber genug, damit die Seite unruhig wirkt. Jetzt eine echte Stufe. */
.hero-text { font-size: 1.125rem; max-width: 34em }
@media (min-width: 1400px) { .telefon-buehne, .telefon { width: 360px; height: 720px } .telefon { border-radius: 54px } }
.versprechen-liste { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 6px clamp(24px, 3vw, 64px) }
.sicherheit-raster { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: clamp(12px, 1.5vw, 24px) }
.pakete { max-width: none } .paket { padding: clamp(22px, 2.4vw, 36px) clamp(18px, 2vw, 30px) }
.zwei-karten, .zwei { grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)) }
/* Entdecken: Seitenleiste waechst mit, Buehne bleibt mittig, Karte darf groesser werden */
#entdecken { grid-template-columns: clamp(320px, 22vw, 420px) minmax(0, 1fr); gap: clamp(20px, 2.5vw, 40px) }
#tab-fuer-dich .stapel-huelle { max-width: clamp(420px, 30vw, 520px) } .stapel { height: min(72vh, 760px) }
.chat-panel { max-width: 1100px; margin: 0 auto; width: 100% }
/* Profil: Abschnitte zweispaltig auf breiten Schirmen */
@media (min-width: 1200px) { #profil .schritt .formular { max-width: none } #profil .formular { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); column-gap: 32px } #profil .formular > .zeile, #profil .formular > button, #profil .formular > .chips, #profil .formular > h3, #profil .formular > p { grid-column: 1 / -1 } }
h2 { font-size: clamp(1.2rem, 1.6vw, 1.45rem) } p, li { max-width: 72ch }   /* 17.10.2026 (Owner: «grössere Schrift wegnehmen» — h2 war bis 36 px): Titel 19–23 px */
.fuss { padding: 30px clamp(16px, 3.5vw, 64px) }
.buehne { grid-template-columns: minmax(0, 1.1fr) minmax(360px, 560px); gap: clamp(32px, 5vw, 96px); align-items: center; min-height: 70vh } .buehne-form { background: var(--pflaume); border-radius: 26px; padding: clamp(22px, 2.5vw, 40px) } .buehne-form .formular { max-width: none }
@media (max-width: 900px) { .buehne { grid-template-columns: 1fr; min-height: 0 } }

/* Tagesfrage, Match des Tages, Nachfasser, Quiz (15.09.) */
.tagesfrage { display: flex; gap: 12px; align-items: flex-start; background: var(--pflaume); border: 1px solid rgba(139,61,255,.35); border-radius: 18px; padding: 12px 14px; margin-bottom: 14px } .tagesfrage b { display: block; margin-bottom: 8px } .tf-optionen { display: flex; gap: 8px }
.tf-avatar { flex: 0 0 30px; width: 30px; height: 30px; border-radius: 50%; background: var(--verlauf); color: #fff; font-weight: 800; display: grid; place-items: center; font-size: .85rem }
.tages-pille { position: absolute; top: 22px; right: 14px; background: var(--verlauf); color: #fff; font-weight: 800; font-size: .78rem; padding: 6px 12px; border-radius: 999px; box-shadow: 0 8px 20px rgba(255,79,122,.35) }
.ktf { display: inline-block; background: rgba(139,61,255,.4); border-radius: 999px; padding: 4px 10px; font-size: .82rem; margin-top: 6px !important } .ktf b { color: #fff; margin-left: 4px }
.nachfassen { display: flex; gap: 10px; align-items: center; margin: 8px 16px 0; padding: 10px 12px; background: var(--pflaume-hell); border: 1px solid rgba(255,79,122,.35); border-radius: 14px; font-size: .9rem } .nachfassen span:not(.tf-avatar) { flex: 1 }
.quiz-leiste { margin: 10px 16px 0; text-align: left; background: var(--pflaume-hell); border: 1px solid rgba(139,61,255,.4); border-radius: 14px; padding: 10px 14px; color: var(--milch); font-weight: 700; width: calc(100% - 32px) }
.quiz-karte { max-width: 560px; max-height: 85vh; overflow-y: auto } .quiz-frage { margin: 14px 0 } .quiz-frage b { display: block; margin-bottom: 8px } .quiz-frage .chip { cursor: pointer; border: 1px solid var(--linie); background: var(--nacht); color: var(--milch); font: inherit; font-size: .9rem; padding: 7px 13px; border-radius: 999px } .quiz-frage .chip.an { background: var(--verlauf); color: #fff; border-color: transparent }
.quiz-ergebnis { text-align: center; background: var(--verlauf); border-radius: 18px; padding: 18px; margin-bottom: 12px } .quiz-ergebnis b { display: block; font-size: 2.6rem; color: #fff } .quiz-ergebnis span { color: rgba(255,255,255,.9) }
.quiz-paar { background: var(--nacht); border-radius: 12px; padding: 10px 12px; margin: 6px 0 } .quiz-paar p { margin: 0 0 4px } .quiz-paar div { display: flex; gap: 12px; font-weight: 600 } .quiz-paar.gleich div { color: var(--minze-schrift) }

/* ===== Promoter-Seite (15.09.) ===== */
.pr-eyebrow { color: var(--korall-schrift); font-weight: 800; font-size: .85rem; letter-spacing: .02em; margin: 0 0 8px }
/* 25.09.: die Beispiel-Tabelle brach um, weil diese Spalte auf 480 px gedeckelt war — «EUR 180 / CHF 180»
   und daneben noch «Ebene 1 · Deine zahlenden Kunden» gehen darin nicht nebeneinander. 620 px reichen. */
.pr-hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, 620px); gap: clamp(28px, 4vw, 80px); align-items: center; padding: 20px 0 40px } .pr-hero h1 { font-size: clamp(2.2rem, 4.2vw, 3.8rem); line-height: 1.05 } .pr-vertrag { margin: 18px 0 8px }
.rechner { background: var(--pflaume); border-radius: 26px; padding: 24px; border: 1px solid rgba(255,255,255,.06); box-shadow: 0 30px 80px rgba(0,0,0,.35) } .rechner h3 { margin: 0 0 14px } .rechner label { display: block; margin: 10px 0 14px; color: var(--nebel); font-weight: 600; font-size: .9rem } .rechner label b { float: right; color: var(--milch) }
.rechner input[type=range] { width: 100%; margin-top: 8px; accent-color: var(--korall) }
.rechner-zahlen { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 8px 0 12px } .rechner-zahlen div { background: var(--nacht); border-radius: 16px; padding: 14px; display: grid } .rechner-zahlen b { font-size: 1.9rem; font-weight: 800; letter-spacing: -0.02em; background: var(--verlauf); -webkit-background-clip: text; background-clip: text; color: transparent } .rechner-zahlen span { color: var(--nebel); font-size: .85rem }
.pr-schritte { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; margin: 10px 0 36px } .pr-schritte div { background: var(--pflaume); border-radius: 20px; padding: 20px; position: relative; padding-top: 22px } .pr-schritte i { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; background: var(--verlauf); color: #fff; font-style: normal; font-weight: 800; margin-bottom: 12px } .pr-schritte b { display: block; margin-bottom: 4px } .pr-schritte p { margin: 0; color: var(--nebel); font-size: .95rem }
.pr-saetze { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px } .satz { background: var(--pflaume); border-radius: 20px; padding: 20px; display: grid; gap: 4px; border: 1px solid rgba(255,255,255,.05) } .satz span { color: var(--nebel); font-size: .9rem; font-weight: 600 } .satz b { font-size: 2.2rem; font-weight: 800; letter-spacing: -0.02em } .satz small { color: var(--korall-schrift); font-weight: 700 } .satz em { color: var(--nebel); font-style: normal; font-size: .85rem; margin-top: 6px }
.pr-kopf h1 { font-size: clamp(1.8rem, 3vw, 2.6rem) } .ticket-knoepfe { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px } .ticket-knoepfe .knopf { padding: 10px 16px; font-size: .92rem }
.pr-zahlen { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)) } .guthaben .hervor { outline: 2px solid var(--korall) }
.material { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 14px; margin: 12px 0 8px } .mat { display: grid; gap: 4px; background: var(--pflaume); border-radius: 20px; padding: 12px; text-decoration: none; color: var(--milch); border: 1px solid rgba(255,255,255,.05); transition: transform .15s } .mat:hover { transform: translateY(-3px) } .mat img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 12px; background: var(--nacht); margin-bottom: 6px } .mat.hoch img { aspect-ratio: 3 / 4; object-fit: cover; object-position: top } .mat b { font-size: .98rem } .mat span { color: var(--nebel); font-size: .82rem } .mat em { font-style: normal; color: var(--korall-schrift); text-decoration: underline }
.pr-dsg { background: var(--pflaume); border-radius: 12px; padding: 8px 12px; display: inline-block }
.baum .wer small { color: var(--nebel); font-weight: 400; margin-left: 6px }
.pr-daten { margin-top: 30px } .pr-daten summary { list-style: none; cursor: pointer; display: flex; align-items: center; gap: 10px } .pr-daten summary::-webkit-details-marker { display: none } .pr-daten summary h2 { margin: 0 } .pr-daten summary::after { content: ""; width: 10px; height: 10px; border-right: 2px solid var(--nebel); border-bottom: 2px solid var(--nebel); transform: rotate(-45deg); transition: transform .2s } .pr-daten[open] summary::after { transform: rotate(45deg) } .pr-daten form { margin-top: 16px; max-width: 640px }
@media (max-width: 900px) { .pr-hero { grid-template-columns: 1fr } }
.zahlen.pr-zahlen { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px; margin: 14px 0 } .zahlen.pr-zahlen div { background: var(--pflaume); border-radius: 18px; padding: 16px 18px; border: 1px solid rgba(255,255,255,.05) } .zahlen.pr-zahlen b { font-size: 1.9rem }
#portal .ticket { padding: 26px 28px; margin: 16px 0 } #portal .ticket img { width: 150px; height: 150px; border-radius: 16px }
.ticket .ticket-knoepfe .knopf { margin: 0 }
/* 11.10. (Owner: «farblich … mach diese Boxen so wie die anderen»): die Link-Boxen im Portal im selben Kartenstil wie alle
   anderen Kaesten (cms-box) — keine knallige Verlaufsflaeche mehr; genau wie die Ansprechperson-Box. */
#portal .ticket { background: var(--pflaume); color: var(--milch); border: 1px solid var(--linie); border-radius: var(--radius);
  padding: 15px 16px; position: relative; overflow: hidden }
#portal .ticket::before { content: none }
#portal .ticket .beschriftung { color: var(--nebel); opacity: 1; font-weight: 700; font-size: .98rem }
#portal .ticket .link { color: var(--milch) }
#portal .ticket .knopf { background: rgba(255,255,255,.06); color: var(--milch); border: 1px solid var(--linie) }
#portal .ticket .knopf:hover { background: rgba(255,255,255,.12) }
#portal .ticket .klein, #portal .ticket p { color: var(--nebel) }
#portal .ticket img { width: 96px; height: 96px; border-radius: 10px; padding: 4px }
.mat.quer img { aspect-ratio: 16 / 9; object-fit: cover }

/* Umkreis-Radar */
.umkreis-karte { max-width: 640px } .radar { position: relative; margin: 10px auto }
.radar .ring { position: absolute; border-radius: 50%; border: 1.5px solid rgba(255,255,255,.14) } .radar .ring.r1 { border-color: rgba(255,79,122,.55) } .radar .ring.r2 { border-color: rgba(139,61,255,.5) } .radar .ring.r3 { background: rgba(139,61,255,.05) }
.radar .ring-label { position: absolute; transform: translate(-50%, -50%); font-size: .72rem; font-weight: 700; color: var(--nebel); background: var(--pflaume); padding: 0 6px; border-radius: 6px }
.radar-ich { position: absolute; width: 62px; height: 62px; border-radius: 50%; background: var(--verlauf); padding: 3px; box-shadow: 0 0 30px rgba(255,79,122,.5) } .radar-ich img { width: 56px; height: 56px; border-radius: 50%; object-fit: cover; background: var(--nacht) }
.radar-person { position: absolute; width: 48px; padding: 0; background: transparent; border: 0; cursor: pointer; display: grid; justify-items: center; gap: 2px; transition: transform .15s } .radar-person:hover { transform: scale(1.1); z-index: 2 }
.radar-person img { width: 48px; height: 48px; border-radius: 50%; object-fit: cover; background: var(--pflaume); border: 2px solid var(--linie) } .radar-person.ring1 img { border-color: var(--korall) } .radar-person.ring2 img { border-color: var(--violett) }
.radar-person span { font-size: .66rem; font-weight: 700; color: var(--milch); background: rgba(22,10,28,.8); padding: 1px 6px; border-radius: 6px; white-space: nowrap }
#umkreis-knopf { background: none; border: 0; color: var(--korall-schrift); font: inherit; font-weight: 700; cursor: pointer; padding: 0; text-decoration: none }
.sehr-mee { display: flex; justify-content: space-between; align-items: center; margin: 8px 0 } .sehr-vorschlaege { display: grid; gap: 6px; margin-bottom: 10px } .sehr-vorschlaege .vorschlag { text-align: left; background: var(--nacht); color: var(--milch); border: 1px solid var(--linie); border-radius: 12px; padding: 10px 12px; font: inherit; cursor: pointer; line-height: 1.4 } .sehr-vorschlaege .vorschlag:hover { border-color: var(--nebel) } .sehr-vorschlaege .vorschlag.an { border-color: var(--violett); box-shadow: 0 0 0 1px var(--violett) }
.ort-liste { display: grid; gap: 2px; background: var(--pflaume-hell); border-radius: 12px; padding: 6px; margin-top: 4px } .ort-liste button { text-align: left; background: transparent; color: var(--milch); border: 0; padding: 8px 10px; border-radius: 8px; font: inherit; cursor: pointer } .ort-liste button:hover { background: var(--nacht) }
.sozial { margin-top: 18px; display: grid; gap: 10px; justify-items: center } .sozial-oder { display: flex; align-items: center; gap: 12px; width: 100%; color: var(--nebel); font-size: .85rem; margin: 0 } .sozial-oder::before, .sozial-oder::after { content: ""; flex: 1; height: 1px; background: var(--linie) }
.apple-knopf { width: 320px; max-width: 100%; background: #000; color: #fff; border: 1px solid #333; border-radius: 999px; padding: 11px 16px; font-weight: 700; font-size: .95rem } .apple-knopf:hover { background: #111 }
.sozial-blatt { width: 100%; text-align: left } .datum-felder { display: grid; grid-template-columns: 1fr 1fr 1.4fr; gap: 8px }
.antrag { margin-top: 36px; background: var(--pflaume); border-radius: 26px; padding: clamp(20px, 3vw, 40px); border: 1px solid rgba(255,255,255,.06) } .antrag-form { max-width: 820px } .antrag-form h3 { margin: 22px 0 6px; color: var(--korall-schrift); font-size: 1rem } .antrag-form .chips { display: flex; flex-wrap: wrap; gap: 8px } .antrag-form .chip { cursor: pointer; border: 1px solid var(--linie); background: var(--nacht); color: var(--milch); font: inherit; font-size: .9rem; padding: 8px 14px; border-radius: 999px } .antrag-form .chip.an { background: var(--verlauf); color: #fff; border-color: transparent }
.antrag-karte { background: var(--nacht); border-radius: 14px; padding: 12px 14px; margin: 10px 0 } .antrag-karte h3 { margin: 0 0 6px } .antrag-karte p { margin: 2px 0 }

/* ---- Handy (gemessen 16.09.2026 bei 375 px: Hero blieb zweispaltig, weil Zeile 334 die Media-Query von 262 ueberschrieb; hero-glut schob die Seite 184 px breiter) — steht am Ende, damit es die Desktop-Regeln oben sicher schlaegt */
html, body { overflow-x: clip }
.thema-knopf { flex: 0 0 34px }
@media (max-width: 900px) {
  .hero { grid-template-columns: 1fr; min-height: 0; gap: 28px; padding: 16px 0 40px }
  .hero-text-block, .hero-text { max-width: none }
  .hero h1 { font-size: clamp(2.3rem, 11vw, 3.4rem) }
  .hero-text { font-size: 1.05rem }
  .hero-knoepfe { flex-direction: column } .hero-knoepfe .knopf { text-align: center }
  .hero-glut { inset: -60px -20px auto -20px; height: 460px }
  .buehne { grid-template-columns: 1fr; min-height: 0 }
  .telefon-buehne { justify-self: center }
}
@media (max-width: 520px) {
  .inhalt, body.breit .inhalt { padding: 16px 16px 48px }
  .schritt, .karte, .buehne-form { padding: 18px 16px; border-radius: 18px }
  .wahl { display: flex; flex-direction: column; width: 100%; box-sizing: border-box; border-radius: 22px } .wahl-knopf { width: 100% }
  .paket-preis { font-size: 1.7rem }
  h2 { font-size: 1.45rem } h1 { font-size: 2rem }
  table { display: block; overflow-x: auto; max-width: 100% }
  .mee-knopf-schwebend { right: 10px; bottom: 10px; transform: scale(.9) }
}
/* Regler bis 500 Kunden / 50 Promoter (Owner 16.09.): sechsstellige Betraege muessen in die Kachel passen */
.rechner-zahlen b { font-size: clamp(1.25rem, 5.5vw, 1.9rem); white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
@media (max-width: 400px) { .rechner-zahlen { grid-template-columns: 1fr } }
/* gemessen 16.09. bei 390 px: die Marken-Spalte auf Registrieren/Vormerken ragte 17 px ueber den Rand (minmax(280px,…) im Raster) */
@media (max-width: 760px) { .buehne { grid-template-columns: minmax(0, 1fr) } .buehne > * { min-width: 0; max-width: 100% } }
/* Hinweise «Neu: jetzt kannst du …» (16.09.) */
.dialog.hinweis { z-index: 63 } /* 24.10.2026: ueber Tinu (60-62) — vorher gleich hoch, auf dem Handy lag die Tinu-Blase ueber dem Knopf */ .hinweis-karte { position: relative; max-width: 460px; text-align: left }
.hinweis-x { position: absolute; top: 10px; right: 12px; background: transparent; border: 0; color: var(--nebel); font-size: 1.8rem; line-height: 1; padding: 6px 10px; cursor: pointer } .hinweis-x:hover { color: var(--milch) }
.hinweis-pille { display: inline-block; padding: 3px 10px; border-radius: 999px; background: var(--verlauf); color: #fff; font-size: .78rem; font-weight: 700; letter-spacing: .04em } .hinweis-pille.wichtig { background: var(--korall) }
.hinweis-bild { display: block; width: 100%; border-radius: 14px; margin: 14px 0 4px }
/* 29.10.2026: MEE-Frage bei Neuem (bio_neu.py) — Kachelbild quer zugeschnitten, Antwortknoepfe als Chips */
.hinweis-bild.hinweis-bio { aspect-ratio: 2 / 1; object-fit: cover; object-position: center 30% } .hinweis-auswahl { margin: 12px 0 0 }
.hinweis-karte:has(.hinweis-auswahl) { max-height: calc(100vh - 40px); overflow-y: auto }
.hinweis-karte:has(.hinweis-auswahl) .hinweis-knoepfe { display: flex; flex-wrap: wrap; gap: 10px }
.hinweis-karte h3 { margin: 12px 0 6px; font-size: 1.35rem } .hinweis-karte p { color: var(--nebel) } .hinweis-knoepfe { margin: 16px 0 0 }
/* 21.10.2026 Pflicht-Hinweis (hinweise.js pflichtZeigen): gross und gut lesbar, Hauptknopf leuchtet wie der Virus-Knopf (.vk-karte-knopf) */
.dialog.hinweis { overflow-y: auto } .dialog.hinweis-pflicht-dialog { z-index: 70 }   /* ueber Tinu (60-62): erst lesen */
.hinweis-karte.hinweis-pflicht { max-width: 560px; padding: 30px 28px 24px; border: 2px solid var(--korall); max-height: calc(100vh - 40px); overflow-y: auto }
.hinweis-pflicht h3 { font-size: clamp(1.4rem, 5vw, 1.8rem); line-height: 1.2; color: var(--milch); padding-right: 34px }
.hinweis-pflicht .hinweis-pflicht-text { color: var(--milch); font-size: 1.08rem; line-height: 1.55 }
.hinweis-pflicht-knoepfe { display: flex; flex-wrap: wrap; gap: 12px; margin: 20px 0 0 } .hinweis-pflicht-knoepfe .knopf { flex: 1 1 200px; font-size: 1.08rem; padding: 14px 18px }
.hinweis-pflicht-fuss { margin: 14px 0 0; font-size: .85rem }
.knopf.hinweis-leuchten { background: linear-gradient(135deg, #ff5a7a, #8b3dff); color: #fff; border: 0; font-weight: 800; box-shadow: 0 0 0 0 rgba(255, 90, 122, .7); animation: hinweis-puls 1.4s ease-in-out infinite }
.knopf.hinweis-leuchten:hover, .knopf.hinweis-leuchten:focus-visible { filter: brightness(1.1); outline: 3px solid #fff; outline-offset: 2px }
@keyframes hinweis-puls { 0%, 100% { box-shadow: 0 0 0 0 rgba(255, 90, 122, .75); transform: scale(1) } 50% { box-shadow: 0 0 0 12px rgba(255, 90, 122, 0); transform: scale(1.03) } }
@media (prefers-reduced-motion: reduce) { .knopf.hinweis-leuchten { animation: none; box-shadow: 0 0 0 3px rgba(255, 90, 122, .55) } }

/* Promoter: Pre-Launch-Kasten (16.09.) */
.pr-prelaunch { margin: 14px 0 6px; padding: 14px 18px; border-radius: 16px; background: var(--pflaume); border-left: 4px solid var(--korall) } .pr-prelaunch b { display: block; margin-bottom: 4px } .pr-prelaunch p { margin: 0; color: var(--nebel); font-size: .95rem }

/* Promoter: Antrag-Fortschritt + Wege (16.09.) */
.fortschritt { display: flex; margin: 6px 0 12px } .fortschritt div { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: .8rem; color: var(--nebel); text-align: center; position: relative } .fortschritt i { width: 14px; height: 14px; border-radius: 50%; background: var(--linie); display: block; position: relative; z-index: 1 } .fortschritt div.an i { background: var(--korall) } .fortschritt div.an { color: var(--milch) } .fortschritt div:not(:last-child)::after { content: ''; position: absolute; top: 6px; left: 50%; width: 100%; height: 2px; background: var(--linie) }
.pr-wege { margin: 26px 0 8px } .pr-wege .schritt b { display: block; margin-bottom: 4px }

/* Film auf der Startseite (16.09.) */
.film-block { display: grid; grid-template-columns: minmax(0, 1fr) minmax(280px, 360px); gap: clamp(24px, 4vw, 72px); align-items: center; padding: 36px 0 }
.film-rahmen { justify-self: center; width: min(100%, 320px); aspect-ratio: 9 / 16; border-radius: 28px; overflow: hidden; background: var(--nacht); box-shadow: 0 30px 80px rgba(139, 61, 255, .25); border: 1px solid rgba(255,255,255,.08) }
.film-rahmen video { width: 100%; height: 100%; display: block; object-fit: cover; background: var(--nacht) }
@media (max-width: 760px) { .film-block { grid-template-columns: 1fr } .film-rahmen { width: min(100%, 280px) } }

/* Promoter: Film + Download (17.09.) */
.pr-film { margin: 18px 0 6px; width: min(100%, 260px) }
.ansprech-karte.empfehlungsgeber { border: 1px solid rgba(255,79,122,.35) }
.rechner-ebene { background: rgba(255,255,255,.04); border-radius: 14px; padding: 10px 14px 4px; margin: 10px 0 } .rechner-ebene > b { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 4px; color: var(--korall-schrift) } .rechner-ebene > b .klein { color: var(--nebel) }
.werbetexte-titel { margin: 22px 0 4px; color: var(--korall-schrift) } .werbetexte { display: grid; gap: 8px; margin: 10px 0 8px } .werbetext { background: var(--pflaume); border-radius: 16px; padding: 4px 16px; border: 1px solid rgba(255,255,255,.05) } .werbetext summary { cursor: pointer; padding: 10px 0; display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; list-style: none } .werbetext summary::-webkit-details-marker { display: none } .werbetext summary::before { content: '▸'; color: var(--korall-schrift); font-size: .9rem } .werbetext[open] summary::before { content: '▾' } .werbetext summary span { color: var(--nebel); font-size: .88rem } .werbetext textarea { width: 100%; box-sizing: border-box; background: var(--nacht); color: var(--milch); border: 1px solid var(--linie); border-radius: 12px; padding: 12px; font: inherit; font-size: .92rem; line-height: 1.45; resize: vertical; margin: 6px 0 10px } .werbetext .werbetext-kopieren { margin: 0 0 12px }
.pr-video-laden { background: var(--pflaume); border-radius: 18px; padding: 16px 18px; margin: 8px 0 18px; display: flex; flex-wrap: wrap; gap: 10px; align-items: center } .pr-video-laden b { width: 100% } .pr-video-laden p { width: 100%; margin: 4px 0 0 }
/* Abmelden-Knopf in der Kopfzeile (17.09.) */
nav button.knopf.klein.leise { padding: 8px 16px; font-size: .9rem; border-radius: 999px; background: transparent; color: var(--nebel); border: 1px solid var(--linie); cursor: pointer; font-weight: 600 } nav button.knopf.klein.leise:hover { color: var(--milch) }

/* Gespraechsseite /mee (17.09.): MEE fragt, der Nutzer tippt, spricht oder tippt an — MEE liest vor */
.mee-seite { max-width: 720px; margin: 0 auto } .mee-seite .mee-kopf { align-items: center; flex-wrap: wrap } .mee-seite .mee-kopf > div { flex: 1; min-width: 220px } .mee-seite h1 { margin: 0 0 4px; font-size: 1.6rem }
.mee-avatar.gross { flex-basis: 56px; width: 56px; height: 56px; font-size: 1.5rem; transition: box-shadow .3s } body.mee-spricht .mee-avatar.gross { box-shadow: 0 0 0 6px rgba(255, 79, 122, .25), 0 8px 24px rgba(255, 79, 122, .5); animation: puls 1.2s infinite }
.schalter { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px; background: var(--nacht); border: 1px solid var(--linie); font-size: .9rem; cursor: pointer; white-space: nowrap } .schalter input { accent-color: var(--korall) }
.chat.gross { max-height: 55vh; min-height: 36vh; align-content: start } body.seite-mee .mee-knopf-schwebend, body.seite-mee .mee-panel { display: none } .blase.denkt { color: var(--nebel); font-style: italic }
.chips.optionen { margin: 12px 0 4px } .chip.option { background: var(--pflaume-hell); color: var(--milch); border-color: rgba(139, 61, 255, .45); cursor: pointer } .chip.option:hover { background: var(--verlauf); color: #fff; border-color: transparent }
#stimme-wahl .chip { cursor: pointer }
@media (max-width: 640px) { .chat.gross { max-height: 48vh; min-height: 0 } .mee-seite .schalter { order: 3 } }

/* Reisemodus (17.09.): eigener Abschnitt, Statuszeile */
.reise-stand { padding: 10px 14px; border-radius: 12px; background: var(--nacht); color: var(--nebel); font-size: .92rem } .reise-stand.an { color: var(--milch); border: 1px solid rgba(139, 61, 255, .5) }

/* Bilder im Chat (17.09.) */
.chat-form { grid-template-columns: auto 1fr 46px } .chat-bild-knopf { width: 40px; height: 46px; display: grid; place-items: center; cursor: pointer; font-size: 1.25rem; border-radius: 50%; background: var(--pflaume-hell) }
.chat-bild { display: block; max-width: 260px; width: 100%; border-radius: 12px; margin-bottom: 4px; cursor: zoom-in; background: var(--nacht) } .chat-bild-stand { font-size: .82rem; opacity: .85; margin-bottom: 4px }

/* Foto ausrichten (17.09.) */
.zuschnitt { position: fixed; inset: 0; z-index: 2000; background: rgba(10, 4, 14, .85); display: grid; place-items: center; padding: 16px }
.zuschnitt-karte { background: var(--pflaume); border-radius: 22px; padding: 18px; max-width: 520px; width: 100%; text-align: center; max-height: calc(100dvh - 32px); overflow: auto } .zuschnitt-karte h3 { margin: 0 0 4px }
#zuschnitt-canvas { width: min(100%, 300px, calc((100dvh - 260px) * .8)); aspect-ratio: 4 / 5; height: auto; border-radius: 14px; touch-action: none; cursor: grab; background: var(--nacht); margin: 10px auto; display: block }
#zuschnitt-zoom { width: min(100%, 360px); margin: 6px auto 12px; display: block }
/* Regler: Beschriftung unter dem Balken (17.09.), Skalen mit Worten und Enden in voller Breite */
label.regler-unten { display: grid; gap: 4px } label.regler-unten input[type=range] { width: 100%; order: 0 } label.regler-unten span { order: 1; color: var(--nebel); font-size: .92rem }
.steuer input[type=range].skala { max-width: none; width: 100% } .skala-enden { display: flex; justify-content: space-between; font-size: .8rem; color: var(--nebel); margin-top: -2px } .steuer .regler-wert { font-weight: 600; color: var(--milch) }
/* App-Karte mit QR (17.09.) */
.app-karte { display: grid; grid-template-columns: 180px 1fr; gap: 18px; align-items: center; background: var(--pflaume); border-radius: 22px; padding: 18px; margin: 18px 0 } .app-karte img { width: 180px; height: 180px; border-radius: 14px; background: #fff; padding: 8px } .app-karte h2 { margin: 0 0 6px }
@media (max-width: 640px) { .app-karte { grid-template-columns: 1fr; text-align: center } .app-karte img { margin: 0 auto } }
.foto.leer { cursor: pointer; font-size: 1.6rem } .foto.leer:hover { border-color: var(--korall); color: var(--korall-schrift) }
.klar-box { background: var(--nacht); border: 1px solid rgba(139,61,255,.45); border-radius: 16px; padding: 14px 18px; margin: 14px 0 } .klar-box ul { margin: 8px 0 0; padding-left: 20px } .klar-box li { margin: 4px 0 }
.wohnort-zeile { position: relative; margin-bottom: 8px } .wohnort-zeile label { display: block }

/* MEE fuehrt (17.09.): Schritt-Karte im Panel, Hervorhebung der Ziel-Sektion */
.mee-schritt { margin: 12px 12px 0; padding: 12px 14px; border-radius: 16px; background: linear-gradient(135deg, rgba(255,79,122,.18), rgba(139,61,255,.18)); border: 1px solid rgba(255,79,122,.35) } .mee-schritt b { font-size: .72rem; letter-spacing: .04em; color: var(--korall-schrift) } .mee-schritt h4 { margin: 4px 0 2px; font-size: 1.05rem } .mee-schritt p { margin: 0 0 8px; font-size: .88rem; color: var(--nebel) }
.mee-schritt-fuss { display: flex; align-items: center; justify-content: space-between; gap: 8px } .mee-schritt .mee-aktion { margin: 0 }
.schritt.hervorgehoben { outline: 3px solid var(--korall); outline-offset: 2px; animation: mee-puls 1.3s ease-out 2 }
.ansprech-karte { display: flex; gap: 14px; align-items: center; background: var(--pflaume); border: 1px solid rgba(139,61,255,.4); border-radius: 18px; padding: 14px; margin: 14px 0 } .ansprech-karte img { width: 110px; height: 110px; border-radius: 12px; background: #fff; padding: 5px; flex: 0 0 110px } .ansprech-karte p { margin: 4px 0 } .ansprech-karte code { background: var(--nacht); padding: 2px 8px; border-radius: 6px }
@media (max-width: 640px) { .ansprech-karte { flex-direction: column; text-align: center } }
.admin-baum, .admin-baum ul { list-style: none; padding-left: 0 } .admin-baum ul { padding-left: 22px; border-left: 2px solid var(--linie); margin: 4px 0 6px 10px } .baum-zeile { padding: 6px 8px; border-radius: 8px } .baum-zeile:hover { background: var(--nacht) } .baum-zeile code { background: var(--nacht); padding: 1px 6px; border-radius: 5px } .hat-kinder > .baum-zeile::before { content: '▾ '; color: var(--korall-schrift) } .baum-kunden { list-style: none; margin: 4px 0 8px 18px; padding: 0 0 0 12px; border-left: 2px dashed var(--linie) } .baum-kunden li { display: flex; justify-content: space-between; gap: 10px; padding: 3px 0; font-size: 13px } .baum-kunden .wer { color: var(--milch) } .baum-zeile.kunde { padding-left: 14px } .baum-zeile.kunde b { font-weight: 500 } .baum-zeile.matt { opacity: .35 } .baum-gruppe { color: var(--nebel); margin: 6px 0 2px; font-size: 12px; text-transform: uppercase; letter-spacing: .04em } .baum-zeile select { font-size: 12px; padding: 2px 6px; margin-left: 4px; max-width: 220px }

.start-ansprech { margin-top: 14px; padding: 12px 14px; background: var(--nacht); border-radius: 14px; display: flex; gap: 14px; align-items: center } .start-ansprech img { border-radius: 10px; background: #fff; padding: 4px } .start-ansprech p { margin: 4px 0 0 }

/* Admin (17.09.): Bereichs-Reiter, Uebersicht, Raster */
.admin-kopf { position: sticky; top: 0; z-index: 5; background: var(--nacht); padding: 6px 0 8px; margin-bottom: 6px; border-bottom: 1px solid var(--linie) }
.admin-kopf h1 { margin: 0 0 8px }
.admin-reiter { display: flex; flex-wrap: wrap; gap: 6px }
.admin-reiter button { background: var(--pflaume); color: var(--nebel); border: 1px solid var(--linie); border-radius: 999px; padding: 7px 14px; font-weight: 600; cursor: pointer }
.admin-reiter button.aktiv { background: var(--korall); color: #fff; border-color: var(--korall) }
.admin-reiter .zahl-pille { margin-left: 6px }
.admin-raster { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 14px } .admin-raster .karte { margin: 0 }
.admin-bereich > .admin-raster { margin: 14px 0 }
/* 14.10. Rollen + «Wer darf was»: je Bereich drei Knoepfe (Radiogruppe), am Handy untereinander; nur Farb-Tokens */
.rolle-wahl { display: flex; flex-wrap: wrap; gap: 6px; align-items: center } .rolle-wahl input[maxlength] { min-width: 0; flex: 1 1 160px }
.rechte-liste { display: grid; gap: 8px }
.rechte-person { border: 1px solid var(--linie); border-radius: var(--radius-klein); background: var(--pflaume); padding: 8px 12px }
.rechte-person > summary { cursor: pointer; color: var(--milch) } .rechte-person[open] > summary { margin-bottom: 8px }
.rechte-zeilen { display: grid; gap: 6px }
.rechte-zeile { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; padding: 6px 0; border-top: 1px solid var(--linie) }
.rechte-zeile.ist-eigen { border-left: 3px solid var(--korall); padding-left: 8px }
.rechte-bereich { min-width: 11rem; font-weight: 600; color: var(--milch); padding: 0; float: left }
.stufen { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; border: 0; margin: 0; padding: 0; min-width: 0 }
.stufe-wahl { position: relative; display: inline-flex }
.stufe-wahl input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0 }
.stufe-wahl span { display: inline-block; padding: 5px 12px; border: 1px solid var(--linie); border-radius: 999px; background: var(--nacht); color: var(--nebel); cursor: pointer; font-size: .9rem }
.stufe-wahl input:checked + span { background: var(--pflaume-hell); border-color: var(--korall); color: var(--milch); font-weight: 700 }
.stufe-wahl input:checked + span::before { content: '\2713\00a0' }
.stufe-wahl input:focus-visible + span { outline: 2px solid var(--korall); outline-offset: 2px }
.rechte-herkunft { font-size: .85rem; color: var(--nebel) } .rechte-herkunft.eigen { color: var(--korall-schrift); font-weight: 600 }
@media (max-width: 520px) { .rechte-bereich { min-width: 0; width: 100% } .stufen { width: 100% } .stufe-wahl { flex: 1 1 auto } .stufe-wahl span { width: 100%; text-align: center } }
.ansteht { margin: 4px 0 0; padding-left: 18px } .ansteht li { margin: 4px 0 } .ansteht a { color: var(--korall-schrift); font-weight: 600 }
#admin .zahlen b { font-size: 1.6rem }

.seiten { flex-wrap: wrap; gap: 4px; align-items: center; margin-top: 10px } .seiten button { min-width: 34px; padding: 4px 8px } .seiten button:disabled { background: var(--korall); color: #fff; opacity: 1 }

.erklaer { background: linear-gradient(135deg, rgba(139,61,255,.18), rgba(255,79,122,.12)); border: 1px solid rgba(139,61,255,.35); border-radius: 14px; padding: 10px 16px; margin: 12px 0 }
.erklaer summary { cursor: pointer; font-weight: 700; color: var(--milch); list-style: none } .erklaer summary::-webkit-details-marker { display: none } .erklaer summary::after { content: ' ▾'; color: var(--korall-schrift) } .erklaer[open] summary::after { content: ' ▴' }
.erklaer ul { margin: 8px 0 4px; padding-left: 18px } .erklaer li { margin: 6px 0; color: var(--nebel); line-height: 1.45 } .erklaer li b, .erklaer p b { color: var(--milch) } .erklaer p { color: var(--nebel); margin: 8px 0 } .erklaer a { color: var(--korall-schrift) }
:root[data-theme="light"] .erklaer summary, :root[data-theme="light"] .erklaer li b, :root[data-theme="light"] .erklaer p b { color: var(--tinte) }

/* Vertriebs-Cockpit (18.09.) */
.cockpit-raster { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 18px 28px; margin-bottom: 10px } .cockpit-raster h3 { margin: 4px 0 8px }
.trichter .stufe { display: grid; grid-template-columns: minmax(96px, auto) 1fr 52px 48px; gap: 8px; align-items: center; margin: 5px 0 } .trichter .stufe > * { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } .stufe-name { color: var(--nebel); font-size: .9rem }
.stufe-balken { height: 16px; background: var(--nacht); border-radius: 8px; overflow: hidden } .stufe-balken div { height: 100%; background: linear-gradient(90deg, var(--korall), var(--violett)); border-radius: 8px } .stufe-balken .gold { background: linear-gradient(90deg, #ffc85c, #ff9f43) }
.trichter b { text-align: right; font-variant-numeric: tabular-nums }
#verlauf { width: 100%; height: 180px; background: var(--nacht); border-radius: 12px }
.tabelle-scroll { overflow-x: auto } .rang td, .rang th { white-space: nowrap } .rang .kontakt a { text-decoration: none; font-size: 1.05rem; margin-right: 4px } .rang th[data-sort] { cursor: pointer } .rang th[data-sort]:hover { color: var(--korall-schrift) }
.pille { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: .78rem; font-weight: 700 } .pille.aktiv { background: rgba(107,255,176,.18); color: var(--minze-schrift) } .pille.ruhig { background: rgba(255,107,107,.18); color: var(--rot) } .pille.neu { background: rgba(139,61,255,.22); color: #c9a8ff }
:root[data-theme="light"] .pille.neu { color: var(--violett) } :root[data-theme="light"] #verlauf, :root[data-theme="light"] .stufe-balken { background: #efe8f5 }

.material-gruppen h3 { margin: 14px 0 6px; color: var(--korall-schrift) } .material-eintraege { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 6px 18px } .material-eintraege li { padding: 8px 0; border-bottom: 1px solid var(--linie); line-height: 1.4 } .material-eintraege li > .klein { display: block; margin-top: 2px } .material-link { font-weight: 700 } .material-link.matt { opacity: .5 } .material-eintraege .pille { vertical-align: middle; margin-left: 4px }

/* Admin-Baum (18.09.): Schrift explizit — im Dunkelmodus blieben Name, Code und Auswahl schwer lesbar */
.admin-baum, .admin-baum b, .admin-baum code, .admin-baum .baum-zeile { color: var(--milch) }
.admin-baum .klein, .admin-baum .baum-gruppe { color: var(--nebel) }
.baum-zeile select, .admin-baum select { color: var(--milch); background: var(--nacht); border: 1px solid var(--linie); border-radius: 6px; color-scheme: inherit }
.baum-zeile select option { color: var(--milch); background: var(--nacht) }
.baum-zeile.matt { opacity: .45 }

.freunde-karte .ticket { margin-top: 10px } .freunde-karte .ticket img { width: 110px; height: 110px; background: #fff; border-radius: 12px; padding: 5px }

.preise-laender { max-width: 720px; margin: 14px auto 0 } .preise-laender .tabelle td.klein { font-size: .8rem } #land-wahl select { padding: 4px 8px; margin-left: 4px }

.fotos-admin { display: flex; flex-wrap: wrap; gap: 14px; padding: 8px 0 } .foto-admin { width: 180px } .foto-admin img { width: 180px; height: 225px; object-fit: cover; border-radius: 10px; display: block; margin-bottom: 6px; border: 3px solid transparent } .foto-admin.rejected img { border-color: var(--korall) } .foto-admin.approved img { border-color: var(--minze) } .foto-admin .klein { min-height: 2.4em }

.rechner-ebenen { margin: 4px 0 10px; font-size: .88rem } .rechner-ebenen td, .rechner-ebenen th { padding: 5px 6px }
/* 25.09.: «EUR 180 / CHF 180» brach in zwei Zeilen um — die Geldspalte bekommt Platz und bleibt zusammen.
   Die erste Spalte darf dafuer schrumpfen; sie ist Text und vertraegt den Umbruch. */
.rechner-ebenen { table-layout: auto }
.rechner-ebenen th:last-child, .rechner-ebenen td:last-child { white-space: nowrap; width: 1%; padding-left: 12px }
.rechner-ebenen th:nth-child(2), .rechner-ebenen td:nth-child(2),
.rechner-ebenen th:nth-child(3), .rechner-ebenen td:nth-child(3) { white-space: nowrap; width: 1% }
@media (max-width: 420px) { .rechner-ebenen { font-size: .8rem } .rechner-ebenen td, .rechner-ebenen th { padding: 5px 4px } }

.rechner-breit { margin: 18px 0 } .rechner-breit .rechner-zahlen b { font-size: clamp(1.4rem, 3vw, 2.2rem) } .rechner-breit .rechner-ebenen { font-size: .95rem }
.rechner.beispiel .rechner-ebenen { margin-top: 10px }

.umkreis-wahl select { padding: 2px 6px; font-size: .85rem; margin-left: 2px }

.entdecken-werkzeuge { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0 0 12px; font-size: .9rem; color: var(--nebel) }

.ansprech-karte img.ansprech-foto { width: 88px; height: 110px; border-radius: 14px; padding: 0; background: none; object-fit: cover; object-position: top; flex: 0 0 88px }

.tippgeber { background: var(--pflaume); border: 1px solid rgba(139,61,255,.4); border-radius: 14px; padding: 12px 14px } .tippgeber b { color: var(--korall-schrift) } .tippgeber p { margin: 4px 0 6px; font-weight: 600 }
/* 13.10. (Owner): Profilfoto des Tippgebers neben Name/Code — wie Andreas' Karte (.ansprech-foto), nur mit Einwilligung */
.tippgeber.mit-foto { display: flex; gap: 12px; align-items: center } .tippgeber img.ansprech-foto { width: 66px; height: 82px; border-radius: 12px; object-fit: cover; object-position: top; flex: 0 0 66px }
/* 20.10.: «Wer hat dich eingeladen?» (meeyo.js einladerFrage) */
.einlader-frage { background: var(--pflaume); border: 1px solid rgba(139,61,255,.4); border-radius: 14px; padding: 12px 14px; display: grid; gap: 8px } .einlader-frage input { width: 100% }
.ef-treffer { display: grid; gap: 6px } .ef-wahl { text-align: left; width: 100%; padding: 10px 12px; border-radius: 12px } .ef-gewaehlt { margin: 0; font-weight: 600; color: var(--korall-schrift) }
.tf-vorschau .ansprech-karte { margin: 10px 0 } .tf-schalter { display: flex; justify-content: flex-start; text-align: left; white-space: normal; border-radius: 14px; align-items: flex-start; max-width: 680px } .tf-schalter input { flex: 0 0 auto; width: auto; margin-top: 4px } .tf-hinweis { margin: 6px 0 0 }

/* Erststrang /start (20.09., U1): vier Bildschirme, ein Balken, grosse Knoepfe */
.strang { max-width: 560px; margin: 0 auto; padding: 8px 0 40px } .strang-kopf { margin: 6px 0 22px } .strang-kopf .balken { height: 8px; border-radius: 999px; background: var(--pflaume-hell); overflow: hidden } .strang-kopf .balken i { display: block; height: 100%; width: 0; background: var(--verlauf); transition: width .35s } .strang-kopf .klein { margin: 8px 0 0 }
.strang-schritt h1 { font-size: 1.7rem; line-height: 1.15; margin: 0 0 8px } .strang-schritt h2 { font-size: 1.05rem; margin: 22px 0 8px; color: var(--nebel) }
.strang-foto { display: flex; gap: 14px; align-items: center; margin: 14px 0 } .strang-foto img { width: 120px; height: 150px; object-fit: cover; border-radius: 16px; background: var(--nacht) }
.strang-weiter { margin-top: 22px; display: flex; gap: 16px; align-items: center } .strang-weiter a { color: var(--nebel) }
.strang-wahl { display: flex; flex-wrap: wrap; gap: 8px } .strang-wahl button { background: var(--pflaume); color: var(--milch); border: 1px solid var(--linie); border-radius: 999px; padding: 10px 16px; font: inherit; cursor: pointer } .strang-wahl button.an { background: var(--verlauf); border-color: transparent; font-weight: 700 }
.strang .wohnort-zeile { position: relative; margin: 8px 0 }
.vorschau-hinweis { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; background: var(--pflaume); border: 1px solid rgba(255,79,122,.45); border-radius: 14px; padding: 12px 16px; margin: 0 0 14px } .vorschau-hinweis.puls { animation: puls .6s ease } @keyframes puls { 0% { transform: scale(1) } 40% { transform: scale(1.03) } 100% { transform: scale(1) } }
.eisbrecher { text-align: left; margin: 10px 0 4px } .eisbrecher > b { display: block; font-size: .9rem; color: var(--nebel); margin-bottom: 8px } .eisbrecher-satz { display: block; width: 100%; text-align: left; background: var(--nacht); color: var(--milch); border: 1px solid var(--linie); border-radius: 14px; padding: 10px 14px; margin-bottom: 6px; font: inherit; cursor: pointer } .eisbrecher-satz.an { border-color: var(--korall); background: rgba(255,79,122,.12) }
.sehr-karte:not(.sehr) { border-color: var(--linie); box-shadow: none }

/* «Wir sind anders» (20.09.) */
.anders { margin: 34px 0 28px } .anders-titel { font-size: clamp(2rem, 4.6vw, 3.2rem); font-weight: 900; line-height: 1.05; margin: 0 0 10px; letter-spacing: -.02em; background: var(--verlauf); -webkit-background-clip: text; background-clip: text; color: transparent }
.anders-unter { font-size: 1.2rem; font-weight: 700; max-width: 62ch; margin: 0 0 18px } .anders-raster { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 14px }
.anders-karte { background: var(--pflaume); border-radius: 18px; padding: 16px 18px; border: 1px solid rgba(255,255,255,.05) } .anders-karte > b { display: block; font-size: 1.05rem; margin-bottom: 8px; color: var(--korall-schrift) } .anders-karte ol { padding-left: 20px; margin: 0 0 8px } .anders-karte li { margin-bottom: 6px }
.anders-geld .tabelle td { padding: 6px 4px } .anders-geld .zahl { font-weight: 800; font-size: 1.15rem }
.ruhend-hinweis { background: rgba(255,200,87,.12); border: 1px solid rgba(255,200,87,.5); border-radius: 14px; padding: 12px 16px; margin: 0 0 14px } .ruhend-hinweis b { display: block; margin-bottom: 4px }
.akt.zurueck { background: var(--pflaume-hell); color: var(--gelb); width: 52px; height: 52px; font-size: 1.3rem }
.foto-mee { background: var(--pflaume); border-radius: 12px; padding: 10px 14px; margin: 8px 0 0; font-size: .92rem }
.foto-logo-tipp { margin: 8px 0; padding: 10px 12px; border-radius: 12px; background: rgba(255, 196, 0, .1); color: #ffd98a; font-size: .9rem }   /* 02.11. Logo als Foto abgelehnt -> zum Firmenlogo */
/* 02.11. Firmenlogo zuoberst im Profil (Firmenkonten): runde Vorschau wie das Profilbild + grosser Knopf */
.firmenlogo:not([hidden]) { display: flex; gap: 18px; align-items: center; flex-wrap: wrap; margin-bottom: 16px }
.firmenlogo h2 { margin: 0 0 4px } .firmenlogo-text { flex: 1 1 260px; min-width: 0 }
.firmenlogo-rund { width: 104px; height: 104px; border-radius: 50%; background: #fff; overflow: hidden; display: flex; align-items: center; justify-content: center; flex: 0 0 auto; border: 3px solid rgba(160, 100, 220, .45); box-sizing: border-box }
.firmenlogo-bild { width: 100%; height: 100%; object-fit: contain; display: block } .firmenlogo-leer { font-size: 44px }
.firmenlogo-knoepfe { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin: 10px 0 4px } .firmenlogo-person { opacity: .75; margin: 6px 0 0 }
.prompts { display: grid; gap: 8px } .prompt-zeile { display: grid; grid-template-columns: minmax(180px, 1fr) 2fr; gap: 8px } .prompt-kachel { background: var(--nacht); border-radius: 12px; padding: 8px 12px; margin: 6px 0; display: grid } .prompt-kachel b { font-weight: 600 }
@media (max-width: 600px) { .prompt-zeile { grid-template-columns: 1fr } }
.det-ziel { font-weight: 700; margin: 4px 0 } .det-wichtig { margin: 0 0 8px }

.reaktionen { font-size: .95rem; margin-top: 2px } .reaktion-wahl { position: absolute; display: flex; gap: 4px; background: var(--pflaume); border: 1px solid var(--linie); border-radius: 999px; padding: 4px 6px; margin-top: 4px; z-index: 5 } .reaktion-wahl button { background: none; border: 0; font-size: 1.15rem; cursor: pointer; padding: 2px 4px } .nachricht { position: relative }
.treffen-form { background: var(--pflaume); border-radius: 14px; padding: 12px 16px; margin: 8px 0 } .treffen-form b { display: block; margin-bottom: 4px }
.themen { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 10px } .themen .chip { cursor: pointer }
.raeume { display: grid; gap: 10px; margin: 8px 0 } .raum { background: var(--nacht); border: 1px solid var(--linie); border-radius: 16px; padding: 12px 14px } .raum.an { border-color: rgba(255,79,122,.5) } .raum .zeile b { display: block } .raum-inhalt { margin-top: 10px; display: grid; gap: 10px } .raum-warn { background: rgba(255,200,87,.1); border: 1px solid rgba(255,200,87,.4); border-radius: 12px; padding: 10px 12px } .det-raum { color: var(--gelb); font-weight: 600; margin: 4px 0 } .raum-chips .chip { border-color: rgba(255,200,87,.5) }

/* «Dein Team» grafisch (Owner 22.09.): oben Du, darunter Reihen von Karten, die umbrechen — nichts scrollt seitlich. Zweig klappt unter der Reihe auf. */
.team-schalter { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 6px 0 12px }
.team-schalter .knopf.an { background: var(--verlauf); color: #fff }
.team-grafik { margin: 4px 0 10px }
.team-du { display: flex; justify-content: center; position: relative; padding-bottom: 22px }
.team-du::after { content: ""; position: absolute; left: 50%; bottom: 0; width: 2px; height: 22px; background: var(--linie) }
.team-reihe { position: relative; padding-top: 14px }
.team-reihe::before { content: ""; position: absolute; left: 8%; right: 8%; top: 0; border-top: 2px solid var(--linie) }
.team-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(138px, 1fr)); gap: 8px }
.tk { position: relative; display: block; width: 100%; text-align: left; background: var(--pflaume-hell); border: 1px solid var(--linie); border-radius: var(--radius-klein); padding: 9px 10px 8px; color: var(--milch); cursor: pointer; font: inherit }
.tk:hover, .tk:focus-visible { border-color: var(--violett); outline: none }
.tk.an { border-color: var(--korall); box-shadow: 0 0 0 2px rgba(255, 79, 122, .35) }
.tk .eb { display: block; font-size: .62rem; font-weight: 800; letter-spacing: .8px; text-transform: uppercase; color: var(--korall-schrift); margin-bottom: 3px }
.tk .n { display: block; font-weight: 800; font-size: .92rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis }
.tk code { font-size: .7rem; color: var(--nebel); letter-spacing: .4px }
.tk .s { display: flex; gap: 5px; align-items: center; flex-wrap: wrap; margin-top: 6px; font-size: .74rem; color: var(--nebel); font-variant-numeric: tabular-nums }
.tk .z { display: inline-block; min-width: 14px; padding: 0 6px; border-radius: 999px; background: var(--linie); color: var(--milch); font-size: .7rem; font-weight: 700; text-align: center }
.tk .z.g { background: var(--minze); color: #062a1d } .tk .z.p { background: var(--violett); color: #fff }
.tk .kd { display: flex; gap: 3px; flex-wrap: wrap; margin-top: 6px; align-items: center } .tk .kd small { color: var(--nebel); font-size: .68rem }
.tk .kd i, .team-legende .pk { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--linie) }
.tk .kd i.g, .team-legende .pk.g { background: var(--minze) }
.tk.du { width: min(100%, 300px); background: var(--verlauf); border: 0; box-shadow: 0 10px 28px rgba(139, 61, 255, .35); cursor: default; color: #fff }
.tk.du .eb, .tk.du code, .tk.du .s { color: #fff; opacity: .95 } .tk.du .n { font-size: 1.05rem } .tk.du .z { background: rgba(255, 255, 255, .25); color: #fff } .tk.du .z.g { background: var(--minze); color: #062a1d }
.tk.weit { opacity: .55; border-style: dashed } .tk.weit .eb { color: var(--nebel) }
.team-zweig { margin: 8px 0 4px; padding: 10px 12px 12px; border: 1px solid var(--linie); border-left: 3px solid var(--korall); border-radius: var(--radius-klein); background: color-mix(in srgb, var(--pflaume) 85%, var(--pflaume-hell)) }
.team-zweig-kopf { font-size: .92rem; margin-bottom: 6px } .team-zweig-kopf code { color: var(--nebel); font-size: .78rem }
.team-kunden { list-style: none; margin: 0 0 6px; padding: 0; font-size: .85rem } .team-kunden li { padding: 3px 0; border-top: 1px solid var(--linie) } .team-kunden small { color: var(--nebel) }
.team-zweig .team-reihe::before { left: 4%; right: 4% }
.team-legende { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; margin-top: 10px } .team-legende span { display: inline-flex; align-items: center; gap: 5px }
@media (max-width: 520px) { .team-grid { grid-template-columns: repeat(auto-fill, minmax(118px, 1fr)); gap: 6px } .tk { padding: 7px 8px } }

/* Unterknoepfe im Portal (Owner 22.09.): Sprungleiste, klebt oben; aktiver Abschnitt leuchtet */
.pr-unternav { position: sticky; top: 0; z-index: 20; display: flex; gap: 6px; flex-wrap: wrap; padding: 8px 0; margin: 4px 0 14px; background: var(--nacht); border-bottom: 1px solid var(--linie) }
.pr-unternav a { padding: 7px 13px; border-radius: 999px; background: var(--pflaume-hell); color: var(--milch); font-weight: 700; font-size: .9rem; text-decoration: none; white-space: nowrap }
.pr-unternav a.an { background: var(--verlauf); color: #fff }
#portal .tab-weg { display: none !important }
#portal [id] { scroll-margin-top: 64px }
@media (max-width: 520px) { .pr-unternav { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none } .pr-unternav::-webkit-scrollbar { display: none } .pr-unternav a { font-size: .84rem; padding: 6px 11px } }

/* Handy-Leiste unten (Owner 22.09.: «wie bei Tinder und co») — dieselben vier Bereiche wie in der App: Entdecken · Matches · MEE · Profil.
   Nur fuer angemeldete Nutzer und nur auf dem Handy; auf dem Desktop bleibt die Zeile oben. */
.tab-leiste { display: none }
@media (max-width: 760px) {
  .tab-leiste { position: fixed; left: 0; right: 0; bottom: 0; z-index: 45; display: grid; grid-template-columns: repeat(4, 1fr);
    background: color-mix(in srgb, var(--pflaume) 94%, transparent); backdrop-filter: blur(12px); border-top: 1px solid var(--linie);
    padding: 6px 4px calc(6px + env(safe-area-inset-bottom)) }
  .tab-leiste a { position: relative; display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 6px 2px; color: var(--nebel); text-decoration: none; font-size: .72rem; font-weight: 700 }
  .tab-leiste a.an { color: var(--korall-schrift) }
  .tab-sym { font-size: 1.3rem; line-height: 1 }
  .tab-punkt { position: absolute; top: 3px; right: calc(50% - 20px); width: 9px; height: 9px; border-radius: 50%; background: var(--korall); border: 2px solid var(--pflaume) }
  body.hat-tableiste { padding-bottom: 78px }
  body.hat-tableiste .mee-knopf-schwebend { bottom: 84px }
  body.hat-tableiste .kopf nav a[data-nav="an"]:not(#nav-admin) { display: none }   /* die Bereiche stehen unten, oben bleibt Marke + Sprache */
}

/* Match-Moment mit ganzem Profil (Owner 22.09.): die Karte steht still — kein Wischen, keine Stempel — und die Details sind offen. */
.match-karte { max-height: 88vh; overflow-y: auto; width: min(460px, 94vw) }
.match-profil { margin: 10px 0 14px }
.match-profil .wisch-karte { position: static; transform: none !important; box-shadow: none; margin: 0 }
.match-profil .wisch-karte .stempel { display: none }
.match-profil .fotos-rahmen { aspect-ratio: 4 / 5 }
.match-profil .details { max-height: none }
/* 17.10.2026 («Ihr seid verbunden!»: das aufgeklappte Profil legte sich ueber den halben Dialog — Owner: nie etwas ueberlagert):
   im Dialog klappt das Profil UNTER dem Foto auf, nie darueber (der Dialog rollt schon, .match-karte max-height). */
.match-profil .wisch-karte.profil-offen .details { position: static; inset: auto; animation: none; max-height: none }

/* Leere Flaechen bekommen Wege (Owner 22.09.) — vier Karten statt einer leeren Seite */
.leer-karten { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 14px; text-align: left }
.leer-karte { display: block; padding: 12px 13px; border-radius: var(--radius-klein); background: var(--pflaume-hell); border: 1px solid var(--linie); color: var(--milch); text-decoration: none }
.leer-karte b { display: block; margin-bottom: 3px } .leer-karte:hover { border-color: var(--violett) }
@media (max-width: 420px) { .leer-karten { grid-template-columns: 1fr } }

/* Raeume als Kacheln (Owner 22.09.: «wie bei Tinder, mit Boxen und coolen Icons») */
.raeume { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px }
.raum-kachel { background: var(--pflaume-hell); border: 1px solid var(--linie); border-radius: var(--radius); overflow: hidden }
.raum-kachel.an { border-color: var(--korall); box-shadow: 0 0 0 1px rgba(255, 79, 122, .35) }
.raum-kopf { display: flex; gap: 10px; align-items: flex-start; width: 100%; text-align: left; background: none; border: 0; padding: 13px; color: var(--milch); font: inherit; cursor: pointer }
.raum-icon { font-size: 1.6rem; line-height: 1.1 }
.raum-titel { flex: 1; display: block }
.raum-titel b { display: block; font-size: 1rem; margin-bottom: 2px }
.raum-titel .klein { display: block; color: var(--nebel) }
.raum-haken { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; background: var(--linie); color: var(--milch); font-weight: 800; flex: 0 0 auto }
.raum-kachel.an .raum-haken { background: var(--verlauf); color: #fff }
.raum-inhalt { padding: 0 13px 13px; border-top: 1px solid var(--linie) }
.raum-inhalt .chips { margin-top: 10px }
.raum-knoepfe { display: flex; gap: 8px; margin: 10px 0 0 }
.raum-warn { margin-top: 10px; padding: 10px 11px; border-radius: var(--radius-klein); background: color-mix(in srgb, var(--rot) 14%, transparent); border: 1px solid color-mix(in srgb, var(--rot) 45%, transparent) }
@media (max-width: 520px) { .raeume { grid-template-columns: 1fr } }

/* ── Leader-Bereich (24.09.): Aufbau wie bei structura-os.com, Farben aus MEEYO.
   Vier Kennzahl-Karten oben, darunter Boxen mit EIGENEM Filter je Box — das ist der Grund,
   warum deren Ansicht bedienbar wirkt statt überladen. Kein Zeus-Amber, nur die Tokens von oben. */
.unbekannt { color: var(--nebel); font-style: italic }   /* 25.09.: die Kacheln kommen von .cms-kpi; das hier bleibt, weil es die Aussage traegt */

.lx-box { margin: 14px 0 }
.lx-box > header { flex-wrap: wrap }
.lx-box .filter { margin-left: auto }
.lx-box .filter { display: flex; gap: 6px; flex-wrap: wrap }
.lx-box .filter button { background: var(--pflaume-hell); color: var(--nebel); border: 1px solid var(--linie);
  border-radius: 999px; padding: 4px 11px; font-size: .8rem; cursor: pointer }
.lx-box .filter button.an { background: var(--verlauf); color: #fff; border-color: transparent }

.lx-tab { width: 100%; border-collapse: collapse; font-size: .92rem }
.lx-tab th { text-align: left; color: var(--nebel); font-weight: 600; font-size: .8rem; padding: 6px 8px; border-bottom: 1px solid var(--linie) }
.lx-tab td { padding: 8px; border-bottom: 1px solid var(--linie); vertical-align: middle }
.lx-tab tr:last-child td { border-bottom: 0 }
.lx-tab .zahl { text-align: right; font-variant-numeric: tabular-nums }
.lx-tab .tief { color: var(--nebel) }

.lx-ampel { display: inline-flex; align-items: center; gap: 6px; font-size: .82rem; white-space: nowrap }
.lx-ampel i { width: 9px; height: 9px; border-radius: 50%; display: inline-block; flex: 0 0 auto }
.lx-ampel.gruen i { background: var(--minze) } .lx-ampel.gruen { color: var(--minze-schrift) }
.lx-ampel.gelb i { background: #ffd166 } .lx-ampel.gelb { color: #ffd166 }
.lx-ampel.rot i { background: var(--rot) } .lx-ampel.rot { color: var(--rot) }
.lx-ampel.ruhend i { background: var(--nebel) } .lx-ampel.ruhend { color: var(--nebel) }
.lx-ampel.unbekannt i { background: transparent; border: 1px dashed var(--nebel) } .lx-ampel.unbekannt { color: var(--nebel) }

.lx-punkte { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap }
.lx-punkte .stand { font-size: 2.1rem; font-weight: 800; background: var(--verlauf);
  -webkit-background-clip: text; background-clip: text; color: transparent; font-variant-numeric: tabular-nums }
.lx-balken { height: 7px; background: var(--pflaume-hell); border-radius: 99px; overflow: hidden; margin-top: 5px }
.lx-balken > span { display: block; height: 100%; background: var(--verlauf) }
.lx-leer { color: var(--nebel); font-size: .9rem; padding: 10px 2px }

/* ══ Promoter-CMS (Owner 25.09.: «wie ein cms ... gliederung wie das von structura») ══════════════
   Aufbau vom Structura-Dashboard uebernommen: Seitenleiste mit Gruppen links, Kopfzeile mit Titel
   und Konto rechts, Arbeitsflaeche mit Kennzahlenkacheln und Boxen. Farben, Schrift und Verlauf
   bleiben MEEYO. Die Seitenleiste ist auf dem Handy eine Schublade, kein zweiter Aufbau. */
body.cms-an .inhalt { max-width: none; padding: 0 }
body.cms-an .fuss { border-top: 1px solid var(--linie) }

.cms { display: grid; grid-template-columns: 264px minmax(0, 1fr); align-items: start }

/* ── Seitenleiste ── */
.cms-seite { position: sticky; top: 0; align-self: stretch; display: flex; flex-direction: column;
  gap: 4px; padding: 18px 12px 16px; background: var(--pflaume); border-right: 1px solid var(--linie);
  min-height: 100vh }
.cms-marke { display: flex; align-items: center; gap: 10px; padding: 2px 10px 16px }
.cms-logo { width: 34px; height: 34px; border-radius: 10px; background: var(--verlauf); color: #fff;
  display: grid; place-items: center; font-weight: 800; font-size: 1.05rem; flex: none }
.cms-marke b { display: block; font-weight: 800; letter-spacing: .1em; font-size: .95rem; line-height: 1.1 }
.cms-marke small { display: block; color: var(--nebel); font-size: .72rem; letter-spacing: .06em }

.cms-nav { display: flex; flex-direction: column; gap: 2px; flex-wrap: nowrap }
.cms-gruppe { margin: 14px 0 4px; padding: 0 10px; color: var(--nebel); font-size: .68rem;
  font-weight: 700; letter-spacing: .13em; text-transform: uppercase }
.cms-nav a, .cms-nav button { display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: 10px;
  color: var(--nebel); text-decoration: none; font-weight: 600; font-size: .93rem; position: relative }
.cms-nav a svg, .cms-nav button svg { width: 18px; height: 18px; flex: none; fill: none; stroke: currentColor;
  stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round }
.cms-nav a:hover, .cms-nav button:hover { background: var(--pflaume-hell); color: var(--milch) }
.cms-nav a.an, .cms-nav button.an { background: var(--pflaume-hell); color: var(--milch) }
.cms-nav a.an::before, .cms-nav button.an::before { content: ""; position: absolute; left: -12px; top: 7px; bottom: 7px; width: 3px;
  border-radius: 0 3px 3px 0; background: var(--verlauf) }
.cms-nav a.an svg, .cms-nav button.an svg { stroke: var(--korall) }
.cms-zahl { margin-left: auto; font-size: .78rem; font-weight: 700; color: var(--nebel);
  font-variant-numeric: tabular-nums }
.cms-nav a.an .cms-zahl, .cms-nav button.an .cms-zahl { color: var(--milch) }
.cms-pille { margin-left: auto; font-size: .6rem; font-weight: 800; letter-spacing: .08em;
  text-transform: uppercase; padding: 3px 7px; border-radius: 99px; background: var(--verlauf); color: #fff }
.cms-aus::after { content: "\2197"; margin-left: auto; color: var(--nebel); font-size: .8rem }
/* 15.10. (Owner): Hauptkategorien zum Aufklappen. Der Kopf traegt die Schrift der alten Gruppen-Ueberschrift
   (.cms-gruppe), ist aber ein Knopf mit Pfeil; Zaehler zugeklappter Eintraege stehen als Pille daneben.
   Auf-/Zuklappen ueber grid-template-rows (0fr -> 1fr), ohne Hoehe zu messen; zu = visibility:hidden, damit
   die Eintraege dann weder Tab-Stopp noch Vorleser-Ziel sind. Logik: cmsGruppen() in promoter.js. */
.cms-grp { display: flex; flex-direction: column }
.cms-nav .cms-grp-kopf { margin-top: 6px; padding: 10px; min-height: 44px; gap: 8px; border: 0; color: var(--milch);
  font-size: .86rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase }   /* 28.10. (Owner): Hauptkategorien groesser + fett */
.cms-nav .cms-grp-kopf:focus-visible { outline: 2px solid var(--korall); outline-offset: -2px }
.cms-grp-titel { flex: 1; min-width: 0 }
.cms-grp-zahl { font-size: .7rem; font-weight: 800; letter-spacing: 0; padding: 2px 7px; border-radius: 99px;
  background: var(--verlauf); color: #fff; font-variant-numeric: tabular-nums }
.cms-grp-zahl:empty, .cms-grp.offen .cms-grp-zahl { display: none }
.cms-nav .cms-grp-kopf .cms-grp-pfeil { width: 16px; height: 16px; transition: transform .2s ease }
.cms-grp.offen > .cms-grp-kopf .cms-grp-pfeil { transform: rotate(180deg) }
.cms-grp-inhalt { display: grid; grid-template-rows: 1fr; transition: grid-template-rows .2s ease, visibility 0s }
.cms-grp:not(.offen) > .cms-grp-inhalt { grid-template-rows: 0fr; visibility: hidden;
  transition: grid-template-rows .2s ease, visibility 0s .2s }
/* Rand links: der Verlaufsstrich des aktiven Eintrags (.an::before, left -12px) soll nicht abgeschnitten werden */
.cms-grp-liste { min-height: 0; overflow: hidden; display: flex; flex-direction: column; gap: 2px;
  margin: 0 -12px; padding: 0 12px }
.cms-grp + .cms-aus, .cms-grp + .cms-gruppe { margin-top: 12px }
@media (prefers-reduced-motion: reduce) {
  .cms-grp-inhalt, .cms-grp:not(.offen) > .cms-grp-inhalt, .cms-nav .cms-grp-kopf .cms-grp-pfeil { transition: none }
}

.cms-fuss { margin-top: auto; background: var(--pflaume-hell); border: 1px solid var(--linie);
  border-radius: var(--radius-klein); padding: 12px 13px }
.cms-fuss b { display: block; font-size: .85rem } .cms-fuss small { color: var(--nebel); font-size: .76rem }
.cms-balken { height: 6px; background: var(--nacht); border-radius: 99px; overflow: hidden; margin: 8px 0 6px }
.cms-balken > span { display: block; height: 100%; background: var(--verlauf) }

/* ── Kopfzeile der Arbeitsflaeche ── */
.cms-haupt { min-width: 0; align-self: stretch }   /* 28.10.2026 (portal_pruefen, 1280 px): kurze Bereiche + lange Seitenleiste — ohne stretch endete
   die Hauptspalte vor der Seite, und die klebende Kopfzeile (Glocke, «?») rollte mit ihr aus dem Bild */
.cms-kopf { position: sticky; top: 0; z-index: 5; display: flex; align-items: center; gap: 14px;
  padding: 14px clamp(16px, 2.4vw, 30px); background: var(--nacht);
  border-bottom: 1px solid var(--linie) }
.cms-menue { display: none; background: transparent; border: 1px solid var(--linie); color: var(--milch);
  border-radius: 9px; padding: 6px; line-height: 0 }
.cms-menue svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round }
.cms-titel { min-width: 0 }
.cms-titel h1 { font-size: 1.32rem; margin: 0 } .cms-titel p { margin: 1px 0 0; color: var(--nebel); font-size: .85rem }
.cms-kopf-rechts { margin-left: auto; display: flex; align-items: center; gap: 10px }
.cms-code { display: inline-flex; align-items: center; gap: 7px; padding: 6px 12px; border-radius: 99px;
  border: 1px solid var(--linie); background: var(--pflaume); font-size: .86rem; font-weight: 700; letter-spacing: .06em }
.cms-code i { width: 7px; height: 7px; border-radius: 99px; background: var(--minze) }
.cms-ich { display: inline-flex; align-items: center; gap: 8px; font-size: .88rem; font-weight: 600 }
.cms-ich i { width: 32px; height: 32px; border-radius: 99px; background: var(--verlauf); color: #fff;
  display: grid; place-items: center; font-style: normal; font-weight: 800; font-size: .8rem }
.cms-flaeche { padding: 20px clamp(16px, 2.4vw, 30px) 60px }

/* ── Kennzahlen ── */
.cms-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 14px; margin: 0 0 16px }
.cms-kpi { position: relative; background: var(--pflaume); border: 1px solid var(--linie);
  border-radius: var(--radius); padding: 15px 16px 14px; display: grid; gap: 2px }
.cms-kpi .sym { position: absolute; top: 14px; right: 14px; width: 34px; height: 34px; border-radius: 10px;
  background: var(--pflaume-hell); display: grid; place-items: center }
.cms-kpi .sym svg { width: 17px; height: 17px; fill: none; stroke: var(--nebel); stroke-width: 1.7;
  stroke-linecap: round; stroke-linejoin: round }
.cms-kpi.gut .sym { background: color-mix(in srgb, var(--korall) 18%, transparent) }
.cms-kpi.gut .sym svg { stroke: var(--korall) }
.cms-kpi .wert { font-size: 1.85rem; font-weight: 800; line-height: 1.1; font-variant-numeric: tabular-nums;
  letter-spacing: -.02em; padding-right: 42px }
.cms-kpi .bez { color: var(--nebel); font-size: .86rem; font-weight: 600 }
.cms-kpi .unten { color: var(--nebel); font-size: .78rem; margin-top: 4px; min-height: 1.1em }
.cms-kpi .unten b { color: var(--minze-schrift); font-weight: 700 }

/* ── Boxen ── */
.cms-zwei { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px; margin-bottom: 16px }
.cms-box { background: var(--pflaume); border: 1px solid var(--linie); border-radius: var(--radius); padding: 15px 16px }
/* 28.10.2026 (Pruefbefund 8): ohne Umbruch ragten am Handy «Verlauf löschen» (MEE Pro, rechter Rand 452 px bei 390 px) und
   «Exportieren» (Dashboard, 403 px) aus dem Bild — die Seite rollt nicht seitwaerts, also unerreichbar. Jetzt rutschen sie in eine zweite Zeile. */
.cms-box > header { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; row-gap: 8px; margin-bottom: 12px }
.cms-box > header h3 { margin: 0; font-size: .98rem }
.cms-mehr { margin-left: auto; color: var(--nebel); font-size: .82rem; font-weight: 600; text-decoration: none }
.cms-mehr:hover { color: var(--milch) }
.cms-geld { display: grid; gap: 10px }
.cms-geld > div { display: grid; grid-template-columns: 1fr auto; align-items: baseline; gap: 2px 12px;
  padding-bottom: 9px; border-bottom: 1px solid var(--linie) }
.cms-geld > div:last-child { border: 0; padding-bottom: 0 }
.cms-geld span { color: var(--nebel); font-size: .88rem; font-weight: 600 }
.cms-geld b { font-size: 1.12rem; font-variant-numeric: tabular-nums; text-align: right }
.cms-geld small { grid-column: 1 / -1; color: var(--nebel); font-size: .76rem }
.cms-geld .hervor b { background: var(--verlauf); -webkit-background-clip: text; background-clip: text;
  color: transparent; font-size: 1.32rem; font-weight: 800 }

.cms-lauf { display: grid; gap: 1px }
.cms-lauf .z { display: grid; grid-template-columns: 30px 1fr auto; align-items: center; gap: 10px; padding: 8px 0;
  border-bottom: 1px solid var(--linie) }
.cms-lauf .z:last-child { border: 0 }
.cms-lauf .z i { width: 30px; height: 30px; border-radius: 99px; background: var(--pflaume-hell);
  display: grid; place-items: center; font-style: normal; font-size: .82rem; color: var(--nebel) }
.cms-lauf .z.gut i { background: color-mix(in srgb, var(--minze) 20%, transparent); color: var(--minze-schrift) }
.cms-lauf .z b { font-weight: 600; font-size: .9rem } .cms-lauf .z small { display: block; color: var(--nebel); font-size: .78rem }
.cms-lauf .z em { font-style: normal; color: var(--nebel); font-size: .78rem; white-space: nowrap;
  font-variant-numeric: tabular-nums }

/* Die uebrigen Abschnitte sitzen jetzt in der Arbeitsflaeche */
.cms-flaeche .ticket { margin-top: 0 }
.cms-flaeche > h2 { margin-top: 0 }
.cms-flaeche > h2 ~ h2, .cms-flaeche > h3 { margin-top: 1.4em }

@media (max-width: 980px) {
  .cms { grid-template-columns: minmax(0, 1fr) }
  .cms-menue { display: block }
  .cms-seite { position: fixed; inset: 0 auto 0 0; width: 264px; z-index: 40; transform: translateX(-100%);
    transition: transform .22s ease; box-shadow: var(--cms-schatten); overflow-y: auto }
  .cms-seite.offen { transform: none }
  /* 15.10. (Owner-Bild: Text der Seite stand mitten in den Menueeintraegen): die Schublade liegt UEBER der Seite und darf
     nie durchscheinen. --pflaume ist nicht immer deckend — saison_halloween.css setzt sie auf rgba(…, .80) («dunkles Glas»),
     gemessen bg-alpha 0.8, und damit schien die ganze Flaeche durch. Darum: deckender Grund (--nacht) und --pflaume als
     Schicht darueber — in Hell/Dunkel sieht das genau gleich aus wie vorher, in jedem Glas-Thema bleibt die Schublade dicht. */
  .cms-seite { background-color: var(--nacht); background-image: linear-gradient(var(--pflaume), var(--pflaume)) }
  body.hat-tableiste .cms-seite { padding-bottom: calc(86px + env(safe-area-inset-bottom, 0px)) }   /* 15.10.: Tab-Leiste unten deckte das Schubladen-Ende (Weg zur Auszahlung) ab */
  /* Tinu-Mini (z 60), sein Licht-Zeiger und der Ecken-Knopf (z 58) liegen sonst UEBER der offenen Schublade und fangen die
     Tipps auf die Eintraege ab (elementFromPoint: p.tinu-text statt Menueeintrag). Solange sie offen ist: weg; zu = wieder da. */
  body:has(.cms-seite.offen) :is(.tinu, .tinu-ecke, .tinu-zeiger) { visibility: hidden }
  .cms-schatten { position: fixed; inset: 0; background: var(--cms-schleier); z-index: 30 }
  .cms-zwei { grid-template-columns: minmax(0, 1fr) }
  .cms-kopf-rechts .cms-code, .cms-kopf-rechts #kopieren-kopf { display: none }
  .cms-titel h1 { font-size: 1.1rem } .cms-titel p { display: none }
}
@media (prefers-reduced-motion: reduce) { .cms-seite { transition: none } }

/* ══ Promoter-CMS, zweiter Durchgang (Owner 25.09., nach den vier Bildern von structura-os.com/funktionen)
   Gemessen an Bild 1 (Dashboard), Bild 2 (Strukturbaum mit Detail-Panel), Bild 4 (Voice-Panel):
   · die App ist DUNKEL, auch wenn die Website hell ist — eine Arbeitsflaeche, kein Prospekt
   · Kopfzeile traegt eine zweite Navigationsebene, Suche, Glocke, Hilfe, Konto
   · Kennzahlen: Symbol LINKS, Delta in Gruen neben der Zahl, darunter «vs. letzter Monat», rechts eine Kurve
   · Diagramm mit Achsen und Zeitraumwahl, Aktivitaeten mit Fusszeile, Top-Liste, Ring nach Stand
   · Struktur als gezeichneter Baum mit Verbindungslinien und einem Detail-Panel rechts
   Farben bleiben MEEYO: Nacht, Pflaume, Korall→Violett, Minze. ═════════════════════════════════════════ */

/* 25.09., zweiter Anlauf: die App faerbte sich selbst dunkel — das war falsch. Owner: «hell und dunkel
   muss auch über alle seiten gehen». Die Wahl oben rechts gilt ueberall, auch hier. Die Flaeche nimmt
   darum nur noch eine Nuance dunkler bzw. heller als die Seite, aus denselben Tokens; eigene Farbwerte
   stehen hier keine mehr. Der Schatten ist die einzige Ausnahme und wird je Thema gesetzt — ein schwarzer
   Schlagschatten auf hellem Grund sieht aus wie Dreck, ein heller auf dunklem ist unsichtbar. */
body.cms-an { --cms-schatten: 0 18px 44px rgba(0,0,0,.5); --cms-schleier: rgba(6,2,10,.55) }
:root[data-theme="light"] body.cms-an { --cms-schatten: 0 14px 38px rgba(60,20,90,.16); --cms-schleier: rgba(40,16,60,.35) }
body.cms-an .kopf { background: var(--nacht); border-bottom: 1px solid var(--linie) }
body.cms-an .karte, body.cms-an .rechner, body.cms-an .satz, body.cms-an .mat,
body.cms-an .paket, body.cms-an .schritt, body.cms-an .pr-schritte div { box-shadow: none }

/* ── Kopfzeile ───────────────────────────────────────────────────────────────────────────────── */
/* 27.09. (Owner: «das ? und die Glocke müssen im ganzen Promoter-Bereich ersichtlich sein»):
   `.cms-reiter` ist ein <nav>, und die globale Regel `nav { flex-wrap: wrap }` griff darauf durch.
   Zusammen mit `flex: 1; min-width: 0` wurde die Leiste bei schmalen Fenstern auf 62 px gequetscht
   und stapelte acht Reiter UNTEREINANDER — die Kopfzeile war dann 400 px hoch (gemessen bei 1024 px).
   `nowrap` lässt sie stattdessen seitlich scrollen, wofür `overflow-x: auto` schon da war. */
.cms-reiter { display: flex; flex-wrap: nowrap; gap: 2px; margin-left: 4px; flex: 1 1 auto; min-width: 0;
  overflow-x: auto; scrollbar-width: none }
.cms-reiter a { flex: 0 0 auto }   /* sonst schrumpfen die Reiter, statt zu scrollen */
.cms-reiter::-webkit-scrollbar { display: none }
.cms-reiter a { position: relative; padding: 16px 14px; color: var(--nebel); text-decoration: none;
  font-weight: 600; font-size: .93rem; white-space: nowrap }
.cms-reiter a:hover { color: var(--milch) }
.cms-reiter a.an { color: var(--milch) }
.cms-reiter a.an::after { content: ""; position: absolute; left: 12px; right: 12px; bottom: -1px; height: 2px;
  border-radius: 2px 2px 0 0; background: var(--verlauf) }
.cms-werkzeuge { display: flex; align-items: center; gap: 8px; margin-left: auto }
.cms-suche { position: relative; display: flex; align-items: center }
.cms-suche svg { position: absolute; left: 11px; width: 16px; height: 16px; fill: none; stroke: var(--nebel);
  stroke-width: 1.8; stroke-linecap: round; pointer-events: none }
.cms-suche input { width: 260px; padding: 9px 12px 9px 34px; border-radius: 10px; font-size: .88rem;
  background: var(--pflaume); border: 1px solid var(--linie) }
.cms-rund { position: relative; width: 36px; height: 36px; display: grid; place-items: center; flex: none;
  border-radius: 10px; border: 1px solid var(--linie); background: var(--pflaume); color: var(--nebel); padding: 0 }
.cms-rund:hover { color: var(--milch) }
/* 19.10.2026 (Owner: «Problem melden» fehlt): fester Knopf in der Kopfzeile neben Glocke und «?» — am Handy nur das Zeichen,
   ab 1380 px mit Text. Akzentfarbe, damit er nicht wie ein weiteres graues Symbol untergeht. */
.cms-problem-knopf { color: var(--korall-schrift); text-decoration: none }
.cms-problem-text { display: none }
@media (min-width: 1380px) {
  .cms-rund.cms-problem-knopf { width: auto; display: inline-flex; gap: 7px; padding: 0 12px; font-size: .84rem; font-weight: 700; white-space: nowrap }
  .cms-problem-text { display: inline }
}
/* 17.10.2026 (Owner: «mein Bild oben rechts im Admin»): das Tinu-Portraet (256 px) lag ungebremst ueber dem 36-px-Knopf */
.cms-rund img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 9px }   /* kein overflow:hidden — der Zaehlerpunkt (.cms-punkt) ragt bewusst heraus */
.cms-rund svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.7;
  stroke-linecap: round; stroke-linejoin: round }
.cms-punkt { position: absolute; top: -5px; right: -5px; min-width: 17px; height: 17px; padding: 0 4px;
  border-radius: 99px; background: var(--korall); color: #fff; font-size: .66rem; font-weight: 800;
  font-style: normal; display: grid; place-items: center; border: 2px solid var(--nacht) }
.cms-ich { display: inline-flex; align-items: center; gap: 9px; padding: 4px 10px 4px 4px; border-radius: 99px;
  background: var(--pflaume); border: 1px solid var(--linie); color: var(--milch); text-align: left }
.cms-ich i { width: 30px; height: 30px; border-radius: 99px; background: var(--verlauf); color: #fff; flex: none;
  display: grid; place-items: center; font-style: normal; font-weight: 800; font-size: .78rem }
.cms-ich b { display: block; font-size: .85rem; line-height: 1.15; font-weight: 700 }
.cms-ich small { display: block; color: var(--nebel); font-size: .72rem; line-height: 1.15 }

.cms-hinweise { margin: 0 clamp(16px, 2.4vw, 30px); margin-top: 14px; background: var(--pflaume);
  border: 1px solid var(--linie); border-radius: var(--radius); padding: 10px 14px }
.cms-hinweise .z { display: grid; grid-template-columns: 1fr auto; gap: 2px 12px; padding: 7px 0;
  border-bottom: 1px solid var(--linie); font-size: .9rem }
.cms-hinweise .z:last-child { border: 0 } .cms-hinweise em { font-style: normal; color: var(--nebel); font-size: .8rem }

/* ── Kennzahlen: Symbol links, Delta, Kurve (Bild 1) ─────────────────────────────────────────── */
.cms-kpi { grid-template-columns: 44px minmax(0, 1fr) auto;
  grid-template-areas: "sym kopf kopf" "sym wert kurve" "sym unten kurve";
  align-items: center; gap: 0 12px; padding: 16px }
.cms-kpi .sym { position: static; grid-area: sym; width: 44px; height: 44px; border-radius: 13px; align-self: start }
.cms-kpi .sym svg { width: 20px; height: 20px }
.cms-kpi .bez { grid-area: kopf; order: 0; display: flex; align-items: center; gap: 5px }
.cms-kpi .bez .i { width: 13px; height: 13px; border-radius: 99px; border: 1px solid var(--nebel); color: var(--nebel);
  font-size: .58rem; font-weight: 800; display: inline-grid; place-items: center; font-style: normal; cursor: help }
.cms-kpi .wert { grid-area: wert; padding: 0; display: flex; align-items: baseline; gap: 8px;
  font-size: clamp(1.25rem, 1.9vw, 1.7rem); flex-wrap: wrap; white-space: nowrap }
.cms-kpi .delta { font-size: .8rem; font-weight: 700; color: var(--minze-schrift) }
.cms-kpi .delta.minus { color: var(--korall-schrift) }
.cms-kpi .unten { grid-area: unten; margin: 0 }
.cms-kpi .kurve { grid-area: kurve; align-self: end; width: 84px; height: 32px; opacity: .9; margin-bottom: 2px }
.cms-kpi .kurve path { fill: none; stroke: var(--korall); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round }
.cms-kpi .kurve .flaeche { fill: url(#kpiVerlauf); stroke: none }

/* ── Diagramm (Bild 1: Partnerwachstum) ──────────────────────────────────────────────────────── */
.cms-zwei-breit { grid-template-columns: minmax(0, 1.75fr) minmax(0, 1fr) }
.cms-wahl { width: auto; padding: 7px 10px; font-size: .82rem; border-radius: 9px; background: var(--pflaume-hell);
  border: 1px solid var(--linie); margin-left: auto }
.cms-flach { background: var(--pflaume-hell); color: var(--milch); border: 1px solid var(--linie);
  border-radius: 9px; padding: 7px 12px; font-size: .82rem; font-weight: 600; display: inline-flex;
  align-items: center; gap: 6px }
.cms-flach svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round }
.cms-reihe-wahl { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 10px }
.cms-reihe-wahl button { background: transparent; color: var(--nebel); border: 1px solid var(--linie);
  border-radius: 99px; padding: 5px 12px; font-size: .8rem; font-weight: 600 }
.cms-reihe-wahl button.an { background: var(--verlauf); color: #fff; border-color: transparent }
.cms-diagramm { position: relative }
.cms-diagramm svg { width: 100%; height: 260px; display: block; overflow: visible }
.cms-diagramm .netz { stroke: var(--linie); stroke-width: 1 }
.cms-diagramm .achse { fill: var(--nebel); font-size: 11px; font-variant-numeric: tabular-nums }
.cms-diagramm rect.saeule { fill: url(#saeuleVerlauf); rx: 4 }
.cms-diagramm rect.saeule:hover { fill: var(--korall) }
.cms-diagramm rect.treffer { fill: transparent; cursor: pointer }
.cms-wolke { position: absolute; pointer-events: none; background: var(--pflaume-hell); border: 1px solid var(--linie);
  border-radius: 10px; padding: 7px 11px; font-size: .82rem; white-space: nowrap; transform: translate(-50%, -115%);
  box-shadow: var(--cms-schatten) }
.cms-wolke b { display: block; font-size: .95rem } .cms-wolke em { font-style: normal; color: var(--nebel) }

/* ── Aktivitaeten mit Fusszeile (Bild 1: Letzte Aktivitäten) ─────────────────────────────────── */
.cms-lauf .z { grid-template-columns: 34px 1fr auto auto; gap: 11px }
.cms-lauf .z i { width: 34px; height: 34px; font-size: .78rem; font-weight: 700 }
.cms-lauf .z .sym-rechts { width: 20px; height: 20px; fill: none; stroke: var(--nebel); stroke-width: 1.7;
  stroke-linecap: round; stroke-linejoin: round }
.cms-fussknopf { display: flex; align-items: center; justify-content: space-between; margin-top: 12px;
  padding: 10px 14px; border-radius: 10px; background: var(--pflaume-hell); border: 1px solid var(--linie);
  color: var(--milch); text-decoration: none; font-size: .86rem; font-weight: 600 }
.cms-fussknopf:hover { border-color: var(--korall) } .cms-fussknopf span { color: var(--nebel) }

/* ── Top-Liste und Ring (Bild 1: Top Partner / Pipeline nach Status) ─────────────────────────── */
.cms-top { width: 100%; border-collapse: collapse; font-size: .9rem }
.cms-top th { text-align: left; color: var(--nebel); font-weight: 600; font-size: .8rem; padding: 0 8px 8px }
.cms-top td { padding: 9px 8px; border-top: 1px solid var(--linie); vertical-align: middle }
.cms-top td.zahl, .cms-top th.zahl { text-align: right; font-variant-numeric: tabular-nums }
.cms-top .rang { color: var(--nebel); width: 18px }
.cms-top .wer { display: flex; align-items: center; gap: 9px }
.cms-top .wer i { width: 28px; height: 28px; border-radius: 99px; background: var(--pflaume-hell); flex: none;
  display: grid; place-items: center; font-style: normal; font-size: .72rem; font-weight: 800; color: var(--milch) }
.cms-ring { display: grid; grid-template-columns: 140px 1fr; align-items: center; gap: 18px }
.cms-ring svg { width: 140px; height: 140px }
.cms-ring .legende { display: grid; gap: 9px; font-size: .88rem }
.cms-ring .legende div { display: grid; grid-template-columns: 11px 1fr auto auto; align-items: center; gap: 10px }
.cms-ring .legende i { width: 11px; height: 11px; border-radius: 99px }
.cms-ring .legende b { font-variant-numeric: tabular-nums; font-weight: 700 }
.cms-ring .legende em { font-style: normal; color: var(--nebel); font-variant-numeric: tabular-nums; min-width: 42px; text-align: right }

/* ── Strukturbaum mit Detail-Panel (Bild 2) ──────────────────────────────────────────────────── */
.cms-mitdetail { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 14px; align-items: start }
.cms-leiste { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px }
.cms-leiste .cms-suche input { width: 220px }
.cms-zoom { display: inline-flex; align-items: center; gap: 2px; border: 1px solid var(--linie);
  border-radius: 10px; background: var(--pflaume); padding: 2px }
.cms-zoom button { background: transparent; color: var(--milch); padding: 5px 9px; font-size: .95rem; line-height: 1 }
.cms-zoom span { color: var(--nebel); font-size: .8rem; min-width: 42px; text-align: center; font-variant-numeric: tabular-nums }
.cms-baum { position: relative; overflow: auto; background: var(--nacht); border: 1px solid var(--linie);
  border-radius: var(--radius); padding: 24px 18px; min-height: 340px }
.cms-baum-innen { transform-origin: top center; display: inline-block; min-width: 100% }
.cms-ebene { display: flex; justify-content: center; gap: 26px; flex-wrap: wrap }
.cms-knoten { display: grid; justify-items: center; gap: 6px; position: relative }
.cms-knoten > button { background: transparent; border: 0; padding: 0; display: grid; justify-items: center; gap: 6px; color: inherit }
.cms-knoten .bild { width: 62px; height: 62px; border-radius: 99px; background: var(--pflaume-hell);
  border: 2px solid var(--korall); display: grid; place-items: center; font-weight: 800; font-size: 1.05rem }
.cms-knoten.gelb .bild { border-color: #ffd166 } .cms-knoten.rot .bild { border-color: var(--rot) }
.cms-knoten.ruhend .bild { border-color: var(--nebel) } .cms-knoten.du .bild { border-color: var(--violett); box-shadow: 0 0 0 4px rgba(139,61,255,.22) }
.cms-knoten.gewaehlt .bild { box-shadow: 0 0 0 4px rgba(255,79,122,.28) }
.cms-knoten .nm { font-weight: 700; font-size: .88rem } .cms-knoten .id { color: var(--nebel); font-size: .76rem }
.cms-verbindung { stroke: var(--linie); stroke-width: 1.5; fill: none }
.cms-verbindung circle { fill: var(--korall); stroke: none }

.cms-detail { position: sticky; top: 76px; background: var(--pflaume); border: 1px solid var(--linie);
  border-radius: var(--radius); padding: 16px }
.cms-detail > header { display: flex; align-items: center; margin-bottom: 14px }
.cms-detail > header h3 { margin: 0; font-size: .98rem } .cms-detail .zu { margin-left: auto; background: transparent; color: var(--nebel); padding: 2px 6px }
.cms-detail .wer { display: grid; justify-items: center; gap: 6px; margin-bottom: 16px }
.cms-detail .wer .bild { width: 74px; height: 74px; border-radius: 99px; background: var(--pflaume-hell);
  border: 2px solid var(--korall); display: grid; place-items: center; font-weight: 800; font-size: 1.3rem }
.cms-detail .wer b { font-size: 1.05rem } .cms-detail .wer code { color: var(--nebel); font-size: .8rem }
.cms-detail .pille { padding: 3px 11px; border-radius: 99px; font-size: .74rem; font-weight: 700;
  background: color-mix(in srgb, var(--minze) 18%, transparent); color: var(--minze-schrift) }
.cms-detail .pille.gelb { background: rgba(255,209,102,.16); color: #ffd166 }
.cms-detail .pille.rot { background: rgba(255,107,107,.16); color: var(--rot) }
.cms-detail .pille.ruhend { background: var(--pflaume-hell); color: var(--nebel) }
.cms-detail dl { display: grid; gap: 12px; margin: 0 }
.cms-detail dt { color: var(--nebel); font-size: .78rem } .cms-detail dd { margin: 2px 0 0; font-weight: 600; font-size: .92rem }
.cms-detail .leer { color: var(--nebel); font-size: .88rem; text-align: center; padding: 28px 8px }

@media (max-width: 1180px) {
  .cms-suche input { width: 170px }
  .cms-zwei-breit { grid-template-columns: minmax(0, 1fr) }
  .cms-mitdetail { grid-template-columns: minmax(0, 1fr) }
  .cms-detail { position: static }
}
/* Reiter oder Titel — nie beides und nie ein Rest (27.09., Owner: «das ? und die Glocke müssen im
   ganzen Promoter-Bereich ersichtlich sein»).

   GEMESSEN, NICHT GESCHAETZT. Mit sichtbarem Suchfeld passen die acht Reiter erst ab 1920 px
   nebeneinander: 1800 px → 7, 1700 px → 6, 1600 px → 5. Der Rollbalken der Leiste ist ausgeblendet,
   es gibt also nicht einmal einen Hinweis darauf, dass da noch etwas waere. Eine Leiste, die mehr
   verbirgt als sie zeigt, ist schlechter als keine.

   Die Reiter sind ausserdem ein Duplikat der Seitenleiste — die Suche ist es nicht. Darum weicht die
   Reiterreihe und nicht das Suchfeld: unterhalb von 1900 px steht der Titel, navigiert wird links.

   Beide Grenzen kommen aus DERSELBEN Zahl; vorher standen 980 und 981 an zwei Orten und mussten von
   Hand zusammenpassen. */
@media (max-width: 1900px) {
  .cms-reiter { display: none }
}
@media (min-width: 1901px) { .cms-titel { display: none } }
@media (max-width: 980px) {
  .cms-werkzeuge .cms-code, .cms-ich span { display: none }
  .cms-ring { grid-template-columns: minmax(0, 1fr) }
  .cms-ring svg { margin: 0 auto }
}

/* ── Strukturbaum: Verbindungslinien aus CSS (Bild 2) ────────────────────────────────────────────
   Jeder Knoten zieht eine halbe Waagrechte nach links und rechts und eine Senkrechte nach oben;
   der erste laesst links weg, der letzte rechts. So entsteht die Klammer ueber den Geschwistern,
   ohne dass irgendwo eine Koordinate ausgerechnet wird — der Baum haelt bei jeder Schriftgroesse. */
.cms-baum ul { display: flex; justify-content: center; list-style: none; margin: 0; padding: 26px 0 0; position: relative }
.cms-baum ul.ob { padding-top: 0 }
.cms-baum ul:not(.ob)::before { content: ""; position: absolute; top: 0; left: 50%; height: 26px; border-left: 1.5px solid var(--linie) }
.cms-baum li { position: relative; padding: 26px 10px 0; display: flex; flex-direction: column; align-items: center }
.cms-baum ul.ob > li { padding-top: 0 }
.cms-baum li::before, .cms-baum li::after { content: ""; position: absolute; top: 0; width: 50%; height: 26px; border-top: 1.5px solid var(--linie) }
.cms-baum li::before { right: 50% } .cms-baum li::after { left: 50%; border-left: 1.5px solid var(--linie) }
.cms-baum ul.ob > li::before, .cms-baum ul.ob > li::after { display: none }
.cms-baum li:first-child::before { border: 0 } .cms-baum li:last-child::after { border-top: 0 }
.cms-baum li:only-child::before { border: 0 }
.cms-baum li:last-child::before { border-right: 1.5px solid var(--linie); border-radius: 0 7px 0 0 }
.cms-baum li:first-child::after { border-radius: 7px 0 0 0 }
.cms-baum li:only-child::after { border-radius: 0; border-top: 0 }

.cms-knoten .zst { color: var(--nebel); font-size: .74rem } .cms-knoten .zst b { color: var(--milch) }
.cms-knoten.blass { opacity: .28 }
.cms-knoten > button { cursor: pointer; padding: 6px 8px; border-radius: 12px }
.cms-knoten > button:hover { background: var(--pflaume) }
.cms-detail .wer .bild.gelb { border-color: #ffd166 } .cms-detail .wer .bild.rot { border-color: var(--rot) }
.cms-detail .wer .bild.ruhend, .cms-detail .wer .bild.unbekannt { border-color: var(--nebel) }

.cms-sichten { display: flex; gap: 4px; margin-left: auto; background: var(--pflaume-hell);
  border: 1px solid var(--linie); border-radius: 10px; padding: 3px }
.cms-sichten button { background: transparent; color: var(--nebel); padding: 5px 13px; font-size: .82rem;
  font-weight: 600; border-radius: 7px }
.cms-sichten button.an { background: var(--verlauf); color: #fff }

/* Foto im Kreis (Owner 25.09.: «kannst du die fotos anzeigen bei dein team im kreis der promoter?»).
   Die Initialen bleiben als Unterlage: solange das Bild laedt — und dauerhaft, wo keines freigegeben ist. */
.cms-knoten .bild, .cms-detail .wer .bild { position: relative; overflow: hidden }
.cms-knoten .bild img, .cms-detail .wer .bild img { position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; border-radius: 99px }
.cms-knoten .bild em, .cms-detail .wer .bild em { font-style: normal }
.cms-detail .cms-fussknopf { margin-top: 16px }
.cms-detail dd a { color: var(--korall-schrift); text-decoration: none; word-break: break-word }
.cms-detail dd a:hover { text-decoration: underline }

/* Zweite Waehrung neben dem Guthaben — kleiner und grau, damit klar bleibt, welche Zahl die echte ist. */
.cms-zweit { grid-column: 1 / -1; text-align: right; color: var(--nebel); font-size: .76rem;
  font-variant-numeric: tabular-nums }

/* MEE Pro — eigenes Gesicht, damit niemand es mit MEE fuer Kunden verwechselt: das «Pro»-Zeichen im Titel,
   und die Blase des Nutzers rechts im Verlauf, wie man es aus jedem Chat kennt. */
.mp-zeichen { display: inline-grid; place-items: center; min-width: 34px; height: 21px; padding: 0 7px;
  border-radius: 6px; background: var(--verlauf); color: #fff; font-size: .68rem; font-weight: 800;
  letter-spacing: .06em; margin-right: 7px; vertical-align: 2px }
.mp-lauf { display: grid; gap: 9px; max-height: 46vh; overflow-y: auto; padding: 6px 2px; margin: 10px 0 }
.mp-z { max-width: 76%; padding: 10px 13px; border-radius: 14px; font-size: .93rem; line-height: 1.5 }
.mp-z.du { justify-self: end; background: var(--verlauf); color: #fff; border-bottom-right-radius: 5px }
.mp-z.mee { justify-self: start; background: var(--pflaume-hell); border-bottom-left-radius: 5px }
.mp-z.mp-denkt { color: var(--nebel) }
.mp-vorschlaege { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 10px }
.mp-vorschlaege button { background: transparent; color: var(--nebel); border: 1px solid var(--linie);
  border-radius: 99px; padding: 7px 13px; font-size: .84rem; font-weight: 500; text-align: left }
.mp-vorschlaege button:hover { color: var(--milch); border-color: var(--korall) }
.mp-eingabe { display: flex; gap: 8px } .mp-eingabe input { flex: 1 }

/* MEE Pro spricht: Mikrofonknopf links im Eingabefeld, Lautsprecher-Schalter in der Kopfzeile.
   Der Punkt im Mikrofon pulsiert waehrend der Aufnahme — ohne dieses Zeichen weiss niemand, ob es laeuft. */
.mp-mikro { width: 42px; flex: none; background: var(--pflaume-hell); color: var(--milch); border: 1px solid var(--linie);
  border-radius: 11px; padding: 0; position: relative }
.mp-mikro::before { content: ""; display: block; width: 11px; height: 17px; margin: 0 auto; border-radius: 99px;
  background: currentColor }
.mp-mikro::after { content: ""; position: absolute; left: 50%; bottom: 7px; transform: translateX(-50%);
  width: 17px; height: 7px; border: 2px solid currentColor; border-top: 0; border-radius: 0 0 11px 11px }
.mp-mikro.an { background: var(--verlauf); color: #fff; border-color: transparent; animation: mpPuls 1.1s infinite }
@keyframes mpPuls { 50% { opacity: .55 } }
@media (prefers-reduced-motion: reduce) { .mp-mikro.an { animation: none } }
.mp-stimme { display: flex; align-items: center; gap: 6px; margin-left: auto }
.mp-stimme button { background: var(--pflaume-hell); color: var(--nebel); border: 1px solid var(--linie);
  border-radius: 9px; padding: 7px 12px; font-size: .82rem; font-weight: 600 }
.mp-stimme button.an { background: var(--verlauf); color: #fff; border-color: transparent }
.mp-stimme select { width: auto; padding: 7px 10px; font-size: .82rem; border-radius: 9px; background: var(--pflaume-hell) }
.mp-stimme + .cms-flach { margin-left: 0 }
body.mee-spricht .mp-zeichen { animation: mpPuls 1.1s infinite }

/* Die Seitenleiste im Admin ist aus Knoepfen — sie sollen aussehen und sich verhalten wie die Verweise
   im Promoter-Portal, nicht wie Formularknoepfe. */
.cms-nav button { width: 100%; text-align: left; background: transparent; font: inherit; font-weight: 600;
  font-size: .93rem; cursor: pointer }
.cms-nav button .zahl-pille { margin-left: auto }
body.cms-an .admin-bereich > .karte:first-child { margin-top: 0 }
body.cms-an .erklaer { background: var(--pflaume); border: 1px solid var(--linie); border-radius: var(--radius);
  padding: 12px 16px; margin-bottom: 14px }

/* Team-Chat: links wer, rechts der Strang — wie jedes Postfach, damit niemand es erklaeren muss. */
/* Owner 27.09.: «der Chat, also das Chat-Fenster, länger — also der Seite angepasst».
   Gemessen war die Personenliste 493 px hoch und der Gesprächsverlauf 220 (sein `min-height`, weil
   noch nichts drinsteht). Nebeneinander sah das aus wie ein kleiner Kasten neben einer langen Liste.
   Jetzt teilen sich beide Spalten EINE Höhe, die vom Fenster kommt: `clamp` hält sie zwischen 420 px
   (auf kleinen Schirmen noch brauchbar) und 760 px (auf grossen wird ein Chat nicht sinnvoller, nur
   länger). `min-height: 0` ist dabei kein Beiwerk — ohne das weigert sich ein Grid- oder Flex-Kind,
   kleiner als sein Inhalt zu werden, und dann scrollt nicht der Kasten, sondern die ganze Seite. */
.tc-raster { display: grid; grid-template-columns: minmax(0, 300px) minmax(0, 1fr); gap: 14px;
  align-items: stretch; height: clamp(420px, 62vh, 760px) }
.tc-liste { display: grid; gap: 2px; align-content: start; min-height: 0; overflow-y: auto; padding-right: 4px }
.tc-p { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; gap: 10px;
  width: 100%; text-align: left; background: transparent; color: inherit; padding: 9px 10px; border-radius: 11px }
.tc-p:hover { background: var(--pflaume-hell) }
.tc-p.an { background: var(--pflaume-hell) } .tc-p.an b { color: var(--korall-schrift) }
.tc-p i { width: 34px; height: 34px; border-radius: 99px; background: var(--verlauf); color: #fff; flex: none;
  display: grid; place-items: center; font-style: normal; font-weight: 800; font-size: .76rem }
.tc-p b { font-size: .92rem; font-weight: 700 }
.tc-p em { font-style: normal; font-size: .68rem; font-weight: 800; letter-spacing: .06em; text-transform: uppercase;
  color: var(--violett); margin-left: 5px }
.tc-p small { display: block; color: var(--nebel); font-size: .8rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
.tc-rechts { display: grid; justify-items: end; gap: 4px } .tc-rechts em { color: var(--nebel); font-size: .72rem }
.tc-punkt { min-width: 19px; height: 19px; padding: 0 5px; border-radius: 99px; background: var(--korall);
  color: #fff; font-size: .68rem; font-weight: 800; font-style: normal; display: grid; place-items: center }
.tc-strang { border: 1px solid var(--linie); border-radius: var(--radius); background: var(--nacht);
  padding: 12px 14px; display: flex; flex-direction: column; min-height: 0 }
.tc-kopf { padding-bottom: 10px; border-bottom: 1px solid var(--linie); margin-bottom: 10px }
.tc-kopf code { color: var(--nebel); font-size: .8rem; margin-left: 6px }
.tc-lauf { display: grid; gap: 9px; align-content: start; flex: 1 1 auto; min-height: 0;
  overflow-y: auto; margin-bottom: 10px }
.tc-lauf .mp-z { position: relative; padding-bottom: 20px }
.tc-wann { position: absolute; right: 11px; bottom: 5px; font-size: .68rem; opacity: .7 }
/* Untereinander gibt es keine gemeinsame Höhe mehr — dann bekommt jede ihre eigene, sonst wären
   beide zusammen höher als der Bildschirm und man scrollt an der Liste vorbei zum Chat. */
@media (max-width: 900px) { .tc-raster { grid-template-columns: minmax(0, 1fr); height: auto }
  .tc-liste { max-height: 34vh } .tc-lauf { min-height: 300px; max-height: 50vh } }

/* Was die Punkte in Geld wert sind — neben dem Stand, aber leiser: die Punktzahl ist die Hauptsache. */
.lx-wert { color: var(--nebel); font-size: 1rem; font-weight: 700; font-variant-numeric: tabular-nums }
.lx-wert::before { content: "≈ " }
.lx-erklaer { margin-top: 6px }

/* Trefferliste unter dem Suchfeld — Tastatur zuerst: Pfeile waehlen, Enter springt. */
.cms-treffer { position: absolute; top: calc(100% + 6px); left: 0; right: 0; z-index: 20; min-width: 300px;
  background: var(--pflaume); border: 1px solid var(--linie); border-radius: 12px; padding: 5px;
  box-shadow: var(--cms-schatten); max-height: 60vh; overflow-y: auto }
.cms-treffer button { display: grid; grid-template-columns: auto 1fr; grid-template-areas: "art titel" "art unter";
  gap: 0 10px; width: 100%; text-align: left; background: transparent; color: inherit; padding: 8px 10px;
  border-radius: 9px; font-weight: 500 }
.cms-treffer button:hover, .cms-treffer button.an { background: var(--pflaume-hell) }
.cms-treffer .art { grid-area: art; align-self: center; font-size: .64rem; font-weight: 800; letter-spacing: .07em;
  text-transform: uppercase; color: var(--nebel); border: 1px solid var(--linie); border-radius: 6px; padding: 3px 6px }
.cms-treffer b { grid-area: titel; font-size: .9rem }
.cms-treffer small { grid-area: unter; color: var(--nebel); font-size: .78rem }

/* Dubletten: zwei Konten nebeneinander, dazwischen der Pfeil — links bleibt, rechts wird aufgeloest. */
.db-paar { border: 1px solid var(--linie); border-radius: var(--radius); padding: 14px 16px; margin-bottom: 14px }
.db-grund { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 12px }
.db-grund span { font-size: .72rem; font-weight: 800; letter-spacing: .05em; text-transform: uppercase;
  padding: 4px 9px; border-radius: 99px; background: var(--verlauf); color: #fff }
.db-zwei { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 12px; align-items: center }
.db-pfeil { color: var(--nebel); font-size: 1.4rem }
.db-konto { background: var(--pflaume-hell); border: 1px solid var(--linie); border-radius: var(--radius-klein); padding: 12px 14px }
.db-konto.bleibt { border-color: var(--minze) } .db-konto.weg { border-color: var(--rot) }
.db-konto b { display: block } .db-konto small { display: block; color: var(--nebel); font-size: .8rem; margin-bottom: 8px; word-break: break-all }
.db-konto ul { margin: 0; padding-left: 16px; font-size: .84rem } .db-konto li { margin: 2px 0 }
.db-knoepfe { display: flex; gap: 8px; flex-wrap: wrap; margin: 12px 0 0 }
@media (max-width: 860px) { .db-zwei { grid-template-columns: minmax(0, 1fr) } .db-pfeil { transform: rotate(90deg) } }

/* Postfach unter der Glocke — schwebt ueber der Flaeche, statt sie zu verschieben. */
.cms-hinweise { position: absolute; right: clamp(16px, 2.4vw, 30px); top: 62px; z-index: 25; width: min(380px, 92vw);
  margin: 0; box-shadow: var(--cms-schatten) }
.cms-hinweise .z { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px;
  width: 100%; text-align: left; background: transparent; color: inherit; padding: 9px 10px; border-radius: 9px;
  border-bottom: 1px solid var(--linie) }
.cms-hinweise .z:last-child { border-bottom: 0 }
.cms-hinweise .z:hover { background: var(--pflaume-hell) }
.cms-hinweise .z b { display: block; font-size: .9rem }
.cms-hinweise .z small { display: block; color: var(--nebel); font-size: .8rem; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap }
.cms-hinweise .z em { font-style: normal; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 99px;
  background: var(--korall); color: #fff; font-size: .7rem; font-weight: 800; display: grid; place-items: center }
.cms-haupt { position: relative }

/* Kuendigungsgruende als Knopfreihe — vorgegeben, nicht getippt (Owner 25.09.). */
.kuend-gruende { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 }
/* 16.10.2026: Kuendigungs-Bestaetigungsseite (§ 312k BGB) und Widerruf — Angaben untereinander, Beleg speicherbar */
.kuend-angaben { display: grid; grid-template-columns: max-content 1fr; gap: 4px 14px; margin: 10px 0 }
.kuend-angaben dt { color: var(--nebel); font-weight: 600 }
.kuend-angaben dd { margin: 0; overflow-wrap: anywhere }
pre.beleg { white-space: pre-wrap; overflow-wrap: anywhere; font: inherit; font-size: .92em; background: var(--pflaume-hell); border: 1px solid var(--linie); border-radius: 10px; padding: 10px 12px }
#widerruf-form label { display: block; margin: 8px 0 }
#widerruf-form input { width: 100%; max-width: 420px }
.kuend-gruende button { background: var(--pflaume-hell); color: var(--milch); border: 1px solid var(--linie);
  border-radius: 99px; padding: 9px 15px; font-size: .9rem; font-weight: 500; text-align: left }
.kuend-gruende button.an { background: var(--verlauf); color: #fff; border-color: transparent; font-weight: 700 }

/* Hauptkategorien der Raeume (Owner 25.09.). Zu, solange nichts angekreuzt ist — 32 Raeume offen
   nebeneinander sind keine Auswahl, sondern eine Wand. Wer schon etwas hat, sieht seine Gruppe offen. */
.kat { border: 1px solid var(--linie); border-radius: var(--radius); margin: 10px 0; overflow: hidden }
.kat.hat { border-color: var(--korall) }
.kat-kopf { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; padding: 14px 16px;
  background: var(--pflaume); color: inherit; border: 0 }
.kat-kopf:hover { background: var(--pflaume-hell) }
.kat-titel { flex: 1; min-width: 0 } .kat-titel b { display: block; font-size: 1rem }
.kat-titel .klein { display: block }
.kat-zahl { color: var(--nebel); font-size: .85rem; font-variant-numeric: tabular-nums }
.kat.hat .kat-zahl { color: var(--korall-schrift); font-weight: 700 }
.kat-pfeil { color: var(--nebel); transition: transform .18s ease }
.kat-kopf[aria-expanded="true"] .kat-pfeil { transform: rotate(180deg) }
.kat-inhalt { padding: 4px 12px 12px; display: grid; gap: 8px }
@media (prefers-reduced-motion: reduce) { .kat-pfeil { transition: none } }

/* Konto-Menue hinter dem Avatar. Der Code-Chip ist jetzt ein Knopf und muss sich auch so anfuehlen. */
.cms-konto { position: relative }
.cms-code { cursor: pointer } .cms-code:hover { border-color: var(--korall) }
.cms-menue-karte { position: absolute; right: 0; top: calc(100% + 8px); z-index: 30; min-width: 190px;
  background: var(--pflaume); border: 1px solid var(--linie); border-radius: 12px; padding: 5px;
  box-shadow: var(--cms-schatten); display: grid; gap: 2px }
.cms-menue-karte a, .cms-menue-karte button { display: block; width: 100%; text-align: left; padding: 9px 12px;
  border-radius: 8px; background: transparent; color: var(--milch); text-decoration: none; font-size: .9rem;
  font-weight: 600; border: 0 }
.cms-menue-karte a:hover, .cms-menue-karte button:hover { background: var(--pflaume-hell) }
.cms-menue-karte button { color: var(--korall-schrift) }

/* Startseite: die sieben Bereiche und die «Du musst nicht alleine»-Zeilen (Owner 25.09.).
   Bewusst ruhig — der Hero traegt die Farbe, hier traegt der Satz. */
/* 27.09. (Owner: «nicht gut fürs Auge, muss alles sauber untereinander sein»): Gemessen hatte die
   Startseite DREI Breiten — die meisten Abschnitte 1339 px ab Kante 50, «Du musst nicht alleine»
   1000 px ab 220, der Wähler 900 px ab 270. Beim Scrollen springt der Text zweimal nach innen und
   wieder heraus, und das sieht man, ohne es benennen zu können.
   Die Abschnitte teilen jetzt die Kante der Seite. Die Lesbarkeit kommt nicht mehr von einem engeren
   ABSCHNITT, sondern von einer Lesebreite auf dem TEXT darin (unten) — so bleibt die Kante gerade und
   die Zeilen trotzdem kurz genug. Das ist derselbe Gedanke wie bei `.mitte` gestern: die Begrenzung
   gehört an den Inhalt, nicht an den Rahmen. */
.begegnung, .allein { margin: 56px auto; padding: 0; text-align: center }
.allein > p, .begegnung > p { max-width: 34em; margin-inline: auto }
/* Owner 26.09.: «schau auf der Startseite wegen den Schriften, dass alles sauber ist».
   Gemessen standen dort DREI H2-Grössen nebeneinander (28,2 · 32 · 35,2 px), zwei davon Einzelfälle aus
   zwei Bauetappen. Eine Seite mit drei Überschriftengrössen liest sich, als hätte sie niemand zu Ende
   gedacht — der Leser sucht nach der Ordnung, die es nicht gibt.
   Die beiden Sonderregeln für .waehler h2 und .allein h2 sind darum ERSATZLOS weg. Sie durch eine feste
   Grösse zu ersetzen war der zweite Fehlversuch: die allgemeine H2-Regel wächst auf grossen Schirmen
   über eine Medienabfrage mit, eine feste Zahl tut das nicht — und dann standen 21,6 gegen 28,2 da.
   Was hervorstechen soll, tut es über Position und Abstand, nicht über eine eigene Zahl. */

.begegnung-raster { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px;
  margin: 26px 0 }
.begegnung-karte { background: var(--pflaume); border: 1px solid var(--linie); border-radius: var(--radius);
  padding: 18px 16px; text-align: left }
.begegnung-karte b { display: block; font-size: 1.02rem; margin-bottom: 4px }
.allein-liste { list-style: none; margin: 22px 0; padding: 0; display: grid; gap: 10px }
.allein-liste li { font-size: clamp(1.05rem, 2.2vw, 1.3rem); font-weight: 600 }
.allein-liste li:last-child { background: var(--verlauf); -webkit-background-clip: text; background-clip: text;
  color: transparent; font-weight: 800 }

/* «Nur Promoter»: die Kundenleiste unten bleibt weg. `[data-nav=an]` wuerde sie sonst wieder einblenden,
   sobald irgendein Code die Navigation neu setzt — darum eine Regel, nicht nur ein `hidden`. */
body.nur-promoter .tab-leiste { display: none !important }

/* Melden im Team-Chat — der Knopf sitzt im Kopf des Strangs, immer erreichbar, nie aufdringlich. */
.tc-kopf { display: flex; align-items: center; gap: 8px }
.tc-melden-knopf { margin-left: auto; background: transparent; color: var(--nebel); border: 1px solid var(--linie);
  border-radius: 8px; padding: 5px 11px; font-size: .78rem; font-weight: 600 }
.tc-melden-knopf:hover { color: var(--rot); border-color: var(--rot) }
.tc-melden { background: var(--pflaume-hell); border: 1px solid var(--rot); border-radius: var(--radius-klein);
  padding: 12px 14px; margin-bottom: 10px }
.tc-melden .chips { margin: 10px 0 }

/* Konto: die vier Wege nebeneinander, und die drei Fragen nach der Kuendigung als Liste mit Knopf. */
.konto-wege { display: flex; flex-wrap: wrap; gap: 8px; align-items: center }
.danach-liste { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 12px }
.danach-liste li { display: grid; gap: 6px; padding-bottom: 12px; border-bottom: 1px solid var(--linie) }
.danach-liste li:last-child { border: 0; padding-bottom: 0 }
.danach-liste b { font-size: .98rem }
.danach-liste button, .danach-liste .knopf { justify-self: start }

/* Waehler auf der Startseite: die Bereiche antworten, statt dazustehen (Owner 25.09.). */
.waehler { margin: 56px auto; padding: 0; text-align: center }
.waehler > p { max-width: 34em; margin-inline: auto }
/* Die Kacheln bleiben in einer lesbaren Breite — aber ZENTRIERT im vollen Abschnitt, nicht
   indem der Abschnitt selbst schmaler wird. Sonst wandert seine Kante wieder nach innen. */
.waehler-knoepfe, .waehler .chips { max-width: 900px; margin-inline: auto }
/* 26.09.: 22 px gegen 21 px bei den Aussagesaetzen — zwei Stufen, die keine sind. Dieselbe Leiter
   wie .allein-liste: was gleich wichtig ist, muss gleich gross sein. */
.waehler-satz { font-size: clamp(1.05rem, 2.2vw, 1.3rem); font-weight: 600; color: var(--nebel);
  max-width: 680px; margin: 0 auto 26px }

.waehler-knoepfe { display: flex; flex-wrap: wrap; gap: 9px; justify-content: center; margin: 22px auto }   /* auto, nicht 0: sonst schlägt diese Zeile das margin-inline:auto weiter oben (gemessen 27.09.: 220 px links) */
.waehler-knopf { background: var(--pflaume); color: var(--milch); border: 1px solid var(--linie);
  border-radius: 99px; padding: 11px 19px; font-size: .96rem; font-weight: 600 }
.waehler-knopf:hover { border-color: var(--korall) }
.waehler-knopf.an { background: var(--verlauf); color: #fff; border-color: transparent }
.waehler-antwort { background: var(--pflaume); border: 1px solid var(--linie); border-radius: var(--radius);
  padding: 22px 20px; text-align: left }
.waehler-beispiel { display: grid; gap: 8px; margin-bottom: 14px }
.waehler-marke { justify-self: start; font-size: .66rem; font-weight: 800; letter-spacing: .1em;
  text-transform: uppercase; color: var(--nebel); border: 1px solid var(--linie); border-radius: 5px; padding: 3px 7px }
.waehler-beispiel p { font-size: clamp(1.02rem, 2.1vw, 1.2rem); font-weight: 600; margin: 0 }
.waehler-antwort .chips { margin: 12px 0 18px }
.waehler-antwort .chip { cursor: default }

/* «Ihr wollt beide …» auf der Kartenvorderseite — die Zeile, die aus einem Profil eine Verabredung macht. */
.kziel-gemeinsam { font-weight: 700; color: #fff }
.kziel-gemeinsam::before { content: ""; display: inline-block; width: 7px; height: 7px; border-radius: 99px;
  background: var(--minze); margin-right: 7px; vertical-align: 1px }

/* Werbemessung — Banner unten (Owner 25.09.). Erscheint nur auf den Werbeseiten und nur, wenn eine
   Pixel-Kennung hinterlegt ist; messung.js zeigt ihn, sobald noch nichts entschieden wurde. Beide
   Knoepfe sind gleich gross und gleich nah: ein Nein, das man suchen muss, ist kein Nein. */
.messung{position:fixed;left:16px;right:16px;bottom:16px;z-index:60;display:flex;gap:16px;
  align-items:center;justify-content:space-between;flex-wrap:wrap;
  background:var(--pflaume);color:var(--milch);border:1px solid var(--linie);
  border-radius:16px;padding:14px 18px;box-shadow:0 18px 40px rgba(0,0,0,.42);max-width:860px;margin:0 auto}
.messung p{margin:0;font-size:14px;line-height:1.5;flex:1 1 320px;color:var(--nebel)}
.messung a{color:inherit}
.messung-knoepfe{display:flex;gap:10px;flex:0 0 auto}
.messung-knoepfe .knopf{min-width:120px;justify-content:center;text-align:center}
@media (max-width:560px){.messung{left:8px;right:8px;bottom:8px;padding:12px 14px}
  .messung-knoepfe{width:100%}.messung-knoepfe .knopf{flex:1}}
/* Auf dem Handy sitzt unten die Tab-Leiste — der Banner darf sie nicht verdecken. */
body:has(.tab-leiste:not([hidden])) .messung{bottom:76px}

/* Fassungswahl beim Werbematerial (Owner 25.09.: «sowohl als auch») — die bisherige Fassung bleibt
   waehlbar neben den neuen. Eine Zeile Chips, auf dem Handy scrollbar statt umgebrochen. */
.fassungen{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 0 14px}
.fassungen .mat-sprache{margin-left:auto;display:flex;gap:6px;align-items:center;font-size:13px;color:var(--nebel)}
.fassungen select{padding:4px 8px}
@media (max-width:560px){.fassungen{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px}
  .fassungen .chip{flex:0 0 auto}.fassungen .mat-sprache{margin-left:8px;flex:0 0 auto}}

/* Kanaele & Webinar im Promoter-Portal (Owner 25.09.: «gut ersichtlich»). Drei grosse Ziele statt drei
   Links in einem Fliesstext — ein Link in einem Absatz wird uebersehen, eine Kachel nicht. */
.kanaele{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:12px}
.kanal{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;gap:2px 12px;
  padding:14px 16px;border-radius:14px;text-decoration:none;color:inherit;
  background:var(--pflaume-hell);border:1px solid var(--linie);transition:transform .12s,border-color .12s}
.kanal:hover,.kanal:focus-visible{transform:translateY(-2px);border-color:var(--korall)}
.kanal-sym{grid-row:1/3;align-self:center;font-size:24px;width:44px;height:44px;border-radius:12px;
  display:grid;place-items:center;background:rgba(255,255,255,.08)}
.kanal.tg .kanal-sym{background:rgba(41,171,226,.22);color:#5ec8f0}
.kanal.wa .kanal-sym{background:rgba(37,211,102,.20);color:#4fd37a}
.kanal.zoom .kanal-sym{background:rgba(45,140,255,.20);color:#6aa8ff}
.kanal b{align-self:end}
.kanal .klein{align-self:start;margin:0}

/* Wahl bei der Registrierung (Owner 25.09.: nur Kunde / beides / nur Promoter). Ganz oben im Formular,
   weil die Antwort den ganzen Rest bestimmt. Drei Flaechen zum Antippen, keine winzigen Radioknoepfe. */
.absicht{border:0;padding:0;margin:0 0 18px}
.absicht legend{padding:0;margin:0 0 8px;font-weight:700}
.absicht-wahl{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start;cursor:pointer;
  padding:12px 14px;margin-bottom:8px;border:1px solid var(--linie);border-radius:12px;
  background:var(--pflaume);transition:border-color .12s,background .12s}
.absicht-wahl:hover{border-color:var(--korall)}
.absicht-wahl:has(input:checked){border-color:var(--korall);background:rgba(255,79,122,.10)}
.absicht-wahl input{margin-top:3px}
.absicht-wahl b{display:block}
.absicht-wahl small{display:block;color:var(--nebel);line-height:1.45}

/* Ampel-Erklaerung im Stamm (Owner 25.09.: «was bedeutet wackelt?») */
.ampel-hilfe{margin:0 0 16px;border:1px solid var(--linie);border-radius:12px;padding:10px 14px;background:var(--pflaume)}
.ampel-hilfe summary{cursor:pointer;font-weight:700}
.ampel-liste{list-style:none;margin:10px 0 6px;padding:0;display:grid;gap:8px}
.ampel-liste li{display:block;font-size:14px;line-height:1.5}   /* 10.10.: Punkt + Wort + Text in EINER Zeile (das Raster mit 2 Spalten riss den Text in eine eigene Reihe) */
.ampel-liste .pkt{display:inline-block;width:11px;height:11px;border-radius:50%;margin-right:8px;vertical-align:0}
.pkt.gruen{background:#6bffb0}.pkt.gelb{background:#ffc24f}.pkt.rot{background:#ff4f7a}
.pkt.ruhend{background:#8d7a9d}.pkt.unbekannt{background:transparent;border:2px solid #8d7a9d}
/* Hilfe holen */
.hilfe-themen{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.hilfe-text{display:block;margin:10px 0}
.hilfe-text textarea{width:100%}

/* Hinweis im Admin aufklappen (Owner 25.09.: «den Hinweis anklicken, sehen und lesen können») */
.hinweis-voll{background:var(--pflaume);border-left:3px solid var(--korall);padding:12px 14px}
.hv-kopf{margin-bottom:10px;color:var(--nebel)}
.hv-sprache{margin:0 0 10px;padding-left:10px;border-left:2px solid var(--linie)}
.hv-sprache.fehlt{border-left-color:#ffc24f;opacity:.85}
.hv-titel{font-weight:700;margin:2px 0}
.hv-text{white-space:pre-wrap;line-height:1.5;font-size:14px}

/* Die drei Schritte vor dem Konto-Knopf (Owner 25.09.: die Selfie-Pflicht muss vorher klar sein) */
.drei-schritte{margin:4px 0 14px;padding:12px 14px;border-radius:12px;font-size:14px;line-height:1.55;
  background:rgba(107,255,176,.08);border:1px solid rgba(107,255,176,.28);color:var(--milch)}

/* ── Entdecken: die Sparten (Owner 25.09.: «muss ein WOW-Erlebnis sein») ──────────────────────────────
   Ein Blatt, das von unten aufgeht — auf dem Handy die Geste, die jeder kennt, auf dem Bildschirm eine
   mittige Karte. Die Kacheln tragen echte Bilder aus dem Film, dieselben wie auf dem Werbematerial. */
.sparten-leiste{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:0 0 12px}
.sparten-knopf{display:inline-flex;align-items:center;gap:9px;padding:11px 18px;border-radius:999px;
  border:0;cursor:pointer;font:inherit;font-weight:700;color:#fff;
  background:linear-gradient(120deg,var(--korall),var(--violett));
  box-shadow:0 8px 22px rgba(255,79,122,.30);transition:transform .12s,box-shadow .12s}
.sparten-knopf:hover{transform:translateY(-1px);box-shadow:0 12px 28px rgba(255,79,122,.40)}
.sparten-knopf svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2}

.sparten-blatt{position:fixed;inset:0;z-index:90;display:flex;align-items:flex-end;justify-content:center}
.sp-schatten{position:absolute;inset:0;background:rgba(8,3,12,.62);backdrop-filter:blur(3px)}
.sp-karte{position:relative;width:min(760px,100%);max-height:88vh;overflow-y:auto;
  background:var(--nacht);border:1px solid var(--linie);
  border-radius:22px 22px 0 0;padding:10px 20px 24px;box-shadow:0 -18px 50px rgba(0,0,0,.5);
  animation:sp-hoch .22s ease-out}
@keyframes sp-hoch{from{transform:translateY(22px);opacity:.6}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.sp-karte{animation:none}}
.sp-griff{width:42px;height:4px;border-radius:2px;background:var(--linie);margin:2px auto 10px}
.sp-karte header{display:flex;align-items:center;justify-content:space-between;gap:12px}
.sp-karte h2{margin:0;font-size:21px}
.sp-zu{background:none;border:0;color:var(--nebel);font-size:19px;cursor:pointer;padding:6px}
.sp-unter{margin:2px 0 14px}
.sp-gitter{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.sp-kachel{position:relative;aspect-ratio:4/5;border-radius:16px;border:0;cursor:pointer;overflow:hidden;
  background-size:cover;background-position:center 22%;padding:0;text-align:left;
  display:flex;flex-direction:column;justify-content:flex-end;transition:transform .14s}
.sp-kachel::after{content:'';position:absolute;inset:0;
  background:linear-gradient(to top,rgba(10,4,14,.90) 0%,rgba(10,4,14,.45) 42%,rgba(10,4,14,0) 72%)}
.sp-kachel:hover{transform:translateY(-3px)}
.sp-kachel.drin{outline:2px solid var(--minze);outline-offset:-2px}
.sp-name,.sp-satz,.sp-drin{position:relative;z-index:1;color:#fff;padding:0 12px}
.sp-name{font-weight:800;font-size:16px;line-height:1.2}
/* 29.10.: margin statt padding unten — das Padding legte die angeschnittene dritte Zeile frei (Freundschaft, Gesellschaft) */
.sp-satz{font-size:11.5px;line-height:1.35;opacity:.86;margin-bottom:12px;padding-top:3px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.sp-drin{position:absolute;top:9px;right:9px;z-index:1;padding:3px 9px;border-radius:999px;
  background:var(--minze);color:#0c2a1a;font-size:11px;font-weight:800}
.sp-zurueck{background:none;border:0;color:var(--nebel);cursor:pointer;font:inherit;padding:6px 0}
.sp-raeume h3{margin:6px 0 2px;font-size:19px}
.sp-liste{display:grid;gap:9px;margin:14px 0}
.sp-raum{display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 12px;text-align:left;
  padding:13px 15px;border-radius:13px;cursor:pointer;font:inherit;color:inherit;
  background:var(--pflaume);border:1px solid var(--linie);transition:border-color .12s}
.sp-raum:hover{border-color:var(--korall)}
.sp-raum.drin{border-color:var(--minze)}
.sp-raum b{grid-column:1}
.sp-raum .klein{grid-column:1;color:var(--nebel)}
.sp-tat{grid-column:2;grid-row:1/3;font-weight:700;font-size:13px;color:var(--korall-schrift);white-space:nowrap}
.sp-raum.drin .sp-tat{color:var(--minze-schrift)}
.sp-heikel{margin-top:14px;padding:10px 14px;border-radius:12px;border:1px solid var(--linie)}
.sp-heikel summary{cursor:pointer;color:var(--nebel)}
.sp-fehler{margin-top:10px}
body.sp-offen{overflow:hidden}
@media (min-width:760px){.sparten-blatt{align-items:center}.sp-karte{border-radius:22px;max-height:82vh}}

/* ── Gruppenchats in den Räumen (Owner 25.09.) ────────────────────────────────────────────────────── */
.gruppen{margin-bottom:18px}
.gr-zeile{display:grid;grid-template-columns:1fr auto;gap:2px 10px;width:100%;text-align:left;
  padding:11px 13px;margin-bottom:7px;border-radius:12px;cursor:pointer;font:inherit;color:inherit;
  background:var(--pflaume);border:1px solid var(--linie);transition:border-color .12s}
.gr-zeile:hover{border-color:var(--korall)}
.gr-zeile.an{border-color:var(--korall);background:rgba(255,79,122,.08)}
.gr-name{grid-column:1;font-weight:700}
.gr-name small{font-weight:400;color:var(--nebel)}
.gr-zeile .klein{grid-column:1;color:var(--nebel)}
.gr-punkt{grid-column:2;grid-row:1/3;align-self:center;background:var(--korall);color:#fff;
  font-style:normal;font-size:11px;font-weight:800;min-width:20px;height:20px;border-radius:10px;
  display:grid;place-items:center;padding:0 5px}
.gr-panel{display:flex;flex-direction:column;gap:8px;border:1px solid var(--linie);
  border-radius:16px;padding:12px 14px;background:var(--pflaume);max-height:72vh}
.gr-kopf{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gr-werkzeuge{margin-left:auto;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gr-werkzeuge select{padding:3px 7px}
.gr-nachrichten{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:9px;padding:4px 2px}
.gr-n{padding:9px 12px;border-radius:12px;background:var(--pflaume-hell);max-width:88%}
.gr-n.meins{align-self:flex-end;background:rgba(255,79,122,.16)}
.gr-n b{font-size:13px}
.gr-maske{color:var(--nebel);font-size:12px}
.gr-zeit{float:right;font-size:11px;color:var(--nebel);margin-left:10px}
.gr-n p{margin:3px 0 0;white-space:pre-wrap;line-height:1.45}
.gr-melden{font-size:11px;color:var(--nebel);background:none;border:0;cursor:pointer;padding:3px 0 0}
.gr-wahl{display:grid;gap:10px;margin:14px 0}
.gr-wahl .knopf{display:block;text-align:left;padding:13px 16px;height:auto}
.gr-wahl .knopf b{display:block}
.gr-wahl .knopf small{display:block;font-weight:400;opacity:.85;line-height:1.4;margin-top:3px}

/* Die drei Rollen auf der Startseite (Owner 26.09.: «es muss deutlicher werden») */
.rollen{margin:16px 0;padding:14px 16px;border-radius:14px;background:var(--pflaume-hell);border:1px solid var(--linie)}
.rollen h3{margin:0 0 10px}
.rollen-liste{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.rollen-liste li{display:grid;grid-template-columns:1fr auto;gap:2px 12px;align-items:start;
  padding-bottom:10px;border-bottom:1px solid var(--linie)}
.rollen-liste li:last-child{border-bottom:0;padding-bottom:0}
.rollen-liste b{grid-column:1}
.rollen-liste span{grid-column:1;font-size:13.5px;line-height:1.5;color:var(--nebel)}
.rollen-geld{grid-column:2;grid-row:1;font-style:normal;font-size:11.5px;font-weight:800;white-space:nowrap;
  padding:3px 9px;border-radius:999px}
.rollen-geld.zahlt{background:rgba(255,79,122,.16);color:var(--korall-schrift)}
.rollen-geld.gratis{background:rgba(107,255,176,.16);color:var(--minze-schrift)}
.rollen-rechnung{margin:12px 0 6px;padding:10px 12px;border-radius:10px;background:rgba(255,255,255,.04)}
@media (max-width:520px){.rollen-liste li{grid-template-columns:1fr}.rollen-geld{grid-column:1;grid-row:auto;justify-self:start;margin-top:4px}}

/* Founding vs. 14 Tage — die zwei Angebote auseinanderhalten (Owner 26.09.) */
.founding-klar{margin:10px 0 14px;padding:11px 14px;border-radius:12px;max-width:62ch;
  background:rgba(139,61,255,.12);border:1px solid rgba(139,61,255,.32);line-height:1.55}

/* Einladung zum Promoter im Konto (Owner 26.09.) */
.promoter-einladung{border-left:3px solid var(--minze)}
.promoter-einladung b{display:block;margin-bottom:6px}

/* Zoomen und Ziehen im Baumfeld (Owner 26.09.: «alles sehen und zoomen im Feld, nicht die Seite») */
.cms-baum{cursor:grab;overscroll-behavior:contain;touch-action:pan-x pan-y;max-height:min(70vh,640px)}
.cms-baum.zieht{cursor:grabbing;user-select:none}
.cms-baum.zieht *{pointer-events:none}
.cms-zoom button[data-zoom-alles]{font-size:1.05rem;padding:4px 9px}
/* Masskasten: transform aendert die Lage, nie den Platzbedarf — er sagt dem Kasten, wie gross der
   gezoomte Baum wirklich ist. Ohne ihn gibt es keine Rollbalken und damit nichts zu verschieben. */
.cms-baum-mass{margin:0 auto;position:relative}
.cms-baum-innen{transform-origin:top left;display:inline-block}

/* ── Geschützter Bereich im Profil (Owner 25./26.09.) ────────────────────────────────────────────────
   Deutlich abgesetzt vom übrigen Profil: was hier eingestellt wird, gilt nur für Abenteuer und
   Neigungen, und das muss man sehen, ohne es zu lesen. */
.raumschutz{margin:20px 0;padding:16px 18px;border-radius:16px;
  background:var(--pflaume);border:1px solid rgba(255,79,122,.35);border-left:4px solid var(--korall)}
.raumschutz h3{margin:0 0 4px;font-size:17px}
.rs-block{margin:16px 0;padding-top:14px;border-top:1px solid var(--linie)}
.rs-block:first-of-type{border-top:0;padding-top:0}
.rs-block > b{display:block;margin-bottom:3px}
.rs-raum{margin:10px 0}
.chip.tabu{border-color:rgba(255,79,122,.4)}
.chip.tabu.an{background:rgba(255,79,122,.20);border-color:var(--korall);color:var(--korall-schrift)}
.rs-bilder{display:flex;flex-wrap:wrap;gap:10px;margin:10px 0}
.rs-bild{position:relative;width:104px;border-radius:10px;overflow:hidden;background:var(--pflaume-hell)}
.rs-bild img{width:104px;height:132px;object-fit:cover;display:block}
.rs-bild.review img,.rs-bild.pending img{filter:grayscale(.6) brightness(.7)}
.rs-bild.rejected{outline:2px solid var(--korall)}
.rs-stand{display:block;font-size:11px;padding:3px 6px;color:var(--nebel)}
.rs-weg-bild{position:absolute;top:4px;right:4px;width:22px;height:22px;border:0;border-radius:11px;
  background:rgba(10,4,14,.78);color:#fff;cursor:pointer;line-height:1;font-size:12px}
.rs-freigabe{display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:8px 0;border-bottom:1px solid var(--linie)}
.rs-freigabe:last-child{border-bottom:0}
.rs-warnung{color:var(--nebel);font-style:italic}
.rs-notbremse{border-top-color:rgba(255,79,122,.35)}
.rs-notbremse .knopf{background:transparent;border:1px solid var(--korall);color:var(--korall-schrift)}

/* Nachfrage bei Dubletten (Owner 25.09.) */
.db-frage{margin:8px 0;padding:8px 12px;border-radius:10px;background:rgba(107,255,176,.10);
  border-left:3px solid var(--minze)}

/* Text zum gewaehlten Werbebild (Owner 26.09.). Steht ueber den Bildern, nicht daneben: die Kachelreihe
   ist ein Raster mit automatischer Spaltenzahl — ein Kasten darin wuerde als zwoelfte Kachel gelesen. */
.mat-text { border: 1px solid var(--linie); background: var(--pflaume); border-radius: var(--radius);
  padding: 14px 16px; margin: 0 0 14px; display: grid; gap: 8px; justify-items: start }
.mat-text p { margin: 0; color: var(--nebel) }
.mat-text textarea { width: 100%; background: var(--nacht); color: var(--milch); border: 1px solid var(--linie);
  border-radius: var(--radius-klein); padding: 10px 12px; font: inherit; line-height: 1.5; resize: vertical }

/* «Du» in der Mitte, solange es noch kein freigegebenes Profilbild gibt (27.09.). Vor dem Start ist
   das der Normalfall, nicht die Ausnahme — ein leeres <img> waere dort ein zerbrochenes Bildsymbol. */
.radar-du { width: 56px; height: 56px; border-radius: 50%; background: var(--nacht); display: grid;
  place-items: center; font-weight: 800; color: var(--milch) }
.radar-wartet { max-width: 34em; margin: 10px auto 0; text-align: center; color: var(--nebel); font-size: .9rem }
/* 10.10.: button[type=button] (0,1,1) legte hinter jede Person im Radar eine Pflaume-Flaeche — gleiche Staerke, durchsichtig */
.radar-person[type=button] { background: transparent }
/* 10.10.: im hellen Modus waren die Ringe weiss auf weiss — unsichtbar; Namen auf dunklem Grund bleiben lesbar */
:root[data-theme="light"] .radar .ring { border-color: rgba(60,20,90,.16) } :root[data-theme="light"] .radar .ring.r1 { border-color: rgba(255,79,122,.6) } :root[data-theme="light"] .radar .ring.r2 { border-color: rgba(139,61,255,.45) }
:root[data-theme="light"] .radar .ring-label { background: var(--pflaume-hell) }
:root[data-theme="light"] .radar-person span { color: #fff }   /* Grund bleibt dunkel — --milch waere im hellen Modus dunkel auf dunkel */

/* Gruppen zum Auf- und Zuklappen (Owner 27.09.). Vorher eine flache Kolonne aus dreizehn gleich
   aussehenden Zeilen; gebuendelt sind es sieben, und was zu ist, kostet keine Aufmerksamkeit.
   <details>/<summary> statt eigener Klapp-Logik: Tastatur und Vorlesegeraete koennen es von Haus aus. */
.gr-kat { border: 1px solid var(--linie); border-radius: var(--radius-klein); margin: 0 0 6px; overflow: hidden }
.gr-kat > summary { display: grid; grid-template-columns: 1fr auto auto; gap: 8px; align-items: center;
  padding: 9px 11px; cursor: pointer; background: var(--pflaume); list-style: none;
  font-weight: 700; user-select: none }
.gr-kat > summary::-webkit-details-marker { display: none }
/* Der Pfeil wird selbst gezeichnet, damit er in beiden Farbmodi dieselbe Farbe hat wie die Schrift
   daneben — das Standardsymbol des Browsers folgt den Farbvariablen nicht. */
.gr-kat > summary::before { content: "›"; display: inline-block; width: .8em; margin-right: 2px;
  color: var(--nebel); transition: transform .15s; transform: rotate(0deg) }
.gr-kat[open] > summary::before { transform: rotate(90deg) }
.gr-kat > summary:hover { background: var(--pflaume-hell) }
.gr-kat > summary .klein { color: var(--nebel); font-weight: 600 }
.gr-kat-name { grid-column: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
.gr-kat .gr-zeile { border-radius: 0; border-left: 0; border-right: 0; border-top: 0; margin: 0 }
.gr-kat .gr-zeile:last-child { border-bottom: 0 }
@media (prefers-reduced-motion: reduce) { .gr-kat > summary::before { transition: none } }

/* Abstimmungen (Owner 27.09.). Die Rangfolge muss auf einen Blick lesbar sein — darum ein Balken je
   Antwort statt einer Tabelle: die Länge sagt das Ergebnis, bevor jemand eine Zahl gelesen hat. */
.um-karte { border: 1px solid var(--linie); border-radius: var(--radius); padding: 14px 16px; margin: 0 0 12px;
  background: var(--pflaume); display: grid; gap: 8px }
.um-karte h4 { margin: 0; font-size: 1.05rem }
.um-karte p { margin: 0 }
.um-karte.entwurf { border-style: dashed }   /* noch nicht draussen — das soll man sehen, nicht lesen müssen */
.um-wahl { display: grid; gap: 6px }
.um-option { text-align: left; background: var(--nacht); color: var(--milch); border: 1px solid var(--linie);
  border-radius: var(--radius-klein); padding: 10px 12px; font: inherit; cursor: pointer }
.um-option:hover { border-color: var(--korall) }
.um-option.an { border-color: var(--korall); background: rgba(255,79,122,.10); font-weight: 700 }
.um-zeile.erg { display: grid; gap: 4px }
.um-kopfzeile { display: grid; grid-template-columns: auto 1fr auto; gap: 8px; align-items: baseline }
.um-platz { font-weight: 800; min-width: 1.6em }
.um-balken { height: 8px; border-radius: 999px; background: var(--nacht); overflow: hidden }
.um-balken i { display: block; height: 100%; background: var(--verlauf) }
.um-knoepfe { display: flex; gap: 8px; flex-wrap: wrap }
.um-antwortfeld { display: block; margin: 0 0 6px }
.um-antwortfeld input { width: 100% }
.um-dauer { display: block; margin: 8px 0 }

/* Mehrfachauswahl im Anmeldeablauf (27.09.). Dieselben Knoepfe wie bei den Einfachfragen darueber —
   der Unterschied steht im Satz («Mehrfach möglich»), nicht in einer zweiten Optik: zwei Auswahlarten,
   die verschieden AUSSEHEN, lassen den Nutzer raten, welche gerade gilt. */
.strang-wahl.mehrfach { flex-wrap: wrap }

/* ── Startseite: eine Ausrichtung, nicht elf (Owner 27.09.) ──────────────────────────────────────
   Er hat dreimal hintereinander auf eine Stelle gezeigt und «auch einmitten» geschrieben. Gemessen
   war der Grund nicht die einzelne Stelle, sondern der Wechsel: vier Abschnitte standen mittig
   (Hero, Wähler, «Du musst nicht alleine», Preis), sieben linksbündig (Film, Versprechen, Schritte,
   MEE, Sicherheit, die zwei Karten, App). Beim Scrollen springt die Seite hin und her, und das fällt
   auf, ohne dass man benennen kann warum.

   DIE REGEL: Überschrift und Vorspann mittig, INHALT LINKS. Eine zentrierte Liste ist unlesbar — das
   Auge findet den Zeilenanfang nicht mehr. Darum fasst diese Regel nur h2 und die Vorspann-Absätze an;
   Aufzählungen, Karten und Tabellen bleiben, wie sie sind.

   `text-wrap: balance` gehört dazu: Zentrieren allein stellt schiefe Zeilen nur mittig, es macht sie
   nicht gleich lang — dann hängt ein einzelnes Wort mittig statt links. Genau das war beim Titel oben
   der eigentliche Fehler. */
/* `body > main.inhalt > section` — nachgemessen, nicht angenommen. Der erste Anlauf schrieb
   `body.start > section` und griff nirgends; die vier Abschnitte, die trotzdem mittig standen, waren
   es schon vorher durch ihre eigenen Regeln. Eine Regel, die nichts trifft, sieht aus wie eine, die
   wirkt — man sucht den Fehler dann überall ausser im Selektor. */
body.start main > section > h2 { text-align: center; text-wrap: balance }
body.start main > section > .hero-text,
body.start main > section > p.klein { text-align: center; margin-inline: auto }
body.start .hero-text-block,
body.start .film-text { text-align: center }
body.start .hero-text-block .hero-text,
body.start .film-text .hero-text { margin-inline: auto }
body.start .hero-knoepfe { justify-content: center }
/* Was in diesen Blöcken eine Liste ist, bleibt links — sonst kippt die Lesbarkeit mit. */
body.start .hero-text-block ul,
body.start .hero-text-block ol,
body.start .film-text ul { text-align: left }

/* Emoji-Auswahl (Owner 27.09.). Die Tafel haengt am Knopf und nicht am Seitenende: so bleibt sie beim
   Scrollen an ihrem Feld, und es braucht keine Rechnerei, wo sie gerade stehen muss. */
.emoji-huelle { position: relative; display: inline-flex }
.emoji-knopf { background: transparent; border: 1px solid var(--linie); color: var(--milch);
  border-radius: var(--radius-klein); width: 40px; height: 40px; font-size: 1.15rem; cursor: pointer;
  display: grid; place-items: center; padding: 0 }
.emoji-knopf:hover { border-color: var(--korall) }
/* Nach OBEN aufgeklappt: das Feld steht am unteren Rand des Chats — nach unten waere die Tafel
   ausserhalb des Kastens und halb abgeschnitten. */
.emoji-tafel { position: absolute; bottom: calc(100% + 8px); right: 0; z-index: 30; width: min(320px, 86vw);
  max-height: 300px; overflow-y: auto; background: var(--pflaume); border: 1px solid var(--linie);
  border-radius: var(--radius); padding: 10px 12px; box-shadow: 0 18px 44px rgba(0,0,0,.45) }
.emoji-titel { display: block; color: var(--nebel); font-size: .72rem; font-weight: 800;
  letter-spacing: .06em; text-transform: uppercase; margin: 8px 0 4px }
.emoji-titel:first-child { margin-top: 0 }
.emoji-raster { display: grid; grid-template-columns: repeat(auto-fill, minmax(34px, 1fr)); gap: 2px }
.emoji-z { background: transparent; border: 0; border-radius: 8px; font-size: 1.2rem; line-height: 1;
  padding: 5px 0; cursor: pointer }
.emoji-z:hover, .emoji-z:focus-visible { background: var(--pflaume-hell) }

/* ── Eine Mittelachse pro Seite (Owner 27.09.: «alle Schriften sauber untereinander, zentriert, nicht
   gewürfelt oder chaotisch») ────────────────────────────────────────────────────────────────────────
   Gemessen bei 1440 px (Abstand der Textmitte zur Seitenmitte): die Texte waren fast alle `center` —
   aber jeder in einem anderen Kasten. Startseite: Titel −297, Vorspann −350, Founding-Hinweis −410,
   Film −209, dann 0. Die Mitte sprang also viermal, obwohl überall «zentriert» stand. Das ist das
   Gewürfelte: nicht links gegen mittig, sondern mittig gegen eine andere Mitte.
   Die Regel bleibt die vom 27.09. (Titel und Vorspann mittig, Inhalt links) — neu ist, dass die Mitte
   für alle dieselbe ist. */

/* Hero: Titel und Textblock teilen EINE Achse in ihrer Spalte (vorher hatte der Titel die volle Spalte,
   der Textblock 40em ab links, der Founding-Kasten 62ch ab links — drei Mitten übereinander). */
body.start .hero > h1 { justify-self: center; text-align: center; text-wrap: balance }
body.start .hero-text-block { justify-self: center; max-width: 36em }
body.start .hero-text-block .founding-klar,
body.start .zaehler-zeile { margin-inline: auto; text-align: center }

/* Film: vorher Zweispalter (Text links unten, Video rechts) mit eigener Mitte bei −209. Gestapelt
   steht der Text auf der Seitenachse, das Video mittig darunter. */
body.start .film-block { grid-template-columns: 1fr; justify-items: center; gap: 20px }
body.start .film-text { max-width: 40em }

/* Schritte: Titel mittig, die Liste klebte an der linken Kante. Als Block mittig, Text darin links. */
body.start .schritt-liste { margin-inline: auto }

/* Preise: `.versprechen { margin: 0 }` steht NACH `.mitte-liste` und schlug dessen `margin: auto` —
   die Liste sollte mittig sein und stand links. Der Umschalter ist inline-flex, darauf wirkt
   `margin: auto` nicht; der Founding-Hinweis hatte gar keine Ausrichtung. */
.versprechen.mitte-liste { margin: 20px auto 0 }
.wahl.mitte { display: flex; width: fit-content; margin-inline: auto }
#land-select { width: auto; min-width: 14em }
#frei-hinweis { max-width: 40em; margin-inline: auto; text-align: center }

/* Promoter: Filme und Ansprechpartner sind eine eigene Reihe unter dem Kopf (siehe promoter.html).
   Kopf: Text und Rechner oben bündig statt Rechner mittig im Loch. */
.pr-hero { align-items: start }
.pr-filme { display: grid; grid-template-columns: repeat(2, minmax(0, 260px)) minmax(0, 1fr); gap: clamp(18px, 3vw, 40px);
  align-items: start; margin: 0 0 36px }
.pr-filme figure { margin: 0 }
.pr-filme .pr-film { margin: 0 0 8px; width: 100% }
.pr-filme .pr-ansprech { align-self: center }
.pr-filme .ansprech-karte { margin: 0 }
@media (max-width: 900px) { .pr-filme { grid-template-columns: repeat(2, minmax(0, 1fr)) } .pr-filme .pr-ansprech { grid-column: 1 / -1 } }
@media (max-width: 520px) { .pr-filme { grid-template-columns: 1fr } .pr-filme .pr-film { width: min(100%, 280px); margin-inline: auto } .pr-filme figcaption { text-align: center } }
/* Abschnittstitel und Vorspann auf der Seitenachse — wie auf der Startseite. */
#info > h2, #info .anders-titel { text-align: center; text-wrap: balance }
#info .anders-unter { margin-inline: auto; text-align: center; text-wrap: balance }
/* Handy (gemessen 390 px): die Rechentabelle ist breiter als der Schirm und drückte die Kopfspalte auf
   411 px — Titel, Vorspann und Pre-Launch-Kasten liefen rechts aus dem Bild, auch live. `minmax(0, 1fr)`
   lässt die Spalte schmaler werden als ihr Inhalt; die Tabelle rollt dann in ihrer eigenen Karte. */
@media (max-width: 900px) { .pr-hero { grid-template-columns: minmax(0, 1fr) } }
.pr-hero > * { min-width: 0 }
.rechner.beispiel { overflow-x: auto }

/* ── Handy: der Kopf zeigt alles, statt es seitwärts zu verstecken (Owner 27.09.: «wenn man es auf dem
   Handy im Browser öffnet, dass es responsiv ist und an die Seite angepasst») ─────────────────────────
   Gemessen bei 390 px: die Menüzeile war ein seitwärts rollbarer Streifen ohne sichtbaren Balken. EN,
   Hell/Dunkel und «Registrieren» lagen bei 400–595 px — rechts ausserhalb des Schirms. Wer MEEYO am
   Handy öffnete, fand oben keinen Weg zur Anmeldung und wusste nicht einmal, dass da noch etwas ist.
   Jetzt zwei Zeilen: Marke · Hell/Dunkel · Registrieren oben, die Wege und Sprachen darunter; was
   nicht passt, bricht um statt zu verschwinden. `nav { display: contents }` macht die Knöpfe zu
   Geschwistern der Marke, damit `order` sie über beide Zeilen verteilen kann; der Zeilenumbruch ist
   `.kopf::after` mit voller Breite und null Höhe. */
@media (max-width: 760px) {
  .kopf { flex-direction: row; flex-wrap: wrap; justify-content: flex-start; align-items: center; gap: 10px 14px; padding: 10px 16px 8px }
  .kopf > nav { display: contents }
  .kopf .marke { order: 0; margin-right: auto }
  .kopf .thema-knopf { order: 1; margin-left: 0 }
  .kopf nav .knopf.klein { order: 2 }
  .kopf::after { content: ""; order: 3; flex-basis: 100%; height: 0 }
  .kopf nav > a:not(.knopf) { order: 4; font-size: .92rem }
  .kopf .sprachwahl { order: 5; margin-left: auto }
}
@media (max-width: 420px) { .kopf { column-gap: 11px } .kopf nav > a:not(.knopf) { font-size: .88rem } .kopf .sprachwahl > summary { padding: 4px 8px } .kopf nav .knopf.klein { padding: 7px 13px } }

/* Formulare bei 360 px: die Auswahl «Weshalb bist du hier?» (fieldset) und die Zweierreihen waren 12 px
   breiter als die Karte und wurden rechts abgeschnitten. Ein fieldset hat von Haus aus
   `min-width: min-content`, ein Grid-Kind `min-width: auto` — beide wachsen dann mit dem längsten Wort
   statt mit dem Schirm. */
.absicht { min-width: 0 }
.formular > *, .zwei > *, .drei > * { min-width: 0 }
@media (max-width: 420px) { .formular .zwei { grid-template-columns: 1fr } }

/* ── Herausgezoomt gesehen (Owner 27.09.: «zoome sie klein, dann siehst du es») ─────────────────────────
   1. Hero: Titel und Text standen mittig in der LINKEN Spalte (Handy rechts), alles darunter mittig auf
      der SEITE. Bei 100 % fällt das als «Hero ist halt zweispaltig» durch, klein gezoomt sieht man den
      Knick sofort: oben liegt die Achse ~300 px links, dann springt sie in die Mitte. Wer «alles
      untereinander» will, bekommt es nur mit einer Spalte — so, wie das Handy es schon immer zeigt.
      Reihenfolge am Tisch: Titel → Text und Knöpfe → Handy. Das Handy kommt NACH dem Knopf, damit
      «Founding-Platz sichern» nicht unter den Rand rutscht.
   2. «Du musst nicht alleine»: die allgemeine Regel `p, li { max-width: 72ch }` machte die Zeilen
      schmaler als den Abschnitt und legte sie an den LINKEN Rand — zentrierter Text in einem Kasten,
      der links klebt, gemessen 133 px neben der eigenen Überschrift. */
@media (min-width: 761px) {
  body.start .hero { grid-template-columns: minmax(0, 1fr); grid-template-areas: "titel" "text" "telefon";
    grid-template-rows: auto; justify-items: center; row-gap: 18px; min-height: 0 }
  body.start .hero > h1 { grid-area: titel; align-self: auto; max-width: 16em }
  body.start .hero-text-block { grid-area: text; align-self: auto }
  body.start .telefon-buehne { grid-area: telefon; justify-self: center; margin-top: 18px }
}
.allein-liste li { margin-inline: auto }
body.start .zaehler-zeile > p { margin-inline: auto }

/* 27.09.: Zwischentitel in der Filmliste des Portals («Begegnungsplattform») — eigene Zeile, damit die neuen Filme
   nicht wie ein fünfter Knopf der alten Reihe aussehen. */
.pr-video-gruppe { display: block; flex-basis: 100%; margin: 12px 0 4px; font-size: .92rem }

/* 28.09.: MEEYO-Shop (Spreadshop) im Promoter-Portal. Hoch genug, dass man im Rahmen einkaufen kann, ohne doppelt zu scrollen;
   am Handy etwas niedriger, damit der Ausweg-Knopf darunter sichtbar bleibt. */
.shop-rahmen { display: block; width: 100%; height: min(78vh, 900px); border: 0; border-radius: var(--radius); background: #fff; margin: 4px 0 12px }
@media (max-width: 760px) { .shop-rahmen { height: 70vh } }

/* 28.09.: MEEYO-Punkte im Portal — vorgemerkte Umwandlungen und das Umwandeln in zwei Schritten */
.punkte-vorgemerkt { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; justify-content: space-between;
  background: var(--pflaume); border: 1px solid var(--linie); border-radius: var(--radius-klein); padding: 10px 14px; margin: 10px 0 }
.punkte-wandeln { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-end; margin: 14px 0 }
.punkte-wandeln input { width: 9em }
.punkte-bestaetigen { flex-basis: 100% }

/* ── Reiter «Räume» (28.09., Owner: «besser als Tinder, grafisch grandios») ──────────────────────────────────────
   Das Mutige sitzt an EINER Stelle: den Bereichs-Kacheln. Grosse Bilder im Hochformat, der Name gross unten auf dem
   Bild, eine Zeile darunter — wie auf den Plakaten. Alles andere (Kopf, Video-Hinweis, Raumliste) bleibt ruhig.
   Die Kacheln teilen den Code mit dem Blatt in Entdecken (sparten.js); hier nur die Seiten-Abmessungen. */
.rm-kopf { margin: 8px 0 18px }
.rm-kopf h1 { font-size: clamp(2rem, 7vw, 3rem); letter-spacing: -.02em; margin: 0 0 6px }
.rm-unter { color: var(--nebel); max-width: 38em; margin: 0 }
.rm-seite .sp-karte.sp-seite { position: static; width: 100%; max-height: none; overflow: visible; background: none;
  padding: 0; box-shadow: none; border: 0; animation: none }
.rm-seite .sp-seite > header, .rm-seite .sp-seite > .sp-unter { display: none }   /* Titel steht schon im Seitenkopf */
.rm-seite .sp-gitter { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px }
@media (min-width: 761px) { .rm-seite .sp-gitter { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px } }
.rm-seite .sp-kachel { aspect-ratio: 3 / 4; border-radius: 22px; background-size: cover; background-position: center }
/* 30.09. (Owner: «bei Räume die Boxen gleich gross»): kein Aufmacher, keine breiten Schlusskacheln mehr — alle gleich */
/* 30.09. (Owner: «bei Räume die Boxen gleich gross»): kein Aufmacher, keine breiten Schlusskacheln mehr — alle gleich */
.rm-seite .sp-name { font-size: clamp(1.15rem, 4.2vw, 1.6rem); letter-spacing: -.01em }
/* 30.09.: Aufmacher-Schrift entfernt — alle Kacheln gleich */
.rm-seite .sp-satz { font-size: .82rem; -webkit-line-clamp: 3 }   /* 29.10.: drei Zeilen Platz, der Satz passt ganz */
.rm-seite .sp-raeume h3 { font-size: 1.6rem; margin: 10px 0 4px }
.rm-seite .sp-liste { display: grid; gap: 10px; margin-top: 12px }
@media (min-width: 761px) { .rm-seite .sp-liste { grid-template-columns: repeat(2, minmax(0, 1fr)) } }

/* Video-Begegnung — Vorschau, noch nicht schaltbar */
.rm-video { display: flex; gap: 14px; align-items: flex-start; margin: 0 0 20px; padding: 16px 18px; border-radius: 22px;
  background: linear-gradient(135deg, rgba(255,79,122,.16), rgba(139,61,255,.16)); border: 1px solid var(--linie) }
.rm-video-sym { flex: 0 0 44px; height: 44px; border-radius: 14px; display: grid; place-items: center; background: var(--verlauf) }
.rm-video-sym svg { width: 24px; height: 24px; fill: none; stroke: #fff; stroke-width: 2 }
.rm-video h2 { font-size: 1.1rem; margin: 2px 0 4px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap }
.rm-video p { margin: 0 0 10px; color: var(--nebel); font-size: .92rem; max-width: 42em }
.rm-bald { font-size: .72rem; font-weight: 800; padding: 3px 9px; border-radius: 999px; background: var(--pflaume-hell); color: var(--milch) }
.rm-video-wahl { display: inline-flex; gap: 6px; padding: 4px; border-radius: 999px; background: var(--nacht) }
.rm-video-wahl button { border: 0; border-radius: 999px; padding: 8px 16px; font: inherit; font-weight: 700; background: transparent;
  color: var(--nebel); opacity: .7; cursor: not-allowed }

/* 28.09. Korrekturen nach dem ersten Blick in der Sandbox */
/* fünf Reiter statt vier (Räume dazu) — sonst bricht «Profil» in eine zweite Zeile */
@media (max-width: 760px) { .tab-leiste { grid-template-columns: repeat(5, 1fr) } }
/* kleine Kacheln am Handy: nur der Name — der Satz wurde mitten im Wort abgeschnitten; auf der grossen bleibt er */
@media (max-width: 760px) { .rm-seite .sp-kachel .sp-satz { display: none } .rm-seite .sp-kachel .sp-name { padding-bottom: 14px } }
/* Bildschirm: 7 Kacheln im 4er-Raster liessen unten zwei Felder leer — die letzten zwei werden breit */
/* 30.09. (Owner: «bei Räume die Boxen gleich gross»): kein Aufmacher, keine breiten Schlusskacheln mehr — alle gleich */
/* In der App (angemeldet, Handy) ist der Kopf nur Marke + Hell/Dunkel + Abmelden: Start/Preise/Promoter und die
   Sprachen sind Website — sie standen über jedem App-Bildschirm und kosteten eine ganze Zeile. Sprache: im Konto. */
@media (max-width: 760px) {
  body.hat-tableiste .kopf nav > a:not(.knopf):not([data-nav="an"]):not(#nav-logout) { display: none }
  body.hat-tableiste .kopf .sprachwahl { display: none }
  body.hat-tableiste .kopf::after { display: none }
}

/* ── Entdecken am Handy: Karte zuerst (28.09., Owner: «anpassen an das Gewohnte, nur besser») ─────────────────────
   Gemessen vorher bei 390 px: vor der ersten Karte standen Hinweis, «Mag dich», zwei Chip-Reihen, Umkreis und die
   Tagesfrage — die Karte begann unter dem Rand. Jetzt: eine Leiste (Bereiche · deine Räume · Filter), dann die Karte
   so hoch wie der Platz, dann die Knöpfe. Alles andere folgt darunter oder hinter dem Filter-Knopf. */
.filter-knopf { display: none }
@media (max-width: 760px) {
  #tab-fuer-dich { display: flex; flex-direction: column }
  #tab-fuer-dich > .sparten-leiste { order: 1; flex-wrap: nowrap; margin: 0 0 10px }
  #tab-fuer-dich > .sparten-leiste .raum-chips { flex: 1 1 auto; min-width: 0; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none }
  #tab-fuer-dich > .sparten-leiste .raum-chips::-webkit-scrollbar { display: none }
  #tab-fuer-dich > .sparten-leiste .sparten-knopf span { display: none }        /* nur das Symbol — Platz für die Chips */
  .filter-knopf { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; margin-left: auto; padding: 8px 12px;
    border-radius: 999px; border: 1px solid var(--linie); background: var(--pflaume); color: var(--milch); font: inherit; font-weight: 700; font-size: .85rem }
  .filter-knopf svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round }
  .filter-knopf span { display: none }
  #tab-fuer-dich > #themen, #tab-fuer-dich > .entdecken-werkzeuge { order: 2; display: none }
  body.filter-offen #tab-fuer-dich > #themen:not([hidden]), body.filter-offen #tab-fuer-dich > .entdecken-werkzeuge { display: flex }
  body.filter-offen .filter-knopf { border-color: var(--korall); color: var(--korall-schrift) }
  #tab-fuer-dich > .stapel-huelle { order: 3 }
  #tab-fuer-dich > #sehr-block { order: 4; margin: 16px 0 0 }
  #tab-fuer-dich > #sehr-block #mag-dich-titel { cursor: pointer; display: flex; align-items: center; gap: 8px }
  #tab-fuer-dich > #sehr-block #mag-dich-titel::after { content: "›"; margin-left: auto; transition: transform .2s }
  #tab-fuer-dich > #sehr-block.offen #mag-dich-titel::after { transform: rotate(90deg) }
  #tab-fuer-dich > #sehr-block:not(.offen) .sehr-liste { display: none }
  #tab-fuer-dich .haupt-kopf { display: none }                                  /* «Für dich» steht schon im Reiter unten */
  #tab-fuer-dich .tagesfrage { order: 5 }
  #tab-fuer-dich .stapel { height: max(420px, calc(100svh - 330px)) }          /* Kopf ~64 + Leiste ~48 + Knöpfe ~90 + Reiter ~78 + Luft */
  #tab-fuer-dich .aktionen { margin: 12px 0 0; gap: 14px }
  body.seite-entdecken .mee-knopf-schwebend { display: none }                  /* MEE hat unten einen eigenen Reiter */
}
/* «Ihr wollt beide: …» als Plakette auf dem Foto statt als kleine Zeile — das ist, was MEEYO von allen anderen unterscheidet */
.kziel-gemeinsam { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px; padding: 6px 12px; border-radius: 999px;
  background: rgba(22,10,28,.55); border: 1px solid rgba(107,255,176,.45); backdrop-filter: blur(6px); font-size: .86rem; line-height: 1.3 }

/* 28.09. zweiter Blick in der Sandbox */
@media (max-width: 760px) {
  .raum-chips .chip { flex: 0 0 auto; white-space: nowrap; padding: 7px 13px }     /* Schloss neben dem Wort, nicht darüber */
  body.hat-tableiste.seite-entdecken #entdecken > .tabs { display: none }          /* «Für dich / Matches» steht unten in den Reitern */
  #tab-fuer-dich .stapel-huelle { display: flex; flex-direction: column }
  #tab-fuer-dich .stapel-huelle > .stapel { order: 1 }
  #tab-fuer-dich .stapel-huelle > .aktionen { order: 2 }
  #tab-fuer-dich .stapel-huelle > *:not(.stapel):not(.aktionen) { order: 3 }     /* Tagesfrage, Hinweise: unter die Knöpfe */
  #tab-fuer-dich .stapel { height: max(420px, calc(100svh - 312px)) }
  body.raeume-reiter .mee-knopf-schwebend { display: none }
}
@media (max-width: 760px) { #tab-fuer-dich .stapel-huelle > .stapel { flex: 0 0 auto } }   /* ältere Regel .stapel{flex:1} machte die Höhe in der Spalte zu 0 */

/* 28.09.: Vorschau des neuen Kundenportals im Promoter-Material — drei Handy-Bilder nebeneinander, am Handy seitlich wischbar */
.pr-vorschau { margin: 18px 0 }
.pr-vorschau-reihe { display: flex; gap: 14px; overflow-x: auto; padding: 6px 2px 10px; scroll-snap-type: x mandatory }
.pr-vorschau-reihe figure { flex: 0 0 min(220px, 62vw); margin: 0; scroll-snap-align: start }
.pr-vorschau-reihe img { display: block; width: 100%; height: auto; border-radius: 26px; border: 6px solid #1a0f22;
  box-shadow: 0 16px 40px rgba(60,20,90,.22) }
.pr-vorschau-reihe figcaption { text-align: center; font-size: .85rem; color: var(--nebel); margin-top: 6px }

/* ── Ganzes Profil auf der Karte (28.09., Owner: «wie bei Tinder nach oben nehmen und anschauen») ────────────────
   Vorher: der Detailbereich war versteckt (mitten aufs Foto tippen) und ging klein im unteren Teil auf. Jetzt: ein
   sichtbarer Pfeil unten rechts; das Profil fährt über die Karte hoch, der Kopf des Fotos bleibt sichtbar. */
.profil-auf { position: absolute; right: 14px; bottom: 16px; z-index: 3; width: 42px; height: 42px; border-radius: 50%; border: 0;
  background: rgba(255,255,255,.92); color: #22122F; font-size: 1.25rem; font-weight: 800; display: grid; place-items: center;
  box-shadow: 0 6px 18px rgba(0,0,0,.35); cursor: pointer }
.wisch-karte .karte-unten { padding-right: 68px }                       /* Platz für den Pfeil */
.wisch-karte.profil-offen .details { position: absolute; left: 0; right: 0; bottom: 0; top: 30%; max-height: none; z-index: 4;
  border-radius: 24px 24px 0 0; box-shadow: 0 -12px 40px rgba(0,0,0,.35); padding: 46px 18px 22px; overscroll-behavior: contain;
  animation: profil-hoch .28s cubic-bezier(.2,.8,.2,1) }
.wisch-karte.profil-offen .profil-auf, .wisch-karte.profil-offen .karte-unten { display: none }
.profil-zu { position: absolute; top: 8px; left: 50%; transform: translateX(-50%); width: 44px; height: 30px; border-radius: 999px;
  border: 1px solid var(--linie); background: var(--nacht); color: var(--milch); font-weight: 800; cursor: pointer }
@keyframes profil-hoch { from { transform: translateY(40%); opacity: .4 } to { transform: none; opacity: 1 } }
@media (prefers-reduced-motion: reduce) { .wisch-karte.profil-offen .details { animation: none } }
@media (max-width: 760px) { #tab-fuer-dich > .stapel-huelle { width: 100%; max-width: 440px; align-self: center } }   /* margin:0 auto schrumpfte ihn in der Spalte auf die Inhaltsbreite (240 statt 358 px) */

/* ── Chats (28.09., Owner: «besser als Tinder», gewohnt wie Tinder/WhatsApp) ─────────────────────────────────────── */
.neue-matches h3, .nachrichten-titel { font-size: .95rem; margin: 6px 0 10px; color: var(--nebel) }
.nm-reihe { display: flex; gap: 14px; overflow-x: auto; padding: 2px 2px 12px; scrollbar-width: none }
.nm-reihe::-webkit-scrollbar { display: none }
.nm-person { flex: 0 0 auto; display: grid; justify-items: center; gap: 6px; border: 0; background: none; padding: 0; cursor: pointer; color: var(--milch); font: inherit }
.nm-person img { width: 68px; height: 68px; border-radius: 50%; object-fit: cover; background: var(--pflaume);
  box-shadow: 0 0 0 3px var(--nacht), 0 0 0 5px var(--korall) }            /* Ring = neu, noch nicht geschrieben */
.nm-person span { font-size: .8rem; font-weight: 700; max-width: 76px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
@media (max-width: 760px) {
  /* Gruppen ans Ende: zuerst die Menschen, dann die Räume */
  #seite { display: flex; flex-direction: column }
  #seite > #gruppen { order: 9; margin-top: 18px }
  /* Chat als Vollbild über der Reiterleiste — Eingabe unten, Nachrichten dazwischen, keine Fusszeile */
  .chat-panel:not([hidden]) { position: fixed; left: 0; right: 0; top: 0; bottom: calc(64px + env(safe-area-inset-bottom)); z-index: 44;
    display: flex; flex-direction: column; margin: 0; border-radius: 0; background: var(--nacht); padding: env(safe-area-inset-top) 0 0 }
  .chat-panel:not([hidden]) .chat-nachrichten { flex: 1 1 auto; min-height: 0; overflow-y: auto; max-height: none; padding: 10px 14px }
  .chat-panel:not([hidden]) .chat-form { flex: 0 0 auto; padding: 8px 10px; border-top: 1px solid var(--linie); background: var(--pflaume) }
  .chat-kopf { gap: 8px; padding: 10px 10px; border-bottom: 1px solid var(--linie) }
  .chat-kopf > div:not(.chat-menu) { min-width: 0; flex: 1 1 auto }
  .chat-kopf #chat-name { white-space: nowrap }
  .chat-kopf .chat-menu { flex: 0 0 auto; gap: 2px }
  .chat-kopf .chat-menu button { padding: 6px 7px; font-size: .9rem }
  body:has(.chat-panel:not([hidden])) .fuss { display: none }
}
/* Sicherheitstipps: eine Zeile, antippen klappt auf */
.chat-hinweise { cursor: pointer; max-height: 2.6em; overflow: hidden; position: relative }
.chat-hinweise::after { content: "›"; position: absolute; right: 14px; top: 10px; transition: transform .2s }
.chat-hinweise.offen { max-height: none } .chat-hinweise.offen::after { transform: rotate(90deg) }
.pr-vorschau-film { width: min(100%, 340px); margin: 10px 0 12px }   /* 28.09.: Vorschau-Film statt drei kleiner Bilder */
/* 28.09.: reiner Promoter -> Kunde werden (Promoter-Portal) */

/* ── Räume als Begegnungsplattform (28.09., Owner: «nicht nur nach Dating aussehen») ─────────────────────────────── */
.rm-wege { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 0 0 14px }
.rm-weg { display: grid; grid-template-columns: 40px 1fr; grid-template-rows: auto auto; column-gap: 10px; align-items: center;
  padding: 14px; border-radius: 20px; background: var(--pflaume); border: 1px solid var(--linie); color: var(--milch); text-decoration: none }
.rm-weg-sym { grid-row: span 2; width: 40px; height: 40px; border-radius: 13px; display: grid; place-items: center; background: var(--verlauf) }
.rm-weg-sym svg { width: 22px; height: 22px; fill: none; stroke: #fff; stroke-width: 2; stroke-linecap: round }
.rm-weg b { font-size: 1.02rem; line-height: 1.2 }
.rm-weg small { color: var(--nebel); font-size: .8rem; line-height: 1.25 }
.rm-reise { display: flex; align-items: flex-end; width: 100%; min-height: 230px; margin: 0 0 14px; padding: 0; border: 0; border-radius: 24px;
  overflow: hidden; background-size: cover; background-position: center; cursor: pointer; text-align: left; font: inherit; color: #fff }
.rm-reise-text { display: grid; gap: 6px; width: 100%; padding: 90px 18px 16px; white-space: normal; background: linear-gradient(rgba(12,4,18,0), rgba(12,4,18,.72) 38%, rgba(12,4,18,.94)) }
.rm-reise:focus-visible { outline: 3px solid var(--korall); outline-offset: 3px }
.rm-reise-text b { font-size: 1.55rem; line-height: 1.1 }
.rm-reise-text > span:not(.rm-chips) { font-size: .92rem; opacity: .92; max-width: 34em }
.rm-chips { display: flex; flex-wrap: wrap; gap: 6px }
.rm-chips i { font-style: normal; font-weight: 700; font-size: .78rem; padding: 4px 10px; border-radius: 999px; background: rgba(255,255,255,.2); backdrop-filter: blur(4px) }
.rm-schutz { margin: 18px 0; padding: 16px 18px; border-radius: 22px; background: var(--pflaume); border: 1px solid var(--linie) }
.rm-schutz h2 { font-size: 1.1rem; margin: 0 0 6px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap }
.rm-schutz p { margin: 0 0 8px; color: var(--nebel); font-size: .92rem }
.rm-schutz ul { margin: 0 0 12px; padding-left: 1.1em; color: var(--nebel); font-size: .9rem; display: grid; gap: 4px }
.sp-spezial { grid-column: 1 / -1; margin: 6px 0 0; padding: 12px 14px; border-radius: 16px; border: 1px dashed var(--linie); color: var(--nebel) }
.sp-spezial b { color: var(--milch) }
/* 28.09.: «MEEYO-Team · an alle» + Umfrage korrigieren */
.rund-lauf { display: grid; gap: 8px; max-height: 320px; overflow: auto; margin: 8px 0 }
.rund-lauf .neu { outline: 2px solid var(--korall) }
.um-korrektur { display: grid; gap: 8px; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--linie) }
.blinken { animation: blinken 1.2s ease 2 } @keyframes blinken { 50% { background: var(--pflaume-hell) } }
/* 28.09.: Abstimmen endgültig + Archiv zum Aufklappen */
.um-abstimmen { margin-top: 10px }
.um-abgegeben { margin: 6px 0; font-weight: 600 }
.um-archiv-eintrag { border: 1px solid var(--linie); border-radius: 16px; padding: 10px 14px; margin: 0 0 8px; background: var(--pflaume) }
.um-archiv-eintrag summary { cursor: pointer; display: grid; gap: 2px; list-style: none }
.um-archiv-eintrag summary::-webkit-details-marker { display: none }
.um-archiv-eintrag[open] summary { margin-bottom: 8px }
/* 28.09.: Team-Chat zeigt nur einen Link zur Abstimmung */
.um-link { display: grid; grid-template-columns: 34px 1fr auto; gap: 10px; align-items: center; padding: 12px 14px; border-radius: 16px;
  background: linear-gradient(135deg, rgba(255,79,122,.12), rgba(139,61,255,.12)); border: 1px solid var(--linie); color: var(--milch); text-decoration: none }
.um-link + .um-link { margin-top: 8px }
.um-link-sym { font-size: 1.4rem; text-align: center }
.um-link small { display: block; color: var(--nebel) }
.um-link em { font-style: normal; font-weight: 700; color: var(--korall); white-space: nowrap }
.um-teil { margin: 14px 0 6px; font-size: .95rem }
/* 28.09. (Rückmeldung Testerin: «in der Desktop-Version ist oben die Seite leer»): Die Bühne stand mittig zum Formular —
   beim langen Registrierformular rutschte Marke + Versprechen weit nach unten, oben blieb es leer. Oben ausrichten. */
@media (min-width: 901px) { .buehne { align-items: start } .buehne-marke { position: sticky; top: 96px; align-self: start; padding-top: 12px } }
/* 28.09.: Soundtracks unter Werbematerial */
.pr-sound { margin: 14px 0 }
.pr-sound > summary { display: inline-flex; list-style: none; cursor: pointer }
.pr-sound > summary::-webkit-details-marker { display: none }
.pr-sound-credit { background: var(--verlauf); -webkit-background-clip: text; background-clip: text; color: transparent }
.pr-sound-liste { display: grid; gap: 10px; margin: 10px 0 }
@media (min-width: 900px) { .pr-sound-liste { grid-template-columns: repeat(2, minmax(0, 1fr)) } }
.pr-sound-titel { padding: 12px 14px; border-radius: 16px; background: var(--pflaume); border: 1px solid var(--linie) }
.pr-sound-titel p { margin: 4px 0 8px }
.pr-sound-titel audio { width: 100%; height: 36px }
.pr-sound-laden { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 8px 0 0 }
.pr-sound-von { margin: 0 0 6px; color: var(--nebel) }
.vv-hoch { display: grid; gap: 8px; margin-top: 12px; padding: 12px 14px; border: 1px dashed var(--linie); border-radius: 16px }

/* ── Founding 500 live (28.09., Owner: «richtig geil und lebendig … beeile dich … Knopf jetzt anmelden») ────────────── */
.fl { max-width: 780px; margin: 0 auto; padding: 28px 0 48px; text-align: center }
.fl-live { display: inline-flex; align-items: center; gap: 8px; font-weight: 800; letter-spacing: .08em; font-size: .8rem; color: var(--korall);
  padding: 6px 14px; border-radius: 999px; background: rgba(255,79,122,.12); margin: 0 0 14px }
.fl-live i { width: 9px; height: 9px; border-radius: 50%; background: var(--korall); box-shadow: 0 0 0 0 rgba(255,79,122,.6); animation: fl-puls 1.6s infinite }
@keyframes fl-puls { 0% { box-shadow: 0 0 0 0 rgba(255,79,122,.6) } 70% { box-shadow: 0 0 0 12px rgba(255,79,122,0) } 100% { box-shadow: 0 0 0 0 rgba(255,79,122,0) } }
.fl-titel { font-size: clamp(2.2rem, 7vw, 3.6rem); line-height: 1.02; margin: 0 0 10px; letter-spacing: -.02em }
.fl-unter { color: var(--nebel); font-size: 1.1rem; margin: 0 auto 26px; max-width: 34em }
.fl-frei { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 0 0 18px }
.fl-zahl { background: var(--pflaume); border: 1px solid var(--linie); border-radius: 24px; padding: 18px 18px 16px; text-align: left; display: grid; grid-template-columns: auto 1fr; column-gap: 12px; align-items: center }
.fl-zahl b { font-size: clamp(2.8rem, 9vw, 4.4rem); font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums }
.fl-zahl.m b { color: var(--violett) } .fl-zahl.w b { color: var(--korall) }
.fl-zahl span { font-weight: 700; line-height: 1.15 } .fl-zahl span small { color: var(--nebel); font-weight: 600 }
.fl-leiste { grid-column: 1 / -1; height: 12px; border-radius: 6px; background: var(--linie); margin: 14px 0 6px; overflow: hidden }
.fl-leiste i { display: block; height: 100%; width: 0; border-radius: 6px; transition: width 1.6s cubic-bezier(.2,.8,.2,1) }
.fl-zahl.m .fl-leiste i { background: var(--violett) } .fl-zahl.w .fl-leiste i { background: var(--korall) }
.fl-vergeben { grid-column: 1 / -1; color: var(--nebel) }
.fl-timer { display: inline-flex; align-items: center; gap: 10px; padding: 10px 18px; border-radius: 999px; background: var(--pflaume); border: 1px solid var(--linie); margin: 4px 0 20px }
.fl-timer svg { width: 22px; height: 22px; fill: none; stroke: var(--korall); stroke-width: 2.2; stroke-linecap: round }
.fl-timer b { font-variant-numeric: tabular-nums; font-size: 1.1rem }
.fl-cta { display: inline-block; position: relative; overflow: hidden; font-size: 1.15rem; padding: 18px 34px; background: var(--verlauf); color: #fff; border: 0;
  box-shadow: 0 12px 40px rgba(255,79,122,.35) }
.fl-cta::after { content: ""; position: absolute; top: 0; left: -60%; width: 40%; height: 100%; background: linear-gradient(100deg, transparent, rgba(255,255,255,.35), transparent);
  animation: fl-glanz 3.2s ease-in-out infinite }
@keyframes fl-glanz { 0%, 55% { left: -60% } 100% { left: 130% } }
.fl-leicht { color: var(--nebel); font-size: .9rem; margin: 12px 0 30px }
.fl-beweis { font-size: 1.05rem; margin: 0 0 14px } .fl-beweis b { color: var(--korall) }
.fl-diagramme { display: grid; gap: 14px; margin: 0 0 26px }
.fl-dia { background: var(--pflaume); border: 1px solid var(--linie); border-radius: 24px; padding: 16px 18px 12px; text-align: left }
.fl-dia h2 { font-size: 1.15rem; margin: 0 0 10px; display: flex; justify-content: space-between; align-items: baseline }
.fl-dia h2 small { color: var(--nebel); font-weight: 600; font-size: .8rem }
.fl-balken { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; height: 150px; align-items: end }
.fl-b { display: grid; grid-template-rows: auto 1fr auto; justify-items: center; height: 100%; }
.fl-b em { font-style: normal; font-weight: 800; font-size: .95rem; align-self: end; margin-bottom: 4px }
.fl-b i { width: 70%; max-width: 44px; height: var(--h); min-height: 6px; border-radius: 10px 10px 4px 4px; align-self: end; transform-origin: bottom; transform: scaleY(0);
  transition: transform .9s cubic-bezier(.2,.9,.2,1.1) calc(var(--i) * 90ms + 300ms) }
.fl-dia.m .fl-b i { background: linear-gradient(180deg, #a96bff, var(--violett)) } .fl-dia.w .fl-b i { background: linear-gradient(180deg, #ff7d9d, var(--korall)) }
.fl-b span { color: var(--nebel); font-size: .8rem; font-weight: 600; margin-top: 6px }
.fl-b.heute span { color: var(--milch); font-weight: 800 }
.fl-b.heute i { box-shadow: 0 0 18px rgba(255,79,122,.45) }
.fl.da .fl-b i { transform: scaleY(1) }
.fl-verlust { font-size: 1.1rem; margin: 0 0 16px } .fl-verlust b { color: var(--korall) }
.fl-klein { color: var(--nebel); font-size: .82rem; margin-top: 14px }
.fl.ohne-zahlen .fl-frei, .fl.ohne-zahlen .fl-diagramme, .fl.ohne-zahlen .fl-timer { display: none }
@media (max-width: 520px) { .fl-frei { grid-template-columns: 1fr } .fl-balken { height: 120px; gap: 5px } .fl-cta { width: 100%; box-sizing: border-box } }
@media (prefers-reduced-motion: reduce) { .fl-live i, .fl-cta::after { animation: none } .fl-b i, .fl-leiste i { transition: none } }
/* 28.09.: Founding live, kompakt auf der Startseite (unter dem Einstieg) */
.flk { max-width: 980px; margin: 8px auto 28px; padding: 18px 22px; border-radius: 26px; background: var(--pflaume); border: 1px solid var(--linie);
  box-shadow: 0 18px 50px rgba(139,61,255,.14) }
.flk-kopf { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 12px } .flk-kopf .fl-live { margin: 0 } .flk-kopf b { font-size: 1.1rem }
.flk-reihen { display: grid; gap: 8px }
.flk-reihe { display: grid; grid-template-columns: 72px 1fr auto auto; gap: 10px; align-items: center }
.flk-reihe span { font-weight: 700 } .flk-reihe b { font-size: 1.5rem; font-weight: 800; font-variant-numeric: tabular-nums; min-width: 2.2em; text-align: right }
.flk-reihe small { color: var(--nebel) } .flk-reihe .fl-leiste { margin: 0 }
.flk-reihe.m b { color: var(--violett) } .flk-reihe.w b { color: var(--korall) }
.flk-reihe.m .fl-leiste i { background: var(--violett) } .flk-reihe.w .fl-leiste i { background: var(--korall) }
.flk-fuss { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 14px }
.flk-timer { margin: 0 } .flk-cta { padding: 12px 22px; font-size: 1rem } .flk-mehr { color: var(--nebel); font-weight: 600 }
@media (max-width: 560px) { .flk { margin: 8px 0 24px; padding: 16px } .flk-cta { width: 100%; text-align: center; box-sizing: border-box } }
.hero .flk { margin: 4px auto 8px; width: min(560px, 100%); box-sizing: border-box; text-align: left }   /* 28.09.: im Einstieg — Handy: direkt unter dem Titel */
@media (min-width: 761px) {   /* Startseite Desktop: Titel · Text/Knöpfe · Live · Telefon */
  body.start .hero { grid-template-areas: "titel" "text" "live" "telefon" }
  body.start .hero > .flk { grid-area: live; justify-self: center }
}
@media (min-width: 901px) { body:not(.start) .hero > .flk { grid-column: 1 } }
/* 28.09.: im Einstieg der Startseite überschreiben Hero-Regeln das Raster — Zeilen fest: Name | Balken | Zahl frei */
.hero .flk .flk-reihe { display: grid; grid-template-columns: 70px minmax(0, 1fr) auto auto; gap: 10px; align-items: center; justify-items: stretch; text-align: left }
.hero .flk .flk-reihe > * { margin: 0; max-width: none; width: auto }
.hero .flk .flk-reihe .fl-leiste { width: 100% }
.hero .flk .flk-kopf { justify-content: flex-start; text-align: left }
.hero .flk .flk-kopf b { font-size: 1rem }
.flk-reihe .fl-leiste { grid-column: auto }   /* die grosse Seite lässt .fl-leiste über die ganze Breite laufen — hier nicht */
/* 28.09.: «So füllen sich die Plätze» als zweiter Knopf */
.flk .flk-mehr { display: inline-flex; align-items: center; gap: 8px; padding: 12px 20px; font-weight: 700; color: var(--milch); text-decoration: none }
.flk .flk-mehr svg { width: 18px; height: 18px; fill: none; stroke: var(--korall); stroke-width: 2.4; stroke-linecap: round }
@media (max-width: 560px) { .flk .flk-mehr { width: 100%; justify-content: center; box-sizing: border-box } }
.cms-knoten .zst2 { display: block; opacity: .8 }

/* 29.09. (Owner: «kundenfreundlich wie Tinder, nur besser»): Interessen auf der Karte, Hinweis fuer reine Wischer,
   Raum-Knoepfe nur am Handy (am Bildschirm gibt es links die Gruppen und «Bereiche entdecken»). */
.wisch-karte .kint { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 0 }
.wisch-karte .kint-chip { font-size: .78rem; font-weight: 700; padding: 3px 10px; border-radius: 999px; background: rgba(255,255,255,.16);
  border: 1px solid rgba(255,255,255,.28); color: #fff; backdrop-filter: blur(4px) }
.wisch-karte .kint-chip.mehr { background: transparent }
.raeume-hinweis { margin: 6px 0 10px; font-size: .9rem; color: var(--nebel) }
.raeume-hinweis a { font-weight: 800 }
.nb-knoepfe { display: flex; flex-wrap: wrap; gap: 8px }
.rm-interessen { display: flex; gap: 10px; align-items: flex-start; margin: 14px 0 0; padding: 12px 14px; border: 1px solid var(--linie);
  border-radius: 14px; cursor: pointer; text-align: left }
.rm-interessen span { display: grid; gap: 2px }
.rm-interessen small { color: var(--nebel) }
.rm-interessen input { margin-top: 4px; width: 18px; height: 18px }
@media (min-width: 761px) { #raum-chips { display: none !important } }

/* 30.09.: Raum-Tags in «Ich bin» / «Ich suche» gegliedert (Gebildet) */
.chips .tag-gruppe { flex-basis: 100%; margin: 8px 0 2px; font-size: .8rem; font-weight: 800; color: var(--nebel) }

/* 30.09.: Vorschau-Schalter — Admins sehen neue Funktionen mit diesem Schild, Kunden gar nicht */
.vorschau-schild { display: inline-block; font-size: .72rem; font-weight: 800; padding: 2px 8px; border-radius: 999px; background: #FFC24B; color: #2a1330; vertical-align: middle; margin-left: 6px }

/* 30.09.: «Der MEEYO-Vibe wächst überall» — Karte wie im FOXX-Board (runde Marker), Farben aus der Marke */
.vibe-block { padding: 36px 0 }
.vibe-block h2 { margin-bottom: 6px }
.vibe-karte { height: clamp(320px, 52vh, 520px); border-radius: 20px; overflow: hidden; border: 1px solid rgba(255,255,255,.12); background: var(--pflaume) }
.vibe-leer { display: grid; place-items: center; height: 100%; margin: 0; padding: 20px; text-align: center; color: var(--nebel); max-width: none }   /* 18.10.: ohne max-width:none stand der Satz 247–353 px links neben der Mitte (p { max-width: 72ch }) */
.vibe-pin-huelle { background: none; border: 0 }
.vibe-pin { display: inline-grid; place-items: center; min-width: 40px; height: 40px; padding: 0 6px; border-radius: 999px; font-weight: 800; font-size: .82rem; line-height: 1; color: #fff; border: 3px solid #fff; box-shadow: 0 4px 14px rgba(0,0,0,.35) }
.vibe-legende .vibe-pin { min-width: 30px; height: 30px; border-width: 2px; margin: 0 4px 0 12px; box-shadow: none; vertical-align: middle }
.vibe-legende .vibe-pin:first-child { margin-left: 0 }
.vibe-pin.art-k { background: #FF4F7A }
.vibe-pin.art-p { background: #8B3DFF }
.vibe-pin.art-pk { background: linear-gradient(135deg, #FF4F7A 50%, #8B3DFF 50%) }

/* 30.09.: Ideen-Board der Verwaltung */
.ideen-liste { display: grid; gap: 12px }
.idee { border: 1px solid rgba(139,61,255,.28); border-radius: 14px; padding: 14px 16px }
.idee.machen { border-color: rgba(46,204,113,.55) } .idee.nicht { opacity: .8; border-color: rgba(255,255,255,.14) }
.idee-kopf { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; justify-content: space-between }
.idee-kopf h3 { margin: 0 }
.idee-stimmen { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 8px 0 }
.idee-stimmen button.an { outline: 2px solid #FF4F7A }
.idee-entscheid { font-weight: 700 }
.idee-kommentare p { margin: 4px 0 }
.idee-kommentare form, .idee-entscheiden { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px }
.idee-kommentare input, .idee-entscheiden input { flex: 1 1 220px; min-width: 0 }

/* 30.09.: «Worauf hast du heute Lust?» — Knopf, Blatt, Schild auf der Karte */
.lust-leiste { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 10px }
.lust-knopf { border: 1px solid rgba(255,79,122,.5); background: rgba(255,79,122,.1); color: inherit; border-radius: 999px; padding: 9px 16px; font-weight: 700; cursor: pointer }
.lust-blatt { position: fixed; inset: 0; z-index: 60; display: grid; align-items: end; justify-items: center; background: rgba(10,4,16,.55) }
.lust-blatt[hidden] { display: none }
.lust-blatt-innen { width: min(520px, 100%); background: var(--pflaume); border-radius: 22px 22px 0 0; padding: 22px 18px calc(22px + env(safe-area-inset-bottom, 0px)) }
.lust-blatt-innen h2 { margin: 0 0 4px }
.lust-optionen { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; margin: 14px 0 }
.lust-option { display: flex; align-items: center; gap: 10px; text-align: left; padding: 12px; border-radius: 14px; border: 1px solid rgba(255,255,255,.14); background: rgba(255,255,255,.04); color: inherit; font-weight: 700; cursor: pointer }
.lust-option.an { border-color: #FF4F7A; background: rgba(255,79,122,.16) }
.lust-emoji { font-size: 1.4rem }
.lust-pille { position: absolute; top: 62px; left: 14px; z-index: 3; background: rgba(20,8,28,.72); color: #fff; font-size: .78rem; font-weight: 700; padding: 5px 10px; border-radius: 999px; backdrop-filter: blur(6px) }

/* 30.09.: Business — Raumregeln, Moderator-Knoepfe */
.raum-regeln ul, .sp-regeln ul { margin: 6px 0 8px; padding-left: 18px }
.sp-regeln { margin: 6px 0 10px; padding: 12px 14px; border-radius: 14px; border: 1px solid rgba(139,61,255,.4) }
.gr-mod { display: inline-flex; flex-wrap: wrap; gap: 8px; margin-left: 8px }
.gr-mod button { color: #FF4F7A }

/* 30.09.: Pre-Launch-Hinweis ganz oben + Andreas' Starttext + Vibe-Block mittig (Owner: «alles einheitlich zentriert») */
.prelaunch { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px 14px;
  max-width: 46rem; margin: 0 auto 18px; padding: 12px 18px; border-radius: 16px; text-align: center;
  border: 1px solid rgba(255,79,122,.45); background: rgba(255,79,122,.1) }
.prelaunch p { margin: 0 }
.pl-marke { font-weight: 800; font-size: .78rem; padding: 4px 10px; border-radius: 999px; background: var(--verlauf); color: #fff; white-space: nowrap }
.hero-andreas p { margin: 0 0 10px }
.ha-lead { font-weight: 800; font-size: 1.12rem }
.ha-fakten { font-weight: 800 }
.ha-schluss { font-style: italic }
.vibe-block { text-align: center }
.vibe-block .hero-text { margin-inline: auto; max-width: 34em }

/* 30.09. (Owner: «alles einheitlich zentriert, auch bei Karten»): die Antwort im Wähler mittig wie der Rest der Startseite */
.waehler-antwort { text-align: center }
.waehler-antwort .waehler-beispiel p { margin-inline: auto; max-width: 40em }
.waehler-antwort .chips { justify-content: center }
.waehler-antwort .waehler-beispiel { justify-items: center }
.waehler-antwort p { margin-inline: auto } .waehler-antwort .waehler-marke { justify-self: center }
.waehler-antwort .chips { margin-inline: auto; justify-content: center }

/* 30.09. (Owner: «bei Dein Team kann ich in der Baumstruktur nicht nach links und rechts scrollen»). Gemessen: die Reihen
   waren breiter als ihr Elternteil und wurden per flex-center nach BEIDEN Seiten hinausgeschoben — was links hinausragt,
   liegt bei negativem scrollLeft und ist nie erreichbar; der Masskasten mass zudem nur die rechte Haelfte. Jetzt ist jede
   Reihe so breit wie ihr Inhalt, nichts schrumpft, und der ganze Baum liegt im scrollbaren Bereich. */
.cms-baum-innen { width: max-content; min-width: 0 }
.cms-baum ul { width: max-content; margin-inline: auto }
.cms-baum li { flex-shrink: 0 }
.absicht-hinweis { margin: 0 0 8px; padding: 8px 12px; border-radius: 12px; background: rgba(255,79,122,.12); border: 1px solid rgba(255,79,122,.4) }

/* 30.09.: «✓ Business geprüft» */
.bp-kasten { margin: 8px 0 12px; padding: 12px 14px; border-radius: 14px; border: 1px solid rgba(46,204,113,.45); background: rgba(46,204,113,.08) }
.bp-kasten p { margin: 6px 0 }
.bp-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: end }
.bp-form label { flex: 1 1 200px; min-width: 0 }
.kbiz { background: #2ecc71; color: #06220f; font-size: .72rem; font-weight: 800; padding: 2px 8px; border-radius: 999px; margin-left: 6px; white-space: nowrap }
/* 30.09.: Kartenhaufen — Zahl = Orte, nie Personen */
.vibe-pin.vibe-haufen { min-width: 46px; height: 46px; font-size: .95rem; box-shadow: 0 0 0 6px rgba(255,79,122,.22), 0 4px 14px rgba(0,0,0,.35) }

/* 30.09.: Pop-up «Neue Idee» in der Verwaltung */
.ideen-popup-schatten { position: fixed; inset: 0; z-index: 80; display: grid; place-items: center; padding: 16px; background: rgba(10,4,16,.6) }
.ideen-popup { width: min(560px, 100%); max-height: 80vh; overflow: auto; background: var(--pflaume); border: 1px solid var(--linie); border-radius: 18px; padding: 20px }
.ideen-popup .idee { margin: 10px 0 }

/* 30.09.: Pop-up «Land vs. IP» */
.land-frage-schatten { position: fixed; inset: 0; z-index: 90; display: grid; place-items: center; padding: 16px; background: rgba(10,4,16,.6) }
.land-frage { width: min(460px, 100%); background: var(--pflaume); border: 1px solid var(--linie); border-radius: 18px; padding: 22px 20px; text-align: center }
.land-frage-knoepfe { display: grid; gap: 10px; margin: 16px 0 8px }

/* 01.10.: Reiter «Promoter» unten fuer Promoter (sechs statt fuenf) + Karte im Konto */
@media (max-width: 760px) { .tab-leiste.mit-promoter { grid-template-columns: repeat(6, 1fr) } .tab-leiste.mit-promoter a { font-size: .66rem } }
/* 01.10. (am Handy gemessen): im Portal-Kopf ueberdeckte die Suche den Titel («D.») und rechts wurde ein Kreis abgeschnitten.
   Am Handy: Menue + Titel in der ersten Zeile, Suche und Werkzeuge darunter in voller Breite.
   24.10.2026 (Tablet quer, 1024 px gemessen): neben Suche, Glocke, Code und Konto blieben dem Titel 73 px — «Deine / Zahlen, /
   dein Link …» stand Wort fuer Wort untereinander. Darum gilt dieselbe Aufteilung bis 1180 px (iPad Air quer). */
@media (max-width: 1180px) {
  .cms-kopf { flex-wrap: wrap; row-gap: 8px }
  .cms-titel { flex: 1 1 auto }
  .cms-werkzeuge { order: 3; flex: 1 1 100%; margin-left: 0; min-width: 0 }
  .cms-werkzeuge .cms-suche { flex: 1 1 auto; min-width: 0 }
  .cms-werkzeuge .cms-suche input { width: 100% }
}
/* 01.10. (am Handy gemessen): Auf Login/Registrierung stand das Formular unter dem ganzen Werbetext — wer sich anmelden will,
   musste zuerst scrollen. Am Handy kommt das Formular zuerst, der Text danach. */
@media (max-width: 900px) { .buehne .buehne-form { order: -1 } }

/* 01.10.: Portal «Bedienung: App & Web» */
.bd-filme { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; margin: 12px 0 18px }
.bd-filme figure { margin: 0 } .bd-filme video { width: 100%; max-height: 70vh; border-radius: 16px; background: #000; aspect-ratio: 9 / 19.5 }
.bd-filme figcaption { text-align: center; font-weight: 700; margin-top: 6px }
.pr-bedienung ol { padding-left: 20px } .pr-bedienung li { margin: 6px 0 }
@media (max-width: 760px) { .cms-werkzeuge .cms-suche { flex: 1 1 150px } }   /* 01.10.: Suche nicht auf «S» zusammenschrumpfen */
/* 28.10.2026 (Pruefbefund 8, gemessen 390 px): neben Problem, Glocke, ?, «Link kopieren» und Konto blieben der Suche 73 px («Si…»).
   Am Handy steht die Suche darum in einer eigenen Zeile ueber den Knoepfen; «Link kopieren» bleibt einzeilig rechts. */
@media (max-width: 480px) {
  .cms-werkzeuge { flex-wrap: wrap; row-gap: 8px }
  .cms-werkzeuge .cms-suche { flex: 1 1 100% }
  .cms-werkzeuge #kopieren-kopf { margin-left: auto; white-space: nowrap }
}

/* 01.10.: Film im Hinweis-Pop-up — hochkant, nie hoeher als der Bildschirm */
.hinweis-film { display: block; width: auto; max-width: 100%; max-height: 52vh; margin-inline: auto; aspect-ratio: 720 / 1524; background: #000 }

/* 02.10.: Registrierung — Founding-500-Hinweis */
.reg-founding { margin: 6px 0 14px; padding: 14px 16px; border-radius: 16px; border: 1px solid rgba(255,79,122,.45); background: linear-gradient(135deg, rgba(255,79,122,.12), rgba(139,61,255,.12)) }
.reg-founding-titel { margin: 0 0 6px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px } .reg-founding-titel b { font-size: 1.02rem }
.reg-founding p.klein { margin: 4px 0 } .reg-founding-frei b { color: var(--korall) } .reg-founding-danach { opacity: .8 }

/* 02.10.: Vibe-Karte — Antippen oeffnet bildschirmfuellend, «← Zurück» / Browser-Zurück / Esc schliessen */
.vibe-karte { position: relative; cursor: zoom-in }
.vibe-gross-hinweis { position: absolute; left: 50%; bottom: 14px; transform: translateX(-50%); z-index: 500; border: 0; border-radius: 999px; padding: 8px 16px;
  background: rgba(22,10,28,.82); color: #fff; font: inherit; font-weight: 700; font-size: .85rem; cursor: pointer; box-shadow: 0 6px 20px rgba(0,0,0,.35) }
.vibe-vollbild { position: fixed; inset: 0; z-index: 1000; display: flex; flex-direction: column; background: var(--nacht);
  padding: env(safe-area-inset-top, 0px) 0 env(safe-area-inset-bottom, 0px) }
.vibe-vollbild-kopf { display: flex; align-items: center; gap: 14px; padding: 10px 14px; border-bottom: 1px solid var(--linie) }
.vibe-vollbild-kopf b { font-size: 1rem } .vibe-vollbild-kopf button { white-space: nowrap; flex: 0 0 auto }
.vibe-vollbild .vibe-karte.gross { flex: 1; height: auto; border-radius: 0; border: 0; cursor: grab }
html.vibe-offen, html.vibe-offen body { overflow: hidden }
html.vibe-offen .mee-knopf-schwebend, html.vibe-offen .tab-leiste, html.vibe-offen .nach-oben { display: none !important }

/* 02.10.: «Nach oben»-Pfeil unten rechts, ueber dem MEE-Knopf */
.nach-oben { position: fixed; right: 26px; bottom: 82px; z-index: 39; width: 44px; height: 44px; padding: 0; margin: 0; min-width: 0; box-sizing: border-box; line-height: 0; border-radius: 50%; display: grid; place-items: center;
  border: 1px solid rgba(139,61,255,.5); background: var(--pflaume); color: var(--milch); cursor: pointer; box-shadow: 0 10px 28px rgba(0,0,0,.35) }
.nach-oben svg { display: block; width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round }
.nach-oben:hover { border-color: var(--korall) } .nach-oben:focus-visible { outline: 3px solid var(--korall); outline-offset: 2px }
:root[data-theme="light"] .nach-oben { background: #fff }
@media (max-width: 760px) { .nach-oben { right: 18px; bottom: 74px } body.hat-tableiste .nach-oben { bottom: 142px } }
/* 28.10.2026 (Pruefbefund 14): ueber einem Anmelde-/Registrier-Formular weichen MEE-Knopf und Pfeil aus (meeyo.js setzt .weicht) */
.mee-knopf-schwebend.weicht, .nach-oben.weicht { opacity: 0; visibility: hidden; pointer-events: none; transition: opacity .15s ease, visibility 0s .15s }
/* 28.10. (Owner: «nicht ganz verschwinden»): ueber dem Formular wird MEE zur Lasche im freien Rand rechts (30 × 44 px, nur das «M») */
.mee-knopf-schwebend.am-rand { right: 0; width: 30px; height: 44px; padding: 0; gap: 0; justify-content: center; border-radius: 14px 0 0 14px; border-right: 0; transform: none; animation: none }
.mee-knopf-schwebend.am-rand .mee-text { display: none }
.mee-knopf-schwebend.am-rand .mee-avatar { width: 24px; height: 24px; flex: 0 0 24px; font-size: .72rem; box-shadow: none }

.vibe-ohne-ort { margin-left: 10px; opacity: .8; white-space: nowrap }   /* 02.10. */
/* Material-Bibliothek (02.10.): QR-Platz im Admin setzen — Rahmen zeigt, wo der QR des Promoters sitzen wird */
.pv-qr { margin-top: 14px } .pv-qr-feld { position: relative; display: inline-block; max-width: min(100%, 520px) }
.pv-qr-feld img { display: block; max-width: 100%; height: auto; cursor: crosshair; border-radius: 8px }
#pv-qr-rahmen { position: absolute; border: 3px dashed var(--korall); background: rgba(255,79,122,.18); pointer-events: none; border-radius: 6px }
.pr-bib-gruppe { margin: 12px 0 4px; display: block } .pr-bib-liste { display: flex; flex-wrap: wrap; gap: 6px } .pr-bib-ein { margin-top: 10px }
/* ---- Co-Founder (Owner 02.10.): Plätze als Sitzreihe, Status in Farben — grau, orange, blau, gold, grün, dunkelgrün, rot */
.cf-toepfe { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 14px; margin: 14px 0 } .cf-toepfe .karte { margin: 0 }
.cf-kopf { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px } .cf-kopf h2 { margin: 0 }
/* 11.10.: Admin → Platin-Seite senden (admin_platin.js) */
.pp-senden-karte { border: 2px solid #8b5cf6 } .pp-s-aus { display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-start; margin-top: 12px } .pp-s-aus > div { flex: 1 1 280px; min-width: 0 } .pp-s-aus textarea, .pp-s-aus input { width: 100% } .pp-s-aus img { border-radius: 8px; background: #fff; padding: 6px }
.cf-topf.voll { outline: 2px solid var(--rot); outline-offset: -2px } .cf-voll { color: var(--rot); font-weight: 800; letter-spacing: .04em } .cf-frei b { font-size: 1.3rem }
.cf-sitze { display: grid; grid-template-columns: repeat(25, 1fr); gap: 3px; margin: 12px 0 6px } .cf-sitze i { aspect-ratio: 1; border-radius: 4px; background: var(--linie); min-width: 6px }
.cf-sitze i.res { background: #ff9f43 } .cf-sitze i.def { background: var(--minze) }
.cf-warnungen { list-style: none; margin: 0; padding: 0 } .cf-warnungen li { padding: 7px 10px; border-radius: 10px; margin: 4px 0; background: rgba(255,159,67,.12) } .cf-warnungen li.cf-w-rot { background: rgba(255,107,107,.16); color: var(--rot); font-weight: 600 } .cf-warnungen a { color: inherit }
.cf-filter { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0 } .cf-suche { display: block; margin: 6px 0 10px; max-width: 360px }
.cf-st { display: inline-block; white-space: nowrap; font-size: .8rem; font-weight: 700; padding: 3px 9px; border-radius: 999px; background: rgba(185,167,201,.18); color: var(--nebel) }
.cf-st-reserviert { background: rgba(255,159,67,.18); color: #e07f1f } .cf-st-antrag_versendet { background: rgba(77,141,255,.14); color: #4d8dff } .cf-st-vertrag_versendet { background: rgba(77,141,255,.2); color: #3a7bf0 }
.cf-st-vertrag_zurueck { background: rgba(224,176,48,.2); color: #b98a10 } .cf-st-geldeingang { background: rgba(107,255,176,.18); color: var(--minze-schrift) } .cf-st-aktiv { background: #1f9d63; color: #fff }
.cf-st-abgelaufen { background: rgba(255,107,107,.18); color: var(--rot) } .cf-st-aus { background: transparent; color: var(--nebel); border: 1px dashed var(--linie) }
#cf-tab td.zahl, #cf-tab td:nth-child(6) { white-space: nowrap } tr.cf-aus td { opacity: .55 } .cf-bald { color: #e07f1f; font-weight: 600 } .cf-teil { color: #e07f1f; font-weight: 600 }
/* 11.10. (Owner): Live-Vorschau unter dem Betrag + Laenderbonus-Marke (Fruehbucher erste Runde) */
.cf-vorschau { margin: .2rem 0 .6rem; font-weight: 600; color: var(--milch) } .cf-vorschau.rot { color: var(--rot) }
.cf-lb { display: inline-block; margin-left: .35rem; padding: 0 .45rem; border-radius: 999px; font-size: .72rem; font-weight: 700; background: #f3e3b5; color: #6b4a00; vertical-align: middle }
.cf-leiste { list-style: none; display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; padding: 0; margin: 12px 0 } .cf-leiste li { padding: 8px 6px; border-radius: 10px; background: var(--nacht); text-align: center; border-top: 3px solid var(--linie) }
.cf-leiste li b { display: block; font-size: .78rem } .cf-leiste li small { color: var(--nebel); font-size: .75rem } .cf-leiste li.fertig { border-top-color: var(--minze) } .cf-leiste li.jetzt { border-top-color: currentColor; background: var(--pflaume) }
.cf-aktionen { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0 14px } .cf-res-knopf { background: #ff9f43; color: #2a1405; font-weight: 800 } .cf-geld-knopf { background: #1f9d63; color: #fff; font-weight: 800 }
.cf-doks { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 18px } .cf-doks li { color: var(--nebel) } .cf-doks li.da { color: inherit } .cf-doks small { color: var(--nebel) }
.cf-verlauf { list-style: none; padding: 0; margin: 0; font-size: .9rem } .cf-verlauf li { padding: 5px 0; border-bottom: 1px solid var(--linie) } .cf-verlauf time { color: var(--nebel); font-variant-numeric: tabular-nums; margin-right: 6px }
#cf-detail .formular { max-width: 960px } #cf-detail .zwei { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)) } #cf-status-form, #cf-dok-form { display: flex; flex-wrap: wrap; align-items: end; gap: 10px } #cf-status-form select, #cf-dok-form select { width: auto } #cf-detail h3 { margin: 18px 0 6px }
@media (max-width: 700px) { .cf-leiste { grid-template-columns: repeat(2, 1fr) } .cf-sitze { grid-template-columns: repeat(13, 1fr) } }
/* Webinare (02.10.) */
.pr-web-eintrag { padding: 10px 0; border-bottom: 1px solid var(--linie) } .pr-web-knoepfe { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 0 }
.webinar-seite video, .webinar-seite img { width: 100%; border-radius: 12px; display: block }

/* 02.10. offener Promoter-Antrag (Kunde + Promoter) */
.promoter-offen-band { display: block; margin: 10px auto; max-width: 720px; padding: 12px 16px; border-radius: 14px; background: linear-gradient(90deg, rgba(255,79,122,.18), rgba(139,61,255,.18)); border: 1px solid rgba(255,79,122,.45); color: inherit; text-decoration: none; line-height: 1.4 }
.promoter-offen-band b { color: var(--korall-schrift) }
/* Saison: eigene Datei static/saison.css (10.10.2026, Saison-Kalender saison.py) */

/* 03.10. Telefon-Schalter + Visitenkarte im Portal */
.pr-tel-schalter { display: flex; gap: 8px; align-items: flex-start; margin: 6px 0 12px }
.vk-vorschau { display: flex; flex-wrap: wrap; gap: 10px; margin: 8px 0 }
.vk-vorschau img { width: min(100%, 300px); border-radius: 10px; box-shadow: 0 6px 18px rgba(0,0,0,.25) }
/* 03.10. Bibliothek im Portal: Kacheln mit Vorschau (Bild mit eigenem QR, Film als Standbild) */
.pr-bib-kacheln { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; margin: 6px 0 14px }
.pr-bib-kachel { display: flex; flex-direction: column; gap: 4px; padding: 8px; border-radius: 14px; background: var(--pflaume); border: 1px solid var(--linie); color: inherit; text-decoration: none }
.pr-bib-kachel:hover, .pr-bib-kachel:focus-visible { border-color: var(--korall) }
.pr-bib-kachel b { font-size: .88rem; line-height: 1.3 } .pr-bib-kachel small { color: var(--nebel); font-size: .75rem }
.pr-bib-bild { position: relative; display: block; aspect-ratio: 3 / 4; border-radius: 10px; overflow: hidden; background: var(--nacht) }
.pr-bib-bild img { width: 100%; height: 100%; object-fit: cover; display: block }
.pr-bib-bild.film::after { content: "▶"; position: absolute; inset: 0; display: grid; place-items: center; color: #fff; font-size: 2rem; text-shadow: 0 2px 10px rgba(0,0,0,.6) }
#bib-optionen { display: block } #bib-optionen .pr-tel-schalter { display: flex; justify-content: flex-start; gap: 10px; text-align: left; width: auto }
#bib-optionen .pr-tel-schalter input { width: auto; flex: none; margin-top: 3px }
.mat-erleben { margin-top: 14px } .mat-erleben .pr-bib-bild { aspect-ratio: auto; min-height: 160px } .mat-erleben .pr-bib-bild img { height: auto; object-fit: contain }
.pr-bib-formate { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px } .pr-bib-formate .knopf { padding: 6px 10px; font-size: .8rem }
/* 03.10. Abzeichen */
.abz-gruppe { margin: 10px 0 } .abz-reihe { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 6px }
.abz-medaille { display: flex; flex-direction: column; align-items: center; gap: 2px; width: 120px; padding: 10px 8px; border-radius: 16px; text-align: center;
  background: var(--pflaume); border: 1px solid var(--linie); opacity: .55; filter: grayscale(.8) }
.abz-medaille.an { opacity: 1; filter: none; box-shadow: 0 6px 18px rgba(0,0,0,.18) }
.abz-medaille .abz-sym { font-size: 1.8rem; width: 54px; height: 54px; display: grid; place-items: center; border-radius: 50% }
.abz-medaille.bronze .abz-sym { background: radial-gradient(circle at 35% 30%, #f3c9a0, #b06a32) }
.abz-medaille.silber .abz-sym { background: radial-gradient(circle at 35% 30%, #ffffff, #9ea7b3) }
.abz-medaille.gold .abz-sym { background: radial-gradient(circle at 35% 30%, #fff1b8, #c8962e) }
.abz-medaille.founder .abz-sym { background: radial-gradient(circle at 35% 30%, #b98bff, #4b1d8f); box-shadow: 0 0 0 2px #d9b45a }
.abz-medaille .abz-titel { font-weight: 800; font-size: .85rem } .abz-medaille small { color: var(--nebel); font-size: .72rem; line-height: 1.3 }
.abz-chip { display: inline-block; margin: 4px 4px 0 0; padding: 2px 8px; border-radius: 999px; font-size: .72rem; font-weight: 800; color: #2a1405; background: #e6c27a; vertical-align: middle }
.abz-chip.bronze { background: #e0a878 } .abz-chip.silber { background: #dfe3ea } .abz-chip.gold { background: #f2cf6b } .abz-chip.founder { background: linear-gradient(90deg, #8b3dff, #c08a2e); color: #fff }

/* 03.10. Co-Founder-Paket: Vorteile */
.cf-vorteile { list-style: none; padding: 0; display: grid; gap: 10px } .cf-vorteile li { padding: 12px 14px; border-radius: 14px; background: var(--pflaume); border: 1px solid var(--linie) }
.cf-v-sym { font-size: 1.4rem; margin-right: 8px }
.fahnen { display: inline-flex; gap: 3px; vertical-align: middle; margin-right: 4px } .fahnen svg { border-radius: 2px; box-shadow: 0 0 0 1px rgba(0,0,0,.12) }

/* 03.10. Abzeichen v2: Medaillen nebeneinander, Klick -> Dialog */
.abz-leiste { display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-start }
.abz-medaille { appearance: none; border: 0; background: none; padding: 4px; width: 104px; display: flex; flex-direction: column; align-items: center; gap: 4px; cursor: pointer; opacity: .42; filter: grayscale(1) brightness(.9); transition: transform .15s, opacity .15s }
.abz-medaille.an { opacity: 1; filter: none }
.abz-medaille:hover, .abz-medaille:focus-visible { transform: translateY(-3px); opacity: 1 }
.abz-medaille img { width: 84px; height: 84px; border-radius: 50%; box-shadow: 0 8px 22px rgba(0,0,0,.35) }
.abz-medaille .abz-titel { font-weight: 800; font-size: .8rem; line-height: 1.2; text-align: center; color: inherit } .abz-medaille small { color: var(--nebel); font-size: .7rem }
.abz-schatten { position: fixed; inset: 0; background: rgba(10,4,16,.7); display: grid; place-items: center; z-index: 1000; padding: 16px }
.abz-dialog { background: var(--pflaume); border-radius: 22px; padding: 22px; max-width: 380px; width: 100%; text-align: center; box-shadow: 0 20px 60px rgba(0,0,0,.5) }
.abz-dialog img { width: 160px; height: 160px; border-radius: 50%; box-shadow: 0 12px 30px rgba(0,0,0,.45) } .abz-dialog h3 { margin: 12px 0 4px } .abz-dialog p { text-align: left } .abz-dialog .abz-status { text-align: center; color: var(--nebel) }
.abz-chip img { width: 16px; height: 16px; vertical-align: -3px; border-radius: 50% }

/* 03.10. Ernennungen oben im Portal */
.ern-band { display: grid; gap: 8px; margin: 10px 0 14px }
.ern-eintrag { display: flex; gap: 12px; align-items: center; padding: 12px 16px; border-radius: 16px; background: linear-gradient(90deg, rgba(255,79,122,.16), rgba(139,61,255,.16)); border: 1px solid rgba(255,79,122,.35) }
.ern-sym { font-size: 1.6rem } .ern-eintrag small { color: var(--nebel) }

/* 03.10. MEEYO-Organigramm — Pins im Detail-Dialog des 3D-Baums (19.10.: flacher Baum geloescht, nur noch organigramm3d.js) */
.org-abz { display: flex; gap: 3px; justify-content: center } .org-abz img { width: 22px; height: 22px; border-radius: 50% }
.org-abz.gross img { width: 54px; height: 54px }
.org-dialog p { text-align: left }
.org-dialog img.org-foto { display: block; width: 88px; height: 110px; margin: 0 auto 8px; border-radius: 14px; object-fit: cover; object-position: top }
/* Kontakt-Kaestchen der Europa-Leitung (Portal) */
.leitung-karte .leitung-medaille { width: 88px; height: 88px; border-radius: 50%; box-shadow: 0 8px 22px rgba(0,0,0,.3) }
.leitung-medaille.rechts { margin-left: auto; align-self: center; width: 76px; height: 76px }

/* 03.10.: Medaillen in den Leitungs-Kaestchen rund halten — die Kaestchen-Regel fuer Bilder zog sie auf 110 px Breite */
.ansprech-karte img.leitung-medaille { width: 88px; height: 88px; padding: 0; background: none; min-width: 0; max-width: none; flex: 0 0 auto; object-fit: contain; aspect-ratio: 1; border-radius: 50% }
.ansprech-karte img.leitung-medaille.rechts { width: 76px; height: 76px }
/* 03.10. Organigramm in 3D */
.org3d { position: relative; border-radius: 22px; overflow: hidden;
  background: radial-gradient(120% 70% at 50% 100%, rgba(150,200,120,.35), transparent 60%), linear-gradient(180deg, #efe6ff 0%, #fbeff5 55%, #eef6e8 100%) }
.org3d-flaeche { display: block; width: 100%; outline: none }
.org3d-flaeche:active { cursor: grabbing }
.org3d-flaeche:focus-visible { box-shadow: inset 0 0 0 3px rgba(255,79,122,.6) }
.org3d-hilfe { position: absolute; left: 0; right: 0; bottom: 8px; margin: 0; text-align: center; font-size: .78rem; color: #5b3a6e; pointer-events: none }
.org3d-liste { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); margin: 0; padding: 0 }
.org3d-liste:focus-within { position: static; width: auto; height: auto; clip: auto; padding: 8px 16px; display: flex; flex-wrap: wrap; gap: 6px; list-style: none }
.org3d-liste.offen { position: static; width: auto; height: auto; clip: auto; padding: 8px 0; display: flex; flex-wrap: wrap; gap: 6px; list-style: none }   /* 19.10.: ohne WebGL die Liste statt eines zweiten Baums */

/* 10.10. Profilfoto im runden Konto-Kreis oben rechts im Portal */
.cms-ich i.mit-foto { overflow: hidden; padding: 0; background: var(--pflaume) } .cms-ich i.mit-foto img { width: 100%; height: 100%; object-fit: cover; display: block }

/* 10.10. «Meine Daten» im Promoter-Portal — eine Zeile je Dokument */
.unt-karte { padding: 16px 18px; border-radius: 18px; background: var(--pflaume); border: 1px solid var(--linie); margin: 6px 0 22px }
.unt-liste { list-style: none; margin: 10px 0; padding: 0; display: grid; gap: 6px }
.unt-liste li { display: flex; gap: 12px; align-items: center; justify-content: space-between; padding: 10px 12px; border-radius: 12px; background: rgba(255,255,255,.04) }
.unt-liste li span { display: grid; min-width: 0 } .unt-liste li b { overflow-wrap: anywhere } .unt-liste li small { color: var(--nebel) }
.unt-liste li .unt-pins { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end } .unt-pins button { padding: 0; border: 0; background: none; cursor: pointer }
.unt-pins img { width: 38px; height: 38px; border-radius: 50%; display: block } @media (max-width: 600px) { .unt-karte { padding-bottom: 72px } }
.foto-mee[data-q=schlecht] { border-left: 3px solid var(--rot) } .foto-mee[data-q=gut] { border-left: 3px solid var(--minze) }   /* 10.10. Foto-Hinweis lesbar statt auf dem Bild */

/* 10.10.2026 Startkopf «Echte Begegnungen» — nach dem Kurzfilm der Bibliothek (Owner). Handy: Film über die ganze Fläche, Text darauf.
   Tisch: Text links, Film als hohes Bild rechts. Schrift Jakarta, Farben aus den Tokens — Marke unverändert. */
.eh { position: relative; display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(280px, .85fr); gap: clamp(24px, 4vw, 64px); align-items: center; padding: 24px 0 40px }
.eh-film { position: relative; order: 2; aspect-ratio: 9 / 16; max-height: 78vh; justify-self: center; width: 100%; max-width: 420px; border-radius: 28px; overflow: hidden; box-shadow: 0 30px 80px rgba(139, 61, 255, .28) }
.eh-video { width: 100%; height: 100%; object-fit: cover; display: block }
.eh-mehr { position: absolute; top: 14px; right: 14px; transform: rotate(6deg); font-weight: 800; font-style: italic; font-size: .95rem; color: #fff; background: rgba(22, 10, 28, .55); padding: 6px 12px; border-radius: 12px; backdrop-filter: blur(4px) }
.eh-text { order: 1 }
.eh h1 { font-size: clamp(2.2rem, 5.4vw, 4.2rem); line-height: 1.02; letter-spacing: -.02em; margin: 0 0 14px }
.eh-zweck { font-size: clamp(1.05rem, 1.6vw, 1.3rem); line-height: 1.45; margin: 0 0 18px; max-width: 34ch }
.eh-hand { display: inline-block; transform: rotate(-3deg); font-weight: 800; font-style: italic; color: #fff; background: linear-gradient(100deg, #ff2f8f, #ff4f7a); padding: 8px 16px; border-radius: 10px; box-shadow: 0 10px 26px rgba(255, 47, 143, .35); margin: 0 0 22px }
.eh-symbole { list-style: none; margin: 0 0 24px; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px }
.eh-symbole li { display: grid; justify-items: center; gap: 6px; text-align: center; font-size: .78rem; line-height: 1.2; font-weight: 600 }
.eh-symbole svg { width: 42px; height: 42px; padding: 9px; border-radius: 50%; background: var(--verlauf); fill: none; stroke: #fff; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round }
.eh-knoepfe { display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 14px }
.eh-claim { font-weight: 800; font-style: italic; margin: 0; color: var(--korall) } .eh-claim span { font-weight: 700 }
.hero-h { font-size: clamp(1.8rem, 3.6vw, 2.8rem); line-height: 1.08; margin: 0 }
/* 19.10.2026: die Handy-Regeln «Schleife als Grund, weisse Schrift darauf» gelten nur, solange die Schleife im Startkopf steht
   (.eh:has(> .eh-film)). Bei «Gratis zuerst» steht dort der Film «Echt» als Karte unter dem Text, die Schleife neben dem Handy in
   #so-gehts — ohne diese Eingrenzung lag sie dort als Vollflaeche (inset: 0) und die Schrift im Startkopf waere hell auf hell. */
@media (max-width: 760px) {
  .eh { grid-template-columns: 1fr; padding: 0 0 28px } .eh:has(> .eh-film) { min-height: calc(100svh - 70px) }
  .eh > .eh-film { position: absolute; inset: 0; max-width: none; max-height: none; aspect-ratio: auto; border-radius: 0 0 28px 28px; order: 0 }
  .eh > .eh-film::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(22, 10, 28, .15) 0%, rgba(22, 10, 28, .25) 35%, rgba(22, 10, 28, .88) 72%, rgba(22, 10, 28, .96) 100%) }
  .eh:has(> .eh-film) > .eh-text { position: relative; align-self: end; padding: 0 18px; color: #fff }
  .eh:has(> .eh-film) .eh-text h1, .eh:has(> .eh-film) .eh-text h1 .glanz { color: #fff } .eh:has(> .eh-film) .eh-zweck { color: rgba(255, 255, 255, .92) } .eh:has(> .eh-film) .eh-claim { color: #ffd1e1 }
  .eh-symbole { display: flex; flex-wrap: wrap; gap: 6px } .eh-symbole li { display: inline-flex; align-items: center; gap: 6px; font-size: .74rem; padding: 4px 10px 4px 4px; border-radius: 99px; background: var(--pflaume); text-align: left } .eh-symbole svg { width: 26px; height: 26px; padding: 5px }
  .eh:has(> .eh-film) .eh-symbole li { background: rgba(255, 255, 255, .14) }
  .eh:has(> .eh-film) .knopf.leise { background: rgba(255, 255, 255, .14); color: #fff; border-color: rgba(255, 255, 255, .3) }
}
@media (prefers-reduced-motion: reduce) { .eh-video { display: none } .eh-film { background: center / cover url("/static/marketing/start/start_schleife.jpg") } }

/* 10.10. (Owner): KI-Hinweis unter dem Handy auf Anhieb sichtbar — grösser, eigene Fläche */
.karten-hinweis { color: inherit; font-size: .95rem; font-weight: 600; line-height: 1.45; max-width: 34em; margin: 16px auto 0; padding: 12px 16px; border-radius: 14px; background: var(--pflaume); border-left: 4px solid var(--korall); text-align: left }
/* 10.10. Musik-Knopf im Startkopf */
.eh-musik { position: absolute; left: 14px; bottom: 14px; z-index: 2; display: inline-flex; gap: 6px; align-items: center; font-weight: 800; font-size: .9rem; color: #fff; background: rgba(22, 10, 28, .6); border: 1px solid rgba(255, 255, 255, .3); padding: 8px 14px; border-radius: 99px; cursor: pointer; backdrop-filter: blur(4px) }
.eh-musik[aria-pressed=true] { background: var(--verlauf); border-color: transparent }
@media (max-width: 760px) { .eh-musik { top: 14px; bottom: auto; left: 14px } }

/* 10.10. Aufschluesselung der Match-Balken (Antippen) */
button.komp.komp-auf { all: unset; box-sizing: border-box; cursor: pointer; width: 100% }
button.komp.komp-auf:focus-visible { outline: 2px solid var(--korall); outline-offset: 2px; border-radius: 8px }
.komp-teile { list-style: none; margin: 2px 0 10px; padding: 8px 12px; border-radius: 12px; background: var(--pflaume); display: grid; gap: 4px; font-size: .88rem }
.komp-teile li { display: flex; justify-content: space-between; gap: 12px } .komp-teile li.klein { display: block; color: var(--nebel) }
.komp-teile b { white-space: nowrap }
/* 10.10.2026 Startseite unter dem Kopf — derselbe Stil wie der Kurzfilm (Bilder, pinke Hand-Schrift, runde Karten) */
.so-schritte { list-style: none; counter-reset: s; margin: 18px 0 22px; padding: 0; display: grid; gap: 12px }
.so-schritte li { counter-increment: s; display: grid; grid-template-columns: 44px 1fr; column-gap: 12px; align-items: start; padding: 14px 16px; border-radius: 18px; background: var(--pflaume); border: 1px solid var(--linie) }
.so-schritte li::before { content: counter(s); grid-row: span 2; width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; font-weight: 800; color: #fff; background: var(--verlauf) }
.so-schritte b { font-size: 1.05rem } .so-schritte span { color: var(--nebel); font-size: .95rem; line-height: 1.4 }
.klein-hand { font-size: .95rem; padding: 6px 14px; margin: 0 auto 10px; display: table }
.allein { text-align: center }
.allein-karten { list-style: none; margin: 18px 0 8px; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px }
.allein-karten li { position: relative; aspect-ratio: 3 / 4; border-radius: 22px; overflow: hidden; background: center / cover var(--bild); box-shadow: 0 18px 40px rgba(22, 10, 28, .18); display: flex; align-items: flex-end; text-align: left }
.allein-karten li::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 45%, rgba(22, 10, 28, .85)) }
.allein-karten span { position: relative; z-index: 1; padding: 16px; color: #fff; font-weight: 800; font-size: 1.02rem; line-height: 1.25 }
.allein-karten li.betont span { color: #ffd1e1 }
@media (max-width: 760px) { .allein-karten { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px } .allein-karten span { font-size: .9rem; padding: 12px } }

/* 10.10. (Owner: «der Block unter dem Handy verdeckt die Schrift darunter»): die Buehne waechst mit dem Hinweis, statt feste Hoehe */
.telefon-buehne, body.start .telefon-buehne { height: auto; display: grid; justify-items: center; row-gap: 4px }
/* «Drucken lassen» (10.10.2026, druck.js / druckshop.py): Produkt, Menge, Motiv, Adresse links — Vorschau, Preis, Kaufen rechts */
.druck-hinweis { background: var(--pflaume-hell); border: 1px solid var(--linie); border-left: 4px solid var(--violett); border-radius: var(--radius-klein); padding: 10px 12px; margin: 10px 0 } .druck-hinweis.warn { border-left-color: var(--gelb) } .druck-hinweis.gut { border-left-color: var(--minze) }
.druck-raster { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(260px, 1fr); gap: 22px; align-items: start; margin-top: 6px }
.druck-wahl h4, .druck-liste-titel { display: flex; align-items: center; gap: 8px; margin: 18px 0 10px; font-size: .95rem } .druck-liste-titel { margin-top: 28px }
.druck-nr { width: 22px; height: 22px; border-radius: 50%; background: var(--verlauf); color: #fff; display: inline-grid; place-items: center; font-size: .75rem; font-weight: 800; flex: none }
.druck-produkte { display: grid; grid-template-columns: repeat(auto-fill, minmax(155px, 1fr)); gap: 10px }
.druck-produkt { text-align: left; display: flex; flex-direction: column; gap: 4px; background: var(--nacht); color: var(--milch); border: 1px solid var(--linie); border-radius: var(--radius-klein); padding: 12px; font-weight: 400; line-height: 1.3 }
.druck-produkt b { font-size: .98rem } .druck-produkt .klein { color: var(--nebel) } .druck-format { color: var(--korall-schrift); font-size: .8rem; font-weight: 700 }
.druck-produkt.an { border-color: var(--korall); box-shadow: inset 0 0 0 1px var(--korall), 0 8px 22px rgba(255,79,122,.18) } .druck-produkt:disabled { opacity: .55; cursor: not-allowed }
.druck-gruppe { grid-column: 1 / -1; margin: 4px 0 -2px; font-size: .78rem; font-weight: 800; letter-spacing: .04em; color: var(--nebel) }
/* 12.10.: Motivwahl mit Bild (druck.js motiveZeichnen) — Kacheln wie im Material, «nur digital» gedimmt mit Grund */
.druck-motive { display: grid; grid-template-columns: repeat(auto-fill, minmax(128px, 1fr)); gap: 10px }
.druck-motiv { text-align: left; display: flex; flex-direction: column; gap: 4px; padding: 7px; border-radius: var(--radius-klein); background: var(--nacht); color: var(--milch); border: 1px solid var(--linie); font-weight: 400; line-height: 1.25; cursor: pointer }
.druck-motiv b { font-size: .82rem } .druck-motiv small { color: var(--nebel); font-size: .72rem }
.druck-motiv.an { border-color: var(--korall); box-shadow: inset 0 0 0 1px var(--korall), 0 8px 22px rgba(255,79,122,.18) }
.druck-motiv.aus { opacity: .55; cursor: not-allowed } .druck-digital { color: var(--korall-schrift); font-weight: 700 }
.druck-motiv-bild { display: block; aspect-ratio: 105 / 148; border-radius: 6px; overflow: hidden; background: var(--pflaume) } .druck-motiv-bild.karte { aspect-ratio: 85 / 55 }
.druck-motiv-bild img { width: 100%; height: 100%; object-fit: contain; display: block } .druck-motiv-bild.leer { opacity: .4 }
.druck-mengen { display: flex; flex-wrap: wrap; gap: 8px } .druck-mengen .chip { cursor: pointer; border-radius: 999px }
.druck-zeile { display: flex; flex-wrap: wrap; gap: 12px } .druck-zeile label, .druck-adresse label { display: flex; flex-direction: column; gap: 4px; font-size: .85rem; color: var(--nebel) } .druck-zeile select { min-width: 180px }
.druck-adresse { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 12px } .druck-adresse .breit { grid-column: 1 / -1 } .druck-adresse input, .druck-adresse select { width: 100%; box-sizing: border-box }
.druck-seite { position: sticky; top: 16px; display: flex; flex-direction: column; gap: 12px; background: var(--nacht); border: 1px solid var(--linie); border-radius: var(--radius); padding: 14px }
.druck-vorschau { display: flex; gap: 10px; justify-content: center; align-items: center; min-height: 220px; padding: 14px; border-radius: var(--radius-klein); background: repeating-conic-gradient(var(--pflaume-hell) 0 25%, var(--pflaume) 0 50%) 0 0 / 18px 18px; transition: opacity .2s }
.druck-vorschau img { max-width: 100%; max-height: 380px; border-radius: 4px; box-shadow: 0 10px 28px rgba(0,0,0,.35) } .druck-vorschau.karte { flex-direction: column } .druck-vorschau.karte img { max-height: 175px } .druck-vorschau.laedt { opacity: .55 }
.druck-vorschau-text { margin: -4px 0 0; text-align: center }
/* 12.10.: beidseitig — Vorder- und Rueckseite nebeneinander; Material: druckfertige Flyer (static/druck.js flyerMaterial) */
.druck-vorschau.zwei img { min-width: 0; max-width: calc(50% - 5px) }
.mat-druckflyer { margin: 14px 0 6px } .mat-druckflyer h4 { margin: 0 0 4px }
.mat-druckflyer-liste { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; margin-top: 10px }
.druck-motiv.mat-flyer { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; cursor: default }
.mat-flyer b, .mat-flyer small, .mat-flyer-knoepfe { grid-column: 1 / -1 } .mat-flyer-knoepfe { display: flex; flex-wrap: wrap; gap: 6px }
.druck-preis { display: flex; flex-direction: column; gap: 3px; min-height: 96px; transition: opacity .2s } .druck-preis.laedt { opacity: .5 } .druck-preis .klein { color: var(--nebel) }
.druck-betrag { font-size: 1.95rem; font-weight: 800; letter-spacing: -.01em; color: var(--milch) } .druck-entwurf { font-style: italic }
#drucken .druck-kaufen { width: 100%; background: var(--verlauf); color: #fff; box-shadow: 0 10px 26px rgba(255,79,122,.3) } .druck-kaufen:disabled { opacity: .5; cursor: not-allowed }
#druck-liste { display: grid; gap: 10px }
.druck-bestellung { background: var(--nacht); border: 1px solid var(--linie); border-radius: var(--radius-klein); padding: 12px 14px } .druck-bestellung p { margin: 6px 0 0 }
.druck-kopf { display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap; align-items: center }
.druck-status { font-size: .75rem; font-weight: 700; padding: 3px 10px; border-radius: 999px; background: var(--pflaume-hell); color: var(--milch); border: 1px solid var(--linie) }
.st-geliefert .druck-status, .st-versandt .druck-status { color: var(--minze-schrift); border-color: var(--minze-schrift) } .st-fehler .druck-status, .st-storniert .druck-status, .st-offen .druck-status { color: var(--korall-schrift); border-color: var(--korall-schrift) }
.druck-schritte { list-style: none; display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; padding: 0; margin: 10px 0 4px }
.druck-schritte li { font-size: .75rem; color: var(--nebel); border-top: 3px solid var(--linie); padding-top: 6px } .druck-schritte li.fertig { border-top-color: var(--korall); color: var(--milch) } .druck-schritte li.jetzt { font-weight: 800 }
.druck-verweis { margin: 12px 0; display: flex; flex-wrap: wrap; align-items: center; gap: 10px }
@media (max-width: 900px) { .druck-raster { grid-template-columns: 1fr } .druck-seite { position: static } }
@media (max-width: 520px) { .druck-adresse { grid-template-columns: 1fr } .druck-produkte { grid-template-columns: 1fr 1fr } .druck-produkt { padding: 10px } .druck-schritte li { font-size: .66rem } .druck-zeile select { min-width: 0; width: 100% } .druck-zeile label { flex: 1 1 140px } }

/* Rollenwechsel Kunde ⇄ Promoter (Masterprint Schritt 4, 10.10.): EINE Karte «Du bist» unter Ich, im Konto und im Portal (rolle.js) */
.rolle-karte { border: 1px solid rgba(139,61,255,.45); background: linear-gradient(135deg, rgba(139,61,255,.10), rgba(255,79,122,.06)); max-width: 720px; margin: 0 0 18px }
.rolle-kopf { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px; margin-bottom: 8px }
.rolle-du { color: var(--nebel); font-size: .9rem }
.rolle-name { font-size: 1.25rem; color: var(--milch) }
.rolle-pillen { display: flex; flex-wrap: wrap; gap: 6px; flex-basis: 100% }
.rolle-pille { font-size: .8rem; padding: 3px 10px; border-radius: 999px; border: 1px solid var(--linie); color: var(--nebel) }
.rolle-pille.an { border-color: var(--korall); color: var(--korall-schrift) }
.rolle-wechsel { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; padding: 4px; border-radius: 14px; background: var(--nacht); border: 1px solid var(--linie); margin: 10px 0 4px }
.rolle-wechsel .rolle-seg { background: transparent; color: var(--nebel); border: 0; border-radius: 10px; padding: 10px 8px; font-weight: 700; cursor: pointer; min-height: 44px }
.rolle-wechsel .rolle-seg.an { background: var(--verlauf); color: #fff }
.rolle-schritt { border-top: 1px solid var(--linie); padding-top: 12px; margin-top: 12px }
.rolle-schritt > b { display: block; margin-bottom: 4px }
.rolle-schritt .knopf.zweit { background: transparent; color: inherit; border: 1px solid currentColor; margin-left: 8px }
.rolle-liste { margin: 6px 0 8px; padding-left: 18px; color: var(--nebel); font-size: .9rem; line-height: 1.45 }
.rolle-knoepfe { display: flex; flex-wrap: wrap; gap: 8px }
.rolle-hinweis { margin-top: 10px }
.rolle-mehr { margin-top: 12px; border-top: 1px solid var(--linie); padding-top: 10px }
.rolle-mehr summary { cursor: pointer; color: var(--nebel); font-size: .9rem }
.rolle-mehr .knopf { margin-top: 4px }
.rolle-banner { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; border: 1px solid rgba(139,61,255,.45); background: var(--pflaume); border-radius: 14px; padding: 10px 12px; margin: 0 0 14px }
.rolle-banner > span { flex: 1 1 240px }
body.cms-an .rolle-banner { margin: 12px 16px 0 }   /* im Portal hat main keinen Rand */
.rolle-banner .rolle-banner-zu { background: transparent; border: 0; color: var(--nebel); font-size: 1.3rem; cursor: pointer; padding: 0 6px }
.rolle-banner .knopf { padding: 8px 16px; font-size: .9rem }
/* button[type=button] ist sonst «leise» (Zeile 63) — der Hauptschritt der Karte soll der Verlaufsknopf sein */
.rolle-karte button.knopf:not(.leise):not(.zweit) { background: var(--verlauf); color: #fff }
/* 11.10. «MEE lernt»: Karten auf Entdecken (static/mee_lernt.js) */
.mee-karten .mee-karte { display: flex; gap: 12px; align-items: flex-start; margin-bottom: 10px } .mee-karte .mee-avatar { flex: 0 0 34px; width: 34px; height: 34px; font-size: 1rem } .mee-karte p { margin: 0 0 6px } .mee-notizen li { margin-bottom: 6px }
/* 12.10.2026: Suchfeld vor jeder Laenderauswahl (static/laenderwahl.js, Vorlage _laender.html) */
.land-suche { margin-bottom: 6px; padding: 8px 12px; font-size: .9rem }
#land-wahl .land-suche { width: auto; max-width: 180px; padding: 4px 8px; margin-left: 4px }
/* 13.10.2026: /preise am Handy (360/390 px) — die Laenderwahl stand 32 px ueber den Rand (ausrichtung_pruefen); Zeile darf umbrechen */
#land-wahl { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 4px } #land-wahl select { max-width: 100%; min-width: 0 }
/* 14.10.2026: Promoter-Antrag mit zwei Kaestchen — Fehler OBEN, gross und auffaellig (vorher unter dem Knopf, am Handy nie im Bild) */
.antrag-fehler { font-size: 1.05rem; font-weight: 600; line-height: 1.45; padding: 12px 14px; border-radius: 12px; border: 2px solid currentColor; margin: 0; scroll-margin-top: 90px }
.antrag-fehler:focus { outline: none }
.antrag-uebernahme { display: grid; gap: 6px; margin: 0; padding: 12px 14px; border-radius: 12px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.12) }
.antrag-uebernahme > div { display: flex; flex-wrap: wrap; gap: 4px 12px } .antrag-uebernahme dt { min-width: 8.5em; opacity: .75 } .antrag-uebernahme dd { margin: 0; font-weight: 600; overflow-wrap: anywhere }
.antrag-kaestchen { align-items: start !important; padding: 12px 14px; border-radius: 12px; border: 1px solid rgba(255,255,255,.14) } .antrag-kaestchen input { width: 22px !important; height: 22px; margin-top: 2px !important }
.auszahl-hinweis p { margin: 8px 0 0 }

/* 16.10.: Admin «Umteilen» — Vorschlagsliste unter dem Feld, ein Satz vor dem Klick */
.umteilen-karte label { position: relative; display: block }
.ut-liste { display: flex; flex-direction: column; gap: 2px; margin-top: 4px }
.ut-liste button { text-align: left; background: var(--pflaume-hell); color: var(--milch); border: 1px solid var(--linie); border-radius: 8px; padding: 8px 10px; cursor: pointer }
.ut-liste button small { color: var(--nebel) }
.ut-satz { min-height: 1.4em }

/* 16.10.: Partner gewinnen (Admin) — Sparten als Formular */
.pg-adm-sparten { border: 1px solid var(--linie); border-radius: 10px; padding: 10px; display: grid; gap: 8px }
.pg-adm-sparte { display: grid; grid-template-columns: 1fr 1.4fr 2fr auto; gap: 6px; align-items: center }
@media (max-width: 700px) { .pg-adm-sparte { grid-template-columns: 1fr auto } .pg-adm-sparte input:not(:first-child) { grid-column: 1 } }

/* 17.10.2026: eigenes Promoter-Bild — Knoepfe unter der Kartenvorschau, nie darueber */
.tf-bild { margin-top: 12px; display: grid; gap: 6px } .tf-bild-knoepfe { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 }

/* 17.10.2026 (Owner: kurze Anmeldung, register.html): Land + Handynummer in einer Zeile, Frau/Mann als zwei grosse Knoepfe, Founder als
   eine kurze Zeile. Schmal (Handy) untereinander — nichts ueberlagert (tools/ausrichtung_pruefen.py). */
.reg-kurz { margin: -4px 0 12px }
.reg-founding.reg-founding-kurz { padding: 10px 14px; margin: 4px 0 14px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px }
.reg-tel { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.3fr); gap: 12px; align-items: start } .reg-tel > * { min-width: 0 } .reg-tel input[name=telefon] { height: auto }
.reg-handy-hinweis { margin: -4px 0 12px; color: var(--nebel) }
.reg-zwei-wahl { display: grid; grid-template-columns: 1fr 1fr; gap: 10px } .reg-zwei-wahl .absicht-wahl { align-items: center; padding: 14px 16px; margin: 0 }
.reg-zwei-wahl .absicht-wahl input { margin-top: 0 } .reg-zwei-wahl .absicht-wahl b { font-size: 1.05rem }
.reg-ab18 { margin-top: 6px } .reg-datenschutz { margin: 2px 0 14px; color: var(--nebel) }
.antrag-art { margin: 6px 0 14px } .antrag-art #antrag-firma:not([hidden]) { display: block; margin-top: 8px }
/* 29.10.2026: Rechtsform -> Firmenkonto (firmenkonto.js) */
.fk-hinweis { margin: 8px 0; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--linie) } .fk-streifen { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: space-between; margin: 0 0 12px } .fk-liste { list-style: none; padding: 0 } .fk-liste li { margin: 6px 0 }
@media (max-width: 420px) { .reg-tel { grid-template-columns: 1fr } }

/* 18.10.2026 (Owner): Startseite «Gratis zuerst» (_start_gratis.html, Schalter start_gratis_zuerst) — der Gratis-Chat gross, das Abo darunter
   leiser. Nur Tokens und vorhandene Bausteine (.eh-hand, .haken, .glanz, .knopf.gross); hell und dunkel ueber dieselben Variablen. */
.gz { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(240px, .8fr); gap: clamp(20px, 4vw, 56px); align-items: center; margin: 8px 0 36px;
  padding: clamp(22px, 4vw, 48px); border-radius: 28px; background: linear-gradient(var(--pflaume), var(--pflaume)) padding-box, var(--verlauf) border-box;
  border: 2px solid transparent; box-shadow: 0 30px 80px rgba(139, 61, 255, .22) }
.gz-marke { display: inline-block; font-size: .8rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--minze-schrift);
  background: rgba(107, 255, 176, .14); padding: 5px 12px; border-radius: 999px; margin-bottom: 12px }
.gz h2 { font-size: clamp(2.1rem, 5vw, 3.6rem); line-height: 1.04; margin: 0 0 14px; text-align: left }
.gz-spruch { margin: 0 0 16px }
.gz-lead { font-size: clamp(1.02rem, 1.5vw, 1.2rem); line-height: 1.45; margin: 0 0 16px; max-width: 40ch }
.gz-punkte, .gz-plus { list-style: none; padding: 0; margin: 0 0 20px; display: grid; gap: 10px }
.gz-punkte li, .gz-plus li { display: flex; gap: 12px; align-items: flex-start; font-weight: 600; line-height: 1.4 }
.gz-knoepfe { display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 8px }
.gz-bild { justify-self: center; width: 100%; max-width: 300px }
.gz-handy { display: grid; gap: 8px; padding: 14px; border-radius: 26px; background: var(--nacht); border: 1px solid var(--linie) }
.gz-kopfzeile { display: flex; align-items: center; gap: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--linie) } .gz-kopfzeile b { flex: 1 }
.gz-avatar { width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; font-weight: 800; color: #fff; background: var(--verlauf) }
.gz-blase { margin: 0; max-width: 82%; padding: 9px 13px; border-radius: 16px 16px 16px 4px; background: var(--pflaume-hell); font-size: .92rem; justify-self: start }
.gz-blase.du { justify-self: end; border-radius: 16px 16px 4px 16px; background: var(--verlauf); color: #fff }
.gz-ton { display: flex; align-items: center; gap: 8px; min-width: 60% } .gz-ton i { font-style: normal; color: var(--korall-schrift) }
.gz-welle { flex: 1; height: 14px; background: repeating-linear-gradient(90deg, var(--nebel) 0 2px, transparent 2px 5px); opacity: .7; border-radius: 4px }
.gz-ton small { color: var(--nebel) }
/* Das Abo darunter: dieselben Pakete, aber leiser — der Gratis-Block bleibt das Erste, was ins Auge faellt */
.gz-mehr { text-align: center } .gz-mehr h2 { margin-top: .2em; font-size: clamp(1.5rem, 3vw, 2.2rem) } .gz-mehr .hero-text, .gz-mehr > .klein { margin-inline: auto; max-width: 42em; text-align: center }
.gz-plus { max-width: 34em; margin: 14px auto 14px; text-align: left } .gz-plus li { font-weight: 400 }
.gz-plus .haken { background: rgba(139, 61, 255, .16); color: var(--violett) }
:root[data-theme="light"] .gz-plus .haken { color: #5b1fd1 }
.gz-unter .paket { background: transparent; border: 1px solid var(--linie) } .gz-unter .paket-preis { font-size: 1.6rem }
/* 18.10.2026 (Owner: «Wo ist der Zähler Founder-Platz für Leute, die ein Abo möchten?») — der Founding-Zaehler im Abo-Teil, direkt vor den
   Paketen, als klarer Hinweis: derselbe Verlaufsrand wie der Gratis-Block, nur kleiner. */
.gz-founding { max-width: 34em; margin: 18px auto 16px; padding: 16px 20px; border-radius: 18px; text-align: center;
  background: linear-gradient(var(--pflaume), var(--pflaume)) padding-box, var(--verlauf) border-box; border: 2px solid transparent;
  box-shadow: 0 16px 44px rgba(139, 61, 255, .2) }
.gz-founding-titel { display: block; font-size: clamp(1.08rem, 2vw, 1.3rem); line-height: 1.3 }
.gz-founding .frei-text { margin: 8px auto 0 }
/* 18.10.2026 (Owner: «die Vorteile vom Abo müssen klar überwiegen») — Vergleich Gratis | Mit Abo (_start_gratis.html vergleich()). Die Abo-Spalte
   traegt den Verlauf; am Handy wird jede Zeile ein Kaertchen: Titel oben, darunter Gratis und Mit Abo nebeneinander (data-k als Beschriftung). */
.gz-vergleich-rahmen { max-width: 48em; margin: 18px auto 10px }
.gz-vergleich { width: 100%; border-collapse: separate; border-spacing: 0; text-align: left; font-size: .95rem; line-height: 1.35;
  border: 1px solid var(--linie); border-radius: 18px; overflow: hidden; background: var(--pflaume) }
.gz-vergleich caption { font-weight: 800; font-size: 1.05rem; margin: 0 0 10px; text-align: center }
.gz-vergleich th, .gz-vergleich td { padding: 11px 14px; border-bottom: 1px solid var(--linie); vertical-align: middle }
.gz-vergleich tbody tr:last-child > * { border-bottom: 0 }
.gz-vergleich thead th { font-size: .78rem; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--nebel) }
.gz-vergleich thead th.gz-abo { background: var(--verlauf); color: #fff }
.gz-vergleich th[scope="row"] { font-weight: 600 }
.gz-vergleich td { color: var(--nebel); width: 26% }
.gz-vergleich td.gz-abo { background: rgba(139, 61, 255, .12); color: var(--milch); font-weight: 700 }
.gz-ja { color: var(--minze-schrift); font-weight: 800; font-size: 1.1em } .gz-nein { color: var(--nebel); opacity: .7 }
.gz-weg { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0) }
@media (max-width: 560px) {
  .gz-vergleich, .gz-vergleich tbody { display: block } .gz-vergleich thead { display: none }
  .gz-vergleich caption { display: block; padding: 12px 14px 10px; margin: 0; border-bottom: 1px solid var(--linie) }
  .gz-vergleich th, .gz-vergleich td { padding: 8px 14px }
  .gz-vergleich tr { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid var(--linie) }
  .gz-vergleich tbody tr:last-child { border-bottom: 0 }
  .gz-vergleich th[scope="row"] { grid-column: 1 / -1; border-bottom: 0; padding-bottom: 4px }
  .gz-vergleich td { width: auto; border-bottom: 0; padding-top: 2px }
  .gz-vergleich td::before { content: attr(data-k); display: block; font-size: .7rem; font-weight: 800; letter-spacing: .06em; text-transform: uppercase;
    color: var(--nebel); margin-bottom: 2px }
}
@media (max-width: 760px) {
  .gz { grid-template-columns: 1fr; border-radius: 22px; padding: 22px 18px }
  .gz-bild { max-width: 260px }
  .gz-knoepfe .knopf { flex: 1 1 100%; text-align: center }
}
/* 18.10.2026 (Owner: «[Gratis-Block] vor ‹Echte Begegnungen›, die beiden Videos nebeneinander anstatt untereinander, aber responsiv — nichts
   verloren oder überlappend»). Der Block steht jetzt ueber dem Startkopf: eigene Ebene, damit das Saison-Licht des Startkopfs
   (.eh.saison-buehne::before ragt 10 % nach oben) nicht ueber seinem Text liegt. */
.gz { position: relative; z-index: 2 }
/* 19.10.2026 (Owner: «genau den falschen Film verschoben»): bei «Gratis zuerst» steht der Film «Echt» (.gz-film) im Startkopf an der
   Stelle der Filmschleife (Text | Film, am Handy die Karte unter dem Text), und die Schleife (.eh-film, mit Musik-Knopf) neben dem
   Handy in «So einfach geht es» (Tisch/Tablet nebeneinander, Handy darunter). Schleife links, Handy rechts: die MEE-Blase haengt am
   Tisch 90 px rechts neben dem Handy, rechts davon laege die Schleife unter ihr. */
.gz-film { margin: 0; display: grid; gap: 12px; align-content: start; position: relative; z-index: 2; min-width: 0 }
.gz-film .film-rahmen { order: 1; width: 100%; justify-self: stretch }
body.start .gz-film .film-text { order: 2; text-align: left; max-width: none }
body.start .gz-film .film-text h2 { font-size: 1.02rem; line-height: 1.3; margin: 0 0 4px; text-align: inherit }
body.start .gz-film .film-text .hero-text { font-size: .9rem; line-height: 1.4; margin: 0 0 4px }
body.start .gz-film .film-text .klein { margin: 0 }
.eh > .gz-film { order: 2; justify-self: center; width: min(100%, 360px) }
:root[data-saison="halloween"] .eh.saison-buehne .gz-film .film-text, :root[data-saison="halloween"] .eh.saison-buehne .gz-film .film-text :is(h2, p) { color: rgba(255, 255, 255, .9) }
.hero > .eh-film { order: 0; width: 320px; max-width: 100%; max-height: none; margin: 0 }
@media (min-width: 761px) {
  body.start .hero:has(> .eh-film) { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: clamp(32px, 4vw, 56px); align-items: start;
    grid-template-areas: "titel titel" "text text" "live live" "film telefon" }
  body.start .hero:has(> .eh-film) > .hero-h { grid-area: titel; justify-self: center; text-align: center }
  body.start .hero:has(> .eh-film) > .eh-film { grid-area: film; justify-self: end; margin-top: 18px }
  body.start .hero:has(> .eh-film) > .telefon-buehne { justify-self: start }
}
@media (min-width: 761px) and (max-width: 900px) { .hero > .eh-film { width: 300px } }   /* Handy ist dort 300 px breit */
@media (min-width: 1400px) { .hero > .eh-film { width: 360px } }                          /* Handy ist dort 360 px breit */
@media (max-width: 760px) {
  .eh > .gz-film { width: min(100%, 300px); margin-top: 22px }
  body.start .eh > .gz-film .film-text { text-align: center }
  .hero > .eh-film { justify-self: center; width: min(100%, 300px); margin-top: 24px }
  .hero > .eh-film .eh-musik { top: auto; bottom: 14px }   /* oben laege er auf der Bild-Ueberschrift («Freunde treffen») */
}
/* Gemessen 18.10. (auch die bisherige Startseite): am Handy lag der Textblock des Startkopfs (z-index 2 in der Saison-Buehne) ueber dem
   Musik-Knopf — er liess sich nicht antippen. Knopf und «Mehr als nur online!» liegen jetzt darueber. */
.eh-musik, .eh-mehr { z-index: 3 }
/* Gemessen 18.10.: die Preistabelle je Land war bei 400 px 405 px breit und wurde rechts abgeschnitten («Steu…», «zurzeit …»). Am Handy
   rueckt sie enger zusammen und passt ganz; wird sie doch breiter (andere Sprache), rollt sie in ihrem Kasten (.tabelle-scroll, index.html). */
@media (max-width: 480px) { .preise-laender .tabelle { font-size: .8rem } .preise-laender .tabelle :is(td, th) { padding: 8px 3px }
  .preise-laender .tabelle td.klein { font-size: .72rem } }
/* Gemessen 18.10. (bisherige Startseite, 768 px): im Promoter-Kasten lief der Text neben Foto und QR unter die App-Karte daneben
   («Andreas Sch…», E-Mail, Telefon verdeckt). Der Text bricht jetzt unter die Bilder, wenn es eng wird. */
.start-ansprech { flex-wrap: wrap } .start-ansprech > div { flex: 1 1 200px; min-width: 0; overflow-wrap: anywhere }
/* Tinu-Knopf oben rechts (nur Konten mit Tinu): am Handy lag er auf der Ecke der Pre-Launch-Zeile — sie beginnt unter ihm (nicht daneben:
   ein Rand nur rechts schob sie 26 px neben die Mitte, ausrichtung_pruefen) */
@media (max-width: 900px) { :root[data-tinu-oben] .prelaunch { margin-top: 44px } }
/* 24.10.2026 (Tablet hochkant 768 px gemessen): der Tinu-Knopf oben rechts lag auf dem rechten Knopf der Seitenkoepfe (Chats: «👥 Freunde»).
   Bis 1000 px laesst der Seitenkopf rechts Platz fuer ihn — darueber liegt der Inhalt schon weit genug innen. */
@media (min-width: 761px) and (max-width: 1000px) { :root[data-tinu-oben] .ew-seitenkopf { padding-right: 52px } }
/* Gemessen 18.10. (Handy, auch die bisherige Startseite): die Filmschleife hat ihre Ueberschrift im Bild oben links («Freunde treffen»,
   «Motorradtour» …, ~8–12 % der Hoehe, bis 43 % der Breite). «cover» schnitt links ab («Freu»), und der Text des Startkopfs lief darueber,
   sobald er hoeher als der Schirm ist. Jetzt: Bild links verankert, oben ein freies Band fuer Musik-Knopf und Bild-Ueberschrift. */
@media (max-width: 760px) { .eh-video { object-position: 0 0 } .eh:has(> .eh-film) > .eh-text { padding-top: 116px } }
/* 19.10.2026 Freundes-Knopf (meeyo.js freundKnopf): Chat, Kontakt-Karte, Raum-/Gruppen-Mitglieder — Nachfrage in der Seite */
.fk-box { display: inline-flex; flex-wrap: wrap; gap: 6px; align-items: center } .fk-frage { font-size: .85rem; color: var(--milch) }
.fk-box .fk-ja { background: var(--rot); color: #fff } .fk-fehler { flex-basis: 100% }
/* 19.10.2026: Founder-Angebot fuer Gratis-Chat-Konten (Abo-Karte + Chat-Uebersicht, gratis_chat.js) */
.gc-founder { border: 1px solid rgba(255, 79, 122, .35); border-radius: 14px; padding: 12px; margin: 8px 0 }
/* 19.10.2026 Kunden-Ebenen (_kunden_ebenen.html): Geld nur auf drei KUNDEN-Ebenen, der Baum hat zwei Promoter-Stufen, tiefer 0 %.
   Farben je Ebene als Token (dunkel/hell), Rahmen + getoenter Grund; schmal (Beispiel-Spalte, Handy) untereinander. */
/* 19.10. (Owner: «weisse Schrift auf weissem Hintergrund»): .ke steht auch in hellen Kaesten (oeffentliche /promoter-Seite) — Text erbt die Farbe des Kastens statt fest --milch */
.ke { --ke1: #4fd18b; --ke2: #5aa9ff; --ke3: #b58cff; --ke0: #8a7d96; container-type: inline-size; margin: 14px 0; padding: 14px; border: 1px solid var(--linie); border-radius: var(--radius); background: rgba(255,255,255,.03) }
:root[data-theme="light"] .ke { --ke1: #127848; --ke2: #1d5fd1; --ke3: #6b2bd9; --ke0: #7a6d86; background: #fff }
.ke-regel { margin: 0 0 6px; font-size: 1.02rem; color: inherit }
.ke-titel { font-size: .85rem; color: var(--nebel); margin: 0 0 10px }
.ke-raster { display: grid; grid-template-columns: 1fr 18px 1fr 18px 1fr 18px .8fr; gap: 0; align-items: stretch }
.ke-spalte { display: flex; flex-direction: column; gap: 8px; min-width: 0 }
.ke-promoter { border: 1px solid var(--linie); border-radius: 10px; padding: 7px 8px; text-align: center; font-size: .8rem; font-weight: 600; color: inherit; background: var(--pflaume-hell); min-height: 3.2em; display: flex; flex-direction: column; justify-content: center }
.ke-promoter small { font-weight: 400; font-size: .72rem; color: var(--nebel) }
.ke-du { background: var(--verlauf); color: #fff; border-color: transparent }
.ke-kunden { flex: 1; border: 2px solid var(--ke-farbe); border-radius: 10px; padding: 8px; text-align: center; font-size: .78rem; line-height: 1.3; color: inherit; background: color-mix(in srgb, var(--ke-farbe) 14%, transparent); display: flex; flex-direction: column; gap: 2px }
.ke-kunden b { color: var(--ke-farbe); font-size: .8rem }
.ke-satz { font-size: 1.35rem; font-weight: 800; color: var(--ke-farbe) }
.ke-1 { --ke-farbe: var(--ke1) } .ke-2 { --ke-farbe: var(--ke2) } .ke-3 { --ke-farbe: var(--ke3) }
.ke-0 { --ke-farbe: var(--ke0); opacity: .7 } .ke-0 .ke-kunden { border-style: dashed } .ke-0 .ke-promoter { border-style: dashed; color: var(--nebel) }
.ke-pfeil { position: relative } .ke-pfeil::after { content: "→"; position: absolute; top: .9em; left: 50%; transform: translateX(-50%); color: var(--nebel); font-weight: 700 }
.ke-schnitt::after { content: "✕"; color: var(--ke0) }
.ke-tiefer { margin: 10px 0 2px; font-size: .85rem; color: inherit } .ke-fuss { margin: 2px 0 0; color: var(--nebel) }
@container (max-width: 620px) {
  .ke-raster { grid-template-columns: 1fr; }
  .ke-spalte { display: grid; grid-template-columns: 40% 1fr; gap: 8px }
  .ke-pfeil { height: 18px } .ke-pfeil::after { content: "↓"; top: 0; left: 20% } .ke-schnitt::after { content: "✕" }
}
/* Farbmarke je Kunden-Ebene in Rechner-Tabelle und Verguetungs-Kaesten */
.ke-mark { display: inline-block; width: .7em; height: .7em; border-radius: 50%; margin-right: 6px; vertical-align: baseline; background: var(--ke-farbe) }
.ke-mark.ke-1, .satz.ke-1, .rechner-ebene.ke-1 { --ke-farbe: #4fd18b } .ke-mark.ke-2, .satz.ke-2, .rechner-ebene.ke-2 { --ke-farbe: #5aa9ff } .ke-mark.ke-3, .satz.ke-3, .rechner-ebene.ke-3 { --ke-farbe: #b58cff }
:root[data-theme="light"] :is(.ke-mark, .satz, .rechner-ebene).ke-1 { --ke-farbe: #127848 } :root[data-theme="light"] :is(.ke-mark, .satz, .rechner-ebene).ke-2 { --ke-farbe: #1d5fd1 } :root[data-theme="light"] :is(.ke-mark, .satz, .rechner-ebene).ke-3 { --ke-farbe: #6b2bd9 }
.satz:is(.ke-1, .ke-2, .ke-3) { border-top: 3px solid var(--ke-farbe) } .rechner-ebene:is(.ke-1, .ke-2, .ke-3) { border-left: 4px solid var(--ke-farbe) }
.ke-wichtig { margin: 0 0 8px; font-size: .85rem; color: inherit; padding: 6px 10px; border-left: 3px solid var(--gelb); background: rgba(255, 200, 87, .08); border-radius: 6px }

/* 21.10.: Suche oben im Portal springt in die Liste «Dein Team» — der Treffer leuchtet kurz */
#baum li.gefunden > .wer { background: rgba(255, 90, 122, .18); border-radius: 6px; transition: background .3s }

/* 22.10.2026 (Owner): «sofort auffindbar, um abzustimmen» — Einstieg «🦠 Abstimmen» (virus_eingang.js): Band oben auf Entdecken + Menue */
.virus-band { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 0 12px; padding: 14px 16px; border-radius: 16px;
  background: linear-gradient(135deg, #ff5a7a, #8b3dff); color: #fff; font-weight: 800; font-size: 1.1rem; text-decoration: none;
  box-shadow: 0 8px 24px rgba(139, 61, 255, .35) }
.virus-band:hover, .virus-band:focus-visible { filter: brightness(1.08); outline: 3px solid #fff; outline-offset: 2px; color: #fff }
.virus-band.abgestimmt { background: rgba(139, 61, 255, .16); border: 1px solid rgba(181, 123, 255, .6); color: inherit; box-shadow: none; font-size: 1rem }
.virus-band-pfeil { font-size: 1.6rem; line-height: 1 }
.nav-virus:not(.abgestimmt) { font-weight: 800 }

/* ===== Kopfzeile kompakt (Owner 22.10.2026: «Wir müssen schauen, dass das Menü oben auf der Seite nicht zu gross wird») =====
   Gemessen angemeldet (Owner-Probekonto, alle Schalter an): 1366 px 3 Zeilen, 1280 px 4, 1024 px 3, 768 px 5 — jeder neue Einstieg
   (Herzensprojekt, Geschichte, Abstimmen) machte die Zeile laenger. Jetzt: oben nur die Kernbereiche, der Rest unter «Mehr ▾»
   (base.html #nav-mehr). Regeln je Breite: Start/Preise angemeldet immer in «Mehr»; «Promoter» oben nur fuer aktive Promoter ab
   1300 px; unter 1200 px auch Konto, Admin und Abmelden in «Mehr»; unter 960 px mit Erlebnis-Kopf (＋ 💬 🔔 M) Chats und MEE nur
   noch als Symbole rechts. Am Handy (bis 760 px) bleibt der Kopf wie er war. */
.nav-mehr { position: relative; flex: 0 0 auto }
.nav-mehr > summary { list-style: none; display: inline-flex; align-items: center; gap: 6px; cursor: pointer; color: var(--nebel); font-weight: 600; font-size: .95rem; user-select: none; white-space: nowrap }
.nav-mehr > summary::-webkit-details-marker { display: none }
.nav-mehr > summary:hover, .nav-mehr[open] > summary { color: var(--milch) }
.nav-mehr > summary:focus-visible { outline: 2px solid var(--korall); outline-offset: 2px; border-radius: 6px }
.nav-mehr .sw-pfeil { width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 5px solid currentColor; transition: transform .15s }
.nav-mehr[open] .sw-pfeil { transform: rotate(180deg) }
.nav-mehr-liste { position: absolute; right: 0; top: calc(100% + 12px); z-index: 60; display: grid; gap: 2px; min-width: 220px; width: max-content; max-width: min(380px, calc(100vw - 24px)); padding: 6px;
  background: var(--pflaume); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid var(--linie); border-radius: var(--radius-klein); box-shadow: 0 12px 32px rgba(0,0,0,.35) }
.nav-mehr-liste > a, .nav-mehr-liste > button { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 40px; padding: 8px 12px; border: 0; border-radius: 8px;
  background: transparent; color: var(--milch); font: inherit; font-size: .95rem; font-weight: 600; text-align: left; text-decoration: none; white-space: nowrap; cursor: pointer }
.nav-mehr-liste > a:hover, .nav-mehr-liste > button:hover, .nav-mehr-liste > a:focus-visible, .nav-mehr-liste > button:focus-visible { background: var(--pflaume-hell) }
.nav-mehr-liste > a.dev { opacity: .55 }
/* 23.10.2026 (Owner, Bildschirmfoto Admin): offen liegt «Mehr» ueber allem — die klebenden Leisten (Admin-Kopf .cms-kopf z 5,
   Promoter-Unternavigation .pr-unternav z 20) deckten die Liste zu, sobald .kopf eine eigene Ebene hat (Halloween: z 3). */
.kopf:has(.nav-mehr[open], .sprachwahl[open]) { position: relative !important; z-index: 100 !important }   /* Auch die Sprachwahl muss ueber CMS-Kopf und Promoter-Leisten liegen; Saison-Kopf setzt sonst z 3. */
@media (min-width: 761px) {
  .kopf { flex-wrap: nowrap }
  .kopf > nav { flex-wrap: nowrap; align-items: center; white-space: nowrap; min-width: 0 }
  html.angemeldet .kopf nav > .nav-web { display: none }
  html.angemeldet:not(.promoter-an) .kopf nav > .nav-promoter { display: none }
  html.promoter-an .nav-mehr-liste > .nav-m-promoter { display: none }
}
@media (min-width: 761px) and (max-width: 1299px) {
  .kopf > nav { gap: 4px 14px }
  html.angemeldet .kopf nav > .nav-promoter { display: none }
  html.promoter-an .nav-mehr-liste > .nav-m-promoter { display: flex }
}
@media (min-width: 761px) and (max-width: 1199px) {
  html.angemeldet .kopf nav > #nav-konto, html.angemeldet .kopf nav > #nav-admin, html.angemeldet .kopf nav > #nav-logout { display: none }
}
@media (min-width: 761px) and (max-width: 959px) { html.ew-an .kopf nav > #nav-chats, html.ew-an .kopf nav > #nav-mee { display: none } }
/* 24.10.2026 (Tablet hochkant, 768 px gemessen, Vorschlag «MEEYO auch im Querformat»): angemeldet mit Erlebnis-Kopf reichte die Zeile
   nicht — Hell/Dunkel lag 12 px unter dem ＋. Bis 899 px steht nur das MEEYO-Symbol, ohne den Schriftzug (spart ~90 px). */
@media (min-width: 761px) and (max-width: 899px) { html.ew-an .kopf .marke { font-size: 0; gap: 0 } }
@media (min-width: 1200px) { .nav-mehr-liste > .nav-m-schmal { display: none } }
@media (max-width: 760px) {
  .kopf .nav-mehr { order: 4 }
  .nav-mehr > summary { font-size: .92rem }
  .nav-mehr-liste { right: auto; left: 0 }
  .nav-mehr-liste > .nav-m-web, .nav-mehr-liste > .nav-m-promoter, .nav-mehr-liste > .nav-m-schmal, .nav-mehr-liste > .dev { display: none }
  body.hat-tableiste .kopf .nav-mehr { display: none }
}

/* 30.10.2026 (Owner, Schalter «anmeldung_einfach»): erste Frage beim Registrieren — drei grosse Karten, ein Tipp je Weg (register.html).
   Mindestens 64 px hoch, Symbol links, kein Fachwort; die gewaehlte Karte bekommt den Korall-Rand. */
.ae-wahl { display: flex; flex-direction: column; gap: 12px; margin: 6px 0 18px }
.ae-frage { margin: 0 0 2px; font-size: 1.45rem }
.ae-karte { display: flex; gap: 14px; align-items: center; width: 100%; min-height: 72px; padding: 14px 16px; text-align: left; box-sizing: border-box;
  border: 2px solid var(--linie); border-radius: 18px; background: var(--pflaume); color: inherit; text-decoration: none; font: inherit; cursor: pointer }
.ae-karte:hover, .ae-karte:focus-visible { border-color: var(--korall) }
.ae-karte.an { border-color: var(--korall); box-shadow: 0 0 0 3px rgba(255, 79, 122, .18) }
.ae-karte b { display: block; font-size: 1.12rem } .ae-karte b em { font-style: normal; font-size: .78em; color: var(--korall-schrift); margin-left: 4px }
.ae-karte small { display: block; margin-top: 3px; opacity: .8; line-height: 1.35 }
.ae-sym { font-size: 1.9rem; line-height: 1; flex: 0 0 auto }
.ae-nur-promoter { margin: 0; text-align: center } .ae-nur-promoter button { background: none; border: 0; text-decoration: underline; color: inherit; padding: 6px }
#ae-eingeladen-platz .tippgeber { margin: 0 }
.reg-ae-vertrag { padding: 12px; border-radius: 14px; background: rgba(255, 79, 122, .07) }
.ae-handy { margin-top: 16px } .ae-handy-knoepfe { display: flex; flex-wrap: wrap; gap: 10px }
.ae-handy-bild { display: block; margin: 10px auto; background: #fff; border-radius: 12px; padding: 6px; max-width: 100% }
.ae-handy-link { word-break: break-all }

/* 30.10.2026 (bio_aktuell.py): «Neu» in den eigenen Raeumen — Marke am Raum/an der Frage, neue Auswahl gestrichelt, Liste auf der MEE-Karte */
.bio-neu-marke { display: inline-block; font-size: .7rem; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: #fff; background: var(--korall); border-radius: 999px; padding: 1px 7px; vertical-align: middle }
.chip.bio-neu:not(.an) { border-style: dashed; border-color: var(--korall) } .bio-aktuell { margin: 0 0 12px } .bio-aktuell ul { margin: 6px 0 0; padding-left: 18px } .mee-bio { margin: 6px 0; padding-left: 18px } .mee-bio li { margin: 4px 0 } .mee-bio li button { font-size: .78rem; padding: 3px 10px; min-height: 0; margin-left: 4px; vertical-align: middle }
