/* ==========================================================================
   Mantel Insights — Basis-Styles
   --------------------------------------------------------------------------
   Wird zweimal geladen:
     Frontend  -> wp_enqueue_style() in functions.php, Cache-Busting via filemtime()
     Editor    -> add_editor_style() in functions.php

   WordPress schreibt beim Laden in den Editor jeden `:root`- und `body`-Selektor
   auf `.editor-styles-wrapper` um. Deshalb hier bewusst `:root` verwenden und
   NICHT von Hand auf `.editor-styles-wrapper` scopen — das wuerde doppelt greifen.

   REGEL: Kein Hex-Wert in dieser Datei. Farben, Abstaende und Breiten kommen
   ausschliesslich aus den Presets der theme.json. Eine Quelle, zwei Leser.
   Ein `--foreground: #000` gegen ein `#001D2D` in der theme.json faellt erst
   dort auf, wo mit Alpha gearbeitet wird — und dann ueberall gleichzeitig.
   ========================================================================== */


/* ==========================================================================
   1 — Preflight, ausschliesslich der strukturelle Teil
   --------------------------------------------------------------------------
   Die typografische Meinung (h1-h6 { font-size: inherit }, a { color: inherit },
   ul { list-style: none }) gehoert hier NICHT hin. Global gesetzt zerlegt sie
   jeden redaktionellen Fliesstext, und `revert` holt das nicht zurueck:
   es springt auf die vorherige Cascade-Origin, und theme.json ist selbst
   Author-Origin. Wer so einen Reset braucht, scopet ihn auf die Komponente.
   ========================================================================== */

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

img,
picture,
video,
canvas {
  max-width: 100%;
  height: auto;
}

/* Nur dekorative Icons blocken. Ein globales svg { display: block } wuerde
   Inline-Icons im Fliesstext aus der Zeile heben. */
.mi-icon {
  display: block;
  flex: none;
}


/* ==========================================================================
   2 — Token-Aliasse
   --------------------------------------------------------------------------
   Reine Verweise, keine Werte. Kuerzt `var(--wp--preset--color--sage-deep)`
   auf `var(--mi-sage-deep)` und haelt trotzdem die theme.json als Quelle.
   ========================================================================== */

:root {
  --mi-blue-deep:  var(--wp--preset--color--blue-deep);
  --mi-blue:       var(--wp--preset--color--blue);
  --mi-blue-light: var(--wp--preset--color--blue-light);
  --mi-blue-pale:  var(--wp--preset--color--blue-pale);
  --mi-sage:       var(--wp--preset--color--sage);
  --mi-sage-deep:  var(--wp--preset--color--sage-deep);
  --mi-sage-pale:  var(--wp--preset--color--sage-pale);
  --mi-ink:        var(--wp--preset--color--gray-900);
  --mi-muted:      var(--wp--preset--color--gray-600);
  --mi-line:       var(--wp--preset--color--gray-300);
  --mi-surface:    var(--wp--preset--color--gray-100);
  --mi-white:      var(--wp--preset--color--white);
  --mi-amber:      var(--wp--preset--color--amber);

  --mi-font-sans:  var(--wp--preset--font-family--sans);
  --mi-font-serif: var(--wp--preset--font-family--serif);
  --mi-font-mono:  var(--wp--preset--font-family--mono);

  /* Breiten kommen aus settings.layout der theme.json, nicht von hier. */
  --mi-content: var(--wp--style--global--content-size);
  --mi-wide:    var(--wp--style--global--wide-size);

  --mi-radius: 5px;          /* am Demo gemessen: calc(--radius - 1px) nach shadcn-Konvention */
  --mi-radius-sm: 3px;
  --mi-border: 1px solid var(--mi-line);
  --mi-sticky-top: 6rem;     /* Abstand unter dem Sticky-Header */
  --mi-ease: cubic-bezier(0.4, 0, 0.2, 1);

  /* Fokusring: kein Alias. Siehe DOKU F-31.

     Ein `--mi-focus: var(--wp--custom--mi-focus)` an dieser Stelle waere
     eine Falle: Der Wert wird auf `:root` **einmal** eingesetzt und danach
     als fertige Farbe vererbt. Eine dunkle Sektion, die
     `--wp--custom--mi-focus` neu setzt, erreicht ihn nicht mehr.
     Die Regel unten liest deshalb direkt den Token. */
}


/* ==========================================================================
   3 — Basis
   ========================================================================== */

body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-optical-sizing: auto;   /* DM Sans ist variabel, Achse opsz 9-40 */
}

/* Umbruchqualitaet, keine typografische Meinung — aendert keine Groessen,
   keine Farben, keine Listenpunkte. Darf deshalb global stehen. */
h1, h2, h3, h4 {
  text-wrap: balance;
}

p, li {
  text-wrap: pretty;
}

::selection {
  background: var(--mi-sage-pale);
  color: var(--mi-ink);
}

/* Sichtbarer Fokus ueberall, auch wo theme.json keine Elements-Definition hat.

   Gemessen: sage auf weiss 2.28:1 (unter den 3:1 aus WCAG 2.2 SC 1.4.11),
   sage-deep auf weiss 4.59:1, sage auf blue-deep 6.05:1. Deshalb sage-deep
   als Standard und sage in dunklen Sektionen — den Wechsel macht der
   Sektionsstil, indem er `--wp--custom--mi-focus` neu setzt. Der Token wird
   hier direkt gelesen, damit er je Element aufgeloest wird (F-31). */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 2px solid var(--wp--custom--mi-focus);
  outline-offset: 2px;
  border-radius: var(--mi-radius-sm);
}

/* Keine eigene Sprungmarke. WordPress setzt bei Block-Themes ueber
   wp_enqueue_block_template_skip_link() selbst eine samt Ziel und
   Inline-Styling. Eine zweite waere ein doppelter erster Tabstopp —
   fuer Tastaturnutzung schlechter als keine. */


/* ==========================================================================
   4 — Flow-Reset
   --------------------------------------------------------------------------
   Eine core/group traegt `is-layout-flow`, auch wenn sie per CSS auf flex oder
   grid steht. Die Core-Regel `:where(.is-layout-flow) > * + *` setzt dann ab
   dem zweiten Kind `margin-block-start: 24px`. In einer Flex-Reihe ist der
   Abstand sinnlos und schiebt eine Spalte nach unten.

   Jede Gruppe, die per CSS auf flex/grid gestellt wird, bekommt zusaetzlich
   `mi-flow-reset`. Die laufende Liste dieser Gruppen steht in DOKU.md.
   ========================================================================== */

.mi-flow-reset > * {
  margin-block: 0;
}


/* ==========================================================================
   5 — Sticky
   --------------------------------------------------------------------------
   Ein sticky-Element bewegt sich nur innerhalb seines Elternelements. Steht auf
   dem Flex-Container `align-items: flex-start`, ist die Spalte genau so hoch
   wie ihr Inhalt — es gibt keine Strecke zum Kleben. Der uebliche Verdacht
   (`overflow` auf einem Vorfahren) ist es meistens nicht.

   Deshalb zwei Klassen: die Spalte wird gestreckt, das Element klebt.
   ========================================================================== */

.mi-sticky-col {
  align-self: stretch;
}

.mi-sticky {
  position: sticky;
  top: var(--mi-sticky-top);
}


/* ==========================================================================
   6 — Sektionen
   ========================================================================== */

.mi-section {
  padding-block: var(--wp--preset--spacing--70);
}

.mi-section--tight {
  padding-block: var(--wp--preset--spacing--50);
}

/* Die Farbgebung der Sektionen steht nicht mehr hier.

   „Dunkle Sektion" und „Salbei-Flaeche" sind seit Schritt 8 Section Styles:
   `styles/mi-section-dark.json` und `styles/mi-section-soft.json`. Sie
   faerben Hintergrund, Text, Ueberschriften, h6, Links und Separator ueber
   die theme.json und setzen die `--wp--custom--mi-*`-Tokens, an denen
   Buttons, Fokusring, Eyebrow, Akzentzeile und Lead haengen.

   Was hier steht, ist Geometrie — und die Flaeche, fuer die es keinen
   Sektionsstil gibt (`--surface`). Siehe DOKU E-11. */

/* Die helle Flaeche ist seit Schritt 9 ein Sektionsstil
   (`styles/mi-section-surface.json`). Hier steht dazu nichts mehr. */


/* ==========================================================================
   7 — Wiederkehrende Textbausteine
   ========================================================================== */

/* Eyebrow: "OT/ICS Security · ISO 27001 · Strategischer Coach"
   sage-deep (#5E7C6C) traegt auf Weiss 4.59:1 und damit die 4.5 fuer
   normalen Text. Auf den getoenten Flaechen reicht es nicht mehr:
   4.03 auf sage-pale, 4.27 auf gray-100. Dort uebernimmt gray-600
   (5.16 bzw. 5.46). Siehe DOKU E-12.

   Den Wechsel machen die Sektionsstile ueber `--wp--custom--mi-eyebrow-ink`.
   Hier steht nur der Verbraucher, nicht die Fallunterscheidung. */
.mi-eyebrow {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wp--custom--mi-eyebrow-ink);
  margin-block: 0;
}

/* Zweite Headline-Zeile: "Menschen entscheiden." in Salbei-Kursiv */
.mi-accent-line {
  display: block;
  font-style: italic;
  color: var(--wp--custom--mi-accent-ink);
}

.mi-lead {
  font-size: var(--wp--preset--font-size--large);
  /* 1.625 am Demo gemessen: 29.25px auf 18px. */
  line-height: 1.625;
  color: var(--wp--custom--mi-lead-ink);
}

/* Technisches Label, z.B. im Terminal-Hero oder an Datenpunkten */
.mi-label {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--mi-muted);
}


/* ==========================================================================
   8 — Button-Varianten
   --------------------------------------------------------------------------
   Registriert als core/button-Block-Styles (siehe functions.php), damit sie im
   Editor als "Stil" auswaehlbar sind statt als Klasse im Markup zu haengen.
   Die Grundform (Farbe, Padding, Radius) steht in der theme.json unter
   elements.button — hier nur die Abweichungen.

   OFFEN: Die exakte Geometrie des Perimeter-CTA wird in Schritt 5 am
   gerenderten Demo gemessen, nicht aus dem Bundle abgeleitet.
   ========================================================================== */

/* Farben und Zustaende (:hover, :focus-visible, :active) stehen seit WP 7.1
   in der theme.json unter styles.blocks.core/button.variations. Hier steht nur
   noch, was theme.json strukturell nicht kann:

     1. Uebergaenge — `transition` ist keine theme.json-Eigenschaft. Ohne diese
        Zeilen springen die Zustaende hart um. theme.json liefert den Zustand,
        die CSS die Zeit.
     2. Pseudo-Elemente — ::before/::after gibt es in theme.json nicht.

   Der Ghost-Umschlag auf dunklem Grund stand hier bis Schritt 8. Er liegt
   jetzt im Sektionsstil: `styles/mi-section-dark.json` setzt
   `--wp--custom--mi-ghost-ink` und `--mi-ghost-on`, die Variante in der
   theme.json liest sie. Vererbung statt Kaskade — siehe DOKU F-28.

   ACHTUNG Spezifitaet: theme.json rahmt jede Variation in
   `:root :where(...)` — Spezifitaet 0-1-0. Jede Klassenregel in dieser Datei
   schlaegt sie. Deshalb hier bewusst KEINE Farbe wiederholen, sonst gewinnt
   still die CSS und die theme.json-Werte sind Dekoration. */

.wp-block-button.is-style-mi-ghost > .wp-element-button {
  transition: background-color 0.2s var(--mi-ease), color 0.2s var(--mi-ease),
    border-color 0.2s var(--mi-ease);
}

/* Die Hero-Schaltflaechen folgen der Demo, nicht dem Sektionsstil.

   `is-style-mi-section-dark` faerbt Buttons auf Dunkel salbeigruen. Im Hero
   der Demo sind sie blau gefuellt mit weisser Schrift — gemessen
   `oklch(0.464 0.0721 236.2)`, das ist blue. Umdefiniert wird der Token
   (F-31), nicht die Regel.

   Die zweite Schaltflaeche braucht zwei verschiedene Farben: Rand in Salbei
   mit 45 % Deckung, Schrift in blue-pale. Ein einzelner Ghost-Token kann das
   nicht ausdruecken, deshalb hier ausnahmsweise zwei Eigenschaften direkt —
   die Werte stehen trotzdem als Presets da, nicht als Hexzahlen. */
.mi-hero {
  --wp--custom--mi-btn-bg: var(--wp--preset--color--blue);
  --wp--custom--mi-btn-fg: var(--wp--preset--color--white);
  --wp--custom--mi-btn-hover-bg: var(--wp--preset--color--blue-light);
  --wp--custom--mi-btn-hover-fg: var(--wp--preset--color--white);
}

.mi-hero .wp-block-button.is-style-mi-ghost > .wp-element-button {
  border-color: color-mix(in srgb, var(--mi-sage) 45%, transparent);
  color: var(--mi-blue-pale);
}

/* Das kleine Abzeichen im Hero-CTA. Am Demo gemessen: 10px DM Mono in
   Salbei, links eine Trennlinie in Weiss mit 25 % Deckung, 12px Abstand
   dahinter.

   `aria-hidden` im Markup, damit der zugaengliche Name der Schaltflaeche
   „Erstgespräch buchen" bleibt und nicht „Erstgespräch buchen Secure"
   lautet — das Abzeichen ist Schmuck, keine Auskunft. */
.mi-btn__marke {
  border-inline-start: 1px solid color-mix(in srgb, var(--mi-white) 25%, transparent);
  color: var(--mi-sage);
  font-family: var(--mi-font-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  margin-inline-start: 4px;
  padding-inline-start: 12px;
  text-transform: uppercase;
}

/* Das Intro der Startseite teilt sich halb und halb, nicht 1.15 zu 0.85.

   Die Heroes behalten ihre Aufteilung — `mi-hero__split` bleibt unberuehrt.
   Am Demo gemessen: zwei Spalten a 544px bei 1152px Breite, Abstand 64px. */
.mi-intro__split {
  align-items: center;
  display: grid;
  gap: 4rem;
  grid-template-columns: 1fr;
}

@media (min-width: 860px) {
  .mi-intro__split {
    grid-template-columns: 1fr 1fr;
  }
}

/* Kein Perimeter-Stil mehr (DOKU E-07).

   Der Kickoff nannte den Primaer-CTA "Perimeter-CTA", und ich hatte daraus
   einen abgesetzten Salbei-Rahmen als ::after gebaut. Die Messung am
   gerenderten Demo zeigt: So einen Rahmen gibt es nicht.

   Gemessen am Hero-CTA:  Padding 14/24 · Radius 5px · 14px/500 · gefuellt,
   kein Rand, kein Schatten. Das ist exakt der Standardbutton aus der
   theme.json. Ein eigener Blockstil dafuer waere eine Kopie ohne Unterschied.

   Der Stil ist deshalb ersatzlos entfallen. Bleibt nur Ghost. */

/* ==========================================================================
   8b — Header und Footer
   --------------------------------------------------------------------------
   Die Geometrie kommt aus dem Core-Layout der Blocks (flex/constrained),
   nicht von hier — siehe DOKU E-14. Deshalb steht in diesem Abschnitt nur,
   was der Block-Editor nicht ausdruecken kann.

   Kein `mi-flow-reset` noetig: alle Reihen sind `is-layout-flex`, die
   Core-Regel `:where(.is-layout-flow) > * + *` greift dort gar nicht.
   ========================================================================== */

/* --- Kopfzeile -----------------------------------------------------------

   Eine Fassung fuer alle Seiten, dunkel, oben klebend. Die Farben kommen aus
   `is-style-mi-section-dark` am Gruppenblock, die Geometrie aus dem
   Core-Layout (E-14). Hier steht nur, was beides nicht kann. */

/* Sticky gehoert an die Huelle des Template-Parts, nicht an die Gruppe darin.
   Ein klebendes Element bewegt sich nur innerhalb seines Elternelements
   (F-04) — die Gruppe ist genau so hoch wie ihre Huelle und haette keine
   Strecke. `.wp-site-blocks` ist die ganze Seite; dort ist Weg. */
.wp-site-blocks > header {
  position: sticky;
  top: 0;
  z-index: 50;
}

/* Kein weisser Streifen zwischen Kopfzeile und Inhalt.

   Core setzt auf die direkten Kinder von `.wp-site-blocks` den blockGap als
   `margin-block-start` — 24px. Solange die Kopfzeile hell war, ging der
   Streifen in ihr auf; auf dunklem Grund steht er als weisse Kante zwischen
   Header und Hero. Gemessen: Header endet bei 96px, `main` beginnt bei 120px.

   Cores Regel steht in `:where(.wp-site-blocks) > *` und hat damit
   Spezifitaet 0-0-0; eine Klasse und ein Element reichen zum Ueberstimmen.
   Der Abstand vor dem Footer bleibt unberuehrt. */
.wp-site-blocks > header + * {
  margin-block-start: 0;
}

/* Der Header traegt den globalen Seitenrand nicht.

   `useRootPaddingAwareAlignments` gibt jeder Gruppe mit `has-global-padding`
   den Rand aus `styles.spacing.padding` — hier `clamp(1.25rem, 5vw, 2.5rem)`.
   Fuer Inhaltsabschnitte ist das richtig. Der Header hat aber seinen eigenen
   Innenabstand von 20px an der Leiste, und beide zusammen ergeben einen
   Rand, den die Demo nicht hat.

   Gemessen, linke Kante des Logos, Theme gegen Demo:

     1440px   164 : 164   (gleich, der Rand faellt hier nicht ins Gewicht)
     1024px    60 :  20
      768px    58 :  20
      375px    40 :  20

   Ohne diese Regel fehlen bei 768px genau die Pixel, die die Menuereihe
   braucht. Siehe E-33. */
.mi-header.has-global-padding {
  padding-inline: 0;
}

.mi-header {
  transition:
    background-color 300ms ease,
    box-shadow 300ms ease,
    backdrop-filter 300ms ease;
}

@media (prefers-reduced-motion: reduce) {
  .mi-header {
    transition: none;
  }
}

/* Ab 12px Scrollweg durchscheinend. Die Klasse setzt mantel.js an <html>.

   Die 92 % sind keine Geschmacksfrage, sondern die Untergrenze, bei der
   Salbei auf dem durchscheinenden Grund noch 4.5:1 erreicht — **gemessen**,
   nicht gerechnet (E-32, F-38). Wer sie senkt, muss die Linkfarbe aendern. */
.mi-gescrollt .mi-header {
  background-color: color-mix(in srgb, var(--wp--preset--color--blue-deep) 92%, transparent);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  box-shadow:
    0 1px 3px color-mix(in srgb, var(--wp--preset--color--gray-900) 12%, transparent),
    0 1px 2px -1px color-mix(in srgb, var(--wp--preset--color--gray-900) 12%, transparent);
}

/* Logo und rechte Gruppe behalten ihre Breite, dazwischen steht der Abstand. */
.mi-header__bar > .wp-block-site-logo,
.mi-header__bar > .mi-header__rechts {
  flex: 0 0 auto;
}

/* Die Hoehe steuert das Bild, nicht die Blockbreite: `width` am site-logo
   waere eine zweite Quelle fuer dieselbe Groesse und haette zwei Werte
   (mobil/ab Tablet) nicht ausdruecken koennen. */
.mi-header .wp-block-site-logo img {
  height: 48px;
  width: auto;
  max-width: none;
}

@media (min-width: 768px) {
  .mi-header .wp-block-site-logo img {
    height: 64px;
  }
}

/* Navigationslinks erben die Farbe ihres Containers — immer, weil Core die
   Klasse doppelt und damit auf 0-3-0 kommt (F-29). Der Ruhezustand kommt
   deshalb aus dem Sektionsstil: blue-pale, 11.57:1 auf blue-deep.
   Fuer hover und die aktuelle Seite braucht es 0-4-0, also die drei Klassen
   plus eine Pseudoklasse beziehungsweise einen Attributselektor. */
.mi-header .wp-block-navigation .wp-block-navigation-item__content:hover,
.mi-header .wp-block-navigation .wp-block-navigation-item__content:focus-visible,
.mi-header .wp-block-navigation .wp-block-navigation-item__content[aria-current],
.mi-header .wp-block-navigation .current-menu-item .wp-block-navigation-item__content {
  color: var(--wp--preset--color--sage);
}

/* Der Sektionsstil faerbt Buttons auf Dunkel salbeigruen
   (styles/mi-section-dark.json). Der Header-CTA ist blau gefuellt wie in der
   Demo. Umdefiniert wird der Token am Element, nicht per Alias auf :root —
   ein Alias friert den Wert an seiner Deklarationsstelle ein (F-31). */
.mi-header__cta {
  --wp--custom--mi-btn-bg: var(--wp--preset--color--blue);
  --wp--custom--mi-btn-fg: var(--wp--preset--color--white);
  --wp--custom--mi-btn-hover-bg: var(--wp--preset--color--blue-light);
  --wp--custom--mi-btn-hover-fg: var(--wp--preset--color--white);
}

/* Umbruch zum Overlay bei 768px statt bei Cores 600px.

   Core verdrahtet die Grenze in `wp-includes/blocks/navigation/style.css`
   als `@media (min-width:600px)`. `settings.viewport` (neu in WP 7.1) kommt
   dort nicht hin — es speist nur die Stil-Zustaende `@mobile`/`@tablet`
   (F-37). Zwischen 600 und 768 drehen wir Cores beide Regeln zurueck.
   Die vier Klassen schlagen Cores drei. */
@media (min-width: 600px) and (max-width: 767.98px) {
  .mi-header .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
    display: none;
    position: fixed;
    width: auto;
    z-index: auto;
  }

  .mi-header .wp-block-navigation__responsive-container-open:not(.always-shown) {
    display: flex;
  }
}

/* Im Overlay stehen die Punkte links, nicht rechts.

   `items-justified-right` am Navigationsblock ist eine Ansage fuer die Reihe
   in der Kopfzeile. Core reicht sie ueber
   `--navigation-layout-justification-setting` an das geoeffnete Overlay
   weiter — dort sieht eine rechtsbuendige Liste aus wie ein Versehen, und
   die Demo setzt sie links. Umgestellt wird der Token, nicht die Regel.

   Der Token muss mehrfach gesetzt werden, und das ist gemessen, nicht
   vorsichtshalber: Core haengt `items-justified-right` nicht nur an das
   `<nav>`, sondern auch an die Liste darin. Ein Wert allein am Overlay
   erreicht den `<ul>` deshalb nicht — gemessen stand dort weiter `flex-end`,
   waehrend Huelle und Inhalt schon auf `flex-start` standen. */
.mi-header .wp-block-navigation__responsive-container.is-menu-open,
.mi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,
.mi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,
.mi-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
  --navigation-layout-justification-setting: flex-start;
  --navigation-layout-justify: flex-start;
  --navigation-layout-align: flex-start;
}

/* Unter 1024px zeigt der Header nur Logo und Schaltflaeche — dort steht das
   Menue im Overlay, und der Weg zum Erstgespraech laeuft ueber den Menuepunkt
   Kontakt. Genau so macht es die Demo, nur eine Stufe frueher.

   Der Selektor braucht drei Klassen: Core setzt `display:flex` ueber
   `.wp-block-buttons.is-layout-flex` und kommt damit auf 0-2-0. */
@media (max-width: 1023.98px) {
  .mi-header .mi-header__rechts > .mi-header__cta {
    display: none;
  }
}


/* Der Footer erbt aus is-style-mi-section-dark die Textfarbe. Das Logo ist
   eine SVG-Datei mit eigenen Farben und darf davon nichts abbekommen. */
.mi-footer__logo {
  margin-block: 0 var(--wp--preset--spacing--30);
}

.mi-footer__quali {
  color: var(--mi-sage);
  max-width: 28ch;
}

.mi-footer__kontakt {
  line-height: 1.8;
}

/* Kein Spaltenumbruch per Media Query mehr (DOKU F-18/F-19).
   Die Footer-Spalten sind jetzt eine core/group mit Grid-Layout und
   minimumColumnWidth. WordPress erzeugt daraus
   repeat(auto-fill, minmax(min(16rem, 100%), 1fr)) — der Umbruch kommt
   damit aus dem Block, nicht aus einer zweiten Quelle in dieser Datei.
   Das ist zugleich die Antwort auf F-19: Gegen Cores !important muss man
   gar nicht erst anschreiben, wenn man dessen Mechanik benutzt. */

/* Trefferflaechen im mobilen Overlay (DOKU F-20).

   Der theme.json-Weg wurde ausprobiert und gemessen — er traegt nicht.
   `core/navigation-link` deklariert in block.json keinen `root`-Selektor,
   also zielt WordPress auf die Vorgabe `.wp-block-navigation-link`, und
   das ist das <li>. Gemessen kam dabei heraus: li-Padding 10px,
   a-Padding 0px, Hoehe unveraendert 24px. Das Klickziel ist aber das <a>,
   und nur dessen Box zaehlt fuer WCAG 2.2 SC 2.5.8.

   Deshalb hier, auf `.wp-block-navigation-item__content`. Die Regel
   greift nur im geoeffneten Overlay, und das Overlay existiert laut
   Messung nur unterhalb 600px — die Desktop-Optik bleibt unberuehrt
   (dort gemessen: 26px hoch, Padding 0).

   Der Gegenspieler ist Cores

     .wp-block-navigation__responsive-container.is-menu-open
     :where(:not(.disable-default-overlay))
     .wp-block-navigation-item__content { padding: 0 }

   mit 0-3-0 — `:where()` zaehlt null — und er laedt spaeter.
   `.wp-block-navigation-item` als vierte Klasse hebt auf 0-4-0. */
.wp-block-navigation__responsive-container.is-menu-open
  .wp-block-navigation-item
  > .wp-block-navigation-item__content {
  padding-block: 0.625rem;
}

.mi-subfooter {
  border-top-color: color-mix(in srgb, var(--mi-sage) 30%, transparent);
}

.mi-subfooter__bar {
  gap: var(--wp--preset--spacing--20) var(--wp--preset--spacing--40);
}


/* ==========================================================================
   8c — Hero-Varianten
   --------------------------------------------------------------------------
   Vier Patterns teilen denselben Textblock und unterscheiden sich nur in der
   Kulisse. Deshalb steht hier `.mi-hero` einmal und die Varianten tragen nur
   ihren Zusatz.

   Werte aus dem GERENDERTEN Demo gemessen, nicht aus dem Bundle abgeleitet
   (DOKU E-07):
     H1        72px DM Serif Display, line-height 77.76px  -> 1.08
     Akzent    italic, sage
     Eyebrow   DM Mono 12px, letter-spacing 1.44px = 0.12em, sage
     CTA       Padding 14/24, Radius 5px, 14px/500
   ========================================================================== */

.mi-hero {
  position: relative;
  overflow: hidden;
  padding-block: var(--wp--preset--spacing--80);
  isolation: isolate;

  /* Die Mindesthoehe steht am Block (dimensions.minHeight), nicht hier —
     so bleibt sie im Editor sichtbar und aenderbar. Ohne senkrechte
     Zentrierung entstuende darunter toter Raum.

     `align-content` wirkt seit Chrome 123, Safari 17.6 und Firefox 125
     auch auf Block-Container. Genau deshalb steht hier kein
     `display: flex` oder `grid`: Das wuerde die Gruppe aus dem
     Core-Layout heben und F-03 wieder aufmachen — die Core-Regel
     `:where(.is-layout-constrained) > * + *` setzt weiterhin Abstaende.

     Aeltere Browser zeigen den Inhalt oben statt mittig. Das ist die
     Degradation, die man sich wuenscht. */
  align-content: center;
}

/* Die Kulisse liegt hinter dem Text und ist fuer Screenreader nicht da. */
.mi-hero__stage {
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;

  /* Gemessen war die Kulisse nur 760px breit statt 1280: Das
     constrained-Layout der Elterngruppe setzt seinen Kindern eine
     max-width, und das gilt auch fuer absolut positionierte (DOKU F-26).
     Kein !important noetig — Cores Regel steht in :where() und custom.css
     laedt zuletzt (F-24). */
  max-width: none;
}

.mi-hero__stage canvas {
  display: block;
  width: 100%;
  height: 100%;
}

.mi-hero__inner {
  position: relative;
}

/* Die zweite Headline-Zeile. Im Editor ist das ein normales <em>, damit die
   Redaktion es kursiv setzen oder entfernen kann — eine <span class="..."> 
   wuerde die Rich-Text-Bereinigung beim Bearbeiten verwerfen. */
.mi-hero__title em {
  display: block;
  font-style: italic;
  color: var(--mi-sage);
}

.mi-hero__lead {
  max-width: 46ch;
}

/* E-01 erzwungen statt dokumentiert: Ein gefuellter Primaerbutton kommt auf
   blue-deep auf 1.27:1. In dunklen Sektionen wird er deshalb zu Salbei mit
   dunkler Schrift — gemessen 6.05:1.

   Das macht seit Schritt 8 der Sektionsstil ueber `--wp--custom--mi-btn-bg`
   und `--mi-btn-fg`. Hier steht dazu nichts mehr; der Umweg ueber
   `:not(.is-style-mi-ghost)` ist damit auch weg. */

/* --- Variante 2: Riesen-Klammern ------------------------------------------
   Reines CSS, kein wp:html noetig. Die Klammern sind Dekor und stehen
   deshalb in Pseudo-Elementen, nicht im Markup. */
.mi-hero--brackets .mi-hero__stage::before,
.mi-hero--brackets .mi-hero__stage::after {
  content: "";
  position: absolute;
  top: 12%;
  bottom: 12%;
  width: min(14vw, 180px);
  border: 3px solid color-mix(in srgb, var(--mi-sage) 32%, transparent);
}

.mi-hero--brackets .mi-hero__stage::before {
  left: 4%;
  border-right: 0;
  border-radius: 24px 0 0 24px;
}

.mi-hero--brackets .mi-hero__stage::after {
  right: 4%;
  border-left: 0;
  border-radius: 0 24px 24px 0;
}

.mi-hero--brackets .mi-hero__scan {
  position: absolute;
  left: 0;
  right: 0;
  height: 2px;
  background: linear-gradient(
    90deg,
    transparent,
    color-mix(in srgb, var(--mi-sage) 70%, transparent),
    transparent
  );
  animation: mi-scan 7s linear infinite;
}

@keyframes mi-scan {
  0%   { top: 8%;  opacity: 0; }
  10%  { opacity: 1; }
  90%  { opacity: 1; }
  100% { top: 92%; opacity: 0; }
}

/* --- Zweispaltige Heroes -------------------------------------------------
   Gilt fuer jeden Hero mit `mi-hero__split`, nicht nur fuer den
   editorialen: Der Terminal-Hero trug dieselbe Klasse und stand trotzdem
   einspaltig, weil die Regel an `.mi-hero--editorial` haengte (DOKU F-35).

   Das ist die Ausnahme von E-14 und bleibt es: Ein Hero ist eine Kulisse,
   kein redaktioneller Inhalt — hier soll niemand Spalten verschieben.
   Inhaltssektionen benutzen `core/columns`. */
.mi-hero__split {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--wp--preset--spacing--60);
  align-items: center;
}

@media (min-width: 860px) {
  .mi-hero__split {
    grid-template-columns: 1.15fr 0.85fr;
  }
}

/* Scan-Rahmen um das Portrait. Der Rahmen ist versetzt, das Bild bleibt
   unbeschnitten. */
.mi-hero--editorial .mi-hero__portrait {
  position: relative;
  margin: 0;
}

.mi-hero--editorial .mi-hero__portrait::after {
  content: "";
  position: absolute;
  inset: -14px -14px 14px 14px;
  border: 1px solid color-mix(in srgb, var(--mi-sage) 55%, transparent);
  pointer-events: none;
}

.mi-hero--editorial .mi-hero__portrait img {
  display: block;
  width: 100%;
  height: auto;
}

/* --- Variante 4: Terminal ------------------------------------------------- */
.mi-hero--terminal .mi-terminal {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--small);
  line-height: 1.8;
  background: color-mix(in srgb, var(--mi-blue-deep) 55%, var(--mi-ink));
  border: 1px solid color-mix(in srgb, var(--mi-sage) 30%, transparent);
  border-radius: var(--mi-radius);
  padding: var(--wp--preset--spacing--30);
  color: var(--mi-sage);
  min-height: 11em;
}

.mi-hero--terminal .mi-terminal__line::before {
  content: "$ ";
  opacity: 0.55;
}

.mi-hero--terminal .mi-terminal__caret {
  display: inline-block;
  width: 0.6em;
  background: currentColor;
  animation: mi-caret 1.1s steps(2, start) infinite;
}

@keyframes mi-caret {
  50% { opacity: 0; }
}

.mi-hero--terminal .mi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(7rem, 1fr));
  gap: var(--wp--preset--spacing--20);
  margin-top: var(--wp--preset--spacing--30);
}

.mi-hero--terminal .mi-grid__cell {
  border: 1px solid color-mix(in srgb, var(--mi-sage) 22%, transparent);
  border-radius: var(--mi-radius-sm);
  padding: 0.5rem 0.75rem;
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  color: var(--mi-blue-pale);
}

.mi-hero--terminal .mi-grid__cell b {
  display: block;
  color: var(--mi-sage);
  font-weight: 500;
}


/* ==========================================================================
   8d — Beitragsliste und Einzelbeitrag
   --------------------------------------------------------------------------
   Geometrie kommt aus den Blocks. Hier nur Farbe und Feinheiten, die
   theme.json nicht je Kontext ausdruecken kann.
   ========================================================================== */

.mi-liste__item {
  border-bottom-color: var(--mi-line);
}

/* Der letzte Eintrag braucht keine Trennlinie — darunter kommt die
   Blaetternavigation, die ihren eigenen Abstand mitbringt. */
.mi-liste__items > :last-child .mi-liste__item,
.mi-liste__items > :last-child.mi-liste__item {
  border-bottom: 0;
}

.mi-liste__meta {
  align-items: baseline;
}

/* Datum und Kategorie stehen in Mono und Versalien — die Angaben kommen
   aus theme.json styles.blocks. Hier nur der Trenner dazwischen. */
.mi-liste__meta > * + *::before {
  content: "·";
  margin-inline-end: 0.5em;
  color: var(--mi-line);
}

.mi-nachbarn .post-navigation-link-previous,
.mi-nachbarn .post-navigation-link-next {
  max-width: 45%;
}

.mi-nachbarn a {
  font-size: var(--wp--preset--font-size--small);
}

/* Blaetternavigation: Zahlen sollen nicht wie Fliesstext aussehen. */
.wp-block-query-pagination-numbers {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--small);
}

.wp-block-query-pagination-numbers .current {
  color: var(--mi-blue);
  font-weight: 500;
}


/* ==========================================================================
   8e — Sektions-Patterns
   --------------------------------------------------------------------------
   Am gerenderten Demo gemessen (1440px):
     Sektionspolster   128px oben und unten  -> spacing|80
     H2                36px DM Serif Display
     Karte             weiss, 1px gray-300, Radius 6px, kein Schatten
     Themen-Karte      Polster 36px
     Blog-Karte        Polster 0 (Bild fuellt oben)
     Calendly-Box      1px GESTRICHELT sage/50%, Radius 6px, Polster 32px

   Nicht in der Demo enthalten und deshalb neu entworfen: die Trust-Bar und
   der Amber-Akzent fuer „Martins Meinung" (DOKU E-16).
   ========================================================================== */

/* Karten sind 6px, Buttons 5px — beides gemessen, nicht vereinheitlicht. */
:root {
  --mi-radius-card: 6px;
}

/* --- Trust-Bar --------------------------------------------------------- */
/* Die Flaeche kommt aus dem Sektionsstil „Salbei-Flaeche"
   (`is-style-mi-section-soft` am Pattern), hier bleibt nur der Rahmen. */
.mi-trust {
  border-block-end: var(--mi-border);
}

/* Die Qualifikationen sind Pillen, nicht Fliesstext. Am gerenderten Demo
   gemessen: weisse Flaeche, 1px Rand in Salbei mit 50 % Deckung, voller
   Radius, 8/16 Innenabstand, DM Mono 12px Versalien mit 0.12em Laufweite,
   Schrift in sage-deep (4.59:1 auf Weiss). 224x36 je Pille.

   Der Rahmen oben ist entfallen: Die Demo setzt nur unten eine Linie. */
.mi-trust__item {
  background: var(--mi-white);
  border: 1px solid color-mix(in srgb, var(--mi-sage) 50%, transparent);
  border-radius: 999px;
  color: var(--mi-sage-deep);
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.12em;
  margin-block: 0;
  padding: 8px 16px;
  text-transform: uppercase;
}

/* --- Themen-Kacheln ---------------------------------------------------- */
/* Nur die Linien. Die Flaeche kommt aus dem Sektionsstil „Helle Flaeche"
   am Block — sonst koennte die Variante „Editorial" sie nicht auf Weiss
   stellen, ohne diese Regel zu ueberschreiben. */
.mi-tiles {
  border-block: var(--mi-border);
}

.mi-tile {
  position: relative;
  background-color: var(--mi-white);
  border: var(--mi-border);
  border-radius: var(--mi-radius-card);
  padding: 36px;
  transition: border-color 0.25s var(--mi-ease);
}

.mi-tile:hover {
  border-color: var(--mi-sage);
}

/* Icons als mask-Pseudo-Element, nicht als Inline-SVG im Markup: So
   ueberlebt das Icon jede Bearbeitung der Kachel. Die Maske traegt keine
   Farbe — die kommt aus background-color. */
.mi-tile::before {
  content: "";
  display: block;
  width: 28px;
  height: 28px;
  margin-bottom: var(--wp--preset--spacing--20);
  background-color: var(--mi-sage-deep);
  mask-repeat: no-repeat;
  mask-size: contain;
  mask-position: center;
}

.mi-tile--ot::before {
  mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2 4 6v6c0 5 3.4 8.6 8 10 4.6-1.4 8-5 8-10V6l-8-4Zm0 2.2 6 3V12c0 4-2.5 6.9-6 8.1-3.5-1.2-6-4.1-6-8.1V7.2l6-3Z"/></svg>');
}

.mi-tile--iso::before {
  mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 3h9l5 5v13H5V3Zm2 2v14h10V9h-4V5H7Zm2 6h6v2H9v-2Zm0 4h6v2H9v-2Z"/></svg>');
}

.mi-tile--seminar::before {
  mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3 1 9l11 6 9-4.9V17h2V9L12 3Zm0 2.3 6.9 3.7L12 12.7 5.1 9 12 5.3ZM5 14.2v3.3c0 1.8 3.1 3.5 7 3.5s7-1.7 7-3.5v-3.3l-2 1.1v2.2c0 .5-1.9 1.5-5 1.5s-5-1-5-1.5v-2.2l-2-1.1Z"/></svg>');
}

.mi-tile__mehr {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  margin-block-end: 0;
}

/* --- Blog-Teaser ------------------------------------------------------- */
.mi-teaser__card {
  background-color: var(--mi-white);
  border: var(--mi-border);
  border-radius: var(--mi-radius-card);
  overflow: hidden;
  height: 100%;
  transition: border-color 0.25s var(--mi-ease);
}

.mi-teaser__card:hover {
  border-color: var(--mi-sage);
}

/* Linie unter dem Bild, wie in der Demo gemessen (1px gray-300). Sie gehoert
   in die CSS und nicht ins Platzhalterbild: Sonst verschwindet sie in dem
   Moment, in dem ein echtes Foto das Platzhalterbild ersetzt. */
.mi-teaser__card .wp-block-post-featured-image {
  border-block-end: var(--mi-border);
  margin: 0;
}

.mi-teaser__body {
  padding: var(--wp--preset--spacing--30);
}

/* „Martins Meinung" ist die einzige Kategorie mit Amber. Der Selektor kommt
   aus get_post_class(), das jedem Eintrag category-<slug> mitgibt — deshalb
   braucht es dafuer kein eigenes Markup. Slug: martins-meinung. */
.category-martins-meinung .mi-teaser__card {
  border-color: color-mix(in srgb, var(--mi-amber) 45%, transparent);
  border-left-width: 3px;
  border-left-color: var(--mi-amber);
}

.category-martins-meinung .wp-block-post-terms {
  color: var(--mi-amber);
}

/* --- CTA mit Calendly-Link --------------------------------------------- */
.mi-cta__box {
  border: 1px dashed color-mix(in srgb, var(--mi-sage) 50%, transparent);
  border-radius: var(--mi-radius-card);
  padding: 32px;
  background-color: color-mix(in srgb, var(--mi-white) 5%, transparent);
}

.mi-cta__hinweis {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.05em;
  color: var(--mi-sage);
  margin-block-end: 0;
}


/* ==========================================================================
   8f — Sektionen der vier Startseiten-Varianten
   --------------------------------------------------------------------------
   V1 „Tech & Trust", V2 „Editorial", V3 „Human", V4 „Terminal".

   Hier steht nur, was sich in der *Gestaltung* unterscheidet. Wo sich zwei
   Varianten nur in der Flaechenfarbe unterscheiden, steht dazu nichts —
   das macht der Sektionsstil am Block (DOKU E-11).
   ========================================================================== */

/* Platzhalter sollen wie Platzhalter aussehen. Ein erfundenes Kundenzitat,
   das echt aussieht, steht sonst drei Monate spaeter im Netz. */
.mi-platzhalter {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--mi-muted);
  border: 1px dashed var(--mi-line);
  border-radius: var(--mi-radius-sm);
  padding: 0.5em 0.75em;
}

.is-style-mi-section-dark .mi-platzhalter {
  color: var(--mi-sage);
  border-color: color-mix(in srgb, var(--mi-sage) 40%, transparent);
}

/* Platzhalter fuer Bildflaechen.

   Ein `core/image` ohne `src` und ein `core/post-featured-image` ohne
   Beitragsbild rendern **nichts** — kein Rahmen, keine Flaeche, keine
   Meldung. Im Entwurf sieht die Seite dadurch fertig aus und ist es nicht:
   Genau die Stellen, an denen noch ein Bild fehlt, sind die unauffaelligsten.
   Die Demo zeigt dort beschriftete Flaechen, und das ist der bessere Zustand.

   Die Flaeche traegt ihr Seitenverhaeltnis selbst, damit die Umbruchhoehe
   schon jetzt stimmt und das echte Bild spaeter nichts verschiebt. */
.mi-platzhalter--bild {
  align-items: center;
  background: var(--mi-surface);
  display: flex;
  justify-content: center;
  padding: 1em;
  text-align: center;
  width: 100%;
}

.mi-platzhalter--4-5 {
  aspect-ratio: 4 / 5;
}

.mi-platzhalter--16-9 {
  aspect-ratio: 16 / 9;
}

.mi-platzhalter--1-1 {
  aspect-ratio: 1;
}

/* --- Trust-Bar: zweite Zeile fuer Referenzen --------------------------- */
/* Qualifikationen und Referenzen stehen in **einer** Reihe, nicht in zwei.
   Am Demo gemessen: 1152x36, links die Pillen (394px), rechts die Referenzen
   (615px). Die frueher hier stehende Linie samt Abstand ist deshalb weg —
   sie trennte zwei Zeilen, die es nicht mehr gibt. */
.mi-trust__refs {
  column-gap: var(--wp--preset--spacing--20);
}

.mi-trust__label {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wp--custom--mi-eyebrow-ink);
  margin-block: 0;
}

/* --- Intro „Editorial": der Leitsatz ----------------------------------- */
.mi-leitsatz .wp-block-quote {
  margin-block: 0;
}

/* --- Intro „Human": der kleine Zeitstrahl ------------------------------ */
.mi-zeitstrahl {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 0.5rem var(--wp--preset--spacing--30);
  margin: 0;
}

.mi-zeitstrahl dt {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.05em;
  color: var(--mi-sage-deep);
  padding-top: 0.15em;
}

.mi-zeitstrahl dd {
  margin: 0;
  font-size: var(--wp--preset--font-size--small);
  color: var(--mi-muted);
  border-left: 1px solid var(--mi-line);
  padding-left: var(--wp--preset--spacing--30);
}

/* --- Themen ohne Kartenrahmen ------------------------------------------ */
/* Die Flaeche der Kachelsektion kommt aus dem Sektionsstil, nicht von hier.
   `.mi-tiles` traegt nur noch die Linien. */
.mi-tiles--offen,
.mi-tiles--nummeriert {
  border-block: var(--mi-border);
}

/* Die Grundform ist absichtlich leer: In der Variante „Editorial" hat die
   Spalte im Demo weder Rahmen noch Polsterung noch Flaeche — gemessen
   `border 0px, padding 0px, background transparent`. Eine Oberlinie hatte
   ich zuerst erfunden; die Messung hat sie wieder ausgebaut. */
.mi-tile-offen {
  position: relative;
}

/* „Human": getoente Flaeche mit grossem Radius, gemessen 36px Polsterung
   und 18px Radius — beides groesser als bei den Karten der Startseite. */
.mi-tiles--offen .mi-tile-offen {
  background-color: color-mix(in srgb, var(--mi-surface) 60%, transparent);
  border-radius: 18px;
  padding: 36px;
}

/* „Terminal": weisse Flaeche, kein Radius, gemessen 32px Polsterung. */
.mi-tiles--terminal .mi-tile-offen {
  background-color: var(--mi-white);
  padding: 32px;
}

/* Dasselbe Icon-Verfahren wie bei den Kacheln, nur ohne Rahmen darum.
   Groessen am Demo abgenommen: 30px in „Human", 26px in „Terminal". */
.mi-tiles--offen .mi-tile-offen::before,
.mi-tiles--terminal .mi-tile-offen::before {
  content: "";
  display: block;
  width: var(--mi-tile-icon, 28px);
  height: var(--mi-tile-icon, 28px);
  margin-bottom: var(--wp--preset--spacing--20);
  background-color: var(--mi-sage-deep);
  mask-repeat: no-repeat;
  mask-size: contain;
  mask-position: center;
}

.mi-tiles--offen {
  --mi-tile-icon: 30px;
}

.mi-tiles--terminal {
  --mi-tile-icon: 26px;
}

/* Das Modul-Label der Terminal-Variante. */
.mi-tile__label {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--mi-sage-deep);
  margin-block: 0;
}

.mi-tile__nummer {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.12em;
  color: var(--mi-sage-deep);
  margin-block: 0;
}

/* --- Blog-Teaser als Liste --------------------------------------------- */
/* Die Trennlinie steht am Folgeelement, nicht am Eintrag: So gibt es nach
   dem letzten Beitrag keine Linie ins Leere. */
.mi-teaser--liste .wp-block-post + .wp-block-post .mi-teaser__zeile,
.mi-teaser--liste li + li .mi-teaser__zeile {
  border-top: var(--mi-border);
  padding-top: var(--wp--preset--spacing--40);
}

.mi-teaser--liste .wp-block-post-excerpt {
  max-width: 60ch;
}

/* --- Haltungen ---------------------------------------------------------- */
.mi-haltung {
  border-top: 2px solid var(--mi-sage-deep);
  padding-top: var(--wp--preset--spacing--20);
}

/* --- Unterseiten: Kopf, Marken, Schritte, Angebote --------------------- */
.mi-seitenkopf {
  border-bottom: var(--mi-border);
}

.mi-seitenkopf .mi-lead {
  max-width: 62ch;
}

/* Kleine Marke fuer Qualifikationen im Fliesstext. */
.mi-badge {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--mi-sage-deep);
  border: 1px solid color-mix(in srgb, var(--mi-sage-deep) 40%, transparent);
  border-radius: 999px;
  padding: 0.35em 0.9em;
  margin-block: 0;
}

.mi-leistungen {
  max-width: 62ch;
}

.mi-leistungen li {
  margin-block: 0.4em;
}

.mi-schritt {
  background-color: color-mix(in srgb, var(--mi-white) 70%, transparent);
  border-radius: var(--mi-radius-card);
  padding: var(--wp--preset--spacing--30);
}

.mi-schritt__nummer,
.mi-angebot__zeit {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--mi-sage-deep);
  margin-block: 0;
}

.mi-angebot {
  border-top: 2px solid var(--mi-sage-deep);
  padding-top: var(--wp--preset--spacing--20);
}

/* --- Werdegang, Standpunkte, Nachweise, Personen, Kontakt -------------- */
/* Der Zeitstrahl der Ueberseite: Jahr links, Station rechts, durchgehende
   Linie dazwischen. Das Raster steht hier und nicht im Block, weil die
   Linie zwischen den Spalten laeuft — das kann core/columns nicht. */
.mi-station {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.25rem;
  border-left: 2px solid var(--mi-line);
  padding-left: var(--wp--preset--spacing--30);
}

@media (min-width: 720px) {
  .mi-station {
    grid-template-columns: 9rem 1fr;
    column-gap: var(--wp--preset--spacing--40);
    align-items: baseline;
  }

  .mi-station > :not(.mi-station__jahr) {
    grid-column: 2;
  }

  .mi-station__jahr {
    grid-row: 1 / span 3;
  }
}

.mi-station__jahr {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--mi-sage-deep);
  margin-block: 0;
}

.mi-standpunkt {
  font-family: var(--mi-font-serif);
  line-height: 1.35;
  border-top: var(--mi-border);
  padding-top: var(--wp--preset--spacing--30);
  max-width: 46ch;
}

.mi-nachweis {
  border-top: 2px solid var(--mi-sage-deep);
  padding-top: var(--wp--preset--spacing--20);
}

.mi-nachweis__titel,
.mi-draht__label,
.mi-person__rolle {
  font-family: var(--mi-font-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wp--custom--mi-eyebrow-ink);
  margin-block: 0;
}

.mi-person__bild {
  margin-block: 0;
}

.mi-draht {
  border-top: 1px solid color-mix(in srgb, var(--mi-sage) 40%, transparent);
  padding-top: var(--wp--preset--spacing--20);
}

/* --- Blog: Filter, Artikelkopf, Inhaltsverzeichnis --------------------- */
.mi-filter {
  border-top: var(--mi-border);
  padding-top: var(--wp--preset--spacing--30);
}

.mi-filter__label {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wp--custom--mi-eyebrow-ink);
  margin-block: 0;
}

/* core/categories gibt eine ul aus. Die Punkte stehen hier nebeneinander,
   die Listenpunkte selbst sind weg — die Liste bleibt eine Liste, nur die
   Darstellung ist eine Leiste. */
.mi-filter__liste {
  display: flex;
  flex-wrap: wrap;
  gap: var(--wp--preset--spacing--20);
  list-style: none;
  padding: 0;
  margin: 0;
}

.mi-filter__liste li {
  margin: 0;
}

.mi-filter__liste a {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  text-decoration: none;
  border-bottom: 1px solid transparent;
}

.mi-filter__liste a:hover {
  border-bottom-color: currentColor;
}

.mi-zurueck {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-block: 0;
}

.mi-artikelkopf .wp-block-post-title {
  max-width: 24ch;
}

/* Inhaltsverzeichnis im Beitrag. */
.mi-toc {
  border-left: 2px solid var(--mi-sage);
  padding: var(--wp--preset--spacing--20) var(--wp--preset--spacing--30);
  background-color: color-mix(in srgb, var(--mi-surface) 70%, transparent);
  margin-block: var(--wp--preset--spacing--40);
}

.mi-toc__label {
  font-family: var(--mi-font-mono);
  font-size: var(--wp--preset--font-size--x-small);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wp--custom--mi-eyebrow-ink);
  margin-block: 0;
}

.mi-toc__liste {
  margin-block: 0.5em 0;
  font-size: var(--wp--preset--font-size--small);
}

/* --- Kundenstimmen ------------------------------------------------------ */
.mi-stimme {
  border: 1px dashed color-mix(in srgb, var(--mi-sage) 40%, transparent);
  border-radius: var(--mi-radius-card);
  padding: var(--wp--preset--spacing--30);
  height: 100%;
}

.mi-stimme__quelle {
  font-family: var(--mi-font-mono);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--mi-sage);
  margin-block-end: 0;
}


/* ==========================================================================
   9 — Karten
   ========================================================================== */

.mi-card {
  background-color: var(--mi-white);
  border: var(--mi-border);
  border-radius: var(--mi-radius);
  padding: var(--wp--preset--spacing--40);
  box-shadow: var(--wp--preset--shadow--card);
  transition: box-shadow 0.25s var(--mi-ease), border-color 0.25s var(--mi-ease);
}

.mi-card:hover {
  box-shadow: var(--wp--preset--shadow--card-hover);
  border-color: var(--mi-sage);
}

/* "Martins Meinung" — der einzige Ort, an dem Amber vorkommt. */
.mi-card--meinung {
  border-left: 3px solid var(--mi-amber);
  background-color: var(--mi-surface);
  box-shadow: none;
}

.mi-card--meinung:hover {
  box-shadow: none;
  border-color: var(--mi-line);
  border-left-color: var(--mi-amber);
}


/* ==========================================================================
   10 — Bewegung
   --------------------------------------------------------------------------
   Gilt auch fuer die Canvas- und Terminal-Animationen der Hero-Varianten.
   Deren JS fragt denselben Media Query zusaetzlich selbst ab (Schritt 7),
   weil eine Endlosschleife in requestAnimationFrame von CSS nicht erreicht wird.
   ========================================================================== */

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


/* ==========================================================================
   11 — Druck
   ========================================================================== */

@media print {
  /* custom.css laedt hinter allen Core-Blockstilen (DOKU F-24), diese
     Klassenregel schlaegt also den Sektionsstil aus der theme.json.
     Die Tokens muessen mit zurueckgesetzt werden — sonst druckt der
     Eyebrow in Salbei auf weissem Papier. */
  .is-style-mi-section-dark {
    background-color: transparent;
    color: var(--mi-ink);
    --wp--custom--mi-eyebrow-ink: var(--mi-ink);
    --wp--custom--mi-accent-ink: var(--mi-ink);
    --wp--custom--mi-lead-ink: var(--mi-ink);
  }

  .is-style-mi-section-dark :is(h1, h2, h3, h4, h5, h6) {
    color: var(--mi-ink);
  }

  .wp-block-button,
  .mi-skip-link {
    display: none;
  }
}
