/* tpc-theme.css — Pack-Theme The Putt Club (css_mode components)
   Quelle: source/assets/css (Kit-Build relaunch/3-layoutdraft, eingefroren laut source/FREEZE.md)
   = core.46fd74d0.css + reihenfolgetreue Vereinigung von 16 Seiten-CSS (pack/bin/build-theme-css.py).
   Font- und Masken-URLs pack-relativ (../fonts/, ../form/). Nicht von Hand bearbeiten — bei neuem Kit-Build neu erzeugen. */
/* ===========================================================================
   Schicht 1 — Tokens · The Putt Club
   Drei Ebenen: Primitive (Rohwerte aus 2-designsystem/tokens.json, unverändert)
   → Semantic (Kit-Namen, Zuordnung siehe MAPPING.md) → Kontext je Fläche.
   Komponenten- und Block-CSS lesen AUSSCHLIESSLICH die Semantic-Ebene.
   Welt-Schicht: [data-welt] am <html> tauscht die Weltfarben (Jungle, später
   Neon und Sun); Semantic und Flächen lesen sie, keine Komponente ändert sich.
   =========================================================================== */

/* --- Ebene 1: Primitive (tokens.json, Stand 2026-10-13) -------------------- */
:root {
  /* Basis — weltenübergreifend */
  --tpc-void-black: #0B0D12;
  --tpc-ink-surface: #1D212B;
  --tpc-club-paper: #EDEFE9;
  --tpc-signal-lime: #C8FF4D;
  --tpc-ink-soft-on-dark: #A4AAB2;
  --tpc-ink-soft-on-light: #4A4F57;

  /* Welt — Standard Jungle (Startwelt) */
  --tpc-welt-grund: #173521;
  --tpc-welt-flaeche: #2F6B3A;
  --tpc-welt-licht: #E8A33D;
  --tpc-welt-hitze: #C1442B;
  --tpc-duo-dark: #0E1F14;
  --tpc-duo-light: #E8A33D;
  --tpc-grain-opacity: .05;

  /* Abstände — 8-px-Basis, Stufen aus tokens.json (4 … 160 px) */
  --space-0: 0;
  --space-1: .25rem;  --space-2: .5rem;   --space-3: .75rem;
  --space-4: 1rem;    --space-5: 1.5rem;  --space-6: 2rem;
  --space-7: 3rem;    --space-8: 4rem;    --space-9: 6rem;
  --space-10: 8rem;   --space-11: 10rem;

  /* Form */
  --radius-sm: 10px;
  --radius-md: 10px;
  --radius-lg: 20px;
  --radius-pill: 999px;
  --linie: 2px;

  /* Bewegung (motion-spec.md § 2) */
  --ease: cubic-bezier(.33, 1, .68, 1);
  --ease-in-out: cubic-bezier(.45, 0, .55, 1);
  --dur-hover: 120ms;
  --dur-press: 150ms;
  --dur-toggle: 240ms;
  --dur-modal: 320ms;
  --dur-sheet: 400ms;
  --dur-settle: 560ms;
  --dur-fast: var(--dur-hover);
  --dur-base: var(--dur-toggle);

  /* Maße */
  --container-max: 1440px;
  --container-max-weit: 1760px;
  --gutter: clamp(20px, 5vw, 80px);
  --container-pad: var(--gutter);
  --bleed: calc((100vw - min(100vw, var(--container-max))) / 2 + var(--gutter));
  --raster-gap: 24px;
  --content-measure: 62ch;
  --tap-min: 44px;
  --section-pad: clamp(5.5rem, 12vh, 9rem);

  /* Kopfhöhe für Heros mit Bildschirmhöhe (gemessen, header.css): ab 900 px 88 px
     (min-height), darunter 78 px (46-px-Menüknopf + 2 × 16 px Polster; Logo 36 px).
     Die Hinweisleiste (seit 19.10.2026 zurück, Marc Nr. 63) setzt ihr Maß ab 900 px selbst
     (sticky-leiste.css); hier steht der Grundwert 0.
     Gescrollt schrumpft die Kopfzeile auf --kopf-h-gescrollt (header.css gleicht die Differenz
     mit Außenabstand aus); Heros und Ankerabstand rechnen weiter mit --kopf-h. */
  --kopf-h: 88px;
  --kopf-h-gescrollt: 70px;           /* Kopfzeile ab 50 px Scroll (Logo 34 px; 46-px-Pillen + 2 × 12 px), seit 14.10.2026 */
  --hinweisleiste-h: 0px;
  --header-h: calc(var(--kopf-h) + var(--hinweisleiste-h));
}
@media (max-width: 899px) {
  :root { --kopf-h: 78px; --kopf-h-gescrollt: 62px; }   /* mobil: Logo 36 → 28 px */
}

/* Welt-Schicht. Neon und Sun sind vorbereitet, noch nicht im Einsatz. */
[data-welt="jungle"] {
  --tpc-welt-grund: #173521;
  --tpc-welt-flaeche: #2F6B3A;
  --tpc-welt-licht: #E8A33D;
  --tpc-welt-hitze: #C1442B;
  --tpc-duo-dark: #0E1F14;
  --tpc-duo-light: #E8A33D;
}
[data-welt="neon"] {
  --tpc-welt-grund: #0A0714;
  --tpc-welt-flaeche: #7A2BFF;
  --tpc-welt-licht: #3DFDFF;
  --tpc-welt-hitze: #FF3DAE;
  --tpc-duo-dark: #0A0714;
  --tpc-duo-light: #FF3DAE;
}
[data-welt="sun"] {
  --tpc-welt-grund: #1E3B3A;
  --tpc-welt-flaeche: #4C9A5B;
  --tpc-welt-licht: #F2E4C4;
  --tpc-welt-hitze: #4FA8D8;
  --tpc-duo-dark: #1E3B3A;
  --tpc-duo-light: #F2E4C4;
}

/* --- Ebene 2: Semantic — Kit-Namen, Seitenfläche Paper ---------------------- */
:root {
  /* Text */
  --text-strong:     var(--tpc-void-black);
  --text-body:       var(--tpc-void-black);
  --text-muted:      var(--tpc-ink-soft-on-light);
  --text-on-brand:   var(--tpc-club-paper);
  --text-link:       var(--tpc-void-black);
  --text-link-hover: var(--tpc-void-black);
  --text-preis:      var(--tpc-void-black);   /* Lime als Text nie auf Paper */

  /* Flächen */
  --surface-page:   var(--tpc-club-paper);
  --surface-card:   var(--tpc-club-paper);   /* Kit-Farbe; Weiß-Entscheid R4 zurückgenommen (Chris 14.10.2026) */
  --surface-papier: var(--tpc-club-paper);   /* Paper-Ring am Ballkreis */
  --surface-muted:  color-mix(in srgb, var(--tpc-void-black) 6%, transparent);
  --surface-hover:  color-mix(in srgb, var(--tpc-void-black) 8%, transparent);
  --surface-brand:  var(--tpc-welt-grund);
  --surface-system: var(--tpc-void-black);    /* Sticky-Leiste */

  /* Linien */
  --border-default:     color-mix(in srgb, var(--tpc-void-black) 12%, transparent);
  --border-strong:      var(--tpc-void-black);
  --border-interactive: var(--tpc-void-black);

  /* Interaktion: Lime ist die einzige Aktionsfarbe */
  --interactive:       var(--tpc-signal-lime);
  --interactive-hover: var(--tpc-signal-lime);
  --interactive-press: var(--tpc-signal-lime);
  --interactive-fg:    var(--tpc-void-black);
  --interactive-kante: var(--tpc-void-black);  /* Rand und Unterkante der Pille */
  --disabled-bg:       transparent;
  --disabled-fg:       var(--tpc-void-black);

  /* Fokus */
  --focus-ring:        var(--tpc-void-black);
  --focus-ring-width:  3px;
  --focus-ring-offset: 4px;

  /* Status */
  --status-danger:  var(--tpc-welt-hitze);
  --status-success: var(--tpc-welt-flaeche);

  /* Signatur und Flächenwerte (Zusatz zum Kit, siehe MAPPING.md) */
  --accent:          var(--tpc-signal-lime);   /* Satzpunkt-Ball, Listenmarke */
  --accent-kante:    var(--tpc-void-black);
  --link-deko:       var(--tpc-welt-flaeche);
  --trail:           var(--tpc-void-black);
  --btn-dx:          0px;
  --btn-dy:          4px;
  --btn-lx:          0px;
  --schatten-karte:  0 6px 0 var(--tpc-void-black);
  --schatten-dialog: 8px 8px 0 var(--tpc-void-black);
  --schatten-ball:   0 30px 60px -30px color-mix(in srgb, var(--tpc-welt-grund) 45%, transparent);
  --hauch-a:         color-mix(in srgb, var(--tpc-welt-licht) 14%, transparent);
  --hauch-b:         color-mix(in srgb, var(--tpc-welt-flaeche) 12%, transparent);
  --deko-blatt:      var(--tpc-welt-flaeche);
  --deko-blatt-2:    var(--tpc-welt-grund);
  --abdunklung:      color-mix(in srgb, var(--tpc-void-black) 50%, transparent);
}

/* --- Ebene 3: Kontext je Fläche --------------------------------------------
   Die Weltfläche belegt die komplette Familie um, die ihre Kinder lesen: Text,
   Flächen, Linien, Interaktion, Fokus, Hover, Versatzschatten, Trail, Hauch.
   Immer Endtokens, nie Zwischentokens (Bauplan § e). Keine Kombinationsregeln.
   -------------------------------------------------------------------------- */
.tpc-section--brand {
  /* Flächen */
  --surface-page:    var(--tpc-welt-grund);
  --surface-card:    var(--tpc-club-paper);
  --surface-muted:   color-mix(in srgb, var(--tpc-club-paper) 8%, transparent);
  --surface-hover:   color-mix(in srgb, var(--tpc-club-paper) 10%, transparent);
  /* Text */
  --text-strong:     var(--tpc-club-paper);
  --text-body:       var(--tpc-club-paper);
  --text-muted:      color-mix(in srgb, var(--tpc-club-paper) 78%, transparent);
  --text-link:       var(--tpc-club-paper);
  --text-link-hover: var(--tpc-club-paper);
  --text-preis:      var(--tpc-signal-lime);
  /* Linien */
  --border-default:     color-mix(in srgb, var(--tpc-club-paper) 18%, transparent);
  --border-strong:      var(--tpc-club-paper);
  --border-interactive: var(--tpc-club-paper);
  /* Interaktion */
  --interactive:       var(--tpc-signal-lime);
  --interactive-hover: var(--tpc-signal-lime);
  --interactive-press: var(--tpc-signal-lime);
  --interactive-fg:    var(--tpc-void-black);
  --interactive-kante: var(--tpc-void-black);
  --disabled-fg:       var(--tpc-club-paper);
  /* Fokus */
  --focus-ring:      var(--tpc-signal-lime);
  /* Signatur und Flächenwerte */
  --link-deko:       var(--tpc-signal-lime);
  --trail:           var(--tpc-signal-lime);
  --btn-dx:          4px;
  --btn-dy:          4px;
  --btn-lx:          -1px;
  --schatten-karte:  8px 8px 0 var(--tpc-void-black);
  --hauch-a:         color-mix(in srgb, var(--tpc-welt-flaeche) 14%, transparent);
  --hauch-b:         color-mix(in srgb, var(--tpc-welt-licht) 8%, transparent);
  --deko-blatt:      var(--tpc-welt-flaeche);
  --deko-blatt-2:    var(--tpc-duo-dark);
}

/* Void — dunkle Systemfläche (Hauptmenü der Kopfzeile, seit 13.10.2026). Dieselbe
   Familie wie die Weltfläche, auf Void Black: Paper-Text, Lime für Fokus und Linkdeko,
   Hover- und Aktivfläche Ink Surface (--surface-muted), Kante der Lime-Pille in Paper. */
.tpc-section--dark {
  /* Flächen */
  --surface-page:    var(--tpc-void-black);
  --surface-card:    var(--tpc-club-paper);
  --surface-muted:   var(--tpc-ink-surface);
  --surface-hover:   color-mix(in srgb, var(--tpc-club-paper) 12%, transparent);
  /* Text */
  --text-strong:     var(--tpc-club-paper);
  --text-body:       var(--tpc-club-paper);
  --text-muted:      var(--tpc-ink-soft-on-dark);
  --text-link:       var(--tpc-club-paper);
  --text-link-hover: var(--tpc-club-paper);
  --text-preis:      var(--tpc-signal-lime);
  /* Linien */
  --border-default:     color-mix(in srgb, var(--tpc-club-paper) 18%, transparent);
  --border-strong:      var(--tpc-club-paper);
  --border-interactive: var(--tpc-club-paper);
  /* Interaktion */
  --interactive:       var(--tpc-signal-lime);
  --interactive-hover: var(--tpc-signal-lime);
  --interactive-press: var(--tpc-signal-lime);
  --interactive-fg:    var(--tpc-void-black);
  --interactive-kante: var(--tpc-club-paper);
  --disabled-fg:       var(--tpc-club-paper);
  /* Fokus */
  --focus-ring:      var(--tpc-signal-lime);
  /* Signatur und Flächenwerte */
  --accent:          var(--tpc-signal-lime);
  --accent-kante:    var(--tpc-void-black);
  --link-deko:       var(--tpc-signal-lime);
  --trail:           var(--tpc-signal-lime);
  --btn-dx:          0px;
  --btn-dy:          3px;
  --btn-lx:          0px;
  --schatten-karte:  0 6px 0 var(--tpc-club-paper);
  --hauch-a:         color-mix(in srgb, var(--tpc-welt-flaeche) 10%, transparent);
  --hauch-b:         color-mix(in srgb, var(--tpc-welt-licht) 6%, transparent);
  --deko-blatt:      var(--tpc-welt-flaeche);
  --deko-blatt-2:    var(--tpc-ink-surface);
}

/* ===========================================================================
   Schicht 2 — Schriften · The Putt Club
   Self-hosted woff2 (SIL Open Font License 1.1, Hinweis: /assets/fonts/OFL.txt),
   nur lateinisches Subset. Unbounded und Inter als variable Schnitte.
   =========================================================================== */

@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 600 800;
  font-display: swap;
  src: url(../fonts/unbounded-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url(../fonts/inter-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Space Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/space-mono-400-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Space Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(../fonts/space-mono-700-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
  --font-display: 'Unbounded', 'Arial Black', sans-serif;
  --font-body:    'Inter', system-ui, sans-serif;
  --font-mono:    'Space Mono', ui-monospace, monospace;

  /* Typo-Skala (design-brief.md Block 5, colors_and_type.css) */
  --display-size: clamp(4.5rem, 10vw, 9rem);   --display-lh: .86; --display-weight: 800; --display-tracking: -.04em;
  --h1-size: clamp(2.5rem, 4.6vw, 4.5rem);      --h1-lh: .95;  --h1-weight: 800; --h1-tracking: -.025em;
  --h2-size: clamp(2.25rem, 4vw, 3.5rem);       --h2-lh: 1;    --h2-weight: 700; --h2-tracking: -.02em;
  --h3-size: clamp(1.25rem, 1.6vw, 1.5rem);     --h3-lh: 1.1;  --h3-weight: 600; --h3-tracking: -.01em;
  --h4-size: 1.125rem;  --h4-lh: 1.25; --h4-weight: 600; --h4-tracking: -.01em;
  --h5-size: 1rem;      --h5-lh: 1.3;  --h5-weight: 600; --h5-tracking: -.005em;
  --h6-size: .9375rem;  --h6-lh: 1.3;  --h6-weight: 600; --h6-tracking: 0;
  --lead-size: 1.1875rem; --lead-lh: 1.5;
  --body-size: 1.0625rem; --body-lh: 1.55; --body-weight: 400;
  --caption-size: .9375rem; --caption-lh: 1.5; --caption-weight: 400; --caption-tracking: 0;
  --btn-size: .9375rem;   --btn-size-sm: .875rem;
  --mono-size: .8125rem;  --mono-tracking: .02em;
}

@media (max-width: 899px) {
  :root {
    --h1-size: clamp(2rem, 8.6vw, 3rem);
    --lead-size: 1.0625rem;
  }
}

/* ===========================================================================
   Schicht 3 — Basis · The Putt Club
   Element-Defaults, Typo-Skala als Klassen, Fokus, Container, Sektion mit
   Mesh-Hauch, Phasen-Schalter. Liest nur Tokens.
   =========================================================================== */

*, *::before, *::after { box-sizing: border-box; }

html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--body-size);
  line-height: var(--body-lh);
  font-weight: var(--body-weight);
  color: var(--text-body);
  background: var(--surface-page);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: clip;
}

::selection { background: var(--accent); color: var(--interactive-fg); }

img, svg, video { max-width: 100%; }
img { height: auto; display: block; }
a { color: inherit; }
button { font: inherit; color: inherit; }
ul, ol { margin: 0; padding: 0; }
figure { margin: 0; }

/* --- Phasen-Schalter -------------------------------------------------------
   <html data-phase="vor-eroeffnung"> bis zur Eröffnung, danach "geoeffnet".
   Elemente, die nur in einer Phase gelten, tragen data-tpc-nur. Nach der
   Eröffnung ändert sich ausschließlich das Attribut im Template.
   -------------------------------------------------------------------------- */
[data-phase="vor-eroeffnung"] [data-tpc-nur="geoeffnet"],
[data-phase="geoeffnet"] [data-tpc-nur="vor-eroeffnung"] { display: none !important; }

/* --- Typo-Skala als Klassen ------------------------------------------------
   Die HTML-Ebene folgt der Bedeutung, die Klasse der Größe.
   -------------------------------------------------------------------------- */
.tpc-h1, .tpc-h2, .tpc-h3, .tpc-h4, .tpc-h5, .tpc-h6, .tpc-display {
  margin: 0;
  color: var(--text-strong);
  font-family: var(--font-display);
  text-wrap: balance;
}
.tpc-display { font-size: var(--display-size); line-height: var(--display-lh); letter-spacing: var(--display-tracking); font-weight: var(--display-weight); }
.tpc-h1 { font-size: var(--h1-size); line-height: var(--h1-lh); letter-spacing: var(--h1-tracking); font-weight: var(--h1-weight); }
.tpc-h2 { font-size: var(--h2-size); line-height: var(--h2-lh); letter-spacing: var(--h2-tracking); font-weight: var(--h2-weight); }
.tpc-h3 { font-size: var(--h3-size); line-height: var(--h3-lh); letter-spacing: var(--h3-tracking); font-weight: var(--h3-weight); }
.tpc-h4 { font-size: var(--h4-size); line-height: var(--h4-lh); letter-spacing: var(--h4-tracking); font-weight: var(--h4-weight); }
.tpc-h5 { font-size: var(--h5-size); line-height: var(--h5-lh); letter-spacing: var(--h5-tracking); font-weight: var(--h5-weight); }
.tpc-h6 { font-size: var(--h6-size); line-height: var(--h6-lh); letter-spacing: var(--h6-tracking); font-weight: var(--h6-weight); }

/* Silbentrennung in Überschriften (19.10.2026). Unbounded läuft sehr breit, einzelne Komposita
   sind breiter als ihre Fläche und wurden abgeschnitten (gemessen bei 390 px: „Überraschungen.“
   534 px, „Geschäftsbedingungen“ 493 px, „unvergesslicher“ 392 px auf 350 px Fläche; Treffer bis
   768 px; H3 in schmalen Karten bis 1000 px, „Bewegung ohne Leistungsdruck:“ 199 > 188 px bei 900).
   Deshalb trennt der Browser nach dem deutschen Wörterbuch (<html lang="de">), nur Wörter ab
   10 Zeichen, mit mindestens 4 Zeichen vor und 3 nach der Trennstelle — kurze Wörter bleiben ganz.
   overflow-wrap: break-word ist das Netz für Wörter ohne Trennstelle im Wörterbuch.
   Geltung: h1/h2 unter 900 px, h3–h6 unter 1200 px (Karten-Spalten bleiben bis dahin schmal).
   Darüber steht jedes Wort ganz, hyphens: none hebt auch weiche Trennstellen (&shy;) auf. h1/h2
   trennen ab 900 px bewusst nicht: Dort passt jedes Wort, die Trennung hätte nur passende Zeilen
   umgebrochen („Klassen-ausflug“) und &shy; für schmale Breiten aktiviert. Der Hero-Claim trennt
   in jeder Breite über seine eigene Regel (cb01-hero.css). */
@media (max-width: 899px) {
  :where(h1, h2) { -webkit-hyphens: auto; hyphens: auto; hyphenate-limit-chars: 10 4 3; overflow-wrap: break-word; }
}
@media (max-width: 1199px) {
  :where(h3, h4, h5, h6) { -webkit-hyphens: auto; hyphens: auto; hyphenate-limit-chars: 10 4 3; overflow-wrap: break-word; }
}
@media (min-width: 900px) {
  :where(h1, h2) { hyphens: none; }
}
@media (min-width: 1200px) {
  :where(h3, h4, h5, h6) { hyphens: none; }
}
/* Schlusswort mit Satzpunkt-Ball (.tpc-nobr um Wort und .tpc-stop): Das Wort selbst darf
   umbrechen und trennen. Die Grenze zwischen letztem Buchstaben und Ball bleibt geschlossen,
   weil dort white-space der gemeinsamen Elternspanne (.tpc-nobr, nowrap) entscheidet. */
:where(h1, h2, h3, h4, h5, h6) .tpc-nobr:has(> .tpc-stop) > :first-child { white-space: normal; }

.tpc-lead    { font-size: var(--lead-size); line-height: var(--lead-lh); color: var(--text-body); max-width: 42ch; }
.tpc-body    { font-size: var(--body-size); line-height: var(--body-lh); font-weight: var(--body-weight); }
.tpc-caption { font-size: var(--caption-size); line-height: var(--caption-lh); letter-spacing: var(--caption-tracking); color: var(--text-muted); }
.tpc-daten   { font-family: var(--font-mono); font-size: var(--mono-size); letter-spacing: var(--mono-tracking); }
.tpc-measure { max-width: var(--content-measure); }
.tpc-nobr    { white-space: nowrap; }

/* --- Fließtext-Rhythmus ----------------------------------------------------
   Reihenfolge ist tragend: erst nullen, dann den Abstand zwischen Geschwistern.
   -------------------------------------------------------------------------- */
p { margin-block: 0; }
.tpc-flow > * { margin-block: 0; }
.tpc-flow > * + * { margin-block-start: var(--space-4); }

/* --- Rechtstext (AGB, Datenschutz, Impressum, Barrierefreiheit) ------------
   Abschnittstitel sind lange nummerierte Sätze („13. Foto-/Videoaufnahmen und
   Persönlichkeitsrechte“), keine Bühnenzeilen: Sie bleiben h2 für die Gliederung, stehen
   aber in der H3-Stufe. Greift auch für h2 ohne Klasse aus dem Editor-Richtext. */
.tpc-rechtstext h2 {
  font-family: var(--font-display);
  color: var(--text-strong);
  font-size: var(--h3-size); line-height: var(--h3-lh); letter-spacing: var(--h3-tracking); font-weight: var(--h3-weight);
}
.tpc-rechtstext > h2 { margin-block-start: var(--space-6); }
.tpc-rechtstext > h2 + * { margin-block-start: var(--space-3); }

/* --- Textlink im Fließtext ------------------------------------------------- */
.tpc-link {
  color: var(--text-link);
  font-weight: 500;
  text-decoration: underline;
  text-decoration-thickness: var(--linie);
  text-underline-offset: .32em;
  text-decoration-color: var(--link-deko);
  border-radius: 2px;
  transition: text-decoration-color var(--dur-hover) var(--ease);
}
.tpc-link:hover { color: var(--text-link-hover); text-decoration-color: currentColor; }

/* --- Globaler Tastatur-Fokus ----------------------------------------------- */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: var(--focus-ring-width) solid var(--focus-ring);
  outline-offset: var(--focus-ring-offset);
}

/* --- Layout ---------------------------------------------------------------- */
.tpc-container {
  width: 100%;
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: var(--container-pad);
}
.tpc-raster {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
}

/* Die Sektion löst Grund und Farbe selbst auf (Bauplan § e). Harter Cut: keine
   Kante, kein Schatten. Der Mesh-Hauch liegt innen; seine Lage wechselt von
   Sektion zu Sektion, der Mittelpunkt bleibt mindestens 25 % von jeder Kante. */
.tpc-section {
  --hx: 84%; --hy: 34%; --bx: 12%; --by: 66%;
  position: relative;
  padding-block: var(--section-pad);
  color: var(--text-body);
  background:
    radial-gradient(44% 46% at var(--hx) var(--hy), var(--hauch-a), transparent 70%),
    radial-gradient(38% 42% at var(--bx) var(--by), var(--hauch-b), transparent 70%),
    var(--surface-page);
  overflow: clip;
}
main > .tpc-section:nth-of-type(4n + 2) { --hx: 14%; --hy: 66%; --bx: 82%; --by: 30%; }
main > .tpc-section:nth-of-type(4n + 3) { --hx: 16%; --hy: 32%; --bx: 86%; --by: 70%; }
main > .tpc-section:nth-of-type(4n + 4) { --hx: 86%; --hy: 68%; --bx: 10%; --by: 34%; }

/* --- Icon-Sprite ----------------------------------------------------------- */
.tpc-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }

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

/* --- Bewegungsreduktion ---------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ===========================================================================
   Schicht 4 — Basis-Komponenten · The Putt Club
   Jede Komponente liefert Struktur, Größen und Zustände. Flächen brauchen keine
   Komponentenvariante: Paper und Welt belegen die Tokens um, die Komponente
   liest sie. Kein Farbwert, Schatten oder Radius als Literal.
   =========================================================================== */

/* --- Knopf -----------------------------------------------------------------
   Genau die Zeus-Varianten primary · secondary · ghost · link.
   primary  = drückbare Lime-Pille mit Void-Rand und Unterkante (einziger CTA-Stil)
   secondary = dieselbe Pille auf Kartenpapier (Reserve, auf der Startseite ungenutzt)
   ghost    = Zweitaktion, Rand in Textfarbe
   link     = Textlink-Aktion (Trefferfläche = Zeile)
   -------------------------------------------------------------------------- */
.tpc-btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--space-2);
  min-height: 54px;
  padding: 0 26px;
  border: var(--linie) solid var(--interactive-kante);
  border-radius: var(--radius-pill);
  background: var(--interactive);
  color: var(--interactive-fg);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--btn-size);
  line-height: 1.15;
  letter-spacing: -.005em;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  touch-action: manipulation;
  box-shadow: var(--btn-dx) var(--btn-dy) 0 var(--interactive-kante);
  transform: translate(0, 0);
  transition: transform var(--dur-hover) var(--ease), box-shadow var(--dur-hover) var(--ease), background-color var(--dur-hover) var(--ease);
}
.tpc-btn--sm { min-height: 46px; padding: 0 20px; font-size: var(--btn-size-sm); }
.tpc-btn--full { width: 100%; }

.tpc-btn--primary:hover {
  background: var(--interactive-hover);
  transform: translate(var(--btn-lx), -2px);
  box-shadow: calc(var(--btn-dx) - var(--btn-lx)) calc(var(--btn-dy) + 2px) 0 var(--interactive-kante);
}
.tpc-btn--primary:active {
  background: var(--interactive-press);
  transform: translate(var(--btn-dx), var(--btn-dy));
  box-shadow: 0 0 0 var(--interactive-kante);
  transition-duration: var(--dur-press);
}

.tpc-btn--secondary { background: var(--surface-card); color: var(--interactive-fg); }
.tpc-btn--secondary:hover {
  transform: translate(var(--btn-lx), -2px);
  box-shadow: calc(var(--btn-dx) - var(--btn-lx)) calc(var(--btn-dy) + 2px) 0 var(--interactive-kante);
}
.tpc-btn--secondary:active {
  transform: translate(var(--btn-dx), var(--btn-dy));
  box-shadow: 0 0 0 var(--interactive-kante);
  transition-duration: var(--dur-press);
}

.tpc-btn--ghost {
  background: transparent;
  color: var(--text-strong);
  border-color: var(--border-strong);
  box-shadow: none;
}
.tpc-btn--ghost:hover { background: var(--surface-hover); }
.tpc-btn--ghost:active { transform: translateY(1px); transition-duration: var(--dur-press); }

.tpc-btn--link {
  min-height: auto;
  padding: 0;
  border: 0;
  border-radius: 2px;
  background: transparent;
  box-shadow: none;
  color: var(--text-link);
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 1rem;
  text-decoration: underline;
  text-decoration-thickness: var(--linie);
  text-underline-offset: .38em;
  text-decoration-color: var(--link-deko);
  transition: text-decoration-color var(--dur-hover) var(--ease);
}
.tpc-btn--link:hover { color: var(--text-link-hover); text-decoration-color: currentColor; }
.tpc-btn--link:active { transform: translateY(1px); }

.tpc-btn:disabled, .tpc-btn[aria-disabled="true"] {
  background: var(--disabled-bg);
  color: var(--disabled-fg);
  border-color: currentColor;
  border-style: dashed;
  box-shadow: none;
  transform: none;
  cursor: default;
  pointer-events: none;
}
.tpc-btn[aria-busy="true"] { cursor: progress; }

/* Knopf nimmt den Ball an (Hero-Sequenz, einmal) */
@keyframes tpc-knock { 0% { transform: translateY(0); } 40% { transform: translateY(2px); } 100% { transform: translateY(0); } }
@media (prefers-reduced-motion: no-preference) {
  .tpc-btn.is-knock { animation: tpc-knock 360ms var(--ease); }
}

/* --- Status-Pille „Ab Eröffnung buchbar“ ------------------------------------
   Kein Knopf und kein fünfter Knopf-Typ: gestrichelte, nicht fokussierbare
   Pille an der Stelle der Buchen-Aktion, solange Togo2 keine Startzeiten hat.
   -------------------------------------------------------------------------- */
.tpc-status {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 54px;
  padding: 0 24px;
  border: var(--linie) dashed var(--border-strong);
  border-radius: var(--radius-pill);
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--btn-size);
  line-height: 1.15;
  white-space: nowrap;
  cursor: default;
}
.tpc-status--sm { min-height: 46px; padding: 0 18px; font-size: var(--btn-size-sm); }

/* --- Aktionsgruppe und Vertrauenszeile ------------------------------------- */
.tpc-aktionen { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-4) 18px; }
/* Sehr schmale Telefone: lange Knopftexte („Kindergeburtstag anfragen“) brechen um, statt
   über den Bildschirmrand zu laufen. */
@media (max-width: 379px) { .tpc-btn { max-width: 100%; white-space: normal; } }
/* Unter 900 px stapeln Aktionsgruppen mit Knöpfen: jede Aktion volle Breite, Text mittig
   (Hero, Abschluss, Angebot, Tabellenfuß, Dialog). Die Sticky-Leiste hat ihre eigene Klasse. */
@media (max-width: 899px) {
  .tpc-aktionen:has(> .tpc-btn, > .tpc-status) { flex-direction: column; align-items: stretch; }
  .tpc-aktionen > .tpc-btn, .tpc-aktionen > .tpc-status { width: 100%; white-space: normal; text-align: center; }
}
.tpc-vertrauen {
  list-style: none;
  display: flex; flex-wrap: wrap;
  gap: var(--space-2) var(--space-6);
  font-size: var(--caption-size);
  line-height: var(--caption-lh);
  color: var(--text-muted);
}
.tpc-vertrauen li { display: inline-flex; align-items: baseline; gap: 10px; }
.tpc-vertrauen li::before {
  content: "";
  flex: none;
  width: .55em; height: .55em;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: inset 0 0 0 1.5px var(--accent-kante);
  transform: translateY(-.05em);
}

/* --- Icon-Knopf (Menü, Schließen) ------------------------------------------ */
.tpc-iconbtn {
  display: inline-flex; align-items: center; justify-content: center;
  width: var(--tap-min); height: var(--tap-min); flex: none;
  padding: 0;
  border: 0;
  border-radius: var(--radius-pill);
  background: transparent;
  color: var(--text-strong);
  cursor: pointer;
  transition: background-color var(--dur-hover) var(--ease);
}
.tpc-iconbtn svg { width: 22px; height: 22px; }
.tpc-iconbtn:hover { background: var(--surface-hover); }
.tpc-iconbtn:active { transform: translateY(1px); }
.tpc-iconbtn:disabled, .tpc-iconbtn[aria-disabled="true"] { opacity: .4; cursor: default; pointer-events: none; }

/* --- Satzpunkt-Ball ---------------------------------------------------------
   Lime-Kreis mit Void-Rand in 0,3 em, ersetzt den letzten Punkt einer Headline.
   Screenreader lesen den echten Punkt aus .tpc-sr davor.
   -------------------------------------------------------------------------- */
.tpc-stop {
  position: relative;
  display: inline-block;
  width: .3em; height: .3em;
  margin-left: .06em;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: inset 0 0 0 .045em var(--accent-kante);
  vertical-align: baseline;
}
.tpc-stop::after {
  content: "";
  position: absolute; inset: -.32em;
  border-radius: 50%;
  background: radial-gradient(closest-side, color-mix(in srgb, var(--accent) 75%, transparent), transparent);
  opacity: 0;
  z-index: -1;
  pointer-events: none;
}

/* --- Putt-Trail -------------------------------------------------------------
   Gepunktete Bahn, Punkt Ø 6 px, 15 px Mittenabstand, Farbe aus der Fläche.
   Immer mit Start (Ball) und Ziel (Satzpunkt oder Aktion); nie über einen Cut.
   -------------------------------------------------------------------------- */
.tpc-trail {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  overflow: visible;
  pointer-events: none;
  z-index: 2;
}
.tpc-trail__punkt { fill: var(--trail); }
.tpc-trail.is-ruhig .tpc-trail__punkt { animation: none !important; opacity: 1 !important; transform: none !important; }
.tpc-ball {
  display: inline-block;
  width: 22px; height: 22px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: inset 0 0 0 var(--linie) var(--accent-kante);
}

/* --- Bildmasken und Deko-Blätter --------------------------------------------
   Blatt hoch 38 : 50, Blatt quer 50 : 38, Ballkreis 1 : 1 mit Paper-Ring.
   Die Masken liegen als SVG unter /assets/form/. Alle Blätter sind Monstera-Blätter:
   Die Fotomasken (blatt-hoch/-quer) haben nur kurze Randschlitze, damit das Foto
   lesbar bleibt; das Deko-Blatt (blatt-deko-hoch) hat tiefe Schlitze und eine
   ausgesparte Mittelrippe.
   -------------------------------------------------------------------------- */
.tpc-maske { position: relative; margin: 0; }
.tpc-maske img { width: 100%; height: 100%; object-fit: cover; }
.tpc-maske--blatt-hoch { aspect-ratio: 38 / 50; }
.tpc-maske--blatt-quer { aspect-ratio: 50 / 38; }
.tpc-maske--blatt-hoch img {
  -webkit-mask: url(../form/blatt-hoch.svg) center / 100% 100% no-repeat;
          mask: url(../form/blatt-hoch.svg) center / 100% 100% no-repeat;
}
.tpc-maske--blatt-quer img {
  -webkit-mask: url(../form/blatt-quer.svg) center / 100% 100% no-repeat;
          mask: url(../form/blatt-quer.svg) center / 100% 100% no-repeat;
}
.tpc-maske--ball {
  aspect-ratio: 1;
  padding: 8px;
  border-radius: 50%;
  background: var(--surface-papier);
}
.tpc-maske--ball img { border-radius: 50%; }

.tpc-blatt {
  display: block;
  aspect-ratio: 38 / 50;
  background: var(--deko-blatt);
  -webkit-mask: url(../form/blatt-deko-hoch.svg) center / 100% 100% no-repeat;
          mask: url(../form/blatt-deko-hoch.svg) center / 100% 100% no-repeat;
  pointer-events: none;
}
.tpc-blatt--tief { background: var(--deko-blatt-2); }

/* --- Kundenlieferung -------------------------------------------------------
   Platzhalter für Inhalte, die der Kunde noch liefert ([KUNDE-LIEFERT]):
   überall derselbe gestrichelte Rahmen, damit die Lücke als Lücke lesbar bleibt.
   -------------------------------------------------------------------------- */
.tpc-luecke {
  padding: var(--space-5) var(--space-6);
  border: var(--linie) dashed var(--border-strong);
  border-radius: var(--radius-lg);
  color: var(--text-muted);
}

/* --- Karte (Kartengrund Weiß seit 13.10.2026) --------------------------------
   Weißer Kartengrund in jeder Fläche: die Karte belegt ihre Text-Tokens selbst um,
   den Versatzschatten liest sie aus der Fläche (Paper senkrecht, Welt diagonal).
   -------------------------------------------------------------------------- */
.tpc-card {
  --text-strong: var(--tpc-void-black);
  --text-body: var(--tpc-void-black);
  --text-muted: var(--tpc-ink-soft-on-light);
  --text-link: var(--tpc-void-black);
  --text-link-hover: var(--tpc-void-black);
  --link-deko: var(--tpc-welt-flaeche);
  --border-default: color-mix(in srgb, var(--tpc-void-black) 12%, transparent);
  --border-strong: var(--tpc-void-black);
  --focus-ring: var(--tpc-void-black);
  position: relative;
  display: flex; flex-direction: column;
  background: var(--surface-card);
  color: var(--text-body);
  border: var(--linie) solid var(--interactive-kante);
  border-radius: var(--radius-lg);
  box-shadow: var(--schatten-karte);
  overflow: hidden;
}
.tpc-card__body { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-5) 22px; }
.tpc-card__title { color: var(--text-strong); }
.tpc-card__text { color: var(--text-muted); }
.tpc-card--link { text-decoration: none; transition: transform var(--dur-hover) var(--ease); }
.tpc-card--link .tpc-card__title {
  text-decoration: underline;
  text-decoration-thickness: var(--linie);
  text-underline-offset: .2em;
  text-decoration-color: transparent;
  transition: text-decoration-color var(--dur-hover) var(--ease);
}
.tpc-card--link:hover .tpc-card__title { text-decoration-color: var(--link-deko); }
.tpc-card--link:active { transform: translateY(2px); }
.tpc-card--link:focus-visible { outline-color: var(--focus-ring); }

/* --- Formularfeld ------------------------------------------------------------ */
.tpc-field { display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
.tpc-field__label { font-weight: 500; font-size: var(--caption-size); color: var(--text-strong); }
.tpc-field__hint  { font-size: .875rem; line-height: 1.45; color: var(--text-muted); }
.tpc-field__error {
  display: flex; gap: var(--space-2); align-items: baseline;
  font-size: .875rem; line-height: 1.45; color: var(--text-strong);
}
.tpc-field__error::before {
  content: ""; flex: none;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--status-danger);
  transform: translateY(-1px);
}
.tpc-field__error[hidden] { display: none; }

.tpc-input, .tpc-textarea, .tpc-select {
  width: 100%;
  min-height: 52px;
  padding: 0 var(--space-4);
  border: var(--linie) solid var(--border-strong);
  border-radius: var(--radius-sm);
  background: var(--surface-muted);
  color: var(--text-body);
  font: inherit;
  caret-color: var(--status-success);
  transition: box-shadow var(--dur-hover) var(--ease), border-color var(--dur-hover) var(--ease);
}
.tpc-textarea { min-height: 8rem; padding-block: var(--space-3); resize: vertical; }
.tpc-input::placeholder, .tpc-textarea::placeholder { color: var(--text-muted); }
.tpc-input:hover, .tpc-textarea:hover, .tpc-select:hover { box-shadow: inset 0 0 0 1px var(--border-strong); }
.tpc-input:focus-visible, .tpc-textarea:focus-visible, .tpc-select:focus-visible { outline-offset: 2px; }
.tpc-input[aria-invalid="true"], .tpc-textarea[aria-invalid="true"], .tpc-select[aria-invalid="true"] {
  border-color: var(--status-danger);
  box-shadow: inset 0 0 0 1px var(--status-danger);
}
.tpc-input:disabled, .tpc-textarea:disabled, .tpc-select:disabled { opacity: .5; cursor: default; }

/* --- Auswahl-Kachel (Einzelauswahl als Radio-Pille) --------------------------
   Echtes Radio bleibt im DOM und fokussierbar; sichtbar ist die Pille.
   -------------------------------------------------------------------------- */
.tpc-chip { position: relative; display: inline-flex; cursor: pointer; touch-action: manipulation; }
.tpc-chip__input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.tpc-chip__text {
  display: inline-flex; align-items: center;
  min-height: var(--tap-min);
  padding: 0 var(--space-4);
  border: var(--linie) solid var(--border-strong);
  border-radius: var(--radius-pill);
  background: transparent;
  color: var(--text-strong);
  font-weight: 500;
  font-size: var(--caption-size);
  line-height: 1;
  transition: background-color var(--dur-hover) var(--ease), transform var(--dur-press) var(--ease);
}
.tpc-chip:hover .tpc-chip__text { background: var(--surface-hover); }
.tpc-chip:active .tpc-chip__text { transform: scale(.97); }
.tpc-chip__input:checked + .tpc-chip__text { background: var(--interactive); color: var(--interactive-fg); border-color: var(--interactive-kante); }
.tpc-chip__input:focus-visible + .tpc-chip__text { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: var(--focus-ring-offset); }
.tpc-chip__input:disabled + .tpc-chip__text { opacity: .4; cursor: default; }
.tpc-chip__input[aria-invalid="true"] + .tpc-chip__text { border-color: var(--status-danger); }

/* --- Inhalts-Icon (Iconset The Putt Club) -----------------------------------
   Farbig als <img> auf Paper (Dateien aus /assets/icons/puttclub/color/), einfarbig als
   <svg><use href="#tpc-…"> auf Weltflächen. Immer neben einer Beschriftung, deshalb
   alt="" bzw. aria-hidden; kein Link, kein Tabstopp, keine Zusatzdekoration.
   Größen Desktop/Mobil (unter 768 px): --64 64/48 · --72 72/56 · --80 80/56 ·
   --96 96/64 · --112 112/72. Nie kleiner als 48 px.
   Abstand oberhalb einer Überschrift 16/12 px (--oben), seitlich 20/12 px (setzt der Block).
   -------------------------------------------------------------------------- */
.tpc-content-icon {
  --icon-groesse: 4.5rem;
  --icon-groesse-mobil: 3.5rem;
  display: block;
  flex-shrink: 0;
  width: var(--icon-groesse);
  height: var(--icon-groesse);
  object-fit: contain;
}
.tpc-content-icon--64  { --icon-groesse: 4rem;   --icon-groesse-mobil: 3rem; }
.tpc-content-icon--72  { --icon-groesse: 4.5rem; --icon-groesse-mobil: 3.5rem; }
.tpc-content-icon--80  { --icon-groesse: 5rem;   --icon-groesse-mobil: 3.5rem; }
.tpc-content-icon--96  { --icon-groesse: 6rem;   --icon-groesse-mobil: 4rem; }
.tpc-content-icon--112 { --icon-groesse: 7rem;   --icon-groesse-mobil: 4.5rem; }
/* Einfarbig auf Weltfläche: Linien Lime, Innenflächen exakt in der Flächenfarbe. */
.tpc-content-icon--on-green {
  color: var(--tpc-signal-lime);
  --icon-surface: var(--surface-page);
}
.tpc-content-icon--oben { margin-block-end: var(--space-4); }
@media (max-width: 767px) {
  .tpc-content-icon { width: var(--icon-groesse-mobil); height: var(--icon-groesse-mobil); }
  .tpc-content-icon--oben { margin-block-end: var(--space-3); }
}

/* ===========================================================================
   Zusammenzug der Schichten 1–4. Die Reihenfolge ist Vertrag:
   verify.mjs prüft sie gegen css-order.json. Block-CSS (Schicht 5) wird
   danach geladen, in der Reihenfolge aus css-order.json.
   =========================================================================== */

/* ===========================================================================
   Produktionsmotion „max“ — seitenweite Teile (seit 2026-10-13, motion-spec.md).
   Greift nur bei <html data-motion="max"> ohne .no-js (die Inline-Weiche entfernt
   .no-js vor dem ersten Paint; ohne JS bleibt die Klasse und alles steht sichtbar)
   und zusätzlich unter prefers-reduced-motion: no-preference. ?motion=basis schaltet
   auf die Basis-Fassung. Werte schreibt motion-max.js als Zahlen in Custom Properties;
   hier werden daraus translate/scale/rotate (addieren sich zu transform).
   =========================================================================== */
/* Gemeinsame Ladesequenz-Bausteine (Hero, Typo-Hero, Kontakt) */
@keyframes tpc-max-zeile { from { opacity: .01; transform: translateY(60%); } to { opacity: 1; transform: none; } }
@keyframes tpc-max-folgen { from { opacity: 0; transform: translateY(28px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: no-preference) {
  :root[data-motion="max"]:not(.no-js) [data-tpc-max~="parallax"] { translate: 0 calc(var(--tpc-par, 0) * 1px); }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max~="magnet"] { translate: calc(var(--tpc-mx, 0) * 1px) calc(var(--tpc-my, 0) * 1px); }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-wort] { display: inline-block; }
  /* Zähler: sichtbare Ziffern laufen, Screenreader lesen den Endwert (tpc-sr daneben). Die Breite
     ist auf den Endwert festgelegt: Zwischenwerte mit breiteren Ziffern ragen kurz über, der
     Umbruch der Zeile ändert sich nie (kein Layoutsprung). */
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-zahl] { display: inline-block; inline-size: var(--tpc-zahl-b, auto); white-space: nowrap; }

  /* Ball mit Dellen: rollt sichtbar (Rollbälle in Angebot und Abschluss) */
  :root[data-motion="max"]:not(.no-js) .tpc-roller {
    border-radius: 50%;
    background:
      radial-gradient(circle at 30% 32%, var(--accent-kante) 0 7%, transparent 9%),
      radial-gradient(circle at 68% 60%, var(--accent-kante) 0 7%, transparent 9%),
      radial-gradient(circle at 60% 24%, var(--accent-kante) 0 5%, transparent 7%),
      var(--accent);
    box-shadow: inset 0 0 0 var(--linie) var(--accent-kante);
    pointer-events: none;
    position: absolute; left: 0; top: 0; z-index: 2;
    width: var(--tpc-roller, 22px); height: var(--tpc-roller, 22px);
    opacity: 0;
  }
}

/* Kopfzeile (Theme-Teil) — liegt hell auf Paper und klebt oben (mit JS; ohne JS steht sie
   normal im Fluss). Ab 1100 px dreispaltig: Logo links, Hauptmenü mittig, Aktionen rechts
   (Lime-Pille + Status-Pille). Die Menüpunkte stehen frei auf Paper in Unbounded 600; der
   aktive Punkt trägt den Lime-Satzpunkt-Ball hinter dem Wort, bei Hover blendet er ein —
   sein Platz ist immer reserviert, damit das mittige Menü nicht springt. Die <nav> trägt
   den Void-Kontext (.tpc-section--dark) nur noch für das Events-Panel und, unter 1100 px,
   für das ausgeklappte Menü-Panel über die volle Kopfbreite (Untermenü dort offen und
   eingerückt); die Paper-Werte für die Hauptpunkte fängt der <header> vorher als
   --tpc-kopf-text/--tpc-kopf-fokus ab. Unter 900 px wandern die Aktionen in die Sticky-Leiste.
   Beim Scrollen (header.js, alle Breiten, Chris 14.10.): ab 50 px .is-gescrollt — Logo und
   Kopfhöhe schrumpfen (--tpc-kopf-ist), die Differenz zu --kopf-h hält ein Außenabstand, damit
   darunter nichts springt; nach unten .is-versteckt (translateY(-100%)), nach oben wieder da.
   Unter 1100 px öffnet das Menü als Vollbild-Ebene (100dvh), Logo und Schließen-Knopf bleiben
   oben auf Paper stehen. */
.tpc-skip {
  position: absolute; left: var(--space-4); top: var(--space-4); z-index: 100;
  transform: translateY(-300%);
  padding: var(--space-3) var(--space-4);
  background: var(--surface-card); color: var(--text-strong);
  border: var(--linie) solid var(--border-strong); border-radius: var(--radius-sm);
  font-weight: 500;
}
.tpc-skip:focus-visible { transform: translateY(0); }

/* Kopfzeile auf voller Breite: Kontext-Token; ab 900 px derselbe schmalere Rand wie im
   Hero, damit Logo und H1 links fluchten. Darunter bleibt der Gutter. */
.tpc-header {
  --container-max: 100%;
  --tpc-nav-ball: 8px;                         /* Satzpunkt-Ball am Menüpunkt */
  --tpc-kopf-ist: var(--kopf-h);               /* aktuelle Kopfhöhe (gescrollt kleiner) */
  --tpc-kopf-polster: var(--space-4);
  --tpc-logo-h: 44px;
  /* Paper-Werte, aufgelöst bevor die <nav> sie auf Void umbelegt */
  --tpc-kopf-text: var(--text-strong);
  --tpc-kopf-fokus: var(--focus-ring);
  --tpc-kopf-grund: var(--surface-page);
  position: relative; z-index: 20;
  background: var(--surface-page);
  color: var(--text-body);
}
:root:not(.no-js) { scroll-padding-top: calc(var(--kopf-h) + var(--space-3)); }
:root:not(.no-js) .tpc-header { position: sticky; top: 0; }
.tpc-header.is-gescrollt {
  --tpc-kopf-ist: var(--kopf-h-gescrollt);
  --tpc-kopf-polster: var(--space-3);
  --tpc-logo-h: 34px;
  margin-bottom: calc(var(--kopf-h) - var(--kopf-h-gescrollt));
}
.tpc-header.is-versteckt { transform: translateY(-100%); }
/* Bewegung nur ohne reduzierte Bewegung. Unter reduce blendet die Kopfzeile ohne Fahrt aus
   und ein (Sprung statt Gleiten) und das Logo wechselt die Größe ohne Übergang. */
@media (prefers-reduced-motion: no-preference) {
  .tpc-header { transition: transform var(--dur-toggle) var(--ease), margin-bottom var(--dur-toggle) var(--ease); }
  .tpc-header__inner { transition: min-height var(--dur-toggle) var(--ease), padding var(--dur-toggle) var(--ease); }
  .tpc-header__logo img { transition: height var(--dur-toggle) var(--ease); }
}
@media (min-width: 900px) {
  .tpc-header { --container-pad: clamp(20px, 3vw, 56px); }
}
.tpc-header__inner {
  display: flex; align-items: center; gap: var(--space-5);
  min-height: var(--tpc-kopf-ist);
  padding-block: var(--tpc-kopf-polster);
}
.tpc-header__logo { display: inline-flex; flex: none; border-radius: 4px; }
.tpc-header__logo img { width: auto; height: var(--tpc-logo-h); }

.tpc-header__nav { color: var(--text-body); }
.tpc-header__liste { list-style: none; display: flex; }
.tpc-header__link {
  display: inline-flex; align-items: center;
  min-height: var(--tap-min);
  padding: 0;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--btn-size);
  letter-spacing: -.005em;
  text-decoration: none;
  white-space: nowrap;
}

/* --- Satzpunkt-Ball --------------------------------------------------------------
   Hinter dem Wort auf der Grundlinie (in der Flex-Zeile mittig, um den halben Rand nach
   unten versetzt). Aktiv steht er, bei Hover rollt er ein. */
.tpc-header__link::after,
.tpc-header__sublink::after {
  content: "";
  display: inline-block;
  flex: none;
  width: var(--tpc-nav-ball); height: var(--tpc-nav-ball);
  margin-inline-start: calc(var(--tpc-nav-ball) * .4);
  align-self: center;
  margin-top: calc(.9em - var(--tpc-nav-ball));
  border-radius: 50%;
  background: var(--accent);
  box-shadow: inset 0 0 0 calc(var(--tpc-nav-ball) * .15) var(--accent-kante);
  opacity: 0;
  transform: translateX(calc(var(--tpc-nav-ball) * -.75)) scale(.4);
}
.tpc-header__link:hover::after,
.tpc-header__link[aria-current]::after,
.tpc-header__sublink:hover::after,
.tpc-header__sublink[aria-current]::after { opacity: 1; transform: none; }
@media (prefers-reduced-motion: no-preference) {
  .tpc-header__link::after,
  .tpc-header__sublink::after {
    transition: opacity var(--dur-toggle) var(--ease), transform var(--dur-toggle) var(--ease);
  }
}

/* --- Untermenü „Events“ ------------------------------------------------------
   Link führt zur Übersicht, der Knopf daneben schaltet die Liste (aria-expanded).
   Ab 1100 px schwebt die Liste als Void-Panel unter dem Punkt: öffnet bei Hover, Fokus
   und Klick, schließt bei Esc, Klick daneben und Fokus außerhalb (header.js).
   Ohne JS öffnet sie über :hover/:focus-within. */
.tpc-header__punkt { position: relative; display: flex; align-items: center; }
.tpc-header__sub-knopf {
  display: inline-flex; align-items: center; justify-content: center;
  width: var(--tap-min); height: var(--tap-min); flex: none;
  padding: 0;
  border: 0; border-radius: var(--radius-pill);
  background: transparent;
  color: var(--text-strong);
  cursor: pointer;
}
.tpc-header__sub-knopf svg { width: 14px; height: 14px; transition: transform var(--dur-toggle) var(--ease); }
.tpc-header__sub-knopf[aria-expanded="true"] svg { transform: rotate(180deg); }
.tpc-header__sub { list-style: none; }
.tpc-header__sublink {
  display: flex; align-items: center;
  min-height: var(--tap-min);
  padding: 0 var(--space-4);
  border-radius: var(--radius-sm);
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--btn-size-sm);
  text-decoration: none;
  white-space: nowrap;
  transition: background-color var(--dur-hover) var(--ease);
}

@media (min-width: 1100px) {
  /* Logo | Menü | Aktionen — die Außenspalten teilen sich den Rest, das Menü steht mittig,
     solange die Aktionen nicht breiter sind als die halbe Restbreite (sonst rückt es nach links). */
  .tpc-header__inner {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    column-gap: var(--space-6);
  }
  .tpc-header__logo { justify-self: start; }
  .tpc-header__aktionen { justify-self: end; flex-wrap: nowrap; }
  .tpc-header__liste { gap: var(--space-6); }
  .tpc-header__liste > li { display: flex; align-items: center; }
  .tpc-header__liste > li > .tpc-header__link,
  .tpc-header__sub-knopf { color: var(--tpc-kopf-text); --focus-ring: var(--tpc-kopf-fokus); }
  /* Chevron sitzt dicht hinter dem Ball; die Trefferfläche reicht in den Abstand zum nächsten Punkt */
  .tpc-header__sub-knopf {
    justify-content: flex-start;
    padding-inline-start: var(--space-2);
    margin-inline: calc(-1 * var(--space-1)) calc(-1 * var(--space-5));
  }
  .tpc-header__sub {
    position: absolute; z-index: 1;
    top: calc(100% + var(--space-3));
    left: calc(-1 * (var(--space-4) + var(--space-2) + var(--linie)));
    min-width: 16rem;
    display: grid; gap: 2px;
    padding: var(--space-2);
    border: var(--linie) solid var(--border-default);
    border-radius: var(--radius-lg);
    background: var(--surface-page);
    opacity: 0; visibility: hidden;
    translate: 0 -6px;
  }
  .tpc-header__sublink:hover { background: var(--surface-muted); }
  /* Brücke über den Spalt, damit der Zeiger auf dem Weg ins Panel nicht „rausfällt“ */
  .tpc-header__sub::before {
    content: "";
    position: absolute; left: 0; right: 0; bottom: 100%;
    height: calc(var(--space-3) + var(--linie) + 6px);
  }
  .tpc-header__sub > li:first-child {
    padding-bottom: 2px; margin-bottom: 2px;
    border-bottom: var(--linie) solid var(--border-default);
  }
  .tpc-header__sub-knopf[aria-expanded="true"] + .tpc-header__sub,
  .no-js .tpc-header__punkt:hover > .tpc-header__sub,
  .no-js .tpc-header__punkt:focus-within > .tpc-header__sub {
    opacity: 1; visibility: visible; translate: 0 0;
  }
}
@media (min-width: 1100px) and (prefers-reduced-motion: no-preference) {
  .tpc-header__sub {
    transition: opacity var(--dur-toggle) var(--ease), translate var(--dur-toggle) var(--ease), visibility 0s var(--ease) var(--dur-toggle);
  }
  .tpc-header__sub-knopf[aria-expanded="true"] + .tpc-header__sub,
  .no-js .tpc-header__punkt:hover > .tpc-header__sub,
  .no-js .tpc-header__punkt:focus-within > .tpc-header__sub { transition-delay: 0s; }
}
/* 1100 bis 1279 px: Logo, Menü und beide Aktionen passen nur zusammengerückt in eine
   Zeile. Das Logo steht dort auf 36 px (gescrollt 34 px wie überall),
   die Abstände rücken eine Stufe zusammen, das Menü weicht etwas aus der Mitte. */
@media (min-width: 1100px) and (max-width: 1279px) {
  .tpc-header:not(.is-gescrollt) { --tpc-logo-h: 36px; }   /* gescrollt 34 px wie überall */
  .tpc-header__inner { column-gap: var(--space-4); }
  .tpc-header__liste { gap: var(--space-4); }
}

.tpc-header__aktionen { flex: none; gap: var(--space-3); }
.tpc-header__menue { display: none; flex: none; }
.tpc-header__menue svg { width: 20px; height: 20px; }
.tpc-header__menue-zu { display: none; }
.tpc-header__menue[aria-expanded="true"] .tpc-header__menue-icon { display: none; }
.tpc-header__menue[aria-expanded="true"] .tpc-header__menue-zu { display: block; }

@media (max-width: 1099px) {
  .tpc-header__inner { flex-wrap: wrap; }
  .tpc-header__menue { display: inline-flex; margin-inline-start: auto; }
  .tpc-header__aktionen { order: 2; }
  .tpc-header__menue { order: 3; }
  /* Ausgeklapptes Menü: Void-Ebene über die volle Breite, Inhalt auf dem Gutter. Ohne JS
     (und dort, wo nichts klebt) steht es als Panel im Fluss unter der Kopfzeile. */
  .tpc-header__nav {
    order: 4; flex: 0 0 calc(100% + 2 * var(--container-pad)); display: none;
    margin: 0 calc(-1 * var(--container-pad)) calc(-1 * var(--tpc-kopf-polster));
    padding-inline: var(--container-pad);
    background: var(--surface-page);
  }
  .no-js .tpc-header__nav, .tpc-header__nav.is-offen { display: block; }
  .tpc-header__liste {
    flex-direction: column;
    padding: var(--space-2) 0 var(--space-5);
  }
  .tpc-header__link {
    --tpc-nav-ball: 10px;
    width: 100%;
    min-height: 56px;
    border-bottom: var(--linie) solid var(--border-default);
    font-size: var(--h3-size);
    letter-spacing: 0;
  }
  /* Untermenü mobil: immer offen, eingerückt unter „Events“, Knopf entfällt */
  .tpc-header__punkt { display: block; }
  .tpc-header__sub-knopf { display: none; }
  .tpc-header__sub {
    display: grid;
    padding: var(--space-2) 0 var(--space-3) var(--space-5);
    border-bottom: var(--linie) solid var(--border-default);
  }
  .tpc-header__sub > li { border-inline-start: var(--linie) solid var(--border-default); }
  .tpc-header__sublink { border-radius: 0; font-size: var(--btn-size); }
}

/* --- Menü als Vollbild-Ebene (unter 1100 px, mit JS, wo die Kopfzeile klebt) ---------------
   position: fixed über die ganze Bildschirmhöhe, eigener Scroll. Der obere Rand in Kopfhöhe ist
   ein Paper-Rahmen (border-top: liegt außerhalb des Scrollbereichs) — darauf stehen Logo und
   Schließen-Knopf der Kopfzeile, die über der Ebene liegen. Die Seite darunter scrollt nicht
   (html[data-tpc-menue], header.js), die Sticky-Leiste ist ausgeblendet. */
@media (min-width: 340px) and (max-width: 1099px) {
  :root:not(.no-js) .tpc-header__logo,
  :root:not(.no-js) .tpc-header__menue,
  :root:not(.no-js) .tpc-header__aktionen { position: relative; z-index: 2; }
  :root:not(.no-js) .tpc-header__nav.is-offen {
    position: fixed; inset: 0; z-index: 1;
    height: 100dvh; max-height: none;
    margin: 0;
    padding-block: var(--space-2) calc(var(--space-8) + env(safe-area-inset-bottom));
    border-top: var(--tpc-kopf-ist) solid var(--tpc-kopf-grund);
    overflow-y: auto;
    overscroll-behavior: contain;
  }
}
@media (max-width: 899px) and (max-height: 420px) {
  :root:not(.no-js) .tpc-header__nav.is-offen { position: static; height: auto; border-top: 0; }
}
:root[data-tpc-menue] { overflow: hidden; scrollbar-gutter: stable; }
:root[data-tpc-menue] .tpc-header { z-index: 40; }

/* Einflug (Chris 14.10.): Beim Öffnen fliegen die Punkte gestaffelt ein — erst die drei
   Hauptpunkte, dann die Anlässe (header.js setzt --tpc-i). Beim Schließen keine Rückfahrt:
   die Ebene verschwindet sofort. Ab 1100 px läuft dieselbe Staffel kurz im Events-Panel. */
@keyframes tpc-menue-einflug { from { opacity: 0; translate: 0 24px; } to { opacity: 1; translate: 0 0; } }
@keyframes tpc-panel-einflug { from { opacity: 0; translate: 0 8px; } to { opacity: 1; translate: 0 0; } }
@media (prefers-reduced-motion: no-preference) and (max-width: 1099px) {
  :root:not(.no-js) .tpc-header__nav.is-offen :is(.tpc-header__link, .tpc-header__sub > li) {
    animation: tpc-menue-einflug var(--dur-sheet) var(--ease) calc(var(--tpc-i, 0) * 60ms) both;
  }
}
@media (prefers-reduced-motion: no-preference) and (min-width: 1100px) {
  .tpc-header__sub-knopf[aria-expanded="true"] + .tpc-header__sub > li {
    animation: tpc-panel-einflug var(--dur-toggle) var(--ease) calc(var(--tpc-j, 0) * 25ms) both;
  }
}
@media (max-width: 899px) {
  .tpc-header__inner { gap: var(--space-4); }
  .tpc-header.is-gescrollt { --tpc-kopf-polster: var(--space-2); }
  /* Logo 36 px ab 390 px Breite; darunter schmaler (320 px: 28 px), damit Logo und
     Menüknopf in einer Zeile bleiben. Gescrollt höchstens 28 px. */
  .tpc-header { --tpc-logo-h: clamp(26px, calc(11.43vw - 8.5px), 36px); }
  .tpc-header.is-gescrollt { --tpc-logo-h: min(28px, clamp(26px, calc(11.43vw - 8.5px), 36px)); }
  .tpc-header__aktionen { display: none; }
}
@media (max-width: 399px) {
  .tpc-header__inner { gap: var(--space-3); }
}
/* Sehr schmal oder stark vergrößert: nichts klebt (wie die Sticky-Leiste, Blueprint d) —
   die Leiste steht dann im Kopf und würde ihn sonst über den halben Bildschirm ziehen. */
@media (max-width: 339px), (max-width: 899px) and (max-height: 420px) {
  :root:not(.no-js) .tpc-header { position: relative; }
}

/* Fußzeile (Theme-Teil) auf der Weltfläche. Oben der Einstieg (Logo, Claim als
   Display-Zeile mit Satzpunkt-Ball) und die direkten Kontaktwege in Display-Größe,
   darunter Besuch, Events und Service. Raster-Bruch: großes Deko-Blatt blutet rechts. */
.tpc-footer {
  --hx: 18%; --hy: 34%; --bx: 82%; --by: 70%;
  position: relative;
  padding-block: var(--section-pad) var(--space-8);
  color: var(--text-body);
  background:
    radial-gradient(44% 46% at var(--hx) var(--hy), var(--hauch-a), transparent 70%),
    radial-gradient(38% 42% at var(--bx) var(--by), var(--hauch-b), transparent 70%),
    var(--surface-page);
  overflow: clip;
}
/* Großes Monstera-Blatt (Feedback 59), das von rechts in die Fläche ragt; rund die
   Hälfte liegt außerhalb, damit es nie unter die Kontaktwege rutscht. */
.tpc-footer__blatt {
  --tpc-blatt-b: clamp(240px, 26vw, 440px);
  position: absolute;
  right: calc(-.58 * var(--tpc-blatt-b)); top: -2%;
  width: var(--tpc-blatt-b);
  transform: rotate(18deg);
  opacity: .9;
}

/* --- Oben: Einstieg links, Kontaktwege rechts ------------------------------ */
.tpc-footer__oben {
  position: relative; z-index: 1;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: var(--space-8) var(--raster-gap);
  align-items: end;
}
.tpc-footer__einstieg { grid-column: 1 / span 7; }
.tpc-footer__direkt { grid-column: 8 / -1; }
.tpc-footer__logo { display: inline-flex; border-radius: 4px; }
.tpc-footer__logo img { width: auto; height: 56px; }
.tpc-footer__claim {
  margin-top: var(--space-6);
  max-width: 15ch;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(1.75rem, 3.6vw, 3.5rem);
  line-height: 1.02;
  letter-spacing: -.02em;
  text-wrap: balance;
}
/* Kontaktwege kompakt (Marc Nr. 57, 19.10.2026): je Weg ein Icon aus dem Set (Mono-Variante
   aus dem Sprite, Linien in --accent, Innenflächen in der Flächenfarbe), daneben die Links.
   Telefon und WhatsApp teilen sich eine Zeile und ein Icon, die Nummer bleibt Linktext;
   Instagram fluchtet ohne Icon mit den Texten. */
.tpc-footer__direkt { --tpc-footer-icon: 32px; }
.tpc-footer__icon {
  display: block;
  flex: none;
  width: var(--tpc-footer-icon);
  height: var(--tpc-footer-icon);
  color: var(--accent);
  --icon-surface: var(--surface-page);
}
.tpc-footer__wege { list-style: none; display: grid; gap: var(--space-1); }
.tpc-footer__wegzeile {
  display: grid;
  grid-template-columns: var(--tpc-footer-icon) minmax(0, 1fr);
  align-items: start;
  column-gap: var(--space-4);
}
/* Icon mittig zur ersten Zeile, auch wenn WhatsApp schmal in die zweite rutscht */
.tpc-footer__wegzeile .tpc-footer__icon { margin-top: calc((var(--tap-min) - var(--tpc-footer-icon)) / 2); }
.tpc-footer__wegtexte { display: flex; flex-wrap: wrap; align-items: center; column-gap: var(--space-5); }
.tpc-footer__weg {
  display: inline-flex; align-items: center;
  min-height: var(--tap-min);
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 600;
  font-size: clamp(1.0625rem, 1.4vw, 1.25rem);
  line-height: 1.3;
  letter-spacing: var(--h3-tracking);
  font-variant-numeric: tabular-nums;
  text-decoration: none;
}
.tpc-footer__insta { margin-top: var(--space-2); margin-inline-start: calc(var(--tpc-footer-icon) + var(--space-4)); }

/* --- Raster: Besuch, Events, Service -------------------------------------- */
.tpc-footer__raster {
  position: relative; z-index: 1;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: var(--space-8) var(--raster-gap);
  margin-top: var(--space-9);
}
.tpc-footer__spalte--besuch { grid-column: 1 / span 5; }
.tpc-footer__spalte--events { grid-column: 7 / span 3; }
.tpc-footer__spalte--service { grid-column: 10 / span 3; }
.tpc-footer__titel {
  margin: 0 0 var(--space-4);
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: var(--h3-weight);
  font-size: var(--h3-size);
  line-height: var(--h3-lh);
  letter-spacing: var(--h3-tracking);
}
.tpc-footer__ort {
  --tpc-footer-icon: 32px;
  display: grid;
  grid-template-columns: var(--tpc-footer-icon) minmax(0, 1fr);
  align-items: start;
  column-gap: var(--space-4);
}
.tpc-footer__ort .tpc-footer__icon { margin-top: -2px; }
.tpc-footer__adresse { font-style: normal; font-size: var(--body-size); line-height: var(--body-lh); max-width: 30ch; }
.tpc-footer__zeiten {
  margin: var(--space-5) 0 0;
  max-width: 26rem;
  border-top: var(--linie) solid var(--border-default);
}
.tpc-footer__zeiten div {
  display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-5);
  padding-block: var(--space-3);
  border-bottom: var(--linie) solid var(--border-default);
}
.tpc-footer__zeiten dt { color: var(--text-muted); font-weight: 500; }
.tpc-footer__zeiten dd {
  margin: 0;
  color: var(--text-strong);
  font-family: var(--font-mono);
  font-weight: 700;
  font-size: var(--body-size);
  letter-spacing: var(--mono-tracking);
  font-variant-numeric: tabular-nums;
}
.tpc-footer__hinweis { margin-top: var(--space-4); font-size: var(--caption-size); color: var(--text-muted); }
.tpc-footer__liste { list-style: none; display: grid; }
.tpc-footer__link, .tpc-footer__ohne-link {
  display: inline-flex; align-items: center;
  min-height: var(--tap-min);
  font-size: var(--body-size);
  color: var(--text-strong);
}
.tpc-footer__link { text-decoration: none; }
.tpc-footer__ohne-link { color: var(--text-muted); }

/* --- Fuß: SEO-Zeile und Nachbar im Haus ----------------------------------- */
.tpc-footer__fuss {
  position: relative; z-index: 1;
  display: grid;
  grid-template-columns: minmax(0, 8fr) minmax(0, 4fr);
  gap: var(--space-5) var(--raster-gap);
  align-items: end;
  margin-top: var(--space-9);
  padding-top: var(--space-6);
  border-top: var(--linie) solid var(--border-default);
}
.tpc-footer__seo { max-width: 72ch; font-size: var(--caption-size); line-height: 1.55; color: var(--text-muted); }
.tpc-footer__haus {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1) var(--space-3);
  font-size: var(--caption-size); color: var(--text-muted);
  justify-self: end;
}
.tpc-footer__haus-logo { display: block; width: auto; height: 28px; }

/* --- Unterstreichung, die von links einläuft -----------------------------------
   Für alle Footer-Links (Kontaktwege, Navigation, Instagram, Nachbar im Haus): der
   Linktext liegt in .tpc-footer__text, darunter läuft bei Hover und Tastaturfokus eine
   Linie in --link-deko von links auf volle Breite. Ohne Bewegungswunsch steht sie sofort. */
.tpc-footer__text {
  background-image: linear-gradient(var(--link-deko), var(--link-deko));
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 0% var(--linie);
  padding-bottom: .14em;
}
.tpc-footer__haus-link .tpc-footer__text { display: inline-block; padding-bottom: var(--space-2); }
.tpc-footer__weg:hover .tpc-footer__text, .tpc-footer__weg:focus-visible .tpc-footer__text,
.tpc-footer__link:hover .tpc-footer__text, .tpc-footer__link:focus-visible .tpc-footer__text {
  background-size: 100% var(--linie);
}
@media (prefers-reduced-motion: no-preference) {
  .tpc-footer__text { transition: background-size var(--dur-toggle) var(--ease); }
}

@media (max-width: 1099px) {
  .tpc-footer__einstieg { grid-column: 1 / span 6; }
  .tpc-footer__direkt { grid-column: 7 / -1; }
  .tpc-footer__raster { grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: var(--space-8); }
  .tpc-footer__spalte--besuch { grid-column: 1 / -1; }
  .tpc-footer__spalte--events, .tpc-footer__spalte--service { grid-column: auto; }
  .tpc-footer__fuss { grid-template-columns: 1fr; margin-top: var(--space-8); }
  .tpc-footer__haus { justify-self: start; }
}
@media (max-width: 899px) {
  /* Polster in Höhe der Sticky-Leiste, damit sie den Footer nicht verdeckt */
  .tpc-footer { padding-bottom: calc(var(--space-8) + 80px + env(safe-area-inset-bottom)); }
  .tpc-footer__einstieg, .tpc-footer__direkt { grid-column: 1 / -1; }
  .tpc-footer__oben { row-gap: var(--space-7); }
  .tpc-footer__logo img { height: 44px; }
  .tpc-footer__direkt, .tpc-footer__ort { --tpc-footer-icon: 28px; }
  .tpc-footer__haus-logo { height: 22px; }
  /* Mobil ragt das Blatt oben rechts neben dem Logo herein, über der Claim-Zeile und
     fern der Sticky-Leiste, die unten das Polster überdeckt */
  .tpc-footer__blatt { --tpc-blatt-b: 180px; top: -64px; right: -84px; }
}
@media (max-width: 479px) {
  .tpc-footer__raster { grid-template-columns: 1fr; gap: var(--space-7); }
  .tpc-footer__weg--mail { overflow-wrap: anywhere; }
}

/* Sticky-Leiste — beide Aktionen mobil fest unten, Void. Im Header-Partial direkt nach </header>. Fährt ab 50 px Scroll von unten ein
   (sticky-leiste.js setzt .is-sichtbar); ohne JS steht sie von Anfang an.
   Die Leiste belegt ihre Tokens selbst um: Paper-Text, Lime-Fokus, Unterkante in Paper. */
.tpc-sticky {
  --text-strong: var(--tpc-club-paper);
  --border-strong: var(--tpc-club-paper);
  --surface-hover: color-mix(in srgb, var(--tpc-club-paper) 10%, transparent);
  --interactive-kante: var(--tpc-club-paper);
  --focus-ring: var(--tpc-signal-lime);
  --btn-dx: 0px;
  --btn-dy: 3px;
  display: flex; gap: var(--space-3);
  padding: var(--space-3);
  border-radius: var(--radius-lg);
  background: var(--surface-system);
  color: var(--text-strong);
}
.tpc-sticky > .tpc-btn, .tpc-sticky > .tpc-status {
  flex: 1 1 0;
  min-height: 48px;
  padding: 0 var(--space-3);
  font-size: .8125rem;
  white-space: normal;
}
.tpc-sticky--fest { display: none; }
@media (max-width: 899px) {
  /* Fokussierte Elemente landen beim Scrollen nicht unter der Leiste */
  html { scroll-padding-bottom: calc(88px + env(safe-area-inset-bottom)); }
  .tpc-sticky--fest {
    display: flex;
    position: fixed; z-index: 30;
    left: 0; right: 0; bottom: 0;
    border-radius: 0;
    padding: var(--space-3) var(--space-4) calc(var(--space-3) + env(safe-area-inset-bottom));
  }
}
/* Bei sehr schmalen Fenstern oder starker Vergrößerung nicht mehr fest (Blueprint d) */
@media (max-width: 339px), (max-width: 899px) and (max-height: 420px) {
  .tpc-sticky--fest { position: static; }
}
/* Einfahren ab 50 px Scroll — nur wo die Leiste fest steht und JS läuft. Unsichtbar heißt
   auch: nicht fokussierbar (visibility). Bewegung nur ohne reduzierte Bewegung. Bei offenem
   Vollbild-Menü (html[data-tpc-menue]) und offenem Anfrage-Modal (html[data-tpc-modal]) fährt
   sie aus. Die Leiste steht seit 14.10.2026 hinter dem <header> (nicht mehr darin), damit das
   Ausblenden der Kopfzeile per transform sie nicht mitnimmt. */
@media (min-width: 340px) and (max-width: 899px) and (min-height: 421px) {
  :root:not(.no-js) .tpc-sticky--fest:not(.is-sichtbar),
  :root[data-tpc-menue] .tpc-sticky--fest,
  :root[data-tpc-modal] .tpc-sticky--fest { transform: translateY(100%); visibility: hidden; }
}
@media (min-width: 340px) and (max-width: 899px) and (min-height: 421px) and (prefers-reduced-motion: no-preference) {
  .tpc-sticky--fest { transition: transform var(--dur-toggle) var(--ease), visibility 0s var(--ease) var(--dur-toggle); }
  .tpc-sticky--fest.is-sichtbar { transition-delay: 0s; }
}
/* --- Hinweisleiste vor der Eröffnung (Marc Nr. 63, Entscheid Chris 19.10.2026) -------------
   Systemleiste wie die Sticky-Leiste: Void-Grund, Paper-Text, Lime nur als Unterstreichung des
   Links und als Fokus — kein zweiter Lime-Knopf neben dem Kopfzeilen-Knopf. Steht im Fluss über
   der Kopfzeile (sticky-leiste.html über {{teil:sticky-leiste}} in base.html), scrollt weg, die
   Kopfzeile klebt danach wie bisher an top: 0. Ab 900 px genau eine Zeile in fester Höhe; diese
   Höhe trägt --hinweisleiste-h, damit Heros mit Bildschirmhöhe (--header-h) nicht überlaufen.
   Geschlossen (html[data-tpc-banner="zu"], sticky-leiste.js) entfällt sie samt Maß. */
.tpc-banner {
  --text-strong: var(--tpc-club-paper);
  --surface-hover: color-mix(in srgb, var(--tpc-club-paper) 12%, transparent);
  --focus-ring: var(--tpc-signal-lime);
  --container-max: 100%;
  --tpc-banner-h: 44px;
  background: var(--surface-system);
  color: var(--tpc-club-paper);
}
.tpc-banner__inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--space-4);
  min-height: var(--tpc-banner-h);
}
.tpc-banner__text {
  padding-block: var(--space-2);
  font-size: .875rem;
  line-height: 1.45;
}
.tpc-banner__link {
  color: inherit;
  font-weight: 600;
  white-space: nowrap;
  text-decoration: underline;
  text-decoration-color: var(--tpc-signal-lime);
  text-decoration-thickness: var(--linie);
  text-underline-offset: .3em;
  border-radius: 2px;
  transition: color var(--dur-hover) var(--ease);
}
.tpc-banner__link:hover { color: var(--tpc-signal-lime); }
.tpc-banner__link:focus-visible { outline-offset: 2px; }
.tpc-banner__zu { margin-inline-end: calc(-1 * var(--space-3)); }
.tpc-banner__zu svg { width: 18px; height: 18px; }
:root.no-js .tpc-banner__zu { display: none; }
@media (min-width: 900px) {
  .tpc-banner { --container-pad: clamp(20px, 3vw, 56px); }
  .tpc-banner__inner { height: var(--tpc-banner-h); }
  .tpc-banner__text { padding-block: 0; }
  :root[data-phase="vor-eroeffnung"]:not([data-tpc-banner="zu"]):has(.tpc-banner) { --hinweisleiste-h: 44px; }
}
@media (max-width: 899px) {
  .tpc-banner__inner { align-items: flex-start; gap: var(--space-3); }
  .tpc-banner__text { padding-block: var(--space-3); font-size: .8125rem; }
  .tpc-banner__zu { margin-block: 0; }
}
/* Geschlossen, bei offenem Vollbild-Menü (Logo und Schließen-Knopf stehen dann an der
   Bildschirmoberkante) und im Druck steht die Leiste nicht im Fluss. */
:root[data-tpc-banner="zu"] .tpc-banner,
:root[data-tpc-menue] .tpc-banner { display: none; }
@media print { .tpc-banner { display: none; } }
/* Vor-Eröffnungs-Dialog. Die Karte liegt auf Paper (Seitenwerte), der Rest
   der Seite wird mit Void 50 % abgedunkelt. Nur transform und opacity bewegen sich. */
.tpc-popup {
  width: min(560px, calc(100vw - 2 * var(--gutter)));
  max-width: none;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--text-body);
  overflow: visible;
}
.tpc-popup::backdrop { background: var(--abdunklung); opacity: 0; transition: opacity var(--dur-modal) var(--ease); }
.tpc-popup.is-offen::backdrop { opacity: 1; }
.tpc-popup__karte {
  position: relative;
  display: grid; gap: var(--space-4);
  padding: var(--space-6) var(--space-6) var(--space-5);
  border: var(--linie) solid var(--border-strong);
  border-radius: var(--radius-lg);
  background: var(--surface-card);
  box-shadow: var(--schatten-dialog);
  opacity: 0;
  transform: scale(.98);
  transition: opacity var(--dur-modal) var(--ease), transform var(--dur-modal) var(--ease);
}
.tpc-popup.is-offen .tpc-popup__karte { opacity: 1; transform: none; }
.tpc-popup.is-zu .tpc-popup__karte { transition-duration: var(--dur-toggle); }
.tpc-popup__titel {
  margin: 0;
  padding-right: 52px;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(1.5rem, 2.4vw, 2rem);
  line-height: 1.05;
  letter-spacing: -.02em;
}
.tpc-popup__titel:focus { outline: none; }
.tpc-popup__zu { position: absolute; top: 14px; right: 14px; }
.tpc-popup__text { color: var(--text-muted); max-width: 46ch; }
.tpc-popup__karte .tpc-aktionen { margin-top: var(--space-2); gap: var(--space-4) var(--space-6); }
.tpc-popup__klein { font-size: .875rem; color: var(--text-muted); }
@media (max-width: 899px) {
  .tpc-popup {
    width: 100%;
    margin: auto 0 0;
    max-height: 60dvh;
  }
  .tpc-popup__karte {
    max-height: 60dvh;
    overflow: auto;
    overscroll-behavior: contain;
    border-width: var(--linie) 0 0;
    border-radius: var(--radius-lg) var(--radius-lg) 0 0;
    box-shadow: none;
    padding: var(--space-6) var(--gutter) calc(var(--space-6) + env(safe-area-inset-bottom));
    opacity: 1;
    transform: translateY(100%);
    transition: transform var(--dur-sheet) var(--ease);
  }
  .tpc-popup.is-offen .tpc-popup__karte { transform: none; }
}
/* cb01-hero — asymmetrische Bühne (A1): Text links auf sieben Spalten, Formen-Collage
   rechts. Raster-Bruch: Die Bühne läuft über die rechte Containerkante bis zum
   Bildschirmrand, das große Blatt wird dort angeschnitten. Hero ist immer Paper.
   Überschriften (Chris 14.10.): H1 .tpc-hero__titel = SEO-Zeile in ruhiger Stufe (Unbounded 600),
   darunter H2 .tpc-hero__claim = kurzer Claim in Display-Stufe mit dem Satzpunkt-Ball.
   Typo-Variante (Musterseite, frei für Kontakt/Rechtsseiten): nur die H1, dort in großer Stufe. */
/* Erweiterte Content-Breite: Kontext-Token für Collage und Typo. --bleed wird hier neu
   berechnet, weil die :root-Fassung mit der Standardbreite fertig vererbt wird.
   Ab 900 px schmalerer Rand (wie die Kopfzeile), damit Logo und H1 links fluchten und die
   breitere Inhaltsfläche schon bei 1440 px sichtbar wird; darunter bleibt der Gutter. */
.tpc-hero {
  --container-max: var(--container-max-weit);
  --bleed: calc((100vw - min(100vw, var(--container-max))) / 2 + var(--container-pad));
  --hx: 86%; --hy: 52%; --bx: 6%; --by: 62%;
  /* Erster Bildschirm: Hero füllt die Höhe unter der Kopfzeile,
     Inhalt senkrecht mittig; mit mehr Inhalt wird er länger. Bauplan § j: dvh, nie vh. */
  display: grid;
  align-content: center;
  min-block-size: calc(100dvh - var(--header-h));
  padding-block: calc(var(--section-pad) * .5) calc(var(--section-pad) * .75);
}
@media (min-width: 900px) {
  .tpc-hero { --container-pad: clamp(20px, 3vw, 56px); }
}
.tpc-hero__raster {
  position: relative;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: center;
}
.tpc-hero__text {
  grid-column: 1 / span 7; position: relative; z-index: 3;
  display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: var(--space-5);
}
.tpc-hero__text > * { grid-column: 1 / -1; }
/* H1 = SEO-Zeile: eine ruhige Zeile über dem Claim, überschreibt die Stufe von .tpc-h1. */
.tpc-hero--collage .tpc-hero__titel {
  margin-bottom: var(--space-4);
  font-size: clamp(1.25rem, 1.7vw, 2rem); font-weight: 600; letter-spacing: -.01em; line-height: 1.2;
}
/* H2 = Claim in Display-Stufe: mobil doppelt so groß wie die Seiten-H1 (390 px: 66 px), ab 900 px
   eine Stufe darüber (Deckel 124 px). Zeilen wie gesetzt, kein Ausgleich; mobil brechen sie frei. */
.tpc-hero__claim {
  margin: 0;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: var(--h1-weight); line-height: var(--h1-lh); letter-spacing: var(--h1-tracking);
  font-size: clamp(3.25rem, 17vw, 4.25rem);
  text-wrap: initial;
  /* Silbentrennung kommt aus base.css (h2 unter 900 px). Im Claim mindestens 5 Zeichen vor der
     Trennstelle: sonst füllt der Browser die Vorzeile mit einem kurzen Rest („voller Über-“) und
     das Wort läuft über drei Zeilen; so bleibt es bei zwei Teilen („Überra-“ / „schungen.“,
     „Geburts-“ / „tag.“). Ab 900 px trennt der Claim nicht (sonst „Ein unver-“ / „gessliches“),
     dort hält die Spaltenobergrenze unten jedes Wort ganz; overflow-wrap bleibt das Netz. */
  hyphenate-limit-chars: 10 5 3;
  overflow-wrap: break-word;
}
/* Ab 900 px gilt zusätzlich eine Obergrenze aus der Breite der Textspalte: 9,2 cqi = 10,9 em je
   Zeile. Seit 19.10.2026 eine Stufe kleiner (vorher 11,2 cqi = 8,9 em): Die längsten Schlusswörter
   „Überraschungen.“ (10,6 em mit Ball), „unvergessliches“ (10,1 em), „Öffnungszeiten.“ (10,0 em)
   und „Klassenausflug“ (9,7 em) liefen in jeder Desktop-Breite über die Textspalte in die Bühne;
   mit Trennung hätten sie sich in Riesenschrift zerlegt („Ein unver-“ / „gessliches“). Jetzt bleibt
   jedes Wort ganz, kurze Claimzeilen („Reden. Putten.“) ebenfalls einzeilig. Bei 1440 px greift
   die Grenze mit 72 px. */
@media (min-width: 900px) {
  .tpc-hero__text { container-type: inline-size; }
  .tpc-hero__claim { font-size: min(clamp(4.5rem, 6.5vw, 7.75rem), 9.2cqi); }
}
.tpc-hero__zeile { display: block; }
.tpc-hero__lead {
  margin-top: var(--space-6); max-width: 52ch; color: var(--text-muted);
  font-size: clamp(var(--lead-size), 1.25vw, 1.5rem);
}
/* Typo-Hero: die H1 wächst mit der Fensterbreite stärker als die Seiten-H1
   (Chris 13.10.) — ab 1100 px eigene Skala, Obergrenze 6 rem bei 1920 px. */
@media (min-width: 1100px) {
  .tpc-hero--typo .tpc-hero__titel { font-size: clamp(var(--h1-size), 5vw, 6rem); }
}
.tpc-hero__aktionen { margin-top: var(--space-7); }
/* Eröffnungszeile unter den Knöpfen (Startseite, Marc 18.10.): Zweittext, kein Knopf, kein Link. */
.tpc-hero__eroeffnung {
  margin-top: var(--space-4);
  color: var(--text-muted);
  font-size: var(--caption-size);
  line-height: var(--caption-lh);
  font-weight: 500;
}
/* Höhe der Bühne folgt der verfügbaren Hero-Höhe (Bildschirm minus Kopfzeile minus
   anderthalb Sektionsränder), zwischen 460 und 760 px.
   Obergrenze für breite Fenster: Die Bühne wird höchstens rund so breit wie hoch
   (Faktor 1,08 = Komposition bei 1440 px) und sitzt rechts am Bildschirmrand. Sonst
   wächst die Collage mit der Breite, der Ballkreis verdeckt Blatt A und das hohe Blattfoto
   läuft unten aus der Bühne (bei 1920 px rund 190 px, bei 2560 px rund 360 px). */
.tpc-hero__buehne {
  --tpc-buehne-h: clamp(460px, 100dvh - var(--header-h) - var(--section-pad) * 1.5, 760px);
  grid-column: 8 / -1;
  justify-self: end;
  width: calc(100% + var(--bleed));
  max-width: min(100% + var(--bleed), calc(var(--tpc-buehne-h) * 1.08));
  position: relative;
  height: var(--tpc-buehne-h);
  margin-inline-end: calc(-1 * var(--bleed));
}
.tpc-hero__form { position: absolute; }
.tpc-hero__foto { right: -7%; top: 0; width: 72%; transform: rotate(-6deg); }
.tpc-hero__foto img { object-position: 38% 50%; }
.tpc-hero__ball {
  left: 0; bottom: 2%;
  width: 46%;
  box-shadow: var(--schatten-ball);
}
.tpc-hero__ball img { object-position: 60% 52%; }
/* Monstera-Blätter (Feedback 59): A rund 30 %, B rund 24 % der Bühnenbreite; beide
   überlappen Foto und Ball, bleiben aber in der Bühne und damit fern von Text und CTA. */
.tpc-hero__blatt-a { left: 12%; top: -4%; width: 30%; transform: rotate(-28deg); }
.tpc-hero__blatt-b { right: 6%; bottom: -5%; width: 24%; transform: rotate(24deg); }
/* --- Load-Sequenz (motion-spec § 4) — nur transform und opacity -------------
   Foto und H1 (LCP) starten nie bei Opazität 0. Ohne JS steht alles sofort. */
@keyframes tpc-setzen { from { transform: var(--von); } to { transform: var(--nach); } }
@keyframes tpc-punkt { from { opacity: 0; transform: scale(.3); } to { opacity: 1; transform: scale(1); } }
@keyframes tpc-fall {
  0%   { opacity: 0; transform: translateY(-140%) scale(.6); }
  30%  { opacity: 1; }
  65%  { opacity: 1; transform: translateY(14%) scale(1.08); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes tpc-gluehen { 0%, 100% { opacity: 0; transform: scale(.8); } 50% { opacity: .55; transform: scale(1.15); } }
@media (prefers-reduced-motion: no-preference) {
  :root:not(.no-js) .tpc-hero__form { animation: tpc-setzen var(--dur-settle) var(--ease) both; }
  .tpc-hero__foto   { --von: rotate(-10deg) scale(.96); --nach: rotate(-6deg); }
  .tpc-hero__ball   { --von: rotate(-4deg) scale(.96);  --nach: rotate(0deg); animation-delay: 60ms; }
  .tpc-hero__blatt-a { --von: rotate(-36deg) scale(.9); --nach: rotate(-28deg); animation-delay: 120ms; }
  .tpc-hero__blatt-b { --von: rotate(32deg) scale(.9);  --nach: rotate(24deg); animation-delay: 180ms; }
  :root:not(.no-js) .tpc-hero__trail .tpc-trail__punkt { opacity: 0; animation: tpc-punkt 260ms var(--ease) forwards; }
  :root:not(.no-js) .tpc-hero .tpc-stop { animation: tpc-fall 520ms var(--ease) var(--tpc-landung, 1100ms) both; }
  :root:not(.no-js) .tpc-hero .tpc-stop::after { animation: tpc-gluehen 2400ms var(--ease-in-out) calc(var(--tpc-landung, 1100ms) + 520ms) infinite; }
}
@media (max-width: 1099px) {
  .tpc-hero__text { grid-column: 1 / span 7; }
  .tpc-hero__buehne { --tpc-buehne-h: clamp(400px, 100dvh - var(--header-h) - var(--section-pad) * 1.5, 760px); grid-column: 8 / -1; }
}
@media (max-width: 899px) {
  /* Luft unter der Kopfzeile (Chris 14.10.): oben × 0,75 statt × 0,25 — bei 390 × 844
     gut 76 px bis zur H1, nie unter 66 px (Untergrenze des Sektionsrands). */
  .tpc-hero { padding-top: calc(var(--section-pad) * .75); }
  .tpc-hero__raster { display: block; }
  .tpc-hero__lead { margin-top: var(--space-5); }
  .tpc-hero__aktionen { margin-top: var(--space-6); }
  .tpc-hero__eroeffnung { margin-top: var(--space-3); text-align: center; }
  .tpc-hero__buehne { --tpc-buehne-h: 380px; max-width: none; margin: var(--space-7) calc(-1 * var(--gutter)) 0 0; }
  .tpc-hero__foto { right: -4%; width: 62%; }
  .tpc-hero__ball { width: 50%; bottom: 0; }
  .tpc-hero__blatt-a { left: 20%; top: -2%; width: 30%; }
  .tpc-hero__blatt-b { right: 4%; bottom: -4%; width: 24%; }
  .tpc-hero__trail { display: none; }
  .tpc-hero .tpc-stop { --tpc-landung: 300ms; }
}
/* --- Variante „typo“ (ohne Bühne, ohne Sequenz) ------------------------------
   Füllt wie die Collage den ersten Bildschirm. Desktop: Text senkrecht mittig, das
   Deko-Blatt wächst mit der Bildschirmhöhe und blutet rechts bis zum Rand (Plakat aus
   Satz und Blatt). Mobil hält sich der Text in der oberen Hälfte, das Blatt sitzt groß
   unten rechts über der Sticky-Leiste und trägt die untere Hälfte. */
.tpc-hero__blatt {
  --tpc-blatt-b: clamp(180px, 44dvh, 480px);
  position: absolute;
  right: calc(-.22 * var(--tpc-blatt-b));
  top: 50%;
  width: var(--tpc-blatt-b);
  transform: translateY(-50%) rotate(-22deg);
}
@media (max-width: 899px) {
  .tpc-hero--typo { align-content: start; padding-top: calc(var(--section-pad) * .75); }
  .tpc-hero__blatt {
    --tpc-blatt-b: clamp(150px, 56vw, 300px);
    right: calc(-.2 * var(--tpc-blatt-b));
    top: auto; bottom: var(--section-pad);
    transform: rotate(-22deg);
  }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13) ------------------------------------
   Reine CSS-Sequenz (wartet nicht auf GSAP): Claim zeilenweise aus 60 % Höhe, Start-Opazität
   .01; die Collage setzt sich aus weiterem Winkel; das Blattfoto zoomt in seiner Maske
   (Bild 1,12 → 1, die Maske schrumpft gegenläufig, die Blattform steht also still);
   Lead und Knöpfe folgen gestaffelt — der Lead ebenfalls ab .01, er ist mobil das
   LCP-Element. Der Trail startet erst nach dem Claim und zieht sich
   halb so schnell (Takt/Vorlauf liest cb01-hero.js). Keyframes tpc-max-zeile/-folgen in
   site-core.css. Typo-Hero (ohne Bühne): H1 als Ganzes und Lead ab .01 (beide LCP-Kandidaten),
   das Deko-Blatt wandert per Scroll (data-tpc-max="parallax"). */
@keyframes tpc-max-zoom {
  from { transform: scale(1.12); -webkit-mask-size: 89.286% 89.286%; mask-size: 89.286% 89.286%; }
  to { transform: none; -webkit-mask-size: 100% 100%; mask-size: 100% 100%; }
}
@media (prefers-reduced-motion: no-preference) {
  :root[data-motion="max"]:not(.no-js) .tpc-hero { --tpc-trail-takt: 48; --tpc-trail-warten: 850; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero--collage .tpc-hero__titel,
  :root[data-motion="max"]:not(.no-js) .tpc-hero__claim .tpc-hero__zeile { animation: tpc-max-zeile var(--dur-settle) var(--ease) both; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__claim .tpc-hero__zeile:nth-child(1) { animation-delay: 90ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__claim .tpc-hero__zeile:nth-child(2) { animation-delay: 180ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__claim .tpc-hero__zeile:nth-child(3) { animation-delay: 270ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__lead { animation-name: tpc-max-zeile; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__aktionen { animation-delay: 520ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__foto    { --von: rotate(-18deg) scale(.86); }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__ball    { --von: rotate(-24deg) scale(.82); }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__blatt-a { --von: rotate(-80deg) scale(.6); }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__blatt-b { --von: rotate(90deg) scale(.6); }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__foto img { animation: tpc-max-zoom 600ms var(--ease) both; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero__trail .tpc-trail__punkt { animation-duration: 340ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero--typo .tpc-hero__titel { animation: tpc-max-zeile var(--dur-settle) var(--ease) both; }
  :root[data-motion="max"]:not(.no-js) .tpc-hero--typo .tpc-hero__lead { animation: tpc-max-zeile var(--dur-settle) var(--ease) 120ms both; }
}
@media (prefers-reduced-motion: no-preference) and (max-width: 899px) {
  :root[data-motion="max"]:not(.no-js) .tpc-hero .tpc-stop { --tpc-landung: 950ms; }
}
/* „Mehr erfahren“ (Chris 13.10.): Textlink mit Pfeil neben dem Haupt-CTA (im Typo-Hero allein),
   scrollt zur ersten Inhaltssektion (Ziel-ID `inhalt-weiter`). Ersetzt Vertrauenszeile,
   Statuszeile mit Pausentaste und saisonales Banner im Hero. */
.tpc-hero__mehr {
  display: inline-flex; align-items: center; gap: var(--space-2);
  min-height: var(--tap-min); padding-inline: var(--space-2);
  color: var(--text-strong); font-weight: 600; text-decoration: none;
  background-image: linear-gradient(var(--link-deko), var(--link-deko));
  background-repeat: no-repeat; background-size: 0 2px; background-position: 0 100%;
}
.tpc-hero__mehr-pfeil { width: 1em; height: 1em; flex: none; }
.tpc-hero__mehr:hover, .tpc-hero__mehr:focus-visible { background-size: 100% 2px; }
/* Allein in der Aktionsgruppe (Typo-Hero): Text fluchtet links mit H1 und Einleitung. */
@media (min-width: 900px) {
  .tpc-hero--typo .tpc-hero__mehr { margin-inline-start: calc(-1 * var(--space-2)); }
}
@media (prefers-reduced-motion: no-preference) {
  .tpc-hero__mehr { transition: background-size var(--dur-toggle) var(--ease); }
  .tpc-hero__mehr-pfeil { transition: transform var(--dur-hover) var(--ease); }
  .tpc-hero__mehr:hover .tpc-hero__mehr-pfeil { transform: translateX(3px); }
}
@media (max-width: 899px) {
  /* „Dschungel“ mit Satzpunkt-Ball ist 6,9 em breit und bricht nie (tpc-nobr): unter 900 px
     richtet sich die Claim-Größe zusätzlich nach der Textbreite, sonst wird das Wort angeschnitten. */
  .tpc-hero--collage .tpc-hero__claim { font-size: min(clamp(3.25rem, 17vw, 4.25rem), calc((100vw - 2 * var(--gutter)) / 7.1)); }
  /* Langes Schlusswort („Öffnungszeiten“, 10,5 em mit Ball): Modifier --lang rechnet mit 10,6 em,
     damit das Wort unter 900 px in einer Zeile bleibt statt angeschnitten zu werden. */
  .tpc-hero--collage .tpc-hero__claim--lang { font-size: min(clamp(2.25rem, 17vw, 4.25rem), calc((100vw - 2 * var(--gutter)) / 10.6)); }
  .tpc-hero__mehr { justify-content: center; width: 100%; }
}
/* cb07-ablauf — Schrittfolge als ansteigende Bahn. Jede Stufe sitzt um eine Stufenhöhe
   höher als die vorige; die Ziffer kommt aus dem Zähler (echte Reihenfolge). */
.tpc-ablauf__schritte {
  --stufe: clamp(1.25rem, 3vw, 2.75rem);
  list-style: none;
  counter-reset: schritt;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: var(--raster-gap);
  align-items: end;
  margin-top: var(--space-8);
}
.tpc-ablauf__schritt {
  counter-increment: schritt;
  display: grid; gap: var(--space-2); align-content: start;
  padding-top: var(--space-4);
  border-top: var(--linie) solid var(--border-strong);
}
.tpc-ablauf__schritt::before {
  content: counter(schritt);
  margin-bottom: var(--space-2);
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2.5rem, 4.4vw, 4rem);
  line-height: .9;
  letter-spacing: -.03em;
}
.tpc-ablauf__schritt:nth-last-child(2) { margin-bottom: var(--stufe); }
.tpc-ablauf__schritt:nth-last-child(3) { margin-bottom: calc(var(--stufe) * 2); }
.tpc-ablauf__schritt:nth-last-child(4) { margin-bottom: calc(var(--stufe) * 3); }
.tpc-ablauf__schritt:nth-last-child(5) { margin-bottom: calc(var(--stufe) * 4); }
.tpc-ablauf__schritt:last-child { margin-inline-end: calc(var(--gutter) * -.6); margin-bottom: calc(var(--stufe) * -.4); }
.tpc-ablauf__text { color: var(--text-muted); font-size: var(--caption-size); line-height: var(--caption-lh); }
@media (max-width: 899px) {
  .tpc-ablauf__schritte { grid-auto-flow: row; grid-auto-columns: auto; gap: var(--space-5); margin-top: var(--space-7); }
  .tpc-ablauf__schritt:nth-child(n) { margin: 0; }
  .tpc-ablauf__schritt { grid-template-columns: 3.5rem 1fr; column-gap: var(--space-4); }
  .tpc-ablauf__schritt::before { grid-row: span 2; font-size: 2.5rem; margin: 0; }
}
/* Zusatzzeile unter der Schrittfolge: ein Angebot, kein weiterer Schritt. */
.tpc-ablauf__zusatz {
  margin-top: var(--space-7);
  max-width: 52ch;
  padding-top: var(--space-4);
  border-top: var(--linie) solid var(--border-default);
  color: var(--text-strong);
  font-weight: 500;
}
/* cb02-usp-leiste — ungleiche Linientabelle (A3). Links die große Aussage mit
   Display-Zahl, rechts die übrigen Aussagen als Zeilen mit 2-px-Linien. */
.tpc-usp__raster {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
}
.tpc-usp__gross {
  grid-column: 1 / span 5;
  padding: var(--space-6) var(--space-6) var(--space-6) 0;
  border-top: var(--linie) solid var(--border-default);
  border-bottom: var(--linie) solid var(--border-default);
}
.tpc-usp__titel {
  margin: 0;
  color: var(--text-strong);
  font-family: var(--font-display);
}
.tpc-usp__zahl {
  display: block;
  margin-inline-start: calc(var(--gutter) * -.55);
  font-size: var(--display-size);
  line-height: var(--display-lh);
  letter-spacing: var(--display-tracking);
  font-weight: var(--display-weight);
}
.tpc-usp__wort {
  display: block;
  margin-top: var(--space-3);
  font-size: clamp(1.75rem, 2.6vw, 2.5rem);
  line-height: 1;
  letter-spacing: var(--h2-tracking);
  font-weight: 700;
}
.tpc-usp__text { margin-top: var(--space-5); max-width: 30ch; color: var(--text-muted); }
.tpc-usp__liste {
  grid-column: 6 / -1;
  list-style: none;
  margin-inline-start: calc(-1 * var(--raster-gap));
  border-top: var(--linie) solid var(--border-default);
  border-bottom: var(--linie) solid var(--border-default);
  border-left: var(--linie) solid var(--border-default);
}
.tpc-usp__eintrag {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
  gap: var(--raster-gap);
  align-items: baseline;
  padding: var(--space-6) 0 var(--space-6) var(--space-7);
}
.tpc-usp__eintrag + .tpc-usp__eintrag { border-top: var(--linie) solid var(--border-default); }
.tpc-usp__eintrag-text { color: var(--text-muted); }
@media (max-width: 899px) {
  .tpc-usp__raster { display: block; }
  .tpc-usp__gross { padding: var(--space-5) 0 var(--space-6); border-bottom: 0; }
  .tpc-usp__zahl { margin-inline-start: calc(var(--gutter) * -.5); }
  .tpc-usp__liste { margin: 0; border-left: 0; }
  .tpc-usp__eintrag { grid-template-columns: 1fr; gap: var(--space-2); padding: var(--space-5) 0; }
}
/* Variante „wort“ (Eventseiten): die große Aussage ist ein Satz, keine Zahl. Die H2 der
   Sektion führt die rechte Spalte über der Linientabelle an; links steht die große Aussage
   in Display-Satz und ragt über die linke Containerkante, der Rest folgt als Lead. */
.tpc-usp--wort .tpc-usp__kopf {
  grid-column: 6 / -1; grid-row: 1;
  margin-inline-start: calc(-1 * var(--raster-gap));
  padding: 0 0 var(--space-6) var(--space-7);
  border-left: var(--linie) solid var(--border-default);
}
.tpc-usp--wort .tpc-usp__gross { grid-column: 1 / span 5; grid-row: 1 / span 2; align-self: start; }
.tpc-usp--wort .tpc-usp__liste { grid-row: 2; }
.tpc-usp--wort .tpc-usp__titel { margin-inline-start: calc(var(--gutter) * -.55); }
.tpc-usp--wort .tpc-usp__wort {
  margin: 0;
  font-size: clamp(2.25rem, 4.2vw, 4rem);
  line-height: .98;
  letter-spacing: -.03em;
  font-weight: 800;
}
@media (max-width: 899px) {
  .tpc-usp--wort .tpc-usp__kopf { margin: 0; padding: 0 0 var(--space-6); border-left: 0; }
  .tpc-usp--wort .tpc-usp__titel { margin-inline-start: calc(var(--gutter) * -.5); }
  .tpc-usp--wort .tpc-usp__wort { font-size: clamp(2rem, 9vw, 2.75rem); }
}
/* Variante „zweispaltig“ (Startseite, vier Aussagen): die Linientabelle rechts wird ab 900 px
   zu zwei Spalten mit Kreuzlinien (2 × 2), damit die Weltfläche nicht über eine Bildschirmhöhe
   wächst. Titel und Text stehen je Zelle untereinander. Mobil bleibt die gestapelte Liste. */
@media (min-width: 900px) {
  .tpc-usp--zweispaltig .tpc-usp__gross { align-self: stretch; }
  .tpc-usp--zweispaltig .tpc-usp__liste {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .tpc-usp--zweispaltig .tpc-usp__eintrag {
    grid-template-columns: minmax(0, 1fr);
    align-content: start;
    row-gap: var(--space-3);
    padding: var(--space-6) var(--space-6) var(--space-6) var(--space-7);
  }
  .tpc-usp--zweispaltig .tpc-usp__eintrag + .tpc-usp__eintrag { border-top: 0; }
  .tpc-usp--zweispaltig .tpc-usp__eintrag:nth-child(n + 3) { border-top: var(--linie) solid var(--border-default); }
  .tpc-usp--zweispaltig .tpc-usp__eintrag:nth-child(2n) { border-left: var(--linie) solid var(--border-default); }
  .tpc-usp--zweispaltig .tpc-usp__eintrag-text { max-width: 34ch; }
}
@media (min-width: 900px) and (max-width: 1199px) {
  .tpc-usp--zweispaltig .tpc-usp__eintrag { padding: var(--space-5) var(--space-5) var(--space-5) var(--space-6); }
}
/* Inhalts-Icon über dem Eintragstitel: eigene Zeile über Titel und Text, in jedem Eintrag
   an derselben Stelle. Über der großen Zahl steht kein Motiv. */
.tpc-usp__eintrag > .tpc-content-icon { grid-column: 1 / -1; }
.tpc-usp__eintrag:has(> .tpc-content-icon) { row-gap: var(--space-4); }
@media (max-width: 899px) {
  .tpc-usp__eintrag:has(> .tpc-content-icon) { row-gap: var(--space-2); }
  .tpc-usp__eintrag > .tpc-content-icon { margin-block-end: calc(var(--space-4) - var(--space-2)); }
}
@media (max-width: 767px) {
  .tpc-usp__eintrag > .tpc-content-icon { margin-block-end: calc(var(--space-3) - var(--space-2)); }
}
/* cb04-aussagen — gestaffelte Editorial-Liste (A4). Jede Aussage rückt eine halbe
   Spalte weiter ein; die Linie darüber läuft bis zum Containerrand. */
/* Raster-Bruch (Startseite, Firmenevent): großer Golfball am rechten Rand, zu gut der Hälfte angeschnitten. Der
   Kreisbogen hält oben und unten Abstand zur Textspalte. Paper mit Void-Kontur, Dimples als
   Void-Ellipsen geringer Deckkraft, ein Dimple in Lime. */
.tpc-aussagen:has(> .tpc-aussagen__golfball) { overflow: clip; }
.tpc-aussagen__golfball {
  --golfball: clamp(300px, 25vw, 420px);
  position: absolute;
  right: calc(var(--golfball) * -.56);
  top: 16%;
  width: var(--golfball);
  aspect-ratio: 1;
  pointer-events: none;
}
/* Variante „links“ (Firmenevent: vier gestaffelte Aussagen reichen bis an den rechten Rand): der
   Ball sitzt unten links unter der Überschrift im freien Feld, mobil wie die Grundform rechts. */
.tpc-aussagen__golfball--links { right: auto; left: calc(var(--golfball) * -.56); top: auto; bottom: 10%; }
.tpc-golfball { display: block; width: 100%; height: 100%; overflow: visible; }
.tpc-golfball__flaeche { fill: var(--surface-card); }
.tpc-golfball__kontur { fill: none; stroke: var(--accent-kante); stroke-width: var(--linie); }
.tpc-golfball__dimples { fill: var(--accent-kante); opacity: .17; }
.tpc-golfball__lime { fill: var(--accent); stroke: var(--accent-kante); stroke-width: calc(var(--linie) / 2); }
.tpc-golfball__schatten { fill: var(--accent-kante); opacity: .08; }
.tpc-golfball__lauf { transform-box: view-box; transform-origin: 100px 100px; }
/* Dreht langsam und stetig (40 s je Umdrehung). */
@keyframes tpc-golfball-drehen { to { rotate: 360deg; } }
@media (prefers-reduced-motion: no-preference) {
  .tpc-golfball__lauf { animation: tpc-golfball-drehen 40s linear infinite; }
}
.tpc-aussagen__raster {
  position: relative; z-index: 1;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: start;
}
.tpc-aussagen__kopf { grid-column: 1 / span 5; }
.tpc-aussagen__einleitung { margin-top: var(--space-5); color: var(--text-muted); }
.tpc-aussagen__liste { grid-column: 7 / -1; list-style: none; counter-reset: aussage; }
.tpc-aussagen__eintrag {
  display: grid; gap: var(--space-2);
  padding: var(--space-5) 0 var(--space-6);
  border-top: var(--linie) solid var(--border-default);
}
.tpc-aussagen__eintrag:nth-child(2) { margin-inline-start: 8%; }
.tpc-aussagen__eintrag:nth-child(3) { margin-inline-start: 16%; }
.tpc-aussagen__eintrag:nth-child(4) { margin-inline-start: 24%; }
.tpc-aussagen__eintrag:last-child { padding-bottom: 0; }
.tpc-aussagen__text { max-width: 40ch; color: var(--text-muted); }
.tpc-aussagen__ziffer {
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2.5rem, 5vw, 4.5rem);
  line-height: .9;
  letter-spacing: -.03em;
}
@media (max-width: 899px) {
  .tpc-aussagen__raster { display: block; }
  .tpc-aussagen__liste { margin-top: var(--space-7); }
  .tpc-aussagen__eintrag:nth-child(n) { margin-inline-start: 0; }
  .tpc-aussagen__golfball { --golfball: 200px; top: auto; bottom: calc(var(--golfball) * -.5); right: calc(var(--golfball) * -.42); }
  .tpc-aussagen__golfball--links { left: auto; }
}
/* Variante „ziffern“ (Geburtstag): die H2 steht oben, die Aussagen laufen über die ganze
   Breite im Zickzack. Die Ziffer ist Teil der H3; die mittlere und größte Ziffer ragt über
   die linke Containerkante (einziger Raster-Bruch der Sektion, daher ohne Deko-Blatt). */
.tpc-aussagen--ziffern .tpc-aussagen__kopf { grid-column: 1 / span 7; }
.tpc-aussagen--ziffern .tpc-aussagen__liste { grid-column: 1 / -1; margin-top: var(--space-7); }
.tpc-aussagen--ziffern .tpc-aussagen__titel { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-2) var(--space-4); }
.tpc-aussagen--ziffern .tpc-aussagen__eintrag { max-width: 46rem; }
.tpc-aussagen--ziffern .tpc-aussagen__eintrag:nth-child(1) { margin-inline-start: 24%; }
.tpc-aussagen--ziffern .tpc-aussagen__eintrag:nth-child(2) { margin-inline-start: 0; }
.tpc-aussagen--ziffern .tpc-aussagen__eintrag:nth-child(3) { margin-inline-start: 40%; }
.tpc-aussagen--ziffern .tpc-aussagen__eintrag:nth-child(2) .tpc-aussagen__ziffer { margin-inline-start: calc(var(--gutter) * -.55); font-size: clamp(3.5rem, 8vw, 7.5rem); }
@media (max-width: 899px) {
  .tpc-aussagen--ziffern .tpc-aussagen__liste { margin-top: var(--space-6); }
  .tpc-aussagen--ziffern .tpc-aussagen__eintrag:nth-child(n) { margin-inline-start: 0; }
  .tpc-aussagen--ziffern .tpc-aussagen__eintrag:nth-child(2) .tpc-aussagen__ziffer { margin-inline-start: calc(var(--gutter) * -.5); font-size: clamp(3rem, 15vw, 4.5rem); }
}
/* Inhalts-Icon links neben Titel und Text eines Eintrags; unter 1200 px steht es darüber,
   damit kein Titel durch das Icon umbricht (die Listenspalte ist dort zu schmal). */
.tpc-aussagen__eintrag:has(> .tpc-content-icon) {
  grid-template-columns: auto minmax(0, 1fr);
  column-gap: calc(var(--space-4) + var(--space-1));
}
.tpc-aussagen__eintrag > .tpc-content-icon { grid-row: 1 / span 2; }
.tpc-aussagen__eintrag:has(> .tpc-content-icon) > :not(.tpc-content-icon) { grid-column: 2; }
@media (max-width: 1199px) {
  .tpc-aussagen__eintrag:has(> .tpc-content-icon) { grid-template-columns: minmax(0, 1fr); }
  .tpc-aussagen__eintrag > .tpc-content-icon { grid-row: auto; margin-block-end: calc(var(--space-4) - var(--space-2)); }
  .tpc-aussagen__eintrag:has(> .tpc-content-icon) > :not(.tpc-content-icon) { grid-column: auto; }
}
@media (max-width: 767px) {
  .tpc-aussagen__eintrag > .tpc-content-icon { margin-block-end: calc(var(--space-3) - var(--space-2)); }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13): Ab 1000 px steht der Abschnitt rund 120 vh
   (motion-max.js); ein Ball rollt links an der Liste von Aussage zu Aussage, der Golfball
   dreht zusätzlich mit dem Scroll (äußere Gruppe, GSAP), die Grunddrehung läuft weiter. */
@media (prefers-reduced-motion: no-preference) and (min-width: 1000px) {
  /* Abschnitt füllt beim Stehen den Bildschirm, Inhalt mittig — kein Papierstreifen ober- und unterhalb */
  :root[data-motion="max"]:not(.no-js) [data-tpc-max~="pin"] { display: grid; align-content: center; min-block-size: 100dvh; }
  :root[data-motion="max"]:not(.no-js) .tpc-aussagen__marke {
    --tpc-marke: 1.375rem;
    position: absolute; left: 0; top: 0; z-index: 2;
    width: var(--tpc-marke); height: var(--tpc-marke);
    pointer-events: none;
  }
}
/* cb03-bild-text — Z-Lauf (A2). Das Blatt-quer-Bild läuft über den Container bis an
   den Bildschirmrand; der Text steht auf der Gegenseite auf sechs Spalten. */
.tpc-bildtext__raster {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: center;
}
.tpc-bildtext__bild {
  grid-column: 1 / span 6;
  grid-row: 1;
  margin-inline-start: calc(-1 * var(--bleed));
}
.tpc-bildtext__bild img { object-position: 50% 60%; }
.tpc-bildtext__text { grid-column: 8 / -1; grid-row: 1; }
.tpc-bildtext__fliess { margin-top: var(--space-6); max-width: 52ch; color: var(--text-muted); }
.tpc-bildtext__link { margin-top: var(--space-6); }
.tpc-bildtext--bild-rechts .tpc-bildtext__bild { grid-column: 7 / -1; margin-inline: 0 calc(-1 * var(--bleed)); }
.tpc-bildtext--bild-rechts .tpc-bildtext__text { grid-column: 1 / span 5; }
@media (max-width: 899px) {
  .tpc-bildtext__raster { display: flex; flex-direction: column; align-items: stretch; }
  .tpc-bildtext__text { order: 1; }
  .tpc-bildtext__bild { order: 2; margin: var(--space-7) 0 0 calc(-1 * var(--gutter)); }
  .tpc-bildtext--bild-rechts .tpc-bildtext__bild { margin: var(--space-7) calc(-1 * var(--gutter)) 0 0; }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13): Bild-Parallaxe in der Blatt-Maske. Die Maske
   wandert ans <picture>, das Bild ist etwas größer und wandert darin (motion-max.js schreibt
   --tpc-par am <figure>). Wort-Reveal der H2 und Icon-Wackeln laufen in motion-max.js. */
@media (prefers-reduced-motion: no-preference) {
  :root[data-motion="max"]:not(.no-js) [data-tpc-max~="bildparallax"] picture {
    display: block; height: 100%;
    -webkit-mask: url(../form/blatt-quer.svg) center / 100% 100% no-repeat;
            mask: url(../form/blatt-quer.svg) center / 100% 100% no-repeat;
  }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max~="bildparallax"] img {
    -webkit-mask: none; mask: none;
    scale: 1.16;
    translate: 0 calc(var(--tpc-par, 0) * 1px);
  }
}
/* cb05-eventkarten — eine große Event-Karte (A5) plus Linienliste. Daten in Space Mono.
   Die Karte ist Kartenpapier mit Void-Rand und senkrechtem Versatzschatten. */
.tpc-eventkarten__kopf {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: end;
}
.tpc-eventkarten__kopf .tpc-h2 { grid-column: 1 / span 6; }
.tpc-eventkarten__einleitung { grid-column: 8 / -1; color: var(--text-muted); }
.tpc-eventkarten__raster {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: center;
  margin-top: var(--space-8);
}
.tpc-eventkarten__gross {
  grid-column: 1 / span 6;
  translate: calc(var(--gutter) * -.6) 0;
  transform: rotate(-2deg);
  transform-origin: 60% 50%;
  /* Oben an der ersten Listenlinie; der Leerraum neben einer langen Liste bleibt unten. */
  align-self: start;
  margin-block: var(--space-2) var(--space-5);
}
.tpc-eventkarten__gross:active { transform: rotate(-2deg) translateY(2px); }
.tpc-eventkarten__gross-inhalt {
  flex: 1;
  gap: var(--space-4);
  min-height: clamp(17rem, 24vw, 21rem);
  padding: clamp(1.75rem, 3vw, 2.75rem);
}
.tpc-eventkarten__gross-titel {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2rem, 4vw, 3.75rem);   /* eine Größe für alle Seiten: „Firmenevents“ bleibt bis 320 px in der Karte */
  line-height: .95;
  letter-spacing: -.03em;
}
.tpc-eventkarten__gross-text { font-size: var(--lead-size); line-height: var(--lead-lh); max-width: 26ch; }
.tpc-eventkarten__fuss {
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-5);
  margin-top: auto;
  padding-top: var(--space-5);
  border-top: var(--linie) solid var(--border-default);
}
.tpc-eventkarten__daten { font-weight: 700; color: var(--text-strong); }
.tpc-eventkarten__ball { width: 30px; height: 30px; flex: none; }
.tpc-eventkarten__liste {
  grid-column: 8 / -1;
  list-style: none;
  border-top: var(--linie) solid var(--border-default);
}
.tpc-eventkarten__punkt { border-bottom: var(--linie) solid var(--border-default); }
.tpc-eventkarten__eintrag {
  display: grid;
  gap: var(--space-2);
  padding: var(--space-4) 0 var(--space-5);
  color: var(--text-body);
  text-decoration: none;
}
.tpc-eventkarten__titel {
  text-decoration: underline;
  text-decoration-thickness: var(--linie);
  text-underline-offset: .22em;
  text-decoration-color: transparent;
  transition: text-decoration-color var(--dur-hover) var(--ease);
}
.tpc-eventkarten__eintrag:hover .tpc-eventkarten__titel { text-decoration-color: var(--link-deko); }
.tpc-eventkarten__text { color: var(--text-muted); font-size: var(--caption-size); line-height: var(--caption-lh); }
@media (max-width: 899px) {
  .tpc-eventkarten__kopf { display: block; }
  .tpc-eventkarten__einleitung { margin-top: var(--space-4); }
  .tpc-eventkarten__raster { display: block; margin-top: var(--space-7); }
  .tpc-eventkarten__gross { translate: none; transform: none; margin: 0 0 var(--space-7); }
  .tpc-eventkarten__gross:active { transform: translateY(2px); }
}
/* Fuß ohne Datenzeile: der Ball steht allein rechts. */
.tpc-eventkarten__fuss > .tpc-eventkarten__ball:only-child { margin-left: auto; }
/* Schlusszeile unter Karte und Liste (optional, Events). */
.tpc-eventkarten__schluss {
  margin-top: var(--space-7);
  max-width: 62ch;
  color: var(--text-strong);
}
/* Inhalts-Icons. Große Karte: Titel über die volle Breite, darunter Text links und Motiv
   rechts; mobil steht das Motiv über dem Titel. Listeneinträge: Motiv über dem Titel,
   in allen Einträgen gleich. Die Motive sind Teil der Fokusfläche, kein eigener Link. */
.tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon) {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-rows: auto auto 1fr;
  column-gap: calc(var(--space-4) + var(--space-1));
}
.tpc-eventkarten__gross-inhalt > .tpc-content-icon { grid-column: 2; grid-row: 2; align-self: start; }
.tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon) > .tpc-eventkarten__gross-titel { grid-column: 1 / -1; grid-row: 1; }
.tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon) > .tpc-eventkarten__gross-text { grid-column: 1; grid-row: 2; align-self: start; }
.tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon) > .tpc-eventkarten__fuss { grid-column: 1 / -1; grid-row: 3; align-self: end; }
.tpc-eventkarten__eintrag > .tpc-content-icon { margin-block-end: calc(var(--space-4) - var(--space-2)); }
@media (max-width: 899px) {
  .tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon) { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; }
  .tpc-eventkarten__gross-inhalt > .tpc-content-icon,
  .tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon) > .tpc-eventkarten__gross-titel,
  .tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon) > .tpc-eventkarten__gross-text,
  .tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon) > .tpc-eventkarten__fuss { grid-column: 1; grid-row: auto; }
}
@media (max-width: 767px) {
  .tpc-eventkarten__gross-inhalt > .tpc-content-icon { margin-block-end: calc(var(--space-3) - var(--space-4)); }
  .tpc-eventkarten__eintrag > .tpc-content-icon { margin-block-end: calc(var(--space-3) - var(--space-2)); }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13) ------------------------------------
   Ab 1000 px steht der Abschnitt, während die sechs Anlässe nacheinander aktiv werden:
   erst die große Karte (Firmenevent), dann die Einträge der Liste von oben nach unten.
   motion-max.js setzt data-tpc-max-folge an die Section, sobald der Pin steht, und
   data-tpc-max-aktiv an genau eine Station; alles Übrige ist CSS (scale/translate/opacity,
   eigene Eigenschaften, damit GSAP-Tänze auf transform ungestört bleiben). Die Liste wird
   dafür kompakt (Motiv links, Titel und Text rechts), damit der Abschnitt in den
   Bildschirm passt. Ohne Skript bleibt die Basis stehen. Darunter tauchen die Einträge
   über die View-Zeitleiste gestaffelt auf. Icons nicken beim Hover. */
@keyframes tpc-max-nicken {
  0%, 100% { transform: none; }
  30% { transform: rotate(-10deg) translateY(2px); }
  65% { transform: rotate(6deg); }
}
@keyframes tpc-max-auftauchen { from { opacity: 0; transform: translateY(32px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: no-preference) and (hover: hover) and (pointer: fine) {
  :root[data-motion="max"]:not(.no-js) :is(.tpc-eventkarten__eintrag, .tpc-eventkarten__gross):hover .tpc-content-icon {
    animation: tpc-max-nicken 520ms var(--ease) both;
  }
}
@media (prefers-reduced-motion: no-preference) and (min-width: 1000px) {
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] {
    display: grid; align-content: center;
    min-block-size: 100dvh;
    padding-block: calc(var(--kopf-h) * .82 + var(--space-5)) var(--space-6);
  }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__raster { margin-top: var(--space-7); }
  @media (max-height: 760px) {
    :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] { padding-block: calc(var(--kopf-h) * .82 + var(--space-4)) var(--space-4); }
    :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__raster { margin-top: var(--space-5); }
    :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__eintrag { padding-block: var(--space-3); }
  }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__liste { position: relative; }
  /* Einträge ohne Motiv blieben einspaltig */
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__eintrag:has(> .tpc-content-icon) {
    grid-template-columns: 3.5rem minmax(0, 1fr);
    column-gap: var(--space-5);
    row-gap: var(--space-1);
    align-items: center;
    padding: var(--space-4) 0;
  }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__eintrag > .tpc-content-icon {
    grid-row: 1 / span 2;
    width: 3.5rem; height: 3.5rem;
    margin: 0;
  }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__titel { justify-self: start; align-self: end; transform-origin: 0 100%; }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__text { align-self: start; }

  /* Stationen: gleiche Übergänge für Karte und Einträge */
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] :is(.tpc-eventkarten__gross, .tpc-eventkarten__titel, .tpc-content-icon, .tpc-eventkarten__ball) {
    transition: scale var(--dur-settle) var(--ease), opacity var(--dur-settle) var(--ease);
  }
  /* übrige Anlässe leicht gedämpft: nur die Motive, der Text behält seinen Kontrast */
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] :is(.tpc-eventkarten__punkt, .tpc-eventkarten__gross):not([data-tpc-max-aktiv]) .tpc-content-icon { opacity: .55; }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__gross[data-tpc-max-aktiv] { scale: 1.05; }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__gross[data-tpc-max-aktiv] .tpc-content-icon { scale: 1.2; }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__gross[data-tpc-max-aktiv] .tpc-eventkarten__ball { scale: 1.3; }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__punkt[data-tpc-max-aktiv] .tpc-content-icon { scale: 1.4; }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-folge] .tpc-eventkarten__punkt[data-tpc-max-aktiv] .tpc-eventkarten__titel { scale: 1.35; }

  /* Lime-Ball als Marker links neben dem aktiven Eintrag; rollt beim Wechsel (die Karte
     trägt ihren eigenen Ball, dort tritt der Marker zurück). */
  :root[data-motion="max"]:not(.no-js) .tpc-eventkarten__marke {
    --tpc-marke: 1.375rem;
    position: absolute; left: calc(-1 * (var(--space-6) + var(--tpc-marke))); top: 0;
    width: var(--tpc-marke); height: var(--tpc-marke);
    pointer-events: none;
    translate: 0 calc(var(--tpc-marke-y, 0) * 1px - var(--tpc-marke) / 2);
    rotate: calc(var(--tpc-marke-i, 0) * 360deg);
    scale: .4;
    opacity: 0;
    transition: translate var(--dur-settle) var(--ease), rotate var(--dur-settle) var(--ease), scale var(--dur-settle) var(--ease), opacity var(--dur-settle) var(--ease);
  }
  :root[data-motion="max"]:not(.no-js) .tpc-eventkarten__marke[data-tpc-max-an] { scale: 1; opacity: 1; }
}
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) and (max-width: 999px) {
    /* Listen mit data-tpc-max="staffel" blendet motion-max.js ein — hier nicht doppelt. */
    :root[data-motion="max"]:not(.no-js) .tpc-eventkarten__liste:not([data-tpc-max~="staffel"]) > .tpc-eventkarten__punkt {
      animation: tpc-max-auftauchen linear both;
      animation-timeline: view();
      animation-range: entry 0% cover 30%;
    }
  }
}
/* --- Fläche „Weltfläche“ (Startseite, seit 19.10.2026) -------------------------------
   Zusätzlich zu tpc-section--brand: Grund in --tpc-welt-flaeche (Jungle Green) statt
   --tpc-welt-grund. Belegt nur die Flächenwerte um, die sich gegenüber der Weltfläche
   ändern; Text Club Paper (5,5 : 1), Zweittext 94 % (≥ 4,8 : 1 auch im Hauch), Lime bleibt
   Fokus, Trail und einzige Aktionsfarbe. Der Hauch dunkelt mit Canopy ab statt aufzuhellen. */
.tpc-eventkarten--weltflaeche {
  --surface-page:   var(--tpc-welt-flaeche);
  --text-muted:     color-mix(in srgb, var(--tpc-club-paper) 94%, transparent);
  --border-default: color-mix(in srgb, var(--tpc-club-paper) 24%, transparent);
  --hauch-a:        color-mix(in srgb, var(--tpc-welt-grund) 22%, transparent);
  --hauch-b:        color-mix(in srgb, var(--tpc-welt-licht) 6%, transparent);
  --deko-blatt:     var(--tpc-welt-grund);
  --deko-blatt-2:   var(--tpc-duo-dark);
}
/* --- Hover und Fokus je Anlass (seit 19.10.2026, ersetzt auf der Startseite den Pin) ---
   Ohne Pin (Section ohne data-tpc-max="karten") hebt sich die angefasste Karte bzw. Zeile
   leicht heraus und der Lime-Ball steht neben dem Titel. Die große Karte trägt ihren Ball
   schon im Fuß; die Listeneinträge bekommen ihn als eigenes Element (.tpc-eventkarten__titelball,
   aria-hidden). Tastatur (:focus-visible) zeigt denselben Zustand; reduzierte Bewegung ohne
   Maßstab, nur Ball und Schatten. Einträge ohne Titelball (Eventseite mit Pin) bleiben unberührt. */
.tpc-eventkarten__eintrag:has(> .tpc-eventkarten__titelball) {
  grid-template-columns: auto minmax(0, 1fr);
  column-gap: var(--space-4);
  align-items: center;
  transform-origin: 0 50%;
}
.tpc-eventkarten__eintrag:has(> .tpc-eventkarten__titelball) > :not(.tpc-eventkarten__titel, .tpc-eventkarten__titelball) { grid-column: 1 / -1; }
.tpc-eventkarten__titelball {
  width: 1.125rem; height: 1.125rem;
  opacity: 0;
}
.tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross {
  --tpc-ek-hebung: 0 10px 0 var(--interactive-kante);
}
.tpc-eventkarten--weltflaeche:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross {
  --tpc-ek-hebung: 12px 12px 0 var(--interactive-kante);
}
.tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__eintrag:focus-visible > .tpc-eventkarten__titelball { opacity: 1; }
.tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross:focus-visible { box-shadow: var(--tpc-ek-hebung); }
.tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__eintrag:focus-visible .tpc-eventkarten__titel { text-decoration-color: var(--link-deko); }
@media (hover: hover) {
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__eintrag:hover > .tpc-eventkarten__titelball { opacity: 1; }
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross:hover { box-shadow: var(--tpc-ek-hebung); }
}
@media (prefers-reduced-motion: no-preference) {
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross {
    transition: scale var(--dur-toggle) var(--ease), box-shadow var(--dur-toggle) var(--ease), transform var(--dur-hover) var(--ease);
  }
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__eintrag { transition: scale var(--dur-toggle) var(--ease); }
  .tpc-eventkarten:not([data-tpc-max~="karten"]) :is(.tpc-eventkarten__ball, .tpc-eventkarten__titelball) {
    transition: opacity var(--dur-toggle) var(--ease), scale var(--dur-settle) var(--ease), rotate var(--dur-settle) var(--ease);
  }
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__titelball { scale: .4; rotate: -120deg; }
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross:focus-visible { scale: 1.02; }
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross:focus-visible .tpc-eventkarten__ball { scale: 1.2; }
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__eintrag:focus-visible { scale: 1.03; }
  .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__eintrag:focus-visible > .tpc-eventkarten__titelball { scale: 1; rotate: 0deg; }
  @media (hover: hover) {
    .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross:hover { scale: 1.02; }
    .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__gross:hover .tpc-eventkarten__ball { scale: 1.2; }
    .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__eintrag:hover { scale: 1.03; }
    .tpc-eventkarten:not([data-tpc-max~="karten"]) .tpc-eventkarten__eintrag:hover > .tpc-eventkarten__titelball { scale: 1; rotate: 0deg; }
  }
}
/* Ohne Untertitel (Startseite seit 19.10.2026): Ab 900 px steht das Motiv der Liste links
   neben dem Titel, damit sieben Anlässe in etwa eine Bildschirmhöhe passen; die große Karte
   stellt ihr Motiv oben rechts frei, der Titel sitzt unten auf der Datenzeile. */
@media (min-width: 900px) {
  .tpc-eventkarten__eintrag:has(> .tpc-eventkarten__titelball):has(> .tpc-content-icon) {
    grid-template-columns: 3.5rem auto minmax(0, 1fr);
    column-gap: var(--space-5);
    padding: var(--space-3) 0;
  }
  .tpc-eventkarten__eintrag:has(> .tpc-eventkarten__titelball) > .tpc-content-icon {
    grid-column: 1;
    width: 3.5rem; height: 3.5rem;
    margin: 0;
  }
  .tpc-eventkarten__eintrag:has(> .tpc-eventkarten__titelball):has(> .tpc-content-icon) > .tpc-eventkarten__titelball { margin-inline-start: calc(var(--space-4) - var(--space-5)); }
  .tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon):not(:has(> .tpc-eventkarten__gross-text)) { grid-template-rows: auto 1fr auto; }
  .tpc-eventkarten__gross-inhalt:not(:has(> .tpc-eventkarten__gross-text)) > .tpc-content-icon { grid-column: 2; grid-row: 1; justify-self: end; }
  .tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon):not(:has(> .tpc-eventkarten__gross-text)) > .tpc-eventkarten__gross-titel { grid-column: 1 / -1; grid-row: 2; align-self: end; }
  .tpc-eventkarten__gross-inhalt:has(> .tpc-content-icon):not(:has(> .tpc-eventkarten__gross-text)) > .tpc-eventkarten__fuss { grid-row: 3; }
}
/* cb08-tabelle — Linientabelle, keine Kartenrahmen. Werte in Space Mono; auf der
   Weltfläche in Lime (--text-preis), auf Paper in Void. */
.tpc-tabelle__raster {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: start;
}
.tpc-tabelle__titel { grid-column: 1 / span 4; }
.tpc-tabelle__inhalt { grid-column: 5 / -1; min-width: 0; }
.tpc-tabelle__rahmen { margin-inline-end: calc(-1 * var(--bleed)); overflow-x: auto; }
.tpc-tabelle__tafel { width: 100%; border-collapse: collapse; border-top: var(--linie) solid var(--border-strong); }
.tpc-tabelle__tafel th, .tpc-tabelle__tafel td {
  padding: var(--space-4) var(--space-5) var(--space-4) 0;
  border-bottom: var(--linie) solid var(--border-default);
  text-align: left;
  vertical-align: baseline;
}
.tpc-tabelle__tafel tr > :last-child { padding-right: var(--bleed); }
.tpc-tabelle__tafel thead th { color: var(--text-strong); font-family: var(--font-display); font-weight: 600; font-size: 1rem; line-height: 1.25; }
.tpc-tabelle__zusatz { display: block; margin-top: var(--space-1); color: var(--text-muted); font-family: var(--font-body); font-weight: 400; font-size: .875rem; }
.tpc-tabelle__tafel tbody th { font-weight: 500; color: var(--text-strong); }
.tpc-tabelle__wert { color: var(--text-preis); font-family: var(--font-mono); font-weight: 700; font-size: 1.0625rem; letter-spacing: var(--mono-tracking); font-variant-numeric: tabular-nums; white-space: nowrap; }
.tpc-tabelle__fuss {
  position: relative;
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--space-5) var(--space-7);
  margin-top: var(--space-6);
}
.tpc-tabelle__fuss > :not(.tpc-trail) { position: relative; z-index: 3; }
.tpc-tabelle__tipp { color: var(--text-body); }
.tpc-tabelle__ball { width: 18px; height: 18px; margin-left: 6px; vertical-align: -2px; }
@media (max-width: 899px) {
  .tpc-tabelle__raster { display: block; }
  .tpc-tabelle__inhalt { margin-top: var(--space-6); }
  .tpc-tabelle__rahmen { margin-inline-end: calc(-1 * var(--gutter)); }
  .tpc-tabelle__tafel tr > :last-child { padding-right: var(--gutter); }
  .tpc-tabelle__tafel th, .tpc-tabelle__tafel td { padding-right: var(--space-3); }
}
/* Bricht die Aktionsgruppe unter den Tipp-Satz um (vor der Eröffnung: Status-Pille plus
   Lime-Pille), bleibt sie rechts: der Trail läuft dann im Bogen vom Ball zur Lime-Pille
   am Ende der Gruppe. Einzeilig ändert sich nichts. */
@media (min-width: 900px) { .tpc-tabelle__fuss > .tpc-aktionen { margin-left: auto; } }
/* Mobil (Trail aus) steht die Lime-Pille wieder vorn; die Status-Pille ist nicht fokussierbar. */
@media (max-width: 899px) { .tpc-tabelle__fuss .tpc-status { order: 1; } }
/* --- Variante „links“: Linien laufen zum linken Bildschirmrand (Steckbrief, zweiteilig) */
.tpc-tabelle--links .tpc-tabelle__rahmen { margin-inline: calc(-1 * var(--bleed)) 0; }
.tpc-tabelle--links .tpc-tabelle__tafel tr > :first-child { padding-left: var(--bleed); }
.tpc-tabelle--links .tpc-tabelle__tafel tr > :last-child { padding-right: 0; }
/* --- Variante „zweiteilig“: Tabelle links (7 Spalten), Textblock rechts (4 Spalten) */
.tpc-tabelle--zweiteilig .tpc-tabelle__titel { grid-column: 1 / span 7; grid-row: 1; }
.tpc-tabelle--zweiteilig .tpc-tabelle__inhalt { grid-column: 1 / span 7; grid-row: 2; margin-top: var(--space-7); }
.tpc-tabelle__neben {
  grid-column: 9 / -1; grid-row: 1 / span 2;
  align-self: end;
  display: grid; gap: var(--space-4);
  padding-top: var(--space-4);
  border-top: var(--linie) solid var(--border-strong);
}
.tpc-tabelle__neben-text { color: var(--text-muted); }
/* --- Variante „zeiten“: ohne Kopfzeile; Uhrzeiten in Space Mono auf H3-Größe,
   rechtsbündig über die rechte Containerkante. Farbe Text, nicht Preis. */
.tpc-tabelle__zeit {
  color: var(--text-strong);
  font-family: var(--font-mono);
  font-weight: 700;
  font-size: var(--h3-size);
  line-height: var(--h3-lh);
  letter-spacing: var(--mono-tracking);
  font-variant-numeric: tabular-nums;
  text-align: right;
  white-space: nowrap;
}
.tpc-tabelle--zeiten .tpc-tabelle__titel { grid-column: 1 / -1; grid-row: 1; }
.tpc-tabelle--zeiten .tpc-tabelle__inhalt { grid-column: 4 / -1; grid-row: 2; margin-top: var(--space-7); }
.tpc-tabelle--zeiten .tpc-tabelle__tafel tbody th { font-family: var(--font-display); font-weight: 600; }
.tpc-tabelle--zeiten .tpc-tabelle__tafel tr > :last-child { padding-right: calc(var(--bleed) - var(--gutter) * .6); }
.tpc-tabelle__hinweis { max-width: 52ch; color: var(--text-muted); }
.tpc-tabelle__vorab { color: var(--text-strong); font-weight: 500; }
/* --- Variante „steckbrief“: Weg links in Unbounded, Beschreibung als Fließtext */
.tpc-tabelle--steckbrief .tpc-tabelle__titel { grid-column: 1 / -1; grid-row: 1; }
.tpc-tabelle--steckbrief .tpc-tabelle__inhalt { grid-column: 1 / span 10; grid-row: 2; margin-top: var(--space-7); }
.tpc-tabelle--steckbrief .tpc-tabelle__tafel tbody th {
  width: calc(var(--bleed) + 13rem);
  font-family: var(--font-display); font-weight: 600; font-size: var(--h3-size); line-height: var(--h3-lh);
}
.tpc-tabelle--steckbrief .tpc-tabelle__tafel td { color: var(--text-body); max-width: 62ch; }
/* Kundenlücke unter einer Zelle: eigener Block, kompakter Rahmen in Zellenbreite */
.tpc-tabelle__luecke { display: block; margin-block-start: var(--space-3); padding: var(--space-3) var(--space-4); font-size: var(--caption-size); line-height: var(--caption-lh); }
@media (max-width: 899px) {
  .tpc-tabelle--links .tpc-tabelle__rahmen { margin-inline: calc(-1 * var(--gutter)) 0; }
  .tpc-tabelle--links .tpc-tabelle__tafel tr > :first-child { padding-left: var(--gutter); }
  .tpc-tabelle--links .tpc-tabelle__tafel tr > :last-child { padding-right: 0; }
  .tpc-tabelle--zweiteilig .tpc-tabelle__inhalt { margin-top: var(--space-6); }
  .tpc-tabelle__neben { margin-top: var(--space-8); }
  .tpc-tabelle--zeiten .tpc-tabelle__inhalt { margin-top: var(--space-6); }
  .tpc-tabelle--zeiten .tpc-tabelle__tafel tr > :last-child { padding-right: var(--space-3); }
  .tpc-tabelle--steckbrief .tpc-tabelle__inhalt { margin-top: var(--space-6); }
  .tpc-tabelle--steckbrief .tpc-tabelle__tafel tr { display: grid; gap: var(--space-2); padding: var(--space-4) 0 var(--space-4) var(--gutter); border-bottom: var(--linie) solid var(--border-default); }
  .tpc-tabelle--steckbrief.tpc-tabelle--links .tpc-tabelle__tafel tr > * { padding: 0; border: 0; width: auto; }
}
/* Status-Pille in einer Tabellenzelle (vor der Eröffnung an der Stelle eines Buchen-Links):
   eigene Zeile unter dem Satz. */
.tpc-tabelle__status { display: flex; width: max-content; margin-top: var(--space-3); }
/* Schmale Telefone (320–479 px): engere Spalten und eine Stufe kleinere Köpfe, damit die
   Preistabelle mit drei Spalten ohne seitliches Scrollen in die Breite passt. */
@media (max-width: 479px) {
  .tpc-tabelle__tafel th, .tpc-tabelle__tafel td { padding-right: var(--space-2); }
  .tpc-tabelle__tafel thead th { font-size: .875rem; }
  .tpc-tabelle__tafel tbody th { font-size: var(--caption-size); }
  .tpc-tabelle__zusatz { font-size: .8125rem; }
  .tpc-tabelle__wert { font-size: .9375rem; }
}
/* Inhalts-Icon links neben der Überschrift (Variante „zweiteilig“, z. B. Spieldauer);
   mobil steht es über der Überschrift. Breite 4rem = tpc-content-icon--64. */
.tpc-tabelle__raster > .tpc-content-icon { grid-column: 1; grid-row: 1; align-self: center; }
.tpc-tabelle__raster:has(> .tpc-content-icon--64) > .tpc-tabelle__titel {
  padding-inline-start: calc(4rem + var(--space-4) + var(--space-1));
}
@media (max-width: 899px) {
  .tpc-tabelle__raster > .tpc-content-icon { margin-block-end: var(--space-4); }
  .tpc-tabelle__raster:has(> .tpc-content-icon--64) > .tpc-tabelle__titel { padding-inline-start: 0; }
}
@media (max-width: 767px) {
  .tpc-tabelle__raster > .tpc-content-icon { margin-block-end: var(--space-3); }
}
/* cb06-angebot — Paket mit Preislogik. Display-Preis in --text-preis (Welt: Lime,
   Paper: Void), Leistungen als Linientabelle, eine Aktion mit Trail vom Preis. */
.tpc-angebot__raster {
  position: relative;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: start;
}
.tpc-angebot__text { grid-column: 1 / span 6; grid-row: 1; position: relative; z-index: 3; }
.tpc-angebot__einleitung { margin-top: var(--space-5); color: var(--text-muted); }
.tpc-angebot__leistungen {
  list-style: none;
  margin-top: var(--space-6);
  border-top: var(--linie) solid var(--border-default);
  max-width: 34rem;
}
.tpc-angebot__leistungen li {
  padding: var(--space-3) 0;
  border-bottom: var(--linie) solid var(--border-default);
  font-weight: 500;
}
.tpc-angebot__preis {
  grid-column: 8 / -1;
  grid-row: 1;
  display: grid;
  justify-items: end;
  gap: var(--space-5);
  position: relative; z-index: 3;
}
.tpc-angebot__betrag {
  display: inline-flex; align-items: baseline;
  margin-inline-end: calc(var(--gutter) * -.3);
  color: var(--text-preis);
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(3.5rem, 8vw, 7.5rem);
  line-height: .9;
  letter-spacing: -.04em;
  white-space: nowrap;
}
.tpc-angebot__ball { width: .26em; height: .26em; margin-left: .08em; box-shadow: inset 0 0 0 .03em var(--accent-kante); }
.tpc-angebot__preistext { max-width: 30ch; justify-self: start; color: var(--text-body); font-size: var(--lead-size); line-height: var(--lead-lh); }
.tpc-angebot__aktion { grid-column: 1 / span 6; grid-row: 2; margin-top: var(--space-7); position: relative; z-index: 3; }
/* Variante ohne Preis: rechts ein Nebenblock als Kartenpapier */
.tpc-angebot__neben { grid-column: 8 / -1; grid-row: 1 / span 2; }
@media (max-width: 899px) {
  .tpc-angebot__raster { display: block; }
  .tpc-angebot__preis { justify-items: start; margin-top: var(--space-7); }
  .tpc-angebot__betrag { margin: 0; }
  .tpc-angebot__aktion { margin-top: var(--space-6); }
}
/* Variante „preis-links“: Display-Preis links und über die linke Containerkante,
   Text, Leistungen und Aktion rechts. Leistungszeilen dürfen ein fettes Etikett tragen. */
.tpc-angebot--preis-links .tpc-angebot__text { grid-column: 7 / -1; }
.tpc-angebot--preis-links .tpc-angebot__preis { grid-column: 1 / span 5; justify-items: start; align-self: start; padding-top: var(--space-2); }
.tpc-angebot--preis-links .tpc-angebot__betrag { margin-inline: calc(var(--gutter) * -.55) 0; }
.tpc-angebot--preis-links .tpc-angebot__aktion { grid-column: 7 / -1; }
.tpc-angebot__leistungen strong { font-weight: 700; color: var(--text-strong); }
@media (max-width: 899px) {
  .tpc-angebot--preis-links .tpc-angebot__preis { margin-top: var(--space-6); }
  .tpc-angebot--preis-links .tpc-angebot__betrag { margin-inline-start: calc(var(--gutter) * -.5); }
}
/* Variante „neben“ (Geburtstag, ohne Preis): Leistungen links auf sieben Spalten, rechts
   ein Nebenblock als Kartenpapier mit Versatzschatten; er ragt über die rechte Containerkante. */
.tpc-angebot--neben .tpc-angebot__text { grid-column: 1 / span 7; }
.tpc-angebot--neben .tpc-angebot__neben { grid-column: 9 / -1; grid-row: 1; align-self: center; margin-inline-end: calc(var(--gutter) * -.6); }
.tpc-angebot__neben-text { color: var(--text-muted); }
.tpc-angebot__neben-aktion { margin-top: var(--space-2); }
.tpc-angebot__neben-aktion[hidden] { display: none; }
.tpc-angebot__luecke { margin-top: var(--space-4); padding: var(--space-3) var(--space-4); font-size: var(--caption-size); line-height: var(--caption-lh); }
@media (max-width: 899px) {
  .tpc-angebot--neben .tpc-angebot__neben { margin: var(--space-8) 0 0; }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13): Der Ecken-Trail zeichnet sich hinter dem
   rollenden Ball (motion-max.js setzt die Punkte einzeln sichtbar). Preis-Zähler und
   Linientabelle laufen ebenfalls dort. */
@media (prefers-reduced-motion: no-preference) {
  :root[data-motion="max"]:not(.no-js)[data-tpc-max-bereit] [data-tpc-max~="rollen"] .tpc-trail__punkt { opacity: 0; }
}
/* cb09-gruppen — Display-Zahlen mit je einer Zeile, Stufen versetzt wie Bahnhöhen. */
.tpc-gruppen__titel { max-width: 18ch; }
.tpc-gruppen__stufen {
  list-style: none;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: var(--raster-gap);
  align-items: start;
  margin-top: var(--space-8);
}
.tpc-gruppen__stufe { display: grid; gap: var(--space-4); padding-top: var(--space-4); border-top: var(--linie) solid var(--border-strong); }
.tpc-gruppen__stufe:nth-child(2) { margin-top: var(--space-7); }
.tpc-gruppen__stufe:nth-child(3) { margin-top: calc(var(--space-7) * 2); }
.tpc-gruppen__stufe:last-child .tpc-gruppen__zahl { margin-inline-end: calc(var(--gutter) * -.6); }
.tpc-gruppen__zahl {
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 800;
  font-size: var(--display-size);
  line-height: var(--display-lh);
  letter-spacing: var(--display-tracking);
}
.tpc-gruppen__satz { max-width: 36ch; color: var(--text-muted); }
@media (max-width: 899px) {
  .tpc-gruppen__stufen { grid-auto-flow: row; gap: var(--space-7); margin-top: var(--space-7); }
  .tpc-gruppen__stufe:nth-child(n) { margin-top: 0; }
  .tpc-gruppen__stufe:last-child .tpc-gruppen__zahl { margin: 0; }
}
/* cb10-textband — kurzes Band: H2 auf fünf, Text auf sechs Spalten. Sektionsrand drei Viertel. */
.tpc-textband { padding-block: calc(var(--section-pad) * .75); }
.tpc-textband__blatt {
  position: absolute;
  right: calc(-1 * clamp(40px, 5vw, 90px));
  top: 50%;
  width: clamp(120px, 13vw, 210px);
  transform: translateY(-50%) rotate(-24deg);
}
.tpc-textband--blatt-links .tpc-textband__blatt { right: auto; left: calc(-1 * clamp(40px, 5vw, 90px)); transform: translateY(-50%) rotate(28deg); }
.tpc-textband__raster {
  position: relative; z-index: 1;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: start;
}
.tpc-textband__titel { grid-column: 1 / span 5; }
.tpc-textband__text { grid-column: 7 / span 5; color: var(--text-muted); font-size: var(--lead-size); line-height: var(--lead-lh); }
.tpc-textband__liste { list-style: none; display: grid; gap: var(--space-4); }
.tpc-textband__liste li { color: var(--text-strong); font-family: var(--font-display); font-weight: 600; font-size: var(--h3-size); line-height: var(--h3-lh); }
@media (max-width: 899px) {
  .tpc-textband__raster { display: block; }
  .tpc-textband__text { margin-top: var(--space-5); }
  .tpc-textband__blatt { width: 90px; right: -40px; top: 20%; }
}
/* Varianten „link“ und „schluss“: Textlink-Aktion bzw. Schlusszeile unter dem Absatz.
   Ein ausgeblendeter Link (hidden, bis sein Ziel feststeht) bleibt im Markup. */
.tpc-textband__aktion { margin-top: var(--space-5); }
.tpc-textband__aktion[hidden] { display: none; }
.tpc-textband__luecke { margin-top: var(--space-5); }
.tpc-textband__schluss {
  margin-top: var(--space-7);
  padding-top: var(--space-5);
  border-top: var(--linie) solid var(--border-default);
  color: var(--text-strong);
}
/* Gespiegeltes Blatt bleibt außerhalb der Textkante: sichtbar höchstens bis zum Gutter. */
.tpc-textband--blatt-links .tpc-textband__blatt { left: calc(-1 * clamp(64px, 8vw, 140px)); }
@media (max-width: 899px) {
  .tpc-textband--blatt-links .tpc-textband__blatt { left: -70px; top: 19%; }
}
/* Variante „zahlen“: zwei Display-Zahlen unter dem Absatz, die zweite läuft über die
   rechte Containerkante. Schmuck (aria-hidden); der Absatz trägt beide Zahlen wörtlich. */
.tpc-textband__zahlen {
  grid-column: 1 / -1;
  display: flex; flex-wrap: wrap; align-items: baseline; justify-content: flex-end;
  gap: var(--space-2) var(--space-7);
  margin: var(--space-8) calc(var(--gutter) * -.6) 0 0;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(3.5rem, 8vw, 7.5rem);
  line-height: .9;
  letter-spacing: -.04em;
  white-space: nowrap;
}
/* Die H2 trägt ein langes Wort („110-€-Freibetrag“, „Weihnachtsfeier“, „Barrierefreiheit“),
   das ab 900 px nicht getrennt wird: sieben Spalten statt fünf. */
.tpc-textband--zahlen .tpc-textband__titel,
.tpc-textband--breit .tpc-textband__titel { grid-column: 1 / span 7; }
.tpc-textband--zahlen .tpc-textband__text,
.tpc-textband--breit .tpc-textband__text { grid-column: 8 / -1; padding-left: var(--space-6); }
.tpc-textband__zahl { color: var(--text-strong); }
.tpc-textband__zahl + .tpc-textband__zahl { color: var(--text-muted); }
@media (max-width: 899px) {
  .tpc-textband--zahlen .tpc-textband__text,
  .tpc-textband--breit .tpc-textband__text { padding-left: 0; }
  .tpc-textband__zahlen { justify-content: flex-start; margin: var(--space-7) 0 0; font-size: clamp(2.75rem, 13vw, 4rem); }
}
/* Variante „gross“: H2 in Display-Größe über die ganze Breite (läuft über die rechte
   Containerkante), der Absatz rückt versetzt darunter. */
.tpc-textband--gross .tpc-textband__titel {
  grid-column: 1 / -1;
  margin-inline-end: calc(var(--gutter) * -.6);
  font-size: clamp(2.5rem, 5.6vw, 5.25rem);
  font-weight: 800;
  line-height: .95;
  letter-spacing: -.03em;
}
.tpc-textband--gross .tpc-textband__text { grid-column: 6 / span 6; margin-top: var(--space-7); }
@media (max-width: 899px) {
  .tpc-textband--gross .tpc-textband__titel { margin-inline-end: 0; font-size: clamp(2.25rem, 9vw, 3rem); }
  .tpc-textband--gross .tpc-textband__text { margin-top: var(--space-5); }
}
/* Variante „saetze“ (JGA „Gut zu wissen“): Liste aus ganzen Sätzen statt Stichworten —
   mehr Abstand und 2-px-Linie zwischen den Punkten, damit die Sätze nicht ineinanderlaufen. */
.tpc-textband--saetze .tpc-textband__liste { gap: 0; }
.tpc-textband--saetze .tpc-textband__liste li { padding-block: var(--space-4); }
.tpc-textband--saetze .tpc-textband__liste li + li { border-top: var(--linie) solid var(--border-default); }
.tpc-textband--saetze .tpc-textband__liste li:first-child { padding-top: 0; }
/* Inhalts-Icon über der Überschrift (z. B. Gutscheine): eigene Zeile über der H2,
   der Text bleibt auf Höhe der Überschrift. */
.tpc-textband__raster > .tpc-content-icon { grid-column: 1 / span 5; grid-row: 1; }
.tpc-textband__raster:has(> .tpc-content-icon) > .tpc-textband__titel,
.tpc-textband__raster:has(> .tpc-content-icon) > .tpc-textband__text { grid-row: 2; }
/* cb11-vertrauensband — Garantien als ruhige Liste, keine Karten, keine Icons.
   Marke je Punkt ist der Lime-Ball mit Void-Rand (Ballform aus dem Logo). */
/* Kurzes Band: drei Viertel des Sektionsrands. */
.tpc-vertrauensband { padding-block: calc(var(--section-pad) * .75); }
.tpc-vertrauensband__inhalt { position: relative; z-index: 1; }
.tpc-vertrauensband__bewertungen { display: grid; gap: var(--space-6); margin-bottom: var(--space-8); }
.tpc-vertrauensband__liste {
  list-style: none;
  display: flex; flex-wrap: wrap;
  gap: var(--space-6) clamp(2rem, 5vw, 5rem);
  padding-inline-start: clamp(2rem, 6vw, 6rem);
}
.tpc-vertrauensband__punkt {
  display: flex; align-items: baseline; gap: var(--space-3);
  max-width: 17em;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--h3-size);
  line-height: 1.15;
  letter-spacing: -.01em;
}
.tpc-vertrauensband__punkt::before {
  content: "";
  flex: none;
  width: .5em; height: .5em;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: inset 0 0 0 var(--linie) var(--accent-kante);
}
@media (max-width: 899px) {
  .tpc-vertrauensband__liste { flex-direction: column; gap: var(--space-5); padding-inline-start: var(--space-6); }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13) ------------------------------------
   Garantien als Endlos-Laufband: motion-max.js legt die Liste mit einer stummen Kopie in
   eine Spur. Die Spur läuft nur, solange sie sichtbar ist; bewusst ohne Pausentaste und
   ohne Halt bei Hover (Entscheid Feedback-Runde 2). Reduzierte Bewegung = Basis-Liste. */
@keyframes tpc-max-laufband { to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: no-preference) {
  :root[data-motion="max"]:not(.no-js) .tpc-vertrauensband__spur {
    display: flex;
    width: max-content;
    margin-inline-start: calc(-1 * var(--bleed));
    animation: tpc-max-laufband 40s linear infinite;
    animation-play-state: paused;
  }
  :root[data-motion="max"]:not(.no-js) .tpc-vertrauensband__spur[data-tpc-max-laeuft] { animation-play-state: running; }
  :root[data-motion="max"]:not(.no-js) .tpc-vertrauensband__spur > .tpc-vertrauensband__liste {
    flex-direction: row;
    flex-wrap: nowrap;
    padding-inline: calc(clamp(2rem, 5vw, 5rem) / 2);
  }
  :root[data-motion="max"]:not(.no-js) .tpc-vertrauensband__spur .tpc-vertrauensband__punkt { max-width: none; white-space: nowrap; }
}
/* Fläche „Licht“ (Startseite, Entscheid #12): Grund --tpc-welt-licht (Amber Torch), Text Void.
   Kein Lime als Text, kein Rot; die Garantie-Marken bleiben Lime-Ball mit Void-Rand. */
.tpc-vertrauensband--weltlicht {
  --surface-page:    var(--tpc-welt-licht);
  --text-strong:     var(--tpc-void-black);
  --text-body:       var(--tpc-void-black);
  --text-muted:      color-mix(in srgb, var(--tpc-void-black) 82%, transparent);
  --text-link:       var(--tpc-void-black);
  --text-link-hover: var(--tpc-void-black);
  --text-preis:      var(--tpc-void-black);
  --border-default:  color-mix(in srgb, var(--tpc-void-black) 18%, transparent);
  --focus-ring:      var(--tpc-void-black);
  --link-deko:       var(--tpc-void-black);
  --trail:           var(--tpc-void-black);
  --btn-dx: 0px; --btn-dy: 4px; --btn-lx: 0px;
  --hauch-a:         color-mix(in srgb, var(--tpc-club-paper) 18%, transparent);
  --hauch-b:         color-mix(in srgb, var(--tpc-void-black) 5%, transparent);
}
/* cb12-anfrage — Event-Anfrage (A7). Formularkarte auf Kartenpapier, Felder einspaltig
   bzw. paarweise, Anlass als Radio-Pillen. Variante --vorspann: links ein Kundentext-Block. */
.tpc-anfrage { scroll-margin-top: var(--space-5); }
.tpc-anfrage__raster {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: start;
}
.tpc-anfrage__vorspann { display: none; }
.tpc-anfrage__karte {
  grid-column: 2 / span 10;
  padding: clamp(1.5rem, 4vw, 3.5rem);
  gap: 0;
  overflow: visible;
}
.tpc-anfrage--vorspann .tpc-anfrage__vorspann { display: block; grid-column: 1 / span 4; padding-top: var(--space-6); }
.tpc-anfrage--vorspann .tpc-anfrage__karte { grid-column: 5 / -1; translate: calc(var(--gutter) * .6) 0; }
.tpc-anfrage__schritte { list-style: none; counter-reset: schritt; margin-top: var(--space-5); border-top: var(--linie) solid var(--border-default); }
.tpc-anfrage__schritt {
  counter-increment: schritt;
  display: grid; grid-template-columns: 3rem minmax(0, 1fr); column-gap: var(--space-4); row-gap: var(--space-1);
  align-items: start;
  padding: var(--space-5) 0;
  border-bottom: var(--linie) solid var(--border-default);
  color: var(--text-muted);
  font-size: var(--caption-size);
  line-height: var(--caption-lh);
}
/* Hierarchie im Vorspann: Zähler groß in der Display-Schrift, Schritt-Titel als h4-Stufe
   (Display), die Beschreibung darunter in der Fließtextschrift. */
.tpc-anfrage__schritt::before {
  content: counter(schritt);
  grid-row: span 2;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 2rem;
  line-height: 1;
  letter-spacing: -.02em;
}
.tpc-anfrage__schritt-titel {
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: var(--h4-weight);
  font-size: var(--h4-size);
  line-height: var(--h4-lh);
  letter-spacing: var(--h4-tracking);
}
.tpc-anfrage__schritt-text { grid-column: 2; }
.tpc-anfrage__einleitung { margin-top: var(--space-4); color: var(--text-muted); }
.tpc-anfrage__formular { display: grid; gap: var(--space-7); margin-top: var(--space-7); }
/* Erfolgszustand: [hidden] muss gegen display:grid gewinnen, sonst bleibt das Formular stehen. */
.tpc-anfrage__formular[hidden] { display: none; }
.tpc-anfrage__gruppe { margin: 0; padding: var(--space-6) 0 0; border: 0; border-top: var(--linie) solid var(--border-default); min-width: 0; }
.tpc-anfrage__legende {
  float: left; width: 100%;
  margin-bottom: var(--space-5);
  padding: 0;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--h3-size);
  line-height: var(--h3-lh);
}
.tpc-anfrage__legende + * { clear: both; }
.tpc-anfrage__chips { display: flex; flex-wrap: wrap; gap: var(--space-3); }
.tpc-anfrage__gruppe > .tpc-field__hint, .tpc-anfrage__gruppe > .tpc-field__error { margin-top: var(--space-3); }
.tpc-anfrage__felder { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-5) var(--space-5); }
.tpc-anfrage__feld--breit { grid-column: 1 / -1; }
.tpc-anfrage__unterfrage { margin: 0; padding: 0; border: 0; min-width: 0; display: grid; gap: var(--space-3); }
.tpc-anfrage__unterfrage > legend { float: left; width: 100%; padding: 0; margin-bottom: var(--space-3); }
.tpc-anfrage__zusammenfassung {
  padding: var(--space-5);
  border: var(--linie) solid var(--status-danger);
  border-radius: var(--radius-sm);
}
.tpc-anfrage__zusammenfassung[hidden] { display: none; }
.tpc-anfrage__zusammenfassung-titel { font-weight: 500; color: var(--text-strong); }
.tpc-anfrage__zusammenfassung-liste { margin-top: var(--space-3); padding-left: 1.2em; }
.tpc-anfrage__zusammenfassung-liste a { color: var(--text-strong); text-decoration-color: var(--status-danger); text-decoration-thickness: var(--linie); text-underline-offset: .25em; }
.tpc-anfrage__absenden { display: grid; justify-items: start; gap: var(--space-3); padding-top: var(--space-6); border-top: var(--linie) solid var(--border-default); }
.tpc-anfrage__entlaster { margin-top: var(--space-2); color: var(--text-strong); font-weight: 500; }
.tpc-anfrage__klein { font-size: .875rem; color: var(--text-muted); }
.tpc-anfrage__sendefehler { color: var(--text-strong); font-size: .875rem; padding-left: var(--space-4); border-left: var(--linie) solid var(--status-danger); }
.tpc-anfrage__sendefehler[hidden] { display: none; }
.tpc-anfrage__erfolg { display: grid; justify-items: start; gap: var(--space-4); margin-top: var(--space-7); }
.tpc-anfrage__erfolg[hidden] { display: none; }
.tpc-anfrage__erfolg:focus { outline: none; }
.tpc-anfrage__erfolg-ball { width: 44px; height: 44px; }
.tpc-anfrage__erfolg-titel { color: var(--text-strong); font-family: var(--font-display); font-weight: 700; font-size: var(--h3-size); line-height: 1.15; max-width: 24ch; }
.tpc-anfrage__erfolg-text { color: var(--text-muted); }
@media (max-width: 899px) {
  .tpc-anfrage__raster { display: block; }
  .tpc-anfrage--vorspann .tpc-anfrage__vorspann { padding-top: 0; margin-bottom: var(--space-7); }
  .tpc-anfrage--vorspann .tpc-anfrage__karte { translate: none; }
  .tpc-anfrage__felder { grid-template-columns: 1fr; }
}
/* Vorspann als Fließtext (Kindergeburtstag „Preise“) statt Schrittliste; ein fehlender
   Kundenwert steht als gedämpfter Hinweis darunter, nie als erfundene Zahl. */
.tpc-anfrage__vorspann-text { margin-top: var(--space-5); padding-top: var(--space-5); border-top: var(--linie) solid var(--border-default); color: var(--text-body); }
.tpc-anfrage__marker { color: var(--text-muted); font-size: var(--caption-size); }
/* Preise im Vorspann als Liste untereinander (Marc Nr. 121, 19.10.2026): je Posten eine Zeile,
   Betrag rechts in Space Mono, Linien wie die Öffnungszeiten im Footer. */
.tpc-anfrage__preise { margin: 0; }
.tpc-anfrage__preise > div {
  display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-4);
  padding-block: var(--space-3);
  border-bottom: var(--linie) solid var(--border-default);
}
.tpc-anfrage__preise > div:first-child { padding-top: 0; }
.tpc-anfrage__preise dd {
  margin: 0; flex: none;
  color: var(--text-strong);
  font-family: var(--font-mono); font-weight: 700;
  letter-spacing: var(--mono-tracking);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.tpc-anfrage__preise dd .tpc-link { font-family: var(--font-body); }
/* --- Schritte (Anlass → Eckdaten → Kontakt) ------------------------------------------
   Mit Skript zeigt das Formular je Schritt eine Gruppe; ohne Skript stehen alle Gruppen
   untereinander, Stationen und Weiter/Zurück bleiben verborgen. Kein Aufblitzen: bis das
   Skript den Stand setzt, sind Schritt 2/3 und der Absende-Block schon ausgeblendet. */
:root:not(.no-js) [data-tpc-anfrage]:not([data-tpc-stand]) [data-tpc-schritt]:not([data-tpc-schritt="1"]),
:root:not(.no-js) [data-tpc-anfrage]:not([data-tpc-stand]) [data-tpc-absenden-block] { display: none; }
.tpc-anfrage__gruppe[hidden], .tpc-anfrage__absenden[hidden] { display: none; }
.tpc-anfrage__schrittzahl {
  display: block;
  margin-bottom: var(--space-2);
  color: var(--text-muted);
  font-family: var(--font-body);
  font-weight: 500;
  font-size: var(--caption-size);
  line-height: 1.4;
}
/* Stationen-Leiste: drei Pillen auf einer gepunkteten Putt-Trail-Spur (Punkt Ø 6 px,
   15 px Mittenabstand). Der Lime-Ball rollt zur aktuellen Station; erledigte Stationen
   tragen einen vollen Punkt, offene einen Ring. Die Spur ist bis zur aktuellen Station
   dunkel („gelaufen“), danach blass. Keine Kästen, keine Nummernkreise. */
.tpc-anfrage__stationen {
  --tpc-spur-gelaufen: var(--text-strong);
  --tpc-spur-offen: color-mix(in srgb, var(--text-strong) 30%, transparent);
  --tpc-ballplatz: 22px;
  position: relative;
  container-type: inline-size;
}
.tpc-anfrage__stationen[hidden] { display: none; }
.tpc-anfrage__stationsliste {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  margin: 0; padding: 0;
  list-style: none;
}
.tpc-anfrage__station {
  --tpc-spur: var(--tpc-spur-gelaufen);
  --tpc-marke: radial-gradient(circle closest-side, var(--text-strong) 44%, transparent 48%);
  position: relative;
  display: flex; align-items: center;
  min-width: 0;
}
.tpc-anfrage__station[aria-current="step"],
.tpc-anfrage__station[aria-current="step"] ~ .tpc-anfrage__station { --tpc-spur: var(--tpc-spur-offen); }
.tpc-anfrage__station[aria-current="step"] { --tpc-marke: none; }
.tpc-anfrage__station[aria-current="step"] ~ .tpc-anfrage__station {
  --tpc-marke: radial-gradient(circle closest-side, transparent 30%, var(--text-muted) 33% 45%, transparent 48%);
}
.tpc-anfrage__station:not(:last-child)::after {
  content: "";
  flex: 1 1 auto;
  min-width: var(--space-4);
  height: 6px;
  margin-inline: var(--space-2);
  background: radial-gradient(circle closest-side, var(--tpc-spur) 92%, transparent) left center / 15px 6px round no-repeat;
  pointer-events: none;
}
.tpc-anfrage__stationsknopf {
  display: inline-flex; align-items: center; gap: var(--space-3);
  min-height: var(--tap-min);
  padding: 0 var(--space-4) 0 var(--space-3);
  border: var(--linie) solid transparent;
  border-radius: var(--radius-pill);
  background: transparent;
  color: var(--text-strong);
  font-family: var(--font-body);
  font-weight: 500;
  font-size: var(--caption-size);
  line-height: 1.2;
  white-space: nowrap;
  cursor: pointer;
  touch-action: manipulation;
  transition: background-color var(--dur-hover) var(--ease), border-color var(--dur-hover) var(--ease);
}
.tpc-anfrage__stationsknopf::before {
  content: "";
  flex: none;
  width: var(--tpc-ballplatz); height: var(--tpc-ballplatz);
  border-radius: 50%;
  background: var(--tpc-marke);
}
.tpc-anfrage__stationsknopf:hover { background: var(--surface-hover); }
.tpc-anfrage__stationsknopf:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; }
.tpc-anfrage__station[aria-current="step"] .tpc-anfrage__stationsknopf { border-color: var(--text-strong); }
.tpc-anfrage__station[aria-current="step"] ~ .tpc-anfrage__station .tpc-anfrage__stationsknopf { color: var(--text-muted); }
/* Läufer = eine Spalte breit; der Ball sitzt im Ballplatz der Pille und rückt je Stand
   um eine Spalte weiter. */
.tpc-anfrage__laeufer {
  position: absolute; top: 0; left: 0;
  display: flex; align-items: center;
  width: calc(100% / 3);
  height: var(--tap-min);
  padding-left: calc(var(--space-3) + var(--linie));
  pointer-events: none;
}
[data-tpc-stand="2"] .tpc-anfrage__laeufer { transform: translateX(100%); }
[data-tpc-stand="3"] .tpc-anfrage__laeufer { transform: translateX(200%); }
.tpc-anfrage__stationsball { width: var(--tpc-ballplatz); height: var(--tpc-ballplatz); }
@media (prefers-reduced-motion: no-preference) {
  .tpc-anfrage__laeufer { transition: transform var(--dur-settle) var(--ease); }
}
/* Schmale Karte: Beschriftung unter dem Ball, die Spur läuft auf Ballhöhe weiter. */
@container (max-width: 539px) {
  .tpc-anfrage__station:not(:last-child)::after {
    position: absolute;
    top: calc(var(--tpc-ballplatz) / 2 - 3px);
    left: calc(var(--tpc-ballplatz) + var(--space-2));
    right: var(--space-2);
    margin: 0;
  }
  .tpc-anfrage__stationsknopf {
    flex-direction: column; align-items: flex-start; gap: var(--space-2);
    width: 100%;
    padding: 0 0 var(--space-1);
    border: 0;
    border-radius: 0;
  }
  .tpc-anfrage__stationsknopf:hover { background: transparent; text-decoration: underline; text-decoration-color: var(--link-deko); text-decoration-thickness: var(--linie); text-underline-offset: .3em; }
  .tpc-anfrage__station[aria-current="step"] .tpc-anfrage__stationsknopf {
    text-decoration: underline;
    text-decoration-color: currentColor;
    text-decoration-thickness: var(--linie);
    text-underline-offset: .3em;
  }
  .tpc-anfrage__laeufer { height: var(--tpc-ballplatz); padding-left: 0; }
}
/* Weiter/Zurück: Hauptaktion immer links (dort steht im letzten Schritt „Anfrage senden“),
   Zurück rechts. Nie zwei Lime-Knöpfe: Weiter verschwindet im letzten Schritt. */
.tpc-anfrage__steuerung {
  display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--space-3);
  padding-top: var(--space-6);
  border-top: var(--linie) solid var(--border-default);
}
.tpc-anfrage__steuerung[hidden], .tpc-anfrage__steuerung .tpc-btn[hidden] { display: none; }
.tpc-anfrage__zurueck { margin-left: auto; }
.tpc-anfrage__formular[data-tpc-stand] > * { grid-column: 1 / -1; }
.tpc-anfrage__formular[data-tpc-stand="3"] { grid-template-columns: minmax(0, 1fr) auto; column-gap: 0; }
.tpc-anfrage__formular[data-tpc-stand="3"] > .tpc-anfrage__absenden { grid-column: 1; }
.tpc-anfrage__formular[data-tpc-stand="3"] > .tpc-anfrage__steuerung { grid-column: 2; padding-left: var(--space-4); }
@media (max-width: 599px) {
  .tpc-anfrage__formular[data-tpc-stand="3"] { grid-template-columns: minmax(0, 1fr); }
  .tpc-anfrage__formular[data-tpc-stand="3"] > .tpc-anfrage__steuerung { grid-column: 1; padding: 0; border-top: 0; margin-top: calc(-1 * var(--space-4)); }
  .tpc-anfrage__formular[data-tpc-stand="3"] .tpc-anfrage__zurueck { margin-left: 0; }
}
/* cb15-kontakt — Kontaktwege links, Karte rechts (2 : 1, 2-px-Void-Rand). */
.tpc-kontakt__raster {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: start;
}
.tpc-kontakt__text { grid-column: 1 / span 5; }
.tpc-kontakt__name { margin-top: var(--space-6); color: var(--text-strong); font-family: var(--font-display); font-weight: 600; font-size: var(--h3-size); }
.tpc-kontakt__adresse { margin-top: var(--space-2); font-style: normal; color: var(--text-muted); max-width: 30ch; }
.tpc-kontakt__wege { margin: var(--space-6) 0 0; display: grid; gap: var(--space-5); }
.tpc-kontakt__weg dt { font-size: .875rem; color: var(--text-muted); }
.tpc-kontakt__weg dd { margin: 0; }
.tpc-kontakt__link {
  display: inline-flex; align-items: center;
  min-height: var(--tap-min);
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 600;
  font-size: clamp(1.125rem, 1.8vw, 1.5rem);
  text-decoration: underline;
  text-decoration-thickness: var(--linie);
  text-underline-offset: .25em;
  text-decoration-color: var(--link-deko);
  transition: text-decoration-color var(--dur-hover) var(--ease);
  flex-wrap: wrap;
}
.tpc-kontakt__link:hover { text-decoration-color: currentColor; }
.tpc-kontakt__zeiten { margin-top: var(--space-6); padding-top: var(--space-4); border-top: var(--linie) solid var(--border-default); }
.tpc-kontakt__zeiten-titel { font-weight: 500; color: var(--text-strong); }
.tpc-kontakt__zeitliste { margin: var(--space-3) 0 0; display: grid; gap: var(--space-1); }
.tpc-kontakt__zeitliste div { display: grid; grid-template-columns: 7ch 1fr; gap: var(--space-3); }
.tpc-kontakt__zeitliste dt { color: var(--text-muted); }
.tpc-kontakt__zeitliste dd { margin: 0; color: var(--text-strong); }
.tpc-kontakt__hinweis { margin-top: var(--space-3); font-size: .875rem; color: var(--text-muted); }
/* Icons vor Adresse, Kontaktwegen und Öffnungszeiten (Marc Nr. 130, 19.10.2026): Farbicons aus
   dem Set, 32 px, hängend in einer eigenen Spalte links — die Texte fluchten untereinander.
   Das Icon steckt im <dt> bzw. im Titel (gültiges dl), positioniert wird es am Eintrag. */
.tpc-kontakt__text { --tpc-kontakt-icon: 32px; }
.tpc-kontakt__mit-icon {
  position: relative;
  padding-inline-start: calc(var(--tpc-kontakt-icon) + var(--space-4));
}
.tpc-kontakt__icon {
  position: absolute; left: 0; top: -4px;
  width: var(--tpc-kontakt-icon);
  height: var(--tpc-kontakt-icon);
}
.tpc-kontakt__ort { margin-top: var(--space-2); }
.tpc-kontakt__ort .tpc-kontakt__adresse { margin-top: 0; }
.tpc-kontakt__ort .tpc-kontakt__icon { top: -3px; }
.tpc-kontakt__zeiten .tpc-kontakt__icon { top: calc(var(--space-4) - 4px); }
.tpc-kontakt__karte {
  grid-column: 7 / -1;
  margin-inline-end: calc(-1 * var(--bleed));
  aspect-ratio: 2 / 1;
  min-height: 320px;
  border: var(--linie) solid var(--border-strong);
  border-right: 0;
  border-radius: var(--radius-lg) 0 0 var(--radius-lg);
  background: var(--surface-muted);
  overflow: hidden;
}
.tpc-kontakt__vorschau {
  height: 100%;
  display: grid; align-content: center; justify-items: start; gap: var(--space-4);
  padding: var(--space-6) var(--bleed) var(--space-6) var(--space-6);
}
.tpc-kontakt__vorschau-adresse { color: var(--text-strong); font-family: var(--font-display); font-weight: 600; font-size: var(--h3-size); }
.tpc-kontakt__vorschau-hinweis { max-width: 46ch; font-size: .875rem; color: var(--text-muted); }
.tpc-kontakt__rahmen { display: block; width: 100%; height: 100%; border: 0; }
@media (max-width: 899px) {
  .tpc-kontakt__raster { display: block; }
  .tpc-kontakt__karte { margin: var(--space-7) calc(-1 * var(--gutter)) 0 0; aspect-ratio: auto; }
  .tpc-kontakt__vorschau { padding: var(--space-6) var(--gutter) var(--space-6) var(--space-5); }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13): sanfter Ladereveal ohne GSAP-Wartezeit.
   H1 und Kontaktwege gleiten gestaffelt ein, die Karte folgt; alles ab Opazität .01 (die
   Karte ist ein LCP-Kandidat). Magnetik am Knopf „Karte laden“ über data-tpc-max="magnet". */
@media (prefers-reduced-motion: no-preference) {
  :root[data-motion="max"]:not(.no-js) :is(.tpc-kontakt__text > *, .tpc-kontakt__karte) {
    animation: tpc-max-zeile var(--dur-settle) var(--ease) both;
  }
  :root[data-motion="max"]:not(.no-js) .tpc-kontakt__text > :nth-child(2) { animation-delay: 80ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-kontakt__text > :nth-child(3) { animation-delay: 160ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-kontakt__text > :nth-child(4) { animation-delay: 240ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-kontakt__text > :nth-child(5) { animation-delay: 320ms; }
  :root[data-motion="max"]:not(.no-js) .tpc-kontakt__karte { animation-delay: 200ms; }
}
/* cb13-faq — Akkordeon auf der Weltfläche. Zeilen getrennt durch 2-px-Linien,
   Plus dreht beim Öffnen zum Kreuz und wird Lime; Höhe springt nativ (<details>). */
.tpc-faq__raster {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: start;
}
.tpc-faq__titel {
  grid-column: 1 / span 4;
  margin: 0 0 0 calc(var(--gutter) * -.55);
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2.5rem, 4.6vw, 4.5rem);
  line-height: .95;
  letter-spacing: -.03em;
}
.tpc-faq__liste { grid-column: 5 / -1; border-top: var(--linie) solid var(--border-default); }
.tpc-faq__eintrag { border-bottom: var(--linie) solid var(--border-default); }
.tpc-faq__frage {
  list-style: none;
  display: flex; justify-content: space-between; align-items: center; gap: var(--space-5);
  min-height: var(--tap-min);
  padding: var(--space-4) 0;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 1.0625rem;
  line-height: 1.3;
  letter-spacing: -.01em;
  cursor: pointer;
}
.tpc-faq__frage::-webkit-details-marker { display: none; }
.tpc-faq__frage:hover > span:first-child { text-decoration: underline; text-decoration-thickness: var(--linie); text-underline-offset: .25em; text-decoration-color: var(--link-deko); }
.tpc-faq__zeichen {
  position: relative; flex: none;
  width: 32px; height: 32px;
  border-radius: 50%;
  border: var(--linie) solid currentColor;
  transition: transform var(--dur-toggle) var(--ease), background-color var(--dur-toggle) var(--ease), color var(--dur-toggle) var(--ease);
}
.tpc-faq__zeichen::before, .tpc-faq__zeichen::after {
  content: ""; position: absolute; left: 50%; top: 50%;
  width: 12px; height: var(--linie);
  background: currentColor;
  transform: translate(-50%, -50%);
}
.tpc-faq__zeichen::after { transform: translate(-50%, -50%) rotate(90deg); }
.tpc-faq__eintrag[open] .tpc-faq__zeichen {
  transform: rotate(45deg);
  background: var(--accent);
  color: var(--interactive-fg);
  border-color: var(--accent-kante);
}
.tpc-faq__antwort { padding: 0 56px var(--space-5) 0; max-width: 62ch; color: var(--text-muted); }
@keyframes tpc-auf { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: no-preference) {
  .tpc-faq__eintrag[open] .tpc-faq__antwort { animation: tpc-auf var(--dur-toggle) var(--ease) both; }
}
/* Zweispaltig ab 9 Fragen: Titel oben, Fragen spaltenweise; Zeilenzahl setzt das Skript */
.tpc-faq--zweispaltig .tpc-faq__titel { grid-column: 1 / -1; margin-bottom: var(--space-7); font-size: clamp(3rem, 7vw, 6.5rem); }
.tpc-faq--zweispaltig .tpc-faq__liste {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-template-rows: repeat(var(--faq-zeilen, 6), auto);
  grid-auto-flow: column;
  column-gap: calc(var(--raster-gap) * 2);
  align-items: start;
}
@media (max-width: 899px) {
  .tpc-faq__raster { display: block; }
  /* Mobil überall dieselbe Titelgröße wie auf der Startseite (zweispaltig) */
  .tpc-faq__titel { margin-bottom: var(--space-6); margin-left: calc(var(--gutter) * -.5); font-size: clamp(2.5rem, 12vw, 4rem); }
  .tpc-faq--zweispaltig .tpc-faq__titel { font-size: clamp(2.5rem, 12vw, 4rem); }
  .tpc-faq--zweispaltig .tpc-faq__liste { display: block; }
  .tpc-faq__antwort { padding-right: 0; }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13): Die Antwort öffnet über grid-template-rows
   (0fr → 1fr), motion-max.js steuert open und data-tpc-max-offen; das Plus dreht weiter. */
@media (prefers-reduced-motion: no-preference) {
  :root[data-motion="max"]:not(.no-js)[data-tpc-max-bereit] [data-tpc-max~="falten"] .tpc-faq__antwort {
    display: grid;
    grid-template-rows: 0fr;
    padding-bottom: 0;
    transition: grid-template-rows var(--dur-modal) var(--ease);
  }
  :root[data-motion="max"]:not(.no-js)[data-tpc-max-bereit] [data-tpc-max~="falten"] [data-tpc-max-offen] .tpc-faq__antwort { grid-template-rows: 1fr; }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-falte] { min-height: 0; overflow: hidden; }
  :root[data-motion="max"]:not(.no-js) [data-tpc-max-falte] > div { padding-bottom: var(--space-5); }
  :root[data-motion="max"]:not(.no-js) .tpc-faq__zeichen { transition-duration: var(--dur-modal); }
  :root[data-motion="max"]:not(.no-js)[data-tpc-max-bereit] [data-tpc-max~="falten"] [data-tpc-max-offen] .tpc-faq__zeichen { transform: rotate(225deg); }
  :root[data-motion="max"]:not(.no-js)[data-tpc-max-bereit] [data-tpc-max~="falten"] [open]:not([data-tpc-max-offen]) .tpc-faq__zeichen { transform: none; }
}
/* cb14-abschluss — kurzes Band nach dem FAQ. H2 links groß, Aktionen rechts (mobil alles mittig),
   dazwischen der Trail vom Ball im Gutter zum Knopf (statisch, nur Paper). */
.tpc-abschluss { padding-block: var(--section-pad); }
.tpc-abschluss__titel {
  max-width: 14ch;
  margin: 0;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2.5rem, 5.6vw, 5.25rem);
  line-height: .95;
  letter-spacing: -.03em;
}
.tpc-abschluss__lauf {
  position: relative;
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: var(--space-6);
  margin-top: var(--space-7);
}
.tpc-abschluss__ball {
  flex: none;
  position: relative; z-index: 3;
  margin: 16px 0 0 calc(var(--gutter) * -.6);
}
.tpc-abschluss__ziel { position: relative; z-index: 3; display: grid; justify-items: start; gap: var(--space-5); }
.tpc-abschluss__weiter {
  margin-top: var(--space-8);
  padding-top: var(--space-4);
  border-top: var(--linie) solid var(--border-default);
  color: var(--text-muted);
  font-size: var(--caption-size);
}
/* Mobil komplett zentriert: Icon, H2, Ball über dem Knopf, Aktionen volle Breite,
   Vertrauenszeile und Querverweis mittig. */
@media (max-width: 899px) {
  .tpc-abschluss { text-align: center; }
  .tpc-abschluss .tpc-content-icon { margin-inline: auto; }
  .tpc-abschluss__titel { margin-inline: auto; }
  .tpc-abschluss__lauf { flex-direction: column; align-items: center; gap: var(--space-9); }
  .tpc-abschluss__ball { margin: 0; }
  .tpc-abschluss__ziel { justify-items: center; width: 100%; }
  .tpc-abschluss__aktionen { width: 100%; }
  .tpc-abschluss__vertrauen { justify-content: center; }
  .tpc-abschluss__weiter { margin-top: var(--space-7); }
}
/* --- Produktionsmotion „max“ (seit 2026-10-13): Die Punkte zeichnen sich vom Ball zum Knopf,
   ein zweiter Ball rollt hinterher und fällt mit Stauchung ins Loch am Trail-Ende
   (motion-max.js). Bis dahin sind die Punkte verborgen, danach wieder statisch. */
@media (prefers-reduced-motion: no-preference) {
  :root[data-motion="max"]:not(.no-js)[data-tpc-max-bereit] [data-tpc-max~="loch"]:not([data-tpc-max-fertig]) .tpc-trail__punkt { opacity: 0; }
  :root[data-motion="max"]:not(.no-js) .tpc-loch {
    position: absolute; left: 0; top: 0; z-index: 1;
    width: 32px; height: 12px;
    border-radius: 50%;
    background: var(--text-strong);
    box-shadow: inset 0 3px 0 color-mix(in srgb, var(--surface-page) 22%, transparent);
    pointer-events: none;
  }
}
/* cb16-bahnen — Bahn-Porträts im Schlangenlauf: jede Bahn wechselt die Seite, die
   Linie darüber führt wie ein Weg von Eintrag zu Eintrag. Seit 19.10.2026 trägt jede
   Bahn ein Porträt im Ballkreis (1 : 1, ungleich groß) auf der Außenseite: Der Ball liegt
   auf der Linie am Anfang seiner Bahn, die Bälle wechseln mit der Schlange die Seite.
   Der Raster-Bruch sitzt am ersten Ball (vorher am ersten Bahnnamen). */
.tpc-bahnen__kopf {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--raster-gap);
  align-items: end;
}
.tpc-bahnen__kopf .tpc-h2 { grid-column: 1 / span 6; }
/* Ausnahme zu base.css (hyphens: none für h2 ab 900 px): In der halben Spalte ist „zusammenhängende“
   bis 1440 px breiter als die Spalte (gemessen 466 > 393 px bei 900, 725 > 636 px bei 1440),
   deshalb gilt hier die weiche Trennstelle im Titel. Unter 900 px trennt die Basisregel. */
@media (min-width: 900px) {
  .tpc-bahnen__kopf .tpc-h2 { hyphens: manual; }
}
.tpc-bahnen__einleitung { grid-column: 8 / -1; color: var(--text-muted); }
.tpc-bahnen__portraets { margin-top: var(--space-9); }
.tpc-bahnen__portraets-text { margin-top: var(--space-3); color: var(--text-muted); }
.tpc-bahnen__liste { list-style: none; margin-top: var(--space-9); display: grid; gap: var(--space-7); }
.tpc-bahnen__bahn {
  --bahn-ball: 11rem;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  grid-template-rows: auto 1fr;
  column-gap: var(--space-6);
  align-content: start;
  width: min(100%, 46rem);
  padding-top: var(--space-4);
  border-top: var(--linie) solid var(--border-strong);
}
.tpc-bahnen__bahn:nth-child(1) { --bahn-ball: 15rem; }
.tpc-bahnen__bahn:nth-child(2) { --bahn-ball: 11rem; }
.tpc-bahnen__bahn:nth-child(3) { --bahn-ball: 13rem; }
.tpc-bahnen__bahn:nth-child(4) { --bahn-ball: 10rem; }
.tpc-bahnen__bahn:nth-child(even) { justify-self: end; grid-template-columns: minmax(0, 1fr) auto; }
.tpc-bahnen__bahn > :not(.tpc-bahnen__bild) { grid-column: 2; }
.tpc-bahnen__bahn:nth-child(even) > :not(.tpc-bahnen__bild) { grid-column: 1; }
.tpc-bahnen__bild {
  grid-column: 1; grid-row: 1 / span 2;
  width: var(--bahn-ball);
  margin-top: calc((var(--space-4) + var(--bahn-ball) * .3) * -1);
  box-shadow: var(--schatten-ball);
}
.tpc-bahnen__bahn:nth-child(even) .tpc-bahnen__bild { grid-column: 2; }
.tpc-bahnen__bahn:first-child .tpc-bahnen__bild { margin-inline-start: calc(var(--gutter) * -.55); }
.tpc-bahnen__name {
  margin: 0;
  color: var(--text-strong);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(1.75rem, 3vw, 2.5rem);
  line-height: 1;
  letter-spacing: -.02em;
}
.tpc-bahnen__bahn:first-child .tpc-bahnen__name { font-size: var(--h2-size); }
.tpc-bahnen__text { margin-top: var(--space-3); color: var(--text-muted); max-width: 46ch; }
.tpc-bahnen__notizen {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--raster-gap) calc(var(--raster-gap) * 3);
  margin-top: var(--space-9);
}
.tpc-bahnen__notiz { display: grid; gap: var(--space-3); align-content: start; }
.tpc-bahnen__notiz p { color: var(--text-muted); }
@media (max-width: 899px) {
  .tpc-bahnen__kopf { display: block; }
  .tpc-bahnen__einleitung { margin-top: var(--space-5); }
  .tpc-bahnen__liste { gap: var(--space-8); }
  .tpc-bahnen__bahn,
  .tpc-bahnen__bahn:nth-child(even) { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; justify-self: stretch; }
  .tpc-bahnen__bahn > :not(.tpc-bahnen__bild),
  .tpc-bahnen__bahn:nth-child(even) > :not(.tpc-bahnen__bild) { grid-column: 1; }
  .tpc-bahnen__bild,
  .tpc-bahnen__bahn:nth-child(even) .tpc-bahnen__bild { grid-column: 1; grid-row: auto; margin-bottom: var(--space-4); }
  .tpc-bahnen__bahn:nth-child(even) .tpc-bahnen__bild { justify-self: end; }
  .tpc-bahnen__bahn:nth-child(1) { --bahn-ball: 10rem; }
  .tpc-bahnen__bahn:nth-child(2) { --bahn-ball: 7.5rem; }
  .tpc-bahnen__bahn:nth-child(3) { --bahn-ball: 8.5rem; }
  .tpc-bahnen__bahn:nth-child(4) { --bahn-ball: 7rem; }
  .tpc-bahnen__notizen { grid-template-columns: 1fr; gap: var(--space-7); }
}
/* Anfrage-Modal (Theme-Teil, seit 14.10.2026) — jeder Link auf „#anfrage“ öffnet das
   Event-Anfrageformular hier (anfrage-modal.js); ohne Skript bleibt der Anker.
   Desktop: zentrierte Paper-Karte bis 760 px auf dem Void-Schleier, 2-px-Void-Rand und
   Versatzschatten wie das Pop-up, Schließen oben rechts, Inhalt scrollt in der Karte.
   Unter 900 px: Vollbild-Sheet (100dvh) — Schließen in einer Leiste oben, Stationen kleben
   oben, Weiter/Zurück unten. Die Formularkarte (cb12) liegt flach im Rahmen.
   Bewegung nur ohne reduzierte Bewegung: Einblenden mit leichtem Anheben (--dur-modal),
   mobil fährt das Sheet von unten ein (--dur-sheet). */
.tpc-modal {
  width: min(760px, calc(100vw - 2 * var(--gutter)));
  max-width: none;
  max-height: none;
  margin: auto;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--text-body);
  overflow: visible;
}
.tpc-modal::backdrop { background: var(--abdunklung); opacity: 0; }
.tpc-modal.is-offen::backdrop { opacity: 1; }
/* Scrollsperre: Rinne der Scrollleiste bleibt reserviert, sonst springt die Seite seitlich. */
:root[data-tpc-modal] { overflow: hidden; scrollbar-gutter: stable; }
.tpc-modal__rahmen {
  position: relative;
  display: grid;
  grid-template-rows: minmax(0, 1fr);
  max-height: calc(100dvh - 2 * var(--space-7));
  border: var(--linie) solid var(--border-strong);
  border-radius: var(--radius-lg);
  background: var(--surface-card);
  box-shadow: var(--schatten-dialog);
  overflow: hidden;
  opacity: 0;
  transform: translateY(var(--space-4));
}
.tpc-modal.is-offen .tpc-modal__rahmen { opacity: 1; transform: none; }
.tpc-modal__leiste { position: absolute; top: var(--space-3); right: var(--space-3); z-index: 3; }
.tpc-modal__inhalt {
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: var(--space-7);
}
/* Formularkarte im Rahmen: ohne eigene Kante, eigenen Schatten und Raster-Bruch */
.tpc-modal .tpc-anfrage__karte {
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  translate: none;
  overflow: visible;
}
.tpc-modal .tpc-anfrage__kopf { padding-inline-end: calc(var(--tap-min) + var(--space-2)); }
.tpc-modal .tpc-anfrage__titel:focus { outline: none; }
@media (prefers-reduced-motion: no-preference) {
  .tpc-modal::backdrop { transition: opacity var(--dur-modal) var(--ease); }
  .tpc-modal__rahmen { transition: opacity var(--dur-modal) var(--ease), transform var(--dur-modal) var(--ease); }
}
@media (max-width: 899px) {
  .tpc-modal {
    width: 100%;
    height: 100dvh;
    max-height: 100dvh;
    margin: 0;
  }
  .tpc-modal__rahmen {
    height: 100%;
    max-height: none;
    grid-template-rows: auto minmax(0, 1fr);
    border: 0;
    border-radius: 0;
    box-shadow: none;
    opacity: 1;
    transform: translateY(100%);
  }
  .tpc-modal__leiste {
    position: static;
    display: flex; justify-content: flex-end;
    padding: var(--space-2) calc(var(--gutter) - var(--space-3));
    border-bottom: var(--linie) solid var(--border-default);
  }
  /* Polster oben/unten an der Karte, nicht am Scrollbereich: sonst kleben Stationen und
     Steuerung um das Polster eingerückt und der Inhalt scheint darüber/darunter durch. */
  .tpc-modal__inhalt { padding: 0 var(--gutter); }
  .tpc-modal .tpc-anfrage__karte { padding-block: var(--space-6) var(--space-7); }
  .tpc-modal .tpc-anfrage__kopf { padding-inline-end: 0; }
  /* Stationen kleben oben im Scrollbereich, Weiter/Zurück unten (im letzten Schritt steht
     „Anfrage senden“ im Fluss, dort klebt nichts). */
  .tpc-modal .tpc-anfrage__stationen {
    position: sticky; top: 0; z-index: 2;
    margin-block: calc(-1 * var(--space-3));
    padding-block: var(--space-3);
    background: var(--surface-card);
  }
  .tpc-modal .tpc-anfrage__laeufer { top: var(--space-3); }
  .tpc-modal .tpc-anfrage__formular:not([data-tpc-stand="3"]) > .tpc-anfrage__steuerung {
    position: sticky; bottom: 0; z-index: 2;
    padding-bottom: calc(var(--space-4) + env(safe-area-inset-bottom));
    background: var(--surface-card);
  }
}
@media (max-width: 899px) and (prefers-reduced-motion: no-preference) {
  .tpc-modal__rahmen { transition: transform var(--dur-sheet) var(--ease); }
}

/* figure-Panzer (erzeugt): Elementors `… figure { margin: 0 }` (0,4,1) schlägt die Kit-Ränder;
   Kopien nur der margin-Angaben, Kit-Reihenfolge. Klassen auf <figure>: tpc-bahnen__bild, tpc-bildtext__bild, tpc-hero__ball, tpc-hero__form, tpc-hero__foto, tpc-maske, tpc-maske--ball, tpc-maske--blatt-hoch, tpc-maske--blatt-quer */
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] figure { margin: 0; }
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] .tpc-flow > :where(figure) { margin-block: 0; }
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] .tpc-flow > * + :where(figure) { margin-block-start: var(--space-4); }
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] .tpc-rechtstext > h2 + :where(figure) { margin-block-start: var(--space-3); }
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] :where(figure).tpc-maske { margin: 0; }
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] :where(figure).tpc-bildtext__bild { margin-inline-start: calc(-1 * var(--bleed)); }
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] .tpc-bildtext--bild-rechts :where(figure).tpc-bildtext__bild { margin-inline: 0 calc(-1 * var(--bleed)); }
@media (max-width: 899px) {
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] :where(figure).tpc-bildtext__bild { margin: var(--space-7) 0 0 calc(-1 * var(--gutter)); }
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] .tpc-bildtext--bild-rechts :where(figure).tpc-bildtext__bild { margin: var(--space-7) calc(-1 * var(--gutter)) 0 0; }
}
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] :where(figure).tpc-bahnen__bild { margin-top: calc((var(--space-4) + var(--bahn-ball) * .3) * -1); }
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] .tpc-bahnen__bahn:first-child :where(figure).tpc-bahnen__bild { margin-inline-start: calc(var(--gutter) * -.55); }
@media (max-width: 899px) {
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] :where(figure).tpc-bahnen__bild,
.elementor .elementor-element.elementor-widget[data-element_type="widget"][data-widget_type^="tpc_"] .tpc-bahnen__bahn:nth-child(even) :where(figure).tpc-bahnen__bild { margin-bottom: var(--space-4); }
}
