/* faden-shared.css · Hülle v1.0 „Der Faden" (S1, 24.09.2026)
   ─────────────────────────────────────────────────────────────────────────────
   Neu geschnitten nach E3: nur Token-Namen aus Design-System v3 (02_Build/_ds/coachbob-v3/tokens, Kopie der
   zentralen Fassung im 2nd Brain, siehe 00_SSOT/Design-System/LINKS.md),
   kein Alias-Layer, keine konzept-shared.css, keine global-custom-css.css. Zuordnung der alten
   Namen: 01_Regeln/16_TOKEN-MAPPING.md.
   Gilt sitewide (E19): Rahmen (Kopf, Menü, Fußzeile, Anhang) für jede WordPress-Seite, dazu alle
   Bausteine der Faden-Seiten. Seiten bringen kein CSS mit.
   Abstände: 4-px-Raster (E18). Geometrie des Fadens (Linie, Nummernkreis) ist keine Abstandsfrage.
   Breakpoints: genau 861, 1048, 1240 (Methode R-B). Neue Bausteine stehen VOR dem Desktop-Block. */


/* ══ 1 Regler ════════════════════════════════════════════════════════════════
   Mobiler Rhythmus (--fd-*) und Desktop-Rhythmus (--fdd-*, ab 861px) getrennt,
   damit eine Änderung mobil nie Desktop verschiebt (R-B). */
:root {
  --fd-measure: 34em;   /* Lesemaß für Fließtext, Formular, Rechtstexte (G1) */
  --fd-bar-h: 56px;
  --fd-menu-top: calc(var(--fd-bar-h) + var(--space-2));   /* E121 (29.09.): Oberkante des Mobil-Menüs, faden-shared.js setzt sie beim Öffnen auf die echte Unterkante der Kopfleiste (Adminleiste) */
  --fd-gutter: 20px;                 /* Seitenrand mobil */
  --fd-inset: 48px;                  /* Inhalt beginnt rechts vom Faden (mobil) */
  --fd-rail-x: 20px;                 /* Faden-Linie mobil */
  --fd-space-heading: 20px;          /* Kapitel-Überschrift → erster Inhalt */
  --fd-space-content: 40px;          /* zwischen Bausteinen eines Kapitels */
  --fd-space-chapter-top: 40px;
  --fd-space-chapter-bottom: 40px;
  --fd-hero-pad-top: 44px;
  --fd-hero-space-cta: 28px;         /* Lead → Knöpfe */
  --fd-hero-space-after: 32px;       /* Hero → Trust-Leiste oder Kapitel 01 */
  --fd-trust-space-after: 48px;
  --fd-phone-w: min(280px, calc(100vw - var(--fd-inset) - var(--fd-gutter)));   /* Fix P1 (K1, 28.09.): Handy-Breite mobil, nie breiter als die Spalte */
  --fd-page: 1240px;
  --fd-edge: max(24px, calc((100% - var(--fd-page)) / 2));
  /* Knopf-System (Jan 11.10.2026: „alle gleich groß, inklusive Rahmen“): Höhe nur aus min-height, Polster nur seitlich, Rahmen bei allen Varianten gleich
     (gefüllt: transparent), box-sizing border-box. So sind Ghost, Primär und Blau einer Größe exakt gleich hoch, egal wie dick der Rahmen gerendert wird. */
  --fd-btn-rand: 1.5px;
  --fd-btn-h: 48px;                  /* Standard: Inline-CTAs, Ausprobieren */
  --fd-btn-h-gross: 56px;            /* werbend: Hero, Abschluss, klebend, Menü, Team-Geschichte (R-E) */
  --fd-btn-h-bar: 44px;              /* Kopfleiste */
  --fd-paar-max: calc(30 * var(--type-title-md-size));   /* E53: zwei Knöpfe nebeneinander zusammen so breit wie der Lead (30em in title-md) */
  --fd-paar-knopf: calc((var(--fd-paar-max) - var(--space-4)) / 2);   /* ein Knopf eines Paars ab 861 */
}


/* ══ 2 Grundlagen ════════════════════════════════════════════════════════════ */

/* WordPress-Schutz (W18): das alte Zusatz-CSS setzt body-Innenabstände mit !important
   für den früheren fixen Kadence-Kopf. Der Faden-Kopf klebt (sticky) und braucht sie nicht.
   Wird mit dem Kürzen des Zusatz-CSS in S6 überflüssig. */
body.fd-rahmen { padding-top: 0 !important; padding-bottom: 0 !important; }
html, body { overflow-x: clip; }
html { scrollbar-gutter: stable; }   /* E101, 29.09.: Platz für die Scrollleiste bleibt immer reserviert, damit ein Bottom Sheet (overflow: hidden) die Seitenbreite nicht verschiebt */
body.fd-rahmen { margin: 0; background: var(--surface-page); color: var(--text-primary); font-family: var(--font-sans); -webkit-font-smoothing: antialiased; }
[id] { scroll-margin-top: 72px; }

/* Kadence-Behälter auf Faden-Seiten neutralisieren (volle Breite, ohne Innenabstand) */
.fd-seite .content-container.site-container,
.fd-seite .content-wrap,
.fd-seite .entry-content-wrap { max-width: none; padding: 0; margin: 0; }
.fd-seite .entry-content { margin: 0; }

.fd-page { position: relative; background: var(--surface-page); color: var(--text-primary); font-family: var(--font-sans); }
.fd-page *, .fd-page *::before, .fd-page *::after,
.fd-bar *, .fd-menu *, .fd-footer *, .fd-sheet *, .fd-cta * { box-sizing: border-box; }
.fd-page img { max-width: 100%; }
/* hidden gilt immer, auch gegen display-Regeln der Bausteine (.fd-ch ist ab 861 display: block). FAQ-Navigator E87, 27.09. */
.fd-page [hidden] { display: none; }

/* Skip-Link (liefert Kadence, live wie in der Vorschau): unsichtbar bis zum Fokus */
.skip-link { position: absolute; left: var(--space-4); top: var(--space-2); z-index: 100; padding: var(--space-3) var(--space-4); border-radius: var(--radius-md); background: var(--surface-inverse); color: var(--text-inverse); font-family: var(--font-sans); font-size: var(--type-label-lg-size); font-weight: 600; text-decoration: none; transform: translateY(-200%); }
.skip-link:focus { transform: none; }

/* Typo-Rollen */
.fd-h1 { margin: 0; font-family: var(--font-heading); font-weight: var(--type-display-md-weight); line-height: var(--type-display-xl-lh); letter-spacing: var(--tracking-wide); color: var(--text-primary); text-wrap: pretty; }
.fd-h2 { margin: 0; font-family: var(--font-heading); font-weight: var(--type-title-lg-weight); line-height: var(--type-display-lg-lh); letter-spacing: var(--tracking-wide); color: var(--text-primary); text-wrap: pretty; }
.fd-h3 { margin: var(--fd-space-content) 0 var(--space-2); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-md-size); font-weight: var(--type-title-md-weight); line-height: var(--type-title-md-lh); color: var(--text-primary); text-wrap: pretty; }
.fd-lead { margin: 0; font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); color: var(--text-primary); }
.fd-body { margin: 0; font-size: var(--type-body-md-size); line-height: var(--type-body-md-lh); color: var(--text-primary); }

/* Knöpfe. Werbend (Hero, Abschluss, klebend, Menü) immer 56px (R-E), Kopfleiste kleiner. */
.fd-btn { box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2); min-height: var(--fd-btn-h); padding: 0 var(--space-6); border: var(--fd-btn-rand) solid transparent; border-radius: var(--radius-pill); font-family: var(--font-sans); font-size: var(--type-label-lg-size); font-weight: 700; letter-spacing: var(--tracking-tight); line-height: 1.2; text-decoration: none; white-space: nowrap; cursor: pointer; transition: background var(--duration-base) var(--ease-standard), border-color var(--duration-base) var(--ease-standard), box-shadow var(--duration-base) var(--ease-standard); }
/* Zustände (E78, 27.09.): Schrift auf Orange immer weiß. :focus steht beim Normalzustand, weil Kadence a:focus/button:focus (0,1,1) sonst violett färbt */
.fd-btn--primary, .fd-btn--primary:visited, .fd-btn--primary:focus { background: var(--brand-primary); border-color: transparent; color: var(--text-on-brand); box-shadow: none; }
.fd-btn--primary:hover { background: var(--brand-primary-hover); color: var(--text-on-brand); box-shadow: var(--shadow-md); }
.fd-btn--primary:active { background: var(--brand-active); color: var(--text-on-brand); box-shadow: var(--shadow-pressed); }
.fd-btn--ghost, .fd-btn--ghost:visited, .fd-btn--ghost:focus { background: transparent; border-color: var(--border-default); color: var(--text-primary); }
.fd-btn--ghost:hover { background: var(--surface-fill-soft); border-color: var(--brand-primary); color: var(--text-link); }
.fd-btn--ghost:active { background: var(--surface-marker); border-color: var(--brand-active); color: var(--brand-active); }
.fd-btn svg { width: 18px; height: 18px; flex: 0 0 auto; }
.fd-hero .fd-btn, .fd-final .fd-btn, .fd-cta .fd-btn, .fd-menu__cta .fd-btn { min-height: var(--fd-btn-h-gross); padding: 0 var(--space-8); font-size: var(--type-body-lg-size); }

/* Fokus: ein Ring für alles (T-13), nur per Tastatur. Orange 600 auf Weiß und Sand, Orange 200 auf Espresso (DS E78, 27.09.) */
.fd-bar :focus-visible, .fd-menu :focus-visible, .fd-page :focus-visible, .fd-sheet :focus-visible, .fd-cta :focus-visible,
.fd-top:focus-visible, .skip-link:focus-visible, .cb-consent :focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 3px; }
.fd-band :focus-visible, .fd-footer :focus-visible { outline: 2px solid var(--focus-ring-on-dark); outline-offset: 3px; }

/* Einblenden beim Scrollen. Wirkt nur mit JS (html.fd-js), ohne JS ist alles sichtbar (W11). */
.fd-js .fd-reveal { opacity: 0; transform: translateY(24px); transition: opacity var(--duration-slow) var(--ease-out), transform var(--duration-slow) var(--ease-out); }
.fd-js .fd-reveal.is-visible { opacity: 1; transform: none; }
.fd-js .fd-reveal-d1 { transition-delay: 60ms; }
.fd-js .fd-reveal-d2 { transition-delay: 120ms; }
.fd-js .fd-reveal-d3 { transition-delay: 180ms; }

/* Platzhalter: sichtbar markiert, bis Jan den Text freigibt */
.fd-ph { display: inline-block; max-width: 100%; padding: 2px var(--space-2); border: 1px dashed var(--border-strong); border-radius: var(--radius-pill); font-size: var(--type-label-sm-size); font-weight: 700; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); overflow-wrap: anywhere; }


/* ══ 3 Rahmen · Kopf und Menü ═════════════════════════════════════════════════ */
.fd-bar { position: sticky; top: 0; z-index: 70; display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); min-height: var(--fd-bar-h); padding: var(--space-2) var(--space-3) var(--space-2) var(--fd-gutter); background: var(--surface-page); border-bottom: 1px solid var(--surface-fill); font-family: var(--font-sans); }
.admin-bar .fd-bar { top: 46px; }
.fd-logo { --fd-logo-mark: 28px; display: flex; align-items: center; gap: var(--space-2); min-height: 44px; text-decoration: none; }
.fd-logo__mark { position: relative; z-index: 1; display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: var(--fd-logo-mark); height: var(--fd-logo-mark); border-radius: var(--radius-pill); background: var(--brand-gradient); color: var(--text-on-brand); }
.fd-logo__mark svg { display: block; width: 100%; height: 100%; fill: currentColor; }   /* B aus Jans Logo-Animation, viewBox 200 = Kreis */
.fd-logo__cursor { position: absolute; top: 29%; left: 18%; width: 6%; height: 42%; border-radius: var(--radius-pill); background: currentColor; opacity: 0; }   /* Logo-Animation 09.10.2026, sichtbar nur im Ablauf (Abschnitt 26) */
.fd-logo__feld, .fd-logo__feld > .fd-logo__word { display: block; }   /* Wort bleibt ein Block wie vorher als Flex-Element: gleiche Höhe und Grundlinie */
.fd-logo__word { font-family: var(--font-heading); font-size: var(--type-title-sm-size); font-weight: 500; letter-spacing: var(--tracking-tight); color: var(--text-primary); }
.fd-logo__word b { font-weight: 700; }
.fd-bar__right { display: flex; align-items: center; gap: var(--space-2); }
.fd-btn--bar { min-height: var(--fd-btn-h-bar); padding: 0 var(--space-4); font-size: var(--type-label-md-size); }

.fd-burger { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; width: 44px; height: 44px; padding: 0; border: 0; border-radius: var(--radius-pill); background: transparent; cursor: pointer; }
.fd-burger:focus { background: transparent; box-shadow: none; }
.fd-burger:hover { background: var(--surface-fill-soft); }
.fd-burger:active { background: var(--surface-marker); }
.fd-burger span { display: block; width: 20px; height: 2px; border-radius: var(--radius-pill); background: var(--text-primary); transition: transform var(--duration-base) var(--ease-out), opacity var(--duration-fast) var(--ease-out); }
.fd-burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.fd-burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.fd-burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

/* Menü-Panel. Geschlossen: visibility hidden, damit nichts per Tab erreichbar ist (T-06).
   Offen: höchstens Fensterhöhe minus Kopf, darin scrollbar (T-14, Querformat). */
.fd-scrim { position: fixed; inset: 0; z-index: 65; background: var(--surface-overlay); opacity: 0; visibility: hidden; transition: opacity var(--duration-base) var(--ease-out), visibility 0s linear var(--duration-base); }
.fd-scrim.is-open { opacity: 1; visibility: visible; transition: opacity var(--duration-base) var(--ease-out); }
.fd-menu { position: fixed; left: var(--space-3); right: var(--space-3); top: var(--fd-menu-top); z-index: 68; max-width: 496px; max-height: calc(100dvh - var(--fd-menu-top) - var(--space-3)); margin: 0 auto; padding: var(--space-2); overflow-y: auto; overscroll-behavior: contain; background: var(--surface-card); border: 1px solid var(--border-default); border-radius: var(--radius-xl); box-shadow: var(--shadow-lg); opacity: 0; visibility: hidden; transform: translateY(-8px) scale(.98); transform-origin: top right; transition: opacity var(--duration-fast) var(--ease-out), transform var(--duration-base) var(--ease-out), visibility 0s linear var(--duration-base); }
.fd-menu.is-open { opacity: 1; visibility: visible; transform: none; transition: opacity var(--duration-fast) var(--ease-out), transform var(--duration-base) var(--ease-out); }
.fd-menu ul, .fd-nav ul, .fd-footer__nav ul { list-style: none; margin: 0; padding: 0; }
.fd-menu a:not(.fd-btn) { display: flex; align-items: center; min-height: 52px; padding: 0 var(--space-4); border-radius: var(--radius-lg); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 500; color: var(--text-primary); text-decoration: none; overflow-wrap: break-word; }
.fd-menu a:not(.fd-btn):not([aria-current]):hover { background: var(--surface-fill-soft); color: var(--text-link); }
.fd-menu a:not(.fd-btn):not([aria-current]):active { background: var(--surface-marker); color: var(--brand-active); }
.fd-menu .current-menu-item > a, .fd-menu a[aria-current="page"] { background: var(--state-selected); color: var(--text-selected); }
.fd-menu__cta { margin-top: var(--space-2); padding: var(--space-1); }
.fd-menu__cta .fd-btn { width: 100%; }
/* Ohne JS: das Menü steht offen unter dem Kopf, der Burger entfällt (W11, Robustheitsziel T-17) */
html:not(.fd-js) .fd-burger, html:not(.fd-js) .fd-scrim { display: none; }
html:not(.fd-js) .fd-menu { position: static; max-width: none; max-height: none; margin: 0; border-radius: 0; border-width: 0 0 1px; box-shadow: none; opacity: 1; visibility: visible; transform: none; }

.fd-nav { display: none; }


/* ══ 4 Seitenwurzel und Hero ══════════════════════════════════════════════════ */
.fd-hero { padding: var(--fd-hero-pad-top) var(--fd-gutter) var(--fd-hero-space-after); }
.fd-hero .fd-h1 { font-size: clamp(var(--type-display-md-size), 9.4vw, var(--type-display-lg-size)); margin-bottom: var(--space-3); }
.fd-hero .fd-lead { font-size: var(--type-body-lg-size); }
/* E5: data-cta="1" ein Knopf, "2" zwei Knöpfe. Mobil gestapelt in voller Breite. */
.fd-hero__ctas { display: flex; flex-direction: column; gap: var(--space-3); margin-top: var(--fd-hero-space-cta); }
.fd-hero__ctas .fd-btn { width: 100%; }
/* Seitenbild (E164, Moritz-Feedback 08.10.2026, ersetzt den Verlaufskreis .fd-heroph; E173 präzisiert): je Seite ein Bild rechts vom Text,
   unter 1048 gestapelt über dem Titel. Zwei Varianten, Tausch ohne Layoutänderung:
   - Bild (E173, Standard auf Start, Produkt, Preise, Team, FAQ, Kontakt): BOB als ganze Figur, freigestellt (transparent), ein Bild für alle Breiten:
     <div class="fd-herobild fd-herobild--bild" aria-hidden="true"><img src="{{assets}}/images/hero-bob/<seite>.webp" alt="" width="…" height="…"
       loading="eager" fetchpriority="high" decoding="async"></div>
     Nichts wird abgeschnitten (object-fit: contain), die Figur steht unten auf der Fläche. Die Fläche hat eine feste Höhe (kein Layoutsprung,
     width/height am img liefern zusätzlich das Seitenverhältnis): mobil 240 hoch, 861 bis 1047 280, Figur links auf der Textkante;
     ab 1048 rechte Hero-Spalte, 360 bis 480 hoch (32vw), Figur mittig unten. Funktioniert mit Hochformat (Zielbild) und Querformat (Platzhalter).
     Ausrichtung über --fd-herobild-pos. Keine Fläche, kein Rahmen: BOB steht frei auf der Seite.
   - Symbol (Rückfall für Seiten ohne Bild): <div class="fd-herobild" aria-hidden="true"><span class="fd-herobild__kreis"><svg Lucide …></span></div>
     Kreis Sand, Linie Espresso (E124). Größe über --fd-herobild-kreis (mobil 128, 861 bis 1047 160, ab 1048 so hoch wie --fd-herobild-h).
   Textseiten (data-seite="text") tragen kein Seitenbild (Vertrag §2a). */
:root { --fd-herobild-kreis: 128px; --fd-herobild-h: 248px; --fd-herobild-figur: 260px; --fd-herobild-pos: 0% 100%; }
.fd-page:not([data-seite="text"]) > .fd-hero { display: flex; flex-direction: column; }
.fd-page:not([data-seite="text"]) > .fd-hero > .fd-hero__text { min-width: 0; }
.fd-herobild { order: -1; display: flex; align-items: center; justify-content: flex-start; margin: 0 0 var(--space-6); }
.fd-herobild__kreis { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: var(--fd-herobild-kreis); height: var(--fd-herobild-kreis); border-radius: var(--radius-pill); background: var(--surface-fill); color: var(--text-primary); }
.fd-herobild__kreis > svg { width: 44%; height: 44%; stroke-width: 1.5px; }
.fd-herobild--bild { width: 100%; height: var(--fd-herobild-figur); }
.fd-herobild--bild > img { display: block; width: 100%; height: 100%; max-width: none; object-fit: contain; object-position: var(--fd-herobild-pos); }
/* Moritz-Feedback 08.10. (Call Min. 66 bis 72), Jan 08.10.: unter 1048 nur ein Ausschnitt (Standard, ab 1048 überschrieben), so breit wie der Text, feste Höhe, oben ausgerichtet (Kopf bis etwa Hüfte), mittig. Ab 1048 ganze Figur (contain, Abschnitt 20) */
.fd-page:not([data-seite="text"]) > .fd-hero .fd-herobild--bild { overflow: hidden; justify-content: center; align-items: flex-start; }
.fd-page:not([data-seite="text"]) > .fd-hero .fd-herobild--bild > img { flex: 0 0 auto; width: auto; height: calc(var(--fd-herobild-figur) * 2.2); max-width: none; object-fit: initial; }   /* Bildhöhe = 2,2 × Ausschnitthöhe: Kopf bis etwa Hüfte, auf jeder Breite gleich */



/* ══ 5 Trust-Leiste (Modul, E6) ═══════════════════════════════════════════════
   Hero trägt den Abstand nach unten selbst, deshalb bricht nichts, wenn die Leiste fehlt.
   Mobil auf derselben Kante wie der Hero (Fix P2, K9, 28.09.): --fd-gutter statt randlos, vorher zentrierte sich die
   Karte im Karussell auf dem ganzen Bildschirm statt auf der Hero-Achse (S80 Achse 2 von 3). Trust liegt vor dem Faden
   (außerhalb von .fd-story, kein Platz für Nummernkreis nötig), deshalb --fd-gutter (20 px, wie Hero) statt --fd-inset
   (48 px, wie Kapiteltext). Ab 861 eigene Regel. */
.fd-trust { position: relative; padding: 0 var(--fd-gutter) var(--fd-trust-space-after) var(--fd-gutter); }
/* Die Kontaktwege stehen seit Runde 4 (E85) nicht mehr im Trust-Modul, sondern als .fd-wege im Kapitel unter der Sand-Insel (Abschnitt 7) */


/* ══ 6 Der Faden ═════════════════════════════════════════════════════════════ */
.fd-story { position: relative; }
.fd-rail { position: absolute; left: var(--fd-rail-x); top: 0; bottom: 0; width: 2px; background: var(--border-default); z-index: 2; }
.fd-rail__fill { position: absolute; left: 0; top: 0; width: 100%; height: 0; background: var(--brand-primary); }
.fd-ch { position: relative; padding: var(--fd-space-chapter-top) var(--fd-gutter) var(--fd-space-chapter-bottom) var(--fd-inset); }
.fd-ch::before { content: ''; position: absolute; left: var(--fd-inset); right: var(--fd-gutter); top: 0; height: 1px; background: var(--surface-fill); }
.fd-ch__side { display: contents; }
.fd-ch__num { position: absolute; left: 7px; top: calc(var(--fd-space-chapter-top) - 2px); z-index: 3; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: var(--radius-pill); background: var(--surface-page); border: 1.5px solid var(--border-default); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-sm-size); font-weight: 700; color: var(--text-secondary); transition: background var(--duration-base) var(--ease-standard), border-color var(--duration-base) var(--ease-standard), color var(--duration-base) var(--ease-standard); }
.fd-ch.is-active .fd-ch__num { background: var(--brand-primary); border-color: var(--brand-primary); color: var(--text-on-brand); }
.fd-ch[data-track="mental"].is-active .fd-ch__num { background: var(--surface-mental-strong); border-color: var(--surface-mental-strong); }   /* Mental 600: weiße Ziffer 7,2:1 statt 4,2:1 (E78) */
.fd-ch[data-track="both"].is-active .fd-ch__num { background: var(--brand-gradient); border-color: transparent; }
.fd-ch__name { display: none; }
.fd-tracker { display: block; margin-bottom: var(--space-3); font-size: var(--type-label-md-size); font-weight: 600; color: var(--text-secondary); }
.fd-ch > .fd-h2 { font-size: var(--type-title-lg-size); margin-bottom: var(--fd-space-heading); }


/* ══ 7 Bausteine ═════════════════════════════════════════════════════════════
   Katalog laut Seitenvertrag §4. Jeder Baustein bringt seinen mobilen Abstand nach oben mit,
   Desktop regelt der Rhythmus-Block (R-B). */

/* Pointe und Streichliste */
.fd-strikes { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-4); margin: var(--fd-space-content) 0 0; padding: var(--space-5); background: var(--surface-fill); border-radius: var(--radius-lg); }
.fd-strikes__head { align-self: stretch; margin: 0; padding-bottom: var(--space-4); border-bottom: 1px solid var(--border-default); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 600; line-height: var(--type-title-sm-lh); color: var(--text-primary); text-wrap: pretty; }
.fd-strikerow { display: flex; flex-direction: column; gap: var(--space-1); }
.fd-strike { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 500; color: var(--text-primary); text-decoration: line-through 1px var(--text-secondary); overflow-wrap: break-word; }
/* Handschrift-Notiz. Caveat ist keine DS-Schrift und wird nicht geladen, bis Jan entscheidet (offen) */
.fd-note { position: relative; padding-left: var(--space-4); font-family: 'Caveat', 'Segoe Print', 'Bradley Hand', cursive; font-weight: 600; font-size: var(--type-title-md-size); line-height: 1.15; color: var(--brand-primary-hover); transform: rotate(-1.2deg); transform-origin: left center; overflow-wrap: break-word; }
.fd-note::before { content: ''; position: absolute; left: 0; top: .45em; width: 6px; height: 6px; border-radius: var(--radius-pill); background: var(--brand-primary); }
.fd-punch { margin: 0; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-lg-size); font-weight: 600; line-height: var(--type-title-lg-lh); color: var(--text-primary); overflow-wrap: break-word; }
/* K6, 28.09.: die markierte Wortgruppe bricht beim Umbruch nicht mehr mitten durch (vorher "eine" und "App." auf zwei
   Zeilen, wirkte zerrissen). white-space: nowrap hält sie als Einheit, sie rutscht als Ganzes in die nächste Zeile.
   box-decoration-break: clone bleibt als Absicherung für eine künftig längere, mehrzeilige Markierung. Gilt website-weit. */
.fd-punch em { font-style: normal; padding: 0 .22em; border-radius: var(--radius-sm); background: var(--state-selected); color: var(--text-selected); white-space: nowrap; box-decoration-break: clone; -webkit-box-decoration-break: clone; }
.fd-punch--big { margin-top: var(--fd-space-content); font-size: var(--type-display-md-size); line-height: var(--type-display-md-lh); }


/* ══ Handy-Baustein .fd-phone (E75 bis E77, Rahmen E84/E90, 27.09., Agent D und F) ═════════════════════════════════
   Ein Baustein für vier Inhalte: Chat (.fd-chat), App-Screen (.fd-app), Sperrbildschirm (.fd-lock), Screenshot (img.fd-phone__shot).
   Rahmen = Vektor-Nachbau von Bild3 (frontales Handy), liegt als Bild ÜBER dem Bildschirm (::after), Bildschirm-Loch transparent,
   die Dynamic Island gehört zum Rahmen. Geometrie logisch: Rahmen 394 x 784, Bildschirm 360 x 758 bei x 17 / y 11, Radius 51,
   Island 104,5 x 29,4 bei y 21,2. Lagen in Prozent des Rahmens: mobil fließend ohne zoom, ab 861 Breite 394px * k und zoom k auf
   .fd-phone__ui (S65, S71). Kein Rand, kein Ring am Bildschirm, den Rand bildet der Rahmen (S64). isolation hält den z-index
   des Rahmens im Handy (S72). Ganze Geräte sind nur als dieser Baustein erlaubt (Vertrag §2, K9-Ausnahme). */
.fd-phone { --fd-phone-k: calc(var(--fd-phone-w) / 394px); position: relative; isolation: isolate; display: block; width: var(--fd-phone-w); height: auto; aspect-ratio: 394 / 784; margin: 0; flex: none; }
.fd-phone::after { content: ''; position: absolute; inset: 0; z-index: 2; background: url('assets/images/geraete/handy-frontal.svg') center / 100% 100% no-repeat; pointer-events: none; }
.fd-phone__screen { position: absolute; left: 4.3147%; top: 1.4031%; width: 91.3706%; height: 96.6837%; overflow: hidden; border-radius: 14.1667% / 6.7282%; background: var(--surface-fill-soft); color: var(--text-primary); font-family: var(--font-sans); text-align: left; }
/* Fix P1 (K1, 28.09.): mobil wie ab 861 (S71) fest 360 x 758 mit zoom, Maßstab über --fd-phone-k statt Umbruch. Deckt K2 (ganzer Chat-Verlauf sichtbar) gleich mit ab, weil zoom nichts umbricht */
.fd-phone__ui { display: flex; flex-direction: column; width: 360px; height: 758px; zoom: var(--fd-phone-k); }
/* Statusleiste links und rechts der Island, Höhe 48 von 360 (wächst mobil mit der Breite), Mitte = Mitte der Island */
.fd-phone__status { display: grid; grid-template-columns: 1fr 31.1% 1fr; align-items: center; flex: none; width: 100%; aspect-ratio: 360 / 48; padding: 0 var(--space-3); font-size: var(--type-label-sm-size); font-weight: 700; color: var(--text-primary); }
.fd-phone__status > span { display: flex; align-items: center; justify-content: center; gap: var(--space-1); }
.fd-phone__status > span:last-child { grid-column: 3; }
.fd-phone__status svg { display: block; height: 12px; width: auto; }
/* Hinweis unter dem Handy (Bibliothek): außerhalb des Rahmens, Platz per margin */
.fd-phone:has(> .fd-phone__hint) { margin-bottom: var(--space-10); }
.fd-phone__hint { position: absolute; top: 100%; left: 0; right: 0; display: flex; align-items: center; justify-content: center; gap: var(--space-2); margin: var(--space-3) 0 0; font-size: var(--type-label-md-size); font-weight: 600; color: var(--text-secondary); }
.fd-phone__hint svg { width: 16px; height: 16px; color: var(--brand-primary); }
/* Screenshot im Handy (E90, Produkt 03): füllt den Bereich unter der Statusleiste */
.fd-phone__shot { display: block; flex: 1 1 auto; min-height: 0; width: 100%; object-fit: cover; object-position: top; }
/* Mehrere Handys (Motivation): mobil ein Handy im vorhandenen Karussell-Baustein (Fix P1, K3, 28.09.: nur Markup und Verhalten von
   .fd-carousel wiederverwendet, keine .fd-carousel-Regel geändert), ab 861 eine Reihe (E77) */
.fd-phones { display: grid; grid-template-columns: minmax(0, 1fr); justify-items: center; gap: var(--space-8); width: 100%; margin: 0; }
/* Wrapper auf 100% der Spalte: .fd-ch__medien ist mobil justify-items: center (M1), ohne feste Breite würde die Spur ihre
   eigene Padding-Prozentrechnung gegen ihre eigene Inhaltsgröße statt gegen die Spalte lösen (zirkulär, S-Fund Fix P1, K3) */
.fd-ch__medien > .fd-carousel:has(.fd-phones) { width: 100%; }
/* Track = .fd-carousel__track UND .fd-phones zugleich: mobil zeigt das Handy mittig auf der Spaltenachse (M1), die Spur bleibt
   dabei die eigene Breite des Handys, nicht die volle Kartenbreite wie bei .fd-tcard. Eigene Regel, keine .fd-carousel-Regel */
.fd-carousel__track.fd-phones { width: 100%; gap: var(--space-12); padding-left: calc(50% - var(--fd-phone-w) / 2); padding-right: calc(50% - var(--fd-phone-w) / 2); }   /* gap > Randpolster: das nächste Handy lugt nicht über die Inhaltskante (Mobil-Runde M3, wie die übrigen Karussells ohne Anschnitt) */
.fd-phones > .fd-phone { scroll-snap-align: center; }
/* Handy-Paar in Zweier-Mustern (Produkt 03, E90): mobil untereinander, ab 861 als Bühne nebeneinander mittig unter dem Text (text-2medien, E92).
   Fix P5 (28.09.): descendant statt Direktkind, seit die zwei Handys mobil im Karussell-Baustein stecken (.fd-carousel > .fd-carousel__track.fd-phones) */
.fd-ch:is([data-muster="text-2medien"], [data-muster="text-2medien-seite"]) .fd-ch__medien:has(.fd-phone) { grid-template-columns: minmax(0, 1fr); justify-items: center; gap: var(--space-8); }

/* Chat im Handy (E54-Mechanik, E75-Optik). Alle Verläufe stehen als .fd-chat__run übereinander im selben Rasterfeld der Bühne,
   sichtbar ist nur .is-on, das Handy springt beim Personen-Wechsel nie. Wechsel über [data-persona], Ablauf in faden-shared.js.
   Ist ein Verlauf höher als die Bühne, läuft er wie in der App nach unten mit. Violett ist hier App-Farbe (Nutzer-Blase, Senden). */
.fd-chat { position: relative; display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; margin: 0; overflow: hidden; background: var(--surface-card); }
.fd-chat__bar { position: relative; display: flex; align-items: center; justify-content: center; flex: none; padding: var(--space-2) var(--space-5) var(--space-3); background: var(--surface-card); border-bottom: 1px solid var(--border-subtle); }
.fd-chat__who { font-size: var(--type-label-lg-size); font-weight: 700; color: var(--text-primary); }
.fd-chat__x { position: absolute; right: var(--space-4); top: 50%; width: 16px; height: 16px; color: var(--text-secondary); transform: translateY(-50%); }
.fd-chat__stage { position: relative; display: grid; align-content: start; flex: 1 1 auto; min-height: 0; padding: var(--space-3) var(--space-4); overflow-y: auto; scrollbar-width: none; }
.fd-chat__stage::-webkit-scrollbar { display: none; }
.fd-chat__run { grid-area: 1 / 1; display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
.fd-chat__run:not(.is-on) { visibility: hidden; }
.fd-bub { display: block; max-width: 84%; margin: 0; padding: var(--space-3) var(--space-4); border-radius: var(--radius-lg); font-size: var(--type-body-md-size); line-height: var(--type-body-sm-lh); overflow-wrap: break-word; }   /* Fix P1 (K1, 28.09.): mobil größer, weil zoom sonst unter 10 px effektiv fällt, ab 861 zurück auf md */
.fd-bub--bob { align-self: flex-start; background: var(--surface-fill); color: var(--text-primary); border-top-left-radius: var(--radius-sm); }
.fd-bub--me { align-self: flex-end; background: var(--surface-mental-strong); color: var(--text-on-brand); border-bottom-right-radius: var(--radius-sm); }
.fd-bub--rec { background: var(--brand-primary); color: var(--text-on-brand); }
.fd-bub__label { display: block; margin-bottom: var(--space-1); font-size: var(--type-label-sm-size); font-weight: 700; letter-spacing: var(--tracking-label); text-transform: uppercase; }
.fd-chat__profil { align-self: flex-start; margin: var(--space-1) 0; }
.fd-chat__profil > b { display: block; margin-bottom: var(--space-2); font-size: var(--type-label-sm-size); font-weight: 700; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); }
.fd-chat__chips { display: flex; flex-wrap: wrap; gap: var(--space-1); }
.fd-chat__chips > span { padding: var(--space-1) var(--space-3); border-radius: var(--radius-pill); background: var(--surface-physical-tint); font-size: var(--type-label-md-size); font-weight: 700; color: var(--text-primary); }
.fd-js .fd-chat__run > .is-wait { visibility: hidden; }
.fd-js .fd-chat__run > .is-new { animation: fdIn var(--duration-slow) var(--ease-out) both; }
@keyframes fdIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.fd-chat__typing { position: absolute; left: var(--space-4); display: flex; align-items: center; gap: var(--space-1); padding: var(--space-3) var(--space-4); background: var(--surface-mental-tint); border-radius: var(--radius-lg); border-top-left-radius: var(--radius-sm); animation: fdIn var(--duration-base) var(--ease-out) both; }
.fd-chat__typing i { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--accent-mental); animation: fdDot calc(var(--duration-slow) * 3) var(--ease-standard) infinite; }
.fd-chat__typing i:nth-child(2) { animation-delay: calc(var(--duration-slow) / 2); }
.fd-chat__typing i:nth-child(3) { animation-delay: var(--duration-slow); }
@keyframes fdDot { 0%, 60%, 100% { opacity: .35; transform: none; } 30% { opacity: 1; transform: translateY(-4px); } }
.fd-chat__composer { display: flex; align-items: center; gap: var(--space-2); flex: none; padding: var(--space-3) var(--space-4) var(--space-2); background: var(--surface-card); border-top: 1px solid var(--border-subtle); }
.fd-chat__input { flex: 1 1 auto; padding: var(--space-2) var(--space-3); border-radius: var(--radius-pill); background: var(--surface-fill); font-size: var(--type-label-sm-size); color: var(--text-secondary); white-space: nowrap; overflow: hidden; }   /* mobil kleiner: der Bildschirm im Rahmen ist bei 320 nur 230 px breit (E90), ab 861 wieder md */
.fd-chat__send { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 36px; height: 36px; border-radius: var(--radius-pill); background: var(--surface-mental-strong); color: var(--text-on-brand); }
.fd-chat__send svg { width: 16px; height: 16px; }
.fd-chat__hinweis { flex: none; margin: 0; padding: 0 var(--space-4) var(--space-3); background: var(--surface-card); font-size: var(--type-label-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); text-align: center; }
/* Ergebnis-Kacheln wie live: Bildfeld links (Übungsbild oder Symbol auf Tönung), Titel in Versalien, Kategorie darunter.
   Hover-Rand und Fokusring vorläufig Orange 600, endgültige Zustände setzt Agent C (Punkt 3) */
.fd-tiles { display: flex; flex-direction: column; gap: var(--space-2); }
.fd-tile { display: flex; align-items: center; gap: var(--space-3); width: 100%; min-height: 64px; padding: 0 var(--space-3) 0 0; overflow: hidden; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--surface-card); font-family: var(--font-sans); text-align: left; cursor: pointer; transition: border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out); }
.fd-tile:focus { background: var(--surface-card); border-color: var(--border-subtle); color: var(--text-primary); box-shadow: none; }
.fd-tile:hover { background: var(--surface-fill-soft); border-color: var(--brand-primary); box-shadow: var(--shadow-sm); }
.fd-tile:hover > svg { color: var(--text-link); }
.fd-tile:active { background: var(--surface-marker); border-color: var(--brand-active); box-shadow: none; }
.fd-tile:active > svg { color: var(--brand-active); }
.fd-tile:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }   /* 2 px Abstand, weil das Handy seitlich beschneidet */
.fd-tile__img { position: relative; display: flex; align-items: center; justify-content: center; flex: none; align-self: stretch; width: 64px; background: var(--surface-physical-tint); color: var(--icon-physical); }
.fd-tile[data-track="mental"] .fd-tile__img { background: var(--surface-mental-tint); color: var(--icon-mental); }
.fd-tile__img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 20%; }
.fd-tile__img svg { width: 24px; height: 24px; }
.fd-tile__text { display: flex; flex-direction: column; gap: 2px; min-width: 0; padding: var(--space-2) 0; }
.fd-tile__name { font-size: var(--type-label-lg-size); font-weight: 800; line-height: var(--type-title-sm-lh); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--text-primary); overflow-wrap: break-word; }   /* Fix P1 (K1, 28.09.): mobil größer wegen zoom, ab 861 zurück auf sm */
.fd-tile__cat { font-size: var(--type-label-sm-size); font-weight: 600; color: var(--text-physical); overflow-wrap: break-word; }
.fd-tile[data-track="mental"] .fd-tile__cat { color: var(--text-mental); }
.fd-tile > svg { flex: 0 0 auto; width: 16px; height: 16px; margin-left: auto; color: var(--text-secondary); }

/* App-Screen im Handy (Bibliothek E76, Serie und Zeit E77). Kopf und Leisten sind Bild (aria-hidden), nur .fd-app__scroll mit
   tabindex ist Inhalt und scrollt nativ (Tastatur, Mausrad gibt am Ende an die Seite weiter, kein JS). --fest: ohne Scroll */
.fd-app { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; background: var(--surface-fill-soft); }
.fd-app__kopf { flex: none; padding: var(--space-2) var(--space-4) var(--space-3); font-family: var(--font-heading); font-size: var(--type-title-lg-size); font-weight: 600; letter-spacing: var(--tracking-wide); color: var(--text-primary); }
.fd-app__kopf--mitte { display: flex; align-items: center; padding: var(--space-2) var(--space-3); font-family: var(--font-sans); font-size: var(--type-label-lg-size); font-weight: 800; letter-spacing: 0; }
.fd-app__kopf--mitte span { flex: 1 1 auto; margin-right: var(--space-6); text-align: center; }
.fd-app__kopf--mitte svg { width: 24px; height: 24px; }
.fd-app__tabs { display: flex; flex: none; padding: 0 var(--space-2); border-bottom: 1px solid var(--border-subtle); }
.fd-app__tabs > span { position: relative; flex: 1 1 0; padding: var(--space-2) var(--space-1) var(--space-3); font-size: var(--type-label-sm-size); font-weight: 700; color: var(--text-secondary); text-align: center; white-space: nowrap; }
.fd-app__tabs > .is-on { color: var(--brand-primary); }
.fd-app__tabs > .is-on::after { content: ''; position: absolute; left: 12%; right: 12%; bottom: -1px; height: 2px; border-radius: var(--radius-pill); background: var(--brand-primary); }
.fd-app__suche { display: flex; align-items: center; gap: var(--space-2); flex: none; padding: var(--space-4) var(--space-4) var(--space-3); }
.fd-app__suche > span:first-child { display: flex; align-items: center; gap: var(--space-2); flex: 1 1 auto; height: 40px; padding: 0 var(--space-3); border-radius: var(--radius-md); background: var(--surface-fill); font-size: var(--type-label-md-size); color: var(--text-secondary); }
.fd-app__suche > span:last-child { display: flex; align-items: center; justify-content: center; flex: none; width: 40px; height: 40px; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--surface-card); color: var(--text-secondary); }
.fd-app__suche svg { width: 16px; height: 16px; }
.fd-app__pillen { display: flex; gap: var(--space-2); flex: none; padding: 0 var(--space-4) var(--space-3); }
.fd-app__pillen > span { padding: var(--space-2) var(--space-4); border: 1px solid var(--border-subtle); border-radius: var(--radius-pill); font-size: var(--type-label-sm-size); font-weight: 700; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); }
.fd-app__scroll { position: relative; flex: 1 1 auto; min-height: 0; padding: var(--space-1) var(--space-4) var(--space-4); overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
.fd-app__scroll:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
.fd-app__scroll--fest { overflow: hidden; }
.fd-app__liste { display: flex; flex-direction: column; gap: var(--space-3); margin: 0; padding: 0; }
.fd-app__karte { display: flex; min-height: 80px; overflow: hidden; border-radius: var(--radius-md); background: var(--surface-card); box-shadow: var(--shadow-sm); }
.fd-app__bild { position: relative; display: flex; align-items: center; justify-content: center; flex: none; width: 80px; background: var(--surface-physical-tint); color: var(--icon-physical); }
.fd-app__karte[data-track="mental"] .fd-app__bild { background: var(--surface-mental-tint); color: var(--icon-mental); }
.fd-app__bild img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 20%; }
.fd-app__bild svg { width: 28px; height: 28px; }
.fd-app__badge { position: absolute; left: 50%; bottom: var(--space-2); z-index: 1; padding: 2px var(--space-1); border-radius: var(--radius-pill); background: var(--surface-physical); color: var(--text-on-brand); font-size: var(--type-label-sm-size); font-weight: 800; letter-spacing: 0; line-height: 1.2; text-transform: uppercase; white-space: nowrap; transform: translateX(-50%); }
.fd-app__karte[data-track="mental"] .fd-app__badge { background: var(--surface-mental); }
.fd-app__info { display: flex; flex-direction: column; gap: var(--space-1); flex: 1 1 auto; min-width: 0; padding: var(--space-3); }
.fd-app__titel { font-size: var(--type-label-lg-size); font-weight: 800; line-height: var(--type-title-sm-lh); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--text-primary); hyphens: auto; overflow-wrap: anywhere; }   /* Fix P1 (K1, 28.09.): mobil größer wegen zoom, ab 861 zurück auf sm */
.fd-app__fort { margin-top: auto; font-size: var(--type-label-sm-size); color: var(--text-secondary); }
.fd-app__balken { display: block; width: 100%; height: 4px; margin: 0; overflow: hidden; border: 0; border-radius: var(--radius-pill); background: var(--surface-marker); color: var(--brand-primary); appearance: none; }
.fd-app__balken::-webkit-progress-bar { background: var(--surface-marker); border-radius: var(--radius-pill); }
.fd-app__balken::-webkit-progress-value { background: var(--brand-primary); border-radius: var(--radius-pill); }
.fd-app__balken::-moz-progress-bar { background: var(--brand-primary); border-radius: var(--radius-pill); }
.fd-app__balken--mental::-webkit-progress-value { background: var(--surface-mental); }
.fd-app__balken--mental::-moz-progress-bar { background: var(--surface-mental); }
.fd-app__kurs .fd-app__balken { height: 8px; }
.fd-app__tabbar { display: flex; align-items: center; justify-content: space-around; flex: none; height: 64px; padding: 0 var(--space-4) var(--space-2); background: var(--surface-card); border-top: 1px solid var(--border-subtle); color: var(--text-muted); }
.fd-app__tabbar svg { width: 22px; height: 22px; }
.fd-app__tabbar > .is-on { color: var(--brand-primary); }
.fd-app__tabbar > b { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; border: 2px solid var(--brand-primary); border-radius: var(--radius-pill); color: var(--text-primary); }
.fd-app__tabbar > b svg { width: 16px; height: 20px; fill: currentColor; }
.fd-app__karte--block { display: block; min-height: 0; padding: var(--space-4); }
.fd-app__stapel { display: flex; flex-direction: column; gap: var(--space-3); }
.fd-app__stapel > p { margin: 0; }
.fd-app__eyebrow { display: flex; align-items: baseline; justify-content: space-between; font-size: var(--type-label-sm-size); font-weight: 800; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); }
.fd-app__eyebrow > span + span { letter-spacing: 0; text-transform: none; color: var(--text-physical); }
.fd-app__zahl { font-family: var(--font-display); font-size: var(--type-display-xl-size); font-weight: 500; line-height: 1; letter-spacing: var(--tracking-wide); color: var(--text-primary); }
.fd-app__zahl small { margin-left: var(--space-1); font-size: var(--type-title-md-size); }
.fd-app__muted { font-size: var(--type-label-sm-size); font-weight: 600; line-height: var(--type-body-sm-lh); color: var(--text-secondary); }
.fd-app__stark { font-size: var(--type-label-lg-size); font-weight: 800; color: var(--text-primary); }
.fd-app__garten { position: relative; height: 200px; overflow: hidden; margin: calc(var(--space-4) * -1) calc(var(--space-4) * -1) var(--space-3); border-radius: var(--radius-md) var(--radius-md) 0 0; }
.fd-app__garten > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center bottom; }
.fd-app__garten > img + img { inset: auto var(--space-4) var(--space-3) auto; width: auto; height: 128px; object-fit: contain; }
.fd-app__zeile { display: flex; align-items: flex-end; gap: var(--space-3); }
.fd-app__tage { display: flex; justify-content: space-between; margin-top: var(--space-3); }
.fd-app__tage > span { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: var(--radius-pill); background: var(--surface-fill); font-size: var(--type-label-sm-size); font-weight: 800; color: var(--text-secondary); }
.fd-app__tage > .is-done { background: var(--brand-primary); color: var(--text-on-brand); }
.fd-app__tage > .is-heute { background: transparent; border: 2px dashed var(--border-physical); color: var(--text-physical); }
.fd-app__tage svg { width: 16px; height: 16px; }
.fd-app__ring { display: flex; align-items: center; gap: var(--space-4); }
.fd-app__ring svg { flex: none; width: 96px; height: 96px; transform: rotate(-90deg); }
.fd-app__ring circle { fill: none; stroke-width: 10; }
.fd-app__ring circle:first-child { stroke: var(--surface-physical-tint); }
.fd-app__ring circle + circle { stroke: var(--brand-primary); stroke-linecap: round; }
.fd-app__kurs + .fd-app__kurs { margin-top: var(--space-3); padding-top: var(--space-3); border-top: 1px solid var(--border-subtle); }
.fd-app__kurs > div { display: flex; justify-content: space-between; margin-bottom: var(--space-2); font-size: var(--type-label-md-size); font-weight: 800; }
.fd-app__kurs > div > span:last-child { flex: none; color: var(--text-secondary); }
.fd-app__kurs > div { gap: var(--space-2); }
.fd-app__ziel { display: flex; align-items: center; gap: var(--space-3); margin-top: var(--space-4); padding-top: var(--space-3); border-top: 1px solid var(--border-subtle); font-size: var(--type-label-md-size); font-weight: 700; }
.fd-app__ziel > span:first-child { flex: 1 1 auto; }
.fd-app__ziel > i { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border: 1px solid var(--border-physical); border-radius: var(--radius-pill); color: var(--text-physical); font-style: normal; }
.fd-app__ziel svg { width: 14px; height: 14px; }
.fd-app__reihe { display: flex; align-items: center; gap: var(--space-3); }
.fd-app__icon { display: flex; align-items: center; justify-content: center; flex: none; width: 40px; height: 40px; border-radius: var(--radius-md); background: var(--surface-mental-tint); color: var(--icon-mental); }
.fd-app__icon svg { width: 20px; height: 20px; }

/* Sperrbildschirm mit Erinnerung (E77) */
.fd-phone__ui:has(> .fd-lock) { background: linear-gradient(170deg, var(--surface-physical-tint), var(--surface-mental-tint)); }
.fd-lock { display: flex; flex-direction: column; align-items: center; flex: 1 1 auto; min-height: 0; padding: var(--space-6) var(--space-3) var(--space-3); }
.fd-lock__datum { font-size: var(--type-label-lg-size); font-weight: 600; color: var(--text-primary); }
.fd-lock__zeit { font-family: var(--font-display); font-size: calc(var(--type-display-xl-size) * 2); font-weight: 500; line-height: 1; letter-spacing: var(--tracking-wide); color: var(--text-primary); }
.fd-lock__push { display: flex; align-items: flex-start; gap: var(--space-3); width: 100%; margin-top: var(--space-8); padding: var(--space-3); border-radius: var(--radius-lg); background: var(--surface-card); box-shadow: var(--shadow-md); }
.fd-lock__push:first-of-type { margin-top: auto; }   /* Fix P1 (K3, 28.09.): mobil teilt sich die Leere ober- und unterhalb der Pushes, statt als eine leere Hälfte unter ihnen zu stehen (Fuß hat schon margin-top: auto), ab 861 zurück auf den festen Abstand */
.fd-lock__push + .fd-lock__push { margin-top: var(--space-2); }
.fd-lock__icon { display: flex; align-items: center; justify-content: center; flex: none; width: 36px; height: 36px; border-radius: var(--radius-sm); background: var(--brand-gradient); color: var(--text-on-brand); }
.fd-lock__icon svg { width: 14px; height: 18px; fill: currentColor; }
.fd-lock__text { flex: 1 1 auto; min-width: 0; }
.fd-lock__meta { display: flex; justify-content: space-between; font-size: var(--type-label-sm-size); font-weight: 700; color: var(--text-secondary); }
.fd-lock__text p { margin: 2px 0 0; font-size: var(--type-label-md-size); font-weight: 600; line-height: var(--type-body-sm-lh); color: var(--text-primary); }
.fd-lock__fuss { display: flex; align-items: center; justify-content: space-between; width: 100%; margin-top: auto; padding: 0 var(--space-6); }
.fd-lock__fuss > span { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--radius-pill); background: var(--surface-card); color: var(--text-primary); }
.fd-lock__fuss svg { width: 18px; height: 18px; }

/* Personen-Wechsler (mobil Pillen-Leiste) */
.fd-personas { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-1); margin: var(--fd-space-content) 0 var(--space-3); padding: var(--space-1); background: var(--surface-fill); border-radius: var(--radius-pill); }
.fd-persona { display: flex; align-items: center; justify-content: center; min-height: 44px; padding: var(--space-1) var(--space-2); border: 0; border-radius: var(--radius-pill); background: transparent; font-family: var(--font-sans); font-size: var(--type-label-md-size); font-weight: 600; line-height: 1.15; color: var(--text-secondary); cursor: pointer; transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out); }
.fd-persona:focus { background: transparent; color: var(--text-secondary); box-shadow: none; }
.fd-persona:hover { background: transparent; color: var(--text-link); box-shadow: none; }
.fd-persona:active { background: var(--surface-marker); color: var(--brand-active); }
.fd-persona[aria-pressed="true"] { background: var(--state-selected); color: var(--text-selected); }
.fd-persona__av { display: none; }
.fd-persona__txt { display: flex; flex-direction: column; align-items: center; gap: 2px; min-width: 0; }
.fd-persona__txt b { font-weight: 600; }
.fd-persona__txt small { font-size: var(--type-label-sm-size); font-weight: 600; opacity: .8; }

/* Ausschnitt eines Screenshots (K9: nie Vollbild-Gerät) */
.fd-crop { position: relative; overflow: hidden; margin: 0; border-radius: var(--radius-lg); background: var(--surface-fill); }
.fd-crop img { display: block; width: 100%; height: auto; }
.fd-crop--lift { box-shadow: var(--shadow-lg); }
/* Bildformat: hoch = Handy-Ausschnitt, immer 4:5 von oben (K9: nie das ganze Gerät); quer = natürliches Seitenverhältnis */
.fd-crop[data-format="hoch"] { aspect-ratio: 4 / 5; }
.fd-crop[data-format="hoch"] img { height: 100%; object-fit: cover; object-position: top; }
.fd-crop__caption { margin: var(--space-2) 0 0; font-size: var(--type-label-sm-size); font-weight: 600; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); }
.fd-crop--lift > .fd-crop__caption { padding: 0 var(--space-3) var(--space-2); }   /* Unterschrift in der Karte, nicht an der Rundung (S6a) */
/* Bild mit Unterschrift darunter (G4 M2, 26.09.): Rundung und 4:5 wandern aufs Bild, die Zeile steht frei darunter, optional Track-Punkt */
.fd-crop:has(> .fd-crop__caption):not(.fd-crop--lift) { overflow: visible; border-radius: 0; background: none; }
.fd-crop:has(> .fd-crop__caption):not(.fd-crop--lift) > img { border-radius: var(--radius-lg); background: var(--surface-fill); }
.fd-crop[data-format="hoch"]:has(> .fd-crop__caption) { aspect-ratio: auto; }
.fd-crop[data-format="hoch"]:has(> .fd-crop__caption) > img { aspect-ratio: 4 / 5; height: auto; object-fit: cover; }
.fd-crop__caption[data-track]::before { content: ''; display: inline-block; width: 8px; height: 8px; margin-right: var(--space-2); border-radius: var(--radius-pill); background: var(--accent-physical); vertical-align: middle; }
.fd-crop__caption[data-track="mental"]::before { background: var(--text-mental); }
/* W-11 (28.09., Taste-Audit): Vor- und Nachname nie getrennt umbrechen, für jede Personen-Unterschrift (Bild-Caption, Kachel, Fließtext) */
.fd-name-nowrap { white-space: nowrap; }
.fd-crop .fd-ph--corner { position: absolute; left: var(--space-3); top: var(--space-3); background: var(--surface-card); }
.fd-scrollhint { position: absolute; left: 0; right: 0; bottom: 0; z-index: 3; display: flex; justify-content: center; padding: 52px 0 var(--space-4); pointer-events: none; background: linear-gradient(to top, var(--surface-page) 42%, transparent); transition: opacity var(--duration-slow) var(--ease-out); }
.fd-scrollhint > span { display: inline-flex; align-items: center; gap: var(--space-2); min-height: 40px; padding: 0 var(--space-4); border-radius: var(--radius-pill); background: var(--surface-card); box-shadow: var(--shadow-md); font-size: var(--type-label-md-size); font-weight: 600; color: var(--text-primary); }
.fd-scrollhint svg { width: 16px; height: 16px; color: var(--brand-primary-hover); }
.is-scrolled .fd-scrollhint { opacity: 0; }


/* FAQ-Modul über die volle Inhaltsbreite, Antworttext im Lesemaß (E71, 27.09.). Listen-Bausteine .fd-moments, .fd-limits, .fd-vis am 26.09. entfernt (Kachelsystem, G2) */
.fd-faq__a { max-width: var(--fd-measure); }

/* Kleine Zeilen */
.fd-subnote { display: block; margin: var(--space-3) 0 0; font-size: var(--type-label-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); text-wrap: pretty; }
.fd-demodata { display: inline-block; margin: var(--space-2) 0 0; padding: var(--space-1) var(--space-3); border-radius: var(--radius-pill); background: var(--surface-fill); font-size: var(--type-label-sm-size); font-weight: 600; color: var(--text-secondary); }
.fd-who { display: flex; align-items: center; gap: var(--space-3); margin: var(--fd-space-content) 0 var(--space-3); }
.fd-who__av { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 36px; height: 36px; border-radius: var(--radius-pill); background: var(--surface-fill); color: var(--text-secondary); }
.fd-who__av svg { width: 20px; height: 20px; }
.fd-who__txt { display: flex; flex-direction: column; gap: 2px; }
.fd-who__txt b { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-lg-size); font-weight: 600; color: var(--text-primary); }
.fd-who__txt small { font-size: var(--type-label-sm-size); color: var(--text-secondary); }
.fd-link { display: inline-flex; align-items: center; gap: var(--space-2); min-height: 44px; margin-top: var(--fd-space-content); font-size: var(--type-label-lg-size); font-weight: 600; color: var(--text-link); text-decoration: none; }
.fd-link:visited, .fd-link:focus { color: var(--text-link); text-decoration: none; }
.fd-link:hover, .fd-link:active { color: var(--text-link-hover); text-decoration: underline; text-underline-offset: 3px; }
.fd-link svg { width: 16px; height: 16px; }
.fd-link + .fd-link { margin-left: var(--space-4); }

/* „Öffnet ein Bottom Sheet": ein Muster, mobil wie Desktop */
.fd-info { display: inline-flex; align-items: center; gap: var(--space-4); margin: var(--fd-space-content) 0 0; padding: 0; border: 0; background: transparent; font-family: var(--font-sans); font-size: var(--type-label-lg-size); font-weight: 600; line-height: var(--type-title-sm-lh); color: var(--text-primary); text-align: left; cursor: pointer; }
.fd-info__box { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 44px; height: 44px; border: 1.5px solid transparent; border-radius: var(--radius-md); background: var(--surface-fill); color: var(--text-primary);   /* E124: Sand-Fläche, Linie Espresso (vorher Orange-Rand und Orange-Symbol), Hover bleibt Orange nach E78 */ transition: background var(--duration-fast) var(--ease-out), transform var(--duration-base) var(--ease-out); }
.fd-info__box svg { width: 20px; height: 20px; }
.fd-info__label { min-width: 0; }
.fd-info:focus { background: transparent; color: var(--text-primary); box-shadow: none; }
.fd-info:hover { background: transparent; color: var(--text-link); box-shadow: none; }
.fd-info:active { background: transparent; color: var(--brand-active); box-shadow: none; }
.fd-info:hover .fd-info__box { background: var(--brand-primary); color: var(--text-on-brand); transform: translateY(-1px); }
.fd-info:active .fd-info__box { background: var(--brand-active); border-color: var(--brand-active); color: var(--text-on-brand); transform: none; }

/* Karten und Karussell. Mobil wischen und Pfeile, ab 861px statische Reihe. Keine Auto-Rotation (E8).
   Karussell-Standard mobil (Fix P2, K4/K9/M1/M2, 28.09.): EIN Baustein für jedes Karussell auf jeder Seite (Trust, BOB-Setup,
   Grenzen- und Schritt-Karten, Alltag), unabhängig von data-car-desktop und vom Standort (auch außerhalb von .fd-story, Trust-Leiste).
   Die Spur beginnt bündig an der Inhaltskante wie Text, Hero und Link-Karte (.fd-tcard--link in .fd-wege), kein Vorabstand mehr
   (vorher calc(50% - 138px), zentrierte auf dem ganzen Bildschirm statt auf der Spaltenachse, S80). Die Karte füllt darunter die
   ganze Spaltenbreite (Regel bei .fd-tcard unten): dieselbe Kante und dieselbe Breite wie die Link-Karte im selben Kapitel (M2),
   und zugleich mittig auf der Spaltenachse, weil sie sie ganz ausfüllt (Stilbild §5.4). Anschnitt der nächsten Karte einheitlich
   null statt uneinheitlich 20 bis 58 px je Karussell. Pfeile und Punkte zentrieren sich automatisch mit, weil sie im selben
   Container stehen (K4: „Pfeile und Punkte gleich positioniert"). */
.fd-carousel { position: relative; }
.fd-carousel__track { display: flex; gap: var(--space-3); margin: 0; padding: var(--space-2) 0 var(--space-4); list-style: none; overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding-inline: 0; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.fd-carousel .fd-tcard { flex-basis: 100%; }
.fd-carousel__track::-webkit-scrollbar { display: none; }
.fd-carousel__nav { display: flex; align-items: center; justify-content: center; gap: var(--space-3); }
.fd-carousel__arrow { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0; border: 1px solid var(--border-default); border-radius: var(--radius-pill); background: var(--surface-card); color: var(--text-primary); cursor: pointer; }
.fd-carousel__arrow:focus { background: var(--surface-card); border-color: var(--border-default); color: var(--text-primary); box-shadow: none; }
.fd-carousel__arrow:hover { background: var(--brand-primary); border-color: var(--brand-primary); color: var(--text-on-brand); }
.fd-carousel__arrow:active { background: var(--brand-active); border-color: var(--brand-active); color: var(--text-on-brand); }
.fd-carousel__arrow svg { width: 20px; height: 20px; }
.fd-carousel__dots { display: flex; gap: var(--space-2); }
.fd-carousel__dots i { display: block; width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--surface-marker); transition: background var(--duration-base) var(--ease-standard), width var(--duration-base) var(--ease-standard); }
.fd-carousel__dots i.is-on { width: 20px; background: var(--brand-primary); }
/* Pfeil am Anfang oder Ende der Spur (E72, 27.09.): bleibt fokussierbar, zeigt aber, dass es nicht weitergeht. Bleibt ruhig, auch bei Hover und Druck (E78) */
.fd-carousel__arrow[aria-disabled="true"], .fd-carousel__arrow[aria-disabled="true"]:hover, .fd-carousel__arrow[aria-disabled="true"]:active { background: var(--surface-card); border-color: var(--border-default); color: var(--text-disabled); cursor: default; }
.fd-carousel--steps .fd-carousel__track { padding-top: 0; }
.fd-tcard { flex: 0 0 276px; scroll-snap-align: center; display: flex; align-items: flex-start; gap: var(--space-4); padding: var(--space-5); background: var(--surface-card); border: 1px solid var(--border-default); border-radius: var(--radius-lg); box-shadow: var(--shadow-md); }
.fd-tcard__media { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 56px; height: 56px; overflow: hidden; border-radius: var(--radius-pill); background: var(--surface-fill); }
.fd-tcard__media img { width: 44px; height: 44px; object-fit: contain; }
.fd-tcard__media--photo img { width: 100%; height: 100%; object-fit: cover; }
.fd-tcard__media > svg { width: 28px; height: 28px; color: var(--text-primary); }   /* E124: Linie Espresso auch beim Personen-Platzhalter */   /* Personen-Platzhalter (Lucide user), bis ein echtes Foto da ist (S2) */
/* Kachel mit Lucide-Symbol (G2, 26.09.): E114 (29.09., Agent A) Symbole überall gleich: Sand-Fläche, Linie Espresso, nie Orange-Fläche
   (vorher Kreis in Orange-Tint mit Orange-Linie). Der Kreis ist jetzt wie der Personen-Platzhalter Sand 100, das Symbol Espresso (--text-primary) statt Grau */
.fd-tcard__media--icon { background: var(--surface-fill); }
.fd-tcard__media--icon > svg { width: 24px; height: 24px; color: var(--text-primary); }
/* Kacheln in der Textspalte neben Bild oder Chat (G2 Weg B): mobil von Inhaltskante bis Gutter, Karte mittig auf der Spaltenachse (E69, E92) */
.fd-ch__text > .fd-carousel { margin-left: 0; margin-right: 0; }   /* M2 (E92): endet an der Inhaltskante wie alle Karussells im Faden */
/* Klickbare Karte (G5, 26.09.): die ganze Karte öffnet ein Bottom Sheet (K9), li bleibt die Karte, der Knopf füllt sie */
.fd-tcard--tap { padding: 0; transition: background var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.fd-tcard--tap:hover { background: var(--surface-fill-soft); border-color: var(--brand-primary); }
.fd-tcard--tap:hover .fd-tcard__tap { color: var(--text-link); }
.fd-tcard--tap:active { background: var(--surface-marker); border-color: var(--brand-active); }
.fd-tcard--tap:active .fd-tcard__tap { color: var(--brand-active); }
.fd-tcard__btn:hover, .fd-tcard__btn:focus, .fd-tcard__btn:active { background: transparent; color: inherit; box-shadow: none; }
.fd-tcard__btn { display: flex; align-items: flex-start; align-self: stretch; gap: var(--space-4); width: 100%; padding: var(--space-5); border: 0; border-radius: inherit; background: transparent; font-family: var(--font-sans); color: inherit; text-align: left; cursor: pointer; }
/* N33-Regel (.fd-tcard--tap:has(> .fd-tcard__btn[data-n33]) pointer-events none) am 11.10.2026 entfernt: Jan hebt N33 auf, alle Personen-Sheets zurück, kein data-n33 mehr in pages/ */
.fd-tcard__tap { display: inline-flex; flex: 0 0 auto; margin-left: auto; color: var(--text-secondary); }
.fd-tcard__tap svg { width: 20px; height: 20px; overflow: visible; }
.fd-sheet__seal--person img { border-radius: var(--radius-pill); object-fit: cover; }
.fd-tcard__body { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0; }
.fd-tcard b { display: block; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 600; line-height: var(--type-title-sm-lh); color: var(--text-primary); overflow-wrap: break-word; }
.fd-tcard p { margin: 0; font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-primary); overflow-wrap: break-word; }
.fd-tcard__meta { font-size: var(--type-label-sm-size); font-weight: 600; color: var(--text-secondary); }
.fd-tcard__quote { font-style: italic; font-weight: 500; }
.fd-tcard--slim { align-items: center; padding: var(--space-4) var(--space-5); }
.fd-tcard--slim b .fd-tcard__meta { display: block; margin-top: var(--space-1); font-family: var(--font-sans); }
.fd-tcard--step { flex-direction: column; align-items: flex-start; gap: var(--space-3); }
/* Link-Karte (Runde 4, E85, E91, seit 29.09. E95): die ganze Karte ist ein Link (a im Titel, ::after deckt die Karte), Lucide arrow-up-right
   rechts als Link-Zeichen. Zustände nach E78: Hover Rand Orange, Titel und Pfeil in Linkfarbe, Gedrückt Fläche weich und Rand Orange dunkel.
   Neuer Tab jetzt auch für mailto (E95, ändert E91 E-2); tel bleibt ohne target, siehe .fd-tcard--tel unten. Nutzung: Kontaktwege, Store-Links */
.fd-tcard--link { position: relative; box-shadow: var(--shadow-sm); transition: border-color var(--duration-fast) var(--ease-out), background var(--duration-fast) var(--ease-out); }
.fd-tcard--link:hover { border-color: var(--brand-primary); }
.fd-tcard--link:hover a, .fd-tcard--link:hover .fd-tcard__pfeil { color: var(--text-link); }
.fd-tcard--link:active { background: var(--surface-fill-soft); border-color: var(--brand-active); }
.fd-tcard--link:active a, .fd-tcard--link:active .fd-tcard__pfeil { color: var(--brand-active); }
.fd-tcard--link a, .fd-tcard--link a:focus { color: var(--text-primary); text-decoration: none; overflow-wrap: anywhere; }   /* :focus beim Normalzustand (H-12, S68) */
.fd-tcard--link a::after { content: ''; position: absolute; inset: 0; border-radius: inherit; }
.fd-tcard__pfeil { display: inline-flex; flex: 0 0 auto; margin-left: auto; color: var(--text-secondary); transition: color var(--duration-fast) var(--ease-out); }
.fd-tcard__pfeil svg { width: 20px; height: 20px; }
/* Kontaktwege (E85): Liste von Link-Karten, mobil untereinander, ab 861 eine Reihe. Steht in .fd-ch__nach unter einer Sand-Insel */
.fd-wege { display: grid; gap: var(--space-3); margin: var(--space-4) 0 0; padding: 0; list-style: none; }
.fd-step__n { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 24px; height: 24px; border-radius: var(--radius-pill); background: var(--surface-fill); color: var(--text-primary); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-sm-size); font-weight: 700; }   /* E124: Ziffernkreis Sand, Ziffer Espresso (vorher Orange-Tint) */
/* Telefon-Zeile (E123, 29.09., Agent A, ersetzt den Knopf „Kopieren“ aus E95): Link-Karte wie E-Mail und Muster-Anmeldung. Mobil und mit Touch ruft der Tipp an
   (Pfeil wie bei den anderen Wegen). Ab 861 mit feinem Zeiger steht an Stelle des Pfeils das Symbol „copy“, ein Klick auf die Zeile kopiert die Nummer,
   danach 2 s „check“. Die Bedingung steht wortgleich in faden-shared.js (Modul Telefon kopieren). Rückmeldung für Screenreader in .fd-tel__status. */
.fd-tel__kopie { display: none; }
.fd-tel__kopie .fd-tel__ok { display: none; }
@media (min-width: 861px) and (pointer: fine) {
  .fd-tcard--tel .fd-tel__pfeil { display: none; }
  .fd-tcard--tel .fd-tel__kopie { display: inline-flex; }
  .fd-tcard--tel a.fd-tel__ruf { cursor: pointer; }
  .fd-tcard--tel.is-kopiert .fd-tel__kopie .fd-tel__cp { display: none; }
  .fd-tcard--tel.is-kopiert .fd-tel__kopie .fd-tel__ok { display: block; }
  .fd-tcard--tel.is-kopiert .fd-tel__kopie { color: var(--text-primary); }
}
.fd-tel__status { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
/* Automatische Link-Regel (W-05, E95, 29.09.): Symbol für alle Links, die faden-shared.js mit dem Pfeil versieht (Rechtstexte, FAQ-Fließtext, LinkedIn) */
.fd-extlink-icon { display: inline-block; width: 0.85em; height: 0.85em; margin-left: 0.2em; vertical-align: -0.05em; }

/* ══ 7a Mobil: kompakte Kachel-Liste statt Karussell (Fix P4, K4/K9/K-Befunde, 28.09.) ═══════
   Nach dem Karussell-Standard (oben) sah mobil fast jedes Kapitel gleich aus: eine große Karte,
   darunter Pfeile und Punkte, auf Preise und Produkt fünf- bis sechsmal hintereinander (Jans
   Stilbild §2 „mehrere Kapitel im selben Muster"). Zwei Kachel-Arten stehen deshalb unter 861
   immer als kompakte Liste, nicht als Karussell:
   - Schritt- und Symbol-Kacheln ohne Foto mit höchstens vier Einträgen: .fd-carousel--steps
     (Preise 01/02/03, Produkt „BOB findet…" und Sicherheit, BOB Setup auf Start/Produkt/Preise,
     Kontakt „Ablauf"). Ab fünf Einträgen bleibt es ein Karussell (Ausnahme über :has, deckt
     Produkt 01 „Alltag" mit ab, das ohnehin kein --steps trägt).
   - Personenkarten, unabhängig von der Anzahl (Koordinator-Ergänzung 28.09.): Team (Gründer,
     Team, Netzwerk) und Kontakt „Gründer". Erkennbar an .fd-tcard__body im Karussell, das nur
     Personenkarten nutzen (Link-Karten stehen in .fd-wege, nie im Karussell). Die Trust-Leiste
     (data-car-desktop, Foto-Karten) bleibt Karussell, sie hat keine .fd-tcard__body-Struktur.
   Beide Listen: Symbol, Nummer oder Avatar klein links, Titel und Satz rechts, dünne Trennlinie
   statt Karten-Rand, keine Pfeile und Punkte (Stilbild §5.25 bis 27). faden-shared.js hängt das
   Karussell-Verhalten für dieselben Wrapper unter 861 aus, per Bedingung, nicht Seiten-ID (H-07).
   Ausdrücklich nur unter 861: eigener max-width-Block, damit keine Spezifität ab 861 mitspielt
   (die Desktop-Regeln in Abschnitt 13 bleiben unverändert führend). */
@media (max-width: 860.98px) {
  .fd-carousel--steps:not(:has(.fd-carousel__track > :nth-child(5))) .fd-carousel__track,
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-carousel__track {
    display: flex; flex-direction: column; gap: 0; padding: 0; overflow: visible; scroll-snap-type: none;
  }
  .fd-carousel--steps:not(:has(.fd-carousel__track > :nth-child(5))) .fd-carousel__nav,
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-carousel__nav {
    display: none;
  }
  .fd-carousel--steps:not(:has(.fd-carousel__track > :nth-child(5))) .fd-tcard,
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-tcard {
    flex-basis: auto; align-items: center; gap: var(--space-3); padding: var(--space-3) 0; margin: 0;
    background: transparent; border: 0; border-bottom: 1px solid var(--border-default); border-radius: 0; box-shadow: none;
    scroll-snap-align: none; min-height: 0 !important;
  }
  .fd-carousel--steps:not(:has(.fd-carousel__track > :nth-child(5))) .fd-carousel__track > :last-child,
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-carousel__track > :last-child {
    border-bottom: 0;
  }
  /* Symbol/Nummer/Avatar klein links, etwa 40 px (statt 56 px Kartenkreis) */
  .fd-carousel--steps .fd-tcard__media,
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-tcard__media {
    width: 40px; height: 40px;
  }
  .fd-carousel--steps .fd-tcard__media img,
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-tcard__media img {
    width: 32px; height: 32px;
  }
  .fd-carousel--steps .fd-tcard__media > svg,
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-tcard__media > svg {
    width: 20px; height: 20px;
  }
  /* Schritt-Kacheln (E62/K11): Titel und Beweissatz stehen rechts der Nummer/des Symbols, nicht mehr darunter.
     Grid statt Flex, weil <b> und <p> als eigenständige Kinder ohne Textwrapper vorkommen (Vertrag §4). Feste
     40-px-Spalte auch ohne Symbol (Preise 03 „Vertrag"): Zeilen bleiben untereinander ausgerichtet */
  .fd-carousel--steps .fd-tcard--step {
    display: grid; grid-template-columns: 40px minmax(0, 1fr); column-gap: var(--space-3); row-gap: 0; align-items: start;
  }
  .fd-carousel--steps .fd-tcard--step > .fd-tcard__media { grid-column: 1; grid-row: 1 / span 2; align-self: start; }   /* Symbol auf Höhe des Titels (Koordinator M3) */
  .fd-carousel--steps .fd-tcard--step > .fd-step__n { grid-column: 1; grid-row: 1 / span 2; align-self: start; justify-self: center; }
  .fd-carousel--steps .fd-tcard--step > b { grid-column: 2; }
  .fd-carousel--steps .fd-tcard--step > p { grid-column: 2; }
  /* Personenkarten: Zeile bleibt Flex (Vorgabe der Karte, Name+Rolle stecken schon in .fd-tcard__body), nur
     die Innenabstände von Karte und Knopf auf Zeilenmaß bringen (Klick-Symbol bleibt rechts wie heute) */
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-tcard--tap { padding: var(--space-3) 0; }   /* Zeilenluft, Rolle stößt nicht an die Trennlinie (Koordinator M3) */
  .fd-carousel:has(.fd-carousel__track .fd-tcard__body) .fd-tcard__btn { padding: 0; gap: var(--space-3); }
}

/* ══ 7c Fix P6 (28.09., Tablet 600 bis 860, M3-1 bis M3-2) ═══════════════════
   Karussell-Peek: die Spur füllte bisher immer die ganze Spalte, ihre Padding-Formel (50% minus halbe
   Handy-Breite) rechnete also gegen die Spaltenbreite, nicht gegen die Handy-Breite (Zirkular-Hinweis
   Abschnitt 5). Bei 320 bis 402 ist die Spalte kaum breiter als das Handy, der Anschnitt fiel nicht auf.
   Ab 600 wird die Spalte deutlich breiter als das auf 280 px gedeckelte Handy, die Padding-Formel lässt
   das nächste Handy an der Inhaltskante hereinlugen (R-D). Jetzt bekommt der Wrapper selbst die
   Handy-Breite als Höchstmaß und zentriert sich auf der Spaltenachse (M1): die Padding-Formel der Spur
   löst sich dabei auf 0 auf, die Spur zeigt nur noch das eine Handy, das nächste liegt vollständig hinter
   der Wrapper-Kante, kein Anschnitt mehr. Nur unter 861, die Handy-Reihe ab 861 (Abschnitt 13) bleibt
   unberührt.
   Größeres Handy auf Tablet geprüft (Auftrag: 300 bis 320 statt 280 px, keine klebende H2-Platte vor 861,
   S66 gilt erst dort, Höhe wäre also unkritisch): ohne eigenen 600er-Breakpoint nicht sauber lösbar, R-B
   erlaubt nur 861/1048/1240 (Lint H-04), und der Deckel in --fd-phone-w (Zeile 30) wirkt durchgehend von
   320 bis 860. Ihn pauschal auf 320 anzuheben würde auch 375 und 402 vergrößern (307 statt 280 px) und
   damit die abgenommene Handy-Größe dort verschieben (E84/E90, S71). Bleibt bei 280 px, keine Einzellösung
   für eine einzelne Breite ohne Beleg-Breakpoint. */
@media (max-width: 860.98px) {
  .fd-ch__medien > .fd-carousel:has(.fd-phones) { max-width: var(--fd-phone-w); margin-inline: auto; }
}

/* Lesemaß (M3-2): das 34-em-Cap aus R-A galt bisher nur ab 861. Bei 320 bis 402 unterschreitet die Spalte
   das Maß ohnehin, ab 600 nicht mehr, Fließtext in „wide"-Kapiteln lief fast über die volle Spaltenbreite.
   Gilt nur für Absätze (.fd-body), nicht für Kacheln, Handys oder Formulare, dieselbe Klasse wie ab 861. */
@media (max-width: 860.98px) {
  .fd-ch .fd-body { max-width: var(--fd-measure); }
}


/* ══ 7b Kapitel-Muster (Jan, 24.09.) ═════════════════════════════════════════
   Jedes Kapitel ist gleich gebaut: Kopf (Seite, Tracker, H2), dann .fd-ch__body mit .fd-ch__text
   (Textbausteine) und .fd-ch__medien (Medien: Bild = figure.fd-crop[data-format], Widget, Karten).
   data-muster am Kapitel wählt die Anordnung, die Seite wählt nur Texte und Bilder.
     text                nur Text                                   0 Medien
     text-medium         Text links, Medium rechts (ab 1048)        1 Medium
     medium-text         Medium links, Text rechts (ab 1048)        1 Medium
     text-medium-unten   kurzer Text, Medium darunter               1 Medium
     text-breit          Text, Medium über die ganze Breite         1 Medium
     text-2medien        Text, zwei Medien nebeneinander darunter   2 Medien
     text-2medien-seite  Text links, zwei Medien rechts (ab 1048)   2 Medien
     text-galerie        Text, drei oder vier Medien als Reihe      3 bis 4 Medien
     text-karten         Text, Karten-Reihe (Schritte, Nachweise)   1 Karussell
   Mobil gilt für alle: Text zuerst, Medien darunter (Lesereihenfolge = DOM-Reihenfolge).
   Optional data-flaeche="sand" legt den Körper in eine Sand-Insel, data-split="stack" stapelt
   ein Zweispalten-Muster auch ab 1048 (A2). */
.fd-ch__body { display: block; }
.fd-ch__text > :first-child { margin-top: 0; }
.fd-ch__text > * + * { margin-top: var(--fd-space-content); }
.fd-ch__text > .fd-body + .fd-body { margin-top: var(--space-4); }
.fd-ch__text > .fd-h3 { margin-bottom: 0; }
.fd-ch__text > .fd-h3 + * { margin-top: var(--space-2); }
.fd-ch__text > .fd-subnote, .fd-ch__text > .fd-demodata { margin-top: var(--space-3); }
.fd-ch__medien { display: grid; gap: var(--space-5); justify-items: center; margin-top: var(--fd-space-content); }   /* M1 (E92, 27.09.): Medien mittig auf der Achse der Inhaltsspalte */
.fd-ch__body > .fd-ch__medien:first-child { margin-top: 0; }
.fd-ch__medien > * { margin: 0; min-width: 0; }
.fd-ch__medien > .fd-crop { width: 100%; }
.fd-ch[data-muster="text-2medien"] .fd-ch__medien,
.fd-ch[data-muster="text-2medien-seite"] .fd-ch__medien,
.fd-ch[data-muster="text-galerie"] .fd-ch__medien { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-3); }
/* E69 (27.09.): der Faden ist die Grenze. Mobil beginnt alles an der Inhaltskante --fd-inset, Karussells schneiden dort ab, nicht am Bildschirmrand */
.fd-ch[data-muster="text-breit"] .fd-ch__medien { margin-left: 0; margin-right: 0; position: relative; z-index: 4; }
.fd-ch[data-muster="text-karten"] .fd-ch__medien { display: block; justify-items: stretch; margin-left: 0; margin-right: 0; }
/* M2 (E92, 27.09.), abgelöst durch den Karussell-Standard in Abschnitt 7 (Fix P2, 28.09.): die dort geltende Regel
   (.fd-carousel .fd-tcard, .fd-carousel__track) deckt jedes Karussell in jedem Kapitel gleich ab, keine eigene Regel hier nötig. */
.fd-ch[data-flaeche="sand"] .fd-ch__body { padding: var(--space-8) var(--space-5); background: var(--surface-fill); border-radius: var(--radius-xl); }
/* Fix P6 (28.09., M3-4, Kontakt-Formular auf Tablet): „Fläche folgt dem Inhalt" galt bisher nur ab 861 (Abschnitt 13).
   Unter 861 blieb die Sand-Insel immer spaltenbreit, das Formular (.ck-form-wrap, Lesemaß 34em) stand darin mittig mit
   viel Luft auf beiden Seiten, wirkte gestreckt. Dieselbe Regel jetzt auch unter 861: die Fläche schrumpft auf die
   Formularbreite, .fd-ch__body ist ein normaler Block ohne Auto-Margin, sitzt darum bündig an der Textkante, kein neues
   Muster. Bei 320 bis 402 ohne sichtbaren Unterschied, dort füllt der Inhalt die Spalte ohnehin aus. */
@media (max-width: 860.98px) {
  .fd-ch[data-flaeche="sand"]:is([data-muster="text"], [data-muster="text-medium-unten"]) .fd-ch__body { width: fit-content; max-width: 100%; }
}
/* Nachsatz unter der Sand-Insel (Runde 4, E85): optional, einmal, direkt nach .fd-ch__body, nur mit data-flaeche="sand" (Vertrag §3, Lint V-04g).
   (0,2,0) schlägt .fd-ch > * + * (S1) */
.fd-ch__body + .fd-ch__nach { margin-top: var(--fd-space-content); }
.fd-ch__nach > .fd-h3 { margin: 0; }
/* ── Komposition (Runde 4, E88/E92, 27.09., Agent G, G_loesung.md) ──
   Grundsatz: jedes Kapitel hat eine Achse. Medien stehen mittig auf der Achse der Inhaltsspalte oder bündig an ihrer Außenkante,
   nie frei in einer halben Spalte. Nebeneinander haben Text und Medium eine gemeinsame Oberkante.
   Gliederung im Text (optional): .fd-ch__lead (Lesetext) und .fd-ch__begleit (Begleiter des Mediums: Personen, Kacheln, Link-Karten),
   in dieser Reihenfolge. Mobil: Lead, Begleiter, Medium. Muster medium-mitte (K1): ab 1240 Handy mittig, Lead links, Begleiter rechts. */
.fd-ch__lead > * + * { margin-top: var(--fd-space-content); }
.fd-ch__lead > .fd-body + .fd-body { margin-top: var(--space-4); }
.fd-ch__lead > .fd-subnote { margin-top: var(--space-3); }
.fd-ch__begleit > * { margin-top: 0; }
.fd-ch__begleit > * + * { margin-top: var(--space-3); }
.fd-ch__begleit > .fd-personas { margin: 0; }
.fd-ch__begleit > .fd-wege { margin: 0; }
.fd-ch__begleit > .fd-h3 + * { margin-top: var(--space-2); }
/* Fix P5 (28.09., Mobil-Audit 260928, Produkt 02 Miriam): mobil steht Miriams Personen-Tag (.fd-who) weit vom Handy weg, das ihren
   Chat zeigt (Text, Tag, Kacheln „Ein guter Coach…", dann erst das Handy). Das DOM bleibt (Lint V-04c/V-04h fixieren Text vor Medien
   und Lead vor Begleiter), nur die visuelle Reihenfolge wandert per order: Lead-Absatz, dann .fd-who direkt über dem Handy
   (gleicher order-Wert wie .fd-ch__medien, Gleichstand löst der DOM zugunsten von .fd-who, S1), danach .fd-ch__begleit. Ab 861 zurück
   auf die normale Mitte-Komposition (Reset im 861-Block), betrifft nur medium-mitte-Kapitel mit .fd-who (heute: Produkt 02) */
.fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__body { display: flex; flex-direction: column; }
.fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__text,
.fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__lead { display: contents; }
.fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-who,
.fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__medien { order: 2; }
.fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__begleit { order: 3; }

/* ── 7d Problem-Box und Personen mit Problem (E104, 29.09., Startseite 01) ──
   .fd-problem: Sand-Fläche mit dem Problemsatz in Clash, der Befund (.fd-problem__mark) als Orange-Marker, der einmal einläuft,
   sobald die Box eingeblendet wird (hängt am vorhandenen Reveal, kein eigener Takt, E83). Daneben der Knopf .fd-info zum Quellen-Sheet.
   .fd-personas--problem: Personen als Karten auf allen Breiten, je Karte Standardangebot durchgestrichen (.fd-strike) und Notiz (.fd-note).
   Anordnung data-kopf="breit" an einem text-medium-Kapitel mit Handy: ab 1048 Lead über beide Spalten, darunter Begleiter links, Handy rechts. */
.fd-problem { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-4); padding: var(--space-6) var(--space-5); background: var(--surface-fill); border-radius: var(--radius-lg); }
.fd-problem__satz { margin: 0; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-lg-size); font-weight: 600; line-height: var(--type-title-lg-lh); color: var(--text-primary); text-wrap: balance; }
.fd-problem__mark { padding: 0 .18em; border-radius: var(--radius-sm); color: var(--text-selected); background-color: transparent;
  background-image: linear-gradient(var(--state-selected), var(--state-selected)); background-repeat: no-repeat; background-size: 100% 100%;
  box-decoration-break: clone; -webkit-box-decoration-break: clone; }
.fd-problem > .fd-info { margin: 0; }
/* Agent C 29.09. (E110): Kapitel in zwei Bereiche. Oben „Das Problem“ auf Sand (.fd-problem mit Label .fd-problem__label über dem Satz, in .fd-problem__text),
   darunter „Die Lösung“ auf Weiß: Label .fd-loesung__label und Einstieg .fd-loesung__einstieg als erste Zeilen von .fd-ch__begleit, danach der Text und die
   Personenkarten wie bisher. Die Lösungs-Komposition (Begleiter links, Handy rechts, data-kopf="breit") bleibt unverändert. Label und Einstieg
   sind Bausteine für jedes Kapitel mit Problem und Lösung (Vorbild für die Handy-Kapitel, E111). */
.fd-problem__text { display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
.fd-problem__label, .fd-loesung__label { margin: 0; font-size: var(--type-label-lg-size); font-weight: 600; line-height: var(--type-label-lg-lh); color: var(--text-secondary); }
.fd-loesung__label { margin-bottom: var(--space-2); }
.fd-loesung__einstieg { margin: 0; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-md-size); font-weight: 600; line-height: var(--type-title-md-lh); color: var(--text-primary); text-wrap: balance; }
.fd-ch__begleit > .fd-loesung__label + .fd-loesung__einstieg { margin-top: 0; }
.fd-ch__begleit > .fd-loesung__einstieg + .fd-body { margin-top: var(--space-4); }
.fd-js .fd-problem__mark { color: var(--text-primary); background-size: 0% 100%; transition: background-size 900ms var(--ease-out) 450ms, color 300ms var(--ease-out) 900ms; }
.fd-js .is-visible .fd-problem__mark { color: var(--text-selected); background-size: 100% 100%; }
@media (prefers-reduced-motion: reduce) { .fd-js .fd-problem__mark { transition: none; color: var(--text-selected); background-size: 100% 100%; } }
.fd-personas--problem { display: flex; flex-direction: column; gap: var(--space-3); padding: 0; background: transparent; border-radius: 0; }
.fd-personas--problem .fd-persona { position: relative; justify-content: flex-start; align-items: flex-start; gap: var(--space-3); min-height: 0; padding: var(--space-4); border: 1px solid var(--border-default); border-radius: var(--radius-lg); background: var(--surface-card); box-shadow: var(--shadow-sm); text-align: left; color: var(--text-secondary); }
.fd-personas--problem .fd-persona:focus { background: var(--surface-card); color: var(--text-secondary); box-shadow: var(--shadow-sm); }
.fd-personas--problem .fd-persona:hover { background: var(--surface-card); border-color: var(--brand-primary); color: var(--text-secondary); box-shadow: var(--shadow-md); }
.fd-personas--problem .fd-persona:active { background: var(--surface-fill-soft); border-color: var(--brand-active); }
.fd-personas--problem .fd-persona[aria-pressed="true"] { background: var(--surface-card); border-color: var(--brand-primary); color: var(--text-secondary); box-shadow: var(--shadow-md); }
.fd-personas--problem .fd-persona__av { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 40px; height: 40px; border-radius: var(--radius-pill); background: var(--surface-fill); color: var(--text-primary); }   /* E124: Espresso */
.fd-personas--problem .fd-persona__av svg { width: 20px; height: 20px; }
.fd-personas--problem .fd-persona[aria-pressed="true"] .fd-persona__av { background: var(--surface-fill); color: var(--text-primary); }   /* E114 (29.09., Agent A): auch gewählt Sand und Espresso, die Auswahl zeigt der Rand */
.fd-personas--problem .fd-persona[data-track="mental"][aria-pressed="true"] .fd-persona__av { background: var(--surface-fill); color: var(--text-primary); }
.fd-personas--problem .fd-persona__txt { align-items: flex-start; gap: 2px; }
.fd-personas--problem .fd-persona__txt b { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); line-height: 1.2; color: var(--text-primary); }
.fd-personas--problem .fd-persona__txt small { font-size: var(--type-label-sm-size); font-weight: 500; opacity: 1; color: var(--text-secondary); }
.fd-persona__problem { display: flex; flex-direction: column; gap: 2px; margin-top: var(--space-2); }
.fd-persona__problem .fd-strike { font-size: var(--type-label-md-size); font-weight: 500; color: var(--text-secondary); }
.fd-persona__problem .fd-note { font-size: var(--type-title-sm-size); }
.fd-ch__begleit > .fd-body + .fd-personas { margin-top: var(--space-5); }
@media (min-width: 861px) {
  .fd-problem { padding: var(--space-8); }
  .fd-personas--problem .fd-persona { gap: var(--space-4); padding: var(--space-4) var(--space-5) var(--space-4) var(--space-4); }
  .fd-personas--problem .fd-persona__av { width: 56px; height: 56px; }
  .fd-personas--problem .fd-persona__av svg { width: 28px; height: 28px; }
  .fd-personas--problem .fd-persona__txt b { font-size: var(--type-title-md-size); }
  .fd-personas--problem .fd-persona__txt small { font-size: var(--type-body-sm-size); }
  .fd-persona__problem .fd-note { font-size: var(--type-title-md-size); }
}
@media (min-width: 1048px) {
  .fd-problem { flex-direction: row; align-items: flex-end; justify-content: space-between; gap: var(--space-8); }   /* Knopf rechts unten auf Höhe des Befunds, keine leere Hälfte (E88) */
  /* Agent C 29.09. (E110): Problemsatz bleibt title-lg (vorher display-md = fast so groß wie der Kapiteltitel), der Titel führt die Hierarchie */
  .fd-problem > .fd-info { flex: 0 0 auto; }
  .fd-problem__mark { display: table; margin-top: var(--space-1); white-space: nowrap; }   /* eigene Zeile: erst die Lage, dann der Befund */
}   /* Anordnung „Kopf breit“ ab 1048 steht im 1048-Block nach den text-medium-Regeln */


/* ══ 8 Espresso-Band (Modul, höchstens eines, zwischen zwei Kapiteln) ══════════ */
.fd-band { position: relative; padding: var(--space-8) 0; background: var(--surface-inverse); }
.fd-band__head { margin: 0 var(--fd-gutter) var(--space-3) var(--fd-inset); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-body-md-size); font-weight: 600; line-height: var(--type-title-md-lh); color: var(--text-inverse); }
/* Chips beginnen an der Inhaltskante und werden dort abgeschnitten, sie kreuzen die Linie nie (R-D, E69) */
/* Band-Chips mobil (Fix P2, K5, 28.09.): keine Reihe mehr, die über den Rand läuft und die letzte Karte halb abschneidet.
   Chips stehen bündig auf der Inhaltsspalte (wie Hero, Text, Karussell-Karte) untereinander, kompakt (kleiner als die
   76-px-Karte ab 861). Kein Wischen mehr nötig, K9 (kein horizontales Wischen als einzige Navigation) greift hier gar nicht erst. */
.fd-band__scroll { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-2); margin: 0 var(--fd-gutter) 0 var(--fd-inset); padding: 0; overflow: visible; scroll-snap-type: none; }
.fd-band__scroll::-webkit-scrollbar { display: none; }
.fd-certchip { display: inline-flex; align-items: center; gap: var(--space-2); width: 100%; min-height: 44px; padding: 0 var(--space-4) 0 var(--space-2); border: 0; border-radius: var(--radius-pill); background: var(--surface-card); font-family: var(--font-sans); font-size: var(--type-label-md-size); font-weight: 700; color: var(--text-primary); white-space: nowrap; cursor: pointer; scroll-snap-align: start; transition: background var(--duration-fast) var(--ease-out); }
.fd-certchip:focus { background: var(--surface-card); color: var(--text-primary); box-shadow: none; }
.fd-certchip:hover { background: var(--surface-fill); color: var(--text-primary); box-shadow: none; }
.fd-certchip:hover .fd-certchip__tap { color: var(--text-link); }
.fd-certchip:active { background: var(--surface-marker); color: var(--text-primary); }
.fd-certchip img { width: 28px; height: 28px; object-fit: contain; }
/* Klick-Hinweis (E55, E83 und E91, Runde 4): Lucide mouse-pointer-click nur am ersten Chip (Seiten-HTML). Tippt von selbst alle 5 s,
   vom Laden an, ohne Sichtkontakt, ohne Hover, ohne Grenze: reine CSS-Schleife, kein Takt im JS (H-10). Getippt wird in den ersten
   680 ms (13,6 %, 2 × --duration-slow), erster Tipp 0,8 s nach dem Laden, kurz Orange über stroke (Ruhewert currentColor, so wirkt die
   Hover-Farbe weiter). Nur mit JS (.fd-js), ohne JS öffnen die Chips kein Sheet. Ruhe nach dem ersten Öffnen oder Fokus im Band bis zum
   Neuladen (.is-ruhig aus faden-shared.js, E91 E-1, WCAG 2.2.2). Weniger Bewegung: Abschnitt 14 */
.fd-certchip__tap { display: inline-flex; flex: 0 0 auto; margin-left: auto; color: var(--text-secondary); }
.fd-certchip__tap svg { width: 20px; height: 20px; overflow: visible; }
.fd-certchip__tap .fd-tap__ray, .fd-tcard__tap .fd-tap__ray { transform-box: view-box; transform-origin: 9px 9px; }
.fd-certchip__tap .fd-tap__cur, .fd-tcard__tap .fd-tap__cur { transform-box: view-box; transform-origin: 14px 14px; }
.fd-js .fd-certchip__tap .fd-tap__cur { animation: fdTapTaktCur 5s var(--ease-out) .8s infinite both; }
.fd-js .fd-certchip__tap .fd-tap__ray { animation: fdTapTaktRay 5s var(--ease-out) .8s infinite both; }
.fd-band.is-ruhig .fd-certchip__tap .fd-tap__cur, .fd-band.is-ruhig .fd-certchip__tap .fd-tap__ray { animation: none; }
@keyframes fdTapTaktCur { 0%, 13.6%, 100% { transform: none; stroke: currentColor; } 5.4% { transform: translate(-1px, -1px) scale(.86); stroke: var(--brand-primary); } }
@keyframes fdTapTaktRay { 0%, 4.8% { opacity: 0; transform: scale(.5); stroke: currentColor; } 5.4% { stroke: var(--brand-primary); } 10.2% { opacity: 1; transform: scale(1.15); } 13.6%, 100% { opacity: 1; transform: none; stroke: currentColor; } }
/* Personenkarten (.fd-tcard--tap) tippen weiter beim Überfahren */
.fd-tcard--tap:hover .fd-tap__cur { animation: fdTapCur2 calc(var(--duration-slow) * 2) var(--ease-out) both; }
.fd-tcard--tap:hover .fd-tap__ray { animation: fdTapRay2 calc(var(--duration-slow) * 2) var(--ease-out) both; }
@keyframes fdTapCur2 { 0%, 100% { transform: none; } 40% { transform: translate(-1px, -1px) scale(.86); } }
@keyframes fdTapRay2 { 0%, 35% { opacity: 0; transform: scale(.5); } 75% { opacity: 1; transform: scale(1.15); } 100% { opacity: 1; transform: none; } }


/* ══ 9 Abschluss (K4) ════════════════════════════════════════════════════════ */
/* Sand-Bühne mit Verlaufskreis aus dem Hero als Klammer (G4 M1, 26.09.) */
/* Abschluss-Kreis mobil (K8, Mobil-Audit 28.09.): groß, ganzzahlig, Ecke rechts unten der Sand-Bühne angeschnitten, wie ab 1048 (E86, E91),
   statt der alten kleinen 56-px-Scheibe über dem Titel. padding-bottom reserviert den Platz unter Titel und Knopf, damit der Kreis keinen
   Inhalt deckt (M9 prüft die Überlappung, mindestens 48 px, hier über Zeilenumbruch statt Seitenabstand gelöst). Gilt nur unter 861 (H-04
   erlaubt kein eigenes max-width): die alte Scheibe wird für 861 bis 1047 im nächsten Block unten wiederhergestellt, ab 1048 unverändert */
.fd-final { position: relative; isolation: isolate; overflow: hidden; margin: var(--space-10) var(--fd-gutter) var(--space-12); padding: var(--space-10) var(--space-5) calc(var(--fd-final-kreis) - var(--fd-final-aus) + var(--space-4)); background: var(--surface-fill); border-radius: var(--radius-xl); text-align: center; --fd-final-kreis: 200px; --fd-final-aus: var(--space-16); }
.fd-final::before { content: ''; position: absolute; right: calc(var(--fd-final-aus) * -1); bottom: calc(var(--fd-final-aus) * -1); width: var(--fd-final-kreis); height: var(--fd-final-kreis); margin: 0; border-radius: var(--radius-pill); background: var(--brand-gradient); }
.fd-final .fd-faces img { border-color: var(--surface-fill); }
.fd-final > .fd-h2 { font-size: var(--type-title-lg-size); margin-bottom: var(--space-5); }
.fd-final__row { display: flex; flex-direction: column; align-items: center; gap: var(--space-6); }
.fd-final__row > .fd-btn { width: 100%; }
.fd-final__team { display: flex; flex-direction: column; align-items: center; gap: var(--space-3); }
.fd-final__team p { margin: 0; font-size: var(--type-label-lg-size); line-height: var(--type-body-sm-lh); color: var(--text-primary); }
.fd-final__team a { color: var(--text-link); font-weight: 600; text-decoration: underline; text-underline-offset: 2px; }
.fd-final__team a:hover, .fd-final__team a:active { color: var(--text-link-hover); }
.fd-faces { display: flex; flex: 0 0 auto; }
.fd-faces img { width: 40px; height: 40px; border-radius: var(--radius-pill); object-fit: cover; border: 2px solid var(--surface-page); box-shadow: 0 0 0 1px var(--border-default); }
.fd-faces img + img { margin-left: -8px; }


/* ══ 10 Häufige Fragen (Modul, nach dem Abschluss, E4) ══════════════════════════
   Gleiche Kanten wie der Abschluss, damit der Übergang ohne Sprung läuft. */
.fd-faqsec { padding: 0 var(--fd-gutter) var(--space-10); }
.fd-faqsec > .fd-h2 { font-size: var(--type-title-lg-size); margin-bottom: var(--fd-space-heading); }
.fd-faq { display: flex; flex-direction: column; margin: var(--space-6) 0 0; border-top: 1px solid var(--surface-fill); }
.fd-faq details, details.fd-auf { border-bottom: 1px solid var(--surface-fill); }
.fd-faq summary, .fd-auf > summary { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); min-height: 56px; padding: var(--space-3) 0; list-style: none; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 600; line-height: var(--type-title-sm-lh); color: var(--text-primary); cursor: pointer; text-wrap: pretty; }
.fd-faq summary::-webkit-details-marker, .fd-auf > summary::-webkit-details-marker { display: none; }
.fd-faq summary:hover, .fd-faq details[open] summary, .fd-auf > summary:hover, .fd-auf[open] > summary { color: var(--text-link); }
.fd-faq summary:active, .fd-auf > summary:active { color: var(--brand-active); }
.fd-faq summary svg, .fd-auf > summary svg { flex: 0 0 auto; width: 20px; height: 20px; color: var(--text-secondary); transition: transform var(--duration-base) var(--ease-out); }
.fd-faq summary:hover svg, .fd-faq details[open] summary svg, .fd-auf > summary:hover svg, .fd-auf[open] > summary svg { color: var(--text-link); }
.fd-faq__a a { color: var(--text-link); text-decoration: underline; text-underline-offset: 2px; }
.fd-faq__a a:hover, .fd-faq__a a:active { color: var(--text-link-hover); }
.fd-faq details[open] summary svg, .fd-auf[open] > summary svg { transform: rotate(180deg); }
.fd-faq__a { padding: 0 0 var(--space-5); }
.fd-faq__a p { margin: 0 0 var(--space-3); font-size: var(--type-label-lg-size); line-height: var(--type-body-lg-lh); color: var(--text-primary); text-wrap: pretty; }
.fd-faq__a p:last-child { margin-bottom: 0; }

/* ── Agent E 29.09. (E118) FAQ-Abschnitt als eigener Bereich ──
   Eine lange Linie über die Seite setzt „Häufige Fragen“ vom Abschluss ab, eine Regel in der Hülle für jede Seite mit .fd-faqsec. Gutter bis Gutter (ab 861 Rand bis Rand
   der Seitenspalte), dunkler als alle anderen Linien (Sand 400 statt Sand 200/100) und waagerecht: der Faden (senkrecht, 2 px, endet vor dem Abschluss) und die Kapitel-Linien (Sand 100)
   sehen anders aus, die Linie liegt hinter dem Abschluss-Block und läuft nirgends über den Faden (E69). Ab 861 in Abschnitt 13 (Desktop) */
.fd-faqsec { position: relative; padding-top: var(--space-10); }
.fd-faqsec::before { content: ''; position: absolute; top: 0; left: var(--fd-gutter); right: var(--fd-gutter); height: 1px; background: var(--border-strong); }

/* ── Agent E 29.09. (E117) Baustein Unterlagen: kurze Reihe Chips statt erklärender Karten ──
   Vier Chips (Angebot, AVV, Nutzungsbedingungen, Datenschutzerklärung) führen zu /kontakt/#unterlagen. Ein Chip ist ein kleiner Link mit Rand wie der Geist-Knopf (Zustände Orange
   und Espresso nach E78 wie .fd-btn--ghost), Symbol Lucide file-text links. Bewusst kein .fd-btn: der Lint (V-14) zählt jedes .fd-btn als CTA. Steht in .fd-ch__text unter dem Satz
   (Preise 03, Produkt 05), dieselbe Reihe überall */
.fd-docs { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.fd-docs__chip, .fd-docs__chip:visited, .fd-docs__chip:focus { display: inline-flex; align-items: center; gap: var(--space-2); min-height: 44px; padding: var(--space-2) var(--space-4); border: 1.5px solid var(--border-default); border-radius: var(--radius-pill); background: transparent; font-family: var(--font-sans); font-size: var(--type-label-md-size); font-weight: 700; line-height: 1.2; color: var(--text-primary); text-decoration: none; box-shadow: none; transition: background var(--duration-base) var(--ease-standard), border-color var(--duration-base) var(--ease-standard), color var(--duration-base) var(--ease-standard); }
.fd-docs__chip:hover { background: var(--surface-fill-soft); border-color: var(--brand-primary); color: var(--text-link); }
.fd-docs__chip:active { background: var(--surface-marker); border-color: var(--brand-active); color: var(--brand-active); }
.fd-docs__chip svg { width: 18px; height: 18px; flex: 0 0 auto; }
.fd-ch__text > .fd-docs { margin-top: var(--space-5); }


/* ══ 10b FAQ-Navigator (Modul, nur FAQ-Seite, an Stelle der Trust-Leiste, E87, E89, 27.09.2026) ══════════
   Suche und zehn Kacheln über den FAQ-Kapiteln. Ohne JS Inhaltsverzeichnis, mit JS Tabs (faden-shared.js, Modul FAQ-Navigator).
   Mobil 2 Spalten ohne Bild und Nummer, ab 861 5 × 2 mit Bild 3:2 und Nummer auf dem Bild. Zustände nach E78 (Klickflächen).
   Konzept und Maße: 01_Regeln/_audit/feedback-260927b/H_loesung.md. */
.fd-faqnav { padding: 0 var(--fd-gutter) var(--fd-trust-space-after); }
/* Suche: nur mit JS sichtbar (hidden im HTML, die Hülle nimmt es weg) */
.fd-faqnav__suche { margin: 0 0 var(--space-5); }
.fd-faqnav__label { display: block; margin: 0 0 var(--space-2); font-size: var(--type-label-lg-size); font-weight: 600; line-height: var(--type-label-lg-lh); color: var(--text-primary); }
.fd-faqnav__feld { position: relative; }
.fd-faqnav__feld > svg { position: absolute; left: var(--space-3); top: 14px; width: 20px; height: 20px; color: var(--text-secondary); pointer-events: none; }
.fd-faqnav__input, .fd-faqnav__input:focus { display: block; width: 100%; height: 48px; margin: 0; padding: 0 var(--space-12) 0 var(--space-10); border: 1.5px solid var(--border-strong); border-radius: var(--radius-md); background: var(--surface-card); color: var(--text-primary); font-family: var(--font-sans); font-size: var(--type-body-md-size); line-height: var(--type-body-md-lh); box-shadow: none; -webkit-appearance: none; appearance: none; }
/* W-01 (28.09., Taste-Audit): Kadence bringt einen eigenen Suchfeld-Stil mit, der den Innenabstand links auf 8px zurücksetzt
   und die Lupe (12 bis 32px) über den Platzhaltertext legt. Höhere Spezifität plus !important sichert den Abstand ab (wie W18/S68). */
.fd-faqnav__feld .fd-faqnav__input, .fd-faqnav__feld .fd-faqnav__input:focus { padding-left: var(--space-10) !important; }
.fd-faqnav__input:hover { border-color: var(--brand-primary); }
.fd-faqnav__input::placeholder { color: var(--text-secondary); opacity: 1; }
.fd-faqnav__input::-webkit-search-cancel-button, .fd-faqnav__input::-webkit-search-decoration { -webkit-appearance: none; appearance: none; display: none; }
/* Leeren: randloses Symbol (Kette E78), 44 px im 48-px-Feld */
.fd-faqnav__leeren, .fd-faqnav__leeren:focus { position: absolute; right: 2px; top: 2px; display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0; border: 0; border-radius: var(--radius-md); background: transparent; color: var(--text-secondary); box-shadow: none; cursor: pointer; }
.fd-faqnav__leeren:hover { background: var(--surface-fill-soft); color: var(--text-link); box-shadow: none; }
.fd-faqnav__leeren:active { background: var(--surface-marker); color: var(--brand-active); box-shadow: none; }
.fd-faqnav__leeren svg { width: 20px; height: 20px; }
/* Trefferzahl (role=status, bleibt im DOM, damit Screenreader die Änderung hören) */
.fd-faqnav__status { margin: var(--space-3) 0 0; font-size: var(--type-label-md-size); font-weight: 600; line-height: var(--type-label-md-lh); color: var(--text-secondary); }
.fd-faqnav__status:empty { margin: 0; }
.fd-faqnav__suche > .fd-link { margin-top: var(--space-2); }
/* Trefferliste: Gruppe, Frage, Auszug aus der Antwort mit Markierung (Sand 200 = „markieren“ im DS) */
.fd-faqnav__treffer { display: grid; gap: var(--space-2); margin: var(--space-4) 0 0; padding: 0; list-style: none; }
.fd-faqhit, .fd-faqhit:visited, .fd-faqhit:focus { display: flex; flex-direction: column; gap: var(--space-1); min-height: 44px; padding: var(--space-3) var(--space-4); border: 1px solid var(--border-default); border-radius: var(--radius-lg); background: var(--surface-card); color: var(--text-primary); text-decoration: none; box-shadow: none; transition: background var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.fd-faqhit:hover { background: var(--surface-fill-soft); border-color: var(--brand-primary); color: var(--text-primary); }
.fd-faqhit:hover .fd-faqhit__frage { color: var(--text-link); }
.fd-faqhit:active { background: var(--surface-marker); border-color: var(--brand-active); color: var(--text-primary); }
.fd-faqhit:active .fd-faqhit__frage { color: var(--brand-active); }
.fd-faqhit__gruppe { font-size: var(--type-label-sm-size); font-weight: 700; line-height: var(--type-label-sm-lh); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); }
.fd-faqhit__frage { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 600; line-height: var(--type-title-sm-lh); text-wrap: pretty; }
.fd-faqhit__auszug { font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); }
.fd-faqhit mark { background: var(--surface-marker); color: var(--text-primary); }
/* Kacheln: mobil 2 Spalten, nur der Name, 48 px hoch (M5). Wörter brechen nur am Leerzeichen und am weichen Trennstrich (Privat&shy;personen) */
.fd-faqnav__kacheln { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-2); margin: 0; padding: 0; list-style: none; }
.fd-faqnav__kacheln > li { display: flex; min-width: 0; }
.fd-faqtile, .fd-faqtile:visited, .fd-faqtile:focus { position: relative; display: flex; flex-direction: column; width: 100%; min-height: 48px; padding: 0; border: 1px solid var(--border-default); border-radius: var(--radius-lg); background: var(--surface-card); color: var(--text-primary); text-decoration: none; box-shadow: none; overflow: hidden; transition: background var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out); }
.fd-faqtile::after { content: ''; position: absolute; inset: 0; border: 2px solid transparent; border-radius: inherit; pointer-events: none; }
.fd-faqtile__bild { display: none; }
.fd-faqtile__zeile { display: flex; flex: 1 1 auto; align-items: center; gap: var(--space-2); min-width: 0; padding: var(--space-2) var(--space-3); }
.fd-faqtile__num { display: none; align-items: center; justify-content: center; flex: 0 0 auto; width: 28px; height: 28px; border: 1.5px solid var(--border-default); border-radius: var(--radius-pill); background: var(--surface-page); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-sm-size); font-weight: 700; color: var(--text-primary); transition: background var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out); }   /* E124: Ziffer Espresso */
.fd-faqtile__name { min-width: 0; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-lg-size); font-weight: 600; line-height: var(--type-title-sm-lh); overflow-wrap: normal; hyphens: manual; text-wrap: balance; }
.fd-faqtile:hover { background: var(--surface-fill-soft); border-color: var(--brand-primary); color: var(--text-link); }
.fd-faqtile:active { background: var(--surface-marker); border-color: var(--brand-active); color: var(--brand-active); }
/* Ausgewählt (aria-selected setzt die Hülle): Tint O100, Schrift O700, Rand O500 doppelt, Nummer gefüllt. Hover ändert daran nichts */
.fd-faqtile[aria-selected="true"], .fd-faqtile[aria-selected="true"]:focus, .fd-faqtile[aria-selected="true"]:hover, .fd-faqtile[aria-selected="true"]:active { background: var(--state-selected); border-color: var(--brand-primary); color: var(--text-selected); }
.fd-faqtile[aria-selected="true"]::after { border-color: var(--brand-primary); }
.fd-faqtile[aria-selected="true"] .fd-faqtile__num { background: var(--surface-page); border-color: var(--brand-primary); color: var(--text-primary); }   /* E124: gewählt zeigt der Rand, keine Orange-Fläche */
/* Ohne Bildfläche (E89 O5 B, Runbook G5d): data-kachelbild="aus" an der Kachel, die leere .fd-faqtile__bild bleibt für das spätere Bild stehen */
.fd-faqtile[data-kachelbild="aus"] > .fd-faqtile__bild { display: none; }


/* ══ 11 Rahmen · Fußzeile (K12) ═══════════════════════════════════════════════ */
.fd-footer { padding: var(--space-8) var(--fd-gutter) calc(96px + env(safe-area-inset-bottom, 0px)); background: var(--surface-inverse); text-align: center; font-family: var(--font-sans); }
.fd-footer p { margin: 0; font-size: var(--type-label-sm-size); line-height: var(--type-body-sm-lh); }
.fd-footer__claim { color: var(--text-on-dark); }
.fd-footer__copy { color: var(--website-text-muted-on-deep); }
.fd-footer__nav ul { display: flex; flex-wrap: wrap; justify-content: center; gap: 0 var(--space-4); margin: var(--space-2) 0; }
.fd-footer__nav a { display: inline-flex; align-items: center; min-height: 44px; font-size: var(--type-label-md-size); color: var(--website-text-muted-on-deep); text-decoration: underline; text-underline-offset: 3px; }
.fd-footer__nav a:hover, .fd-footer__nav a:active { color: var(--text-on-dark); }


/* ══ 12 Rahmen · Anhang: klebender CTA, Nach-oben, Bottom Sheet ═════════════════
   Geschlossene Zustände über visibility, damit sie nicht per Tab erreichbar sind (T-06). */
/* E167 (08.10.2026, Moritz-Feedback): weicher Verlauf ohne harte Kante. Vorher 12 px oben und deckend bis 46 % mit linearem Auslauf, das
   ergab über Text eine sichtbare Kante. Jetzt 48 px Auslauf oben, deckend bis 56 % (Knopf und Rand unten liegen ganz auf Weiß), dann in drei
   Stufen weich aus (Deckkraft per color-mix aus dem Token, keine Rohfarbe) */
.fd-cta { position: fixed; left: 0; right: 0; bottom: 0; z-index: 66; display: flex; justify-content: center; padding: var(--space-12) var(--space-4) calc(var(--space-4) + env(safe-area-inset-bottom, 0px)); background: linear-gradient(to top, var(--surface-page) 56%, color-mix(in srgb, var(--surface-page) 80%, transparent) 70%, color-mix(in srgb, var(--surface-page) 40%, transparent) 86%, transparent); pointer-events: none; transform: translateY(130%); visibility: hidden; transition: transform var(--duration-base) var(--ease-out), visibility 0s linear var(--duration-base); }
.fd-cta.is-on { transform: none; visibility: visible; transition: transform var(--duration-base) var(--ease-out); }
.fd-cta .fd-btn { width: 100%; max-width: 484px; pointer-events: auto; }   /* E167: nur der Knopf fängt Klicks, der höhere Verlauf darüber nicht */

.fd-top { position: fixed; right: var(--space-4); bottom: calc(88px + env(safe-area-inset-bottom, 0px)); z-index: 67; display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0; border: 1.5px solid var(--border-strong); border-radius: var(--radius-pill); background: var(--surface-page); color: var(--text-secondary); cursor: pointer; opacity: 0; visibility: hidden; transform: translateY(8px); transition: opacity var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), background var(--duration-slow) var(--ease-out), color var(--duration-slow) var(--ease-out), visibility 0s linear var(--duration-base); }
.fd-top svg { width: 20px; height: 20px; }
.fd-top.is-on { opacity: 1; visibility: visible; transform: none; transition: opacity var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), background var(--duration-slow) var(--ease-out), color var(--duration-slow) var(--ease-out); }
.fd-top:focus { background: var(--surface-page); border-color: var(--border-strong); color: var(--text-secondary); box-shadow: none; }
.fd-top.is-idle { background: var(--surface-inverse); border-color: var(--surface-inverse); color: var(--text-inverse); }
.fd-top:hover { background: var(--brand-primary); border-color: var(--brand-primary); color: var(--text-on-brand); }
.fd-top:active { background: var(--brand-active); border-color: var(--brand-active); color: var(--text-on-brand); }

.fd-sheet { position: fixed; inset: 0; z-index: 90; display: none; }
.fd-sheet.is-open { display: block; }
.fd-sheet__scrim { position: absolute; inset: 0; background: var(--surface-overlay); opacity: 0; transition: opacity var(--duration-base) var(--ease-out); }
.fd-sheet.is-in .fd-sheet__scrim { opacity: 1; }
.fd-sheet__panel { position: absolute; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; max-width: 520px; max-height: 86vh; margin: 0 auto; background: var(--surface-card); border-radius: var(--radius-xl) var(--radius-xl) 0 0; box-shadow: var(--shadow-lg); transform: translateY(100%); transition: transform var(--duration-slow) var(--ease-out); }
.fd-sheet.is-in .fd-sheet__panel { transform: none; }
.fd-sheet__grip { width: 40px; height: 4px; margin: var(--space-3) auto 0; border-radius: var(--radius-pill); background: var(--surface-marker); }
.fd-sheet__close { position: absolute; right: var(--space-3); top: var(--space-3); display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0; border: 0; border-radius: var(--radius-pill); background: transparent; color: var(--text-secondary); cursor: pointer; }
.fd-sheet__close:focus { background: transparent; color: var(--text-secondary); box-shadow: none; }
.fd-sheet__close:hover { background: var(--surface-fill-soft); color: var(--text-link); }
.fd-sheet__close:active { background: var(--surface-marker); color: var(--brand-active); }
.fd-sheet__close svg { width: 20px; height: 20px; }
.fd-sheet__body { padding: var(--space-5) var(--space-6) calc(var(--space-8) + env(safe-area-inset-bottom, 0px)); overflow-y: auto; font-family: var(--font-sans); }
.fd-sheet__body h3 { margin: 0 0 var(--space-3); padding-right: var(--space-10); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-md-size); font-weight: 600; line-height: var(--type-title-md-lh); color: var(--text-primary); overflow-wrap: break-word; }
.fd-sheet__body p { margin: 0 0 var(--space-3); font-size: var(--type-label-lg-size); line-height: var(--type-body-md-lh); color: var(--text-primary); overflow-wrap: break-word; }
.fd-sheet__body a { color: var(--text-link); text-decoration: underline; text-underline-offset: 2px; }
.fd-sheet__body a:hover, .fd-sheet__body a:active { color: var(--text-link-hover); }
.fd-sheet__seal { display: flex; align-items: center; gap: var(--space-4); margin: var(--space-1) 0 var(--space-5); padding: var(--space-4); background: var(--surface-fill); border-radius: var(--radius-lg); }
.fd-sheet__seal img { flex: 0 0 auto; width: 84px; height: 84px; object-fit: contain; }
.fd-sheet__seal p { margin: 0; font-size: var(--type-label-md-size); line-height: var(--type-body-sm-lh); }
.fd-sheet__seal b { display: block; margin-bottom: var(--space-1); font-size: var(--type-label-sm-size); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); }
.fd-sheet__img { display: flex; align-items: center; justify-content: center; aspect-ratio: 1.2; margin-bottom: var(--space-4); border: 1px dashed var(--border-strong); border-radius: var(--radius-lg); background: var(--surface-fill-soft); }
.fd-sheet__img[hidden] { display: none; }
.fd-sheet__img:has(img) { border: 0; background: none; overflow: hidden; }   /* Bild je Übung (data-bild, S6a) */
.fd-sheet__img img { display: block; width: 100%; height: 100%; object-fit: cover; }
.fd-sheet__chart { display: block; width: 100%; height: auto; margin: 0 0 var(--space-4); border-radius: var(--radius-lg); }
.fd-sheet__list { margin: 0 0 var(--space-4); padding-left: var(--space-5); font-size: var(--type-label-lg-size); line-height: var(--type-body-md-lh); color: var(--text-primary); }
.fd-sheet__list li + li { margin-top: var(--space-1); }
.fd-sheet__tags { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-bottom: var(--space-4); }
.fd-sheet__body .fd-btn { width: 100%; }

/* ── Agent D 29.09. (E115) Zertifikats-Sheets (dsgvo, iso, zpp aus rahmen/anhang.html) ──────────────────
   Alles auf der Mittelachse des Sheets: Logo 160 hoch, Titel, Meta, Erklärung, Kasten „Bei uns heißt das“ (K2), „Weitere Ressourcen“
   als Link-Karten (Muster .fd-tcard--link, E95: Pfeil und neuer Tab stehen im HTML). Schrift eine Stufe größer als in den anderen Sheets:
   Titel title-lg, Zwischentitel title-md, Text body-lg. Sheet-Rahmen, Öffnen und Schließen bleiben unberührt (Agent A, E116). */
.fd-cert { display: flex; flex-direction: column; align-items: center; text-align: center; }
.fd-cert__logo { display: block; width: auto; max-width: 100%; height: 160px; margin: var(--space-2) auto var(--space-6); object-fit: contain; }
.fd-sheet__body .fd-cert h3 { margin: 0 0 var(--space-3); padding-right: 0; font-size: var(--type-title-lg-size); line-height: var(--type-title-lg-lh); }
.fd-sheet__body .fd-cert h4 { margin: var(--space-8) 0 var(--space-3); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-md-size); font-weight: var(--type-title-md-weight); line-height: var(--type-title-md-lh); color: var(--text-primary); overflow-wrap: break-word; }
.fd-sheet__body .fd-cert p { margin: 0 0 var(--space-4); font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); }
.fd-sheet__body .fd-cert p.fd-cert__meta { margin: 0; font-size: var(--type-body-md-size); line-height: var(--type-body-md-lh); font-weight: 600; color: var(--text-secondary); }
.fd-cert__fakt { width: 100%; padding: var(--space-5) var(--space-5) var(--space-1); background: var(--surface-fill); border-radius: var(--radius-lg); }
.fd-cert__res { display: grid; gap: var(--space-3); width: 100%; margin: 0; padding: 0; list-style: none; text-align: left; }
.fd-cert__res .fd-tcard { flex: none; padding: var(--space-3) var(--space-4); gap: var(--space-3); }
.fd-cert__res .fd-tcard__media { width: 44px; height: 44px; }
.fd-cert__res .fd-tcard__meta { font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); font-weight: 500; }
.fd-sheet__body .fd-tcard--link a, .fd-sheet__body .fd-tcard--link a:focus { color: var(--text-primary); text-decoration: none; }   /* :focus beim Normalzustand (H-12, S68), die Sheet-Linkregel (unterstrichen) gilt nicht für Karten */
.fd-sheet__body .fd-tcard--link a:hover, .fd-sheet__body .fd-tcard--link a:active { text-decoration: none; }
.fd-sheet__body .fd-tcard--link:hover a { color: var(--text-link); }
.fd-sheet__body .fd-tcard--link:active a { color: var(--brand-active); }


/* ══ 13 Desktop ab 861px ═════════════════════════════════════════════════════
   Grammatik B: Seite max 1240, Faden-Spalte 148 bis 168, Spaltenabstand 40, Seitenrand 24.
   Rhythmus nur über --fdd-* (R-B). */
/* ═══ Textseite (Rechtstexte, S5, Vertrag §2a): .fd-page[data-seite="text"] = Hero mit H1 und Stand-Zeile, dann .fd-doc.
   Kein Faden, kein CTA, kein Abschluss. Inhalt ist Fließtext mit h2, h3, p, ul, ol, table, a. ═══ */
.fd-page[data-seite="text"] .fd-hero { padding-bottom: var(--space-8); }
.fd-page[data-seite="text"] .fd-hero .fd-h1 { font-size: clamp(var(--type-title-lg-size), 8vw, var(--type-display-md-size)); hyphens: auto; overflow-wrap: anywhere; }   /* lange Rechtstext-Titel (S43) */
.fd-doc li > a[href^="#"]:only-child { display: inline-flex; align-items: center; min-height: 44px; }   /* Inhaltsverzeichnis: Trefferfläche 44 px (S43) */
.fd-doc li:has(> a[href^="#"]:only-child) + li { margin-top: 0; }
.fd-doc { padding: 0 var(--fd-gutter) var(--space-16); }
.fd-doc > * { max-width: var(--fd-measure); }   /* G1 26.09.: ein Lesemaß wie die Kapitel (vorher 40em) */
.fd-doc > table { max-width: 100%; }
.fd-doc h2 { margin: var(--space-10) 0 var(--space-3); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-lg-size); font-weight: var(--type-title-lg-weight); line-height: var(--type-title-lg-lh); color: var(--text-primary); text-wrap: pretty; hyphens: auto; }
.fd-doc h3 { margin: var(--space-6) 0 var(--space-2); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-md-size); font-weight: var(--type-title-md-weight); line-height: var(--type-title-md-lh); color: var(--text-primary); hyphens: auto; }
.fd-doc h4 { margin: var(--space-4) 0 var(--space-2); font-size: var(--type-body-md-size); font-weight: 600; line-height: var(--type-body-md-lh); color: var(--text-primary); }
.fd-doc ol[type="a"] { list-style-type: lower-alpha; }
.fd-doc > :first-child { margin-top: 0; }
.fd-doc p, .fd-doc li { font-size: var(--type-body-md-size); line-height: var(--type-body-md-lh); color: var(--text-primary); overflow-wrap: anywhere; }
.fd-doc p { margin: 0 0 var(--space-4); }
.fd-doc ul, .fd-doc ol { margin: 0 0 var(--space-4); padding-left: var(--space-6); }
.fd-doc li + li { margin-top: var(--space-2); }
.fd-doc a { color: var(--text-link); text-decoration: underline; text-underline-offset: 2px; }
.fd-doc a:hover, .fd-doc a:active { color: var(--text-link-hover); }
.fd-doc strong, .fd-doc b { font-weight: 600; }
.fd-doc table { display: block; overflow-x: auto; width: 100%; margin: 0 0 var(--space-6); border-collapse: collapse; font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); }
.fd-doc th, .fd-doc td { padding: var(--space-2) var(--space-3); border-bottom: 1px solid var(--border-subtle); text-align: left; vertical-align: top; }
.fd-doc th { font-weight: 600; }
.fd-doc__stand { font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); }
/* W-14 (29.09., Taste-Audit): ab 1240 steht das vorhandene Inhaltsverzeichnis zusätzlich als mitscrollende Spalte rechts,
   kein neues Bauteil, nur eine zweite Position derselben Liste (.fd-doc__toc = dasselbe ol wie oben im Text). Unter 1240
   bleibt es unverändert am Textanfang stehen. */
.fd-doc__toc a.is-aktiv { color: var(--text-primary); font-weight: 600; }

@media (min-width: 861px) {
  .admin-bar .fd-bar { top: 32px; }   /* WP-Admin-Leiste ab Desktop 32 px (Port K-P6, nur eingeloggt; zwischen 783 und 860 px weicht sie um 14 px ab) */
  :root {
    --fd-bar-h: 68px;
    --fdd-hero-top: 88px; --fdd-hero-lead: 20px; --fdd-hero-cta: 36px; --fdd-hero-after: 112px;   /* E68: Knöpfe → Trust oder Kapitel-Linie, zwei Knopfhöhen */
    --fd-hero-kreis: clamp(200px, 20vw, 320px);
    --fdd-ch-top: 88px; --fdd-ch-bottom: 88px;
    --fdd-heading: 40px; --fdd-content: 32px; --fdd-media: 40px; --fdd-block: 20px;
    --fd-col: clamp(148px, calc(148px + (100vw - 1048px) * 0.1042), 168px);
    --fd-gap: 40px;
    --fd-content-x: calc(var(--fd-edge) + var(--fd-col) + var(--fd-gap));
    --fd-stick-top: calc(var(--fd-bar-h) + var(--space-10));   /* eine Linie für alles, was im Kapitel klebt (G1) */
  }
  .admin-bar { --fd-stick-top: calc(var(--fd-bar-h) + 32px + var(--space-10)); }
  [id] { scroll-margin-top: 96px; }

  /* Kopf: flächige Leiste, Innenkanten auf Seitenbreite */
  .fd-bar { gap: var(--space-8); padding: var(--space-3) var(--fd-edge); }
  .fd-burger, .fd-menu, .fd-scrim, html:not(.fd-js) .fd-menu { display: none; }
  .fd-logo { --fd-logo-mark: 32px; }
  .fd-logo__mark svg { width: 100%; height: 100%; }
  .fd-logo__word { font-size: var(--type-title-md-size); }
  .fd-nav { display: block; margin-right: auto; }
  .fd-nav ul { display: flex; align-items: center; gap: var(--space-1); }
  .fd-nav a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 var(--space-4); border-radius: var(--radius-pill); font-size: var(--type-label-lg-size); font-weight: 600; color: var(--text-primary); text-decoration: none; transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out); }
  .fd-nav a:not([aria-current]):hover { background: var(--surface-fill-soft); color: var(--text-link); }
  .fd-nav a:not([aria-current]):active { background: var(--surface-marker); color: var(--brand-active); }
  .fd-nav .current-menu-item > a, .fd-nav a[aria-current="page"] { background: var(--state-selected); color: var(--text-selected); }
  .fd-btn--bar { min-height: var(--fd-btn-h-bar); padding: 0 var(--space-6); font-size: var(--type-label-lg-size); }
  .fd-bar__right { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; }   /* Kopf-Paar „Kontakt“ + „Lizenz kaufen“ gleich breit (Burger ist hier aus, also nur zwei Spalten); mobil reicht der Platz dafür nicht */
  .fd-cta { display: none; }
  .fd-top { right: var(--space-6); bottom: var(--space-6); }

  /* Hero auf der Inhalts-Achse wie die Kapitel (G1, Jan 26.09.). Einspaltig bis 1047, Kreis rechts erst ab 1048 */
  .fd-hero { display: block; padding: var(--fdd-hero-top) var(--fd-edge) var(--fdd-hero-after) var(--fd-content-x); }
  .fd-hero .fd-h1 { max-width: 16em; font-size: var(--type-display-xl-size); margin-bottom: var(--fdd-hero-lead); }
  .fd-hero .fd-lead { max-width: 30em; font-size: var(--type-title-md-size); }
  .fd-hero__ctas { flex-direction: row; flex-wrap: wrap; gap: var(--space-4); margin-top: var(--fdd-hero-cta); }
  .fd-hero__ctas .fd-btn { width: auto; }
  /* E53: zwei Knöpfe zusammen so breit wie der Lead (max-width des Leads 30em in title-md) */
  .fd-hero[data-cta="2"] .fd-hero__ctas { max-width: var(--fd-paar-max); }
  .fd-hero[data-cta="2"] .fd-hero__ctas .fd-btn { flex: 1 1 0; min-width: max-content; }   /* gleich breit, bricht um, bevor ein Text überläuft */

  /* Trust: statische Reihe auf der Inhalts-Achse, drei Karten ab 1048 in einer Reihe (G1) */
  .fd-trust { padding: 0 var(--fd-edge) var(--fdd-ch-bottom) var(--fd-content-x); }   /* E68: Trust → Kapitel-Linie 88 */
  .fd-trust .fd-carousel__track { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }

  /* Faden: Linie ist die Spaltenfuge. Die Seitenspalte steht absolut über die Kapitelhöhe,
     Nummer und Name kleben darin (kein grid-row span, S7). Stapelordnung Rail 2 < Inhalt < Kapitelkopf 5 < Seitenspalte 6 (R-D, Runde 4 P1). */
  .fd-rail { left: calc(var(--fd-edge) + var(--fd-col)); }
  /* Kapitel als Block mit Innenabstand statt Grid: ein Grid-Kind klebt nur in seiner eigenen Zeile, so kann die H2 kleben (G1, S58) */
  .fd-ch { display: block; padding: var(--fdd-ch-top) var(--fd-edge) var(--fdd-ch-bottom) var(--fd-content-x); }
  .fd-ch::before { left: var(--fd-content-x); right: var(--fd-edge); }
  .fd-ch__side { grid-column: auto; position: absolute; z-index: 6; left: var(--fd-edge); top: var(--fdd-ch-top); bottom: var(--fdd-ch-bottom); width: var(--fd-col); display: flex; align-items: flex-start; justify-content: flex-end; gap: var(--space-4); pointer-events: none; }
  .fd-ch__name, .fd-ch__num { position: sticky; top: var(--fd-stick-top); }
  .fd-ch__name { order: 1; display: flex; align-items: center; min-height: 40px; min-width: 0; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-sm-size); font-weight: 500; line-height: 1.25; color: var(--text-secondary); text-align: right; hyphens: auto; overflow-wrap: anywhere; }   /* lange Label trennen (S37) */
  .fd-ch.is-active .fd-ch__name { color: var(--text-primary); }
  .fd-ch__num { order: 2; left: auto; flex: 0 0 auto; width: 40px; height: 40px; margin-right: -20px; font-size: var(--type-body-sm-size); box-shadow: 0 0 0 5px var(--surface-page); }
  .fd-tracker { display: none; }
  /* Kapiteltitel klebt wie Nummer und Name (Jan 26.09.). Platte in Seitenfarbe über die Spalte, Zeilenlänge bleibt 22em.
     Stapel: Rail 2 < Inhalt < text-breit 4 < Kapitelkopf 5 < Seitenspalte 6 < CTA 66 < Kopf 70 < Sheet 90 (R-D)
     Platte = ganze Klebezone (Runde 4, P1): von der Faden-Linie (2 px) bis über den Seitenrand, von der Kopfleiste bis zur H2-Unterkante.
     Vorher endete sie an der Textkante, Schatten und Ringe der Medien liefen in der Fuge (38 px) und im Seitenrand durch (bild01, S76).
     z-index -1 im Stapelkontext der H2: über ihrem Hintergrund, unter dem Titeltext. right -100vw schneidet html/body overflow-x: clip ab. Messung M13 */
  .fd-ch > .fd-h2 { position: sticky; top: var(--fd-stick-top); z-index: 5; max-width: none; padding-right: max(0px, calc(100% - 22em)); background: var(--surface-page); font-size: clamp(var(--type-display-md-size), 2.4vw, var(--type-display-lg-size)); }
  .fd-ch > .fd-h2::before { content: ''; position: absolute; z-index: -1; top: calc(var(--space-10) * -1); bottom: 0; left: calc(2px - var(--fd-gap)); right: -100vw; background: var(--surface-page); pointer-events: none; }
  .fd-ch > .fd-h2::after { content: ''; position: absolute; left: calc(2px - var(--fd-gap)); right: -100vw; top: 100%; height: var(--space-4); background: linear-gradient(var(--surface-page), transparent); pointer-events: none; }
  .fd-ch .fd-body { max-width: var(--fd-measure); }

  /* R-B Rhythmus: erst Baustein-Margen neutralisieren (gleiche Spezifität, später), dann eine Regel je Beziehung (S1) */
  .fd-ch > * { margin-top: 0; margin-bottom: 0; }
  .fd-ch > .fd-h2 { margin-bottom: 0; }   /* mobile H2-Marge hat höhere Spezifität (S1, S27) */
  .fd-ch > .fd-h2 + .fd-ch__body { margin-top: var(--fdd-heading); }
  .fd-ch__text > * + * { margin-top: var(--fdd-content); }
  .fd-ch__text > .fd-body + .fd-body { margin-top: var(--space-4); }
  .fd-ch__text > .fd-h3 + * { margin-top: var(--space-2); }
  .fd-ch__text > .fd-subnote, .fd-ch__text > .fd-demodata { margin-top: var(--space-3); }
  .fd-ch__text { max-width: var(--fd-measure); }
  .fd-ch__text:has(> .fd-faq) { max-width: none; }   /* FAQ-Seite: Akkordeon über die Inhaltsbreite, Absätze behalten ihr Lesemaß (E71) */
  .fd-ch__medien { margin-top: var(--fdd-media); gap: var(--fdd-block) var(--fd-gap); }

  /* Muster mit Medien unter dem Text: Lesegröße (R-C: 560 quer, 430 hoch, Chat 390) */
  .fd-ch__medien > .fd-crop { max-width: 560px; }
  .fd-ch__medien > .fd-crop[data-format="hoch"] { max-width: 430px; }
  .fd-ch[data-muster="text-2medien"] .fd-ch__medien,
  .fd-ch[data-muster="text-2medien-seite"] .fd-ch__medien { max-width: calc(2 * 430px + var(--fd-gap)); gap: var(--fd-gap); }
  .fd-ch[data-muster="text-2medien"] .fd-ch__medien > .fd-crop,
  .fd-ch[data-muster="text-2medien-seite"] .fd-ch__medien > .fd-crop,
  .fd-ch[data-muster="text-galerie"] .fd-ch__medien > .fd-crop { max-width: none; }
  .fd-ch[data-muster="text-galerie"] .fd-ch__medien { gap: var(--space-5); }
  .fd-ch[data-muster="text-breit"] .fd-ch__medien { margin-left: 0; margin-right: 0; }
  .fd-ch[data-muster="text-breit"] .fd-ch__medien > .fd-crop { max-width: none; border-radius: var(--radius-lg); }
  .fd-ch[data-muster="text-karten"] .fd-ch__medien { margin-left: 0; margin-right: 0; }
  .fd-ch[data-muster="text-karten"] .fd-ch__text + .fd-ch__medien { margin-top: var(--fdd-media); }
  .fd-ch[data-flaeche="sand"] .fd-ch__body { padding: var(--space-10) 36px; }
  /* „Fläche folgt dem Inhalt" (G1) steht jetzt ungated in Abschnitt 7c (Fix P6), gilt ab 320 wie ab 861 gleich. */
  /* Handy-Baustein ab 861 (E75 bis E77, E84/E90): Breite 394px * k, zoom k bringt das 360 x 758 große Innenleben auf den
     Bildschirm (S65, S71). Maßstab nur über --fd-phone-k (feste Breite W: k = W / 394, z. B. 380 px = .9645; Höhe = 784 * k).
     Einzelhandy k .86 = 339 x 674, passt ab 840 px Fensterhöhe unter die klebende H2 (S66), darunter k .72 (eigener Block
     nach 1240). Drei Handys in einer Reihe k .5 / .64 / .76 (861 / 1048 / 1240), passt in die Inhaltsbreite 625 / 812 / 984 */
  .fd-phone { --fd-phone-k: .86; width: calc(394px * var(--fd-phone-k)); max-width: none; }
  .fd-phone__ui { width: 360px; height: 758px; zoom: var(--fd-phone-k); }
  /* ab 861 bleibt Motivation die feste 3er-Reihe, kein Karussell mehr (JS hängt sich ab 861 ohne data-car-desktop selbst aus).
     .fd-carousel__track.fd-phones statt .fd-phones, damit diese Regel die generische Karussell-Spur-Regel sicher schlägt (Fix P1, K3) */
  .fd-carousel__track.fd-phones { grid-template-columns: repeat(3, auto); justify-content: start; align-items: start; gap: var(--space-4); padding-left: 0; padding-right: 0; }
  .fd-phones > .fd-phone { --fd-phone-k: .5; scroll-snap-align: none; }   /* 3 x 197 + 2 x 16 = 623 von 625 px bei 861 */
  /* Handy-Paar als Bühne (Produkt 03, E90/E92): nebeneinander mittig unter dem Text. k .64 = 2 x 252 + 32 = 536 passt in die
     Sand-Insel bei 861 (553 px), ab 1048 k .72 (284 x 564, Innenschrift etwa 10 px statt 7 px beim Paar neben dem Text).
     Fix P5 (28.09.): descendant statt Direktkind (Handys stecken mobil im Karussell-Baustein), die 2-Spalten-Regel wandert auf
     die Spur selbst und schlägt hier die generische 3er-Reihe der Motivation (höhere Spezifität, S1) */
  .fd-ch[data-muster="text-2medien"] .fd-ch__medien .fd-phone { --fd-phone-k: .64; }
  .fd-ch[data-muster="text-2medien"] .fd-carousel__track.fd-phones { grid-template-columns: repeat(2, auto); justify-content: center; align-items: start; gap: var(--space-8); padding-left: 0; padding-right: 0; }
  /* Komposition (E92): Bühne, zwei Bilder mittig auf der Achse der Inhaltsspalte; Lead und Begleiter im Desktop-Rhythmus */
  .fd-ch[data-muster="text-2medien"] .fd-ch__medien { margin-left: auto; margin-right: auto; }
  .fd-ch__lead > * + * { margin-top: var(--fdd-content); }
  .fd-ch__lead > .fd-body + .fd-body { margin-top: var(--space-4); }
  .fd-ch__lead > .fd-subnote { margin-top: var(--space-3); }
  .fd-ch__begleit > .fd-wege { max-width: var(--fd-measure); }
  .fd-chat__input { padding: var(--space-2) var(--space-4); font-size: var(--type-label-md-size); }   /* mobil kleiner, weil der Bildschirm im Rahmen schmaler ist (E90) */
  .fd-app__tabs { padding: 0 var(--space-3); }
  .fd-app__tabs > span { font-size: var(--type-label-md-size); }
  /* Fix P1 (K1, 28.09.): Schriftbumps von mobil zurück, Desktop bleibt unverändert (k .86 reicht ohne Bump) */
  .fd-bub { font-size: var(--type-label-md-size); }
  .fd-tile__name, .fd-app__titel { font-size: var(--type-label-sm-size); }
  .fd-lock__push:first-of-type { margin-top: var(--space-8); }

  /* Bausteine auf Desktop */
  .fd-strikes--notes { padding: 28px var(--space-8); }
  .fd-strikes__head { font-size: var(--type-title-md-size); padding-bottom: var(--space-5); }
  .fd-strikerow { flex-direction: row; flex-wrap: wrap; align-items: baseline; gap: var(--space-1) 28px; }
  .fd-strikerow .fd-strike { flex: 0 1 auto; min-width: 0; font-size: var(--type-title-sm-size); }
  .fd-strikerow .fd-note { flex: 0 1 auto; min-width: 0; font-size: var(--type-title-lg-size); }
  .fd-punch--big { max-width: 22em; font-size: var(--type-display-lg-size); }
  .fd-info { font-size: var(--type-body-md-size); }
  .fd-personas { display: flex; flex-direction: column; gap: var(--space-3); max-width: var(--fd-measure); padding: 0; background: transparent; border-radius: 0; }
  .fd-persona { position: relative; justify-content: flex-start; gap: var(--space-4); min-height: 84px; padding: var(--space-4) var(--space-5) var(--space-4) var(--space-4); border: 1px solid var(--border-default); border-radius: var(--radius-lg); background: var(--surface-card); box-shadow: var(--shadow-sm); text-align: left; transition: border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out); }
  .fd-persona:focus { background: var(--surface-card); border-color: var(--border-default); color: var(--text-secondary); box-shadow: var(--shadow-sm); }
  .fd-persona:hover { background: var(--surface-card); border-color: var(--brand-primary); color: var(--text-secondary); box-shadow: var(--shadow-md); transform: translateY(-1px); }
  .fd-persona:active { background: var(--surface-fill-soft); border-color: var(--brand-active); box-shadow: var(--shadow-sm); transform: none; }
  .fd-persona__av { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 56px; height: 56px; border-radius: var(--radius-pill); background: var(--surface-fill); color: var(--text-primary); }   /* E124 */
  .fd-persona__av svg { width: 28px; height: 28px; }
  .fd-persona__txt { align-items: flex-start; gap: var(--space-1); }
  .fd-persona__txt b { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-md-size); line-height: 1.2; color: var(--text-primary); }
  .fd-persona__txt small { font-size: var(--type-body-sm-size); font-weight: 500; opacity: 1; color: var(--text-secondary); }
  .fd-persona[aria-pressed="true"] { background: var(--surface-card); border-color: var(--brand-primary); color: var(--text-secondary); box-shadow: var(--shadow-md); }
  .fd-persona[aria-pressed="true"] .fd-persona__av { background: var(--surface-fill); color: var(--text-primary); }   /* E114 */
  .fd-persona[data-track="mental"][aria-pressed="true"] .fd-persona__av { background: var(--surface-fill); color: var(--text-primary); }   /* E124 */

  /* Karussells werden statische Reihen (Jan, 05.09.) */
  .fd-carousel__track { display: grid; grid-template-columns: repeat(auto-fit, minmax(288px, 1fr)); gap: var(--space-4); padding: 0; overflow: visible; scroll-snap-type: none; }
  .fd-carousel__track > [aria-hidden="true"] { display: none; }
  .fd-story .fd-carousel:not([data-car-desktop]) > .fd-carousel__track { padding: 0; }   /* M2 nur mobil (gleiche Spezifität wie dort, S1) */
  .fd-carousel__nav { display: none; }
  .fd-tcard { flex: none; }
  .fd-tcard--slim { padding: var(--space-4) var(--space-5); }
  .fd-tcard__media { width: 48px; height: 48px; }
  .fd-tcard__media img { width: 40px; height: 40px; }
  .fd-tcard__media--photo img { width: 100%; height: 100%; }   /* Foto füllt den Kreis auch ab 861 (S38) */
  .fd-carousel--steps .fd-carousel__track { grid-template-columns: repeat(auto-fit, minmax(208px, 1fr)); }
  /* Vier Kacheln: 2 × 2 bis 1239, eine Reihe ab 1240 (G2), :has zählt die Karten */
  .fd-carousel__track:has(> li:nth-child(4):last-child) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* Kacheln in der Textspalte: untereinander, Symbol links (G2 Weg B) */
  .fd-ch__text > .fd-carousel { margin-left: 0; margin-right: 0; }
  .fd-ch__text > .fd-carousel .fd-carousel__track:not(#fd-x),
  .fd-ch__begleit > .fd-carousel .fd-carousel__track:not(#fd-x) { grid-template-columns: minmax(0, 1fr); gap: var(--space-3); }
  .fd-ch__text .fd-tcard--step { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: var(--space-4); row-gap: var(--space-1); align-items: start; }
  .fd-ch__text .fd-tcard--step > .fd-tcard__media { grid-row: span 2; }
  /* Zeilen-Karte (W-08, E93, 29.09., Preise 03): statt drei gleicher Karten EINE breite Karte, die Einträge sind Zeilen mit
     Trennlinie (wie die kompakte Liste mobil, 7a). Bleibt eine Kachel nach E63 (Symbol, Titel ohne Punkt, ein Satz je Zeile).
     Die Karte ist die Spur selbst, der Innenabstand liegt an den Zeilen (die Spur-Regel .fd-story … { padding: 0 } bleibt so gültig).
     Symbol, Titel und Satz gestapelt bis 1047, ab 1048 in einer Zeile (Abschnitt 13). Mobil unverändert: --steps macht die kompakte Liste */
  .fd-carousel--zeilen > .fd-carousel__track { display: flex; flex-direction: column; gap: 0; background: var(--surface-card); border: 1px solid var(--border-default); border-radius: var(--radius-lg); box-shadow: var(--shadow-md); }
  .fd-carousel--zeilen .fd-tcard--step { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: var(--space-4); row-gap: var(--space-1); align-items: start; padding: var(--space-4) var(--space-6); background: transparent; border: 0; border-bottom: 1px solid var(--border-default); border-radius: 0; box-shadow: none; }
  .fd-carousel--zeilen .fd-tcard--step:last-child { border-bottom: 0; }
  .fd-carousel--zeilen .fd-tcard--step > .fd-tcard__media { grid-row: span 2; }
  .fd-ch__body + .fd-ch__nach { margin-top: var(--fdd-content); }   /* Nachsatz unter der Sand-Insel, R-B 32 (M4) */
  .fd-wege { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: var(--space-4); }
  /* Trust-Karussell ab 861 (E72, 27.09.): wischen und blättern wie mobil, Karten bündig auf der Inhalts-Achse. 2 Karten ganz sichtbar bis 1239,
     3 ab 1240, die nächste lugt an. Der Spurrand von 8 px (Platz für den Kartenschatten) wird oben und seitlich mit negativem Rand ausgeglichen,
     damit Knöpfe → Karten bei 112 px bleibt (E68). Letzte Karte rastet am Ende ein (S13) */
  .fd-carousel[data-car-desktop] > .fd-carousel__track { display: flex; gap: var(--space-4); margin: calc(var(--space-2) * -1) calc(var(--space-2) * -1) 0; padding: var(--space-2) var(--space-2) var(--space-4); overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding-inline: var(--space-2); }
  .fd-carousel[data-car-desktop] .fd-tcard { flex: 0 0 calc((100% - var(--space-4) - var(--space-12)) / 2); scroll-snap-align: start; }
  .fd-carousel[data-car-desktop] .fd-tcard:last-child { scroll-snap-align: end; }
  .fd-carousel[data-car-desktop] > .fd-carousel__nav { display: flex; justify-content: center; }   /* Agent C 29.09. (E109): Steuerung mittig auf der Achse des Karussells, vorher flex-start (S81) */

  /* Band über die ganze Breite, Inhalt rechts vom Faden (R-D) */
  .fd-band { padding: var(--space-12) var(--fd-edge) 52px var(--fd-content-x); }
  .fd-band__head { margin: 0 0 var(--space-5); font-size: var(--type-title-md-size); }
  .fd-band__scroll { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: var(--space-4); margin-left: 0; padding: 0; overflow: visible; }
  .fd-certchip { justify-content: flex-start; gap: var(--space-4); width: 100%; min-height: 76px; padding: 0 var(--space-6) 0 var(--space-4); border-radius: var(--radius-xl); font-size: var(--type-body-md-size); white-space: normal; text-align: left; }
  .fd-certchip img { width: 44px; height: 44px; }

  /* Abschluss und FAQ: linksbündig in der Inhaltsspalte */
  .fd-final { margin: var(--space-20) var(--fd-edge) var(--space-16) var(--fd-content-x); padding: var(--space-16) var(--space-12); text-align: left; }
  /* 861 bis 1047: alte kleine Scheibe bleibt unverändert (K8 gilt nur unter 861), ab 1048 unten der große Eck-Kreis (E86/E91) */
  .fd-final::before { position: static; display: block; right: auto; bottom: auto; width: 56px; height: 56px; aspect-ratio: 1; margin: 0 0 var(--space-6); }
  .fd-final > .fd-h2 { font-size: var(--type-display-lg-size); }
  .fd-final__row { flex-direction: row; flex-wrap: wrap; align-items: center; gap: var(--space-10); margin-top: 28px; }
  .fd-final__row > .fd-btn { width: auto; }
  .fd-final__team { flex-direction: row; align-items: center; flex-wrap: wrap; gap: var(--space-2) var(--space-3); }
  .fd-final__team .fd-faces + p { margin-right: var(--space-2); }
  .fd-faqsec { padding: 0 var(--fd-edge) 88px var(--fd-content-x); }
  .fd-faqsec > .fd-h2 { max-width: 22em; font-size: var(--type-display-lg-size); }
  /* Agent E 29.09. (E118): Linie über die Seitenspalte (Rand bis Rand), Abstand zur Überschrift wie der Kapitel-Abstand */
  .fd-faqsec { padding-top: var(--space-16); }
  .fd-faqsec::before { left: var(--fd-edge); right: var(--fd-edge); }
  /* FAQ-Navigator ab 861 (E87): auf der Inhalts-Achse wie Trust, Knöpfe → Suche 112 (Hero), Kacheln → Kapitel-Linie 88 (E68).
     5 × 2 mit Bild 3:2 (ChatGPT-Querformat 1536 × 1024), Nummer als Kreis auf dem Bild wie am Faden, Name darunter */
  .fd-faqnav { padding: 0 var(--fd-edge) var(--fdd-ch-bottom) var(--fd-content-x); }
  .fd-faqnav__suche { max-width: var(--fd-measure); margin-bottom: var(--space-8); }
  .fd-faqnav__kacheln { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  .fd-faqtile__name { font-size: var(--type-label-md-size); }   /* M1 29.09.: „Datenschutz“ lief bei 861 um 2 px über, ab 1048 wieder label-lg */
  .fd-faqtile__bild { display: flex; align-items: center; justify-content: center; aspect-ratio: 3 / 2; overflow: hidden; background: var(--surface-fill); }
  .fd-faqtile__bild img { display: block; width: 100%; height: 100%; object-fit: cover; }
  .fd-faqtile__num { display: flex; position: absolute; z-index: 1; top: var(--space-2); left: var(--space-2); }
  .fd-faqtile[data-kachelbild="aus"] .fd-faqtile__num, .fd-faqtile:not(:has(> .fd-faqtile__bild)) .fd-faqtile__num { position: static; }   /* ohne Bild steht die Nummer vor dem Namen */
  .fd-faqtile__zeile { align-items: flex-start; padding: var(--space-3) var(--space-2); }
  .fd-faqtile[data-kachelbild="aus"] .fd-faqtile__zeile, .fd-faqtile:not(:has(> .fd-faqtile__bild)) .fd-faqtile__zeile { flex-direction: column; }   /* Nummer über dem Namen, der Name behält die ganze Kachelbreite */

  /* Textseite ab 861: auf der Inhalts-Achse wie die Faden-Seiten (G1), Hero ohne zweite Spalte */
  .fd-page[data-seite="text"] .fd-hero { display: block; padding-bottom: var(--space-10); }
  .fd-doc { padding: 0 var(--fd-edge) var(--space-24) var(--fd-content-x); }
  .fd-footer { padding: var(--space-10) var(--fd-edge) 44px; }
  /* Fix P5 (28.09.): ab 861 zurück auf die normale Mitte-Komposition, Miriams Tag bleibt Teil des Lead-Texts. Muss hier im
     861-Block stehen (nicht im 1048-Block), damit die K2-Block- und K1-Mitte-Regeln dort .fd-ch__body/.fd-ch__text bei
     gleicher Spezifität als spätere Regel wieder selbst übernehmen (S1) */
  .fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__body { display: block; }
  .fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__text,
  .fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__lead { display: block; }
  .fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-who,
  .fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__medien,
  .fd-ch[data-muster="medium-mitte"]:has(.fd-who) .fd-ch__begleit { order: revert; }
}

/* Mittlere Desktopbreite (861 bis 1047): alle Zweispalten-Muster stapeln wie mobil, die Galerie
   läuft in zwei Spalten (Jan, 05.09.: wenig Platz, dann übereinander). */

/* Ab 1048: Zweispalten-Muster nebeneinander. Spuren minmax(0, …), damit bei 1048 nichts überläuft (T-15).
   Kurze Texte: A1 zentriert (Standard), A2 gestapelt per data-split="stack" am Kapitel. */
@media (min-width: 1048px) {
  /* Abschluss (E86, E91 E-3, ändert den Kreis-Teil von E70): Verlaufskreis groß und ganzzahlig, Ecke rechts unten angeschnitten, Mittelpunkt
     in der Bühne, nie an zwei gegenüberliegenden Seiten gekappt (sonst Tonne, bild06). 280 ab 1048, 360 ab 1240. Lage ohne transform (M9) */
  .fd-final { --fd-final-kreis: 280px; --fd-final-aus: 64px; display: flex; flex-direction: column; justify-content: center; min-height: calc(200px + 2 * var(--space-16)); }
  .fd-final::before { position: absolute; right: calc(var(--fd-final-aus) * -1); bottom: calc(var(--fd-final-aus) * -1); width: var(--fd-final-kreis); height: var(--fd-final-kreis); margin: 0; }
  .fd-final > .fd-h2, .fd-final__row { max-width: calc(100% - var(--fd-final-kreis) + var(--fd-final-aus) - var(--space-12)); }
  .fd-final > .fd-h2 { margin-bottom: 0; }   /* im Flex-Container fallen die Ränder nicht zusammen, H2 → Zeile bleibt 28 */
  .fd-page[data-seite="text"] .fd-hero { display: block; }
  /* Verlaufskreis .fd-heroph (E60, E68) am 08.10.2026 durch das Seitenbild .fd-herobild ersetzt (E162, E164), Regeln siehe Abschnitt 20 */
  .fd-ch[data-muster="text-medium"] .fd-ch__body,
  .fd-ch[data-muster="text-2medien-seite"] .fd-ch__body { display: grid; grid-template-columns: minmax(0, 1.04fr) minmax(0, 1fr); column-gap: var(--fd-gap); align-items: center; }
  .fd-ch[data-muster="medium-text"] .fd-ch__body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.04fr); column-gap: var(--fd-gap); align-items: center; }
  .fd-ch[data-muster="medium-text"] .fd-ch__medien { order: -1; }
  .fd-ch[data-muster="text-medium"] .fd-ch__medien,
  .fd-ch[data-muster="medium-text"] .fd-ch__medien,
  .fd-ch[data-muster="text-2medien-seite"] .fd-ch__medien { margin-top: 0; justify-items: center; }
  .fd-ch[data-muster="text-medium"] .fd-ch__text,
  .fd-ch[data-muster="medium-text"] .fd-ch__text,
  .fd-ch[data-muster="text-2medien-seite"] .fd-ch__text { max-width: none; }
  .fd-ch[data-muster="text-medium"] .fd-ch__medien > .fd-crop,
  .fd-ch[data-muster="medium-text"] .fd-ch__medien > .fd-crop { max-width: 560px; }
  .fd-ch[data-muster="text-medium"] .fd-ch__medien > .fd-crop[data-format="hoch"],
  .fd-ch[data-muster="medium-text"] .fd-ch__medien > .fd-crop[data-format="hoch"] { max-width: 430px; }
  .fd-ch[data-muster="text-2medien-seite"] .fd-ch__medien { max-width: none; gap: var(--space-5); }
  .fd-ch[data-split="stack"] .fd-ch__body { display: block; }
  .fd-ch[data-split="stack"] .fd-ch__medien { margin-top: var(--fdd-media); justify-items: center; }   /* gestapelt = Medium auf der Achse (E92) */
  /* K2 Block (E92): text-medium / medium-text / medium-mitte mit Handy. Handyspalte so breit wie das Handy, Text nimmt den Rest,
     Handy an der Außenkante, gemeinsame Oberkante direkt unter der H2 (keine Lücke unter der klebenden H2, S73). Ohne Begleiter
     steht kurzer Text mittig zur Handyhöhe. Die :has(.fd-phone)-Kette ist in 1048 und 1240 gleich lang, sonst gewinnt die falsche Stufe (S1) */
  .fd-ch:is([data-muster="text-medium"], [data-muster="medium-mitte"]) .fd-ch__body:has(.fd-phone) { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: var(--space-16); align-items: stretch; }
  .fd-ch[data-muster="medium-text"] .fd-ch__body:has(.fd-phone) { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: var(--space-16); align-items: stretch; }
  .fd-ch:is([data-muster="text-medium"], [data-muster="medium-text"], [data-muster="medium-mitte"]) .fd-ch__body:has(.fd-phone) > .fd-ch__medien { align-self: start; margin-top: 0; }
  .fd-ch:is([data-muster="text-medium"], [data-muster="medium-mitte"]) .fd-ch__body:has(.fd-phone) > .fd-ch__medien { justify-items: end; }
  .fd-ch[data-muster="medium-text"] .fd-ch__body:has(.fd-phone) > .fd-ch__medien { justify-items: start; }
  .fd-ch:is([data-muster="text-medium"], [data-muster="medium-text"], [data-muster="medium-mitte"]) .fd-ch__body:has(.fd-phone) > .fd-ch__text { display: flex; flex-direction: column; justify-content: center; max-width: none; }
  .fd-ch:is([data-muster="text-medium"], [data-muster="medium-text"], [data-muster="medium-mitte"]) .fd-ch__body:has(.fd-phone) > .fd-ch__text:has(> .fd-ch__begleit, > .fd-carousel) { justify-content: flex-start; }
  .fd-ch__begleit > .fd-personas { max-width: var(--fd-measure); }
  /* 7d Kopf breit (E104): steht nach den text-medium-Regeln, weil gleiche Spezifität, spätere Regel gewinnt (S1) */
  .fd-ch[data-kopf="breit"] .fd-ch__body:has(.fd-phone) { grid-template-columns: minmax(0, 1fr) auto; grid-template-rows: auto auto; row-gap: var(--fd-space-content); column-gap: var(--space-16); align-items: start; }
  .fd-ch[data-kopf="breit"] .fd-ch__body:has(.fd-phone) > .fd-ch__text { display: contents; }
  .fd-ch[data-kopf="breit"] .fd-ch__lead { grid-column: 1 / -1; grid-row: 1; }
  .fd-ch[data-kopf="breit"] .fd-ch__begleit { grid-column: 1; grid-row: 2; margin-top: 0; }
  .fd-ch[data-kopf="breit"] .fd-ch__begleit > .fd-personas { max-width: none; }
  .fd-ch[data-kopf="breit"] .fd-ch__body:has(.fd-phone) > .fd-ch__medien { grid-column: 2; grid-row: 2; align-self: start; justify-items: end; margin-top: 0; }
  /* K5 Kopf-Split (E92): text-karten mit Begleiter, Lead links im Lesemaß, Begleiter rechts, beide unten bündig, Karten darunter */
  .fd-ch[data-muster="text-karten"] .fd-ch__text:has(> .fd-ch__begleit) { display: grid; grid-template-columns: minmax(0, var(--fd-measure)) minmax(0, 1fr); column-gap: var(--space-16); align-items: end; max-width: none; }
  .fd-ch[data-muster="text-karten"] .fd-ch__text > .fd-ch__begleit { margin-top: 0; }
  .fd-ch[data-muster="text-karten"] .fd-ch__begleit > .fd-wege { grid-template-columns: minmax(0, 1fr); max-width: none; }
  /* Zeilen-Karte (W-08): Symbol, Titel und Satz in einer Zeile, Titelspalte 16em, damit die drei Sätze eine gemeinsame Kante haben */
  .fd-carousel--zeilen .fd-tcard--step { grid-template-columns: auto minmax(0, 16em) minmax(0, 1fr); align-items: center; }
  .fd-carousel--zeilen .fd-tcard--step > .fd-tcard__media { grid-row: auto; }
  /* Handy-Paar als Bühne ab 1048 (Produkt 03), Fix P5 (28.09.): descendant statt Direktkind */
  .fd-ch[data-muster="text-2medien"] .fd-ch__medien .fd-phone { --fd-phone-k: .72; }
  .fd-ch[data-muster="text-galerie"] .fd-ch__medien { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); }
  .fd-faqnav__kacheln { gap: var(--space-4); }   /* FAQ-Navigator (E87) */
  .fd-faqtile__name { font-size: var(--type-label-lg-size); }
  .fd-faqtile__zeile { padding: var(--space-3); }
  .fd-phones { gap: var(--space-6); }
  .fd-phones > .fd-phone { --fd-phone-k: .64; }   /* 3 x 252 + 2 x 24 = 805 von 812 px bei 1048 */
}

@media (min-width: 1240px) {
  /* W-14 (29.09.): Textseiten mit Inhaltsverzeichnis bekommen ab hier eine zweite Spalte, die Liste rutscht dorthin und bleibt
     beim Scrollen stehen (position: sticky im vollen grid-row-Bereich). Der Hinweis „Inhalt“ bleibt am Textanfang unnötig,
     weil die Spalte selbst als Verzeichnis erkennbar ist (aria-label trägt es für Screenreader weiter). */
  .fd-page[data-seite="text"] .fd-doc:has(.fd-doc__toc) { display: grid; grid-template-columns: minmax(0, var(--fd-measure)) minmax(200px, 260px); column-gap: var(--space-10); align-items: start; }
  .fd-page[data-seite="text"] .fd-doc:has(.fd-doc__toc) > * { grid-column: 1; }
  .fd-page[data-seite="text"] .fd-doc > p:has(+ .fd-doc__toc) { display: none; }
  .fd-doc__toc { grid-column: 2; grid-row: 1 / -1; align-self: start; position: sticky; top: calc(var(--fd-bar-h) + var(--space-6)); max-height: calc(100vh - var(--fd-bar-h) - var(--space-10)); overflow-y: auto; max-width: none; margin: 0; padding-left: 0; list-style: none; }
  .fd-doc__toc li { margin-top: 0; }
  .fd-doc__toc a { display: block; padding: var(--space-2) 0; color: var(--text-secondary); font-size: var(--type-label-md-size); text-decoration: none; }
  .fd-doc__toc a:hover { color: var(--text-link); text-decoration: underline; }
  .fd-final { --fd-final-kreis: 360px; --fd-final-aus: 80px; }   /* Abschluss-Kreis wie vor E70 (26vw bis 360), ganzzahlig (E86) */
  .fd-carousel__track:has(> li:nth-child(4):last-child) { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .fd-carousel[data-car-desktop] .fd-tcard { flex-basis: calc((100% - 2 * var(--space-4) - var(--space-12)) / 3); }   /* E72: drei Karten sichtbar */
  .fd-faqtile__zeile { padding: var(--space-3) var(--space-4); }   /* FAQ-Navigator (E87): Kachel 184 bis 194 px, Name 17 px */
  .fd-faqtile__name { font-size: var(--type-title-sm-size); }
  .fd-phones { gap: var(--space-8); }
  .fd-phones > .fd-phone { --fd-phone-k: .76; }   /* 3 x 299 + 2 x 32 = 962 von 984 px bei 1240 */
  /* K1 Mitte (medium-mitte, E92): Handy mittig in der Inhaltsspalte, Lead links, Begleiter rechts.
     W-03 (E93, 29.09., ändert „mittig zur Handyhöhe“): alle drei Spalten mit gemeinsamer Oberkante direkt unter der klebenden H2
     (align-items: start), sonst rutscht der kurze Lead 250 bis 290 px unter die H2 und links bleibt ein Loch (E88, S77).
     Bei 1240 bleiben je (984 - 339 - 96) / 2 = 274 px. Nur Kacheln (Preise 02): 1 und 2 links, 3 und 4 rechts, oben bündig mit dem Handy,
     Zeile 2 nimmt den Rest der Handyhöhe (auto 1fr). display: contents am ul, deshalb trägt das ul role="list" (Safari) */
  .fd-ch[data-muster="medium-mitte"] .fd-ch__body:has(.fd-phone) { grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); column-gap: var(--space-12); align-items: start; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__body:has(.fd-phone) > .fd-ch__text { display: contents; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__lead { grid-column: 1; grid-row: 1; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__body:has(.fd-phone) > .fd-ch__medien { grid-column: 2; grid-row: 1; justify-items: center; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__begleit { grid-column: 3; grid-row: 1; margin-top: 0; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__body:has(> .fd-ch__text > .fd-carousel) { grid-template-rows: auto 1fr; row-gap: var(--space-4); }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__text > .fd-carousel,
  .fd-ch[data-muster="medium-mitte"] .fd-ch__text > .fd-carousel > .fd-carousel__track { display: contents; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__text > .fd-carousel > .fd-carousel__track > li:nth-child(1) { grid-column: 1; grid-row: 1; align-self: start; }   /* nur Kacheln direkt im Text, nie die im Begleiter (Produkt 02) */
  .fd-ch[data-muster="medium-mitte"] .fd-ch__text > .fd-carousel > .fd-carousel__track > li:nth-child(2) { grid-column: 1; grid-row: 2; align-self: start; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__text > .fd-carousel > .fd-carousel__track > li:nth-child(3) { grid-column: 3; grid-row: 1; align-self: start; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__text > .fd-carousel > .fd-carousel__track > li:nth-child(4) { grid-column: 3; grid-row: 2; align-self: start; }
  .fd-ch[data-muster="medium-mitte"] .fd-ch__body:has(> .fd-ch__text > .fd-carousel) > .fd-ch__medien { grid-row: 1 / 3; align-self: start; }
}

/* Handy-Baustein bei niedrigen Fenstern (E84/E90, S66): unter 840 px Höhe passt das Einzelhandy mit k .86 (674 px) nicht mehr
   unter die klebende H2, dann k .72 = 284 x 564. Drei Handys (.fd-phones) bleiben unberührt */
@media (min-width: 861px) and (max-height: 839px) {
  .fd-phone { --fd-phone-k: .72; }
}

/* ── Agent B1 29.09. (E111, E113) Handy-Standard ─────────────────────────────────────────────────────────────────
   Standard für jedes Kapitel mit genau einem Handy (Ausnahmen: Start Motivation mit drei Handys, Produkt 03 mit zwei): Muster text-medium
   mit .fd-phone in .fd-ch__medien, so wie Start 01. Links Text und Kacheln (Text wird in Kacheln geteilt, nicht als Absatz gesetzt), rechts das
   Handy an der Außenkante, gemeinsame Oberkante direkt unter der H2. Optional data-kopf="breit": der Satz unter dem Titel (.fd-ch__lead) steht als
   Untertitel über beide Spalten, darunter Begleiter (.fd-ch__begleit, Kacheln) links und Handy rechts (E112, E113 Produkt 02). Die Spalten
   selbst liefern K2 Block und 7d weiter oben, hier steht nur das Gewicht: die Kachelspalte hat die Höhe des Handys, die Kacheln teilen sie gleichmäßig
   auf (grid-auto-rows: 1fr, Inhalt mittig in der Kachel), sonst bliebe links unter drei kurzen Kacheln ein Loch neben dem bildschirmhohen Handy.
   Nur ab 1048: darunter stapelt alles wie mobil (Text, Kacheln, Handy mittig auf der Spaltenachse, S80). Personenkarten (Start 01) sind keine
   .fd-tcard und bleiben unberührt. Selektorketten in 1048 und 1240 gleich lang halten (S78), deshalb nur ein Block. */
@media (min-width: 861px) {
  /* Gestapelt (861 bis 1047) stehen Kacheln und Handy auf derselben Achse: das Lesemaß (34em) gilt für Absätze, nicht für Kacheln, sonst sitzt das Handy 33 px rechts der Kacheln */
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) > .fd-ch__text:has(> .fd-carousel, > .fd-ch__begleit > .fd-carousel) { max-width: none; }
}
@media (min-width: 1048px) {
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) > .fd-ch__text:has(> .fd-carousel),
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) > .fd-ch__text > .fd-ch__begleit:has(> .fd-carousel) { display: flex; flex-direction: column; }
  .fd-ch[data-muster="text-medium"][data-kopf="breit"] .fd-ch__body:has(.fd-phone) > .fd-ch__text > .fd-ch__begleit:has(> .fd-carousel) { align-self: stretch; }
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) > .fd-ch__text > .fd-carousel,
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) > .fd-ch__text > .fd-ch__begleit > .fd-carousel { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) > .fd-ch__text > .fd-carousel > .fd-carousel__track,
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) > .fd-ch__text > .fd-ch__begleit > .fd-carousel > .fd-carousel__track { flex: 1 1 auto; grid-auto-rows: 1fr; }
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) .fd-carousel--steps .fd-tcard--step { align-content: center; }
}
/* Kachel in der Höhe des Handys ist ab 1240 größer gesetzt wie die Personenkarte in Start 01 (Symbol 64, Titel title-md, Satz body-lg), sonst wirken drei
   kurze Zeilen in 200 px hohen Kacheln leer (Stilbild §2). Bei 1048 hat die Spalte nur 394 px, dort bleibt die Kachel im Standardmaß (sonst dreizeilige Sätze
   und eine Spalte höher als das Handy) */
@media (min-width: 1240px) {
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) .fd-carousel--steps .fd-tcard--step { column-gap: var(--space-6); padding: var(--space-5) var(--space-8); }
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) .fd-carousel--steps .fd-tcard--step > .fd-tcard__media { width: 64px; height: 64px; }
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) .fd-carousel--steps .fd-tcard--step > .fd-tcard__media > svg { width: 32px; height: 32px; }
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) .fd-carousel--steps .fd-tcard--step > b { font-size: var(--type-title-md-size); line-height: var(--type-title-md-lh); }
  .fd-ch[data-muster="text-medium"] .fd-ch__body:has(.fd-phone) .fd-carousel--steps .fd-tcard--step > p { font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); }
}


/* ── Agent C 29.09. (E109) Erster Bildschirm ab 861 · ABGELÖST am 08.10.2026 durch E162 (Regeln direkt unter diesem Kommentar) ──
   Historie, die alte Fassung: ─────────────────────────────────────────────────────────────
   Hero plus das, was direkt folgt (Trust-Leiste, FAQ-Navigator), füllt bei 1440 x 900 und 1920 x 1080 genau den Bildschirm unter der
   Kopfleiste, die Kapitel erscheinen erst beim Scrollen. EINE Regel für alle Seiten mit Hero, Bezug ist das Geschwister danach (:has):
   - Hero + Trust (E127, Nachfass 29.09., ersetzt die Fassung „Trust füllt den Bildschirm mit“): Start bekommt genau denselben Hero wie die
     anderen Seiten (gleiche Innenfläche, Text und Kreis an derselben Stelle), die Trust-Leiste steht darunter und ragt nur mit --fdd-trust-peek
     (64 px, etwa die obere Hälfte der Karten) in den ersten Bildschirm, damit man sieht, dass es weitergeht. Dafür wird der Hero um den Anschnitt
     niedriger und sein unterer Innenabstand um denselben Betrag kleiner: die Innenfläche und damit die Mitte von Text und Kreis bleiben gleich.
   - Hero + FAQ-Navigator: der Navigator ist etwa 480 bis 570 px hoch, der Hero bleibt bei natürlicher Höhe und wächst nur in sehr hohen Fenstern.
   - Hero ohne Nachfolger im ersten Bild (Produkt, Preise, Team, Kontakt): der Hero füllt den ganzen ersten Bildschirm.
   Obergrenze 1024 px (sehr hohe Fenster zeigen den Anfang der Kapitel), Untergrenze ist die Inhaltshöhe des Heros (min-height hebt nur an).
   Text im Hero mittig in der Höhe, Knöpfe mit größerem Abstand zum Lead (--fdd-hero-cta), Kreis größer und an der Höhe des Bildschirms begrenzt.
   Textseiten (Rechtstexte) bleiben ausgenommen: dort steht das Dokument sofort im Bild. Mobil unverändert. ── */
/* ── 08.10.2026 (E162, ändert E109, E60, E68): Erster Bildschirm neu, Moritz-Feedback ──
   Der Hero füllt den Bildschirm nicht mehr. Er ist so hoch wie sein Inhalt plus 64 px oben und unten, damit auf dem Desktop
   (1440 x 900, 1920 x 1080) der Anfang von Kapitel 01 (oder der FAQ-Navigator) im ersten Bildschirm sichtbar ist und man sieht, dass es weitergeht.
   Ab 1048 zwei gleich breite Spalten (symmetrisch): links Titel, ein Satz, Knöpfe; rechts das Seitenbild (.fd-herobild) mittig in seiner Spalte,
   beide mittig zueinander. 861 bis 1047 wie mobil: Seitenbild klein über dem Titel (E164). Keine Sprungleiste. Textseiten unverändert. ── */
@media (min-width: 861px) {
  :root { --fdd-hero-cta: var(--space-10); --fd-herobild-kreis: 160px; --fd-herobild-h: 248px; --fd-herobild-figur: 260px; }   /* Lead → Knöpfe 40 (vorher bis 96) */
  .fd-page:not([data-seite="text"]) > .fd-hero { padding-top: var(--space-16); padding-bottom: var(--space-16); }
}
@media (min-width: 1048px) {
  /* E173: BOB ganz und hochkant in der rechten Spalte, 360 bis 480 hoch. Kapitel 01 bleibt bei 1440 x 900 und 1920 x 1080 im ersten Bildschirm (M8b) */
  :root { --fd-herobild-h: clamp(264px, 26vw, 332px); --fd-herobild-kreis: var(--fd-herobild-h); --fd-herobild-figur: clamp(360px, 32vw, 480px); --fd-herobild-pos: 50% 100%; }
  .fd-page:not([data-seite="text"]) > .fd-hero { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: var(--space-16); align-items: center; }
  .fd-page:not([data-seite="text"]) > .fd-hero .fd-herobild { order: 0; justify-content: center; margin: 0; }
  .fd-page:not([data-seite="text"]) > .fd-hero .fd-herobild--bild { overflow: visible; align-items: center; }   /* ganze Figur (E173) */
  .fd-page:not([data-seite="text"]) > .fd-hero .fd-herobild--bild > img { width: 100%; height: 100%; object-fit: contain; object-position: var(--fd-herobild-pos); }
  .fd-page:not([data-seite="text"]) > .fd-hero .fd-herobild__kreis > svg { stroke-width: 1.25px; }
  .fd-page:not([data-seite="text"]) > .fd-hero .fd-h1 { font-size: var(--type-display-lg-size); }   /* halbe Breite: 36 bis 1239, 44 ab 1240 */
}
@media (min-width: 1240px) {
  .fd-page:not([data-seite="text"]) > .fd-hero .fd-h1 { font-size: var(--type-display-xl-size); }
}

/* ── Agent B2 29.09. (E112) Sätze laufen bis zur rechten Kante der Inhaltsfläche ─────────────────────────────────
   Ursache: zwei Lesemaß-Kappen (34em = 544 px) hielten jeden Satz an der linken Kante zusammen, während Medien und Karten die ganze
   Inhaltsbreite (bis 1032 px) nutzten: `.fd-ch .fd-body` (mobil in 7c, ab 861 im Desktop-Block) und `.fd-ch__text` (ab 861). Beides fällt hier
   für alle Kapitel weg, auf allen Breiten in einer Regel (steht nach den Kappen, gleiche Spezifität, spätere Regel gewinnt, S1/S87).
   Der Satz unter dem Kapiteltitel ist damit ein Untertitel über die volle Breite, Medien und Karten stehen darunter.
   Ausnahmen (Spalte bleibt Spalte, sie begrenzt den Satz selbst): Text neben einem Handy oder Bild (Grid-Spalte, `max-width: none` gilt dort
   schon), Kopf-Split K5 (Lead im Lesemaß neben dem Begleiter), FAQ-Antworten (E71), Textseiten `.fd-doc` (Rechtstexte, eigenes Lesemaß in
   Abschnitt 9, Inhaltsverzeichnis rechts ab 1240) und das Hero-Lead (E53, Knöpfe so breit wie der Lead). Sand-Insel mit Formular (Kontakt 01):
   die Insel ist `fit-content` und würde mit einem langen Absatz auf volle Breite wachsen, dort bleibt das Lesemaß. ── */
@media (min-width: 861px) {   /* Koordinator 29.09.: erst ab Desktop, Tablet 600 bis 860 behält das Lesemaß aus Fix P6 */
  .fd-ch__text, .fd-ch .fd-body { max-width: none; }
  .fd-ch[data-flaeche="sand"]:is([data-muster="text"], [data-muster="text-medium-unten"]) :is(.fd-ch__text, .fd-body) { max-width: var(--fd-measure); }
}

/* ── Agent B2 29.09. (E113) Beispielvideo im Handy mit Play-Knopf ─────────────────────────────────────────────────
   Der Knopf liegt über dem Poster (dem Bildschirm) und deckt ihn ganz, Kreis in Orange mit weißem Symbol (E78), Hover und Aktiv Orange 700,
   Ring Orange 600 innen (außen würde der Bildschirm ihn beschneiden). Alle Zustände stehen einzeln, weil Kadence Knöpfe sonst violett färbt (S68).
   Ohne Klick bewegt sich nichts (WCAG 2.2.2). .fd-phone__ui ist relativ, damit inset 0 gegen den logischen 360 x 758 Bildschirm rechnet (S65).
   Die Abspielfläche .fd-phone__player legt das Skript erst beim Klick an. ── */
.fd-phone__ui:has(> .fd-phone__play) { position: relative; }
.fd-phone__play { position: absolute; z-index: 1; inset: 0; display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; color: var(--text-on-brand); cursor: pointer; }
.fd-phone__play:focus, .fd-phone__play:hover, .fd-phone__play:active { background: transparent; box-shadow: none; color: var(--text-on-brand); }
.fd-phone__play:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -6px; }
.fd-phone__play-kreis { display: flex; align-items: center; justify-content: center; width: 80px; height: 80px; border-radius: var(--radius-pill); background: var(--brand-primary); color: var(--text-on-brand); box-shadow: var(--shadow-md); transition: background var(--duration-fast) var(--ease-out); }
.fd-phone__play:hover .fd-phone__play-kreis, .fd-phone__play:active .fd-phone__play-kreis { background: var(--brand-active); }
.fd-phone__play-kreis svg { width: 36px; height: 36px; margin-left: 4px; fill: currentColor; }
.fd-phone__player { position: absolute; z-index: 2; inset: 0; background: var(--surface-page); }
.fd-phone__player video { display: block; width: 100%; height: 100%; object-fit: cover; }
.fd-phone__stop { position: absolute; top: 52px; right: var(--space-3); display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; margin: 0; padding: 0; border: 0; border-radius: var(--radius-pill); background: var(--brand-primary); color: var(--text-on-brand); cursor: pointer; }
.fd-phone__stop:focus, .fd-phone__stop:hover, .fd-phone__stop:active { background: var(--brand-active); color: var(--text-on-brand); box-shadow: none; }
.fd-phone__stop:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.fd-phone__stop svg { width: 20px; height: 20px; }

/* ══ 14 Weniger Bewegung ═════════════════════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .fd-js .fd-reveal { opacity: 1; transform: none; transition: none; }
  .fd-js .fd-chat__run > .is-new, .fd-chat__typing, .fd-chat__typing i, .fd-certchip__tap, .fd-certchip__tap svg *, .fd-tcard__tap svg * { animation: none !important; }
  .fd-menu, .fd-scrim, .fd-cta, .fd-top, .fd-sheet__panel, .fd-sheet__scrim, .fd-burger span { transition: none; }
  .fd-faqtile, .fd-faqtile__num, .fd-faqhit { transition: none; }
}


/* ══ 15 Zustände: Kadence-Netz und Consent-Banner (E78, 27.09.2026) ════════════
   Die Zustände der Bausteine stehen bei den Bausteinen (Kette: nur Orange und Espresso, nie Mental-Violett, Schrift auf
   Orange weiß, :focus beim Normalzustand). Kadence 1.4.5 (global.min.css) färbt button:hover/:focus/:active und
   a:hover/:focus/:active mit Palette 2 (#7970FF, 0,1,1). Hier zeigen die Theme-Variablen auf DS-Tokens, damit alles,
   was ohne eigene Regel durchrutscht (Blog, Fremd-Snippets), orange statt violett wird. Prüfung: mess-lauf.js --teil=zustaende (S68). */
body.fd-rahmen { --global-palette-highlight: var(--text-link); --global-palette-highlight-alt: var(--text-link-hover); --global-palette-btn-bg: var(--brand-primary); --global-palette-btn-bg-hover: var(--brand-primary-hover); --global-palette-btn: var(--text-on-brand); --global-palette-btn-hover: var(--text-on-brand); }

/* Consent-Banner (Snippet coachbob-consent-banner, live, E78 E4): gleiche Kette, zwei Klassen schlagen Kadence und das Snippet */
.cb-consent .cb-consent__btn--accept, .cb-consent .cb-consent__btn--accept:focus { background: var(--brand-primary); border-color: transparent; color: var(--text-on-brand); box-shadow: none; font-family: var(--font-sans); }
.cb-consent .cb-consent__btn--accept:hover { background: var(--brand-primary-hover); color: var(--text-on-brand); box-shadow: var(--shadow-md); transform: none; }
.cb-consent .cb-consent__btn--accept:active { background: var(--brand-active); color: var(--text-on-brand); box-shadow: var(--shadow-pressed); }
.cb-consent .cb-consent__btn--decline, .cb-consent .cb-consent__btn--decline:focus { background: transparent; border-color: var(--border-default); color: var(--text-primary); box-shadow: none; font-family: var(--font-sans); }
.cb-consent .cb-consent__btn--decline:hover { background: var(--surface-fill-soft); border-color: var(--brand-primary); color: var(--text-link); box-shadow: none; }
.cb-consent .cb-consent__btn--decline:active { background: var(--surface-marker); border-color: var(--brand-active); color: var(--brand-active); }
.cb-consent .cb-consent__text a { color: var(--text-link); }
.cb-consent .cb-consent__text a:hover, .cb-consent .cb-consent__text a:active { color: var(--text-link-hover); }


/* ═══ Formular Kontakt (CF7 1552), S5 ═══
   Gestaltung des Live-Formulars „coachBOB Kontakt-Hub“ (Contact Form 7, ID 1552) auf /kontakt/. E41: Felder, Wege,
   Conditional Fields und Anbindung bleiben 1:1, nur die Gestaltung ist neu. Hooks sind nur die Klassen des Live-Formulars
   (.kontakt-form, .form-field, .form-row, .form-input, .form-check, .field-help, .form-help, .ck-*) und die CF7-Klassen
   (.wpcf7*). Alles steht unter .kontakt-form oder .wpcf7, dazu der Träger .ck-form-wrap auf der Seite.
   - CF7 setzt um jede Zeile des Templates <p> und <br> (autop). Die <p> werden neutralisiert oder als Flex-Spalte genutzt.
   - Conditional Fields (Plugin 2.7.7) blendet die Gruppen [data-class="wpcf7cf_group"] mit display und einer eigenen
     Animation ein und aus. Dieser Block setzt an den Gruppen deshalb weder display noch margin noch padding: die Abstände
     kommen aus dem gap der Formularspalte (ausgeblendete Gruppen erzeugen keinen) und aus den Kindern der Gruppe.
   - Spezifität mindestens zwei Klassen, damit Kadence (input[type=…], 0,1,1) und das alte Zusatz-CSS (.btn) nicht gewinnen.
   - Fokus: ein Ring wie überall (T-13), hier ausdrücklich, weil Kadence ihn an Feldern mit outline: 0 abschaltet.
   - Mobil zuerst, ab 861 Zweierzeilen und Knopf in eigener Breite. Lokale Vorschau: tools/mock-cf7-1552.html. */

/* Träger auf der Seite (Kapitel Anfrage, Muster text-medium-unten in der Sand-Insel): Lesebreite wie der Text darüber */
.ck-form-wrap { width: 100%; max-width: var(--fd-measure); }

/* Was live das CF7-Plugin-CSS erledigt, steht hier noch einmal (die Vorschau lädt es nicht) */
.wpcf7 .hidden-fields-container { display: none; }
.wpcf7 .screen-reader-response { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
.wpcf7 .wpcf7-form { margin: 0; }
.wpcf7 .wpcf7-form-control-wrap { display: block; position: relative; }

/* Formularspalte */
.wpcf7 .kontakt-form { display: flex; flex-direction: column; gap: var(--space-6); font-family: var(--font-sans); color: var(--text-primary); }
.wpcf7 .kontakt-form p { margin: 0; }
.wpcf7 .kontakt-form br { display: none; }
.wpcf7 .kontakt-form [data-class="wpcf7cf_group"] > * + * { margin-top: var(--space-5); }
.wpcf7 .kontakt-form .form-field { display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
.wpcf7 .kontakt-form .form-field > p { display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
.wpcf7 .kontakt-form .form-row { display: grid; gap: var(--space-5); }

/* Beschriftung, Hilfetexte */
.wpcf7 .kontakt-form .form-field label { display: block; font-size: var(--type-label-lg-size); font-weight: 600; line-height: var(--type-label-lg-lh); color: var(--text-primary); }
.wpcf7 .kontakt-form label > span[aria-hidden="true"] { color: var(--brand-primary-hover); }
.wpcf7 .kontakt-form .ck-anliegen-field label { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-md-size); font-weight: var(--type-title-md-weight); line-height: var(--type-title-md-lh); }
.wpcf7 .kontakt-form .field-help { font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); }
.wpcf7 .kontakt-form .form-help { font-size: var(--type-body-md-size); line-height: var(--type-body-md-lh); color: var(--text-primary); }
.wpcf7 .kontakt-form a { color: var(--text-link); text-decoration: underline; text-underline-offset: 2px; }
.wpcf7 .kontakt-form a:hover { color: var(--text-link-hover); }

/* Felder (DS Input und Select: 48 px, Radius md, Rand stark, Schrift 16 px gegen den Zoom in iOS) */
.wpcf7 .kontakt-form .form-input { display: block; width: 100%; min-height: 48px; margin: 0; padding: var(--space-3) var(--space-4); border: 1.5px solid var(--border-strong); border-radius: var(--radius-md); background: var(--surface-card); color: var(--text-primary); font-family: var(--font-sans); font-size: var(--type-body-md-size); line-height: var(--type-body-md-lh); box-shadow: none; -webkit-appearance: none; appearance: none; transition: border-color var(--duration-fast) var(--ease-standard); }
.wpcf7 .kontakt-form .form-input[type="date"] { -webkit-appearance: auto; appearance: auto; }
.wpcf7 .kontakt-form .form-input::placeholder { color: var(--text-muted); opacity: 1; }
.wpcf7 .kontakt-form .form-input:hover { border-color: var(--text-secondary); }
.wpcf7 .kontakt-form .form-input:focus { border-color: var(--text-primary); box-shadow: none; }
/* 08.10.2026 (E171): der alte Pfeil aus zwei Verläufen ist entfernt, Pfeil und Zustände der Auswahlfelder stehen in Abschnitt 21 (Lucide chevron-down) */
.wpcf7 .kontakt-form select.form-input { padding-right: var(--space-10); cursor: pointer; }
.wpcf7 .kontakt-form textarea.form-input { height: 128px; min-height: 96px; resize: vertical; }
/* Kurs-Auswahlfeld: bleibt für CF7 und Conditional Fields die Quelle, bedient wird es über die Kacheln (faden-shared.js) */
.wpcf7 .kontakt-form select.ck-kurs-hidden { position: absolute; width: 1px; height: 1px; min-height: 0; margin: 0; padding: 0; overflow: hidden; clip-path: inset(50%); border: 0; opacity: 0; pointer-events: none; }

/* Fokus: ein Ring (T-13) für Felder, Kacheln, Aufklapper, Einwilligung und Knopf */
.wpcf7 .kontakt-form :focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }

/* Fehler (CF7 setzt .wpcf7-not-valid am Feld und den Hinweis .wpcf7-not-valid-tip in dessen Hülle) */
.wpcf7 .kontakt-form .wpcf7-not-valid, .wpcf7 .kontakt-form .form-input.wpcf7-not-valid { border-color: var(--surface-alert); box-shadow: inset 0 0 0 1px var(--surface-alert); }
.wpcf7 .kontakt-form .wpcf7-not-valid-tip { display: block; margin-top: var(--space-2); font-size: var(--type-body-sm-size); font-weight: 600; line-height: var(--type-body-sm-lh); color: var(--text-alert); }

/* Einwilligungen (acceptance): ganze Zeile ist die Trefferfläche, mindestens 44 px */
.wpcf7 .kontakt-form .form-check { display: block; font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-primary); }
.wpcf7 .kontakt-form .wpcf7-list-item { display: block; margin: 0; }
.wpcf7 .kontakt-form .wpcf7-list-item > label { display: flex; align-items: flex-start; gap: var(--space-3); min-height: 44px; padding: var(--space-3) 0; cursor: pointer; }
.wpcf7 .kontakt-form input[type="checkbox"] { flex: 0 0 auto; width: 20px; height: 20px; margin: 0; accent-color: var(--brand-primary); cursor: pointer; }

/* Aufklapper und Hinweiskasten (Kontraindikationen, Krankenkasse). display bleibt unberührt: hidden und style="display:none" des Formulars wirken */
.wpcf7 .kontakt-form .ck-info-toggle { display: inline-flex; align-items: center; gap: var(--space-2); min-height: 44px; margin: 0; padding: 0; border: 0; background: transparent; font-family: var(--font-sans); font-size: var(--type-label-lg-size); font-weight: 600; color: var(--brand-primary-hover); text-align: left; box-shadow: none; cursor: pointer; }
.wpcf7 .kontakt-form .ck-info-toggle svg { flex: 0 0 auto; width: 16px; height: 16px; transition: transform var(--duration-base) var(--ease-out); }
.wpcf7 .kontakt-form .ck-info-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }
.wpcf7 .kontakt-form .ck-info-toggle:hover, .wpcf7 .kontakt-form .ck-info-toggle:active { color: var(--text-link-hover); text-decoration: underline; text-underline-offset: 3px; }
.wpcf7 .kontakt-form .ck-info-note { padding: var(--space-4); border: 1px solid var(--border-default); border-radius: var(--radius-md); background: var(--surface-card); font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-primary); }
.wpcf7 .kontakt-form .ck-info-note > * + * { margin-top: var(--space-2); }

/* Kurs-Kacheln: eine Zeile je Kurs (Bild, Titel, Haken, darunter Kursname oder „Bald verfügbar“), mobil wie Desktop */
.wpcf7 .kontakt-form .ck-kurs-tiles { display: grid; gap: var(--space-3); }
.wpcf7 .kontakt-form .ck-kurs-tiles > p,
.wpcf7 .kontakt-form .ck-kurs-tile > p { display: contents; }
.wpcf7 .kontakt-form .ck-kurs-tile { display: grid; grid-template-columns: 56px minmax(0, 1fr) 24px; grid-template-areas: "bild titel haken" "bild text text"; align-items: start; gap: var(--space-1) var(--space-4); width: 100%; min-height: 44px; margin: 0; padding: var(--space-3); border: 1.5px solid var(--border-default); border-radius: var(--radius-lg); background: var(--surface-card); color: var(--text-primary); font-family: var(--font-sans); text-align: left; box-shadow: none; }
.wpcf7 .kontakt-form button.ck-kurs-tile { cursor: pointer; -webkit-appearance: none; appearance: none; transition: border-color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard); }
.wpcf7 .kontakt-form button.ck-kurs-tile:not([aria-pressed="true"]):hover { border-color: var(--brand-primary); }
.wpcf7 .kontakt-form button.ck-kurs-tile:not([aria-pressed="true"]):active { border-color: var(--brand-active); background: var(--surface-fill-soft); }
.wpcf7 .kontakt-form .ck-kurs-tile[aria-pressed="true"] { border-color: var(--brand-primary); background: var(--state-selected); box-shadow: inset 0 0 0 1px var(--brand-primary); }
.wpcf7 .kontakt-form .ck-kurs-tile--soon { border-style: dashed; background: transparent; }
.wpcf7 .kontakt-form .ck-kurs-tile-img { grid-area: bild; display: block; width: 56px; height: 56px; overflow: hidden; border-radius: var(--radius-md); background: var(--surface-fill); }
.wpcf7 .kontakt-form .ck-kurs-tile-img img { display: block; width: 100%; height: 100%; object-fit: cover; }
.wpcf7 .kontakt-form .ck-kurs-tile-title { grid-area: titel; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 600; line-height: var(--type-title-sm-lh); color: var(--text-primary); overflow-wrap: break-word; }
.wpcf7 .kontakt-form .ck-kurs-tile--soon .ck-kurs-tile-title { color: var(--text-secondary); }
.wpcf7 .kontakt-form .ck-kurs-tile-official { grid-area: text; font-size: var(--type-label-md-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); overflow-wrap: break-word; }
.wpcf7 .kontakt-form .ck-kurs-tile-badge { grid-area: text; justify-self: start; padding: var(--space-1) var(--space-2); border-radius: var(--radius-pill); background: var(--surface-fill); font-size: var(--type-label-sm-size); font-weight: 700; letter-spacing: var(--tracking-label); color: var(--text-secondary); }
.wpcf7 .kontakt-form .ck-kurs-tile-check { grid-area: haken; display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; border: 1.5px solid var(--border-strong); border-radius: var(--radius-pill); color: transparent; }
.wpcf7 .kontakt-form .ck-kurs-tile-check svg { width: 14px; height: 14px; }
.wpcf7 .kontakt-form .ck-kurs-tile[aria-pressed="true"] .ck-kurs-tile-check { border-color: var(--brand-primary); background: var(--brand-primary); color: var(--text-on-brand); }
.wpcf7 .kontakt-form .form-field:has(.ck-kurs-hidden.wpcf7-not-valid) .ck-kurs-tile:not(.ck-kurs-tile--soon) { border-color: var(--surface-alert); }

/* Absenden: werbender Knopf (R-E, 56 px). CF7 sperrt ihn, bis die Einwilligung angehakt ist */
.wpcf7 .kontakt-form .wpcf7-submit { display: inline-flex; align-items: center; justify-content: center; width: 100%; min-height: 56px; margin: 0; padding: var(--space-4) var(--space-8); border: 1.5px solid transparent; border-radius: var(--radius-pill); background: var(--brand-primary); color: var(--text-on-brand); font-family: var(--font-sans); font-size: var(--type-body-lg-size); font-weight: 700; letter-spacing: var(--tracking-tight); line-height: 1.2; box-shadow: none; cursor: pointer; -webkit-appearance: none; appearance: none; transition: background var(--duration-base) var(--ease-standard), box-shadow var(--duration-base) var(--ease-standard); }
.wpcf7 .kontakt-form .wpcf7-submit:hover { background: var(--brand-primary-hover); box-shadow: var(--shadow-md); }
.wpcf7 .kontakt-form .wpcf7-submit:active { background: var(--brand-active); box-shadow: var(--shadow-pressed); }
.wpcf7 .kontakt-form .wpcf7-submit:disabled { background: var(--surface-marker); color: var(--text-secondary); box-shadow: none; cursor: not-allowed; }
.wpcf7 .wpcf7-form .wpcf7-spinner { display: none; width: 24px; height: 24px; margin: 0 var(--space-4); padding: 0; border: 2px solid var(--border-default); border-top-color: var(--brand-primary); border-radius: var(--radius-pill); background: transparent; vertical-align: middle; }
.wpcf7 .wpcf7-form .wpcf7-spinner::before { content: none; }
.wpcf7 .wpcf7-form.submitting .wpcf7-spinner { display: inline-block; visibility: visible; animation: ckDreh calc(var(--duration-slow) * 3) linear infinite; }
@keyframes ckDreh { to { transform: rotate(360deg); } }

/* Rückmeldung nach dem Absenden (CF7 setzt die Klasse am form: invalid, unaccepted, failed, spam, sent) */
.wpcf7 .wpcf7-form .wpcf7-response-output { margin: var(--space-6) 0 0; padding: var(--space-4) var(--space-5); border: 1.5px solid var(--border-default); border-radius: var(--radius-md); background: var(--surface-card); font-family: var(--font-sans); font-size: var(--type-body-md-size); line-height: var(--type-body-md-lh); color: var(--text-primary); }
.wpcf7 .wpcf7-form .wpcf7-response-output:empty,
.wpcf7 .wpcf7-form.init .wpcf7-response-output,
.wpcf7 .wpcf7-form.resetting .wpcf7-response-output,
.wpcf7 .wpcf7-form.submitting .wpcf7-response-output { display: none; }
.wpcf7 .wpcf7-form.invalid .wpcf7-response-output,
.wpcf7 .wpcf7-form.unaccepted .wpcf7-response-output,
.wpcf7 .wpcf7-form.payment-required .wpcf7-response-output,
.wpcf7 .wpcf7-form.failed .wpcf7-response-output,
.wpcf7 .wpcf7-form.aborted .wpcf7-response-output,
.wpcf7 .wpcf7-form.spam .wpcf7-response-output { border-color: var(--border-alert); background: var(--surface-alert-subtle); color: var(--text-alert); }
/* Danke-Zustand: CF7 leert das Formular, Conditional Fields blendet die Gruppen wieder aus, die Meldung bleibt stehen */
.wpcf7 .wpcf7-form.sent .wpcf7-response-output { display: flex; align-items: flex-start; gap: var(--space-3); border-color: var(--border-success); background: var(--surface-success-subtle); color: var(--text-success); font-weight: 600; }
.wpcf7 .wpcf7-form.sent .wpcf7-response-output::before { content: ''; flex: 0 0 auto; width: 8px; height: 14px; margin: 2px var(--space-1) 0; border: solid currentColor; border-width: 0 2px 2px 0; transform: rotate(45deg); }

@media (min-width: 861px) {
  .wpcf7 .kontakt-form .form-row { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-5) var(--space-4); }
  .wpcf7 .kontakt-form .wpcf7-submit { width: auto; }
}

@media (prefers-reduced-motion: reduce) {
  .wpcf7 .kontakt-form .form-input, .wpcf7 .kontakt-form button.ck-kurs-tile, .wpcf7 .kontakt-form .ck-info-toggle svg, .wpcf7 .kontakt-form .wpcf7-submit { transition: none; }
  .wpcf7 .wpcf7-form.submitting .wpcf7-spinner { animation: none; }
}

/* ── Agent F 29.09. (E119, E120): App-Band, QR-Sheet, Reihe mit wenigen Karten ─────────────────────────────────────────
   App-Band (Produkt, zwischen Kapitel 01 und 02): dasselbe Band wie „Deine Daten, unsere Verantwortung“ (.fd-band, .fd-band__scroll,
   .fd-certchip), aber die Kacheln sind Links (a) mit Symbol im Kreis (.fd-tcard__media--icon, Farbregel E114 kommt von dort), Titel und
   einer Zeile Meta. Modifier .fd-band--app nur für Größen; zweites Band je Seite nur mit diesem Modifier (Vertrag §2, Lint V-01b). */
.fd-certchip, .fd-certchip:hover, .fd-certchip:focus, .fd-certchip:active { text-decoration: none; }
.fd-certchip__txt { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; text-align: left; line-height: 1.25; }
.fd-certchip__txt b { font-weight: 700; }
.fd-certchip__meta { font-size: var(--type-label-sm-size); font-weight: 500; white-space: normal; color: var(--text-secondary); }
.fd-band--app .fd-certchip { min-height: 56px; padding-block: var(--space-2); }
.fd-band--app .fd-tcard__media { width: 32px; height: 32px; }
.fd-band--app .fd-tcard__media > svg { width: 18px; height: 18px; }
@media (min-width: 861px) {
  .fd-band--app .fd-certchip { padding-block: 0; }
  .fd-band--app .fd-tcard__media { width: 48px; height: 48px; }
  .fd-band--app .fd-tcard__media > svg { width: 24px; height: 24px; }
}
/* QR-Code im Sheet (nur ab 861 mit feinem Zeiger geöffnet, faden-shared.js). Unter 861 nie sichtbar, auch nicht nach einem Größenwechsel */
.fd-sheet__body:has(.fd-sheet__qr) { text-align: center; }
.fd-sheet__body:has(.fd-sheet__qr) h3 { padding-left: var(--space-10); }
.fd-sheet__qr { display: block; width: 240px; max-width: 100%; height: auto; aspect-ratio: 1; margin: var(--space-4) auto; border-radius: var(--radius-lg); background: var(--surface-card); box-shadow: 0 0 0 1px var(--border-default); }
@media (max-width: 860.98px) { .fd-sheet__qr { display: none; } }
/* Reihe mit höchstens drei Karten (Preise 01, E119): ab 1240 passen alle nebeneinander, dann füllen sie die volle Breite ohne Peek-Platz und
   ohne Pfeile. Bis 1239 bleibt es die scrollbare Reihe (E72). */
@media (min-width: 1240px) {
  .fd-carousel[data-car-desktop]:not(:has(> .fd-carousel__track > :nth-child(4))) > .fd-carousel__track .fd-tcard { flex: 1 1 0; }
  .fd-carousel[data-car-desktop]:not(:has(> .fd-carousel__track > :nth-child(4))) > .fd-carousel__nav { display: none; }
}

/* ── Agent A 29.09. (E121) Mobil nie zwei Demo-Knöpfe zugleich ──
   Solange der Hero-Knopf, ein Kapitel-Knopf (data-cta-inline) oder der klebende Knopf im Bild ist, setzt faden-shared.js html.fd-demo-eins,
   dann ruht der kleine Demo-Knopf in der Kopfleiste (nur unter 861, dort gibt es den klebenden Knopf). Ohne JS bleibt er stehen. */
/* 11.10.2026: Regel entfernt. Der Kopf trägt keinen Demo-Knopf mehr („Kontakt“ und „Lizenz kaufen“, Abschnitt 29), es gibt keine doppelten Demo-Knöpfe mehr
   zu verhindern. faden-shared.js setzt html.fd-demo-eins weiter, die Klasse hat keine Wirkung mehr. */

/* ── Agent A 29.09. (E123) Kontakt: Wege und Unterlagen mittig auf einer Ebene ──
   .fd-ch__nach--mitte zentriert die Überschrift, .fd-wege--mitte die Karten (ab 1048 drei gleich breite Karten in der Mitte),
   .fd-wege--vier die Unterlagen (ab 861 zwei mal zwei Karten, höchstens 400 px breit, mittig, mobil eine Spalte; vier in einer Reihe brachen „Nutzungsbedingungen“ mitten im Wort). Reihenfolge der Regeln nicht ändern (gleiche Spezifität). */
.fd-ch__nach--mitte > .fd-h3 { text-align: center; }
.fd-wege--mitte { justify-content: center; }
@media (min-width: 861px) {
  .fd-wege--mitte:not(.fd-wege--vier) { grid-template-columns: repeat(auto-fit, minmax(240px, 320px)); }
  .fd-wege--vier { grid-template-columns: repeat(2, minmax(0, 400px)); }
}
@media (min-width: 1048px) {
  .fd-wege--mitte:not(.fd-wege--vier) { grid-template-columns: repeat(3, minmax(0, 320px)); }
}
/* Reihe im Kapitel (E119): der negative Spurrand (Platz für den Kartenschatten, Regel data-car-desktop) fiel mit dem Rand von .fd-ch__medien
   zusammen (Randkollaps) und ließ Text → Medien 8 px kürzer messen, obwohl die Karten richtig standen (M7 32 statt 40). flow-root am
   Karussell hält den Spurrand darin, die Karten stehen unverändert. Trust-Leiste bleibt ausgenommen (E68, 112 px). */
.fd-ch__medien > .fd-carousel[data-car-desktop] { display: flow-root; }
/* Preise 01 (E119, E112): Kopf breit auch für text-karten. Statt Lead links im Lesemaß und Begleiter rechts (K5, brach den Preis-Satz und den
   Knopf in eine schmale Spalte) steht der Lead über die volle Breite, darunter in einer Zeile der Demo-Satz mit Knopf, dann die Reihe. */
@media (min-width: 1048px) {
  .fd-ch[data-muster="text-karten"][data-kopf="breit"] .fd-ch__text:has(> .fd-ch__begleit) { display: block; }
  .fd-ch[data-muster="text-karten"][data-kopf="breit"] .fd-ch__text > .fd-ch__lead .fd-body { max-width: none; }
  .fd-ch[data-muster="text-karten"][data-kopf="breit"] .fd-ch__text > .fd-ch__begleit { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-4) var(--space-8); margin-top: var(--space-6); }
  .fd-ch[data-muster="text-karten"][data-kopf="breit"] .fd-ch__begleit > * { margin-top: 0; }
}

/* ── Agent G 29.09. (E122, E128) Team: Zeitlinie, Experten-Porträts, Logo-Platzhalter, Deutschlandkarte, Klick-Hinweis an einer Karte ──────────
   Zeitlinie .fd-zeit (Kapitel „Unsere Geschichte“, ein Medium in text-breit): ein geschwungener Pfad in Markenfarbe, sechs Stationen mit kleiner
   Kachel. Bis 1047 senkrecht und zentriert (Pfad läuft zwischen den Kacheln in S-Kurven, Punkt am oberen Kachelrand, feste Zeilenhöhe 168 = viewBox 1008),
   ab 1048 quer über die volle Breite, Kacheln abwechselnd über und unter dem Pfad (viewBox 1000 x 440 = 440 px Höhe, Punkt liegt genau auf dem Pfad,
   Stationen bei 12 % + k x 15,2 %, damit die halbe Kachelbreite (24cqi / 2) nie links über die Textkante reicht). Pfad ohne Verzerrung der Linie (non-scaling-stroke). */
.fd-zeit { position: relative; width: 100%; max-width: 420px; margin: 0 auto; container-type: inline-size; }
.fd-zeit__pfad { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.fd-zeit__pfad path { fill: none; stroke: var(--brand-primary); stroke-width: 3px; stroke-linecap: round; stroke-linejoin: round; }
.fd-zeit__pfad--quer { display: none; }
.fd-zeit__liste { position: relative; }
.fd-zeit__station { position: relative; height: 168px; }
.fd-zeit__punkt { position: absolute; z-index: 1; left: 50%; top: 14px; width: 16px; height: 16px; margin: -8px 0 0 -8px; border-radius: var(--radius-pill); background: var(--brand-primary); box-shadow: 0 0 0 4px var(--surface-page); }
.fd-zeit__kachel { position: absolute; left: 50%; top: 14px; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: var(--space-1); width: min(260px, 100%); padding: var(--space-5) var(--space-4) var(--space-4); text-align: center; background: var(--surface-card); border: 1px solid var(--border-default); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); }
.fd-zeit__datum { min-height: 20px; font-size: var(--type-label-sm-size); font-weight: 600; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); }
.fd-zeit__kachel b { display: block; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 600; line-height: var(--type-title-sm-lh); color: var(--text-primary); overflow-wrap: break-word; }
.fd-zeit__kachel p { margin: 0; font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-primary); }
@media (min-width: 1048px) {
  .fd-zeit { max-width: none; height: 440px; }
  .fd-zeit__pfad--hoch { display: none; }
  .fd-zeit__pfad--quer { display: block; }
  .fd-zeit__liste { position: absolute; inset: 0; }
  .fd-zeit__station { position: absolute; top: 0; height: 100%; width: 0; }
  .fd-zeit__station:nth-child(1) { left: 12%; }
  .fd-zeit__station:nth-child(2) { left: 27.2%; }
  .fd-zeit__station:nth-child(3) { left: 42.4%; }
  .fd-zeit__station:nth-child(4) { left: 57.6%; }
  .fd-zeit__station:nth-child(5) { left: 72.8%; }
  .fd-zeit__station:nth-child(6) { left: 88%; }
  .fd-zeit__punkt { left: 0; top: 148px; }
  .fd-zeit__station:nth-child(even) .fd-zeit__punkt { top: 292px; }
  .fd-zeit__kachel { left: 0; top: auto; bottom: 314px; width: min(250px, 24cqi); padding: var(--space-4); }
  .fd-zeit__station:nth-child(even) .fd-zeit__kachel { top: 314px; bottom: auto; }
}

/* Experten-Porträts (Team 03): acht gleich große Kacheln 4:5, mobil 2 Spalten, ab 861 vier. Personen ohne Foto und Themen ohne Namen zeigen dieselbe Fläche
   mit Silhouette (Lucide user-round, E122). Fläche Sand, Linie Espresso (E114). Bald ein Foto: img statt .fd-crop__platz, nichts sonst ändern. */
.fd-experten { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-5) var(--space-3); width: 100%; }
.fd-experten > * { min-width: 0; }
.fd-crop__platz { display: flex; align-items: center; justify-content: center; width: 100%; aspect-ratio: 4 / 5; border-radius: var(--radius-lg); background: var(--surface-fill); color: var(--text-primary); }
.fd-crop__platz svg { width: 44%; height: auto; }
.fd-experten .fd-crop__caption > span:first-child { display: inline; }
.fd-experten .fd-crop__caption > span + span { display: block; margin-top: var(--space-1); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-lg-size); font-weight: 600; text-transform: none; color: var(--text-primary); }
@media (min-width: 861px) {
  .fd-experten { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-8) var(--space-5); }
}

/* Logo-Kacheln (Team 05 Partner): Fläche Sand mit dem Firmenlogo (img), bis das Logo geliefert ist der Platzhalter .fd-ph. Darunter Name und eine Zeile. */
.fd-partnerlogo { display: flex; flex-direction: column; align-items: stretch; gap: var(--space-3); width: 100%; margin: 0; }
.fd-ch__medien > .fd-partnerlogo { align-self: start; }   /* beide Logo-Kacheln gleich breit und mit gemeinsamer Oberkante */
.fd-partnerlogo__platz { display: flex; align-items: center; justify-content: center; aspect-ratio: 16 / 9; padding: var(--space-4); border-radius: var(--radius-lg); background: var(--surface-fill); text-align: center; }
.fd-partnerlogo__platz img { display: block; max-width: 70%; max-height: 60%; object-fit: contain; }
.fd-partnerlogo__name { display: flex; flex-direction: column; gap: 2px; }
.fd-partnerlogo__name b { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 600; line-height: var(--type-title-sm-lh); color: var(--text-primary); }
.fd-partnerlogo__name span { font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); }
@media (max-width: 860.98px) {
  .fd-ch[data-muster="text-2medien"] .fd-ch__medien:has(> .fd-partnerlogo) { grid-template-columns: minmax(0, 1fr); gap: var(--space-5); }
}

/* Deutschlandkarte (Team 06): Umriss Natural Earth (gemeinfrei, Paket world-atlas 2, countries-50m, vereinfacht). Die Schutzlinie ist ein Ring im Abstand
   von 18 Einheiten: ein breiter Strich in Markenfarbe (gestrichelt) unter einem etwas schmaleren Strich in Seitenfarbe unter der Landfläche, sichtbar bleibt nur der
   äußere Rand des Rings. Punkte und Texte zeigen keine Zustände. Schrift aus Tokens. */
.fd-karte { margin: 0; width: 100%; max-width: 420px; }
.fd-karte svg { display: block; width: 100%; height: auto; }
.fd-karte__ring { fill: none; stroke: var(--brand-primary); stroke-width: 41px; stroke-linejoin: round; }
.fd-karte__luecke { fill: none; stroke: var(--surface-page); stroke-width: 36px; stroke-linejoin: round; }
.fd-karte__land { fill: var(--surface-fill); stroke: var(--text-primary); stroke-width: 1.5px; stroke-linejoin: round; }
.fd-karte__punkt { fill: var(--text-primary); stroke: var(--surface-page); stroke-width: 2.5px; }
.fd-karte__punkt--daten { stroke: var(--brand-primary); stroke-width: 3px; }
.fd-karte__text { font-family: var(--font-sans); font-size: var(--type-label-lg-size); font-weight: 600; fill: var(--text-primary); }
.fd-karte__text--links { text-anchor: end; }
.fd-karte text { display: inline; }   /* ohne Wirkung auf SVG-Text, aber die Messung M1 nimmt dann die Karte als Träger statt des Textelements selbst (Rundungsfunde von unter 2 px, Agent C 29.09.) */
.fd-karte__etikett rect { fill: var(--surface-page); stroke: var(--brand-primary); stroke-width: 1.5px; }
.fd-karte__etikett text { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-lg-size); font-weight: 600; fill: var(--text-primary); }

/* Team 02 mit sieben Personenkarten: ab 1240 vier Spalten (4 + 3) statt 3 + 3 + 1, keine einzelne Karte in der letzten Zeile. Kompakter Kartenrand, damit Rolle und Name lesbar bleiben. */
@media (min-width: 1240px) {
  .fd-carousel__track:has(> li:nth-child(7)):not(:has(> li:nth-child(8))) { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-3); }
  .fd-carousel__track:has(> li:nth-child(7)):not(:has(> li:nth-child(8))) .fd-tcard__btn { gap: var(--space-3); padding: var(--space-4); }
}

/* Klick-Hinweis an genau einer Personenkarte (E122, E83, E96): Symbol nur an der ersten Karte (Seiten-HTML), Takt alle 5 s von selbst wie am Zertifikats-Band
   (dieselben Keyframes), Ruhe nach dem ersten Öffnen oder Fokus (.is-ruhig aus faden-shared.js, WCAG 2.2.2). Weniger Bewegung: Abschnitt 14 stoppt .fd-tcard__tap svg * */
.fd-js .fd-tcard__tap--takt .fd-tap__cur { animation: fdTapTaktCur 5s var(--ease-out) .8s infinite both; }
.fd-js .fd-tcard__tap--takt .fd-tap__ray { animation: fdTapTaktRay 5s var(--ease-out) .8s infinite both; }
.fd-js [data-takt].is-ruhig .fd-tcard__tap--takt .fd-tap__cur, .fd-js [data-takt].is-ruhig .fd-tcard__tap--takt .fd-tap__ray { animation: none; }

/* ══ 16 Konzept D und Handy v9 (E130, E131, 01.10.2026, Cloud-Session) ═══════════════════════════════════════════════
   E130: Aussagen mit Trennlinien (Layoutstudie D, demos/handy-text-optionen.html) ist der Standard für jedes Kapitel mit Handy und für
   reine Aussage-Listen. Muster data-muster="aussagen": in .fd-ch__text optional ein Einstieg (.fd-aussagen__einstieg, ein Satz), dann
   ul/ol.fd-aussagen mit 3 bis 5 Aussagen (je eine Zeile, feine Linie darunter). Rechts höchstens ein Medium: v9-Handy, Karte oder Bild.
   Mobil und bis 1047: Text, darunter das Medium mittig. Ab 1048: Text links, Medium rechts an der Außenkante, beide auf einer Mittelachse.
   E131: Handy nur noch als v9-Standard. figure.fd-phone.fd-phone--v9 > .fd-phone__screen > iframe.fd-phone__v9 (assets/v9/v9.html?ansicht=…).
   Der echte App-Prototyp v9 läuft im Bildschirm des Bild3-Rahmens (Vektor wie E90), logisch 390 x 821 (Seitenverhältnis des Bildschirms 360 x 758),
   skaliert auf die Bildschirmbreite: --fd-v9-s = Bildschirmbreite / 390 (faden-shared.js misst nach, ohne JS gilt der Wert für 270 px).
   Keine Scrollbar im Handy: die blendet v9.html selbst aus (scrollbar-width none), die Seite gibt dem iframe kein Scrollen. */
:root {
  --fd-v9-w: min(270px, calc(100vw - var(--fd-inset) - var(--fd-gutter)));   /* eine Handygröße für die ganze Website */
  --fd-v9-s: .632548;   /* 270 * 360 / 394 / 390 */
}
.fd-phone.fd-phone--v9 { --fd-phone-w: var(--fd-v9-w); width: var(--fd-v9-w); max-width: 100%; }
.fd-phone--v9 .fd-phone__screen { background: var(--surface-page); }
.fd-phone__v9 { position: absolute; left: 0; top: 0; display: block; width: 390px; height: 821px; border: 0; background: transparent; transform: scale(var(--fd-v9-s)); transform-origin: 0 0; color-scheme: light; }

.fd-ch[data-muster="aussagen"] .fd-ch__body { display: block; }
.fd-ch[data-muster="aussagen"] .fd-ch__text { max-width: none; }
.fd-ch[data-muster="aussagen"] .fd-ch__medien { justify-items: center; margin-top: var(--space-10); }
.fd-aussagen__einstieg { margin: 0; font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); color: var(--text-secondary); max-width: var(--fd-measure); }
.fd-ch__text > .fd-aussagen__einstieg + .fd-aussagen { margin-top: var(--space-2); }
.fd-aussagen { margin: 0; padding: 0; list-style: none; counter-reset: fd-aussage; }
.fd-aussagen > li { position: relative; margin: 0; padding: var(--space-5) 0 var(--space-3); border-bottom: 1px solid var(--border-default);
  font-family: var(--font-sans); font-size: var(--type-title-md-size); font-weight: 500; line-height: var(--type-title-md-lh); color: var(--text-primary); text-wrap: pretty; }
.fd-aussagen > li:first-child { padding-top: var(--space-2); }
.fd-aussagen b, .fd-aussagen strong { font-weight: 700; }
/* Reihenfolge (ol, Setup): kleine Nummer vor der Aussage, gleiche Linie, keine Kachel */
ol.fd-aussagen > li { counter-increment: fd-aussage; display: grid; grid-template-columns: var(--space-8) minmax(0, 1fr); column-gap: var(--space-3); align-items: baseline; }
ol.fd-aussagen > li::before { content: counter(fd-aussage, decimal-leading-zero); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-md-size); font-weight: 600; color: var(--text-secondary); }
.fd-ch[data-muster="aussagen"] .fd-ch__medien > .fd-crop { width: 100%; max-width: 560px; }
/* Nachsatz unter der Liste (optional, einmal): ein Satz, ein Knopf oder der Quellen-Knopf .fd-info */
.fd-aussagen__nach { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3) var(--space-6); margin-top: var(--space-6); }
.fd-aussagen__nach > * { margin: 0; }
.fd-aussagen__nach > .fd-body { flex: 1 1 18em; color: var(--text-secondary); }
.fd-aussagen .fd-problem__mark { font-weight: 600; }

@media (min-width: 861px) {
  :root { --fd-v9-w: 270px; }
  .fd-ch[data-muster="aussagen"] .fd-ch__medien { margin-top: var(--fdd-media); }
  .fd-aussagen > li { padding: var(--space-6) 0 var(--space-4); font-size: var(--type-title-lg-size); line-height: var(--type-title-lg-lh); }
  .fd-aussagen > li:first-child { padding-top: var(--space-2); }
  ol.fd-aussagen > li { grid-template-columns: var(--space-10) minmax(0, 1fr); }
}
@media (min-width: 1048px) {
  /* Paar aus Aussagen und Medium: gemeinsame Mittelachse, Medium an der Außenkante, Text höchstens 640 breit (eine Aussage = eine bis zwei Zeilen) */
  .fd-ch[data-muster="aussagen"] .fd-ch__body:has(> .fd-ch__medien) { display: grid; grid-template-columns: minmax(0, 640px) auto; justify-content: space-between; column-gap: var(--space-16); align-items: center; max-width: 1040px; }
  .fd-ch[data-muster="aussagen"] .fd-ch__body:has(> .fd-ch__medien) > .fd-ch__medien { margin-top: 0; justify-items: end; }
  /* Spiegel (data-medium="links"): folgen zwei Aussage-Kapitel aufeinander, wechselt das Medium die Seite (Stilbild: nie dreimal dieselbe Komposition) */
  .fd-ch[data-muster="aussagen"][data-medium="links"] .fd-ch__body:has(> .fd-ch__medien) { grid-template-columns: auto minmax(0, 640px); }
  .fd-ch[data-muster="aussagen"][data-medium="links"] .fd-ch__body:has(> .fd-ch__medien) > .fd-ch__medien { order: -1; justify-items: start; }
  /* Ohne Medium: Aussagen über die Satzbreite (E112), Zeilenlänge bleibt lesbar */
  .fd-ch[data-muster="aussagen"] .fd-ch__body:not(:has(> .fd-ch__medien)) .fd-aussagen > li { max-width: 46em; }
}
@media (min-width: 1240px) {
  .fd-aussagen > li { padding: var(--space-8) 0 var(--space-4); font-size: var(--type-display-md-size); line-height: var(--type-display-md-lh); }
  .fd-aussagen > li:first-child { padding-top: var(--space-2); }
  .fd-aussagen__einstieg { font-size: var(--type-title-md-size); line-height: var(--type-title-md-lh); }
}

/* ── Feinschliff Anzeige (01.10.2026, Cloud-Session) ── */
/* Zitat-Karte in der Trust-Leiste (E132): das Zitat liest sich als Satz, nicht als Titel, damit die Karte nicht höher wird als die übrigen */
.fd-tcard--zitat b { font-family: var(--font-sans); letter-spacing: normal; font-size: var(--type-label-lg-size); font-weight: 500; line-height: var(--type-label-lg-lh); text-wrap: pretty; }
.fd-tcard--zitat b .fd-tcard__meta { font-weight: 600; }
@media (max-width: 860.98px) {
  /* Fußzeile mobil: vier Rechtslinks als 2 x 2, nie ein einzelner Link allein in der letzten Zeile (Mobil-Bericht P3) */
  .fd-footer__nav ul { display: grid; grid-template-columns: repeat(2, max-content); justify-content: center; column-gap: var(--space-6); }
  /* Kontakt: das Nachrichtenfeld zeigt den ganzen Beispieltext, er wird mobil nicht abgeschnitten */
  .wpcf7 .kontakt-form textarea.form-input { height: 168px; }
  /* Dashboard-Ausschnitt mobil (K7: nur die zwei Kennzahl-Kacheln, 372/744 px): auf Tablets nicht über die Lesegröße hinaus aufziehen, sonst wirken die Kacheln riesig und unscharf */
  .fd-ch__medien > .fd-crop--lift:has(picture) { max-width: 440px; margin-inline: auto; }
}

/* 17 Team: Praxis- und Partner-Links (E136, 07.10.2026). Trefferfläche 44 px wie .fd-link (M5) */
.fd-experten .fd-crop__caption > a, .fd-partnerlogo__name > a { display: inline-flex; align-items: center; gap: var(--space-1); min-height: 44px; min-width: 44px; }
/* Fokusfund Z5 (13.10.2026): der Partner-Link streckte sich in der Spalte über die ganze Kartenbreite, der Fokusring war ein 430-px-Kasten mit scharfen Ecken
   direkt am Text (am Handy lag seine Ecke unter dem Nach-oben-Knopf). Jetzt so breit wie der Link, gerundeter Ring mit 4 px Luft (outline-offset, das Layout bleibt) */
.fd-partnerlogo__name > a { align-self: flex-start; border-radius: var(--radius-sm); }
.fd-partnerlogo__name > a:focus-visible { outline-offset: 4px; }
/* Fokusfund Z5 (13.10.2026): nach einem Mausklick bleibt der Link im :focus und Kadence (a:focus) färbte ihn auf die Hover-Farbe (#803D17 → #652B08), er sah anders aus
   als vorher. :focus steht beim Normalzustand wie bei .fd-link (S68), Hover und Gedrückt behalten die dunklere Farbe */
.fd-experten .fd-crop__caption > a, .fd-experten .fd-crop__caption > a:visited, .fd-experten .fd-crop__caption > a:focus,
.fd-partnerlogo__name > a, .fd-partnerlogo__name > a:visited, .fd-partnerlogo__name > a:focus { color: var(--text-link); }
.fd-experten .fd-crop__caption > a:hover, .fd-experten .fd-crop__caption > a:active, .fd-partnerlogo__name > a:hover, .fd-partnerlogo__name > a:active { color: var(--text-link-hover); }
.fd-tcard__media--de { background: none; }   /* Kommentar start-1 (Jan 07.10.): der ganze Kreis in Deutschlandfarben statt Flagge im Sand-Kreis, Ausnahme zu E124 */
.fd-tcard__media--de img { width: 100%; height: 100%; }
.fd-personas--ansicht { grid-template-columns: repeat(2, max-content); justify-content: start; }   /* Umschalter Heute/Wochenplan (07.10.), Breite nach Inhalt statt Drittel */
.fd-personas--ansicht .fd-persona { padding: var(--space-1) var(--space-4); }

/* ── Aussagen ruhiger (Jan 07.10.2026: „zu groß geschrieben, nicht sauber“, gilt website-weit nach E108) ──
   Aussage höchstens title-md statt display-md, weniger Luft. Neu: <li><b>Titel</b> Satz</li> = Titel in Clash, Satz darunter in body-lg (Jans Kachel-Logik
   „Titel ohne Punkt plus ein Satz“, Stilbild). Aussagen ohne <b> bleiben eine Zeile in title-md. */
.fd-aussagen > li { padding: var(--space-4) 0 var(--space-3); font-size: var(--type-title-md-size); line-height: var(--type-title-md-lh); }
.fd-aussagen > li:has(> b:first-child) { font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); font-weight: 400; color: var(--text-secondary); }
.fd-aussagen > li > b:first-child { display: block; margin-bottom: var(--space-1); font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-md-size); font-weight: 600; line-height: var(--type-title-md-lh); color: var(--text-primary); }
.fd-aussagen__einstieg { font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); }
@media (min-width: 861px) {
  .fd-aussagen > li { padding: var(--space-5) 0 var(--space-4); font-size: var(--type-title-md-size); line-height: var(--type-title-md-lh); }
  .fd-aussagen > li:has(> b:first-child) { font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); }
  .fd-aussagen > li:first-child { padding-top: var(--space-2); }
}
@media (min-width: 1240px) {
  .fd-aussagen > li { padding: var(--space-5) 0 var(--space-4); font-size: var(--type-title-md-size); line-height: var(--type-title-md-lh); }
  .fd-aussagen > li:has(> b:first-child) { font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); }
  .fd-aussagen > li:first-child { padding-top: var(--space-2); }
  .fd-aussagen__einstieg { font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); }
}
/* Umschalter für das Handy (07.10.): kleine Pillen-Leiste wie ein Segment-Schalter, aktive Pille weiß */
.fd-ansichten { display: inline-flex; gap: var(--space-1); padding: var(--space-1); border-radius: var(--radius-pill); background: var(--surface-fill); }
.fd-ansichten > button { min-height: 44px; padding: 0 var(--space-5); border: 0; border-radius: var(--radius-pill); background: transparent; font-family: var(--font-sans); font-size: var(--type-label-lg-size); font-weight: 600; color: var(--text-secondary); cursor: pointer; transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out); }
.fd-ansichten > button:hover { color: var(--text-primary); }
.fd-ansichten > button[aria-pressed="true"] { background: var(--surface-card); color: var(--text-primary); box-shadow: var(--shadow-sm); }
.fd-ansichten > button:focus-visible { outline: none; box-shadow: var(--shadow-focus); }
.fd-aussagen__einstieg .fd-problem__mark { display: inline; margin: 0; white-space: normal; }   /* Problem-Satz im Einstieg (04 Motivation, 07.10.) bleibt im Fluss */

/* ── Dashboard als HTML im Browser-Rahmen (07.10.2026, Jan: Dashboard v2 aus v11 direkt auf der Website, Felder mit Info bei Hover und Tipp) ──
   figure.fd-screen > .fd-screen__bar (drei Punkte) + .fd-screen__view > iframe.fd-screen__app (assets/v9/v9.html?ansicht=dashboard, logisch 1280 x 800).
   Ab 861 füllt der Rahmen die Inhaltsbreite, das Dashboard wird passend verkleinert (JS setzt --fd-screen-s). Darunter fester Maßstab 0,5 und waagerecht
   wischbar, damit Zahlen und Infos lesbar bleiben. Ausnahme zu K9 („kein Vollbild-Gerät“) wie beim Handy. */
.fd-screen { --fd-screen-s: .5; width: 100%; margin: 0; border: 1px solid var(--border-default); border-radius: var(--radius-lg); background: var(--surface-card); box-shadow: var(--shadow-md); overflow: hidden; }
.fd-screen__bar { display: flex; gap: var(--space-2); align-items: center; height: 28px; padding: 0 var(--space-3); border-bottom: 1px solid var(--border-default); background: var(--surface-fill-soft); }
.fd-screen__bar i { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--border-default); }
.fd-screen__view { position: relative; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; }
.fd-screen__view::-webkit-scrollbar { display: none; }
.fd-screen__sizer { position: relative; width: calc(1280px * var(--fd-screen-s)); height: calc(800px * var(--fd-screen-s)); }
.fd-screen__app { position: absolute; left: 0; top: 0; display: block; width: 1280px; height: 800px; border: 0; transform: scale(var(--fd-screen-s)); transform-origin: 0 0; color-scheme: light; }
.fd-screen__hinweis { margin: 0; padding: var(--space-2) var(--space-3); border-top: 1px solid var(--border-default); font-size: var(--type-label-sm-size); color: var(--text-secondary); }
@media (min-width: 861px) { .fd-screen__hinweis { display: none; } }
/* Zitat im Kapiteltext (07.10.2026, Heinrich im Dashboard-Kapitel): Foto rund, Zitat in Clash, Name klein. Kein Karussell, keine Karte */
.fd-zitat { display: grid; grid-template-columns: 56px minmax(0, 1fr); column-gap: var(--space-4); align-items: center; margin: var(--fd-space-content) 0 0; padding: var(--space-4) var(--space-5); border-radius: var(--radius-lg); background: var(--surface-fill); max-width: 46em; }
.fd-zitat > img { grid-row: span 2; width: 56px; height: 56px; border-radius: var(--radius-pill); object-fit: cover; }
.fd-zitat > blockquote { margin: 0; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 500; line-height: var(--type-title-sm-lh); color: var(--text-primary); }
.fd-zitat > figcaption { margin-top: var(--space-1); font-size: var(--type-label-md-size); font-weight: 600; color: var(--text-secondary); }
.fd-screen__view:focus-visible { outline: none; box-shadow: inset var(--shadow-focus); }

/* ── Runde 3 Jan 07.10.2026 ── */
/* Mehr Luft zwischen Kapiteltitel und Inhalt (--fdd-heading 24 → 40 oben), Handy ab 861 etwas größer für die Lesbarkeit (270 → 300) */
@media (min-width: 861px) { :root { --fd-v9-w: 300px; } }
/* Setup-Kacheln: Ziffern größer und lesbar (Jan: „keiner kann das lesen“) */
.fd-step__n { width: 36px; height: 36px; font-size: var(--type-label-lg-size); }
/* Handy-Wechsler (Kapitel 03 Start): zwei v11-Handys übereinander, eins sichtbar, darunter Pfeile mit Beschriftung. Kein Klick im Handy nötig */
.fd-handywechsel { display: grid; justify-items: center; gap: var(--space-4); width: var(--fd-v9-w); max-width: 100%; }
.fd-handywechsel__buehne { display: grid; width: 100%; }
.fd-handywechsel__buehne > .fd-phone { grid-area: 1 / 1; transition: opacity var(--duration-base) var(--ease-out), visibility 0s linear var(--duration-base); }
.fd-handywechsel__buehne > .fd-phone:not(.is-on) { opacity: 0; visibility: hidden; }
.fd-handywechsel__buehne > .fd-phone.is-on { transition-delay: 0s; }
.fd-handywechsel__nav { display: flex; align-items: center; gap: var(--space-3); }
.fd-handywechsel__label { min-width: 7em; text-align: center; font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-lg-size); font-weight: 600; color: var(--text-primary); }
@media (prefers-reduced-motion: reduce) { .fd-handywechsel__buehne > .fd-phone { transition: none; } }

/* 18 Personen-Sheets wie die Siegel-Sheets (07.10., Jan): großes rundes Profilbild oben, Name, Rolle, Text mittig (Aufbau .fd-cert, E115) */
.fd-cert__logo--person { width: 160px; height: 160px; border-radius: var(--radius-pill); object-fit: cover; }
.fd-sheet__body .fd-cert--person p.fd-cert__meta { margin-bottom: var(--space-6); }

/* 19 Experten-Porträts öffnen ihr Fenster (07.10., Jan): der Name ist der Knopf, die ganze Karte ist Klickfläche (::after). Zustände wie .fd-tcard__btn */
.fd-crop__mehr { display: inline-block; padding: var(--space-4) 0; margin: calc(var(--space-4) * -1) 0; border: 0; background: transparent; font: inherit; letter-spacing: inherit; color: inherit; text-align: left; cursor: pointer; }
.fd-crop__mehr:hover, .fd-crop__mehr:focus, .fd-crop__mehr:active { background: transparent; color: inherit; box-shadow: none; }
.fd-crop__mehr::after { content: ''; position: absolute; inset: 0; border-radius: var(--radius-lg); }
.fd-crop__mehr:focus-visible { outline: none; }
.fd-crop__mehr:focus-visible::after { box-shadow: var(--shadow-focus); outline: 3px solid transparent; }   /* Fokusfund Z4 (13.10.2026): der Ring liegt am ::after der Karte; die durchsichtige Kontur erscheint im Kontrastmodus (Windows, forced-colors), wo Schatten verschwinden */
.fd-crop:has(.fd-crop__mehr:hover) > img { box-shadow: var(--shadow-md); }
.fd-crop:has(.fd-crop__mehr:hover) .fd-crop__mehr { color: var(--text-link); }

/* ══ 20 Moritz-Feedback 08.10.2026 (S1, S2): App-Handys, Vollbild-Sheet, Barrierefreiheit, Siegel-Kacheln, App-Band ══════════════
   Plan _Claude/261008_PLAN_Moritz-Feedback.md, Entscheidungen E165, E166, E168, E170. Hero und Seitenbild (E162 bis E164) stehen in Abschnitt 4
   und im früheren E109-Block, der klebende Knopf (E167) in Abschnitt 12. */

/* Nur für Screenreader sichtbar (Textbeschreibung der App-Fenster, E170) */
.fd-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }

/* E168 App-Handys: mobil lebt das Handy im Text weiter (Chat läuft, Personen-Knöpfe steuern es), ist aber weder scrollbar noch bedienbar,
   damit der Daumen die Seite scrollt und nicht im Handy hängen bleibt (Scroll-Falle). Darunter der Knopf „Ausprobieren“, er öffnet die App im
   Vollbild-Sheet. Beides nur mit JS (html.fd-js), ohne JS bleibt das Handy wie bisher bedienbar (W11). Der Knopf entsteht in faden-shared.js.
   Ab 861 bleibt das Handy unverändert mit der Maus bedienbar, der Knopf ist dort nur für die Tastatur da und erscheint erst beim Fokus (E170).
   E179 (09.10.2026): data-ausprobieren="aus" am Handy oder Wechsler nimmt den Knopf ganz heraus (faden-shared.js erzeugt ihn dann nicht), das Dashboard
   bekommt nie einen. Kein CSS dafür nötig, das Handy bleibt mobil wie oben (läuft, nicht bedienbar). */
.fd-probe { margin-top: var(--space-4); }
.fd-probe svg { width: 18px; height: 18px; }
@media (max-width: 860.98px) {
  .fd-js .fd-phone--v9 .fd-phone__v9 { pointer-events: none; }
}
@media (min-width: 861px) {
  .fd-probe:not(:focus) { position: absolute; width: 1px; height: 1px; min-height: 0; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
}

/* Vollbild-Sheet für die App (E168): dasselbe Bottom Sheet (K9, E116 ohne Springen), nur höher. Die App läuft in ihrer logischen Größe
   390 x 821 und wird auf die freie Fläche skaliert (faden-shared.js setzt --fd-app-s). Mobil volle Höhe, ab 861 höchstens 92 % der Fensterhöhe */
.fd-sheet--app .fd-sheet__panel { height: 100dvh; max-height: 100dvh; border-radius: 0; }
.fd-sheet--app .fd-sheet__close { z-index: 2; }
.fd-sheet--app .fd-sheet__body { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; padding: var(--space-10) 0 0; overflow: hidden; }
:root { --fd-app-s: 1; }   /* Maßstab der App im Vollbild-Sheet, faden-shared.js setzt ihn am .fd-sheet__app */
.fd-sheet__app { position: relative; flex: 1 1 auto; min-height: 0; overflow: hidden; }
.fd-sheet__app > iframe { position: absolute; left: 50%; top: 0; display: block; width: 390px; height: 821px; border: 0; background: var(--surface-page); transform: translateX(-50%) scale(var(--fd-app-s)); transform-origin: 50% 0; color-scheme: light; }
@media (min-width: 861px) {
  .fd-sheet--app .fd-sheet__panel { height: 92vh; max-height: 92vh; border-radius: var(--radius-xl) var(--radius-xl) 0 0; }
}
/* E179 (09.10.2026, Jan konnte mobil nicht schließen): im Vollbild-Sheet ist das X auf allen Breiten ein deutlich sichtbarer runder Knopf, 48 px, oben rechts,
   Karte mit kräftigem Rand und Schatten, Symbol 24 px in Espresso. Es liegt in einer eigenen Kopfzeile über der App, nie über App-Inhalt (die App beginnt
   erst darunter, 64 px plus Sicherheitsabstand oben bei Geräten mit Notch). aria-label „Schließen“ kommt aus rahmen/anhang.html, Escape bleibt (faden-shared.js) */
.fd-sheet--app .fd-sheet__close,
.fd-sheet--app .fd-sheet__close:focus { top: calc(var(--space-2) + env(safe-area-inset-top, 0px)); right: var(--space-3); width: 48px; height: 48px; border: 1.5px solid var(--border-strong); background: var(--surface-card); color: var(--text-primary); box-shadow: var(--shadow-md); }
.fd-sheet--app .fd-sheet__close:focus-visible { box-shadow: var(--shadow-focus); }
.fd-sheet--app .fd-sheet__close:hover { border-color: var(--brand-primary); background: var(--surface-fill-soft); color: var(--text-link); }
.fd-sheet--app .fd-sheet__close:active { border-color: var(--brand-active); background: var(--surface-marker); color: var(--brand-active); }
.fd-sheet--app .fd-sheet__close svg { width: 24px; height: 24px; }
.fd-sheet--app .fd-sheet__grip { display: none; }   /* Handy-Feedback 11.10.2026 (Jan): Vollbild „Ausprobieren“ ohne Griff-Balken und ohne Wischen, nur das X (faden-shared.js) */
.fd-sheet--app .fd-sheet__body { padding-top: var(--space-12); }
/* Eingeloggt (Staging, WP-Admin-Leiste z-index 99999): Ein offenes Sheet liegt ÜBER der Admin-Leiste, sonst verdeckt deren Profilbild
   am Handy das X (Leiste bricht bei 402 px um, Befund Staging 09.10.). Geschlossen ist .fd-sheet display:none, die Leiste bleibt bedienbar */
.admin-bar .fd-sheet { z-index: 100000; }

/* E165 „Deine Daten, gut geschützt“ (Produkt 05, Preise 03, Kontakt 04): die vier Siegel als Kacheln, mobil 2 x 2 (vorher kompakte Liste aus 7a),
   861 bis 1047 2 x 2, ab 1048 eine Viererreihe. Modifier .fd-carousel--quadrat am Karussell (immer zusammen mit --steps und genau vier Kacheln).
   Kachel: Siegel, Titel, ein kurzer Satz (Kachel-Anatomie E63). Selektoren mit sechs Klassen, damit 7a (fünf) sicher verliert */
@media (max-width: 860.98px) {
  .fd-carousel.fd-carousel--steps.fd-carousel--quadrat > .fd-carousel__track { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-3); padding: 0; overflow: visible; }
  .fd-carousel.fd-carousel--steps.fd-carousel--quadrat > .fd-carousel__track > .fd-tcard.fd-tcard--step { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-2); padding: var(--space-4) var(--space-3); background: var(--surface-card); border: 1px solid var(--border-default); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); }
  .fd-carousel.fd-carousel--steps.fd-carousel--quadrat > .fd-carousel__track > .fd-tcard.fd-tcard--step > b { font-size: var(--type-label-lg-size); line-height: var(--type-label-lg-lh); hyphens: auto; }
  .fd-carousel.fd-carousel--steps.fd-carousel--quadrat > .fd-carousel__track > .fd-tcard.fd-tcard--step > p { font-size: var(--type-label-md-size); line-height: var(--type-body-sm-lh); hyphens: auto; overflow-wrap: break-word; }
}
@media (min-width: 861px) {
  .fd-carousel.fd-carousel--steps.fd-carousel--quadrat > .fd-carousel__track { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 1048px) {
  .fd-carousel.fd-carousel--steps.fd-carousel--quadrat > .fd-carousel__track { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .fd-carousel.fd-carousel--steps.fd-carousel--quadrat > .fd-carousel__track > .fd-tcard > b { hyphens: auto; }
}

/* E166 App-Band mobil: drei kleine Kacheln nebeneinander, nur Symbol und ein Wort (.fd-certchip__kurz: iPhone, Android, Browser).
   Titel, Zeile und Pfeil stehen ab 861 wie bisher. Der Name für Screenreader kommt aus dem aria-label des Links und enthält das Wort (WCAG 2.5.3) */
.fd-certchip__kurz { display: none; }
@media (max-width: 860.98px) {
  .fd-band--app .fd-band__scroll { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-2); }
  .fd-band--app .fd-certchip { flex-direction: column; justify-content: center; gap: var(--space-2); min-height: 88px; padding: var(--space-3) var(--space-2); border-radius: var(--radius-lg); white-space: normal; text-align: center; }
  .fd-band--app .fd-certchip__txt, .fd-band--app .fd-certchip__tap { display: none; }
  .fd-band--app .fd-certchip__kurz { display: block; font-size: var(--type-label-md-size); font-weight: 700; line-height: var(--type-label-md-lh); }
}

/* ══ 21 Auswahlfelder im Kontaktformular (E171, 08.10.2026) ══════════════════════════════════════════════════════════════════
   Übernommen aus wp/cf7-formular.css v0.1 (Formular-Agent 08.10.2026, Prüfgrundlage wp/cf7-test.html und wp/cf7-test-shots/pruef.js), unverändert.
   Pfeilgröße 20 px vorerst (Jan bestätigt noch). Der alte Pfeil im Formular-Block (Abschnitt CF7 1552) ist entfernt. Dazu am Ende drei Nachträge
   aus dem Bericht des Formular-Agenten (Kurstitel, Datums-Platzhalter). */

/* Pfeilgröße und seine Lage: mittig in der ersten Zeile des Feldes (Rand 1,5 px + Innenabstand 12 px + halbe Zeile body-md).
   Von oben gemessen, weil CF7 bei Fehlern den Hinweis in denselben Träger unter das Feld hängt */
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] {
  --cf7-pfeil: 20px;
  --cf7-pfeil-top: calc(1.5px + var(--space-3) + (var(--type-body-md-size) * var(--type-body-md-lh) - var(--cf7-pfeil)) / 2);
}

/* ── Feld ─────────────────────────────────────────────────────────────────────────────────────────────────── */
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden) {
  display: block;
  width: 100%;
  height: auto;                                      /* gleiche Höhe wie die Textfelder: Innenabstand + Zeile + Rand */
  min-height: var(--space-12);                       /* mobil mindestens 48 px Trefferfläche */
  margin: 0;
  padding: var(--space-3) calc(var(--space-4) + var(--cf7-pfeil) + var(--space-2)) var(--space-3) var(--space-4);
  border: 1.5px solid var(--border-strong);
  border-radius: var(--radius-md);
  background-color: var(--surface-card);
  color: var(--text-primary);
  font-family: var(--font-sans);
  font-size: var(--type-body-md-size);               /* 16 px: kein Auto-Zoom in iOS */
  font-weight: var(--type-body-md-weight);
  line-height: var(--type-body-md-lh);
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
  color-scheme: light;                               /* Systemliste hell, auch wenn das Gerät dunkel eingestellt ist */
  box-shadow: none;
  cursor: pointer;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  transition: border-color var(--duration-fast) var(--ease-standard), background-color var(--duration-fast) var(--ease-standard);
}

/* Platzhalter „– Bitte auswählen –“ (leere Option gewählt) wie die Platzhalter der Textfelder */
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):has(> option[value=""]:checked) {
  color: var(--text-muted);
}

/* Einträge der Systemliste: Schrift und Farbe, soweit das System sie übernimmt (Chrome und Firefox unter Windows ja, iOS nein) */
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden) option {
  background-color: var(--surface-card);
  color: var(--text-primary);
  font-family: var(--font-sans);
}

/* Hover (nur Geräte mit Maus): Rand dunkler wie bei den Textfeldern */
@media (hover: hover) {
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):hover {
    border-color: var(--text-secondary);
  }
}

/* Fokus: Rand Espresso, Ring Orange 600 (E78) */
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):focus {
  border-color: var(--text-primary);
  box-shadow: none;
}
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

/* Fehler: wie die Textfelder der Hülle (Rand Alert 500, innen verdoppelt), auch im Hover */
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):is(.wpcf7-not-valid, [aria-invalid="true"]),
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):is(.wpcf7-not-valid, [aria-invalid="true"]):hover {
  border-color: var(--surface-alert);
  box-shadow: inset 0 0 0 1px var(--surface-alert);
}

/* Gesperrt (CF7 setzt das nicht, aber Conditional Fields oder spätere Formularänderungen könnten es). Mit :has, damit es den Platzhalter schlägt */
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):disabled,
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):disabled:hover,
.ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden):disabled:has(> option[value=""]:checked) {
  border-color: var(--border-default);
  background-color: var(--surface-fill-soft);
  color: var(--text-disabled);
  cursor: not-allowed;
}

/* ── Pfeil (Lucide chevron-down, Strichstärke 2) ─────────────────────────────────────────────────────────── */
@supports selector(:has(*)) {
  /* alter Pfeil der Hülle aus */
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden) {
    background-image: none;
  }

  /* Träger: CF7-Feld (span) und Krankenkasse (p) */
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form .wpcf7-form-control-wrap:has(> select.form-input:not(.ck-kurs-hidden)),
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form .form-field > p:has(> select.form-input:last-child:not(.ck-kurs-hidden)) {
    position: relative;
  }

  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form .wpcf7-form-control-wrap:has(> select.form-input:not(.ck-kurs-hidden))::after,
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form .form-field > p:has(> select.form-input:last-child:not(.ck-kurs-hidden))::after {
    content: '';
    position: absolute;
    right: var(--space-4);
    width: var(--cf7-pfeil);
    height: var(--cf7-pfeil);
    background-color: var(--text-secondary);
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;
    pointer-events: none;                            /* Klick geht durch auf das Feld */
    transition: background-color var(--duration-fast) var(--ease-standard);
  }
  /* CF7-Feld: das Feld steht oben im Träger */
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form .wpcf7-form-control-wrap:has(> select.form-input:not(.ck-kurs-hidden))::after {
    top: var(--cf7-pfeil-top);
  }
  /* Krankenkasse: das Feld ist das letzte Kind im p, also von unten gemessen (gleicher Abstand wie oben) */
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form .form-field > p:has(> select.form-input:last-child:not(.ck-kurs-hidden))::after {
    bottom: var(--cf7-pfeil-top);
  }

  /* Pfeilfarbe je Zustand: Hover und Fokus Espresso, Fehler Alert, gesperrt blass */
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form :is(.wpcf7-form-control-wrap, .form-field > p):has(> select.form-input:not(.ck-kurs-hidden):focus)::after {
    background-color: var(--text-primary);
  }
  @media (hover: hover) {
    .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form :is(.wpcf7-form-control-wrap, .form-field > p):has(> select.form-input:not(.ck-kurs-hidden):hover)::after {
      background-color: var(--text-primary);
    }
  }
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form :is(.wpcf7-form-control-wrap, .form-field > p):has(> select.form-input:not(.ck-kurs-hidden):is(.wpcf7-not-valid, [aria-invalid="true"]))::after {
    background-color: var(--text-alert);
  }
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form :is(.wpcf7-form-control-wrap, .form-field > p):has(> select.form-input:not(.ck-kurs-hidden):disabled)::after {
    background-color: var(--text-disabled);
  }
}

/* ── Hochkontrast (Windows): eigener Pfeil aus, Systempfeil zurück ──────────────────────────────────────── */
@media (forced-colors: active) {
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden) {
    -webkit-appearance: auto;
    -moz-appearance: auto;
    appearance: auto;
    background-image: none;
  }
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form .wpcf7-form-control-wrap:has(> select.form-input:not(.ck-kurs-hidden))::after,
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form .form-field > p:has(> select.form-input:last-child:not(.ck-kurs-hidden))::after {
    content: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form select.form-input:not(.ck-kurs-hidden),
  .ck-form-wrap .wpcf7[data-wpcf7-id="1552"] .kontakt-form :is(.wpcf7-form-control-wrap, .form-field > p)::after {
    transition: none;
  }
}

/* Nachtrag 08.10.2026 aus dem Bericht des Formular-Agenten:
   (2) Kurstitel in den Kurs-Kacheln brechen bei 375 mitten im Wort um („Stressreduktio n“): mobil eine Stufe kleiner, nie mitten im Wort,
       Silbentrennung wo der Browser sie kann (lang="de").
   (3) Geburtsdatum leer: der Platzhalter TT.MM.JJJJ des Systems steht in Platzhalter-Farbe wie bei den Textfeldern. faden-shared.js
       (Kontaktformular) setzt .is-leer, solange kein Datum gewählt ist.
   (1) Das versteckte Kursfeld #cb-kurs trägt aria-hidden und tabindex -1 schon aus faden-shared.js (Kontaktformular, Schritt 1). */
@media (max-width: 860.98px) {
  .wpcf7 .kontakt-form .ck-kurs-tile-title { font-size: var(--type-label-lg-size); line-height: var(--type-label-lg-lh); overflow-wrap: normal; hyphens: auto; }
}
.wpcf7 .kontakt-form .form-input[type="date"].is-leer,
.wpcf7 .kontakt-form .form-input[type="date"].is-leer::-webkit-datetime-edit { color: var(--text-muted); }

/* ══ 22 Dashboard mobil in voller Höhe (E169, 08.10.2026, Mobilansicht des Dashboard-Agenten in assets/v9/v9.html?ansicht=dashboard) ══
   Unter 861 läuft das Dashboard in Spaltenbreite ohne Skalierung und ohne eigenen Scrollbereich (kein seitliches Wischen mehr, keine Scroll-Falle).
   Startwert 3300 px, faden-shared.js setzt die gemeldete Höhe der App (postMessage „hoehe“). Ab 861 unverändert (1280 x 800, skaliert, Abschnitt 16). */
@media (max-width: 860.98px) {
  .fd-screen__view { overflow: visible; }
  .fd-screen__sizer { width: 100%; height: auto; }
  .fd-screen__app { position: static; width: 100%; height: 3300px; transform: none; }
}
/* Entscheidung Koordinator nach Augenschein (08.10.2026, Jan prüft): 3145 px Dashboard sind im Lesefluss vier Bildschirme. Mobil mit JS deshalb
   auf 900 px gekürzt (Kopf, Lizenzen, Einlösequote sichtbar), unten weicher Auslauf in Seitenfarbe. Seit E179 (09.10.2026) ohne „Ausprobieren“:
   die gekürzte Vorschau mit Auslauf bleibt, ein Vollbild für das Dashboard gibt es nicht mehr. Ohne JS bleibt es in voller Höhe. */
@media (max-width: 860.98px) {
  .fd-js .fd-screen__view { position: relative; max-height: 900px; overflow: hidden; }
  .fd-js .fd-screen__app { height: 900px; }   /* Startwert mit JS klein: die App meldet sonst nur die Höhe ihres Fensters (3300) zurück, nicht ihren Inhalt */
  .fd-js .fd-screen__view::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: var(--space-24); background: linear-gradient(to top, var(--surface-card), color-mix(in srgb, var(--surface-card) 60%, transparent) 55%, transparent); pointer-events: none; }
}

/* ══ 23 Aussagen mobil als wischbare Kacheln (E174, 08.10.2026) ═══════════════════════════════════════════════════
   Muster aussagen (ul/ol.fd-aussagen, Abschnitt 16): unter 861 eine waagerechte Reihe aus Karten statt Liste untereinander. Kartenstil wie
   .fd-tcard (Fläche Karte, Rand, radius-lg, shadow-md, Titel title-sm, Satz body-sm). Spur bündig an der Inhaltskante wie die Karussells,
   Karte höchstens 82 % der Spalte (bis 320 px): die nächste Karte ist angeschnitten zu sehen und zeigt, dass es weitergeht.
   Scroll-Snap, keine Auto-Rotation (E8), keine Pfeile und Punkte (der Anschnitt reicht). Tastatur: faden-shared.js macht die Reihe mit
   tabindex="0" fokussierbar, solange sie wischbar ist (Pfeiltasten scrollen); ohne JS ist die Reihe trotzdem wischbar. Ab 861 unverändert. */
@media (max-width: 860.98px) {
  .fd-ch .fd-ch__text > .fd-aussagen { display: flex; align-items: stretch; gap: var(--space-3); margin-right: 0; padding: var(--space-2) 0 var(--space-4); overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scroll-padding-inline: 0; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .fd-ch .fd-ch__text > .fd-aussagen::-webkit-scrollbar { display: none; }
  .fd-ch .fd-ch__text > .fd-aussagen:focus-visible { outline: none; box-shadow: var(--shadow-focus); border-radius: var(--radius-lg); }
  .fd-ch .fd-ch__text > .fd-aussagen > li,
  .fd-ch .fd-ch__text > .fd-aussagen > li:first-child { flex: 0 0 min(82%, 320px); scroll-snap-align: start; margin: 0; padding: var(--space-5); border: 1px solid var(--border-default); border-radius: var(--radius-lg); background: var(--surface-card); box-shadow: var(--shadow-md);
    font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-title-sm-size); font-weight: 600; line-height: var(--type-title-sm-lh); color: var(--text-primary); }
  .fd-ch .fd-ch__text > .fd-aussagen > li:has(> b:first-child) { font-family: var(--font-sans); letter-spacing: normal; font-size: var(--type-body-sm-size); font-weight: 400; line-height: var(--type-body-sm-lh); color: var(--text-primary); }
  .fd-ch .fd-ch__text > .fd-aussagen > li > b:first-child { margin-bottom: var(--space-1); font-size: var(--type-title-sm-size); line-height: var(--type-title-sm-lh); }
  .fd-ch .fd-ch__text > ol.fd-aussagen > li { display: grid; grid-template-columns: var(--space-8) minmax(0, 1fr); }
  .fd-ch .fd-ch__text > .fd-aussagen__einstieg + .fd-aussagen { margin-top: var(--space-3); }
  .fd-ch .fd-ch__text > .fd-aussagen + .fd-aussagen__nach { margin-top: var(--space-2); }
}

/* ══ 24 Nur ab Desktop (E175, 08.10.2026) ═══════════════════════════════════════════════════════════════════════════
   .fd-nur-desktop blendet einen Textteil unter 861 aus (Text bleibt im HTML, ab 861 unverändert). Erster Einsatz: Produkt 01 „Alltag“,
   die zwei Absätze im .fd-ch__lead; mobil folgen dort direkt auf den Titel die Kacheln. */
@media (max-width: 860.98px) {
  .fd-nur-desktop { display: none; }
  .fd-ch__text:has(> .fd-nur-desktop:only-child) { display: none; }
}

/* ══ 25 Website-Entscheidungen 09.10.2026 (E177, E178, E180, E183) ══════════════════════════════════════════════════════
   Personen mobil wischbar mit Porträt (E177), Zertifikats-Band mobil wischbar (E178), Kachelreihe im Dashboard-Kapitel (E180),
   Aufklapper „Alle relevanten Dokumente“ (E183). „Ausprobieren“ und Vollbild-X (E179) stehen in Abschnitt 20, das Dashboard mobil in Abschnitt 22. */

/* E177 Personen (Start 01, .fd-personas--problem): rundes Porträt statt Personen-Symbol. Das Bild füllt den Kreis (40 px mobil, 56 px ab 861 wie bisher),
   Sand bleibt als Fläche, solange es lädt. Dekorativ (alt leer, der Name steht im Knopf) */
.fd-personas--problem .fd-persona__av--foto { overflow: hidden; }
.fd-personas--problem .fd-persona__av--foto > img { display: block; width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }
/* Mobil wie die Aussagen-Kacheln (E174, Abschnitt 23): waagerechte Reihe, Karte höchstens 82 % der Spalte (bis 320 px), die nächste angeschnitten,
   Spur bündig an der Inhaltskante, Scroll-Snap, keine Pfeile und Punkte, keine Auto-Rotation (E8). Die Karten sind Knöpfe: Tab erreicht jede Person,
   der Browser scrollt sie ins Bild, deshalb kein zusätzlicher Tab-Stopp. Ab 861 unverändert untereinander */
@media (max-width: 860.98px) {
  .fd-personas--problem { flex-direction: row; align-items: stretch; gap: var(--space-3); padding: var(--space-2) 0 var(--space-4); overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scroll-padding-inline: 0; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .fd-personas--problem::-webkit-scrollbar { display: none; }
  .fd-personas--problem > .fd-persona { flex: 0 0 min(82%, 320px); align-items: center; scroll-snap-align: start; }
  .fd-ch__begleit > .fd-personas--problem { margin-top: calc(var(--space-2) * -1); }   /* gleicht das Polster der Spur oben aus (Platz für Schatten und Fokusring) */
}

/* E178 Zertifikats-Band „Deine Daten, unsere Verantwortung.“ (Start, FAQ, Team, jede Seite mit .fd-band ohne --app): mobil eine wischbare Reihe aus Karten
   statt vier Zeilen untereinander. Karte im Stil der Desktop-Kachel (Fläche Karte, radius-xl, Siegel 44 px links, Text daneben, umbrechend), Schrift mobil
   wie bisher (E185). Spur beginnt an der Inhaltskante und läuft rechts bis an den Rand (E69), Karte höchstens 72 % (bis 260 px), die nächste angeschnitten.
   Die Chips sind Knöpfe (Sheet-Öffner), Tab scrollt sie ins Bild. Klick-Hinweis am ersten Chip bleibt. App-Band (E166) und Desktop unverändert */
@media (max-width: 860.98px) {
  .fd-band:not(.fd-band--app) .fd-band__scroll { display: flex; align-items: stretch; gap: var(--space-3); margin-right: 0; padding: 0 var(--fd-gutter) var(--space-1) 0; overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scroll-padding-inline: 0; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .fd-band:not(.fd-band--app) .fd-certchip { flex: 0 0 min(72%, 260px); gap: var(--space-3); min-height: 76px; padding: var(--space-3) var(--space-4) var(--space-3) var(--space-3); border-radius: var(--radius-xl); white-space: normal; text-align: left; line-height: var(--type-label-md-lh); scroll-snap-align: start; }
  .fd-band:not(.fd-band--app) .fd-certchip img { flex: 0 0 auto; width: 44px; height: 44px; }
  .fd-band:not(.fd-band--app) .fd-certchip__tap { align-self: flex-start; }
}

/* E180 Dashboard-Kapitel (Muster text-breit): eine Kachelreihe (.fd-carousel--steps, Titel und ein Satz, Lucide-Symbol) direkt in der Textspalte.
   Mobil die kompakte Liste aus 7a. Ab 861 läuft die Reihe über die ganze Inhaltsbreite (wie das Dashboard darunter) statt untereinander im Lesemaß
   (G2 Weg B gilt neben Bild oder Chat, nicht über einem breiten Medium): drei gleich breite Kacheln, Symbol über dem Titel wie Preise 01. Absätze und Zitat
   behalten das Lesemaß. Gilt für jede Seite mit diesem Aufbau (Start 05, Produkt Dashboard) */
@media (min-width: 861px) {
  .fd-ch[data-muster="text-breit"] .fd-ch__text:has(> .fd-carousel--steps) { max-width: none; }
  .fd-ch[data-muster="text-breit"] .fd-ch__text:has(> .fd-carousel--steps) > :not(.fd-carousel) { max-width: var(--fd-measure); }
  .fd-ch[data-muster="text-breit"] .fd-ch__text > .fd-carousel--steps > .fd-carousel__track:not(#fd-x) { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-4); }
  .fd-ch[data-muster="text-breit"] .fd-ch__text > .fd-carousel--steps .fd-tcard--step { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-3); }
}

/* E183 Aufklapper (Preise „Vertrag“): ein details.fd-auf mit summary wie die FAQ-Akkordeons (Schrift, Höhe 56 px, Pfeil chevron-down, Zustände, Regeln
   in Abschnitt 10 mit .fd-faq zusammengefasst), Linie oben und unten. Bewusst nicht .fd-faq: faden-seo.php zählt jedes .fd-faq als FAQ-Frage fürs Schema.
   Aufgeklappt stehen die Unterlagen-Chips (.fd-docs) nebeneinander und brechen mobil um. Ohne JS gleich (natives details) */
details.fd-auf { margin: var(--space-5) 0 0; border-top: 1px solid var(--surface-fill); }
.fd-auf__inhalt { padding: var(--space-1) 0 var(--space-5); }
.fd-auf__inhalt > .fd-docs { margin: 0; }

/* E182 Experten-Reihe (Anfrage Produkt-Agent P1, 09.10.2026, _Claude/261009_anfragen_an_huelle.md): Modifier .fd-experten--reihe am Team-Raster (.fd-experten,
   Abschnitt Team 03, Porträt 4:5 mit Name als Knopf .fd-crop__mehr). Mobil eine wischbare Reihe wie die Aussagen-Kacheln (E174): zwei Porträts ganz, das dritte
   angeschnitten, Scroll-Snap, keine Pfeile und Punkte, keine Auto-Rotation (E8), Spur bündig an der Inhaltskante. 861 bis 1047 ebenso wischbar mit drei
   sichtbaren Porträts (fünf passen dort nicht lesbar). Ab 1048 eine Reihe mit gleich breiten Spalten, alle Porträts sichtbar. Die Namen sind Knöpfe:
   Tab erreicht jedes Porträt und scrollt es ins Bild, kein zusätzlicher Tab-Stopp. Steht auch in .fd-aussagen__nach (dort eine ganze Zeile) */
.fd-experten--reihe { flex: 1 1 100%; min-width: 0; }
@media (max-width: 1047.98px) {
  .fd-experten.fd-experten--reihe { display: flex; gap: var(--space-3); padding: var(--space-1) 0 var(--space-2); overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scroll-padding-inline: 0; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .fd-experten.fd-experten--reihe::-webkit-scrollbar { display: none; }
  .fd-experten.fd-experten--reihe > * { flex: 0 0 min(42%, 200px); scroll-snap-align: start; }
  /* Fix 2 (Jan 09.10.2026, „bleibt beim Scrollen hängen, Bilder wackeln“): der Namensknopf vergrößert seine Trefferfläche mit Polster 16 px plus
     Gegenrand (Abschnitt Team) und ragte 8 px unter die Spur. overflow-x: auto macht y automatisch auch scrollbar, die Reihe fing deshalb senkrechte
     Wischer ab und rutschte 8 px. Jetzt Spur unten 16 px Polster (der Knopf passt mit seiner 44-px-Trefferfläche, M5, ganz hinein) und
     overflow-y: hidden (senkrechtes Scrollen in der Spur ausgeschlossen, die Seite scrollt weiter) */
  .fd-experten.fd-experten--reihe { padding-bottom: var(--space-4); }
}
@media (min-width: 861px) and (max-width: 1047.98px) {
  .fd-experten.fd-experten--reihe { gap: var(--space-5); }
  .fd-experten.fd-experten--reihe > * { flex-basis: calc((100% - 2 * var(--space-5)) / 3.2); }
}
@media (min-width: 1048px) {
  .fd-experten.fd-experten--reihe { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: var(--space-5); }
}

/* Personen-Kacheln (Jan 09.10.2026, Fix 2, Team 02): Modifier .fd-carousel--personen am Personen-Karussell. Unter 861 statt der kompakten Zeilenliste
   (Abschnitt 7a, Avatar 32 px) ein Kachelraster im Stil der Partner-Kacheln (Team 05, .fd-partnerlogo): Fläche Sand mit radius-lg, Foto quadratisch über
   die ganze Kachelbreite, darunter Name (title-sm) und Rolle. Am Handy zwei Spalten, auf Tablets so viele, wie mit mindestens 140 px passen. Die ganze
   Kachel bleibt der Knopf zum Profil-Sheet, der Klick-Hinweis der ersten Karte sitzt oben rechts auf dem Foto. Ab 861 unverändert (Karten mit Kreis-Avatar).
   Das größere Foto kommt über srcset/sizes am img (…-320.webp mobil, …-112 ab 861) */
@media (max-width: 860.98px) {
  .fd-carousel.fd-carousel--personen[data-carousel] > .fd-carousel__track { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: var(--space-5) var(--space-3); padding: var(--space-1) 0 0; }
  .fd-carousel--personen[data-carousel] .fd-carousel__track .fd-tcard { position: relative; padding: 0; border: 0; border-radius: var(--radius-lg); background: transparent; }
  .fd-carousel--personen[data-carousel] .fd-tcard .fd-tcard__btn { flex-direction: column; align-items: stretch; gap: var(--space-3); padding: 0; }
  .fd-carousel--personen[data-carousel] .fd-tcard .fd-tcard__media { width: 100%; height: auto; aspect-ratio: 1 / 1; border-radius: var(--radius-lg); }
  .fd-carousel--personen[data-carousel] .fd-tcard .fd-tcard__media img { width: 100%; height: 100%; }
  .fd-carousel--personen[data-carousel] .fd-tcard .fd-tcard__tap { position: absolute; top: var(--space-2); right: var(--space-2); align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: var(--radius-pill); background: var(--surface-card); color: var(--text-primary); }
}

/* ══ 26 Logo-Animation im Kopf (Jan 09.10.2026, Variante A „Tippen“ aus Downloads/Logo Animation.html) ══════════════════════════════
   Ablauf einmal beim Laden, 2,8 s, danach steht das Logo ruhig im Endzustand (kein Ausblenden, keine Schleife): Kreis springt auf,
   Cursor blinkt, B erscheint, Cursor springt hinter das B, Kreis rollt nach links an seinen Platz, coachBOB kommt hinter ihm hervor.
   Endzustand = statisches Logo (gleiche Box, gleiche Schrift, kein Layoutsprung: nur translate, scale, transform, opacity).
   Läuft nur mit html.fd-js (faden-early.js im head, also vor dem ersten Bild) und ohne reduzierte Bewegung, sonst sofort fertig.
   Klassen nur unter .fd-logo (Rahmen), Keyframes mit Präfix fd-logo-. Zeitachse = Quelle a-* (6 s, aktiver Teil 0 bis 52 %)
   gestaucht auf 100 %: Prozent neu = Prozent alt x 1,923. Startversatz 1,7 Kreisbreiten = Kreis etwa mittig über dem ganzen Logo.
   .fd-logo__feld schneidet den Schriftzug ab Kreismitte ab (wie aClip der Quelle) und fährt mit dem Kreis mit. Das B ist das bisherige
   Logo-B (nicht bPath der Quelle, das ist breiter und flacher), damit der Endzustand pixelgleich zum alten Logo bleibt. Der Cursor
   (.fd-logo__cursor) steht vor dem B und springt mit dem B dahinter. */
@media (prefers-reduced-motion: no-preference) {
  /* fill-mode backwards statt forwards: der letzte Keyframe ist jeder Wert gleich dem Ruhezustand, nach dem Ablauf bleibt also nichts
     hängen (kein translate, kein clip-path, keine eigene Ebene). Mit forwards blieb der Schriftzug als Ebene in Graustufen geglättet und
     wich so vom statischen Logo ab (Pixelvergleich 09.10.). Geometrie in beiden Fällen gleich */
  .fd-js .fd-logo__mark { animation: fd-logo-weg 2.8s 1 backwards, fd-logo-kreis 2.8s 1 backwards; }
  .fd-js .fd-logo__feld { animation: fd-logo-feld 2.8s 1 backwards; }
  .fd-js .fd-logo__word { animation: fd-logo-wort 2.8s 1 backwards; }
  .fd-js .fd-logo__b { animation: fd-logo-b 2.8s 1 backwards; }
  .fd-js .fd-logo__cursor { animation: fd-logo-cursor 2.8s 1 backwards, fd-logo-cursor-x 2.8s 1 backwards; }
}
@keyframes fd-logo-weg { 0%, 65.4% { translate: calc(var(--fd-logo-mark) * 1.7) 0; animation-timing-function: cubic-bezier(.7, 0, .2, 1); } 96.2%, 100% { translate: 0 0; } }
@keyframes fd-logo-feld {
  0%, 65.4% { translate: calc(var(--fd-logo-mark) * 1.7) 0; clip-path: inset(-50% -50% -50% calc(-1 * (var(--space-2) + var(--fd-logo-mark) / 2))); animation-timing-function: cubic-bezier(.7, 0, .2, 1); }
  96.2%, 99.9% { translate: 0 0; clip-path: inset(-50% -50% -50% calc(-1 * (var(--space-2) + var(--fd-logo-mark) / 2))); }
}
@keyframes fd-logo-wort { 0%, 65.4% { transform: translateX(calc(-100% - var(--space-2) - var(--fd-logo-mark) / 2)); animation-timing-function: cubic-bezier(.7, 0, .2, 1); } 100% { transform: none; } }
@keyframes fd-logo-kreis { 0% { scale: 0; } 9.6% { scale: 1.06; } 15.4%, 100% { scale: 1; } }
@keyframes fd-logo-b { 0%, 32.7% { opacity: 0; } 32.71%, 100% { opacity: 1; } }
@keyframes fd-logo-cursor { 0%, 13.5% { opacity: 0; } 13.51%, 23% { opacity: 1; } 23.01%, 32.7% { opacity: 0; } 32.71%, 44.2% { opacity: 1; } 44.21%, 53.8% { opacity: 0; } 53.81%, 63.5% { opacity: 1; } 63.51%, 100% { opacity: 0; } }
@keyframes fd-logo-cursor-x { 0%, 32.7% { translate: 0 0; } 32.71%, 100% { translate: calc(var(--fd-logo-mark) * .58) 0; } }

/* ══ 27 Handy-Feedback Jan 11.10.2026: Sheet per Wischen schließen, X ohne Tipp-Kasten, Dashboard wie ein Bild ══════════════════════════
   (1) Jedes Sheet außer dem Vollbild „Ausprobieren“ lässt sich am Handy nach unten wegwischen (faden-shared.js, Modul Bottom Sheet). Der Griff-Balken
       oben ist der Hinweis darauf: auf Touch-Geräten und unter 861 kräftiger (Linie Sand 400 statt Sand 200), Desktop mit Maus unverändert.
       overscroll-behavior: der Textbereich gibt sein Ende nicht an die (gesperrte) Seite weiter.
   (2) Kein blauer Kasten beim Antippen der X-Knöpfe der Hülle (Sheet-X, Menü-Knopf als X): Tipp-Hervorhebung des Browsers aus. Der Fokusring bleibt nur
       für die Tastatur (:focus-visible, Abschnitt 1), ein Fokus durch Tippen oder Klicken zeigt keinen Ring. Auf Touch-Geräten ohne echtes Hover bleibt nach dem
       Tippen kein Hover-Zustand am X hängen.
   (3) Dashboard (Start 05, Produkt 04) unter 861: verhält sich wie ein Bild. Das App-Fenster nimmt keine Berührung an (pointer-events: none), Wischen über dem
       Dashboard scrollt immer die Seite, kein eigener Scrollbereich, keine Tipp-Infos. Für Screenreader steht weiter die Textbeschreibung (.fd-sr aus dem title,
       faden-shared.js), das Fenster selbst ist aria-hidden und ohne Tab-Stopp. Ab 861 unverändert (Hover-Infos, E141). */
.fd-sheet__body { overscroll-behavior: contain; }
@media (max-width: 860.98px), (pointer: coarse) {
  .fd-sheet__grip { flex: 0 0 auto; width: 44px; height: 5px; background: var(--border-strong); }
}
.fd-sheet__close, .fd-burger { -webkit-tap-highlight-color: transparent; }
.fd-sheet__close:focus:not(:focus-visible), .fd-burger:focus:not(:focus-visible) { outline: none; }
@media (hover: none) {
  .fd-sheet__close:hover { background: transparent; color: var(--text-secondary); }
  .fd-sheet__close:active { background: var(--surface-marker); color: var(--brand-active); }
  .fd-sheet--app .fd-sheet__close:hover { border-color: var(--border-strong); background: var(--surface-card); color: var(--text-primary); }
  .fd-sheet--app .fd-sheet__close:active { border-color: var(--brand-active); background: var(--surface-marker); color: var(--brand-active); }
  .fd-burger:hover { background: transparent; }
  .fd-burger:active { background: var(--surface-marker); }
}
@media (max-width: 860.98px) {
  .fd-screen__view, .fd-screen__sizer { touch-action: pan-y; }
  .fd-screen__app { pointer-events: none; }
}

/* ══ 28 Team 01 „Unsere Geschichte“ als zwei Knöpfe (Anfragen A1 bis A3, _Claude/261011_anfragen_an_huelle.md, 11.10.2026) ══════════════════════════
   Markup: .fd-geschichte > details.fd-auf.fd-geschichte__auf (summary „Unsere Geschichte“, darin .fd-momente mit details.fd-auf.fd-moment) + a.fd-btn.fd-btn--ghost „Zum Team“.
   (A1) Der summary sieht aus wie .fd-btn--primary in Hero-Größe (56 px, Werte aus Abschnitt 1), offen bleibt er orange, der Pfeil dreht. „Zum Team“ ist ein echter
        Ghost-Knopf. Mobil untereinander über die volle Breite wie .fd-hero__ctas, ab 861 nebeneinander. Aufgeklappt nimmt der Aufklapper ab 861 die ganze Zeile,
        die Liste steht im Lesemaß, „Zum Team“ rutscht unter die Liste, der gedrückte Knopf bleibt an seinem Platz.
   (A2) Momente als ruhige Liste: keine Doppellinien, kein Abstand zwischen den Momenten, eine Linie oben am ersten, Datum als kleine Zeile über dem Titel.
   (A3) Öffnen nur ohne reduzierte Bewegung: Höhe weich (Chromium ab 131 über ::details-content und interpolate-size, sonst sofort), die Momente blenden nacheinander
        ein, ein geöffneter Moment blendet seinen Text ein. Nur opacity und translate, kein Layoutsprung (E116). overflow: clip mit Rand, damit der Fokusring der
        Momente nicht abgeschnitten wird. Ohne JS gleich (natives details), kein Verhalten in faden-shared.js nötig. */
.fd-geschichte { display: flex; flex-direction: column; gap: var(--space-3); }
.fd-geschichte > details.fd-geschichte__auf { margin: 0; border: 0; }
.fd-geschichte > details.fd-geschichte__auf > summary { box-sizing: border-box; justify-content: center; gap: var(--space-2); width: 100%; min-height: var(--fd-btn-h-gross); padding: 0 var(--space-8); border: var(--fd-btn-rand) solid transparent; border-radius: var(--radius-pill); background: var(--brand-primary); color: var(--text-on-brand); font-family: var(--font-sans); font-size: var(--type-body-lg-size); font-weight: 700; letter-spacing: var(--tracking-tight); line-height: 1.2; white-space: nowrap; text-wrap: nowrap; transition: background var(--duration-base) var(--ease-standard), box-shadow var(--duration-base) var(--ease-standard); -webkit-tap-highlight-color: transparent; }
.fd-geschichte > details.fd-geschichte__auf > summary:hover, .fd-geschichte > details.fd-geschichte__auf[open] > summary:hover { background: var(--brand-primary-hover); color: var(--text-on-brand); box-shadow: var(--shadow-md); }
.fd-geschichte > details.fd-geschichte__auf[open] > summary { color: var(--text-on-brand); }
.fd-geschichte > details.fd-geschichte__auf > summary:active { background: var(--brand-active); color: var(--text-on-brand); box-shadow: var(--shadow-pressed); }
.fd-geschichte > details.fd-geschichte__auf > summary svg, .fd-geschichte > details.fd-geschichte__auf > summary:hover svg, .fd-geschichte > details.fd-geschichte__auf[open] > summary svg { width: 18px; height: 18px; color: currentColor; }
@media (hover: none) {
  .fd-geschichte > details.fd-geschichte__auf > summary:hover { background: var(--brand-primary); box-shadow: none; }
  .fd-geschichte > details.fd-geschichte__auf > summary:active { background: var(--brand-active); box-shadow: var(--shadow-pressed); }
}
.fd-geschichte > .fd-btn { width: 100%; min-height: var(--fd-btn-h-gross); padding: 0 var(--space-8); font-size: var(--type-body-lg-size); }
.fd-geschichte__auf > .fd-auf__inhalt { max-width: var(--fd-measure); padding: var(--space-4) 0 var(--space-2); }
/* A2 Momente */
.fd-momente > details.fd-moment { margin: 0; border-top: 0; }
.fd-momente > details.fd-moment:first-child { border-top: 1px solid var(--surface-fill); }
.fd-moment__kopf { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0; }
.fd-moment__kopf .fd-zeit__datum { min-height: 0; }
.fd-moment > .fd-auf__inhalt { padding: 0 0 var(--space-4); }
.fd-moment > .fd-auf__inhalt > .fd-body { margin: 0; }
@media (min-width: 861px) {
  .fd-geschichte { flex-direction: row; flex-wrap: wrap; align-items: flex-start; gap: var(--space-4); }
  /* Paar wie im Hero gleich breit (je --fd-paar-knopf, nie schmaler als der Text). Die Breite sitzt am summary, nicht am details: so bleibt der gedrückte Knopf
     offen wie zu gleich breit, und der details behält beim Zuklappen die volle Zeile, solange die Liste einfährt (kein Umbruch der Liste) */
  .fd-geschichte > details.fd-geschichte__auf > summary { width: var(--fd-paar-knopf); min-width: max-content; }
  .fd-geschichte > details.fd-geschichte__auf[open] { flex-basis: 100%; }
  .fd-geschichte > .fd-btn { width: var(--fd-paar-knopf); min-width: max-content; }
}
/* A3 Öffnen-Animation */
@media (prefers-reduced-motion: no-preference) {
  .fd-geschichte details { interpolate-size: allow-keywords; }
  .fd-geschichte details::details-content { block-size: 0; overflow: clip; overflow-clip-margin: var(--space-2); transition: block-size var(--duration-slow) var(--ease-out), content-visibility var(--duration-slow) allow-discrete; }
  .fd-geschichte details[open]::details-content { block-size: auto; }
  .fd-geschichte__auf[open] .fd-moment { animation: fd-moment-ein var(--duration-slow) var(--ease-out) both; }
  .fd-geschichte__auf[open] .fd-moment:nth-child(2) { animation-delay: 40ms; }
  .fd-geschichte__auf[open] .fd-moment:nth-child(3) { animation-delay: 80ms; }
  .fd-geschichte__auf[open] .fd-moment:nth-child(4) { animation-delay: 120ms; }
  .fd-geschichte__auf[open] .fd-moment:nth-child(5) { animation-delay: 160ms; }
  .fd-geschichte__auf[open] .fd-moment:nth-child(n+6) { animation-delay: 200ms; }
  .fd-moment[open] > .fd-auf__inhalt { animation: fd-moment-ein var(--duration-base) var(--ease-out) both; }
}
@keyframes fd-moment-ein { from { opacity: 0; translate: 0 var(--space-2); } to { opacity: 1; translate: 0 0; } }

/* ══ 29 Rahmen-Knöpfe neu (Jan 11.10.2026: „Demo“ klingt nach Führung, ein Kauf-Knopf fehlt) ══════════════════════════
   Kopf: „Kontakt“ (.fd-btn--ghost, zweitrangig) links, „Lizenz kaufen“ (.fd-btn--blau, primär im Blauton, /preise/) rechts. Der bisherige Demo-Knopf war
   Orange (--brand-primary = Physical 500). Blau = Mental-Ton: Fläche --surface-mental-strong (Mental 600, weiße Schrift 7,2:1, E78; Mental 500 hätte nur 4,2:1),
   Hover und Gedrückt nur über Schatten (Mental nie als Zustandsfarbe, E78, Messung Z1). Mobil steht „Kontakt“ im Kopf nur, wenn beide Knöpfe neben Logo und Burger Platz haben, sonst nur „Lizenz kaufen“.
   Burger-Menü unten: „Lizenz kaufen“ blau, darunter „Kontakt“ ghost. Klebender Knopf mobil: „Kontakt“ (anhang.html). */
.fd-btn--blau, .fd-btn--blau:visited, .fd-btn--blau:focus { background: var(--surface-mental-strong); border-color: transparent; color: var(--text-on-brand); box-shadow: none; }
.fd-btn--blau:hover { background: var(--surface-mental-strong); color: var(--text-on-brand); box-shadow: var(--shadow-md); }   /* Zustände nur über Schatten: Mental ist nie Zustandsfarbe (E78, Messung Z1) */
.fd-btn--blau:active { background: var(--surface-mental-strong); color: var(--text-on-brand); box-shadow: var(--shadow-pressed); }
.fd-menu__cta { display: flex; flex-direction: column; gap: var(--space-2); }
@media (max-width: 860.98px) { .fd-bar .fd-btn--bar { padding: 0 var(--space-3); } }   /* beide Kopf-Knöpfe passen so ab 400 px neben Logo und Burger (gemessen 11.10.: Bedarf 399 px) */
/* Kein weiterer Breakpoint (R-B, H-04): die Kopfleiste ist selbst der Container, „Kontakt“ fällt weg, wenn ihr Inhalt schmaler als 368 px ist, also unter 400 px Fensterbreite (gleiche Technik wie .fd-zeit) */
.fd-bar { container-type: inline-size; }
@container (max-width: 367.98px) { .fd-bar__kontakt { display: none; } }
@media (min-width: 861px) and (max-width: 1047.98px) { .fd-bar { gap: var(--space-4); } .fd-bar .fd-btn--bar { padding: 0 var(--space-4); } }

/* ══ 30 Blog (13.10.2026): Artikel (.fd-page[data-seite="artikel"], Vertrag §2c) und Übersicht (Seite 1933, §2d) ═══════════════════
   Artikel = Faden-Seite ohne Seitenbild und ohne Hero-Knöpfe: Kategorie-Zeile, H1, Lead, Unterzeile, Autorenzeile (.fd-autor, runde Porträts
   wie die Personen-Sheets, Name verlinkt auf /team/), Datumszeilen als <time>. Danach Kapitel am Faden mit bestehenden Bausteinen, am Ende K4.
   Neu sind nur: .fd-autor, .fd-tcard--zahl (Zahl als Titel einer Siegel-Kachel), .fd-quellen (Quellen-Tabelle im Kapitel),
   .fd-wege--artikel mit .fd-tcard--artikel (Artikel-Karte auf der Übersicht, Link-Karte mit Kurzsatz und Meta-Zeile). */
.fd-page[data-seite="artikel"] > .fd-hero { display: block; padding-bottom: var(--space-10); }
.fd-page[data-seite="artikel"] > .fd-hero .fd-h1 { max-width: 20em; font-size: clamp(var(--type-title-lg-size), 7.6vw, var(--type-display-md-size)); hyphens: manual; text-wrap: balance; }
.fd-page[data-seite="artikel"] > .fd-hero .fd-lead { max-width: var(--fd-measure); }
.fd-page[data-seite="artikel"] > .fd-hero .fd-subnote { max-width: var(--fd-measure); }
.fd-hero .fd-hero__kategorie { display: block; }
.fd-autor { display: grid; gap: var(--space-1); max-width: 40em; margin: var(--space-6) 0 0; padding: var(--space-5) 0 0; border-top: 1px solid var(--border-default); }
.fd-autor__personen { display: flex; flex-wrap: wrap; gap: var(--space-4) var(--space-8); margin: 0 0 var(--space-3); padding: 0; list-style: none; }
.fd-autor__person { display: flex; align-items: center; gap: var(--space-3); min-width: 0; }
.fd-autor__person > img { flex: 0 0 auto; width: 56px; height: 56px; border-radius: var(--radius-pill); background: var(--surface-fill); object-fit: cover; }
.fd-autor__txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.fd-autor__txt a, .fd-autor__txt a:focus { font-family: var(--font-heading); letter-spacing: var(--tracking-wide); font-size: var(--type-label-lg-size); font-weight: 600; line-height: var(--type-label-lg-lh); color: var(--text-primary); text-decoration: none; }
.fd-autor__txt a:hover { color: var(--text-link); text-decoration: underline; text-underline-offset: 2px; }
.fd-autor__txt a:active { color: var(--brand-active); }
.fd-autor__txt small { font-size: var(--type-label-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); }
.fd-autor__zeile { margin: 0; font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-secondary); }
/* Nachsatz aus mehreren Absätzen (Artikel 01: Einleitung unter der Kurzfassung) */
.fd-ch__nach > .fd-body + .fd-body { margin-top: var(--space-4); }
.fd-aussagen__nach > .fd-body + .fd-link { margin-top: var(--space-4); }
/* Zahlen-Kachel: Siegel-Kachel (E165) mit der Zahl als Titel, eine Stufe größer. Selektor stärker als die Quadrat-Regeln (sechs Klassen) */
.fd-carousel.fd-carousel--steps > .fd-carousel__track > .fd-tcard.fd-tcard--step.fd-tcard--zahl > b { font-size: var(--type-title-lg-size); line-height: var(--type-title-lg-lh); hyphens: manual; }
/* Quellen-Tabelle: Aussage, Wert, Quelle. Kein Raster, nur Trennlinien wie die Aussagen. Scrollt waagerecht, falls sie nicht passt */
.fd-quellen { max-width: 100%; overflow-x: auto; }
.fd-quellen table { width: 100%; border-collapse: collapse; font-size: var(--type-body-sm-size); line-height: var(--type-body-sm-lh); color: var(--text-primary); }
.fd-quellen th, .fd-quellen td { padding: var(--space-3) var(--space-4) var(--space-3) 0; border-bottom: 1px solid var(--border-default); text-align: left; vertical-align: top; }
.fd-quellen th { font-size: var(--type-label-sm-size); font-weight: 600; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-secondary); }
.fd-quellen td:nth-child(2) { font-weight: 600; white-space: nowrap; }
.fd-quellen tr > :last-child { padding-right: 0; }
/* Artikel-Karte (Übersicht): Link-Karte (E85) mit Themen-Symbol, Titel, Kurzsatz, Meta (Datum, Lesezeit). Ganze Karte klickbar */
.fd-wege.fd-wege--artikel { margin: 0; }
.fd-tcard.fd-tcard--artikel { align-items: flex-start; gap: var(--space-4); padding: var(--space-5); }
.fd-tcard--artikel .fd-tcard__body { gap: var(--space-2); }
.fd-tcard--artikel b { font-size: var(--type-title-md-size); line-height: var(--type-title-md-lh); text-wrap: pretty; }
.fd-tcard--artikel .fd-tcard__pfeil { align-self: center; }
@media (min-width: 861px) {
  .fd-page[data-seite="artikel"] > .fd-hero .fd-h1 { font-size: var(--type-display-md-size); }
  .fd-wege.fd-wege--artikel { grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); gap: var(--space-4); }
}
@media (min-width: 1240px) {
  .fd-page[data-seite="artikel"] > .fd-hero .fd-h1 { font-size: var(--type-display-lg-size); }
}
/* 30a Trefferflächen und Mobilfassung (Messlauf 13.10.): Autorenname 44 px hoch ohne mehr Luft (negativer Rand), Fußzeilen-Links mindestens 44 px breit
   („Blog“ ist kürzer), mobil steht ein fünfter Fußzeilen-Link mittig allein in der letzten Zeile. Quellen-Tabelle mobil als Liste: je Zeile Aussage,
   darunter Wert und Quelle, Kopfzeile nur für Screenreader (die Zellen behalten ihre Tabellen-Rollen) */
.fd-autor__txt a, .fd-autor__txt a:focus { display: inline-flex; align-items: center; align-self: flex-start; min-height: 44px; margin: calc(-1 * var(--space-3)) 0; }
.fd-footer__nav a { justify-content: center; min-width: 44px; }
@media (max-width: 860.98px) {
  .fd-footer__nav li:last-child:nth-child(odd) { grid-column: 1 / -1; justify-self: center; }
  .fd-quellen table, .fd-quellen tbody, .fd-quellen tr, .fd-quellen td { display: block; width: 100%; }
  .fd-quellen thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .fd-quellen tr { padding: var(--space-3) 0; border-bottom: 1px solid var(--border-default); }
  .fd-quellen td { padding: 0; border: 0; }
  .fd-quellen td:first-child { font-weight: 600; }
  .fd-quellen td:nth-child(2) { display: inline; font-weight: 600; white-space: normal; }
  .fd-quellen td:nth-child(3) { display: inline; color: var(--text-secondary); }
  .fd-quellen td:nth-child(2)::after { content: ' · '; color: var(--text-secondary); }
}
.fd-aussagen__einstieg + .fd-aussagen__einstieg { margin-top: var(--space-4); }   /* zwei Einstiegs-Absätze (Artikel 06) */
/* Artikel-Karte mobil: Symbol über dem Titel, Pfeil weg, der Titel nutzt die ganze Kartenbreite und trennt nur an Silben */
.fd-tcard--artikel a, .fd-tcard--artikel a:focus { overflow-wrap: normal; hyphens: auto; }
@media (max-width: 860.98px) {
  .fd-tcard.fd-tcard--artikel { flex-direction: column; gap: var(--space-3); }
  .fd-tcard--artikel .fd-tcard__pfeil { display: none; }
}

/* Handy-Fokus Z6 (13.10.2026, Abschnitt Ende der Datei): beim Tab-Fokus unten im Bild lagen Elemente (z. B. die Siegel-Chips) unter dem klebenden Kontakt-Knopf, dem Nach-oben-Knopf oder dem Consent-Banner.
   scroll-padding-bottom sagt dem Browser, wie viel Platz unten verdeckt ist: er scrollt den Fokus darüber (Maus und Touch merken nichts, das gilt nur für Fokus- und Anker-Scrollen).
   Handy: Nach-oben-Knopf (88 px Abstand + 44 px) steht über dem klebenden Knopf. Ab 861 gibt es keinen klebenden Knopf, nur Nach-oben (24 + 44 px).
   --fd-banner setzt faden-shared.js (Höhe des Consent-Banners, solange er steht, sonst 0). Am Seitenende bekommt die Seite genau so viel Platz, damit die letzten Links frei erreichbar sind. */
html { --fd-banner: 0px; scroll-padding-bottom: max(calc(88px + 44px + var(--space-3) + env(safe-area-inset-bottom, 0px)), var(--fd-banner)); padding-bottom: var(--fd-banner); }
@media (min-width: 861px) {
  html { scroll-padding-bottom: max(calc(var(--space-6) + 44px + var(--space-3)), var(--fd-banner)); }
}

/* Handy-Fokus Z6b (13.10.2026, Abschnitt Ende der Datei): oben dasselbe für die klebende Kopfleiste. Elemente ohne id landeten beim Rückwärts-Tab, wenn sie am oberen Rand ankommen,
   unter der Kopfleiste (oder halb darunter). Anker-Ziele mit id behalten ihr scroll-margin-top von 72/96 px (Zeile [id]), nur Fokus-Ziele ohne id bekommen den Abstand. */
:where(a, button, summary, input, select, textarea, [tabindex]):not([id], .skip-link) { scroll-margin-top: calc(var(--fd-bar-h) + var(--space-3)); }
