/* ============================================================
   HUUS-VERSTAND · DESIGN-SYSTEM ANLAUF 3 — „Redaktion statt Template"
   ------------------------------------------------------------
   Regeln (Plan: deine-vorg-nger-…-iridescent-flute.md):
   - Schibsted Grotesk = Display + UI · Source Serif 4 = Lesetext
   - Grün dominant; Terracotta NUR semantisch (Energieskala);
     Gold = Interaktion/Fokus
   - Keine Karten, Pills, Kicker, Nummern-Deko, Icon-Grids,
     Glass, Gradients, Scroll-Reveals
   - Fließtext im Maß (--measure), Fotos/Flächen dürfen breit
   - No-motion-first: Bewegung nur unter prefers-reduced-motion:
     no-preference
   - JS-Kontrakt-Klassen (main.js/kontakt/check) behalten ihre
     Namen: .nav .menu .mobile .has-submenu .theme-toggle .burger
     .btn .sticky-mobile … — neue Klassen tragen s-Präfix.
   ============================================================ */

/* ---------- Fonts (variable, latin, self-hosted) ---------- */
@font-face {
  font-family: 'Schibsted Grotesk';
  src: url('/assets/fonts/schibsted-grotesk-var-latin.woff2') format('woff2');
  font-weight: 400 900;
  font-display: swap;
}
@font-face {
  font-family: 'Source Serif 4';
  src: url('/assets/fonts/source-serif-4-var-latin.woff2') format('woff2');
  font-weight: 200 900;
  font-display: swap;
}
/* Fallbacks mit Metrik-Angleich gegen CLS beim Font-Swap */
@font-face {
  font-family: 'Schibsted Fallback';
  src: local('Helvetica Neue'), local('Arial');
  size-adjust: 99%;
}
@font-face {
  font-family: 'Source Serif Fallback';
  src: local('Georgia');
  size-adjust: 96%;
}

/* ---------- Tokens ----------
   Theme-Logik wie bisher INVERTIERT: Dark = :root-Default OHNE
   Attribut, Light = [data-theme="light"] (Pre-Paint-Script in
   <head> entfernt das Attribut für Dark).
   Farbwerte = die 2026-06-30 AA-verifizierten Tokens.       */
:root {
  --bg: #0f0f0f;
  --surface-1: #1a1a1a;
  --surface-2: #222222;
  --on-bg: #e8e8e8;
  --on-variant: #b0b0b0;
  --muted: #888888;
  --hairline: #333333;

  --green: #4fa028;        /* Text-Grün auf dunkel */
  --green-dark: #2e7a18;   /* Button-Fläche unter Weiß (5,37:1) */
  --green-deep: #1c3d12;   /* große Grünfläche, Text #fff ≥ 9:1 */
  --gold: #cc9418;
  --terra: #a84018;
  --on-green: #ffffff;

  /* Fokus-Signatur, Zwei-Farben-Technik (Soueidan).
     Nachgerechnet 2026-07-02: Ring #f2cf77 ≥ 3,57:1 auf allen
     dunklen Flächen (inkl. --green-dark beider Themes),
     Kern #111 ≥ 17:1 auf allen hellen Flächen.              */
  --focus-ring: #f2cf77;
  --focus-core: #111111;

  --font-ui: 'Schibsted Grotesk', 'Schibsted Fallback', 'Helvetica Neue', Arial, sans-serif;
  --font-text: 'Source Serif 4', 'Source Serif Fallback', Georgia, serif;

  --gutter: clamp(1.25rem, 5vw, 6rem);
  --measure: 60ch;                      /* Fließtext-Maß: 60ch Source Serif = reale ~75 Zeichen/Zeile */
  --w-popout: min(64rem, 100% - var(--gutter) * 2);
  --w-feature: min(90rem, 100% - var(--gutter) * 2);

  --space-s: clamp(2.5rem, 5vw, 4rem);
  --space-m: clamp(4rem, 8vw, 7rem);
  --space-l: clamp(6rem, 11vw, 10rem);

  --fs-hero: clamp(2.5rem, 5.2vw, 4.4rem);
  --fs-h2: clamp(1.75rem, 3.2vw, 2.75rem);
  --fs-h3: clamp(1.2rem, 1.8vw, 1.5rem);
  --fs-kw: clamp(2.2rem, 5vw, 4.5rem);
  --fs-body: 1.0625rem;
  --sx-einzug: clamp(2rem, 11vw, 15rem); /* gemeinsame linke Einzugslinie der sx-Sektionen */
  --sx-gap: clamp(4rem, 10vw, 13rem);     /* Spaltenabstand des Merkmale-Rasters */
  --sx-mktext: 32.8125rem;                /* gemessene Breite der Kachel-Textbox (52ch Schibsted 1.0325rem = 525px) */
  --sx-mkcap: 82rem;                      /* Deckel des Merkmale-Rasters, sonst driften die Kacheln auf 4K auseinander */
}
[data-theme="light"] {
  --bg: #f9f9f9;
  --surface-1: #f2f4f4;
  --surface-2: #eaeced;
  --on-bg: #111111;
  --on-variant: #555555;
  --muted: #6a6a6a;
  --hairline: #d9d9d6;

  --green: #2b7519;        /* AA 5,45:1 auf bg */
  --green-dark: #1f5a10;
  --green-deep: #1c3d12;
  --gold: #9c680f;
  --terra: #973510;
}

/* ---------- Reset / Basis ---------- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: auto; }
h1, h2, h3, a, button, input, textarea, select { scroll-margin-top: 5.5rem; }
body {
  background: var(--bg);
  color: var(--on-bg);
  font-family: var(--font-ui);
  font-size: var(--fs-body);
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
img, picture, video { display: block; max-width: 100%; height: auto; }
::selection { background: var(--green-dark); color: #fff; }
a { color: inherit; }

h1, h2, h3 {
  font-family: var(--font-ui);
  line-height: 1.06;
  overflow-wrap: break-word;
  hyphens: auto;
}
h1 { font-weight: 800; letter-spacing: -0.025em; }
h2 { font-size: var(--fs-h2); font-weight: 750; letter-spacing: -0.008em; }
h3 { font-weight: 700; letter-spacing: -0.005em; }
h3 { font-size: var(--fs-h3); }

/* Lesetext: Serif, im Maß */
.s-prose {
  font-family: var(--font-text);
  font-size: 1.125rem;
  line-height: 1.65;
  max-width: var(--measure);
}
.s-prose strong { font-weight: 650; }
.s-prose a { color: var(--green); text-decoration-thickness: 1px; text-underline-offset: 3px; }

/* Einordnungs-/Themenzeile: klein, kräftig, NICHT versal/gesperrt */
.s-topic {
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--on-variant);
}

/* ---------- Fokus-Signatur (site-weit) ---------- */
:focus-visible {
  outline: 3px solid var(--focus-ring);
  outline-offset: 2px;
  box-shadow: 0 0 0 2px var(--focus-core);
  border-radius: 2px;
}
.skip-link {
  position: absolute; left: -999px; top: 0;
  background: var(--green-dark); color: #fff;
  padding: 0.6rem 1rem; z-index: 100; font-weight: 600;
}
.skip-link:focus-visible { left: 0.5rem; top: 0.5rem; }

/* ---------- content-grid (benannte Spuren) ---------- */
.content-grid {
  display: grid;
  grid-template-columns:
    [full-start] minmax(var(--gutter), 1fr)
    [feature-start] minmax(0, calc((var(--w-feature) - var(--w-popout)) / 2))
    [popout-start] minmax(0, calc((var(--w-popout) - var(--measure)) / 2))
    [content-start] min(var(--measure), 100% - var(--gutter) * 2) [content-end]
    minmax(0, calc((var(--w-popout) - var(--measure)) / 2)) [popout-end]
    minmax(0, calc((var(--w-feature) - var(--w-popout)) / 2)) [feature-end]
    minmax(var(--gutter), 1fr) [full-end];
}
.content-grid > * { grid-column: content; }
.content-grid > .popout { grid-column: popout; }
.content-grid > .feature { grid-column: feature; }
.content-grid > .full { grid-column: full; }

/* ---------- Buttons (Klassennamen = JS-/Wizard-Kontrakt) ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 44px; padding: 0.7rem 1.5rem;
  font-family: var(--font-ui); font-weight: 650; font-size: 1rem;
  text-decoration: none; cursor: pointer;
  border: 1.5px solid var(--on-bg); border-radius: 0;
  background: transparent; color: var(--on-bg);
}
.btn.primary { background: var(--green-dark); border-color: var(--green-dark); color: #fff; }
.btn.ghost { border-color: var(--hairline); }
.btn:hover { border-color: var(--green); }
.btn.primary:hover { background: var(--green); border-color: var(--green); }
/* Button auf dunkelgrüner Fläche: invertiert */
.s-invert .btn.primary { background: #fff; border-color: #fff; color: var(--green-deep); }
.s-invert .btn.primary:hover { background: var(--focus-ring); border-color: var(--focus-ring); }

/* Text-Link mit Pfeil */
.s-mehr {
  font-family: var(--font-ui); font-weight: 650; font-size: 1rem;
  color: var(--green); text-decoration: none;
  display: inline-flex; align-items: center; min-height: 44px;
}
.s-mehr::after { content: " →"; }
.s-mehr:hover { text-decoration: underline; text-underline-offset: 3px; }

/* ---------- Kennwert-Satz (Marken-Signatur) ----------
   Hausform für ECHTE Zahlen: Wert(e) + Einheit + Quellzeile.
   Färbung ist semantisch = Energieskala (schlecht → terra,
   gut → grün). Nie dekorativ einsetzen.                     */
.s-kw { border-top: 3px solid var(--on-bg); padding-top: 1.25rem; }
.s-kw-zeile { display: flex; align-items: baseline; gap: 0.9rem; flex-wrap: wrap; }
.s-kw-wert {
  font-family: var(--font-ui); font-weight: 800; letter-spacing: -0.03em;
  font-size: var(--fs-kw); line-height: 1;
}
.s-kw-wert.ist { color: var(--on-bg); font-weight: 700; }
.s-kw-wert.ziel { color: var(--green); }
.s-kw-pfeil { font-size: 1.6rem; color: var(--muted); }
.s-kw-einheit { font-size: 1.05rem; font-weight: 500; color: var(--on-bg); }
.s-kw-quelle { margin-top: 0.6rem; font-size: 0.95rem; color: var(--on-variant); max-width: 52ch; }

/* Kompakte Kennwert-Reihe (mehrere Werte nebeneinander) */
.s-kw-reihe { display: flex; gap: clamp(1.5rem, 4vw, 4rem); flex-wrap: wrap; }
.s-kw-reihe .s-kw { flex: 1 1 14rem; }
.s-kw-reihe .s-kw-wert { font-size: clamp(1.9rem, 3vw, 2.8rem); }

/* ---------- Tabellen ---------- */
.s-tabelle { border-collapse: collapse; width: 100%; font-family: var(--font-ui); }
.s-tabelle caption { text-align: left; font-size: 0.9rem; color: var(--muted); padding-bottom: 0.6rem; }
.s-tabelle th {
  text-align: left; font-weight: 650; font-size: 0.9rem;
  border-bottom: 2px solid var(--on-bg); padding: 0.5rem 1.25rem 0.5rem 0;
}
.s-tabelle td { border-bottom: 1px solid var(--hairline); padding: 0.7rem 1.25rem 0.7rem 0; vertical-align: top; }
.s-tabelle td strong { font-weight: 650; }
.s-tab-sub { display: block; font-size: 0.9rem; color: var(--on-variant); font-weight: 400; }
.s-tabelle .num { text-align: right; white-space: nowrap; } /* kein tabular-nums: Schibsted spationiert sonst Punkte/Kommas */
.s-tabelle th:last-child, .s-tabelle td:last-child { padding-right: 0; }
@media (max-width: 560px) {
  /* Zweistufige Tabelle: die erste Spalte (Zeilen-Label) wird zur
     vollbreiten Kopfzeile, die Wertspalten teilen sich die Zeile darunter.
     Textspalten erhalten doppeltes Flex-Gewicht gegenueber Zahlenspalten;
     gleiche Gewichte je Position halten die Spalten zeilenuebergreifend
     buendig. Kein horizontales Scrollen mehr noetig. */
  .s-tabelle, .s-tabelle thead, .s-tabelle tbody { display: block; }
  .s-tabelle { overflow-x: auto; }
  .s-tabelle tr {
    display: flex; flex-wrap: wrap; column-gap: 0.9rem;
    padding: 0.85rem 0; border-bottom: 1px solid var(--hairline);
  }
  .s-tabelle thead tr { border-bottom: 2px solid var(--on-bg); padding-top: 0; }
  .s-tabelle th, .s-tabelle td {
    border: none; padding: 0; min-width: 0; hyphens: auto;
    /* nur gehaltvolle Fragmente trennen (min. Wortlaenge 8, 5 davor, 4 danach),
       sonst entstehen Brueche wie "Waer-mebruecken" */
    hyphenate-limit-chars: 8 5 4;
    -webkit-hyphenate-limit-before: 5; -webkit-hyphenate-limit-after: 4;
  }
  .s-tabelle td:first-child { flex: 1 0 100%; margin-bottom: 0.4rem; }
  /* Der Kopf der Label-Spalte entfaellt; die Fettung der Labels traegt ihn */
  .s-tabelle thead th:first-child { display: none; }
  .s-tabelle th:not(:first-child), .s-tabelle td:not(:first-child) { flex: 2 1 0; }
  .s-tabelle th.num, .s-tabelle td.num { flex: 1 1 0; }
  /* mehrwortige num-Inhalte ("nach Aufwand") duerfen umbrechen; echte
     Preise bleiben durch ihr geschuetztes Leerzeichen einzeilig */
  .s-tabelle th.num, .s-tabelle td.num { white-space: normal; }
  /* Labels nicht automatisch trennen (unschoene Brueche wie "Kel-ler");
     lange Komposita dort tragen Soft-Hyphens an der Wortfuge im Markup */
  .s-tabelle th, .s-tabelle td strong, .s-tab-sub { hyphens: manual; }
}

/* ---------- details (FAQ etc.) ---------- */
.s-details { border-top: 1px solid var(--hairline); }
.s-details summary {
  font-family: var(--font-ui); font-weight: 650; font-size: 1.05rem;
  padding: 1rem 0; cursor: pointer; list-style: none;
  display: flex; justify-content: space-between; gap: 1rem; align-items: baseline;
}
.s-details summary::-webkit-details-marker { display: none; }
.s-details summary::after { content: "+"; font-weight: 400; font-size: 1.4rem; color: var(--green); }
.s-details[open] summary::after { content: "–"; }
.s-details > *:not(summary) { padding-bottom: 1.25rem; }

/* ============================================================
   NAVIGATION (Markup-Kontrakt aus main.js unverändert)
   ============================================================ */
.nav {
  position: sticky; top: 0; z-index: 50;
  background: var(--bg);
  border-bottom: 1px solid var(--hairline);
}
.container { padding-inline: var(--gutter); }
.nav-inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: 2rem; min-height: 4.25rem;
}
.brand { display: flex; align-items: center; gap: 0.75rem; text-decoration: none; color: var(--on-bg); }
.brand-logo { height: 2rem; width: auto; color: var(--on-bg); }
.brand div { line-height: 1.15; }
.brand strong { font-weight: 800; font-size: 1.05rem; letter-spacing: -0.01em; display: block; }
.brand span { font-size: 0.8rem; color: var(--muted); }

.menu { display: flex; align-items: center; gap: clamp(1rem, 2vw, 1.75rem); }
.menu > a, .has-submenu > a {
  font-weight: 550; font-size: 0.98rem; text-decoration: none; color: var(--on-bg);
  padding: 0.7rem 0; display: inline-flex; align-items: center;
}
.menu > a:hover, .has-submenu > a:hover { color: var(--green); }
.menu > a.active { box-shadow: inset 0 -2px 0 var(--green); }
.menu .cta {
  background: var(--green-dark); color: #fff; font-weight: 650;
  padding: 0.55rem 1.1rem; border-radius: 0; text-decoration: none;
  min-height: 44px; display: inline-flex; align-items: center;
}
.menu .cta:hover { background: var(--green); }

.has-submenu { position: relative; }
.submenu {
  position: absolute; top: 100%; left: -1rem; min-width: 17rem;
  background: var(--bg); border: 1px solid var(--hairline);
  padding: 0.5rem 0; display: none; z-index: 60;
}
.has-submenu:hover .submenu, .has-submenu.is-open .submenu, .has-submenu:focus-within .submenu { display: block; }
.submenu a {
  display: flex; align-items: center; min-height: 44px; padding: 0.55rem 1rem;
  text-decoration: none; font-size: 0.95rem; color: var(--on-bg);
}
.submenu a:hover { background: var(--surface-1); color: var(--green); }

.theme-toggle {
  background: none; border: 1px solid var(--hairline); border-radius: 0;
  min-width: 44px; min-height: 44px; cursor: pointer; color: var(--on-bg);
  display: inline-flex; align-items: center; justify-content: center;
}
.theme-toggle:hover { border-color: var(--green); }
.theme-toggle svg { width: 18px; height: 18px; }
/* Icon-Wechsel: Dark zeigt Sonne, Light zeigt Mond */
.icon-sun { display: inline-flex; } .icon-moon { display: none; }
[data-theme="light"] .icon-sun { display: none; }
[data-theme="light"] .icon-moon { display: inline-flex; }

.burger {
  display: none; background: none; border: 1px solid var(--hairline); border-radius: 0;
  color: var(--on-bg); font-family: var(--font-ui); font-weight: 600; font-size: 0.95rem;
  padding: 0.5rem 0.9rem; min-height: 44px; cursor: pointer;
}
.mobile { display: none; }

@media (max-width: 960px) {
  .menu { display: none; }
  .burger { display: inline-flex; align-items: center; gap: 0.4rem; }
  .mobile { display: none; flex-direction: column; padding-block: 0.75rem 1.25rem; border-top: 1px solid var(--hairline); }
  .mobile.show { display: flex; }
  .mobile a {
    text-decoration: none; color: var(--on-bg); font-weight: 550; font-size: 1.05rem;
    padding: 0.7rem 0; min-height: 44px; display: flex; align-items: center;
  }
  .mobile .cta { color: var(--green); font-weight: 700; }
  .mobile-submenu { display: none; padding-left: 1rem; }
  .mobile-has-submenu.is-open .mobile-submenu { display: block; }
  .mobile-submenu a { font-weight: 450; font-size: 1rem; }
}

/* ============================================================
   FOOTER (Markup-Kontrakt: .footer .footer-grid h2/a)
   ============================================================ */
.footer { border-top: 1px solid var(--hairline); margin-top: var(--space-l); background: var(--surface-1); }
.footer-grid {
  display: grid; gap: 2.5rem; padding-block: var(--space-s);
  grid-template-columns: 2fr 1fr 1fr 1fr;
}
.footer-brand strong { font-size: 1.15rem; font-weight: 800; }
.footer-brand p { margin-top: 0.6rem; font-size: 0.95rem; color: var(--on-variant); max-width: 34ch; }
.footer h2 { font-size: 0.95rem; font-weight: 700; margin-bottom: 0.6rem; letter-spacing: 0; }
.footer a {
  display: flex; align-items: center; text-decoration: none; color: var(--on-variant);
  font-size: 0.95rem; padding: 0.45rem 0; min-height: 40px;
}
.footer a:hover { color: var(--green); }
.footer-bottom {
  display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap;
  padding-block: 1.25rem; border-top: 1px solid var(--hairline);
  font-size: 0.9rem; color: var(--muted);
}
.footer-bottom a { color: var(--on-variant); display: inline; min-height: 0; padding: 0; }
@media (max-width: 760px) { .footer-grid { grid-template-columns: 1fr 1fr; } }

/* ---------- Sticky-Mobile-Leiste (Kontrakt: .sticky-mobile .btn) ---------- */
.sticky-mobile {
  display: none; position: fixed; bottom: 0; left: 0; right: 0; z-index: 40;
  background: var(--bg); border-top: 1px solid var(--hairline);
  padding: 0.6rem var(--gutter);
  gap: 0.75rem;
}
.sticky-mobile .btn { flex: 1; }
@media (max-width: 760px) {
  .sticky-mobile { display: flex; }
  body { padding-bottom: 4.25rem; } /* Platz für die Leiste; Fokus-Ringe bleiben sichtbar (2.4.11) */
}

/* ============================================================
   STARTSEITEN-SEKTIONEN
   ============================================================ */

/* ---- Hero: Text links, echtes Foto rechts bis an die Kante ---- */
.s-hero { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); }
.s-hero-text {
  padding: var(--space-m) clamp(1.5rem, 4vw, 5rem) var(--space-m) var(--gutter);
  display: flex; flex-direction: column; justify-content: center; gap: 1.4rem;
  max-width: 46rem; justify-self: end;
}
/* Kennwert-Block schiebt sich in die Fotoflaeche (Anschnitt statt Overlay) */
@media (min-width: 901px) {
  .s-hero-text .s-kw {
    position: relative; z-index: 1;
    background: var(--bg);
    margin-right: clamp(-24rem, -16vw, -5rem);
    padding: 1.25rem 2.5rem 1.25rem 0;
  }
}
.s-hero h1 { font-size: var(--fs-hero); hyphens: none; }
/* Keyword-tragende Themenzeile IM h1, visuell untergeordnet */
.s-h1-topic {
  display: block; font-size: 1.05rem; font-weight: 600;
  letter-spacing: 0; color: var(--on-variant); margin-bottom: 0.9rem;
  hyphens: none;
}
.s-hero-sub { font-family: var(--font-text); font-size: 1.2rem; line-height: 1.55; max-width: 46ch; }
.s-hero-media { position: relative; min-height: 100%; margin: 0; }
.s-hero-caption {
  position: absolute; left: 0; bottom: 0;
  background: var(--bg); color: var(--on-variant);
  font-size: 0.85rem; padding: 0.45rem 1rem;
}
.s-hero-media img { width: 100%; height: 100%; object-fit: cover; }
.s-hero-cta { display: flex; align-items: center; gap: 0.9rem 1.25rem; flex-wrap: wrap; min-width: 0; }
.s-tel {
  font-weight: 650; text-decoration: none; color: var(--on-bg); font-size: 1.05rem;
  display: inline-flex; align-items: center; min-height: 44px;
}
.s-tel:hover { color: var(--green); }
.s-micro { font-size: 0.9rem; color: var(--muted); }
@media (max-width: 900px) {
  .s-hero { grid-template-columns: minmax(0, 1fr); }
  .s-hero-text { padding: var(--space-s) var(--gutter); max-width: none; justify-self: stretch; }
  .s-hero-media { min-height: 44vw; }
}

/* ---- Fallstudie ---- */
.s-fall { padding-block: var(--space-m); }
.s-fall-grid {
  display: grid; gap: clamp(2rem, 5vw, 5rem);
  grid-template-columns: minmax(0, 4fr) minmax(0, 5fr);
  align-items: start;
}
.s-fall h2 { max-width: 18ch; }
.s-fall .s-prose { margin-top: 1.25rem; }
.s-fall-status { margin-top: 1rem; font-size: 0.9rem; color: var(--muted); max-width: 52ch; }
@media (max-width: 900px) { .s-fall-grid { grid-template-columns: minmax(0, 1fr); } }

/* ---- Angebot: Energie-Check-Fläche + Leistungs-Index ---- */
.s-angebot { padding-block: var(--space-m) var(--space-l); background: var(--surface-1); }
.s-angebot-grid {
  display: grid; gap: clamp(2rem, 4vw, 4rem);
  grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
  align-items: start;
}
.s-check {
  border-top: 3px solid var(--on-bg);
  padding-top: 1.25rem;
  display: flex; flex-direction: column; gap: 1rem; align-items: flex-start;
}
.s-check h2 { font-size: clamp(1.5rem, 2.4vw, 2.1rem); }
.s-check p { font-family: var(--font-text); font-size: 1.05rem; line-height: 1.55; color: var(--on-variant); max-width: 38ch; }
.s-index { list-style: none; }
.s-index li { border-top: 1px solid var(--hairline); }
.s-index li:last-child { border-bottom: 1px solid var(--hairline); }
.s-index a {
  display: grid; gap: 0.35rem 1.75rem; text-decoration: none; color: inherit;
  grid-template-columns: minmax(0, 1fr) 10.5rem;
  grid-template-rows: auto auto;
  padding: 1.4rem 0; align-items: center;
}
.s-index .s-ix-titel {
  font-weight: 750; font-size: clamp(1.25rem, 2vw, 1.7rem); letter-spacing: -0.01em;
  grid-column: 1; grid-row: 1;
}
.s-index .s-ix-text {
  font-family: var(--font-text); color: var(--on-variant); font-size: 1rem;
  grid-column: 1; grid-row: 2; max-width: 52ch;
}
.s-index img {
  grid-column: 2; grid-row: 1 / 3; align-self: center;
  width: 10.5rem; height: 7rem; object-fit: cover;
}
.s-index a:hover .s-ix-titel { color: var(--green); }
.s-index-haupt .s-ix-titel { font-size: clamp(1.5rem, 2.6vw, 2.2rem); }
/* XL-Variante: das Leistungs-VERZEICHNIS (eigene Seite) — größere Zeilen und Bilder */
.s-index-xl a { grid-template-columns: minmax(0, 1fr) 13rem; padding: 2rem 0; gap: 0.5rem 2.5rem; }
.s-index-xl .s-ix-titel { font-size: clamp(1.6rem, 3vw, 2.4rem); }
.s-index-xl .s-ix-text { font-size: 1.0625rem; max-width: 58ch; }
.s-index-xl img { width: 13rem; height: 8.75rem; }
.s-index-xl .s-ix-fakt { display: block; margin-top: 0.5rem; }
@media (max-width: 700px) {
  .s-index-xl a { grid-template-columns: minmax(0, 1fr); }
  .s-index-xl img { grid-column: 1; grid-row: 3; width: 100%; height: 44vw; margin-top: 0.5rem; }
}
/* Kompakte Modul-Zeilen (ohne Bild) */
.s-index-kompakt a { grid-template-columns: minmax(0, 1fr); padding: 1.1rem 0; }
.s-index-kompakt .s-ix-titel { font-size: 1.2rem; }

/* Seitenkopf (Unterseiten) */
.s-kopf { padding-block: var(--space-m) var(--space-s); }
.s-kopf h1 { font-size: clamp(2.2rem, 4.5vw, 3.8rem); letter-spacing: -0.02em; max-width: 22ch; }
.s-kopf .s-lead { font-family: var(--font-text); font-size: 1.25rem; line-height: 1.6; max-width: 56ch; margin-top: 1.25rem; }
.s-kopf .s-hero-cta { margin-top: 1.75rem; }

/* ---- Spalten-Reihe (sbp-Muster): Bilder + Typografie nebeneinander, KEINE Kästen ---- */
.s-spalten {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(1.75rem, 3.5vw, 4rem);
}
.s-spalten a { display: block; text-decoration: none; color: inherit; }
.s-spalten img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
.s-sp-titel {
  display: block; font-weight: 750; letter-spacing: -0.01em;
  font-size: clamp(1.25rem, 1.8vw, 1.6rem); margin-top: 1.1rem;
}
.s-spalten a:hover .s-sp-titel { color: var(--green); }
.s-sp-text { display: block; font-family: var(--font-text); font-size: 1.0325rem; line-height: 1.6; color: var(--on-variant); margin-top: 0.5rem; }
.s-sp-fakt { display: block; font-size: 0.92rem; color: var(--muted); margin-top: 0.6rem; }
.s-spalten-schlicht a { border-top: 1px solid var(--hairline); padding-top: 1rem; }
@media (max-width: 900px) { .s-spalten { grid-template-columns: minmax(0, 1fr); row-gap: 2.5rem; } }

/* ---- Full-Bleed-Fotoband ---- */
.s-band { position: relative; margin: 0; }
.s-band img { width: 100%; height: clamp(18rem, 44vw, 36rem); object-fit: cover; }

.s-ix-fakt { font-size: 0.92rem; color: var(--muted); font-family: var(--font-ui); }
.s-index-module { margin-top: 1rem; font-size: 0.95rem; color: var(--on-variant); font-family: var(--font-ui); }
.s-index-module a { display: inline; padding: 0; color: var(--on-variant); text-decoration: underline; text-underline-offset: 3px; }
.s-index-module a:hover { color: var(--green); }
@media (max-width: 900px) {
  .s-angebot-grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 560px) {
  .s-index a { grid-template-columns: 1fr; }
  .s-index img { grid-column: 1; grid-row: 3; width: 100%; height: 44vw; margin-top: 0.5rem; }
}

/* ---- Person ---- */
.s-person { padding-block: var(--space-l); }
.s-person-grid {
  display: grid; gap: clamp(2rem, 6vw, 7rem);
  grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
  align-items: start;
}
.s-person figure { margin: 0; }
.s-person img { width: 100%; height: auto; }
.s-caption { font-family: var(--font-ui); font-size: 0.875rem; color: var(--muted); padding-top: 0.5rem; }
.s-person .s-prose { margin-top: 1.25rem; }
.s-fakten {
  margin-top: 1.5rem; padding-top: 1rem; border-top: 3px solid var(--on-bg);
  font-size: 0.95rem; line-height: 1.7; color: var(--on-variant); max-width: 56ch;
}
@media (max-width: 900px) { .s-person-grid { grid-template-columns: minmax(0, 1fr); } }

/* ---- Region ---- */
.s-region-bild { position: relative; margin: 0; }
.s-region-bild img { width: 100%; height: clamp(16rem, 38vw, 30rem); object-fit: cover; }
.s-region-text { padding-block: 1.5rem var(--space-l); }
.s-region-text .s-prose { margin-top: 1rem; }

/* ---- Schluss-CTA ---- */
.s-schluss { padding-block: var(--space-l); text-align: left; }
.s-schluss h2 { max-width: 16ch; font-size: clamp(2rem, 4vw, 3.4rem); }
.s-schluss .s-hero-cta { margin-top: 1.75rem; }
.s-schluss .s-micro { margin-top: 0.75rem; max-width: 52ch; }

/* ============================================================
   MOTION — no-motion-first: Basis ist bewegungsfrei.
   Nur die einmalige Hero-Choreo + Mikro-Übergänge.
   ============================================================ */
@media (prefers-reduced-motion: no-preference) {
  .btn, .s-mehr, .menu > a, .s-index .s-ix-titel, .theme-toggle, .footer a, .submenu a {
    transition: color 160ms ease-out, background-color 160ms ease-out, border-color 160ms ease-out;
  }
  @keyframes s-rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
  .s-hero-text > * { animation: s-rise 480ms cubic-bezier(0.2, 0.6, 0.2, 1) backwards; }
  .s-hero-text > *:nth-child(2) { animation-delay: 70ms; }
  .s-hero-text > *:nth-child(3) { animation-delay: 140ms; }
  .s-hero-text > *:nth-child(4) { animation-delay: 210ms; }
  .s-hero-text > *:nth-child(5) { animation-delay: 280ms; }
  .s-hero-media img { animation: s-rise 600ms cubic-bezier(0.2, 0.6, 0.2, 1) backwards; }
}

/* ============================================================
   sbp-TEMPLATE-KATALOG (T1–T8) — einzige Sektions-Layouts
   der Unterseiten. Quelle: Plan „sbp-Template-Katalog".
   Jedes Template definiert seine Positionen/Versätze selbst;
   Seiten fügen KEINE eigenen Layout-Regeln hinzu.
   ============================================================ */

/* Grünstrich-Signatur unter Sektions-Überschriften */
.t-strich { hyphens: none; }
.t-strich::after {
  content: ""; display: block;
  width: 3rem; height: 2px; background: var(--green);
  margin-top: 0.8rem;
}

/* Gemeinsamer Sektionsabstand zwischen Templates */
.t-abschnitt { margin-block: var(--space-l); }

/* ---- T1 · Seitenkopf mit Bildband ---- */
.t1-kopf { padding: 1.5rem var(--gutter) 1.75rem; }
.t1-kopf h1 { font-size: 1.75rem; font-weight: 650; letter-spacing: -0.01em; }
/* Folgt die erste Sektion ohne Bildband direkt auf den Seitenkopf
   (ueber-mich, kontakt, ratgeber), entfaellt ihr grosser Sektionsabstand,
   sonst haengt die H1 im Leeren */
.t1-kopf + .sx-duo, .t1-kopf + .sx-text { margin-top: 3rem; }
@media (max-width: 900px) {
  .t1-kopf + .sx-duo, .t1-kopf + .sx-text { margin-top: 2rem; }
}
.t1-band { position: relative; margin: 0; }
.t1-band img { width: 100%; height: clamp(220px, 24vw, 420px); object-fit: cover; }
.t1-band figcaption {
  position: absolute; left: 0; bottom: 0;
  background: var(--bg); color: var(--on-variant);
  font-size: 0.85rem; padding: 0.45rem 1rem; max-width: 60ch;
}
@media (max-width: 700px) { .t1-band img { height: 48vw; } }

/* ---- T2 · Statement-Duo (These links, Erläuterung versetzt rechts der Mitte) ---- */
.t2-duo {
  display: grid;
  grid-template-columns: minmax(0, 28fr) minmax(2rem, 18fr) minmax(0, 44ch) minmax(0, 10fr);
  padding-inline: var(--gutter);
}
.t2-duo > h2 { grid-column: 1; font-size: clamp(1.4rem, 2vw, 1.75rem); }
.t2-duo > div { grid-column: 3; }
@media (min-width: 901px) { .t2-duo > div { margin-top: clamp(2.5rem, 4vw, 4.5rem); } }
@media (max-width: 900px) {
  .t2-duo { grid-template-columns: minmax(0, 1fr); }
  .t2-duo > h2, .t2-duo > div { grid-column: 1; }
  .t2-duo > div { margin-top: 1.25rem; }
}

/* ---- T3 · Themenband (h2 → Bild auf Site-Bahn → Textspalte, Position wechselnd) ---- */
.t3-band {
  /* auf der Site-Bahn wie alle Sektionen; war als letzte full-bleed */
  width: min(100% - 2 * var(--gutter), var(--sx-mkcap));
  margin-inline: auto;
}
.t3-band > h2 {
  margin-bottom: 1.5rem;
  font-size: clamp(1.6rem, 2.1vw, 2.3rem); font-weight: 620;
  letter-spacing: -0.012em; line-height: 1.18; hyphens: none;
}
.t3-band figure { position: relative; margin: 0; }
.t3-band figure img { width: 100%; height: clamp(20rem, 42vw, 32rem); object-fit: cover; }
.t3-unten { display: grid; margin-top: 1.75rem; }
.t3-band--rechts .t3-unten { grid-template-columns: minmax(0, 52fr) minmax(0, 44ch) minmax(0, 8fr); }
.t3-band--rechts .t3-unten > div { grid-column: 2; }
.t3-band--links .t3-unten { grid-template-columns: minmax(0, 44ch) 1fr; }
.t3-band--links .t3-unten > div { grid-column: 1; }
.t3-fakt { display: block; font-size: 0.92rem; color: var(--muted); margin-top: 0.9rem; }
.t3-unten .s-mehr { margin-top: 0.4rem; }
@media (max-width: 900px) {
  .t3-band--rechts .t3-unten, .t3-band--links .t3-unten { grid-template-columns: minmax(0, 1fr); }
  .t3-band--rechts .t3-unten > div, .t3-band--links .t3-unten > div { grid-column: 1; }
  .t3-band figure img { height: clamp(14rem, 52vw, 20rem); }
}

/* T3t · Variante: Tabelle trägt die Breite, Text/Kennwerte versetzt danach */
/* Kopf in t8-lese-Grammatik: Titel links, Erklaertext rechts; Tabelle
   darunter ueber die volle Site-Bahn */
.t3t-kopf {
  width: min(100% - 2 * var(--gutter), var(--sx-mkcap));
  margin-inline: auto;
  display: grid; align-items: start;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  column-gap: clamp(2.5rem, 5vw, 6rem);
}
.t3t-kopf > h2 {
  font-size: clamp(1.6rem, 2.1vw, 2.3rem); font-weight: 620;
  letter-spacing: -0.012em; line-height: 1.18; hyphens: none; max-width: 14em;
}
.t3t-tab {
  width: min(100% - 2 * var(--gutter), var(--sx-mkcap));
  margin: 2.75rem auto 0;
}
@media (max-width: 900px) {
  .t3t-kopf { grid-template-columns: minmax(0, 1fr); row-gap: 1.25rem; }
  .t3t-tab { margin-top: 2rem; }
}

/* ---- T4 · Anker-Duo (kleines Porträt links, Text ab ~40%, Oberkanten bündig) ---- */
.t4-anker {
  display: grid; align-items: start;
  grid-template-columns: minmax(0, 24fr) minmax(2rem, 14fr) minmax(0, 42ch) minmax(0, 12fr);
  /* wie die sx-Sektionen auf die Site-Bahn gedeckelt, sonst waechst das
     Portraet auf breiten Monitoren unbegrenzt mit */
  width: min(100% - 2 * var(--gutter), var(--sx-mkcap));
  margin-inline: auto;
}
.t4-anker figure { grid-column: 1; margin: 0; }
.t4-anker figure img { width: 100%; height: auto; }
.t4-anker > div { grid-column: 3; }
@media (max-width: 900px) {
  .t4-anker { grid-template-columns: minmax(0, 1fr); row-gap: 1.75rem; }
  .t4-anker figure { max-width: 20rem; }
  .t4-anker figure, .t4-anker > div { grid-column: 1; }
}

/* ---- T5 · Inset-Flächenband (eingerückt, nie full-bleed) ---- */
.t5-inset {
  margin-inline: clamp(1.5rem, 5vw, 6rem);
  background: var(--surface-1);
  padding: clamp(2.25rem, 4.5vw, 4.5rem) clamp(1.5rem, 4vw, 4.5rem);
}
.t5-inset > h2 { font-size: clamp(1.4rem, 2vw, 1.75rem); }
/* Duo im Inset: Titel links, Hairline-Zeilen rechts (t8-lese-Grammatik),
   damit der Kasten in der Breite gefuellt ist statt links gestapelt */
.t5-duo {
  width: min(100%, var(--sx-mkcap));
  margin-inline: auto;
  display: grid; align-items: start;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  column-gap: clamp(2.5rem, 5vw, 6rem);
}
.t5-duo > h2 { font-size: clamp(1.4rem, 2vw, 1.75rem); max-width: 14em; }
.t5-duo > .t5-zeilen { margin-top: 0; }
.t5-duo .t5-zeilen > div { max-width: none; }
@media (max-width: 900px) {
  .t5-duo { grid-template-columns: minmax(0, 1fr); }
  .t5-duo > .t5-zeilen { margin-top: 1.5rem; }
}

/* ---- T8 · Lesespalte (FAQ/Artikel) ---- */
/* T8 · Lesesektion (FAQ-Strecken): gleiche Grammatik wie t8-block der
   Artikel — Site-Bahn zentriert, Titel links, Fragen rechts. */
.t8-lese {
  width: min(100% - 2 * var(--sx-einzug), var(--sx-mkcap));
  margin-inline: auto;
  display: grid; align-items: start;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  column-gap: clamp(2.5rem, 5vw, 6rem);
}
.t8-lese > h2 {
  grid-column: 1;
  font-size: clamp(1.6rem, 2.1vw, 2.3rem); font-weight: 620;
  letter-spacing: -0.012em; line-height: 1.18; hyphens: none; max-width: 14em;
}
.t8-lese > h2::after {
  content: ""; display: block;
  width: 3.5rem; height: 2px; background: var(--green);
  margin-top: 1.4rem;
}
.t8-lese > :not(h2) { grid-column: 2; }
.t8-lese > h2 + * { margin-top: 0.35rem; }
@media (max-width: 1100px) {
  .t8-lese { width: auto; margin-inline: var(--gutter); grid-template-columns: minmax(0, 1fr); }
  .t8-lese > :not(h2) { grid-column: 1; }
  .t8-lese > h2 + * { margin-top: 1.25rem; }
}


/* ============================================================
   SX — Sektions-Vorlagen nach User-Referenz (sbp-Screenshots
   02.07.: Text-Sektion + Projekt-Bildreihe). Diese Vorlagen
   gelten fuer die Unterseiten-Sektionen.
   ============================================================ */

/* Headline-Stil der Vorlagen: ruhig, aber mit Gewicht (sbp-Anmutung) */
.sx-h {
  font-weight: 620; letter-spacing: -0.012em; hyphens: none;
  font-size: clamp(1.75rem, 2.1vw, 2.7rem); line-height: 1.18;
  max-width: 14em;
}
.sx-h::after {
  content: ""; display: block;
  width: 3.5rem; height: 2px; background: var(--green);
  margin-top: 1.4rem;
}

/* SX-Text: zentrierter Block auf Deckelbreite, Headline links, Textspalte versetzt rechts */
.sx-text {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  column-gap: clamp(2rem, 4vw, 5rem);
  width: min(100% - 2 * var(--sx-einzug), var(--sx-mkcap));
  margin-inline: auto;
  margin-block: clamp(5rem, 9vw, 9rem);
}
.sx-text > .sx-h { grid-column: 1; }
.sx-text > .sx-body { grid-column: 2; margin-top: clamp(4.5rem, 7vw, 8rem); }
.sx-body {
  font-size: 1.0625rem; line-height: 1.75; color: var(--on-variant);
  max-width: 56ch;
}
.sx-body p + p { margin-top: 1.1rem; }
.sx-body ul { padding-left: 1.2rem; margin-top: 1.1rem; }
.sx-body li { margin-top: 0.4rem; }
.sx-body li::marker { color: var(--green); }
.sx-body a { color: var(--green); text-decoration-thickness: 1px; text-underline-offset: 3px; }
.sx-body a:hover { text-decoration-thickness: 2px; }
.sx-body .btn { margin-top: 1.75rem; }
.sx-micro { font-size: 0.85rem; color: var(--muted); margin-top: 0.75rem; max-width: 52ch; }
@media (max-width: 1100px) {
  .sx-text { grid-template-columns: minmax(0, 1fr); width: auto; margin-inline: var(--gutter); margin-block: clamp(3.5rem, 9vw, 6rem); }
  .sx-text > .sx-h, .sx-text > .sx-body { grid-column: 1; }
  .sx-text > .sx-body { margin-top: 2rem; max-width: 56ch; }
}

/* SX-Reihe: Headline auf der 29-%-Linie, randlose Bildreihe, Titel darunter */
.sx-reihe { margin-block: clamp(5rem, 9vw, 9rem); }
/* Variante: Reihe auf dunklerer Flaeche (wie Startseiten-Angebotsband) */
.sx-reihe--flaeche {
  background: var(--surface-1);
  padding-block: clamp(3.5rem, 6vw, 6rem) clamp(4rem, 7vw, 7rem);
}
.sx-reihe > .sx-h { margin-left: 29%; }
.sx-strip {
  display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr);
  gap: clamp(1.25rem, 2vw, 2rem);
  padding: 2.5rem clamp(1rem, 1.6vw, 2rem) 0.5rem;
}
.sx-strip > a { text-decoration: none; color: inherit; min-width: 0; }
.sx-strip img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
/* Caption-Block schmaler als das Bild, mittig darunter zentriert, Text in sich
   linksbuendig (sbp-Referenz). 22rem entspricht ~45ch der Serif in 0.95rem und
   deckelt breite Monitore, damit die Beschreibung auf 2-3 Zeilen umbricht */
.sx-cap { display: block; width: min(88%, 22rem); margin-inline: auto; }
.sx-titel { display: block; margin-top: 0.9rem; font-size: 0.98rem; font-weight: 500; line-height: 1.45; }
.sx-desc { display: block; margin-top: 0.45rem; font-family: var(--font-text); font-size: 0.95rem; line-height: 1.55; color: var(--muted); }
.sx-strip > a:hover .sx-titel { color: var(--green); }
.sx-reihe > .btn { margin-left: 29%; margin-top: 2rem; }
@media (max-width: 1100px) {
  .sx-reihe > .sx-h { margin-left: var(--gutter); }
  .sx-reihe > .btn { margin-left: var(--gutter); }
  .sx-strip { display: flex; overflow-x: auto; scroll-snap-type: x proximity; scrollbar-width: thin; }
  .sx-strip > a { flex: 0 0 auto; width: min(78vw, 420px); scroll-snap-align: start; }
}


/* SX-Duo: grosses Bild links (~34 %), Text-Block ab ~49 % mit langem Strich + Button */
.sx-duo {
  display: grid; align-items: center;
  grid-template-columns: minmax(0, 34fr) minmax(0, 13fr) minmax(0, 43fr) minmax(0, 10fr);
  padding-left: clamp(2rem, 3.2vw, 4rem);
  /* wie t4-anker auf die Site-Bahn gedeckelt, sonst waechst das Foto auf
     breiten Monitoren unbegrenzt und der zentrierte Text laesst oben/unten
     grosse Leerflaechen entstehen */
  width: min(100% - 2 * var(--gutter), var(--sx-mkcap));
  margin-inline: auto;
  margin-block: clamp(5rem, 9vw, 9rem);
}
.sx-duo > figure { grid-column: 1; margin: 0; }
.sx-duo > figure img { width: 100%; height: auto; }
.sx-duo > div { grid-column: 3; }
.sx-duo .sx-h::after { width: 7.8rem; }
.sx-duo .sx-body { max-width: 62ch; margin-top: 2.25rem; }
.btn--pfeil { justify-content: space-between; gap: 2.5rem; min-width: 13rem; text-align: left; }
.btn--pfeil::after { content: "→"; font-weight: 400; }
@media (max-width: 1100px) {
  .sx-duo { grid-template-columns: minmax(0, 1fr); padding-inline: var(--gutter); row-gap: 2rem; width: auto; margin-inline: 0; }
  .sx-duo > figure, .sx-duo > div { grid-column: 1; }
  .sx-duo .sx-body { margin-top: 1.5rem; }
}

/* Bild-Parallax im Duo (Referenz sbp): komplett in assets/js/sx-parallax.js.
   Bewusst KEINE CSS-Scroll-Timeline: view() kann den Fortschritt nicht auf den
   real erreichbaren Scrollbereich klemmen; Sektionen nahe dem Seitenende kaemen
   dort nie ueber einen Bruchteil des Hubs hinaus (so beim Duo auf /leistungen/). */


/* SX-Merkmale: zentriertes 2x2-Raster (User-Referenz concap) — Kennzahl als Anker */
.sx-merkmale { margin-block: clamp(5rem, 9vw, 9rem); }
.sx-merkmale > .sx-h { text-align: center; margin-inline: auto; }
.sx-merkmale > .sx-h::after { margin-inline: auto; }
.sx-mk-grid {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  column-gap: var(--sx-gap); row-gap: clamp(3.5rem, 6vw, 6rem);
  width: min(100% - 2 * var(--sx-einzug), var(--sx-mkcap));
  margin-inline: auto;
  margin-top: clamp(3rem, 5vw, 5rem);
}
.sx-mk { text-align: center; }
.sx-mk-zahl {
  display: block; font-weight: 800; letter-spacing: -0.02em;
  font-size: clamp(1.9rem, 2.6vw, 2.6rem); line-height: 1; color: var(--green);
}
.sx-mk-titel { display: block; font-weight: 700; font-size: 1.125rem; margin-top: 1.1rem; }
.sx-mk-text { font-size: 1.0325rem; line-height: 1.7; color: var(--on-variant); max-width: var(--sx-mktext); margin: 0.6rem auto 0; }
.sx-mk-text a { color: var(--green); text-decoration-thickness: 1px; text-underline-offset: 3px; }
.sx-mk-text a:hover { text-decoration-thickness: 2px; }
@media (max-width: 900px) { .sx-mk-grid { grid-template-columns: minmax(0, 1fr); width: auto; margin-inline: var(--gutter); } }


/* SX-Liste: Eintraege mit gedrehtem Seitenlabel + vertikaler Linie (User-Referenz sbp Einstiegsmoeglichkeiten) */
.sx-liste { margin-block: clamp(5rem, 9vw, 9rem); }
/* Überschrift bündig mit der Textkante der LINKEN Merkmale-Kachel (ab 1.140 €):
   Einzug + Zentrier-Rest der 52ch-Textbox innerhalb der linken Spalte */
.sx-liste > .sx-h {
  margin-left: calc(
    (100% - min(100% - 2 * var(--sx-einzug), var(--sx-mkcap))) / 2
    + max(0px, ((min(100% - 2 * var(--sx-einzug), var(--sx-mkcap)) - var(--sx-gap)) / 2 - var(--sx-mktext)) / 2)
  );
}
.sx-le {
  display: grid; align-items: stretch;
  grid-template-columns: minmax(0, 10rem) minmax(0, 1fr);
  width: min(100% - 2 * var(--sx-einzug), var(--sx-mkcap));
  margin-inline: auto;
  margin-top: clamp(3.5rem, 6vw, 6rem);
}
.sx-le-label {
  grid-column: 1; align-self: center; justify-self: end;
  writing-mode: vertical-rl; transform: rotate(180deg);
  font-weight: 600; font-size: 1rem; color: var(--muted);
  letter-spacing: 0.02em; padding-left: 1.25rem;
}
.sx-le-inhalt {
  grid-column: 2;
  border-left: 1px solid var(--muted);
  padding-left: clamp(2rem, 3vw, 3.5rem);
  padding-block: 0.5rem;
}
.sx-le-titel { display: block; font-weight: 700; font-size: 1.25rem; letter-spacing: -0.005em; }
.sx-le-inhalt .sx-body { max-width: 66ch; margin-top: 1.4rem; }
.sx-le-inhalt .s-tabelle { margin-top: 1.6rem; }
.sx-le-inhalt .s-kw-reihe { margin-top: 1.6rem; }
@media (max-width: 900px) {
  .sx-liste > .sx-h { margin-left: var(--gutter); }
  .sx-le { grid-template-columns: minmax(0, 1fr); width: auto; margin-inline: var(--gutter); }
  .sx-le-label {
    grid-column: 1; writing-mode: horizontal-tb; transform: none;
    justify-self: start; padding-left: 0; margin-bottom: 0.75rem;
  }
  .sx-le-inhalt { grid-column: 1; }
}

/* Foto innerhalb eines Listen-Eintrags (ablauf/): kleiner als die Spalte */
.sx-le-foto { margin: 1.5rem 0 0; max-width: 30rem; }
.sx-le-foto img { width: 100%; height: auto; }

/* Verbandslogo (ueber-mich/): transparentes Original-PNG, ohne Chip */
.sx-le-logo {
  display: block; margin-top: 1.5rem;
  width: min(240px, 70%); height: auto;
}

/* ---- T9 · Formular-Duo (kontakt/) ----
   Markup-Kontrakt aus kontakt/: #contactForm #result #message #service,
   .form .input .alert .help .hidden .ok .err, option-values (Wizard-Prefill
   ?check=BASE64). Inline-JS der Seite bleibt unveraendert. */
.t9-formular {
  display: grid; align-items: start;
  grid-template-columns: minmax(0, 7fr) minmax(0, 4fr);
  gap: clamp(2.5rem, 6vw, 7rem);
  width: min(100% - 2 * var(--gutter), 82rem);
  margin-inline: auto;
}
@media (max-width: 900px) { .t9-formular { grid-template-columns: minmax(0, 1fr); } }

.form { display: grid; gap: 1.15rem; margin-top: 1.5rem; }
.form .grid.grid-2 { display: grid; gap: 1.15rem; grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 700px) { .form .grid.grid-2 { grid-template-columns: minmax(0, 1fr); } }
.input label { display: block; font-weight: 600; font-size: 0.95rem; margin-bottom: 0.4rem; }
.input input, .input select, .input textarea {
  width: 100%; min-height: 44px; padding: 0.6rem 0.75rem;
  font: inherit; color: var(--on-bg);
  background: var(--surface-1); border: 1px solid var(--hairline); border-radius: 0;
}
.input textarea { min-height: 9rem; resize: vertical; }
.input input::placeholder, .input textarea::placeholder { color: var(--muted); }
.help { font-size: 0.9rem; color: var(--muted); }
.alert { padding: 0.9rem 1rem; border: 1.5px solid var(--hairline); font-weight: 600; margin-top: 1.25rem; }
.alert.ok { border-color: var(--green); color: var(--green); }
.alert.err { border-color: var(--terra); color: var(--terra); }
.hidden { display: none; }
.form .note { display: block; color: var(--muted); font-size: 0.9rem; }
.form .note a { color: var(--on-variant); }
.form button.btn { justify-self: start; }
.s-prose ul { padding-left: 1.2rem; margin-top: 0.75rem; }
.s-prose li { margin-top: 0.35rem; }
.s-prose li::marker { color: var(--green); }

/* ---- T8a · Artikel-Layout (ratgeber/ + Rechtsseiten) ----
   EINHEITLICHE Bahn wie die sx-Sektionen der uebrigen Seiten (82rem-Deckel,
   gleicher Einzug). Jede Sektion (.t8-block) folgt der sx-Grammatik:
   Zwischentitel links, Inhalt rechts versetzt — so fuellt der Content die
   volle Bahn, die Zeilen bleiben aber im Lesemass der rechten Spalte. */
.t8-artikel {
  width: min(100% - 2 * var(--sx-einzug), var(--sx-mkcap));
  margin-inline: auto;
  padding-block: 1.5rem var(--space-m);
}
.t8-artikel h1 {
  font-size: clamp(1.9rem, 3.4vw, 3.1rem); font-weight: 750;
  letter-spacing: -0.015em; margin-top: 0.75rem; max-width: 30ch;
}
/* Artikel-Kopf: Vorspann links, Titelbild rechts */
.art-kopf {
  display: grid; align-items: start;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  column-gap: clamp(2.5rem, 5vw, 6rem);
}
.art-kopf > .art-hero { justify-self: end; } /* buendig mit der rechten Bahnkante */
.art-lead {
  font-family: var(--font-text); font-size: 1.25rem; line-height: 1.6;
  color: var(--on-variant); margin-top: 1.25rem; max-width: 52ch;
}
/* Artikel-Heros KOMPLETT zeigen (tragen erklaerende Beschriftung, kein Crop).
   Hoehendeckel haelt Hochformate im Rahmen; Breite folgt dem Verhaeltnis. */
.art-hero { margin: 0; }
.art-hero img { width: auto; max-width: 100%; height: auto; max-height: min(70vh, 34rem); }
/* Autor-Sektion unter Artikeln: wie die Person-Sektion der Startseite —
   Text links, grosses Portraet rechts, auf der Site-Bahn */
.art-autor {
  width: min(100% - 2 * var(--sx-einzug), var(--sx-mkcap));
  margin: var(--space-l) auto 0;
  display: grid; align-items: start;
  grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
  gap: clamp(2rem, 6vw, 7rem);
}
.art-autor figure { margin: 0; }
.art-autor img { width: 100%; height: auto; }
.art-autor .s-prose { margin-top: 1.25rem; }
@media (max-width: 1100px) {
  .art-autor { width: auto; margin-inline: var(--gutter); grid-template-columns: minmax(0, 1fr); }
  .art-autor figure { max-width: 24rem; }
}

/* Sektion in sx-Grammatik: h2 links, alles andere rechts */
.t8-block {
  display: grid; align-items: start;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  column-gap: clamp(2.5rem, 5vw, 6rem);
  margin-top: var(--space-m);
}
.t8-block > h2 { grid-column: 1; }
.t8-block > h2::after {
  content: ""; display: block;
  width: 3.5rem; height: 2px; background: var(--green);
  margin-top: 1.4rem;
}
.t8-block > :not(h2) { grid-column: 2; }
.t8-artikel h2 {
  font-size: clamp(1.6rem, 2.1vw, 2.3rem); font-weight: 620;
  letter-spacing: -0.012em; line-height: 1.18; hyphens: none; max-width: 14em;
}
.t8-artikel h3 { margin-top: 1.9rem; font-size: 1.2rem; }
.t8-block > h2 + * { margin-top: 0.35rem; }
.t8-artikel p, .t8-artikel li {
  font-family: var(--font-text); font-size: 1.1875rem; line-height: 1.65;
  margin-top: 1.15rem;
}
.t8-artikel ul { padding-left: 1.2rem; margin-top: 1.1rem; }
@media (max-width: 1100px) {
  .t8-artikel { width: auto; margin-inline: var(--gutter); }
  .art-kopf, .t8-block { grid-template-columns: minmax(0, 1fr); }
  .art-kopf > figure, .t8-block > :not(h2) { grid-column: 1; }
  .art-kopf > figure { margin-top: 1.75rem; }
  .t8-block { margin-top: var(--space-s); }
  .t8-block > h2 + * { margin-top: 1.25rem; }
}
.t8-artikel li { margin-top: 0.5rem; }
.t8-artikel li::marker { color: var(--green); }
.t8-artikel .s-tabelle { margin-top: 1.25rem; }
.t8-artikel .s-tabelle td, .t8-artikel .s-tabelle th { font-size: 0.95rem; }
.t8-artikel a { color: var(--green); text-decoration-thickness: 1px; text-underline-offset: 3px; overflow-wrap: anywhere; }
.t8-artikel .s-details summary { hyphens: none; }
.t8-artikel .s-topic a { color: var(--on-variant); }

/* ============================================================
   check/-WIZARD — dokumentierte Namespace-Ausnahme.
   Markup + Inline-JS der Seite sind Kontrakt (IDs #btn-next,
   #btn-back, #progress-fill, #funding-grid, phase-*; JS-Klassen
   wizard-step, option-card[-label/-desc], funding-card, cols-2,
   result-scale-segment). Das JS setzt Icon-NAMEN als Text in
   .material-symbols-outlined → Iconfont bleibt NUR hierfür.
   ============================================================ */
@font-face {
  font-family: 'Material Symbols Outlined';
  src: url('/assets/fonts/material-symbols-outlined.woff2') format('woff2');
  font-display: block;
}
.material-symbols-outlined {
  font-family: 'Material Symbols Outlined';
  font-weight: normal; font-style: normal; line-height: 1;
  letter-spacing: normal; text-transform: none; display: inline-block;
  white-space: nowrap; direction: ltr;
  font-feature-settings: 'liga';
}

.wizard-hero { padding: var(--space-s) var(--gutter) var(--space-m); }
.wizard-hero .container { max-width: 62rem; margin-inline: auto; padding: 0; }
.wizard-hero h1 { font-size: clamp(1.9rem, 3.4vw, 2.9rem); font-weight: 750; letter-spacing: -0.015em; max-width: 24ch; }
.wizard-hero .lead { font-family: var(--font-text); font-size: 1.2rem; line-height: 1.6; color: var(--on-variant); margin-top: 1rem; max-width: 58ch; }

.variants-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.25rem; margin-top: 2.5rem; }
@media (max-width: 860px) { .variants-grid { grid-template-columns: minmax(0, 1fr); } }
.variant-card {
  text-align: left; cursor: pointer; font: inherit; color: var(--on-bg);
  background: var(--bg); border: 1.5px solid var(--hairline); border-radius: 0;
  padding: 1.5rem 1.4rem; display: flex; flex-direction: column; gap: 0.5rem;
}
.variant-card:hover { border-color: var(--green); }
.variant-card.recommended { border-color: var(--green-dark); border-width: 2px; }
.variant-badge { color: var(--green); font-weight: 700; font-size: 0.85rem; }
.variant-time { color: var(--muted); font-size: 0.85rem; }
.variant-card h2 { font-size: 1.25rem; font-weight: 750; }
.variant-card p { font-family: var(--font-text); font-size: 0.98rem; line-height: 1.55; color: var(--on-variant); }
.variant-cta { margin-top: auto; padding-top: 0.5rem; font-weight: 650; color: var(--green); }

.wizard { max-width: 46rem; margin-inline: auto; padding-inline: var(--gutter); }
.wizard-progress { height: 4px; background: var(--surface-2); }
.wizard-progress-fill { height: 100%; background: var(--green-dark); }
.wizard-progress-label { margin-top: 0.6rem; font-size: 0.9rem; color: var(--muted); }
.wizard-step { display: none; }
.wizard-step.active { display: block; }
.wizard-question { font-size: clamp(1.4rem, 2.4vw, 1.9rem); font-weight: 750; margin-top: 1.75rem; }
.wizard-subtitle { font-family: var(--font-text); color: var(--on-variant); margin-top: 0.6rem; max-width: 58ch; }
.wizard-options { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0.75rem; margin-top: 1.5rem; }
.wizard-options.cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 620px) { .wizard-options.cols-2 { grid-template-columns: minmax(0, 1fr); } }
.option-card {
  text-align: left; cursor: pointer; font: inherit; color: var(--on-bg);
  background: var(--bg); border: 1.5px solid var(--hairline); border-radius: 0;
  padding: 0.9rem 1.1rem; min-height: 44px;
}
.option-card:hover { border-color: var(--green); }
.option-card.selected { border-color: var(--green-dark); border-width: 2px; background: var(--surface-1); }
.option-card-label { font-weight: 650; display: block; }
.option-card-desc { display: block; font-family: var(--font-text); font-weight: 400; font-size: 0.92rem; color: var(--on-variant); margin-top: 0.25rem; }
.wizard-nav { display: flex; justify-content: space-between; gap: 1rem; margin-top: 2.25rem; padding-bottom: var(--space-m); }
.btn-back {
  display: inline-flex; align-items: center; gap: 0.4rem; cursor: pointer;
  font: inherit; font-weight: 650; color: var(--on-bg);
  background: transparent; border: 1.5px solid var(--hairline); border-radius: 0;
  min-height: 44px; padding: 0.7rem 1.25rem;
}
.btn-back:hover { border-color: var(--green); }
.btn-next { gap: 0.4rem; }

.result-hero { padding: var(--space-m) var(--gutter) var(--space-s); text-align: center; }
.result-label { font-weight: 600; font-size: 0.95rem; color: var(--on-variant); }
.result-class-huge { font-size: clamp(4rem, 11vw, 7rem); font-weight: 800; letter-spacing: -0.04em; line-height: 1; margin-top: 0.5rem; color: var(--green); }
.result-class-huge[data-tier="mid"] { color: var(--gold); }
.result-class-huge[data-tier="poor"], .result-class-huge[data-tier="bad"] { color: var(--terra); }
.result-headline { font-size: clamp(1.4rem, 2.6vw, 2rem); font-weight: 750; margin-top: 0.75rem; }
.result-subtext { font-family: var(--font-text); color: var(--on-variant); line-height: 1.65; max-width: 58ch; margin: 0.9rem auto 0; }
/* Reale Effizienzklassen-Skala A–G (semantische Farben, kein Dekor) */
.result-scale { max-width: 38rem; margin: 2rem auto 0; }
.result-scale-bar { display: flex; height: 40px; }
.result-scale-segment {
  flex: 1; display: flex; align-items: center; justify-content: center;
  font-weight: 800; font-size: 0.85rem; color: #fff; opacity: 0.4;
}
.result-scale-segment.active { opacity: 1; outline: 3px solid var(--on-bg); z-index: 2; font-size: 1.05rem; }
.result-scale-segment:nth-child(1) { background: #2e7a18; }
.result-scale-segment:nth-child(2) { background: #4fa028; color: #111; }
.result-scale-segment:nth-child(3) { background: #86ad18; color: #111; }
.result-scale-segment:nth-child(4) { background: #cc9418; color: #111; }
.result-scale-segment:nth-child(5) { background: #d98018; color: #111; }
.result-scale-segment:nth-child(6) { background: #a84018; }
.result-scale-segment:nth-child(7) { background: #7e2a0e; }
.result-disclaimer { font-size: 0.9rem; color: var(--muted); max-width: 68ch; margin: 2rem auto 0; text-align: left; }
.result-disclaimer a { color: var(--on-variant); }

.funding-section { margin: var(--space-m) clamp(1.5rem, 5vw, 6rem) 0; background: var(--surface-1); padding: clamp(2.25rem, 4.5vw, 4rem) clamp(1.5rem, 4vw, 4.5rem); }
.funding-section h2 { font-size: clamp(1.4rem, 2vw, 1.75rem); }
.funding-section .section-intro { font-family: var(--font-text); color: var(--on-variant); margin-top: 0.75rem; max-width: 58ch; }
.funding-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(1.5rem, 3vw, 3rem); margin-top: 2rem; }
@media (max-width: 860px) { .funding-grid { grid-template-columns: minmax(0, 1fr); } }
.funding-card { border-top: 3px solid var(--on-bg); padding-top: 1.1rem; }
.funding-card.highlight { border-top-color: var(--green-dark); }
.funding-tag { color: var(--green); font-weight: 700; font-size: 0.88rem; }
.funding-card h3 { margin-top: 0.4rem; }
.funding-rate { font-weight: 800; font-size: 1.5rem; letter-spacing: -0.01em; margin-top: 0.5rem; }
.funding-card p { font-family: var(--font-text); font-size: 0.98rem; color: var(--on-variant); margin-top: 0.4rem; }
.funding-card ul { padding-left: 1.1rem; margin-top: 0.6rem; font-family: var(--font-text); font-size: 0.98rem; color: var(--on-variant); }
.funding-card li { margin-top: 0.3rem; }
.funding-card li::marker { color: var(--green); }
.funding-note { font-family: var(--font-text); font-size: 0.92rem; color: var(--on-variant); margin-top: 1.75rem; }

.result-cta { padding: var(--space-m) var(--gutter); text-align: center; }
.result-cta h2 { font-size: clamp(1.5rem, 2.6vw, 2.1rem); }
.result-cta p { font-family: var(--font-text); color: var(--on-variant); margin: 0.9rem auto 0; max-width: 52ch; }
.result-cta .actions { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; margin-top: 1.75rem; }

/* Ratgeber-Liste: die Thumbnails sind Hochformate (3:4) mit Text im Bild
   und stammen aus dem alten Design → KOMPLETT zeigen statt Querformat-Crop.
   Schmale feste Bildspalte im nativen Verhaeltnis, die Zeile waechst mit. */
.s-index-hoch a { grid-template-columns: minmax(0, 1fr) 8.5rem; }
.s-index-hoch img { width: 8.5rem; height: auto; object-fit: unset; }
@media (max-width: 700px) {
  .s-index-hoch a { grid-template-columns: minmax(0, 1fr); }
  .s-index-hoch img { width: min(60%, 13rem); height: auto; }
}

/* ---- Ratgeber-Suche (ratgeber/index, Fuzzy-Filter in ratgeber-suche.js) ---- */
.rg-suche { max-width: 82rem; margin: 0 auto var(--space-s); }
.rg-suche label { display: block; font-weight: 650; font-size: 0.95rem; margin-bottom: 0.5rem; }
.rg-suche input {
  width: min(100%, 30rem); min-height: 44px; padding: 0.6rem 0.75rem;
  font: inherit; color: var(--on-bg);
  background: var(--surface-1); border: 1px solid var(--hairline); border-radius: 0;
}
.rg-suche input::placeholder { color: var(--muted); }
.rg-suche-status { margin-top: 0.5rem; font-size: 0.9rem; color: var(--muted); min-height: 1.3em; }
.rg-leer { font-family: var(--font-text); color: var(--on-variant); padding-block: 1.5rem; }
.s-index li[hidden] { display: none; }

/* ---- Foerder-Zeilen (Optik des "Passende Foerderungen"-Ergebnisses im
   Energie-Check, redaktionell wiederverwendet) ---- */
.fz-grid {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(1.75rem, 3vw, 3rem);
  margin-top: 2rem;
}
.fz-karte { border-top: 3px solid var(--on-bg); padding-top: 1.1rem; }
.fz-tag { color: var(--green); font-weight: 700; font-size: 0.88rem; }
.fz-karte h3 { margin-top: 0.4rem; }
.fz-rate { font-weight: 800; font-size: clamp(1.5rem, 2vw, 2rem); letter-spacing: -0.01em; margin-top: 0.5rem; }
.fz-karte p { font-family: var(--font-text); font-size: 1rem; line-height: 1.6; color: var(--on-variant); margin-top: 0.6rem; }
.fz-karte a { color: var(--green); }
@media (max-width: 860px) { .fz-grid { grid-template-columns: minmax(0, 1fr); } }

/* ---- Kompakte Fakten-Zeilen im Inset-Flaechenband (T5) ---- */
.t5-zeilen { margin-top: 1.75rem; }
.t5-zeilen > div {
  border-top: 1px solid var(--hairline);
  padding: 1.1rem 0;
  font-family: var(--font-text); font-size: 1.0625rem; line-height: 1.6;
  color: var(--on-variant); max-width: 72ch;
}
.t5-zeilen > div:last-child { border-bottom: 1px solid var(--hairline); }
.t5-zeilen strong { font-family: var(--font-ui); font-weight: 650; color: var(--on-bg); }

/* ---- Foto-Mosaik 2x2 (sbp "Ueber uns": Alltagsfotos, schmale Fugen, keine Captions) ---- */
.foto-mosaik {
  width: min(100% - 2 * var(--sx-einzug), var(--sx-mkcap));
  margin: var(--space-l) auto 0;
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
.foto-mosaik img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
@media (max-width: 700px) { .foto-mosaik { width: auto; margin-inline: var(--gutter); gap: 6px; } }

/* ---- Scroll-Hinweis + Kantenschatten (von main.js gesetzt, nur wenn
   ein Bereich real seitlich scrollbar ist) ---- */
.scroll-hinweis {
  font-size: 0.85rem; color: var(--muted);
  margin: 0 0 0.5rem;
}
@media (prefers-reduced-motion: no-preference) {
  .scroll-hinweis { transition: opacity 400ms ease-out; }
}
.scroll-hinweis.gesehen { opacity: 0; }
/* Fade-Kante als Scroll-Signal: main.js setzt scroll-links/-rechts je
   nachdem, in welche Richtung noch gescrollt werden kann. Die Maske wirkt
   auch ueber opaken Inhalten (Fotos im Strip), anders als Hintergrund-
   Schatten. --fade = Breite der Ausblendung. */
.ist-scrollbar { --fade: 56px; }
.ist-scrollbar.scroll-rechts {
  -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - var(--fade)), transparent);
  mask-image: linear-gradient(90deg, #000 calc(100% - var(--fade)), transparent);
}
.ist-scrollbar.scroll-links {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 var(--fade));
  mask-image: linear-gradient(90deg, transparent, #000 var(--fade));
}
.ist-scrollbar.scroll-links.scroll-rechts {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 var(--fade), #000 calc(100% - var(--fade)), transparent);
  mask-image: linear-gradient(90deg, transparent, #000 var(--fade), #000 calc(100% - var(--fade)), transparent);
}

/* ---------- Utility ---------- */
.visually-hidden {
  position: absolute; width: 1px; height: 1px; margin: -1px;
  clip-path: inset(50%); overflow: hidden; white-space: nowrap;
}
