/* ===========================================================
   Daily Marketing — Fundament aller Blöcke
   Design System: High-Impact Minimalist

   Übernommen aus drafts/homepage/styles.css:
     00 · Tokens
     01 · Reset & Grundlagen   (auf .dm-section gescoped, siehe unten)
     02 · Geteilte Bausteine   (.container, .eyebrow, .button, .btn)
     15 · Motion               (auf .dm-section gescoped)

   Neu dazugekommen ist der Utility-Layer am Ende: Abstand, Fläche und
   Inhaltsbreite lassen sich damit pro Blockinstanz im Editor umstellen.

   ⚠️ Warum der Reset gescoped ist: Dieses Stylesheet läuft in einer
   bestehenden WordPress-Installation mit GeneratePress. Ein globales
   `body { font-family: … }` würde das ganze Theme umschreiben. Die
   Grundtypografie hängt deshalb an .dm-section und vererbt von dort nach
   innen — jeder Abschnitts-Block trägt diese Klasse.
   =========================================================== */

/* ===========================================================
   00 · Tokens
   =========================================================== */

:root {
  /* Colors */
  --ink-black: #000001;
  --canvas-white: #ffffff;
  --surface: #f8f9fa;
  --surface-container-low: #f3f4f5;
  --surface-container: #edeeef;
  --surface-container-high: #e7e8e9;
  --on-surface: #191c1d;
  --on-surface-variant: #47464b;
  --inverse-surface: #2e3132;
  --inverse-on-surface: #f0f1f2;
  --outline: #78767b;
  --outline-variant: #c8c5cb;
  --accent-pink: #e71d68;     /* Marken-Akzent: Marker, Play, Hover */
  --accent-pink-ink: #b7004e; /* dunklere Stufe für Text auf Weiß */
  --accent-blue: #5ba1f5;     /* nur Fokus — 3 % */
  --error: #ba1a1a;

  /* Flache Tönungen für die Hero-Flächen */
  --tint-pink: #fadce7;
  --tint-blue: #e2edfd;

  /* Dunkle FAQ-Fläche: Text in reinem Weiß auf ink-black — Kontrast 21:1.
     Deckkraftstufen ausschließlich für Trennlinien. */
  --faq-bg: var(--ink-black);
  --faq-text: var(--canvas-white);
  --faq-text-dim: var(--outline-variant);   /* 12,3:1 auf Schwarz */
  --faq-line: rgba(255, 255, 255, 0.16);
  --faq-line-strong: rgba(255, 255, 255, 0.34);

  /* Typography */
  --font-display: 'Archivo Narrow', 'Arial Narrow', 'Helvetica Neue', Arial, sans-serif;
  --font-body: 'Hanken Grotesk', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;

  /* ===========================================================
     Typoskala — VIER Inhaltsgrößen, mehr gibt es nicht.

     Diese vier Token sind die einzige Stelle, an der eine Textgröße für
     Überschriften und Fließtext festgelegt wird. Kein Block definiert
     `font-size` für Inhalt noch einmal selbst — er greift hier ab.
     Wer eine fünfte Stufe braucht, braucht in Wahrheit eine andere
     Hierarchie, nicht eine weitere Zahl.

       --fs-h1    Der Aufmacher einer Seite. Genau einmal pro Seite:
                  die Hero-Headline.
       --fs-h2    Die Überschrift eines Abschnitts — und nur sie. Pro
                  Abschnitt genau eine.
       --fs-h3    Alles darunter: Karten-, Kachel-, Zeilen-, Frage- und
                  Zwischentitel. Auch die Leitkachel eines Rasters, obwohl
                  sie größer wirken „müsste": auf H2 gesetzt stand sie im
                  Test genauso groß da wie die Abschnittsüberschrift über
                  ihr und hat sie überschrien. Ihren Vorrang holt sie sich
                  aus Fläche, Ziffer und Position, nicht aus dem Grad.
       --fs-body  Jeder Fließtext: Leads, Absätze, Listen, Tabellen-
                  zellen, Beschreibungen. Die Arbeitsgröße.
       h4         hat KEINE eigene Größe — h4 ist --fs-body in 700.
                  Dafür gibt es die Klasse .dm-h4 weiter unten.

     Hierarchie entsteht ab hier über Schnitt, Farbe, Laufweite und
     Weißraum — nicht über weitere Stufen.
     =========================================================== */

  --fs-h1: clamp(44px, 6vw, 92px);    --lh-h1: 1.04;
  --fs-h2: clamp(36px, 4.4vw, 64px);  --lh-h2: 1.08;
  --fs-h3: 26px;                      --lh-h3: 32px;
  --fs-body: 18px;                    --lh-body: 28px;

  /* ===========================================================
     Funktionale Typografie — kein Fließtext, keine Überschrift.

     Diese Größen tragen keine Aussage, sie tragen eine Funktion:
     ein Etikett, eine Schaltfläche, eine Ziffer als Grafik. Sie stehen
     bewusst außerhalb der vier Inhaltsgrößen — ein Eyebrow in 18px wäre
     kein Eyebrow mehr. Trotzdem gilt auch hier: hier definiert, sonst
     nirgends.
     =========================================================== */

  --fs-mono: 12px;     --lh-mono: 16px;   /* Eyebrow, Zähler, Meta, Chips (mono) */
  --fs-label: 14px;    --lh-label: 20px;  /* Schaltflächen, CTA-Zeilen, Etiketten */
  --fs-nav: 16px;      --lh-nav: 24px;    /* Seiten-Chrome: Menü, Formularfelder */
  --fs-arrow: 20px;                       /* frei stehende Pfeil-Glyphe → */

  /* Die großen Ziffern 01/02/03 und Monogramme. Zwei Stufen, weil eine
     Leitkachel ihre Ziffer bewusst größer trägt als die Kacheln daneben —
     dasselbe Element, zwei Ränge. Mehr Stufen gibt es nicht. */
  --fs-numeral: clamp(44px, 4.6vw, 72px);
  --fs-numeral-lg: clamp(56px, 6.5vw, 104px);

  /* ---- Altnamen ---------------------------------------------
     Die frühere Hero-Skala (--fs-*) und die Artikel-Skala (--dm-*) laufen
     als Aliasse weiter, damit nichts außerhalb dieses Plugins bricht
     (Theme-CSS, Patterns, eingefügtes Markup). In neuem Code nicht mehr
     benutzen — sie zeigen nur noch auf die vier Größen oben. */

  --fs-display: var(--fs-h1);
  --fs-mid: var(--fs-h3);
  --fs-small: var(--fs-label);
  --fs-index: var(--fs-mono);

  /* Spacing — 8px Raster */
  --space-1: 8px;
  --space-2: 16px;
  --space-3: 24px;
  --space-4: 32px;
  --space-5: 40px;
  --space-6: 48px;
  --space-8: 64px;
  --space-10: 80px;
  --space-12: 96px;
  --space-16: 128px;


  /* ===========================================================
     Abstandsrhythmus — DREI Fugen im Textfluss.

     --space-* ist das Raster (8px-Schritte, roh). Diese drei Token sagen,
     WELCHER Schritt für WELCHE Beziehung gilt. Ohne sie greift jeder Block
     einen Schritt nach Gefühl ab: dieselbe Beziehung „Überschrift → Text
     darunter" stand im Blocksatz gemessen auf 8px, 16px, 24px und 32px,
     je nachdem, in welchem Block man gerade war.

       --flow-tight   Innerhalb EINER Einheit — Ziffer → Etikett,
                      Begriff → Erklärung, Zeilen einer Anschrift.
       --flow         Der Normalfall: Überschrift → Text, Absatz → Absatz,
                      Text → Liste. Wer nichts Besonderes will, will das.
       --flow-loose   Zwischen zwei Gruppen — Textblock → Kachelraster,
                      Kopf → Inhalt.

     Grösser als --flow-loose ist keine Fuge mehr, sondern Abschnitts-
     polster: dafür gibt es die dm-pt-/dm-pb-Utilities weiter unten.
     =========================================================== */

  --flow-tight: var(--space-1);   /*  8px */
  --flow: var(--space-3);         /* 24px */
  --flow-loose: var(--space-5);   /* 40px */

  /* Shape — scharf, keine Radien */
  --radius: 0;
  --radius-full: 9999px; /* nur für die FAQ-Avatare */

  /* Layout */
  --container-max: 1400px;
  --container-narrow: 1100px;
  --margin-desktop: 64px;
  --margin-mobile: 30px;   /* Seitenrand des .container unter 768px */
  --gutter: 24px;
  --col-gap: 64px;      /* FAQ-Spaltenabstand */
  --cell-padding: 32px; /* Branchen-Raster */
}

/* Erlaubt das Animieren von height:auto im FAQ (Chromium 129+) */
:root { interpolate-size: allow-keywords; }

/* ===========================================================
   01 · Grundlagen — gescoped auf die Blöcke
   =========================================================== */

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

.dm-section {
  color: var(--on-surface);
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.dm-section img { display: block; max-width: 100%; }

.dm-section :focus-visible {
  outline: 2px solid var(--accent-blue);
  outline-offset: 3px;
}

/* Der Editor hängt jeden Block in einen Wrapper. Damit vollbreite
   Abschnitte auch dort Kante an Kante stehen. */
.dm-section > .container { position: relative; }

/* ===========================================================
   02 · Geteilte Bausteine
   =========================================================== */

.dm-section .container {
  width: 100%;
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 var(--margin-desktop);
}

/* ---- Eyebrow — Mono-Label mit pinkem Strich ---------------- */

.dm-section .eyebrow {
  position: relative;
  display: block;
  margin: 0 0 var(--space-3);
  padding-left: var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  font-weight: 500;
  line-height: var(--lh-mono);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--on-surface-variant);
}

.dm-section .eyebrow::before {
  content: "";
  position: absolute;
  left: 0;
  top: 6px;
  width: 14px;
  height: 3px;
  background: var(--accent-pink);
}

/* ---- Button (Hero, Leistungen) ---------------------------- */

.dm-section .button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-1);
  min-height: 56px;
  padding: 0 var(--space-4);
  border: 2px solid var(--ink-black);
  border-radius: 0;
  font-family: var(--font-body);
  font-size: var(--fs-label);
  font-weight: 700;
  line-height: var(--lh-label);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 0.18s ease, border-color 0.18s ease, color 0.18s ease;
}

/* Die Farbe wird auf allen Zuständen festgenagelt. Grund: GeneratePress
   stylt a:hover mit der Spezifität (0,1,1) und schlägt damit eine
   einzelne Klasse. Gilt für jede Button-Familie und jeden Blocklink. */
.dm-section .button-primary,
.dm-section .button-primary:visited {
  background: var(--ink-black);
  color: var(--canvas-white);
}

.dm-section .button-primary:hover,
.dm-section .button-primary:focus,
.dm-section .button-primary:active {
  background: var(--accent-pink-ink);
  border-color: var(--accent-pink-ink);
  color: var(--canvas-white);
}

.dm-section .button-secondary,
.dm-section .button-secondary:visited {
  background: var(--canvas-white);
  color: var(--ink-black);
}

.dm-section .button-secondary:hover,
.dm-section .button-secondary:focus,
.dm-section .button-secondary:active {
  border-color: var(--accent-pink-ink);
  color: var(--accent-pink-ink);
}

/* ---- Pfeil im CTA-Label ------------------------------------ */

.dm-section .btn-arrow { transition: transform 0.18s ease; }

.dm-section .button:hover .btn-arrow,
.dm-section .btn:hover .btn-arrow,
.dm-section .btn-primary:hover .btn-arrow { transform: translateX(4px); }

/* ---- Btn (Zwischen-CTA, Kontaktformular) ------------------- */

.dm-section .btn,
.dm-section .btn:visited {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: 18px var(--space-4);
  background: var(--ink-black);
  border: 2px solid var(--ink-black);
  border-radius: 0;
  color: var(--canvas-white);
  font-family: var(--font-body);
  font-size: var(--fs-label);
  font-weight: 700;
  line-height: var(--lh-label);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color 0.18s ease, border-color 0.18s ease;
}

.dm-section .btn:hover,
.dm-section .btn:focus,
.dm-section .btn:active {
  background: var(--accent-pink);
  border-color: var(--accent-pink);
  color: var(--canvas-white);
}

.dm-section .btn:focus-visible {
  outline: 3px solid var(--accent-blue);
  outline-offset: 3px;
}

/* ---- Outbound-Pfeil als SVG ------------------------------- */

.dm-section .button-arrow {
  width: 18px;
  height: 18px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  transition: transform 0.18s ease;
}

.dm-section .button:hover .button-arrow { transform: translateX(4px); }
.dm-section .button:hover .button-arrow--out { transform: translate(3px, -3px); }

/* ---- Sterne (Kundenstimmen, Proof) ------------------------ */

.dm-section .stars {
  font-size: var(--fs-label);
  line-height: var(--lh-label);
  letter-spacing: 0.12em;
  color: var(--ink-black);
}

/* ===========================================================
   89 · .dm-flow — der Container besitzt den Abstand, nicht das Kind

   Das Grundprinzip dieses Blocksatzes ist „Leer heisst weg": jedes Feld
   ist optional, jedes Element kann fehlen. Abstände, die als margin am
   KIND stehen, halten das nicht aus:

     - fällt das letzte Kind weg, bleibt sein Aussenabstand stehen;
     - fällt ein Kind in der Mitte weg, hängt die Fuge davon ab, welche
       zwei Nachbarn sich zufällig treffen;
     - schreibt irgendeine spätere Regel `margin: 0` (etwa um die
       Browser-Vorgabe einer <ul> loszuwerden), ist die Fuge stumm weg.

   Genau das ist passiert: `.dm-panel-list { margin: 0 }` hat die Fuge
   zwischen Überschrift und Liste gelöscht, und die Schaltfläche unter dem
   Textblock hatte nie eine — beides fiel erst im Frontend auf.

   Der Container kennt dagegen immer alle Kinder, die WIRKLICH da sind.

   Zwei Fassungen, mit Absicht:

     .dm-flow          Owl-Selektor. Ändert das Layout nicht — Kinder
                       bleiben Blockelemente. Zum Nachrüsten in
                       bestehendem Markup.
     display:flex+gap  Für neue Bausteine die bessere Wahl: kein
                       Margin-Collapse, `margin-top: auto` schiebt das
                       letzte Kind nach unten.

   Die Fuge lässt sich pro Container umstellen, ohne eine zweite Regel:
   `--dm-flow` setzen oder einen der Modifier nehmen.
   =========================================================== */

.dm-section .dm-flow > * { margin-top: 0; margin-bottom: 0; }
.dm-section .dm-flow > * + * { margin-top: var(--dm-flow, var(--flow)); }

.dm-section .dm-flow--tight { --dm-flow: var(--flow-tight); }
.dm-section .dm-flow--loose { --dm-flow: var(--flow-loose); }

/* Einzelne Kinder dürfen aus dem Rhythmus ausbrechen — eine Fussnote
   sitzt weiter unten als der nächste Absatz. Am Kind, weil die Ausnahme
   zum Kind gehört, nicht zum Container. */
.dm-section .dm-flow > .dm-flow-gap-loose { margin-top: var(--flow-loose); }

/* ===========================================================
   90 · Utilities — hier hängt die Verstellbarkeit im Editor

   Jeder Abschnitts-Block bringt in seiner eigenen style.css das Polster
   und die Fläche des Entwurfs mit. Die Voreinstellung „auto" schreibt
   deshalb KEINE Klasse — die Seite sieht dann exakt aus wie der Entwurf.

   Wird im Editor ein Wert gewählt, greift eine dieser Klassen. Sie steht
   bei .dm-section.dm-pt-l auf der Spezifität (0,2,0) und schlägt damit
   die Blockregel (.services, .cases … = (0,1,0)) unabhängig von der
   Ladereihenfolge der Stylesheets.

   Die Stufen bilden die Sprünge nach, die der Entwurf in Abschnitt 14
   ohnehin fährt: 1279px und 767px.
   =========================================================== */

.dm-section.dm-pt-none { padding-top: 0; }
.dm-section.dm-pb-none { padding-bottom: 0; }

.dm-section.dm-pt-xs { padding-top: var(--space-4); }
.dm-section.dm-pb-xs { padding-bottom: var(--space-4); }

.dm-section.dm-pt-s { padding-top: var(--space-6); }
.dm-section.dm-pb-s { padding-bottom: var(--space-6); }

.dm-section.dm-pt-m { padding-top: var(--space-8); }
.dm-section.dm-pb-m { padding-bottom: var(--space-8); }

.dm-section.dm-pt-l { padding-top: var(--space-10); }
.dm-section.dm-pb-l { padding-bottom: var(--space-10); }

.dm-section.dm-pt-xl { padding-top: var(--space-16); }
.dm-section.dm-pb-xl { padding-bottom: var(--space-16); }

@media (max-width: 1279px) {
  .dm-section.dm-pt-xl { padding-top: var(--space-10); }
  .dm-section.dm-pb-xl { padding-bottom: var(--space-10); }

  .dm-section.dm-pt-l { padding-top: var(--space-8); }
  .dm-section.dm-pb-l { padding-bottom: var(--space-8); }
}

@media (max-width: 767px) {
  /* Schmales Fenster, schmalerer Rand — an einer Stelle für alle Blöcke,
     weil jeder Abschnitt seinen Inhalt in denselben .container legt. */
  .dm-section .container { padding: 0 var(--margin-mobile); }

  .dm-section.dm-pt-xl { padding-top: var(--space-8); }
  .dm-section.dm-pb-xl { padding-bottom: var(--space-8); }

  .dm-section.dm-pt-l { padding-top: var(--space-6); }
  .dm-section.dm-pb-l { padding-bottom: var(--space-6); }

  .dm-section.dm-pt-m { padding-top: var(--space-6); }
  .dm-section.dm-pb-m { padding-bottom: var(--space-6); }

  .dm-section.dm-pt-s { padding-top: var(--space-4); }
  .dm-section.dm-pb-s { padding-bottom: var(--space-4); }

  .dm-section.dm-pt-xs { padding-top: var(--space-3); }
  .dm-section.dm-pb-xs { padding-bottom: var(--space-3); }
}

/* ---- Flächen ---------------------------------------------- */

.dm-section.dm-bg-none    { background: transparent; }
.dm-section.dm-bg-white   { background: var(--canvas-white); }
.dm-section.dm-bg-surface { background: var(--surface); }

/* Dunkle Fläche: Die Grundtöne kippen mit, damit ein Abschnitt, der im
   Entwurf hell steht, auf Ink lesbar bleibt. Die FAQ bringt ihre eigene
   vollständige Dunkelfassung mit und braucht das hier nicht. */
.dm-section.dm-bg-ink {
  background: var(--ink-black);
  color: var(--inverse-on-surface);
}

.dm-section.dm-bg-ink h1,
.dm-section.dm-bg-ink h2,
.dm-section.dm-bg-ink h3,
.dm-section.dm-bg-ink h4 { color: var(--canvas-white); }

.dm-section.dm-bg-ink .eyebrow { color: var(--outline-variant); }

.dm-section.dm-bg-ink .button-secondary,
.dm-section.dm-bg-ink .button-secondary:visited {
  background: transparent;
  border-color: var(--canvas-white);
  color: var(--canvas-white);
}

.dm-section.dm-bg-pink {
  background: var(--accent-pink);
  color: var(--canvas-white);
}

.dm-section.dm-bg-pink h1,
.dm-section.dm-bg-pink h2,
.dm-section.dm-bg-pink h3,
.dm-section.dm-bg-pink h4 { color: var(--canvas-white); }

.dm-section.dm-bg-pink .eyebrow { color: rgba(255, 255, 255, 0.82); }
.dm-section.dm-bg-pink .eyebrow::before { background: var(--canvas-white); }

/* ---- Inhaltsbreite ---------------------------------------- */

.dm-section.dm-width-narrow > .container { max-width: var(--container-narrow); }
.dm-section.dm-width-full > .container { max-width: none; }

/* ---- Sprungmarke „Zum Inhalt springen" -------------------- */

/* Die Marke liegt in templates/canvas.php, ihr Ziel setzt dm/site-header
   hinter die Kopfzeile. Sichtbar wird sie ausschliesslich bei Tastaturfokus.
   Eigene Regeln, damit sie nicht an .screen-reader-text des Themes haengt:
   Auf einer Canvas-Seite soll die Vorlage ohne Theme-CSS funktionieren. */
.dm-skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 100;
  padding: var(--space-2) var(--space-3);
  background: var(--ink-black);
  color: var(--canvas-white);
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.06em;
  text-decoration: none;
}

.dm-skip-link:focus {
  left: var(--margin-mobile);
  top: var(--margin-mobile);
  outline: 2px solid var(--accent-pink);
  outline-offset: 2px;
}

/* Das Ziel selbst nimmt keinen Platz ein und darf keinen Fokusring zeigen —
   es ist ein Landepunkt, kein Bedienelement. */
.dm-skip-target {
  display: block;
  height: 0;
  overflow: hidden;
}

.dm-skip-target:focus {
  outline: none;
}

/* ---- Hinweis, wenn ein Block leer dasteht (nur im Editor) -- */

.dm-editor-notice {
  margin: 0;
  padding: var(--space-3);
  border: 1px dashed var(--outline);
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--on-surface-variant);
}

/* ===========================================================
   91 · Altnamen der Artikel-Skala + Mobilstufe

   Früher standen hier vier eigene Token für die Textseiten
   (--dm-display/-title/-body/-mono), neben den vier Hero-Token oben.
   Zwei Skalen für dieselbe Sache — daraus sind die neun verschiedenen
   Abschnittsüberschriften entstanden, die es im Blocksatz gab. Beide
   Familien sind jetzt Aliasse auf die eine Skala in §00.
   =========================================================== */

.dm-section {
  --dm-display: var(--fs-h2);
  --dm-title: var(--fs-h3);
  --dm-body: var(--fs-body);
  --dm-lh: var(--lh-body);
  --dm-mono: var(--fs-mono);
}

/* ---- Mobilstufe ------------------------------------------
   Eine Stelle für alle Blöcke. Vorher hat jeder Block seine eigene
   767px-Regel mitgebracht (`.faq-lead { font-size: 16px }`,
   `.statement-text { font-size: 16px }`, …) — dieselbe Zahl, ein Dutzend
   Mal geschrieben. h1 und h2 regeln ihre Clamps selbst; h3 und Fließtext
   brauchen die Stufe, weil sie feste Werte sind. */

@media (max-width: 767px) {
  :root {
    --fs-h1: clamp(34px, 9.5vw, 48px);
    --fs-h2: clamp(30px, 7.5vw, 42px);
    --fs-h3: 22px;      --lh-h3: 28px;
    --fs-body: 16px;    --lh-body: 26px;
    --fs-numeral: clamp(40px, 12vw, 56px);
    --fs-numeral-lg: clamp(48px, 15vw, 72px);
  }
}

/* ===========================================================
   92 · Die vier Größen als Vorgabe und als Klasse

   Zwei Ebenen, mit Absicht unterschiedlich gewichtet:

   1. Die Element-Vorgabe (`.dm-section :where(h2)`) ist ein Netz für
      Überschriften ohne eigene Blockregel — Fließtext aus dem
      Redaktionssystem, Editor-Vorschauen, eingefügtes Markup. Sie wiegt
      (0,1,0) und verliert damit gegen jede Blockregel, die nach diesem
      Stylesheet lädt. Sie überschreibt nichts, sie füllt Lücken.

   2. Die Klassen (`.dm-h2`) wiegen (0,2,0) und sind das Gegenteil: wer
      sie ins Markup schreibt, will diese Größe ausdrücklich.

   .dm-h4 ist der Grund, warum h4 keine eigene Größe braucht: dieselbe
   Größe wie der Fließtext, nur im Fetten. Ein h4, das größer ist als der
   Absatz darunter, ist in Wahrheit ein h3.
   =========================================================== */

.dm-section :where(h1) {
  font-family: var(--font-display);
  font-size: var(--fs-h1);
  font-weight: 700;
  line-height: var(--lh-h1);
  letter-spacing: -0.02em;
}

.dm-section :where(h2) {
  font-family: var(--font-display);
  font-size: var(--fs-h2);
  font-weight: 700;
  line-height: var(--lh-h2);
  letter-spacing: -0.02em;
}

.dm-section :where(h3) {
  font-family: var(--font-display);
  font-size: var(--fs-h3);
  font-weight: 600;
  line-height: var(--lh-h3);
  letter-spacing: -0.01em;
}

.dm-section :where(h4) {
  font-family: var(--font-body);
  font-size: var(--fs-body);
  font-weight: 700;
  line-height: var(--lh-body);
}

.dm-section .dm-h1 {
  font-family: var(--font-display);
  font-size: var(--fs-h1);
  font-weight: 700;
  line-height: var(--lh-h1);
  letter-spacing: -0.02em;
}

.dm-section .dm-h2 {
  font-family: var(--font-display);
  font-size: var(--fs-h2);
  font-weight: 700;
  line-height: var(--lh-h2);
  letter-spacing: -0.02em;
}

.dm-section .dm-h3 {
  font-family: var(--font-display);
  font-size: var(--fs-h3);
  font-weight: 600;
  line-height: var(--lh-h3);
  letter-spacing: -0.01em;
}

.dm-section .dm-h4 {
  font-family: var(--font-body);
  font-size: var(--fs-body);
  font-weight: 700;
  line-height: var(--lh-body);
}

.dm-section .dm-body {
  font-family: var(--font-body);
  font-size: var(--fs-body);
  font-weight: 400;
  line-height: var(--lh-body);
}

/* Sprungziele der Navigation sollen nicht bündig an der Fensterkante
   kleben — 24px Luft, mehr braucht es nicht, weil der Header nicht klebt. */
.dm-section:target,
.dm-section :target { scroll-margin-top: var(--space-3); }

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

/* ===========================================================
   99 · Motion
   =========================================================== */

@media (prefers-reduced-motion: reduce) {
  .dm-section,
  .dm-section *,
  .dm-section *::before,
  .dm-section *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
  }

  .dm-section .service-feature:hover .service-arrow,
  .dm-section .service-tile:hover .service-arrow { transform: none; }

  .dm-section .cell-sector:hover .sector-arrow { transform: none; }

  .dm-section .quote:hover::before { transform: scaleY(1); }

  .dm-section .play:hover { transform: translate(-50%, -50%); }

  .dm-section .carousel-track { scroll-behavior: auto; }
  .dm-section .portrait:hover .portrait-image { transform: none; }

  .dm-section .button:hover .btn-arrow,
  .dm-section .btn:hover .btn-arrow,
  .dm-section .btn-primary:hover .btn-arrow,
  .dm-section .button:hover .button-arrow,
  .dm-section .button:hover .button-arrow--out { transform: none; }

  .dm-section .cases-track { scroll-behavior: auto; }
  .dm-section .cases-btn:hover:not(:disabled) { transform: none; }
  .dm-section .cases-btn--next,
  .dm-section .cases-btn--next::after { animation: none; }
}
