/* Kundenportal Startmusic — Fassung 13.10.2026 ("Premium").
   Mobil zuerst, ohne Framework. Marke wie startmusic.com: Bricolage Grotesque
   fuer Ueberschriften, Blau #066AAB, warmes Off-White #F7F6F4. Schrift und Logo
   liegen im Portal selbst (marke/) -- kein Nachladen von Google oder der
   Webseite, damit keine Daten an Dritte gehen und nichts von aussen abhaengt. */

@font-face {
  font-family: "Bricolage Grotesque";
  src: url("marke/bricolage-latin.woff2") format("woff2");
  font-weight: 400 800;
  font-display: swap;
}

:root {
  --marke: #066aab;
  --marke-tief: #1b608b;
  --marke-hauch: #e8f1f8;
  --tinte: #14202b;
  --dezent: #5f6b78;
  --linie: #e6e2dc;
  --grund: #f7f6f4;
  --flaeche: #ffffff;
  --flaeche-2: #fbfaf8;
  --gut: #157347;
  --gut-grund: #e7f4ec;
  --warn: #9a3412;
  --warn-grund: #fdf0e7;
  --achtung: #b45309;
  --schatten: 0 1px 2px rgba(20, 32, 43, 0.04), 0 10px 30px -12px rgba(20, 32, 43, 0.12);
  --radius: 20px;
  --titel: "Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif;
  /* Altnamen aus der ersten Fassung -- die Dialoge in app.js verwenden sie. */
  --akzent: var(--marke);
}

@media (prefers-color-scheme: dark) {
  :root {
    --marke: #4ea3dc;
    --marke-tief: #7dbbe6;
    --marke-hauch: #13283a;
    --tinte: #eef2f6;
    --dezent: #98a5b3;
    --linie: #24323f;
    --grund: #0e1720;
    --flaeche: #15212c;
    --flaeche-2: #192735;
    --gut: #5fd197;
    --gut-grund: #12301f;
    --warn: #ffb48a;
    --warn-grund: #3a2116;
    --achtung: #f6c56b;
    --schatten: 0 1px 2px rgba(0, 0, 0, 0.3), 0 12px 32px -14px rgba(0, 0, 0, 0.6);
  }
}

* { box-sizing: border-box; margin: 0; }
[hidden] { display: none !important; }
html { -webkit-text-size-adjust: 100%; }
body {
  font: 16px/1.55 ui-sans-serif, -apple-system, "Segoe UI", Roboto, sans-serif;
  color: var(--tinte); background: var(--grund);
  min-height: 100vh; display: flex; flex-direction: column;
  -webkit-font-smoothing: antialiased;
}
a { color: var(--marke); text-underline-offset: 2px; }
.unsichtbar { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

/* ── Kopf ─────────────────────────────────────────────────────────────── */
.kopf {
  position: sticky; top: 0; z-index: 5;
  background: color-mix(in srgb, var(--grund) 82%, transparent);
  backdrop-filter: saturate(160%) blur(14px); -webkit-backdrop-filter: saturate(160%) blur(14px);
  border-bottom: 1px solid color-mix(in srgb, var(--linie) 70%, transparent);
  padding-top: env(safe-area-inset-top);
}
.kopf-innen {
  max-width: 680px; margin: 0 auto; padding: 14px 20px;
  display: flex; align-items: center; justify-content: space-between;
}
.marke { display: flex; line-height: 0; }
.logo { height: 22px; width: auto; }
.logo-dunkel { display: none; }
@media (prefers-color-scheme: dark) {
  .logo-hell { display: none; }
  .logo-dunkel { display: inline-block; }
}
.kopf-hilfe {
  font-size: 14px; font-weight: 600; text-decoration: none; color: var(--tinte);
  padding: 7px 14px; border-radius: 99px; border: 1px solid var(--linie); background: var(--flaeche);
}

main { flex: 1; width: 100%; max-width: 680px; margin: 0 auto; padding: 8px 16px 40px; }

/* ── Begruessung ──────────────────────────────────────────────────────── */
.begruessung { padding: 22px 4px 6px; }
.augenbraue {
  font-size: 12px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--marke);
}
h1 {
  font-family: var(--titel); font-weight: 700; letter-spacing: -0.02em;
  font-size: clamp(28px, 7.5vw, 38px); line-height: 1.1; margin: 6px 0 8px;
}
h2, h3 { font-family: var(--titel); letter-spacing: -0.01em; }
.einleitung { color: var(--dezent); font-size: 16px; max-width: 34ch; }

/* ── Laden (Skelett) ─────────────────────────────────────────────────── */
.laden { padding-top: 26px; }
.skelett {
  border-radius: 14px; margin: 10px 0;
  background: linear-gradient(90deg, var(--linie) 0%, var(--flaeche-2) 50%, var(--linie) 100%);
  background-size: 200% 100%; animation: schimmer 1.3s ease-in-out infinite;
}
.skelett-titel { height: 38px; width: 70%; }
.skelett-zeile { height: 16px; width: 50%; }
.skelett-karte { height: 260px; border-radius: var(--radius); margin-top: 22px; }
@keyframes schimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { .skelett { animation: none; } }

/* ── Karten ───────────────────────────────────────────────────────────── */
.karte {
  background: var(--flaeche); border: 1px solid var(--linie);
  border-radius: var(--radius); padding: 20px; margin: 14px 0;
  box-shadow: var(--schatten);
}
.zentriert { text-align: center; padding: 36px 22px; }
.zentriert h2 { font-size: 22px; margin: 8px 0; }
.symbol-gross { font-size: 34px; }
.hinweis { font-size: 14px; color: var(--dezent); margin-top: 12px; }
.dezent { color: var(--dezent); }

/* Hinweisleiste oben (offener Betrag, Ruecklastschrift) */
.leiste {
  display: flex; gap: 14px; align-items: flex-start;
  border-radius: 16px; padding: 14px 16px; margin: 12px 0;
  background: var(--warn-grund); color: var(--warn);
  border: 1px solid color-mix(in srgb, var(--warn) 22%, transparent);
}
.leiste-symbol { font-size: 20px; line-height: 1.2; }
.leiste strong { display: block; font-size: 16px; }
.leiste p { font-size: 14px; margin-top: 2px; color: inherit; opacity: 0.9; }
.leiste.leiste-gut { background: var(--gut-grund); color: var(--gut);
  border-color: color-mix(in srgb, var(--gut) 22%, transparent); }

/* Sicherheits-Karte (Aenderungen freischalten) */
.sicherheit { display: flex; gap: 14px; align-items: center; padding: 16px 18px; }
.sicherheit-symbol {
  flex: none; width: 42px; height: 42px; border-radius: 12px;
  display: grid; place-items: center; background: var(--marke-hauch); color: var(--marke);
}
.sicherheit-symbol svg { width: 20px; height: 20px; }
.sicherheit.offen .sicherheit-symbol { background: var(--gut-grund); color: var(--gut); }
.sicherheit-text { flex: 1; min-width: 0; }
.sicherheit-text strong { display: block; font-size: 15px; }
.sicherheit-text p { font-size: 13px; color: var(--dezent); margin-top: 1px; }
.sicherheit .aktionen { margin: 0; }
@media (max-width: 480px) {
  .sicherheit { flex-wrap: wrap; }
  .sicherheit .aktionen { width: 100%; }
  .sicherheit .aktionen button { width: 100%; }
}

/* ── Vertragskarte ───────────────────────────────────────────────────── */
.vertrag { padding: 0; overflow: hidden; }
.vertrag-buehne {
  position: relative; padding: 22px 20px 20px; color: #fff;
  background:
    radial-gradient(120% 140% at 100% 0%, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0) 55%),
    linear-gradient(135deg, var(--marke-tief) 0%, #066aab 60%, #0a7fc6 100%);
}
@media (prefers-color-scheme: dark) {
  .vertrag-buehne { background:
    radial-gradient(120% 140% at 100% 0%, rgba(255,255,255,0.10) 0%, rgba(255,255,255,0) 55%),
    linear-gradient(135deg, #0b3b5a 0%, #0d5584 60%, #1269a1 100%); }
}
.vertrag-buehne .vertrag-nr { font-size: 12px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; opacity: 0.8; }
.vertrag-buehne h2 { font-size: 24px; font-weight: 700; line-height: 1.15; margin: 6px 0 12px; max-width: 22ch; }
.vertrag-zeile { display: flex; justify-content: space-between; align-items: flex-end; gap: 12px; flex-wrap: wrap; }
.miete-gross { font-family: var(--titel); font-size: 34px; font-weight: 700; line-height: 1; letter-spacing: -0.02em; }
.miete-gross small { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; font-weight: 500; opacity: 0.8; margin-left: 4px; letter-spacing: 0; }
.status {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; font-weight: 600; padding: 5px 12px; border-radius: 99px; white-space: nowrap;
  background: rgba(255,255,255,0.18); color: #fff; border: 1px solid rgba(255,255,255,0.28);
}
.status::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.status-gut::before { background: #7ee2a8; }
.status-warn::before { background: #ffc58f; }
.status-neutral::before { background: #cfe3f2; }

.vertrag-koerper { padding: 18px 20px 6px; }

/* Laufzeit-Balken */
.laufzeit { margin: 2px 0 16px; }
.laufzeit-kopf { display: flex; justify-content: space-between; gap: 10px; font-size: 13px; color: var(--dezent); }
.laufzeit-kopf strong { color: var(--tinte); font-weight: 600; }
.laufzeit-balken { height: 8px; border-radius: 99px; background: var(--marke-hauch); margin-top: 8px; overflow: hidden; }
.laufzeit-balken span { display: block; height: 100%; border-radius: inherit;
  background: linear-gradient(90deg, var(--marke) 0%, #2a9ae0 100%); }
.laufzeit.erfuellt .laufzeit-balken span { background: linear-gradient(90deg, var(--gut) 0%, #3fbf7f 100%); }

/* Eckdaten-Kacheln */
.eckdaten { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; margin-bottom: 8px; }
.eckdaten div { background: var(--flaeche-2); border: 1px solid var(--linie); border-radius: 14px; padding: 11px 13px; }
.eckdaten dt { font-size: 12px; color: var(--dezent); }
.eckdaten dd { font-size: 15px; font-weight: 600; margin-top: 2px; font-variant-numeric: tabular-nums; }
.eckdaten .breit { grid-column: 1 / -1; }

/* ── Aufklappbare Bereiche ───────────────────────────────────────────── */
.bereich { border-top: 1px solid var(--linie); }
.vertrag-koerper > .bereich:first-of-type { margin-top: 8px; }
.bereich > summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; gap: 12px;
  padding: 15px 0; min-height: 56px;
}
.bereich > summary::-webkit-details-marker { display: none; }
.bereich-symbol {
  flex: none; width: 36px; height: 36px; border-radius: 11px; display: grid; place-items: center;
  background: var(--marke-hauch); color: var(--marke);
}
.bereich-symbol svg { width: 18px; height: 18px; }
.bereich-titel { flex: 1; min-width: 0; }
.bereich-titel strong { display: block; font-size: 15px; font-weight: 600; }
.bereich-titel span { display: block; font-size: 13px; color: var(--dezent);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bereich-titel span.warn { color: var(--warn); font-weight: 600; }
.bereich-titel span.gut { color: var(--gut); font-weight: 600; }
.bereich > summary::after {
  content: ""; flex: none; width: 9px; height: 9px; margin-right: 4px;
  border-right: 2px solid var(--dezent); border-bottom: 2px solid var(--dezent);
  transform: rotate(45deg); transition: transform 0.2s ease;
}
.bereich[open] > summary::after { transform: rotate(-135deg); }
.bereich-inhalt { padding: 0 0 18px 48px; }
@media (max-width: 420px) { .bereich-inhalt { padding-left: 0; } }
.bereich-hervor .bereich-symbol { background: color-mix(in srgb, var(--achtung) 16%, transparent); color: var(--achtung); }

.wert-gross { font-size: 16px; font-weight: 600; }
.bereich-inhalt p + p { margin-top: 4px; }

/* ── Knoepfe ─────────────────────────────────────────────────────────── */
.aktionen { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
button {
  font: inherit; font-weight: 600; font-size: 15px;
  min-height: 46px; padding: 11px 18px; border-radius: 12px; cursor: pointer;
  border: 1px solid var(--marke); background: var(--marke); color: #fff;
  transition: transform 0.06s ease, filter 0.15s ease, background 0.15s ease;
}
button:hover { filter: brightness(1.06); }
button:active { transform: translateY(1px); }
button:disabled { opacity: 0.55; cursor: wait; }
button.nebenbei { background: var(--flaeche); color: var(--tinte); border-color: var(--linie); }
button.gefahr { background: var(--flaeche); color: var(--warn); border-color: color-mix(in srgb, var(--warn) 45%, transparent); }
button:focus-visible, summary:focus-visible, a:focus-visible, input:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--marke) 45%, transparent); outline-offset: 2px;
}

/* ── Kaestchen ───────────────────────────────────────────────────────── */
.infobox { background: var(--flaeche-2); border: 1px solid var(--linie); border-radius: 14px; padding: 14px; font-size: 14px; }
.infobox strong { display: block; margin-bottom: 4px; }
.infobox p { margin: 4px 0 0; }
.warnbox {
  background: var(--warn-grund); color: var(--warn);
  border-radius: 12px; padding: 11px 13px; margin-top: 12px; font-size: 14px;
}
.okbox { background: var(--gut-grund); color: var(--gut); border-radius: 12px; padding: 11px 13px; margin-top: 12px; font-size: 14px; }
.badge {
  display: inline-block; font-size: 12px; font-weight: 600;
  padding: 2px 9px; border-radius: 99px; margin-left: 8px; vertical-align: 2px;
}
.badge-gut { background: var(--gut-grund); color: var(--gut); }
.badge-warn { background: var(--warn-grund); color: var(--warn); }

/* Rueckgabe-Wahl */
.rueckgabe-wahl { display: grid; gap: 8px; margin: 12px 0 4px; }
.rueckgabe-opt {
  display: grid; grid-template-columns: auto 1fr; gap: 10px; align-items: start;
  padding: 13px 14px; border: 1px solid var(--linie); border-radius: 14px; cursor: pointer;
  background: var(--flaeche); transition: border-color 0.15s ease, background 0.15s ease;
}
.rueckgabe-opt:has(input:checked) { border-color: var(--marke); background: var(--marke-hauch); box-shadow: 0 0 0 1px var(--marke) inset; }
.rueckgabe-opt input { margin-top: 4px; accent-color: var(--marke); width: 18px; height: 18px; }
.rueckgabe-titel { font-weight: 600; font-size: 15px; }
.rueckgabe-besch { display: block; font-size: 13px; margin-top: 2px; }
.preis-badge { display: inline-block; padding: 1px 9px; border-radius: 99px; font-size: 12px;
  font-weight: 700; background: var(--tinte); color: var(--flaeche); margin-left: 4px; vertical-align: 1px; }
.preis-badge.preis-frei { background: var(--gut); color: #fff; }

/* Kaufangebot */
.rechnung { display: grid; grid-template-columns: 1fr auto; gap: 6px 16px; margin: 12px 0; font-size: 14px; }
.rechnung dd { text-align: right; font-variant-numeric: tabular-nums; }
.rechnung-summe { font-weight: 700; font-size: 18px; border-top: 1px solid var(--linie); padding-top: 8px; }
.angebot-preis { font-family: var(--titel); font-size: 26px; font-weight: 700; color: var(--marke); }

/* Zahlungen */
.zahlungen-liste { list-style: none; padding: 0; margin-top: 6px; }
.zahlungen-liste li {
  display: grid; grid-template-columns: 22px 1fr auto; gap: 2px 10px; align-items: center;
  padding: 10px 0; border-bottom: 1px solid var(--linie); font-size: 14px;
}
.zahlungen-liste li:last-child { border-bottom: 0; }
.z-punkt { width: 10px; height: 10px; border-radius: 50%; justify-self: center; background: var(--linie); }
.z-ok .z-punkt { background: var(--gut); }
.z-fehl .z-punkt { background: var(--warn); }
.z-betrag { font-weight: 600; font-variant-numeric: tabular-nums; text-align: right; }
.z-unter { grid-column: 2 / -1; font-size: 12px; color: var(--dezent); }
.z-fehl .z-unter strong { color: var(--warn); }
.z-mehr { margin-top: 8px; }
.z-mehr summary { cursor: pointer; font-size: 14px; font-weight: 600; color: var(--marke); list-style: none; padding: 6px 0; }
.z-mehr summary::-webkit-details-marker { display: none; }
/* Altklassen aus der ersten Fassung */
.z-ok { color: var(--gut); }
.z-fehl { color: var(--warn); }

/* Historie */
.historie { list-style: none; padding: 0; margin-top: 2px; }
.historie li {
  position: relative; padding: 0 0 14px 22px; font-size: 14px;
}
.historie li::before {
  content: ""; position: absolute; left: 4px; top: 6px; width: 8px; height: 8px; border-radius: 50%;
  background: var(--marke);
}
.historie li::after {
  content: ""; position: absolute; left: 7px; top: 18px; bottom: 0; width: 2px; background: var(--linie);
}
.historie li:last-child::after { display: none; }
.historie-datum { display: block; font-size: 12px; color: var(--dezent); font-variant-numeric: tabular-nums; }

/* ── Dialoge (Logik in app.js unveraendert) ─────────────────────────── */
.dialog-hintergrund {
  position: fixed; inset: 0; background: rgba(10, 18, 26, 0.55);
  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);
  display: flex; align-items: flex-end; justify-content: center; padding: 0; z-index: 10;
}
.dialog {
  position: relative; width: 100%; max-width: 480px; max-height: 92vh; overflow-y: auto; margin: 0;
  border-radius: 24px 24px 0 0; padding: 26px 20px calc(20px + env(safe-area-inset-bottom));
  animation: hoch 0.22s ease-out;
}
@media (min-width: 600px) {
  .dialog-hintergrund { align-items: center; padding: 16px; }
  .dialog { border-radius: var(--radius); animation: none; }
}
@keyframes hoch { from { transform: translateY(24px); opacity: 0.6; } to { transform: none; opacity: 1; } }
.dialog h2 { font-size: 21px; margin-bottom: 10px; padding-right: 32px; }
.dialog-schliessen {
  position: absolute; top: 12px; right: 12px; min-height: 0; width: 36px; height: 36px; padding: 0;
  border-radius: 50%; border: 0; background: var(--flaeche-2); color: var(--dezent); font-size: 22px; line-height: 1;
}
label { display: block; margin: 14px 0 0; font-size: 14px; color: var(--dezent); }
label.zeile { display: flex; gap: 10px; align-items: flex-start; color: var(--tinte); font-size: 14px; }
label.zeile input { margin-top: 3px; accent-color: var(--marke); }
input:not([type="checkbox"]):not([type="radio"]), select, textarea {
  width: 100%; font: inherit; font-size: 16px; padding: 12px 13px; margin-top: 5px; min-height: 48px;
  border: 1px solid var(--linie); border-radius: 12px; background: var(--flaeche); color: var(--tinte);
}
input:focus, select:focus, textarea:focus { border-color: var(--marke); outline: none;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--marke) 22%, transparent); }
.dialog button:not(.dialog-schliessen) { margin-top: 18px; width: 100%; }
.hinweis.gut { color: var(--gut); }
.unterabschnitt { margin-top: 14px; padding-top: 10px; border-top: 1px solid var(--linie); }
.unterabschnitt h3 { font-size: 15px; margin-bottom: 4px; }
.rueckgabe-optionen { display: grid; grid-template-columns: 1fr; gap: 2px 0; margin-top: 6px; }
.rueckgabe-optionen dt { font-weight: 600; margin-top: 8px; }
.rueckgabe-optionen dd { margin: 0 0 2px; font-size: 13px; }
dl { margin: 0; }
.kicker { font-size: 11px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--dezent); margin: 0 0 10px; }

/* ── Fuss ─────────────────────────────────────────────────────────────── */
.fuss { text-align: center; padding: 28px 18px calc(28px + env(safe-area-inset-bottom)); font-size: 13px; color: var(--dezent); }
.fuss-logo { height: 18px; opacity: 0.7; margin-bottom: 10px; }
.fuss p + p { margin-top: 6px; }
.fuss-links a { color: var(--dezent); }
.fuss-links span { margin: 0 6px; }

/* Text-Knopf: sieht aus wie ein Link, ist ein Knopf (Code anfordern, Sprung zum Angebot). */
.link-knopf {
  min-height: 0; padding: 0; border: 0; background: none; color: var(--marke);
  font: inherit; font-weight: 600; text-decoration: underline; text-underline-offset: 2px; cursor: pointer;
}
.link-knopf:hover { filter: none; }
.code-zeile { margin-top: 10px; }
.kauf-hinweis { margin: 0 0 12px; font-size: 14px; }
.kauf-hinweis strong { font-size: inherit; }
.bereich { scroll-margin-top: 70px; }

/* Zeitstrahl (13.10.2026): Wo stehe ich, wann waere ich raus? */
.zeitstrahl { margin: 4px 0 16px; padding: 16px; border-radius: 16px;
  background: var(--flaeche-2); border: 1px solid var(--linie); }
.zs-satz { font-size: 15px; line-height: 1.5; margin-bottom: 14px; }
.zs-liste { list-style: none; padding: 0; margin: 0; }
.zs-liste li { position: relative; padding: 0 0 16px 30px; min-height: 26px; }
.zs-liste li:last-child { padding-bottom: 0; }
/* Linie zwischen den Punkten */
.zs-liste li::after { content: ""; position: absolute; left: 8px; top: 20px; bottom: -2px; width: 2px;
  background: var(--linie); }
.zs-liste li:last-child::after { display: none; }
.zs-liste li.zs-fertig::after { background: var(--marke); }
/* Punkte */
.zs-liste li::before { content: ""; position: absolute; left: 1px; top: 3px; width: 16px; height: 16px;
  border-radius: 50%; box-sizing: border-box; border: 2px solid var(--linie); background: var(--flaeche); }
.zs-liste li.zs-fertig::before { border-color: var(--marke); background: var(--marke)
  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 8.2 7 10.5l4.5-5' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/12px no-repeat; }
.zs-liste li.zs-jetzt::before { border-color: var(--marke); background: var(--flaeche);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--marke) 22%, transparent), inset 0 0 0 3px var(--marke); }
.zs-liste li.zs-ziel::before { border-color: var(--achtung); background: color-mix(in srgb, var(--achtung) 18%, var(--flaeche)); }
.zs-titel { display: block; font-size: 14px; font-weight: 600; }
.zs-jetzt .zs-titel { color: var(--marke); }
.zs-ziel .zs-titel { color: var(--achtung); }
.zs-datum { display: inline-block; font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; margin-right: 6px; }
.zs-text { display: inline; font-size: 13px; color: var(--dezent); }
.zs-titel + .zs-text { display: block; }
@media (prefers-reduced-motion: no-preference) {
  .zs-liste li.zs-jetzt::before { animation: puls 2.4s ease-in-out infinite; }
}
@keyframes puls { 50% { box-shadow: 0 0 0 7px color-mix(in srgb, var(--marke) 10%, transparent), inset 0 0 0 3px var(--marke); } }

/* ── Zeitstrahl horizontal (13.10.2026) ─────────────────────────────────
   Hauptlinie: Mindestmietdauer, danach offen auslaufend (unbefristet).
   Ein Ende gibt es nur bei Kuendigung -- als eigene, kurze Linie darunter. */
.zh .zs-satz { margin-bottom: 6px; }
.zh-achse { position: relative; height: 44px; margin: 0 6px; }
.zh-marke { position: absolute; left: var(--x); transform: translateX(-50%); }
.zh-strecke, .zh-gefuellt, .zh-kuendigung { position: absolute; top: 30px; height: 6px; border-radius: 99px; }
.zh-mindest { left: 0; width: var(--mindest); background: var(--marke-hauch); border-radius: 99px 0 0 99px; }
.zh-weiter { left: var(--mindest); right: -6px; border-radius: 0;
  background: linear-gradient(90deg, var(--marke-hauch) 0%, color-mix(in srgb, var(--marke-hauch) 0%, transparent) 100%); }
.zh-gefuellt { left: 0; background: linear-gradient(90deg, var(--marke) 0%, #2a9ae0 100%); }
.zh-endet .zh-weiter { right: calc(100% - var(--ende)); background: var(--marke-hauch); border-radius: 0 99px 99px 0; }
.zh-punkt { top: 26px; width: 14px; height: 14px; border-radius: 50%; box-sizing: border-box;
  background: var(--flaeche); border: 2px solid color-mix(in srgb, var(--marke) 45%, var(--linie)); }
.zh-punkt.zh-fertig { background: var(--marke); border-color: var(--marke); }
.zh-punkt.zh-schluss { width: 16px; height: 16px; top: 25px; border-radius: 4px;
  background: var(--achtung); border-color: var(--achtung); }
.zh-punkt.zh-klein { top: 4px; width: 12px; height: 12px; background: var(--marke); border-color: var(--marke); }
.zh-heute { top: 0; display: flex; flex-direction: column; align-items: center; }
.zh-heute b { font-size: 12px; font-weight: 700; color: #fff; background: var(--marke);
  padding: 2px 9px; border-radius: 99px; white-space: nowrap; }
.zh-heute::after { content: ""; width: 2px; height: 9px; background: var(--marke); }
.zh-heute::before { content: ""; position: absolute; top: 25px; width: 16px; height: 16px; border-radius: 50%;
  background: var(--flaeche); box-shadow: inset 0 0 0 4px var(--marke), 0 0 0 4px color-mix(in srgb, var(--marke) 20%, transparent); }
@media (prefers-reduced-motion: no-preference) {
  .zh-heute::before { animation: puls-h 2.4s ease-in-out infinite; }
}
@keyframes puls-h { 50% { box-shadow: inset 0 0 0 4px var(--marke), 0 0 0 8px color-mix(in srgb, var(--marke) 8%, transparent); } }

.zh-beschriftung { position: relative; height: 42px; margin: 4px 6px 0; }
.zh-beschriftung .zh-marke { top: 0; text-align: center; font-size: 13px; font-weight: 600;
  white-space: nowrap; font-variant-numeric: tabular-nums; }
.zh-beschriftung small { display: block; font-size: 11px; font-weight: 500; color: var(--dezent); }
.zh-beschriftung .zh-links { transform: none; text-align: left; margin-left: -6px; }
.zh-beschriftung .zh-rechts { transform: translateX(-100%); text-align: right; margin-left: 8px; }
.zh-beschriftung .zh-dezent { color: var(--dezent); font-weight: 500; }
.zh-ziel { color: var(--achtung); }
.zh-unendlich { position: absolute; right: -6px; top: -6px; font-size: 11px; font-weight: 600; color: var(--dezent); text-align: right; line-height: 1.1; }
.zh-unendlich b { display: block; font-size: 22px; line-height: 1; color: var(--marke); font-weight: 500; }

.zh-szenario { margin-top: 8px; padding-top: 12px; border-top: 1px dashed var(--linie); }
.zh-szenario-titel { font-size: 13px; font-weight: 700; color: var(--achtung); }
.zh-kurz { height: 20px; margin-top: 6px; }
.zh-kurz .zh-punkt.zh-schluss { top: 2px; }
.zh-kuendigung { top: 7px; background: repeating-linear-gradient(90deg, var(--achtung) 0 8px, transparent 8px 12px); }
.zh-eng { height: 36px; }
.zh-szenario .zs-text { display: block; margin-top: 2px; }

/* Unterschrieben: drei Schritte nebeneinander */
.zh-schritte { list-style: none; padding: 0; margin: 8px 0 0; display: grid; grid-template-columns: repeat(3, 1fr);
  font-size: 12px; font-weight: 600; text-align: center; }
.zh-schritte li { position: relative; padding-top: 24px; color: var(--dezent); }
.zh-schritte li span { position: absolute; top: 3px; left: 50%; transform: translateX(-50%); width: 14px; height: 14px;
  border-radius: 50%; border: 2px solid var(--linie); background: var(--flaeche); z-index: 1; }
.zh-schritte li::before { content: ""; position: absolute; top: 9px; left: -50%; width: 100%; height: 2px; background: var(--linie); }
.zh-schritte li:first-child::before { display: none; }
.zh-schritte li.fertig, .zh-schritte li.jetzt { color: var(--tinte); }
.zh-schritte li.fertig span { background: var(--marke); border-color: var(--marke); }
.zh-schritte li.fertig + li::before, .zh-schritte li.jetzt::before { background: var(--marke); }
.zh-schritte li.jetzt span { box-shadow: inset 0 0 0 3px var(--marke); border-color: var(--marke); }

/* Monatsbalken im Zeitstrahl (13.10.2026) */
.zb-feld { position: relative; padding-top: 30px; margin: 4px 0 0; }
.zb-reihe { display: flex; align-items: flex-end; gap: 3px; height: 52px; }
.zb { flex: 1; height: 100%; border-radius: 4px 4px 2px 2px; background: var(--marke-hauch); min-width: 3px; }
.zb-bezahlt { background: var(--marke); }
.zb-offen { background: var(--warn); }
.zb-jetzt { background: var(--marke); box-shadow: 0 0 0 2px var(--flaeche), 0 0 0 4px var(--marke); }
.zb-offen.zb-jetzt { box-shadow: 0 0 0 2px var(--flaeche), 0 0 0 4px var(--warn); }
.zb-faellig { background: color-mix(in srgb, var(--marke) 32%, var(--marke-hauch)); }
.zb-weiter { height: 72%; background: repeating-linear-gradient(135deg,
  color-mix(in srgb, var(--marke) 30%, transparent) 0 3px, transparent 3px 7px);
  border: 1px dashed color-mix(in srgb, var(--marke) 40%, transparent); }
.zb-heute { position: absolute; top: 0; left: var(--x); transform: translateX(-50%);
  display: flex; flex-direction: column; align-items: center; }
.zb-heute b { font-size: 12px; font-weight: 700; color: #fff; background: var(--marke);
  padding: 2px 9px; border-radius: 99px; white-space: nowrap; }
.zb-heute::after { content: ""; width: 2px; height: 6px; background: var(--marke); }
.zb-linie { position: absolute; top: 26px; bottom: -4px; left: calc(var(--x) - 1.5px); width: 2px; border-radius: 2px; }
.zb-linie-mindest { background: color-mix(in srgb, var(--tinte) 35%, transparent); }
.zb-linie-ende { background: var(--achtung); width: 3px; }
.zb-linie-ende::after { content: ""; position: absolute; top: -6px; left: -4px; width: 11px; height: 11px;
  border-radius: 3px; background: var(--achtung); }
.zb-feld + .zh-beschriftung { margin-top: 8px; }
.zb-legende { display: flex; flex-wrap: wrap; gap: 6px 14px; margin-top: 4px; font-size: 12px; color: var(--dezent); }
.zb-legende span { display: inline-flex; align-items: center; gap: 6px; }
.zb-legende i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; }
.zb-legende i.zb-weiter { height: 10px; }
.zb-offen.zb-jetzt { background: var(--warn); }
.zb-unendlich { position: absolute; top: 2px; right: 0; font-size: 11px; font-weight: 600; color: var(--dezent); white-space: nowrap; }
.zb-unendlich b { font-size: 18px; font-weight: 500; color: var(--marke); vertical-align: -2px; }
/* Lange Vertraege: die ersten sichtbaren Monate blenden links aus -- es geht weiter zurueck. */
.zb-abgeschnitten { -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 18%); mask-image: linear-gradient(90deg, transparent 0, #000 18%); }

/* ── Zeitstrahl Fassung 3 (13.10.2026): Kennzahlen, Klammern, Antippen ── */
.zk-reihe { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px; }
.zk, .zk-knopf { text-align: left; }
.zk-knopf { all: unset; display: block; cursor: pointer; border-radius: 14px; }
.zk-knopf:focus-visible { outline: 3px solid color-mix(in srgb, var(--marke) 45%, transparent); outline-offset: 2px; }
.zk { height: 100%; box-sizing: border-box; padding: 12px 13px; border-radius: 14px;
  background: var(--flaeche); border: 1px solid var(--linie); display: flex; flex-direction: column; gap: 2px; }
.zk-titel { font-size: 12px; color: var(--dezent); font-weight: 600; }
.zk-wert { font-family: var(--titel); font-size: 19px; font-weight: 700; letter-spacing: -0.01em; line-height: 1.2; color: var(--tinte); }
.zk-unter { font-size: 12px; color: var(--dezent); line-height: 1.35; }
.zk-erfuellt .zk-wert { color: var(--gut); }
.zk-ziel { border-color: color-mix(in srgb, var(--achtung) 35%, var(--linie));
  background: color-mix(in srgb, var(--achtung) 7%, var(--flaeche)); }
.zk-ziel .zk-wert { color: var(--achtung); }
.zk-knopf { position: relative; }
.zk-knopf::after { content: "?"; position: absolute; top: 9px; right: 10px; width: 18px; height: 18px; border-radius: 50%;
  font-size: 11px; font-weight: 700; display: grid; place-items: center;
  color: var(--achtung); border: 1.5px solid color-mix(in srgb, var(--achtung) 50%, transparent); }
.zk-knopf.gewaehlt .zk { box-shadow: 0 0 0 2px var(--achtung); }

.zb-feld { padding-top: 0; }
.zk-klammern { position: relative; height: 30px; }
.zk-klammer { all: unset; box-sizing: border-box; position: absolute; top: 0; height: 26px; cursor: pointer;
  border-top: 2px solid; border-left: 2px solid; border-right: 2px solid; border-radius: 8px 8px 0 0;
  display: flex; justify-content: center; align-items: flex-start; }
.zk-klammer span { transform: translateY(-55%); background: var(--flaeche-2); padding: 0 6px; font-size: 11.5px; font-weight: 700;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 8px); }
.zk-klammer-mindest { border-color: var(--marke); color: var(--marke); margin-right: 2px; }
.zk-klammer-weiter { border-color: color-mix(in srgb, var(--dezent) 45%, transparent); color: var(--dezent);
  border-right-style: dashed; border-top-style: dashed; -webkit-mask-image: linear-gradient(90deg, #000 70%, transparent 100%);
  mask-image: linear-gradient(90deg, #000 70%, transparent 100%); margin-left: 2px; }
.zk-klammer-weiter b { color: var(--marke); font-size: 14px; }
.zk-klammer:focus-visible { outline: 3px solid color-mix(in srgb, var(--marke) 45%, transparent); }
.zk-klammer.gewaehlt span { text-decoration: underline; text-underline-offset: 3px; }

.zb-reihe { height: 56px; gap: 3px; }
button.zb { all: unset; box-sizing: border-box; flex: 1; height: 100%; min-width: 3px; cursor: pointer;
  border-radius: 5px 5px 2px 2px; background: var(--marke-hauch); transition: transform 0.12s ease, filter 0.12s ease; }
button.zb:hover { filter: brightness(1.08); transform: translateY(-2px); }
button.zb:focus-visible { outline: 2px solid var(--tinte); outline-offset: 1px; }
button.zb.gewaehlt { transform: translateY(-4px); box-shadow: 0 6px 12px -6px rgba(0,0,0,0.35); }
button.zb-bezahlt { background: var(--marke); }
button.zb-offen { background: var(--warn); }
button.zb-jetzt { background: var(--marke); box-shadow: 0 0 0 2px var(--flaeche-2), 0 0 0 4px var(--marke); }
button.zb-offen.zb-jetzt { background: var(--warn); box-shadow: 0 0 0 2px var(--flaeche-2), 0 0 0 4px var(--warn); }
button.zb-faellig { background: color-mix(in srgb, var(--marke) 34%, var(--marke-hauch)); }
button.zb-weiter { height: 74%; background: repeating-linear-gradient(135deg,
  color-mix(in srgb, var(--marke) 28%, transparent) 0 3px, transparent 3px 7px);
  border: 1px dashed color-mix(in srgb, var(--marke) 40%, transparent); }
.zb-linie { top: 30px; }
.zb-heute-reihe { position: relative; height: 26px; }
.zb-heute-marke { position: absolute; top: 6px; left: var(--x); transform: translateX(-50%);
  font-size: 11px; font-weight: 700; color: #fff; background: var(--marke); padding: 2px 8px; border-radius: 99px; white-space: nowrap; }
.zb-heute-marke::before { content: ""; position: absolute; top: -5px; left: 50%; transform: translateX(-50%);
  border: 5px solid transparent; border-top: 0; border-bottom-color: var(--marke); }
.zb-detail { margin-top: 8px; min-height: 44px; padding: 10px 12px; border-radius: 12px; background: var(--flaeche);
  border: 1px solid var(--linie); font-size: 13.5px; line-height: 1.45; }
.zb-detail strong { display: block; font-size: 13.5px; }
.zb-detail span { color: var(--dezent); }
.zb-detail-hinweis { color: var(--dezent); font-style: italic; }
.zb-legende { margin-top: 10px; }
@media (max-width: 360px) { .zk-reihe { grid-template-columns: 1fr; } }

/* Klammern: Text ueber der Klammerlinie, Ausblenden nur fuer die Linie (Fassung 3b). */
.zk-klammern { height: 34px; }
.zk-klammer { border: 0 !important; height: 34px; border-radius: 0; display: block;
  -webkit-mask-image: none !important; mask-image: none !important; }
.zk-klammer span { position: absolute; top: 0; left: 50%; transform: translateX(-50%); padding: 0 4px;
  background: none; max-width: 100%; }
.zk-klammer::after { content: ""; position: absolute; left: 0; right: 0; top: 19px; height: 11px;
  border: 2px solid currentColor; border-bottom: 0; border-radius: 8px 8px 0 0; }
.zk-klammer-mindest { margin-right: 0; }
.zk-klammer-mindest::after { right: 2px; }
.zk-klammer-weiter::after { left: 2px; border-style: dashed; border-right: 0; border-radius: 8px 0 0 0;
  -webkit-mask-image: linear-gradient(90deg, #000 60%, transparent 100%); mask-image: linear-gradient(90deg, #000 60%, transparent 100%); }
.zk-klammer-weiter span { left: 4px; transform: none; text-align: left; }
.zb-linie { top: 34px; }
.zk-wert { font-size: 20px; }
/* Fassung 3c: Monate, die fest zum Vertrag gehoeren, sind aktiv -- nicht grau. */
button.zb-faellig { background: color-mix(in srgb, var(--marke) 62%, var(--flaeche)); }
.zb-legende i.zb-faellig { background: color-mix(in srgb, var(--marke) 62%, var(--flaeche)); }

/* Fassung 3d: Vertragsfarbe + rote Markierung fuer offene Zahlung; Klammer "bis" unten. */
button.zb-bezahlt, button.zb-jetzt { background: var(--marke); }
button.zb-jetzt { box-shadow: 0 0 0 2px var(--flaeche-2), 0 0 0 4px var(--marke); }
button.zb.zb-problem { position: relative; background-image: linear-gradient(180deg, var(--warn) 0 7px, transparent 7px); }
button.zb.zb-problem::after { content: "!"; position: absolute; top: -9px; left: 50%; transform: translateX(-50%);
  width: 15px; height: 15px; border-radius: 50%; background: var(--warn); color: #fff; font-size: 10px; font-weight: 800;
  display: grid; place-items: center; box-shadow: 0 0 0 2px var(--flaeche-2); }
.zb-reihe { margin-top: 6px; }
.zb-legende i.zb-punkt-rot { border-radius: 50%; background: var(--warn); }
.zb-unten { position: relative; height: 52px; margin-top: 6px; }
.zb-bis { all: unset; box-sizing: border-box; position: absolute; top: 0; height: 12px; cursor: pointer;
  border: 2px solid var(--achtung); border-top: 0; border-radius: 0 0 8px 8px; }
.zb-bis:focus-visible { outline: 3px solid color-mix(in srgb, var(--achtung) 45%, transparent); }
.zb-bis::after { content: ""; position: absolute; right: -6px; bottom: -6px; width: 10px; height: 10px; border-radius: 3px; background: var(--achtung); }
.zb-heute-marke { top: 18px; left: var(--x); transform: none; }
.zb-heute-marke::before { left: 9px; transform: none; }
.zb-bis-text { position: absolute; top: 16px; left: var(--x); transform: translateX(8px); font-size: 13px; font-weight: 700;
  color: var(--achtung); white-space: nowrap; text-align: left; line-height: 1.2; font-variant-numeric: tabular-nums; }
.zb-bis-text.rechts { transform: translateX(-100%); text-align: right; }
.zb-bis-text small { display: block; font-size: 11px; font-weight: 600; opacity: 0.9; }
.zb-unten { height: 74px; }
.zb-bis-text { top: 42px; }
/* Platz fuer die rote Markierung innerhalb der Reihe -- sonst schneidet das
   Ausblenden langer Vertraege (mask) sie oben ab. */
.zb-reihe { height: 66px; padding-top: 10px; box-sizing: border-box; margin-top: 0; }

/* Fassung 3e: Heute-Linie tagesgenau durch den laufenden Monat. */
.zb-feld { position: relative; }
button.zb-jetzt { box-shadow: none; background: linear-gradient(90deg,
  var(--marke) 0 var(--anteil, 50%), color-mix(in srgb, var(--marke) 45%, var(--flaeche)) var(--anteil, 50%) 100%);
  outline: 2px solid var(--marke); outline-offset: 1px; }
button.zb-jetzt.zb-problem { background-image: linear-gradient(180deg, var(--warn) 0 7px, transparent 7px),
  linear-gradient(90deg, var(--marke) 0 var(--anteil, 50%), color-mix(in srgb, var(--marke) 45%, var(--flaeche)) var(--anteil, 50%) 100%); }
.zb-heute-linie { position: absolute; top: 40px; height: 86px; left: var(--x); width: 2px; margin-left: -1px;
  background: var(--tinte); border-radius: 2px; pointer-events: none; z-index: 2; }
.zb-heute-linie::before { content: ""; position: absolute; top: -4px; left: -3px; width: 8px; height: 8px; border-radius: 50%; background: var(--tinte); }
.zb-heute-marke { background: var(--tinte); transform: translateX(-50%); top: 22px; }
.zb-heute-marke::before { left: 50%; transform: translateX(-50%); border-bottom-color: var(--tinte); }
.zb-bis { top: 0; }

/* Kuendigen in drei Schritten (13.10.2026) */
.schritt-einleitung { font-size: 14px; margin-bottom: 14px; }
.schritte { list-style: none; padding: 0; margin: 0; counter-reset: none; }
.schritte > li { position: relative; display: grid; grid-template-columns: 28px 1fr; gap: 12px; padding-bottom: 18px; }
.schritte > li:not(:last-child)::before { content: ""; position: absolute; left: 13px; top: 30px; bottom: 4px; width: 2px; background: var(--linie); }
.schritt-nr { width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; font-size: 13px; font-weight: 800;
  background: var(--marke); color: #fff; font-family: var(--titel); }
.schritte > li > div > strong { display: block; font-size: 15px; margin-top: 3px; }
.schritte > li > div > p { font-size: 14px; color: var(--dezent); margin-top: 3px; }
.schritte > li > div > p strong { color: var(--tinte); }
.schritte .rueckgabe-wahl { margin-top: 10px; }
.schritte .aktionen { margin-top: 10px; }
.schritt-danach { font-size: 13px; color: var(--dezent); background: var(--flaeche-2); border: 1px solid var(--linie);
  border-radius: 12px; padding: 10px 12px; }
.schritt-danach strong { color: var(--tinte); }

/* Abholort beim Kuendigen bestaetigen (13.10.2026) */
.abholort-adresse { font-size: 14px; color: var(--tinte) !important; background: var(--flaeche-2); border: 1px solid var(--linie);
  border-radius: 12px; padding: 10px 12px; margin: 8px 0; line-height: 1.5; }
fieldset.abholort { border: 1px solid var(--linie); border-radius: 14px; padding: 12px 14px; margin: 14px 0; display: grid; gap: 10px; }
fieldset.abholort legend { font-weight: 700; font-size: 15px; padding: 0 6px; color: var(--tinte); }
#f-ort-felder { display: grid; gap: 10px; }
#f-ort-felder[hidden] { display: none; }

/* Sicherheitsbox ganz oben, hervorgehoben solange gesperrt (15.10.2026) */
#hinweisleiste > .sicherheit { margin-bottom: 14px; }
.sicherheit.hervor { border: 2px solid var(--marke); background: color-mix(in srgb, var(--marke) 7%, var(--flaeche)); }
.sicherheit.hervor .sicherheit-symbol { background: var(--marke); color: #fff; }
.sicherheit.hervor .sicherheit-text p { color: var(--tinte); }
.sicherheit.code-wartet { box-shadow: 0 0 0 4px color-mix(in srgb, var(--marke) 18%, transparent); }

/* Einheitlicher Sperrhinweis in allen Bereichen */
.code-zeile { display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--dezent);
  background: var(--flaeche-2); border: 1px dashed var(--linie); border-radius: 12px; padding: 9px 12px; }
.code-zeile-symbol { display: inline-grid; color: var(--marke); }
.code-zeile-symbol svg { width: 16px; height: 16px; }

/* Text-Knopf im Dialog bleibt im Satz (nicht volle Breite wie andere Dialog-Knoepfe) */
.dialog button.link-knopf { margin-top: 0; width: auto; display: inline; }

/* Gliederung: Zwischenueberschriften im Vertrag (15.10.2026) */
.gruppe { font-family: var(--titel); font-size: 12px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase;
  color: var(--marke); margin: 26px 0 4px; padding-bottom: 8px; border-bottom: 2px solid color-mix(in srgb, var(--marke) 22%, transparent); }
.gruppe + .bereich { border-top: 0; }
.karte > .gruppe:first-child { margin-top: 16px; }
.bereich-titel strong { font-size: 16px; font-weight: 700; }

/* Schrittnummern zaehlen nur sichtbare Schritte (persoenliche Rueckgabe blendet einen aus) */
.schritte { counter-reset: schritt; }
.schritte > li:not([hidden]) { counter-increment: schritt; }
.schritte > li[hidden] { display: none; }
.schritt-nr::before { content: counter(schritt); }
