/* ════════════════════════════════════════════════════════════════════════
   PATINA FAHRZEUGHISTORIE — Landingpage
   Design-Tokens + Theme-System 1:1 aus dem App-Repo (app/globals.css):
   Hell ist Standard, Dunkel greift über die Systemeinstellung — außer der
   Nutzer hat in der App manuell gewählt (data-theme="hell" | "dunkel" auf
   <html>, gesetzt vor dem ersten Paint durch das Inline-Skript im <head>).
   Akzent = Verdigris #4a8c7b. Keine neuen Farben, keine neuen Schriften.
═══════════════════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════════════════
   SCHRIFTEN — SELBST GEHOSTET (fonts/, SIL OFL — Lizenzen liegen daneben)
   Keine Google-Server: kein fonts.googleapis.com/fonts.gstatic.com mehr
   (IP-Übertragung an Google, LG München 2022). Variable Fonts, latin-Subset
   (deckt Umlaute, ß, „…", € ab — unicode-range dokumentiert das). Je Familie
   EINE Datei für beide Gewichte (400/500), deklariert wie zuvor von Google.
═══════════════════════════════════════════════════════════════════════════ */
@font-face {
  font-family: "Fraunces";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/fraunces-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: "Fraunces";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/fraunces-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: "Geist";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../fonts/geist-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: "Geist";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(../fonts/geist-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 {
  color-scheme: light;

  /* — Farben hell (App: :root) — */
  --paper: #faf9f6;
  --ink: #1a1a1a;
  --muted: #8b867b;
  --line: #e7e4dc;
  --accent: #4a8c7b;     /* oxidiertes Kupfergrün / Verdigris */
  --danger: #9c3a30;
  --glass: rgba(250, 249, 246, 0.6);
  --glass-line: rgba(26, 26, 26, 0.1);

  /* — Ghost-Button (zentrales System, s. CTA-BUTTON) — */
  --btn-farbe: var(--ink);        /* Rahmen + Text: hell = Tinten-Ton */
  /* Leicht abgedunkeltes Verdigris NUR für die Hover-/Fokus-Füllung:
     Creme #faf9f6 auf #4a8c7b läge bei ~3,7:1 (unter WCAG AA 4,5:1),
     auf #3d7565 bei ~5,1:1. Die Markenfarbe --accent bleibt überall
     sonst unverändert. Themeunabhängig, daher nur hier definiert. */
  --patina-gruen-tief: #3d7565;

  /* — Brevo-Meldungspanels (Erfolg/Fehler), theme-konform — */
  --success: var(--patina-gruen-tief);      /* Text/Rahmen Erfolg (AA auf --paper) */
  --success-bg: rgba(74, 140, 123, 0.08);   /* Grund Erfolg: Verdigris-Hauch */
  --danger-bg: rgba(156, 58, 48, 0.06);     /* Grund Fehler: Hauch aus --danger */

  /* — Scheinwerfer-Glimmen (Hero-Coupé): Ton aus --accent aufgehellt,
     im Dunkeln eine Spur deutlicher. Dunkle Werte an BEIDEN Stellen pflegen. — */
  --glimmen-farbe: #7ab5a4;
  --glimmen-staerke: 0.5;

  /* — Lebende Zeichnung (Hero-Coupé): Basisstrich + Glanz-Überlagerungen.
     Dunkle Werte an BEIDEN Stellen pflegen. — */
  --zeichnung-strich: #4a8c7b;
  --zeichnung-glanz: #3d7565;

  /* — Schriften (App: Geist + Fraunces) — */
  --font-sans: "Geist", system-ui, sans-serif;
  --font-serif: "Fraunces", Georgia, serif;

  /* — Maße — */
  --maxw: 64rem;
  --gutter: clamp(1.5rem, 5vw, 4rem);
  --section-y: clamp(5rem, 12vw, 9rem);
  --track-wide: 0.1em;   /* App: tracking-widest */
  --track-sper: 0.42em;  /* gesperrt für die Wortmarke */
}

/* Dunkle Werte — identisch an beiden Stellen pflegen (wie in der App). */
:root[data-theme="dunkel"] {
  color-scheme: dark;
  --paper: #181716;
  --ink: #ece9e4;
  --muted: #9a958a;
  --line: #2e2c28;
  --accent: #4a8c7b;
  --danger: #e08c82;
  --glass: rgba(24, 23, 22, 0.6);
  --glass-line: rgba(255, 255, 255, 0.12);
  --btn-farbe: var(--accent);               /* Ghost-Button: dunkel = Verdigris */
  --success: #7ab5a4;                       /* aufgehelltes Verdigris (AA), wie --danger dunkel aufhellt */
  --success-bg: rgba(74, 140, 123, 0.12);
  --danger-bg: rgba(224, 140, 130, 0.08);
  --glimmen-farbe: #8fd0bc;
  --glimmen-staerke: 0.75;
  --zeichnung-strich: #85c3af;
  --zeichnung-glanz: #cdf2df;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="hell"]) {
    color-scheme: dark;
    --paper: #181716;
    --ink: #ece9e4;
    --muted: #9a958a;
    --line: #2e2c28;
    --accent: #4a8c7b;
    --danger: #e08c82;
    --glass: rgba(24, 23, 22, 0.6);
    --glass-line: rgba(255, 255, 255, 0.12);
    --btn-farbe: var(--accent);
    --success: #7ab5a4;
    --success-bg: rgba(74, 140, 123, 0.12);
    --danger-bg: rgba(224, 140, 130, 0.08);
    --glimmen-farbe: #8fd0bc;
    --glimmen-staerke: 0.75;
    --zeichnung-strich: #85c3af;
    --zeichnung-glanz: #cdf2df;
  }
}

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

html { scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--font-sans);
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

.visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  clip: rect(0 0 0 0);
  overflow: hidden;
  white-space: nowrap;
}

/* ── Raute / Diamant — wiederkehrendes Motiv ─────────────────────────────── */
.raute {
  display: inline-block;
  width: 6px; height: 6px;
  background: var(--accent);
  transform: rotate(45deg);
  flex: none;
}

/* ════════════════════════════════════════════════════════════════════════
   HERO
═══════════════════════════════════════════════════════════════════════════ */
.hero {
  min-height: 100svh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: clamp(2rem, 5vw, 3.5rem);
  padding: clamp(2.5rem, 6vw, 4rem) var(--gutter) clamp(3rem, 6vw, 4rem);
  text-align: center;
  position: relative;
}

/* — Wortmarke — */
.wortmarke {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 0.85rem;
  color: var(--ink);
  text-decoration: none;
}
.wortmarke__patina {
  width: clamp(11rem, 28vw, 16rem);
  height: auto;
  display: block;
}
.wortmarke__sub {
  font-family: var(--font-sans);
  font-size: clamp(0.62rem, 1.6vw, 0.72rem);
  text-transform: uppercase;
  letter-spacing: var(--track-sper);
  color: var(--muted);
  padding-left: var(--track-sper); /* optischer Ausgleich der Sperrung */
}

/* — Showcase / Coupé — */
.showcase {
  width: 100%;
  max-width: 46rem;
}
.coupe {
  width: 100%;
  height: auto;
  overflow: visible;
}

/* Uhlenhaut-Coupé — filigrane Linienzeichnung. Strichstärken sitzen als
   stroke-width-Attribute im SVG (bewusst OHNE vector-effect: non-scaling-stroke
   — das bräche die dasharray-Animation in Chromium; s. STOLPERFALLE in CLAUDE.md),
   hier nur die Farben aus den Tokens: Basisstriche --zeichnung-strich,
   Schimmer-Überlagerungen (.glanz) --zeichnung-glanz, das Glimmen
   --glimmen-farbe. Es gibt KEINE CSS-Keyframes fürs Coupé mehr: OHNE
   JavaScript und bei reduzierter Bewegung steht hier die vollständige,
   ruhende Zeichnung (nur .glanz/#glimmen sind per opacity-Attribut
   unsichtbar) — die „lebende Zeichnung" dirigiert js/main.js über die
   Web Animations API und verdeckt die Striche erst selbst. */
.coupe path,
.coupe circle { stroke: var(--zeichnung-strich); }
.coupe .glanz { stroke: var(--zeichnung-glanz); }
#glimmen circle {
  fill: var(--glimmen-farbe);
  stroke: none;
}

/* Wird nur noch vom Scroll-Hinweis genutzt. */
@keyframes schweben {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-8px); }
}

/* — Hero-Copy + Formular — */
.hero__copy {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2rem;
  max-width: 34rem;
}
.lede {
  margin: 0;
  font-family: var(--font-serif);
  font-weight: 400;
  font-size: clamp(1.25rem, 3vw, 1.75rem);
  line-height: 1.45;
  color: var(--ink);
}
/* Dezente Subline unter dem Slogan — gleiche ruhige Setzung wie
   .waitlist__text. Die negative Marge rückt sie näher an den Slogan
   heran, als es der Flex-gap (2rem) von .hero__copy täte. */
.lede-sub {
  margin: -1.1rem 0 0;
  max-width: 30rem;
  font-size: 0.95rem;
  line-height: 1.6;
  color: var(--muted);
}

.scroll-hinweis {
  position: absolute;
  bottom: 1.6rem;
  left: 50%;
  transform: translateX(-50%);
  opacity: 0.6;
  animation: schweben 3.5s ease-in-out infinite;
}

/* ════════════════════════════════════════════════════════════════════════
   CTA-BUTTON — zentrales Ghost-System (Hero-CTA + Brevo-ANMELDEN)
   Ruhe: transparente Füllung, Rahmen + Text aus --btn-farbe (hell: Tinten-Ton
   --ink, dunkel: Verdigris --accent). Hover/Fokus: Füllung --patina-gruen-tief
   (AA-Kontrast zu Creme, s. Token-Kommentar oben), Text im hellen Cremeton
   (#faf9f6 = --paper hell, fest in BEIDEN Themes — var(--paper) wäre im
   Dunkel-Theme dunkel). Funktioniert als <button> wie als <a>. Der Brevo-
   Button hängt als Selektor-Gruppe mit dran (HTML bleibt unangetastet).
═══════════════════════════════════════════════════════════════════════════ */
.btn,
.brevo-form .sib-form-block__button {
  display: inline-block;
  background: transparent;
  color: var(--btn-farbe);
  border: 1px solid var(--btn-farbe);
  font: inherit;
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: var(--track-wide);
  text-decoration: none;
  text-align: center;
  padding: 0.85rem 1.6rem;
  cursor: pointer;
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.btn:hover,
.btn:focus-visible,
.brevo-form .sib-form-block__button:hover,
.brevo-form .sib-form-block__button:focus-visible {
  background: var(--patina-gruen-tief);
  border-color: var(--patina-gruen-tief);
  color: #faf9f6;
}
.btn:focus-visible,
.brevo-form .sib-form-block__button:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.btn:disabled,
.brevo-form .sib-form-block__button:disabled { opacity: 0.5; cursor: default; }

/* ════════════════════════════════════════════════════════════════════════
   WARTELISTE — Brevo-Formular (Double-Opt-In), nativ in Patina-Optik
═══════════════════════════════════════════════════════════════════════════ */
.waitlist {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.25rem;
  width: 100%;
}
.waitlist__titel {
  margin: 0;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.5rem, 4vw, 2rem);
  line-height: 1.2;
  color: var(--ink);
}
.waitlist__text {
  margin: 0;
  max-width: 34rem;
  color: var(--muted);
  font-size: 0.98rem;
  line-height: 1.6;
}
.waitlist__hinweis {
  margin: 0;
  max-width: 30rem;
  font-size: 0.8rem;
  color: var(--muted);
}

/* Brevo-Formular nativ im Patina-Look. Die funktionale sib-*-Struktur bleibt
   unangetastet; hier werden nur Farben/Layout überschrieben (Brevo-Inline-
   Farbstyles wurden im HTML entfernt). Keine helle Fremdkarte, schmal & zentriert. */
.brevo-form {
  width: 100%;
  max-width: 28rem;        /* ~448px — im Zielkorridor 420–480 */
  margin-inline: auto;
  background: transparent;
}
.brevo-form .sib-form-container,
.brevo-form #sib-container {
  max-width: 100%;
  padding: 0;
  background: transparent;
  border: 0;
  border-radius: 0;
}
.brevo-form #sib-form {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding: 0;
}
.brevo-form .sib-form-block,
.brevo-form .form__entry,
.brevo-form .entry_block,
.brevo-form .form__label-row {
  margin: 0;
  padding: 0;
}

/* Honeypot bleibt unsichtbar (sib-styles.css wird nicht geladen). */
.brevo-form .input--hidden { display: none !important; }

/* Erfolg-/Fehlerpanel: bis zum Versand verborgen; Brevo-Skript blendet es per
   Inline-Style ein (daher :where mit Null-Spezifität, damit Inline gewinnt). */
:where(.sib-form-message-panel) { display: none; }
/* Theme-konforme Panel-Optik aus den Tokens (--success/--success-bg bzw.
   --danger/--danger-bg). !important nur, wo die im HTML verbliebenen
   Brevo-Inline-Farbstyles sonst gewinnen würden — das HTML selbst bleibt
   unangetastet (funktionale sib-*-Struktur). */
.brevo-form .sib-form-message-panel {
  width: 100%;
  max-width: 100% !important;
  margin-bottom: 1rem;
  padding: 0.8rem 0.95rem;
  border: 1px solid;
  border-radius: 2px !important;
  font-family: var(--font-sans) !important;
  font-size: 0.9rem !important;
  line-height: 1.5;
}
.brevo-form #error-message {
  color: var(--danger) !important;
  background-color: var(--danger-bg) !important;
  border-color: var(--danger) !important;
}
.brevo-form #success-message {
  color: var(--success) !important;
  background-color: var(--success-bg) !important;
  border-color: var(--success) !important;
}
.brevo-form .sib-form-message-panel__text {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.55rem;
  text-align: left;
}
.brevo-form .sib-notification__icon {
  width: 20px;
  height: 20px;
  flex: none;
  fill: currentColor;   /* Icons folgen der Panel-Textfarbe (Tokens) */
}

/* E-Mail-Feld: ruhig, transparent, mit Patina-Linie. */
.brevo-form .input {
  width: 100%;
  box-sizing: border-box;
  background: transparent;
  border: 1px solid var(--line);
  border-radius: 2px;
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: 1rem;
  text-align: left;
  padding: 0.8rem 0.95rem;
  outline: none;
  transition: border-color 0.2s ease;
}
.brevo-form .input::placeholder { color: var(--muted); font-family: var(--font-sans); }
.brevo-form .input:focus { border-color: var(--accent); }

/* Einwilligungs-Microcopy: klein, zurückhaltend. */
.brevo-form .entry__specification {
  display: block;
  margin-top: 0.55rem;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.5;
  color: var(--muted);
  text-align: left;
}
/* Inline-Validierungsfehler unter dem Feld. */
.brevo-form .entry__error {
  display: block;
  margin-top: 0.4rem;
  font-family: var(--font-sans);
  font-size: 0.8rem;
  color: var(--danger);
  background: transparent;
}

/* Button: nur Layout-Feinheiten — Farben/Zustände kommen aus dem zentralen
   Ghost-System (Abschnitt CTA-BUTTON, Selektor-Gruppe mit .btn). */
.brevo-form .sib-form-block__button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  border-radius: 2px;
  font-family: var(--font-sans);
  font-weight: 500;
}
/* Brevo-Loader-Icon im Button ausblenden (ohne sib-styles.css ungenutzt). */
.brevo-form .sib-form-block__button svg { display: none; }

/* „Zur App" — dezente Textnavigation oben rechts (statt Garage-Symbol).
   Gleiche gesperrte Kleinschrift wie die Wortmarken-Subline (.wortmarke__sub). */
.zur-app {
  display: inline-block;
  font-size: clamp(0.62rem, 1.6vw, 0.72rem);
  text-transform: uppercase;
  letter-spacing: var(--track-sper);
  color: var(--muted);
  text-decoration: none;
  transition: color 0.2s ease;
  /* ~40px Trefferfläche ohne optischen Versatz; rechts gleicht die negative
     Marge zusätzlich den Sperrungs-Nachlauf hinter dem letzten Zeichen aus. */
  padding: 0.75rem;
  margin: -0.75rem;
  margin-right: calc(-0.75rem - var(--track-sper));
}
.zur-app:hover,
.zur-app:focus-visible { color: var(--accent); }
.zur-app:focus-visible {
  outline: 1px solid var(--accent);
  outline-offset: 2px;
}

/* Ecke oben rechts der Startseiten: Sprachwahl + „Zur App" nebeneinander.
   (Ersetzt das frühere .zur-app--ecke, das nur die Startseite nutzte.) */
.ecken-nav {
  position: absolute;
  top: var(--gutter);
  right: var(--gutter);
  display: flex;
  align-items: center;
  gap: 1.6rem;
}

/* Sprachwahl „DE / EN" — gleiche gesperrte Kleinschrift wie .zur-app.
   Aktive Sprache in --ink (kein Link), inaktive als Link in --muted mit
   demselben Hover wie der App-Link. Nur auf den Startseiten (DE + EN),
   die Rechtsseiten bleiben ohne Umschalter. */
.sprachwahl {
  font-size: clamp(0.62rem, 1.6vw, 0.72rem);
  text-transform: uppercase;
  letter-spacing: var(--track-sper);
  color: var(--muted);
  white-space: nowrap;
}
.sprachwahl__aktiv { color: var(--ink); }
.sprachwahl__link {
  display: inline-block;
  color: var(--muted);
  text-decoration: none;
  transition: color 0.2s ease;
  /* ~40px Trefferfläche ohne optischen Versatz (Muster wie .zur-app) */
  padding: 0.75rem;
  margin: -0.75rem;
}
.sprachwahl__link:hover,
.sprachwahl__link:focus-visible { color: var(--accent); }
.sprachwahl__link:focus-visible {
  outline: 1px solid var(--accent);
  outline-offset: 2px;
}

/* ════════════════════════════════════════════════════════════════════════
   ABSCHNITTE
═══════════════════════════════════════════════════════════════════════════ */
.abschnitt {
  max-width: var(--maxw);
  margin-inline: auto;
  padding: var(--section-y) var(--gutter);
  border-top: 1px solid var(--line);
}

.eyebrow {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  margin: 0 0 1.8rem;
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.22em;
  color: var(--muted);
}

.abschnitt__text {
  margin: 0;
  max-width: 40rem;
  font-family: var(--font-serif);
  font-weight: 400;
  font-size: clamp(1.3rem, 3.4vw, 2rem);
  line-height: 1.45;
  color: var(--ink);
}

/* — Lösung: drei Bausteine — */
.bausteine {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  gap: clamp(2rem, 5vw, 3.5rem);
}
.baustein__titel {
  margin: 0 0 0.6rem;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.4rem;
  color: var(--ink);
}
.baustein__text {
  margin: 0;
  color: var(--muted);
  font-size: 0.98rem;
}

/* Karten-Icons — Linienzeichnung im Duktus des Coupés: keine Füllungen,
   gleiche optische Strichstärke (non-scaling-stroke), currentColor = --muted.
   Höchstens EIN Detail in --accent (der mittlere Zeitachsen-Knoten). */
.baustein__icon {
  display: block;
  width: 30px;
  height: 30px;
  margin-bottom: 1rem;
  color: var(--muted);
  overflow: visible;
}
.baustein__icon path,
.baustein__icon circle {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
  vector-effect: non-scaling-stroke;
}
.baustein__icon .akzent { stroke: var(--accent); }

/* Screenshot-Rahmen — vorerst nicht genutzt; aktiv schalten, sobald die
   echten App-Screenshots da sind (figure.screenshot wieder in index.html
   einsetzen und diesen Block einkommentieren). Dann auch margin-bottom an
   .baustein__text wieder ergänzen. */
/*
.screenshot {
  margin: 1.6rem 0 0;
  aspect-ratio: 4 / 5;
  border: 1px solid var(--line);
  background:
    repeating-linear-gradient(
      45deg,
      transparent 0 11px,
      rgba(74, 140, 123, 0.05) 11px 12px
    );
  display: grid;
  place-items: center;
  position: relative;
}
.screenshot::before,
.screenshot::after {
  content: "";
  position: absolute;
  width: 8px; height: 8px;
  border: 1px solid var(--accent);
  transform: rotate(45deg);
  opacity: 0.7;
}
.screenshot::before { top: 0.7rem; left: 0.7rem; }
.screenshot::after { bottom: 0.7rem; right: 0.7rem; }
.screenshot__label {
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--muted);
}
*/

/* — Abschluss — */
.abschluss {
  position: relative;  /* Anker für den Endknoten der Zeitlinie */
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2.5rem;
}
.claim {
  margin: 0;
  max-width: 32rem;
  font-family: var(--font-serif);
  font-size: clamp(1.6rem, 4.5vw, 2.6rem);
  line-height: 1.3;
  color: var(--ink);
}

/* ════════════════════════════════════════════════════════════════════════
   ZEITLINIE — die Landing als stille Timeline (Vorschau aufs Herzstück).
   1px-Linie vom Hero-Ende bis zum Wartelisten-Abschnitt; die ◆ der
   Abschnittsetiketten liegen als Stationen darauf. Nur mit aktivem JS
   (html.js aus dem Head-Inline-Skript): js/main.js setzt die Höhe (bis zum
   Endknoten) und koppelt Fortschritt + Marker an den Scroll — Fortschritt
   als transform: scaleY (keine Layout-Animation pro Frame). Ohne JS gibt es
   keine Linie, und die ◆ bleiben an ihrem Platz in der Etikettzeile.
═══════════════════════════════════════════════════════════════════════════ */
main { position: relative; }

.zeitlinie,
.zeitlinie-ende { display: none; }

html.js .zeitlinie {
  display: block;
  position: absolute;
  top: 0;
  /* Mittig im linken Teil des Spalten-Innenabstands: exakt durch die (per
     translateX verschobenen) ◆-Marker, links neben allem Text — auch auf
     375px (halber Gutter = 12px vom Rand, Text beginnt erst bei 24px). */
  left: calc(max((100% - var(--maxw)) / 2, 0px) + var(--gutter) / 2);
  width: 1px;
  height: 0;                     /* Maß setzt js/main.js */
  background: var(--line);
}
/* Durchlaufener Teil: gedämpfter Akzent. --accent ist in beiden Themes
   identisch — deshalb hier bewusst KEINE dunkle Doppelpflege nötig. */
.zeitlinie__fortschritt {
  position: absolute;
  inset: 0;
  background: var(--accent);
  opacity: 0.55;
  transform: scaleY(0);
  transform-origin: top;
  will-change: transform;
}

/* ◆-Stationen: nur mit JS auf die Linie gerückt (halber Innenabstand nach
   links) und bis zur Aktivierung hohl. Erreicht sie der Fortschritt, füllen
   sie sich einmalig in --accent (weiches Aufglimmen, ~300ms) und bleiben. */
html.js main .eyebrow .raute,
html.js .zeitlinie-ende {
  background: transparent;
  border: 1px solid var(--muted);
  transition: background-color 0.3s ease, border-color 0.3s ease;
}
html.js main .eyebrow .raute {
  transform: translateX(calc(var(--gutter) / -2 - 2.5px)) rotate(45deg);
}
html.js main .eyebrow .raute.aktiv,
html.js .zeitlinie-ende.aktiv {
  background: var(--accent);
  border-color: var(--accent);
  animation: marker-glimmen 0.3s ease-out;
}
/* Weicher, auslaufender Lichtring (fixes Verdigris-rgba: --accent ist in
   beiden Themes gleich). */
@keyframes marker-glimmen {
  from { box-shadow: 0 0 0 0 rgba(74, 140, 123, 0.4); }
  to   { box-shadow: 0 0 0 5px rgba(74, 140, 123, 0); }
}

/* Letzter ruhender Knoten am Wartelisten-Abschnitt (Ende der Linie),
   auf Höhe der ersten Claim-Zeile. */
html.js .zeitlinie-ende {
  display: block;
  position: absolute;
  left: calc(var(--gutter) / 2 - 2.5px);
  top: calc(var(--section-y) + 0.65rem);
}

/* ════════════════════════════════════════════════════════════════════════
   ABSCHNITTS-EINBLENDUNGEN — einmalig beim ersten Ins-Bild-Kommen.
   Der Ausblend-Startzustand hängt an html.js (Inline-Skript im <head>):
   ohne JavaScript ist die Seite vollständig sichtbar und lesbar. Im
   Lösungs-Abschnitt blenden Etikett + Karten einzeln (Karten je +80ms
   versetzt), sonst der Abschnitt als Ganzes — eine Bewegung pro Abschnitt.
═══════════════════════════════════════════════════════════════════════════ */
html.js .abschnitt:not(.loesung),
html.js .loesung .eyebrow,
html.js .baustein {
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 0.45s ease-out, transform 0.45s ease-out;
}
html.js .abschnitt.sichtbar:not(.loesung),
html.js .loesung.sichtbar .eyebrow,
html.js .loesung.sichtbar .baustein {
  opacity: 1;
  transform: none;
}
html.js .loesung.sichtbar .baustein:nth-child(2) { transition-delay: 80ms; }
html.js .loesung.sichtbar .baustein:nth-child(3) { transition-delay: 160ms; }

/* ════════════════════════════════════════════════════════════════════════
   FUSSZEILE
═══════════════════════════════════════════════════════════════════════════ */
.fuss {
  max-width: var(--maxw);
  margin-inline: auto;
  padding: 2.5rem var(--gutter) calc(2.5rem + env(safe-area-inset-bottom));
  border-top: 1px solid var(--line);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  font-size: 0.8rem;
  color: var(--muted);
}
.fuss__marke { letter-spacing: 0.02em; }
.fuss__nav {
  display: flex;
  align-items: center;
  gap: 1rem;
}
.fuss__nav a {
  color: var(--muted);
  text-decoration: none;
  text-underline-offset: 4px;
}
.fuss__nav a:hover { color: var(--ink); text-decoration: underline; }

/* ════════════════════════════════════════════════════════════════════════
   UNTERSEITEN (Impressum / Datenschutz)
   Kompakter Kopf statt Vollbild-Hero, ruhiger Lesebereich.
═══════════════════════════════════════════════════════════════════════════ */
.seiten-kopf {
  max-width: var(--maxw);
  margin-inline: auto;
  padding: clamp(1.5rem, 4vw, 2.5rem) var(--gutter);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  border-bottom: 1px solid var(--line);
}

/* Wortmarke im Kopf: kleiner, linksbündig */
.wortmarke--klein {
  align-items: flex-start;
  gap: 0.45rem;
}
.wortmarke--klein .wortmarke__patina { width: clamp(7rem, 18vw, 8.5rem); }
.wortmarke--klein .wortmarke__sub { font-size: 0.58rem; }

/* Lesebereich */
.inhalt {
  max-width: 44rem;
  margin-inline: auto;
  padding: clamp(3rem, 8vw, 5rem) var(--gutter) clamp(4rem, 10vw, 6rem);
}
.inhalt h1 {
  margin: 0 0 2.5rem;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2rem, 5vw, 2.8rem);
  line-height: 1.15;
  color: var(--ink);
}
.inhalt h2 {
  margin: 2.75rem 0 0.7rem;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.35rem;
  color: var(--ink);
}
.inhalt p {
  margin: 0 0 1rem;
  color: var(--ink);
}
.inhalt a { color: var(--accent); text-underline-offset: 3px; }
.inhalt ul {
  margin: 0 0 1rem;
  padding-left: 1.1rem;
  color: var(--ink);
}
.inhalt li { margin-bottom: 0.4rem; }
/* Anschrift-/Kontaktblöcke: ruhig gesetzt, kein Listenstil */
.inhalt address {
  font-style: normal;
  color: var(--ink);
  margin: 0 0 1rem;
}
/* Platzhalter optisch dezent abheben, ohne Inhalt zu verändern */
.platzhalter { color: var(--muted); }

/* ── Datenschutz-Rechtstext (langes Dokument) ────────────────────────────
   Engeres Lesemaß ~72ch (wie die App-Route /datenschutz) und die zusätzlichen
   Element-/Klassen-Stile des abgestimmten Fragments (h3, Inhaltsübersicht,
   Attribution). Scoped über .rechtstext, damit das kurze Impressum unberührt
   bleibt. Reihenfolge nach .inhalt → gleiche Spezifität, engeres max-width gewinnt. */
.rechtstext { max-width: 72ch; }
.rechtstext h2,
.rechtstext h3 { scroll-margin-top: 1.5rem; }
.rechtstext h3 {
  margin: 1.75rem 0 0.4rem;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 1rem;
  color: var(--ink);
}
/* Inhaltsübersicht: schlichte Ankerliste ohne Aufzählungszeichen */
.rechtstext ul.index { list-style: none; padding-left: 0; }
.rechtstext .index-link { text-decoration: none; }
.rechtstext .index-link:hover { text-decoration: underline; }
/* Attribution (Dr. Schwenke) — dezent abgesetzt, Link bleibt Patina-Grün */
.rechtstext .seal {
  margin-top: 3rem;
  padding-top: 1.25rem;
  border-top: 1px solid var(--line);
  font-size: 0.8rem;
  color: var(--muted);
}

/* ════════════════════════════════════════════════════════════════════════
   REDUZIERTE BEWEGUNG — zeigt die ENDZUSTÄNDE, statt alles abzuschalten:
   Auto fertig gezeichnet, Zeitlinie vollständig und statisch, alle ◆ aktiv,
   Abschnitte sofort sichtbar. Kein Glimmen, keine Scroll-Kopplung, keine
   Einblendungen. (js/main.js prüft dieselbe Media Query und lässt die
   Scroll-/Beobachter-Logik weg; die !important gewinnen zusätzlich gegen
   die Inline-Styles aus dem Skript.)
═══════════════════════════════════════════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  /* Coupé: bewusst KEINE Regel nötig — die ruhende, vollständige Zeichnung
     ist der Grundzustand, der WAAPI-Dirigent (js/main.js) startet bei
     reduzierter Bewegung gar nicht erst. */
  .scroll-hinweis { animation: none; }
  html.js .zeitlinie__fortschritt { transform: none !important; }  /* Linie voll */
  html.js main .eyebrow .raute,
  html.js .zeitlinie-ende {
    background: var(--accent);
    border-color: var(--accent);
    animation: none;
  }
  html.js .abschnitt,
  html.js .loesung .eyebrow,
  html.js .baustein {
    opacity: 1 !important;
    transform: translateY(0) !important;
    transition: none !important;
  }
}
