/**
 * Theme Name:     Tensa Child
 * Author:         Jegstudio
 * Template:       tensa
 * Text Domain:	   tensa-child
 * Description:    Tensa is a sleek and modern WordPress theme designed specifically for interior designers, offering a minimalist and clean layout that emphasizes simplicity and elegance. With its unique design, Tensa ensures your portfolio and projects stand out, while the fully responsive structure guarantees a seamless experience across all devices. Perfect for showcasing your work in a professional and visually stunning way, Tensa combines functionality with aesthetic appeal to elevate your online presence.
 * Theme URI:      https://fse.jegtheme.com/tensa/
 * Author URI:     https://support.jegtheme.com/
 * Version:        1.0.0
 * License:        GNU General Public License v3 or later.
 * License URI:    https://www.gnu.org/licenses/gpl-3.0.html
 * Tags:           custom-header,full-site-editing,full-width-template,footer-widgets
 */

:root {
  --guten-screen-xs-max: 767px;
  --guten-screen-sm-min: 768px;
  --guten-screen-sm-max: 1024px;
  --guten-screen-md-min: 1025px;
}

html body {
  --gutenverse-font-family-cMRfTH: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-cMRfTH: 50px;
  --gutenverse-font-spacing-cMRfTH: 0em;
  --gutenverse-font-family-82lcQ2: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-82lcQ2: 50px;
  --gutenverse-font-weight-82lcQ2: 500;
  --gutenverse-font-transform-82lcQ2: uppercase;
  --gutenverse-font-lineHeight-82lcQ2: 1.2em;
  --gutenverse-font-spacing-82lcQ2: 0.04em;
  --gutenverse-font-family-w6zxP6: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-w6zxP6: 32px;
  --gutenverse-font-weight-w6zxP6: 500;
  --gutenverse-font-lineHeight-w6zxP6: 1.3em;
  --gutenverse-font-spacing-w6zxP6: -0.02em;
  --gutenverse-font-family-ICVEBp: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-ICVEBp: 24px;
  --gutenverse-font-weight-ICVEBp: 500;
  --gutenverse-font-transform-ICVEBp: uppercase;
  --gutenverse-font-lineHeight-ICVEBp: 1em;
  --gutenverse-font-spacing-ICVEBp: 0.08em;
  --gutenverse-font-family-yAWFIy: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-yAWFIy: 16px;
  --gutenverse-font-weight-yAWFIy: 500;
  --gutenverse-font-lineHeight-yAWFIy: 1em;
  --gutenverse-font-family-NR0jAz: "Plus Jakarta Sans";
  --gutenverse-font-size-NR0jAz: 18px;
  --gutenverse-font-weight-NR0jAz: 400;
  --gutenverse-font-lineHeight-NR0jAz: 1.5em;
  --gutenverse-font-family-DCPs7I: "Plus Jakarta Sans";
  --gutenverse-font-size-DCPs7I: 16px;
  --gutenverse-font-weight-DCPs7I: 400;
  --gutenverse-font-lineHeight-DCPs7I: 1.5em;
  --gutenverse-font-family-F2b8gX: "Plus Jakarta Sans";
  --gutenverse-font-size-F2b8gX: 14px;
  --gutenverse-font-weight-F2b8gX: 400;
  --gutenverse-font-transform-F2b8gX: capitalize;
  --gutenverse-font-lineHeight-F2b8gX: 1em;
  --gutenverse-font-family-tn2xDm: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-tn2xDm: 18px;
  --gutenverse-font-weight-tn2xDm: 500;
  --gutenverse-font-transform-tn2xDm: uppercase;
  --gutenverse-font-lineHeight-tn2xDm: 1em;
  --gutenverse-font-spacing-tn2xDm: 0.08em;
  --gutenverse-font-family-0U4VoL: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-0U4VoL: 16px;
  --gutenverse-font-weight-0U4VoL: 400;
  --gutenverse-font-transform-0U4VoL: uppercase;
  --gutenverse-font-lineHeight-0U4VoL: 1em;
  --gutenverse-font-spacing-0U4VoL: 0.1em;
  --gutenverse-font-family-i0LEpV: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-i0LEpV: 16px;
  --gutenverse-font-weight-i0LEpV: 500;
  --gutenverse-font-lineHeight-i0LEpV: 1em;
  --gutenverse-font-family-pwBV5I: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-pwBV5I: 24px;
  --gutenverse-font-weight-pwBV5I: 500;
  --gutenverse-font-lineHeight-pwBV5I: 1.3em;
  --gutenverse-font-spacing-pwBV5I: -0.01em;
  --gutenverse-font-family-S9XiQ5: "Plus Jakarta Sans";
  --gutenverse-font-size-S9XiQ5: 14px;
  --gutenverse-font-transform-S9XiQ5: uppercase;
  --gutenverse-font-lineHeight-S9XiQ5: 1em;
  --gutenverse-font-spacing-S9XiQ5: 0.04em;
  --gutenverse-font-family-0fKacR: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-0fKacR: 32px;
  --gutenverse-font-weight-0fKacR: 500;
  --gutenverse-font-transform-0fKacR: uppercase;
  --gutenverse-font-lineHeight-0fKacR: 1.3em;
  --gutenverse-font-spacing-0fKacR: 0.08em;
  --gutenverse-font-family-qvjcaQ: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-qvjcaQ: 18px;
  --gutenverse-font-weight-qvjcaQ: 500;
  --gutenverse-font-lineHeight-qvjcaQ: 1em;
  --gutenverse-font-family-u9A4vw: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-u9A4vw: 72px;
  --gutenverse-font-weight-u9A4vw: 500;
  --gutenverse-font-transform-u9A4vw: uppercase;
  --gutenverse-font-lineHeight-u9A4vw: 1.1em;
  --gutenverse-font-spacing-u9A4vw: 0.02em;
  --gutenverse-font-family-TC377z: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-TC377z: 64px;
  --gutenverse-font-weight-TC377z: 500;
  --gutenverse-font-lineHeight-TC377z: 1em;
  --gutenverse-font-spacing-TC377z: em;
  --gutenverse-font-family-KQK75i: "Plus Jakarta Sans";
  --gutenverse-font-size-KQK75i: 32px;
  --gutenverse-font-weight-KQK75i: 400;
  --gutenverse-font-lineHeight-KQK75i: 1.3em;
  --gutenverse-font-family-fx55kT: var(
    --wp--preset--font-family--founders-grotesk
  );
  --gutenverse-font-size-fx55kT: 16px;
  --gutenverse-font-weight-fx55kT: 500;
  --gutenverse-font-lineHeight-fx55kT: 1.3em;
}

@media only screen and (max-width: 1024px) {
  html body {
    --gutenverse-font-size-82lcQ2: 46px;
    --gutenverse-font-size-w6zxP6: 28px;
    --gutenverse-font-size-ICVEBp: 22px;
    --gutenverse-font-size-yAWFIy: 15px;
    --gutenverse-font-size-NR0jAz: 17px;
    --gutenverse-font-size-DCPs7I: 15px;
    --gutenverse-font-size-F2b8gX: 13px;
    --gutenverse-font-size-tn2xDm: 17px;
    --gutenverse-font-size-0U4VoL: 15px;
    --gutenverse-font-size-pwBV5I: 22px;
    --gutenverse-font-size-S9XiQ5: 13px;
    --gutenverse-font-size-0fKacR: 30px;
    --gutenverse-font-size-qvjcaQ: 17px;
    --gutenverse-font-size-u9A4vw: 56px;
    --gutenverse-font-size-TC377z: 56px;
    --gutenverse-font-size-KQK75i: 28px;
    --gutenverse-font-size-fx55kT: 15px;
  }
}

@media only screen and (max-width: 767px) {
  html body {
    --gutenverse-font-size-82lcQ2: 34px;
    --gutenverse-font-size-w6zxP6: 24px;
    --gutenverse-font-size-ICVEBp: 20px;
    --gutenverse-font-size-yAWFIy: 14px;
    --gutenverse-font-size-NR0jAz: 16px;
    --gutenverse-font-size-DCPs7I: 14px;
    --gutenverse-font-size-F2b8gX: 12px;
    --gutenverse-font-size-tn2xDm: 16px;
    --gutenverse-font-size-0U4VoL: 14px;
    --gutenverse-font-size-pwBV5I: 20px;
    --gutenverse-font-size-S9XiQ5: 12px;
    --gutenverse-font-size-0fKacR: 24px;
    --gutenverse-font-size-qvjcaQ: 16px;
    --gutenverse-font-size-u9A4vw: 45px;
    --gutenverse-font-size-TC377z: 48px;
    --gutenverse-font-size-KQK75i: 24px;
    --gutenverse-font-size-fx55kT: 14px;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Founders Grotesk global erzwingen – auf Property-Ebene.

   Greift direkt an den Elementen statt an den per-Block generierten
   --gutenverse-font-family-*-Variablen. Dadurch ist die Regel immun
   gegen das Neugenerieren der Variablen-Suffixe (passiert bei jeder
   Block-Bearbeitung im Editor) und gegen die Cascade-/Source-Order-
   Probleme von Gutenverse: !important schlägt jede Gutenverse-Deklaration
   unabhängig von Spezifität und Reihenfolge.

   Ausgenommen sind Icon-Fonts (gtnicon / Font Awesome / Dashicons / SVG),
   damit Icons nicht zu Kästchen werden.
   ────────────────────────────────────────────────────────────────────── */
html
  body
  :where(
    h1,
    h2,
    h3,
    h4,
    h5,
    h6,
    p,
    a,
    li,
    span,
    div,
    blockquote,
    cite,
    q,
    figcaption,
    caption,
    button,
    input,
    textarea,
    select,
    option,
    label,
    legend,
    table,
    th,
    td,
    dl,
    dt,
    dd,
    ul,
    ol,
    em,
    strong,
    b,
    u,
    small,
    mark,
    sub,
    sup,
    code
  ):not(svg):not(svg *):not(.guten-icon):not([class*="gtnicon"]):not(
    [class*="fa-"]
  ):not(.dashicons):not(.dashicons-before) {
  font-family: var(--wp--preset--font-family--founders-grotesk) !important;
}

/* ─────────────────────────────────────────────────────────────────────
   Projekt-Kacheln quadratisch (Aspect-Ratio 1/1).

   Die Regel war vorher auf .page-projects beschränkt – eine Body-Klasse,
   die assets/js/libs.js aus dem ersten Pfadsegment der URL setzt. Auf den
   Kategorieseiten (/bueros-und-verwaltung/, /visionen/, …) heißt die Klasse
   anders, dort griff die Regel deshalb nicht: die Kacheln liefen auf
   Inhaltshöhe (gemessen 585x485 statt 585x585).

   Jetzt seitenunabhängig über die Struktur der Kachel selbst: Wrapper mit
   Link (.with-url). Geprüft über alle 13 Seiten der Site – jeder
   .with-url-Wrapper ist genau so eine Projekt-Kachel (Wrapper mit
   Hintergrundbild + Icon-Box darin). Die Icon-Boxen z. B. auf
   /contact-us/ liegen nicht in einem .with-url-Wrapper und bleiben
   unberührt; die inneren Selektoren sind zusätzlich unter der Kachel
   verschachtelt.
   ──────────────────────────────────────────────────────────────────── */
.guten-column-wrapper
  .wp-block-gutenverse-wrapper.with-url:not(.background-animated),
.guten-column-wrapper
  .wp-block-gutenverse-wrapper.with-url
  .guten-element.guten-icon-box,
.guten-column-wrapper
  .wp-block-gutenverse-wrapper.with-url
  .guten-icon-box-wrapper.hover-from-left {
  aspect-ratio: 1/1 !important;
}

.guten-column-wrapper
  .wp-block-gutenverse-wrapper.with-url
  .guten-icon-box-wrapper.hover-from-left {
  display: flex;
  flex-direction: row; /* Default layout behavior */
  align-items: center; /* Centers elements vertically */
}

:not(.inline-icon-list) > .guten-icon-list-item:not(:last-child),
.guten-DQtz06
  > .list-wrapper:not(.inline-icon-list)
  > .guten-icon-list-item:not(:last-child) {
  padding-bottom: 0rem !important;
}

/* ──────────────────────────────────────────────────────────────────────
   Header/Menü transparent über dem Inhalt.

   Die Header-Section soll den darunterliegenden Hero überlappen. Gutenverse
   löst das mit einem negativen margin-bottom — und das muss exakt der
   Headerhöhe entsprechen, sonst bleibt ein Streifen der weissen Seitenfläche
   sichtbar oder der Inhalt rutscht zu weit hoch. Gemessen stimmten beide
   Werte nicht:

     Desktop  padding-bottom: -80px  (negatives Padding ist ungültig und wird
                                      verworfen → Header stand auf Weiss)
     Mobile   margin-bottom:  -72px  bei 75px Headerhöhe → 3px weisser Rand

   Statt die Zahlen je Breakpoint nachzupflegen, wird der Header hier ganz aus
   dem Fluss genommen. Dann entspricht die Überlappung immer genau seiner Höhe,
   unabhängig von Breakpoint, Padding oder Logogrösse. Bezug ist
   .guten-post-content, das bereits position: relative trägt.

   Selektor bewusst ohne die generierte guten-*-ID (die ändert sich bei
   Block-Bearbeitung): erste Section im Post-Content, die das Nav-Menü enthält.
   ────────────────────────────────────────────────────────────────────── */
.guten-post-content > .section-wrapper:first-child:has(.guten-nav-menu) {
  position: absolute;
  inset: 0 0 auto 0;
  z-index: 100;
}

/* Der negative Aussenabstand aus dem Block zieht jetzt nichts mehr nach oben,
   würde die Höhe des herausgelösten Kastens aber unter die des Headers
   drücken. Raus damit, damit Kasten und sichtbarer Header deckungsgleich
   bleiben. */
.guten-post-content
  > .section-wrapper:first-child
  > .wp-block-gutenverse-section:has(.guten-nav-menu) {
  margin-bottom: 0 !important;
}

/* Luft über Logo und Menü. Auf Tablet/Mobile bringt die Section schon 20px
   Innenabstand mit, auf Desktop steht er auf 0 — dort klebte das Logo sonst
   an der Oberkante des Bildes. */
@media only screen and (min-width: 1025px) {
  .guten-post-content
    > .section-wrapper:first-child
    > .wp-block-gutenverse-section:has(.guten-nav-menu) {
    padding-top: 24px !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Header-Logo als Link auf die Startseite (Markup: inc/logo-link.php).

   Das Logo ist kein Bild, sondern das Hintergrundbild 1_Zaeske.svg am
   Spalten-Wrapper, links oben, background-size: auto. Das SVG hat nur eine
   viewBox (534.05 × 842.89) und keine feste Grösse – der Browser skaliert es
   deshalb auf die Höhe der Fläche. Der Link übernimmt genau das: volle Höhe,
   Breite aus demselben Seitenverhältnis. Er deckt so auf jedem Breakpoint
   nur das Logo ab, nicht die ganze (viel breitere) Spalte.
   ────────────────────────────────────────────────────────────────────── */
.zaeske-logo-link {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1;
  height: 100%;
  aspect-ratio: 534.05 / 842.89;
}

/* Auf dem Handy ist das Logo nur rund 22 × 35px gross – zu knapp für den
   Finger. Unsichtbar 10px Trefferfläche ringsum (≈ 42 × 55px); um das Logo
   herum liegt nichts anderes Klickbares. */
.zaeske-logo-link::before {
  content: "";
  position: absolute;
  inset: -10px;
}

.zaeske-logo-link:focus-visible {
  outline: 2px solid #ffffff;
  outline-offset: 6px;
}

/* ──────────────────────────────────────────────────────────────────────
   Footer auf dem Handy: Adresse schob sich neben die KONTAKT-Spalte.

   Zwei Ursachen in der generierten Block-CSS der Footer-Section:

   1. Das seitliche Padding ist nur im Desktop-Breakpoint gesetzt
      (padding: 50px 100px 80px). Die Tablet-/Mobile-Overrides ändern
      ausschliesslich oben/unten, die 100px links/rechts bleiben stehen.
      Auf 375px Gerätebreite blieben so 175px Inhaltsbreite übrig —
      daher die harten Umbrüche mitten in Strasse und Telefonnummer.

   2. Die Spaltenbreiten ergeben unter 767px zusammen genau 100%:
      Menü-Spalten 53%, Adress-Spalte 47%. Im flex-wrap passt die
      Adresse damit noch auf die Zeile der KONTAKT-Spalte und stellt
      sich neben das Menü. (Auf Tablet stehen alle auf 50% — dort
      funktioniert das 2x2-Raster.)

   Beides wird hier auf Property-Ebene korrigiert: volle Breite für alle
   Spalten (die Menülisten sind zu lang für zwei Spalten auf 335px) und
   ein Padding, das zur Gerätebreite passt.

   Selektor bewusst ohne die generierte guten-*-ID: letzte Section im
   Post-Content. Die generierten Klassen sind seitenübergreifend identisch
   (gemeinsames Pattern), ändern sich aber bei jeder Block-Bearbeitung;
   deshalb der strukturelle Selektor.

   :last-of-type statt :last-child: auf der Startseite und 13 Projektseiten
   (z. B. /dernsche-hoefe-wiesbaden/) steht hinter dem Footer noch ein
   leerer Absatz-Block (<p class="wp-block-paragraph"></p>). Der Footer war
   dort nicht mehr das letzte Kind, keine der Footer-Regeln griff — auf dem
   Handy stand wieder die Adresse neben KONTAKT, mit 100px Seitenrand.
   :last-of-type zählt nur die <div>-Geschwister; der letzte davon ist auf
   allen Seiten der Footer (freistehende Überschriften sind <h1>, geprüft
   über alle Seiten der Site). Der leere Absatz selbst wird unten
   ausgeblendet.
   ────────────────────────────────────────────────────────────────────── */
/* Leere Absatz-Blöcke direkt im Post-Content (siehe oben: hinter dem
   Footer) tragen 19px Aussenabstand und verlängern die Seite unter dem
   Footer. Sauberer wäre, sie im Editor zu löschen. */
.guten-post-content > p:empty {
  display: none;
}

@media only screen and (max-width: 767px) {
  .guten-post-content
    > .section-wrapper:last-of-type
    > .wp-block-gutenverse-section {
    padding-left: 20px !important;
    padding-right: 20px !important;
  }

  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container
    > .guten-column {
    width: 100% !important;
  }

  /* Luft zwischen den untereinander stehenden Menüblöcken, sonst klebt
     die nächste Überschrift am letzten Listenpunkt darüber. */
  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container
    > .guten-column
    > .guten-column-wrapper {
    padding-bottom: 28px !important;
  }

  /* Abstand Überschrift → Inhalt. Aus dem Block kommen 24px unter jeder
     Footer-Überschrift; im Stapel untereinander ist das zu viel. */
  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container
    > .guten-column
    > .guten-column-wrapper
    > .wp-block-gutenverse-heading {
    margin-bottom: 12px !important;
  }

  /* Die Spalte KONTAKT enthält nur die Überschrift, die Adresse steht in der
     nächsten Spalte. Untereinander summierten sich deshalb die 24px der
     Überschrift und die 28px Spaltenabstand zu 52px — doppelt so viel wie bei
     den Menüspalten, wo direkt die Liste folgt. Die Spalte, deren letztes
     Element eine Überschrift ist, bekommt daher keinen Abstand nach unten. */
  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container
    > .guten-column
    > .guten-column-wrapper:has(> .wp-block-gutenverse-heading:last-child) {
    padding-bottom: 0 !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Portfolio-Gallery auf Tablet/Mobile: Kacheln untereinander.

   Der Block kennt keinen Mobile-Umbruch. Sowohl die Plugin-CSS
   (.row-item { flex: 0 0 25%; max-width: 25% }) als auch die pro Block
   generierte CSS (flex: 1 1 calc(25%)) setzen die vier Kacheln über alle
   Breiten hinweg nebeneinander. Auf 335px Inhaltsbreite bleiben 83px pro
   Kachel — die Kategorienamen sind dort nicht mehr lesbar. Der
   Demo-Aufbau hat die Spalten deshalb mit hide-tablet/hide-mobile
   versteckt, die Sektion fiel auf dem Handy komplett aus.

   Dazu kommt: die vier Bilder liegen als absolute Layer übereinander,
   sichtbar ist nur .current-item, umgeschaltet wird per mouseover
   (data-behavior="onhover"). Ohne Hover — also auf jedem Touchgerät —
   bleibt es beim ersten Bild.

   Lösung ohne Eingriff in Markup oder Plugin: der Container wird ein
   einspaltiges Raster, .content-items und .image-items lösen sich per
   display: contents auf. Danach liegen Text-Kachel n und Bild n in
   derselben Rasterzelle — jede Kategorie zeigt ihr eigenes Bild, ohne
   Interaktion. Die Zuordnung läuft über Named Areas, damit sich der
   Umbruch je Breakpoint über grid-template-areas ändern lässt.

   Zeilenhöhe 200px ist auf dem Handy der Kompromiss zwischen erkennbarem
   Bild und Scrolllänge (4 Kacheln x 2 Gruppen = ~1600px zusätzlich); auf
   Tablet steht sie auf 260px, siehe unten.

   Die erste Regel hebt hide-tablet/hide-mobile an den Gallery-Spalten
   auf, damit der Fix ohne Editor-Eingriff greift. Saubererer Endzustand:
   die beiden Klassen im Editor an den Spalten entfernen (Block →
   Advanced → Responsive), dann kann die erste Regel entfallen.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 1024px) {
  .wp-block-gutenverse-column.hide-mobile:has(.guten-portfolio-gallery),
  .wp-block-gutenverse-column.hide-tablet:has(.guten-portfolio-gallery) {
    display: flex !important;
    width: 100% !important;
  }

  .guten-portfolio-gallery .portfolio-gallery-container {
    display: grid !important;
    grid-template-areas: "a" "b" "c" "d";
    grid-template-columns: 1fr;
    grid-auto-rows: 200px;
  }

  .guten-portfolio-gallery .portfolio-gallery-container .content-items,
  .guten-portfolio-gallery .portfolio-gallery-container .image-items {
    display: contents !important;
  }

  .guten-portfolio-gallery
    .portfolio-gallery-container
    .content-items
    .row-item {
    flex: none !important;
    max-width: none !important;
    width: auto !important;
    height: auto !important;
    justify-content: flex-end !important;
    /* Die Trennlinie des Plugins steht rechts an jeder Kachel und trennt im
       vierspaltigen Desktop-Raster die Spalten. Untereinander gestapelt
       liegt sie an der falschen Kante und wird nicht gebraucht — die
       Kacheln grenzen sich über die Beschriftungsfläche voneinander ab. */
    border-right: 0 !important;
  }

  /* Bilder aus der absoluten Überlagerung zurück in den Fluss. */
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .image-items
    .image-item {
    position: relative !important;
    inset: auto !important;
    width: auto !important;
    height: 100% !important;
    opacity: 1 !important;
    transform: none !important;
    z-index: 1;
  }

  .guten-portfolio-gallery .portfolio-gallery-container .row-item:nth-child(1),
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .image-item:nth-child(1) {
    grid-area: a;
  }
  .guten-portfolio-gallery .portfolio-gallery-container .row-item:nth-child(2),
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .image-item:nth-child(2) {
    grid-area: b;
  }
  .guten-portfolio-gallery .portfolio-gallery-container .row-item:nth-child(3),
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .image-item:nth-child(3) {
    grid-area: c;
  }
  .guten-portfolio-gallery .portfolio-gallery-container .row-item:nth-child(4),
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .image-item:nth-child(4) {
    grid-area: d;
  }

  /* Der Hover-Vorhang (::after, scaleY) fährt auf Desktop eine Fläche in
     theme-2 hinter die Beschriftung. Ohne Hover blieb davon auf dem Handy
     nichts übrig; ein Verlauf als Ersatz war gegen hellen Himmel zu schwach,
     die Kategorienamen verschwanden im Bild. Statt dessen wird der Vorhang
     dauerhaft ausgefahren (scaleY(1)) — mobil sieht man damit denselben
     Zustand wie auf Desktop beim Hover, mit voller Deckung unter dem Text.
     Die Farbe steht hier explizit, weil die Deklaration aus der Block-CSS an
     der generierten guten-*-ID hängt und die sich bei jeder Block-Bearbeitung
     ändert. */
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .row-item
    .row-item-info {
    background: none !important;
    padding: 16px 20px !important;
    text-align: left !important;
  }
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .row-item
    .row-item-info:after {
    content: "" !important;
    background: var(--wp--preset--color--theme-2, #0e0e0e) !important;
    transform: scaleY(1) !important;
  }

  /* Weil der Vorhang dauerhaft ausgefahren ist, passiert beim Hovern nichts
     mehr — der Effekt des Plugins läuft über genau dieses scaleY. Statt
     dessen rückt der Textblock beim Hovern ins Bild hinein: der untere
     Innenabstand wächst, dadurch schiebt sich die Beschriftung nach oben
     und die dunkle Fläche (Höhe 100% des Textblocks) wächst mit ihr in das
     Bild. Gemessen 48px Weg, eine Bewegung statt eines Farbwechsels.

     Der Textblock sitzt über justify-content: flex-end an der Unterkante
     der Kachel; wächst seine Höhe, wandert die Oberkante nach oben, die
     Unterkante bleibt stehen — deshalb padding-bottom und nicht
     padding-top.

     :active ist mit drin, damit Touch-Geräte, die kein :hover auslösen,
     beim Antippen dieselbe Rückmeldung geben. */
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .row-item
    .row-item-info {
    transition: padding 0.45s cubic-bezier(0.22, 0.61, 0.36, 1) !important;
  }

  .guten-portfolio-gallery
    .portfolio-gallery-container
    .row-item:hover
    .row-item-info,
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .row-item:active
    .row-item-info {
    padding-bottom: 64px !important;
  }

  /* Die Spalte der Galerie trägt auf Desktop einen schwarzen Hintergrund; in
     den Tablet- und Mobile-Breakpoints steht dort theme-1 (weiss). Das fiel
     nie auf, solange die Spalte per hide-tablet/hide-mobile ausgeblendet war —
     seit sie sichtbar ist, stand die weisse Überschrift "Wohnen & Gewerbe" auf
     weissem Grund (unsichtbar) und darunter lag eine weisse Fläche, die es auf
     Desktop nicht gibt. Transparent statt schwarz, damit die Section-Farbe
     durchkommt. */
  .wp-block-gutenverse-column:has(.guten-portfolio-gallery)
    > .sticky-wrapper
    > .guten-column-wrapper,
  .wp-block-gutenverse-column:has(.guten-portfolio-gallery)
    > .guten-column-wrapper {
    background-color: transparent !important;
  }

  /* Die erste Galerie-Spalte ist als sticky angelegt (sticky-desktop). Im
     einspaltigen Stapel blieb "ÖFFENTLICH" dadurch am oberen Rand kleben und
     schob sich über die zweite Galerie. */
  .wp-block-gutenverse-column.guten-sticky:has(.guten-portfolio-gallery) {
    position: static !important;
  }

  /* 40px Innenabstand oben und unten plus 40px Aussenabstand zwischen den
     beiden Galerien ergaben im Stapel rund 150px Leerraum vor der nächsten
     Überschrift. */
  .wp-block-gutenverse-column:has(.guten-portfolio-gallery)
    > .sticky-wrapper
    > .guten-column-wrapper {
    padding-top: 24px !important;
    padding-bottom: 24px !important;
    margin-bottom: 0 !important;
  }

  .wp-block-gutenverse-column:has(.guten-portfolio-gallery)
    .wp-block-gutenverse-heading {
    padding: 0 0 20px !important;
  }
  .guten-portfolio-gallery .portfolio-gallery-container .row-item .info-title {
    color: #fff !important;
  }
}

/* Auf dem Tablet höhere Kacheln. Bei 200px Zeilenhöhe bleibt nach Abzug der
   Beschriftungsleiste ein rund 144px hoher Bildstreifen — auf 728px Breite
   ein Verhältnis von 5:1, in dem von den Aufnahmen nichts mehr zu erkennen
   ist. 260px bringen den Streifen auf etwa 204px und damit auf ein Format,
   das die Bilder trägt. */
@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .guten-portfolio-gallery .portfolio-gallery-container {
    grid-auto-rows: 260px;
  }
}

/* Auf dem Handy eine Stufe kleiner und mit knapperem Innenabstand: der
   längste Kategoriename ("Pflege- und Alteneinrichtung") braucht bei 20px
   rund 296px und lag damit auf einem 375px-Gerät exakt auf der Kante —
   gemessen 295px verfügbar, also Umbruch. Mit 18px/16px bleibt er bis
   ~360px Gerätebreite einzeilig; darunter bricht er auf zwei Zeilen, was
   die Kachel nach oben aufbaut und nichts abschneidet. */
@media only screen and (max-width: 767px) {
  /* Quadratische Kacheln: die Zeilenhöhe kommt nicht mehr als feste Zahl,
     sondern aus dem Seitenverhältnis der Kachel selbst. Damit bleibt sie
     an die Spaltenbreite gekoppelt (335px Inhaltsbreite auf einem
     375px-Gerät) und stimmt auf jeder Gerätebreite. Das Bild in derselben
     Rasterzelle zieht sich über die Standard-Streckung des Grids auf
     dieselbe Höhe. */
  .guten-portfolio-gallery .portfolio-gallery-container {
    grid-auto-rows: auto;
  }

  .guten-portfolio-gallery
    .portfolio-gallery-container
    .content-items
    .row-item {
    aspect-ratio: 1 / 1;
  }

  .guten-portfolio-gallery
    .portfolio-gallery-container
    .row-item
    .row-item-info {
    padding: 16px !important;
  }

  .guten-portfolio-gallery .portfolio-gallery-container .row-item .info-title {
    font-size: 18px !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Portfolio-Gallery: ganze Kachel klickbar, Pfeil ausgeblendet.

   Das Linkziel steckt nur im kleinen Pfeil unten in der Kachel
   (.row-link-wrapper > a > i.gtn-right-arrow-light). Statt das Markup
   umzubauen, spannt ein ::after am vorhandenen <a> eine Fläche über die
   ganze Kachel. Der Link bleibt ein echtes <a> — Cmd/Ctrl-Klick,
   Tastaturfokus und aria-label ("PFLEGE- UND ALTENEINRICHTUNG") arbeiten
   wie bisher.

   Bezug für position: absolute ist .row-item (position: relative aus der
   Plugin-CSS). Dazwischen darf nichts einen eigenen Containing Block
   bilden: der .row-link-wrapper trägt ein translateY für seine
   Einblend-Animation, und jede transform macht ein Element zum Bezug für
   absolut positionierte Kinder — die Fläche wäre dann nur so groß wie der
   Pfeilstreifen. Deshalb transform: none.

   Der Pfeil wird mit visibility statt display ausgeblendet, das <a>
   bleibt damit im Baum und trägt die Klickfläche. Im gestapelten
   Tablet-/Mobile-Layout wird der Wrapper zusätzlich auf Höhe 0 gesetzt
   (siehe unten).

   Der Hover-Wechsel der Bilder (data-behavior="onhover") läuft weiter:
   mouseover auf dem <a> blubbert zur .row-item hoch.
   ────────────────────────────────────────────────────────────────────── */
.guten-portfolio-gallery .portfolio-gallery-container .row-item .row-link-wrapper {
  transform: none !important;
}

.guten-portfolio-gallery
  .portfolio-gallery-container
  .row-item
  .row-link-wrapper
  i {
  visibility: hidden !important;
}

.guten-portfolio-gallery
  .portfolio-gallery-container
  .row-item
  .row-link-wrapper
  a::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 3;
}

/* Im Stapel unter 1024px liegt der Wrapper unter der Beschriftung und war
   mit 35px Höhe (10px Innenabstand + Pfeil) leer, aber transparent: unter
   der dunklen Fläche blieb ein Streifen des Kachelbilds stehen, der wie der
   Anfang des nächsten Bildes aussah (gemessen auf der Startseite bei
   375px: Beschriftung endet 35px über der Kachelkante). Ohne Höhe sitzt die
   Beschriftung bündig auf der Unterkante. Die Klickfläche hängt am ::after
   des <a> und richtet sich an .row-item aus, sie ist davon nicht betroffen. */
@media only screen and (max-width: 1024px) {
  .guten-portfolio-gallery
    .portfolio-gallery-container
    .row-item
    .row-link-wrapper {
    height: 0 !important;
    padding: 0 !important;
    overflow: visible !important;
  }
}

/* Der Fokusrahmen des Browsers sässe am unsichtbaren Pfeil; er wird
   stattdessen an die Kachelfläche gelegt. */
.guten-portfolio-gallery
  .portfolio-gallery-container
  .row-item
  .row-link-wrapper
  a:focus-visible {
  outline: none;
}

.guten-portfolio-gallery
  .portfolio-gallery-container
  .row-item
  .row-link-wrapper
  a:focus-visible::after {
  outline: 2px solid #ffffff;
  outline-offset: -4px;
}

/* ──────────────────────────────────────────────────────────────────────
   Hero-Headline auf dem Handy: Umbruch mitten im Wort
   ("GEDANKENVO/LLES", "LEBENSRÄUM/EN.").

   Ursache ist nicht der Umbruch selbst, sondern die fehlende Mobile-Größe:
   --gutenverse-font-size-cMRfTH ist die einzige Schriftgrößen-Variable in
   der Tabelle oben ohne Eintrag in den Breakpoint-Blöcken. Die Headline
   bleibt deshalb auch auf 375px bei 50px stehen — "GEDANKENVOLLES"
   braucht dort 432px bei 335px verfügbarer Breite. Weil die generierte
   Block-CSS word-break: break-word mitbringt, trennt der Browser dann
   hart im Wort statt umzubrechen.

   Genutzt wird cMRfTH nur von der Hero-Headline der Startseite
   (h3.guten-TIoyXh) — die Größe hier ist also keine globale Änderung.
   Bei 36px passt das längste Wort mit 311px in die Zeile, die Headline
   steht wieder auf vier Zeilen ohne Trennung. Tablet braucht keinen Wert:
   bei 768px stehen 698px zur Verfügung, dort bricht nichts.

   Dazu die Absicherung für alle Gutenverse-Headings: word-break: normal
   nimmt die harte Wortmitte-Trennung raus, hyphens: auto trennt statt
   dessen nach Silben. Das greift nur bei Wörtern, die ohnehin nicht in
   die Zeile passen, und funktioniert korrekt, weil das Dokument
   <html lang="de"> trägt (geprüft: "GEDANKEN-VOLLES", "ER-SCHAFFEN",
   "LEBENSRÄU-MEN"). overflow-wrap bleibt als letzte Instanz für Wörter,
   für die es keine Trennstelle gibt.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {
  html body {
    --gutenverse-font-size-cMRfTH: 36px;

    /* Die Zeilenhoehe kommt als absoluter Wert aus dem Gutenverse-Font-Scheme
       (65px). Auf Desktop passt das zu 50px Schriftgroesse (Faktor 1.3), auf
       dem Handy stehen die 65px aber neben 36px Schrift — Faktor 1.8, die vier
       Zeilen der Headline trieben dadurch weit auseinander. Relativer Wert,
       damit die Zeilenhoehe der Schriftgroesse folgt. */
    --gutenverse-font-lineHeight-cMRfTH: 1.15em;
  }

  .wp-block-gutenverse-heading {
    word-break: normal !important;
    -webkit-hyphens: auto !important;
    hyphens: auto !important;
    overflow-wrap: break-word !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Anfangsabstand in der ersten Zeile einer Section.

   Der Abstand nach oben soll aus dem Innenabstand der Section kommen. An
   drei Stellen bringt der Gutenverse-Spaltenwrapper zusätzlich 10px
   Aussenabstand mit, die Überschrift darin weitere 8px. Zwischen der
   freistehenden Überschrift "JOBS" und "BAUMANGEMENT (M/W/D) LPH 6-8"
   summierte sich das auf 66px (Handy), 82px (Tablet) und 88px (Desktop),
   während dieselbe Stelle unter "ARCHITEKTUR NEU DENKEN" ohne die Zugaben
   auskommt und nur den Innenabstand zeigt. Jetzt überall gleich.

   Der Aussenabstand wird für alle Spalten einer Zeile aufgehoben, nicht nur
   für die erste — nebeneinander stehende Spalten würden sonst um 10px
   gegeneinander versetzt beginnen. Die Galerie-Spalten sind nicht betroffen,
   ihr Wrapper hängt unter .sticky-wrapper und damit nicht direkt an der
   Spalte.
   ────────────────────────────────────────────────────────────────────── */
.guten-post-content .guten-container > .guten-column > .guten-column-wrapper {
  margin-top: 0 !important;
}

.guten-post-content
  .guten-column-wrapper
  > .wp-block-gutenverse-heading:first-child {
  margin-top: 0 !important;
}

/* ──────────────────────────────────────────────────────────────────────
   Vertikale Abstände auf dem Handy.

   Die Werte im Block sind für Desktop gesetzt und werden in den
   Mobile-Breakpoints nicht angefasst:

     Inhalts-Sections   80px oben/unten
     "wir benötigen …"  200px oben
     freistehende H1    200px oben ("ARCHITEKTUR NEU DENKEN", "JOBS")

   Auf 1440px Bildhöhe ist das stimmig, auf 812px ergaben allein die 200px
   plus die 80px der folgenden Section rund 360px Leerraum am Stück — die
   Seite zerfiel in Blöcke ohne erkennbaren Zusammenhang. Einheitlich 48px
   für alle Sections und die freistehenden Überschriften.

   Der Abstand liegt dabei allein auf der Oberkante, unten steht 0. Sonst
   addieren sich zwei benachbarte Sections: zwischen zwei Bildreihen kämen
   48px unten plus 50px Aussenabstand der Spalten plus 48px oben zusammen.
   Auf Desktop sind es dort 50px, weil die Sections der Bildreihen oben und
   unten auf 0 stehen und nur die erste einen Vorlauf bekommt — mit dem
   Abstand nur oben bleibt dieser Aufbau erhalten. Der Footer bekommt seinen
   unteren Abstand ausdrücklich zurück, sonst klebt das Logo an der
   Unterkante. Auf Tablet läuft dasselbe Muster mit 64px (siehe unten).

   Ausgenommen sind der Header (20px, liegt ausserdem absolut über dem
   Inhalt) und der Hero, dessen Headline über align-bottom am unteren Rand
   sitzt und durch Innenabstand nach oben rutschen würde.

   Der Hero wird über genau diese Klasse erkannt und nicht über seine
   Position: die Kontaktseite hat gar keinen Hero, dort steht an zweiter
   Stelle die Formular-Section. Über die Position ausgenommen behielt sie
   ihre Desktop-Werte (120px oben, 80px unten). align-bottom trägt auf allen
   acht Seiten der Site genau eine Section, immer der Hero — geprüft über
   Startseite, /projects/, /bueros-und-verwaltung/,
   /pflege-und-alteneinrichtung/, /wohnen-und-freizeit/, /visionen/,
   /about-us/ und /contact-us/.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {
  .guten-post-content
    > .section-wrapper:not(:first-child)
    > .wp-block-gutenverse-section:not(.align-bottom) {
    padding-top: 48px !important;
    padding-bottom: 0 !important;
  }

  .guten-post-content > .wp-block-gutenverse-heading {
    padding-top: 48px !important;
  }

  /* :not(.align-bottom) steht hier nur der Spezifität wegen mit: ohne den
     Zusatz wiegt die Regel oben schwerer und der Footer bliebe unten auf 0. */
  .guten-post-content
    > .section-wrapper:last-of-type
    > .wp-block-gutenverse-section:not(.align-bottom) {
    padding-bottom: 48px !important;
  }

  /* Die Spaltenabstände des zweispaltigen Desktop-Rasters (je 15px zur
     Mitte, an manchen Stellen 10px) bleiben in den Mobile-Breakpoints
     stehen. Im einspaltigen Stapel wechseln sie dadurch von Zeile zu Zeile
     die Seite, die Bilder standen treppenförmig gegeneinander versetzt.
     Der seitliche Abstand kommt auf dem Handy allein aus dem Innenabstand
     der Section (20px). */
  .guten-post-content .guten-column-wrapper {
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Beschreibungstexte auf dem Handy.

   Die Fliesstexte der Über-Zaeske-, Projekt- und Startseite ("Wir
   Architekten philosophieren …", "Gemeinsam mit dem Neubau …") tragen
   ihre Grösse als Inline-Style des Absatz-Blocks (font-size:24px, je nach
   Seite mit line-height:1.3, 1.5 oder ohne) und bleiben damit auch bei
   335px Zeilenbreite auf 24px — rund 28 Zeichen pro Zeile. 1.25rem (20px)
   bringt sie auf ~34 Zeichen.

   Ausgenommen sind die anderen 24px-Absätze: die Bildunterschriften und
   Partnernamen (immer mit line-height:2.5) und die Projektdaten in der
   angehefteten Spalte der Projektseiten (BAUHERR / STANDORT / …, nur
   font-size:24px, aber in .guten-sticky). Adressiert über den
   Inline-Wert, weil die Absätze sonst keine eigene Klasse tragen
   (gleiche Technik wie bei den Bildunterschriften unten).
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {
  .guten-post-content
    p[style*="font-size:24px"]:not([style*="line-height:2.5"]):not(
      .guten-sticky p
    ) {
    font-size: 1.25rem !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Einleitungstext der Projektseiten auf dem Handy ("Mit den Dern’schen
   Höfen entstand …", "… befindet sich die neu geplante Kindertagesstätte").

   Der Text-Editor-Block steht auf 60px / 65px Zeilenhöhe, ohne Werte für
   Tablet oder Handy. Auf 335px Zeilenbreite passten damit rund zehn
   Zeichen in die Zeile; dazu bringt die Plugin-CSS word-break: break-word
   mit, lange Wörter brachen hart mitten im Wort um
   ("Kindertagesst/ätte", "Marktkircheng/emeinde").

   32px auf dem Handy, Zeilenhöhe relativ wie bei der Hero-Headline. Statt
   der harten Trennung Silbentrennung wie bei den Überschriften (html
   lang="de").

   guten-okNfdZ ist die generierte ID des Blocks. Sie ist auf 32 der 34
   Projektseiten dieselbe (die Seiten stammen aus einer Vorlage; die
   beiden übrigen, /infobox-hephata-schwalmstadt/ und
   /wohnbebauung-wilma-hofheim/, haben keinen Einleitungstext) und kommt
   sonst nirgends vor. Wird
   der Block auf einer Seite neu angelegt, muss die ID dort nachgezogen
   werden.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {
  .guten-post-content .gutenverse-text-editor.guten-okNfdZ {
    font-size: 32px !important;
    line-height: 1.15 !important;
  }

  .guten-post-content .gutenverse-text-editor.guten-okNfdZ .text-content-inner {
    word-break: normal !important;
    -webkit-hyphens: auto;
    hyphens: auto;
    overflow-wrap: break-word;
  }
}

/* Die Bildunterschriften der Projekte tragen als Inline-Style
   line-height: 2.5 — auf Desktop stehen sie einzeilig, die Zeilenhöhe wirkt
   dort nur als Abstand zum Bild. Sobald sie umbrechen, reissen die 60px
   Zeilenabstand sie auseinander: auf dem Handy bei 335px Breite, auf Tablet
   bei 364px Spaltenbreite (z. B. "THEATER WARTBURG, WIESBADEN"). Deshalb
   für beide Breakpoints. Adressiert über den Inline-Wert, weil die Absätze
   sonst keine eigene Klasse tragen. */
@media only screen and (max-width: 1024px) {
  .guten-post-content .guten-column-wrapper > p[style*="line-height:2.5"] {
    line-height: 1.25 !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Vertikale Abstände auf dem Tablet.

   Dieselbe Ursache wie auf dem Handy, nur mit anderen Zahlen: der
   Tablet-Breakpoint der Block-CSS setzt die Inhalts-Sections auf 100px oben
   und unten, die beiden Trenner-Sections und die freistehenden H1 behalten
   ihre 200px von Desktop. Zwischen zwei aufeinanderfolgenden Bildreihen
   standen damit 200px plus die 50px Aussenabstand der Spalten — auf Desktop
   sind es dort 50px, weil die Sections der Bildreihen oben und unten auf 0
   stehen und nur die erste einen Vorlauf von 70px bekommt.

   Gleicher Aufbau wie im Mobile-Block oben, nur mit 64px statt 48px: der
   Abstand liegt allein auf der Oberkante, dann addieren sich zwei
   benachbarte Sections nicht mehr. Die Bildreihen lesen sich wieder als ein
   zusammenhängender Block, und vor den Trenner-Überschriften bleibt
   trotzdem Luft. Der Footer bekommt seinen unteren Abstand zurück, sonst
   klebt das Logo an der Unterkante.

   Ausgenommen sind wie auf dem Handy der Header und der Hero (.align-bottom).
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .guten-post-content
    > .section-wrapper:not(:first-child)
    > .wp-block-gutenverse-section:not(.align-bottom) {
    padding-top: 64px !important;
    padding-bottom: 0 !important;
  }

  .guten-post-content > .wp-block-gutenverse-heading {
    padding-top: 64px !important;
  }

  /* :not(.align-bottom) wie im Mobile-Block nur der Spezifität wegen. */
  .guten-post-content
    > .section-wrapper:last-of-type
    > .wp-block-gutenverse-section:not(.align-bottom) {
    padding-bottom: 64px !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Footer auf dem Handy: Block zentriert, Text linksbündig.

   Die sechs Spalten stehen im einspaltigen Stapel alle auf voller Breite
   (335px) und damit an der linken Kante. Gewünscht ist der Block als
   Ganzes mittig, der Text darin aber weiterhin linksbündig — also ein
   Container, der nur so breit ist wie seine breiteste Zeile ("Pflege- und
   Altereinrichtung", 200px) und mit auto-Rändern zentriert wird.

   width: fit-content allein reicht dafür nicht: der Container ist ein
   Flex-Container mit flex-wrap, und dessen Intrinsic-Breite ist die Summe
   aller Spalten (als stünden sie nebeneinander), also die volle Breite.
   Dasselbe gilt eine Ebene tiefer für den Spalten-Wrapper (Überschrift
   105px + Liste 200px = 305px). Mit flex-direction: column auf beiden ist
   die Intrinsic-Breite die der breitesten Zeile; am Stapel selbst ändert
   das nichts, die Kinder stehen ohnehin auf 100%.

   Nur auf dem Handy — auf dem Tablet stehen die Spalten im Raster (siehe
   unten), auf Desktop im Sechser-Raster.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {
  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container.guten-column-gap-no {
    flex-direction: column;
    width: fit-content !important;
    max-width: 100%;
    margin-left: auto !important;
    margin-right: auto !important;
  }

  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container.guten-column-gap-no
    .guten-column-wrapper {
    flex-direction: column;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Footer auf dem Tablet.

   Die Section behält zwischen 768px und 1024px das seitliche Padding des
   Desktops (100px links und rechts) — die Tablet-Overrides der Block-CSS
   setzen nur oben/unten. Von 768px Gerätebreite blieben damit 568px Inhalt
   übrig, rechts stand eine leere Fläche.

   Dazu kommt das Spaltenraster: die vier Menüspalten stehen auf 50%, die
   Adress-Spalte ebenfalls. Im flex-wrap ergibt das die Zeilen

     [HOME | PROJEKTE]  [ÜBER ZAESKE | KONTAKT]  [Adresse]  [Logo]

   — die Überschrift KONTAKT stand ohne Inhalt in der zweiten Zeile, ihre
   Adresse allein in der dritten und dort direkt unter der Leistungen-Liste.
   Mit einem Drittel Breite je Spalte wird daraus

     [HOME | PROJEKTE | ÜBER ZAESKE]  [KONTAKT | Adresse]  [Logo]

   also dieselbe Lesereihenfolge wie auf Desktop, wo die Adresse neben der
   KONTAKT-Spalte steht. Die Logo-Spalte bleibt über die volle Breite; sie
   wird über ihren Inhalt adressiert (einzige Spalte mit Bild-Block), nicht
   über die generierte guten-*-ID.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .guten-post-content
    > .section-wrapper:last-of-type
    > .wp-block-gutenverse-section {
    padding-left: 40px !important;
    padding-right: 40px !important;
  }

  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container
    > .guten-column {
    width: 33.333% !important;
  }

  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container
    > .guten-column:has(.wp-block-gutenverse-image) {
    width: 100% !important;
  }

  /* Spaltenabstand nach rechts und Luft zwischen den Zeilen — beides ist
     im Block nur für Desktop gesetzt (80px bzw. gar nicht). */
  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container
    > .guten-column
    > .guten-column-wrapper {
    padding-right: 24px !important;
    padding-bottom: 40px !important;
  }

  /* Wie auf dem Handy: 24px unter den Footer-Überschriften sind zu viel. */
  .guten-post-content
    > .section-wrapper:last-of-type
    .guten-container
    > .guten-column
    > .guten-column-wrapper
    > .wp-block-gutenverse-heading {
    margin-bottom: 12px !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Seitenhintergrund.

   html und body tragen keine Farbe — sichtbar wird dahinter das Weiss des
   Browsers. Jede Section malt ihren eigenen Hintergrund, deshalb fiel das
   lange nicht auf. Zwei Stellen lassen es aber durch:

   1. Die Footer-Section bringt margin-top: 1px mit (Wert aus dem Block).
      Der 1px hohe Spalt zwischen vorletzter Section und Footer zeigte eine
      weisse Haarlinie über die volle Breite — unter der eingerückten Karte
      auf der Kontaktseite las sie sich als Rahmenkante.
   2. Die Section der Karte hat als einzige keine eigene Hintergrundfarbe.

   Ein dunkler Seitenhintergrund in der Farbe der Sections schliesst beide
   Lücken. Punkt 2 ist zusätzlich unten noch einmal an der Section selbst
   gesetzt, damit die Karte nicht davon abhängt, welche Farbe die Seite
   gerade trägt.
   ────────────────────────────────────────────────────────────────────── */
html,
body {
  background-color: var(--wp--preset--color--theme-2, #0e0e0e);
}

/* ──────────────────────────────────────────────────────────────────────
   Karte auf der Kontaktseite (Handy und Tablet).

   Die Section der Karte steht seitlich auf 0 — auf Desktop ist die Karte
   randlos gewollt. Untereinander gestapelt lief sie dadurch von Kante zu
   Kante, während Adresse, Kontakt und E-Mail darüber 20px eingerückt sind:
   die Karte stand als einziger Block über die Satzkante hinaus.

   Der Abstand nach oben kommt aus dem Innenabstand der Section und liegt
   auf Tablet bei den 64px aller anderen Sections. Auf dem Handy steht er
   auf 80px: die Karte ist der einzige helle Block der Seite und braucht
   nach der dunklen Adressspalte mehr Vorlauf als eine Textsection.

   Adressiert über den Inhalt (die Section, die die Karte enthält), nicht
   über die generierte guten-*-ID. Das :not(.align-bottom) steht nur der
   Spezifität wegen mit — ohne den Zusatz wiegt die allgemeine
   Sektionsabstands-Regel schwerer und der Wert oben käme nicht durch.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 1024px) {
  .guten-post-content
    > .section-wrapper
    > .wp-block-gutenverse-section:has(.cicero-maplibre) {
    padding-left: 20px !important;
    padding-right: 20px !important;
    /* Die Section der Karte ist die einzige der Seite ohne eigene
       Hintergrundfarbe — Formular, Adresse und Footer stehen alle auf
       theme-2. Randlos fiel das nicht auf, weil die Karte die Fläche
       vollständig ausfüllte. Sobald sie eingerückt ist, scheint in Rand und
       Vorlauf der weisse Seitenhintergrund durch (html und body tragen
       keine Farbe). Deshalb dieselbe Farbe wie bei den Nachbarn. */
    background-color: var(--wp--preset--color--theme-2, #0e0e0e) !important;
  }
}

@media only screen and (max-width: 767px) {
  .guten-post-content
    > .section-wrapper
    > .wp-block-gutenverse-section:not(.align-bottom):has(.cicero-maplibre) {
    padding-top: 80px !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Bildspalten auf /about-us/, die im Editor auf „Auf Mobilgerät
   ausblenden" stehen.

   Die Spalten tragen wp-block-hidden-mobile und damit display: none —
   eine Einstellung am Block, nicht aus dieser Datei. Auf dem Handy fielen
   dadurch drei Bilder ersatzlos aus, darunter das Teamfoto:

     „VON Häusern und menschen."      langen.jpg
     „DREI GENERATIONEN."             DSC_2641 (Teamfoto)
     „VERANTWORTUnG mit bestand."     200H8_web

   Sie werden hier wieder eingeblendet und laufen im Stapel über die volle
   Breite. Auf Tablet waren sie ohnehin sichtbar.

   Bedingung ist ein Bild in der Spalte: die beiden übrigen Spalten mit
   derselben Klasse (auf /about-us/ unter „HISTORIE", auf /contact-us/ in
   der Formular-Section) sind leer und bleiben ausgeblendet — eingeblendet
   wären sie nur eine Lücke. Über alle zwölf Seiten der Site geprüft, mehr
   Spalten mit dieser Klasse gibt es nicht.

   Sauberer Endzustand wäre, den Schalter im Editor zu entfernen (Block →
   Erweitert → Responsive); dann kann diese Regel entfallen.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {
  .guten-post-content
    .wp-block-gutenverse-column.wp-block-hidden-mobile:has(
      figure.wp-block-image
    ) {
    display: flex !important;
    width: 100% !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Teambild neben dem Kontaktformular.

   Die Spalte steht im Editor auf „Auf Mobilgerät ausblenden" und „Auf
   Tablet ausblenden" (wp-block-hidden-mobile / -tablet). Der Block selbst
   ist für beide Breiten längst eingerichtet — die generierte CSS bringt
   unter 1024px Höhe 380px, volle Spaltenbreite und eigene Aussenabstände
   mit. Es fehlte nur das Einblenden.

   Dazu die Reihenfolge: beide Spalten der Section stehen auf order: 1, im
   Stapel landete damit das Formular oben und klebte direkt unter dem
   Logo — der Header liegt absolut über dem Inhalt. Mit order: 0 steht das
   Bild darüber und trägt den Abstand.

   Adressiert über den Inhalt statt über die generierte guten-*-ID: die
   Section mit dem Formular, darin die ausgeblendete Spalte. Über alle
   zwölf Seiten der Site geprüft — das trifft genau diese eine Spalte, ein
   Formular gibt es nur auf der Kontaktseite.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 1024px) {
  .guten-post-content
    .wp-block-gutenverse-section:has(form)
    .wp-block-gutenverse-column.wp-block-hidden-mobile.wp-block-hidden-tablet {
    display: flex !important;
    order: 0 !important;
  }

  /* Der Header liegt absolut über dem Inhalt und ist 75px hoch. Mit dem
     allgemeinen Sektionsabstand von 48px begann das Bild darunter — das
     Logo lag auf der oberen Bildkante. 100px setzen die Oberkante 25px
     unter den Header.

     .guten-section steht im Selektor nur der Spezifität wegen: ohne die
     zusätzliche Klasse wiegt die allgemeine Sektionsabstands-Regel
     schwerer und zieht den Wert zurück auf 48px. */
  .guten-post-content
    > .section-wrapper
    > .wp-block-gutenverse-section.guten-section:not(.align-bottom):has(form) {
    padding-top: 100px !important;
  }
}

/* Seitenverhältnis des Teambilds auf Tablet.

   Die Aufnahme ist hochkant (5300 x 8256, Verhältnis 0.64). Der Block gibt
   auf Tablet 380px Höhe über die volle Spaltenbreite vor — 713 x 380, also
   ein Querformat von 1.88. background-size: cover zeigte davon nur rund ein
   Fünftel der Bildhöhe, egal ob mittig oder von oben ausgerichtet: die
   Gruppe war immer angeschnitten.

   Auf dem Handy stimmt es, weil die Kachel dort 335 x 380 misst und damit
   0.88 — nah genug am Hochformat, es bleiben gut 70% der Bildhöhe sichtbar.
   Tablet bekommt jetzt dasselbe Verhältnis: 500 x 560 (0.89), mittig in der
   Spalte. Damit steht die Gruppe vollständig im Bild, in derselben
   Ausschnittslage wie auf dem Handy.

   Die Ausrichtung bleibt deshalb mittig. Von der Oberkante her (center top)
   würde der Ausschnitt jetzt unten die Füsse abschneiden — die Korrektur am
   Verhältnis erledigt, wofür center top gedacht war.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .guten-post-content
    .wp-block-gutenverse-section:has(form)
    .wp-block-gutenverse-column.wp-block-hidden-mobile
    .wp-block-gutenverse-wrapper {
    height: 560px !important;
    max-width: 500px !important;
    margin-left: auto !important;
    margin-right: auto !important;
    background-position: center center !important;
  }
}

/* Bild so hoch wie das Formular (Desktop).

   Der Block gibt dem Bild-Wrapper eine feste Höhe von 698px. Die
   Formularbox daneben ist aber 737px hoch (bei 1025px Breite 758px) und
   wächst mit, sobald Fehlermeldungen erscheinen — das Bild endete dadurch
   sichtbar vor der Box.

   Jetzt bestimmt das Formular die Zeilenhöhe, das Bild streckt sich mit.
   align-self allein reicht nicht: der Spalten-Wrapper bricht um (flex-wrap)
   und steht auf align-content: flex-start, die Zeile wäre sonst nur so hoch
   wie der Inhalt des Bild-Wrappers (sein Padding, 80px).

   contain statt cover, auf Schwarz: Das Bild (Logo, 591 x 709) hat einen
   rein schwarzen Grund. Wird das Formular höher, wächst nur der schwarze
   Rand, der Schriftzug bleibt gleich gross und nie seitlich angeschnitten —
   mit cover wäre er bei hohem Formular grösser skaliert und beschnitten
   worden.

   Tablet und Handy stapeln die Spalten, dort gelten die Regeln oben.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (min-width: 1025px) {
  .guten-post-content
    .wp-block-gutenverse-section:has(form)
    .wp-block-gutenverse-column.wp-block-hidden-mobile
    > .guten-column-wrapper {
    align-content: stretch !important;
  }

  .guten-post-content
    .wp-block-gutenverse-section:has(form)
    .wp-block-gutenverse-column.wp-block-hidden-mobile
    .wp-block-gutenverse-wrapper {
    height: auto !important;
    align-self: stretch !important;
    background-size: contain !important;
    background-color: #000 !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Projektdaten auf den Projektseiten (BAUHERR / STANDORT / BGF /
   FERTIGSTELLUNG).

   Die Spalte ist als sticky angelegt (sticky-desktop, top: 80px, z-index:
   99) und bleibt beim Scrollen stehen, während der Inhalt daneben
   weiterläuft. Sie hat keinen eigenen Hintergrund — was unter ihr
   durchläuft, steht damit hinter ihrem Text.

   Die Farbe ist der Hintergrund der Section, in der die Spalte sitzt
   (#010101, gemessen auf den Projektseiten). Sie muss mitgezogen werden,
   falls sich die Sectionfarbe ändert, sonst zeichnet sich die Spalte als
   Rechteck ab.

   Ohne Breakpoint. Die Regel stand zunächst nur ab 1025px, in der Annahme,
   dass die Spalte darunter nicht angeheftet wird. Gutenverse entscheidet
   das aber nicht über die Viewport-Breite, sondern über window.screen.width
   (getDevice in essential/profrontend.js: > 1024 = Desktop), und die
   Sticky-Option ist nur für Desktop gesetzt. Ein Handy meldet dort seine
   Gerätebreite und heftet nicht an — ein schmal gezogenes Browserfenster
   oder DevTools ohne volle Geräte-Emulation meldet dagegen die
   Monitorbreite, Gutenverse hält das für Desktop und pinnt die Spalte
   bei 375px Viewport. Im einspaltigen Stapel läuft der Beschreibungstext
   dann direkt unter der Spalte durch und schien durch (gemessen bei
   375px, screen.width 2560). Die Media Query griff in dem Fall nicht.
   Im Fluss (nicht gepinnt) ist Schwarz auf Schwarz unsichtbar, die Regel
   kostet dort nichts.

   Der Pseudo-Block deckt zusätzlich den Streifen zwischen Viewport-
   Oberkante und der Spalte (top: 80px, von der Gutenverse-JS gesetzt),
   der beim Stapel sonst ebenfalls den durchlaufenden Text zeigt. Auf
   Desktop liegt er neben dem Text und ist wirkungslos. Nur im gepinnten
   Zustand, damit er im Fluss nicht über die vorherige Section ragt.

   Die Galerie-Spalten der Startseite tragen dieselben Klassen, stehen im
   Handy-Breakpoint aber auf position: static (siehe oben). Ein absolut
   gesetzter Pseudo-Block würde sich dort am .guten-container ausrichten
   und 120px über die vorherige Section malen (gemessen) — deshalb
   ausgenommen. Der Hintergrund selbst ist für sie unkritisch: ihre
   Section ist ebenfalls schwarz (#000, gemessen).
   ────────────────────────────────────────────────────────────────────── */
.guten-post-content .wp-block-gutenverse-column.guten-sticky {
  background-color: #010101;
}

.guten-post-content
  .wp-block-gutenverse-column.guten-sticky.pinned:not(
    :has(.guten-portfolio-gallery)
  )::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 100%;
  height: 120px;
  background-color: #010101;
}

/* ──────────────────────────────────────────────────────────────────────
   Über Zaeske (/ueber-zaeske/): Abstände innerhalb der Sections auf Handy
   und Tablet.

   Die Regeln oben normieren nur die Sections auf oberster Ebene (48px
   Handy, 64px Tablet, Abstand allein von oben). Auf dieser Seite sitzen
   die Unterabschnitte HALTUNG / HISTORIE / NACHHALTIGKEIT aber innerhalb
   einer einzigen Section und halten ihren Abstand über eigene
   Desktop-Werte, die in den Breakpoints stehen bleiben (gemessen bei
   375px und 768px):

     HALTUNG → HISTORIE           150px  (innere Section guten-uqul6u)
     HISTORIE → NACHHALTIGKEIT    150px  (Spalten-Wrapper guten-4r5seY)
     NACHHALTIGKEIT → PARTNER     150px + 48/64px der folgenden Section
     PARTNER-Label → Bilder        80px  (Spalten-Wrapper guten-aaOPbi)
     Leistungen-Box              80/100px oben, 130px + 40px unten

   Auf Desktop stehen 150px zwischen den Unterabschnitten und 170px
   zwischen den Sections — praktisch derselbe Schritt. Hier deshalb
   derselbe Wert wie für die Sections: 48px auf dem Handy, 64px auf dem
   Tablet, und jeder Abstand nur einmal. Der letzte Unterabschnitt
   (NACHHALTIGKEIT) bekommt unten 0, der Abstand zu PARTNER kommt aus
   dem Section-Padding. Die Label-Überschriften (HALTUNG, HISTORIE,
   PARTNER) stehen damit überall rund 50–60px über ihrem Inhalt.

   Die Block-IDs sind die generierten Gutenverse-Klassen dieser Seite;
   werden die Blöcke im Editor neu angelegt, müssen sie nachgezogen
   werden.

   Die Seite wird über .page-id-62 angesprochen, nicht über den Slug.
   libs.js setzt zwar page-<slug> als Body-Klasse, aber seit /about-us/
   auf /ueber-zaeske/ umbenannt wurde, griff keine der .page-about-us-
   Regeln mehr: Die Accordion-Titel liefen auf dem Handy mit 32px, die
   Seite wurde 552px statt 375px breit. Die ID-Klasse setzt WordPress
   selbst, sie bleibt bei jeder Umbenennung gleich.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {
  .page-id-62 .guten-post-content {
    --zaeske-block-gap: 48px;
    --zaeske-accordion-gap: 24px;
    --zaeske-accordion-pad: 20px;
  }
}

@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .page-id-62 .guten-post-content {
    --zaeske-block-gap: 64px;
    --zaeske-accordion-gap: 32px;
    --zaeske-accordion-pad: 24px;
  }
}

@media only screen and (max-width: 1024px) {
  /* HALTUNG → HISTORIE, HISTORIE → NACHHALTIGKEIT */
  .page-id-62 .guten-post-content .guten-uqul6u.guten-section,
  .page-id-62 .guten-post-content .guten-4r5seY > .guten-column-wrapper {
    padding-bottom: var(--zaeske-block-gap) !important;
  }

  /* NACHHALTIGKEIT ist der letzte Unterabschnitt; die 48/64px zu PARTNER
     kommen aus dem Padding der PARTNER-Section. */
  .page-id-62 .guten-post-content .guten-mXO2rh > .guten-column-wrapper {
    padding-bottom: 0 !important;
  }

  /* PARTNER-Label: 80px plus 10px Spalten-Padding plus 10px
     Überschriften-Abstand ergaben 100px (Tablet) bzw. 80px (Handy) bis zu
     den Bildern; HALTUNG und HISTORIE stehen 50–70px über ihrem Inhalt. */
  .page-id-62 .guten-post-content .guten-aaOPbi > .guten-column-wrapper {
    padding-bottom: 30px !important;
  }

  /* Leistungen-Box (dunkelgraue Section): oben und unten derselbe Schritt
     wie zwischen den Sections. Der untere Wert stand auf 130px plus dem
     Aussenabstand des letzten Accordion-Elements (160–170px), oben auf
     80px (Handy) bzw. 100px (Tablet). */
  .page-id-62 .guten-post-content .guten-jwOFKz.guten-section {
    padding-top: var(--zaeske-block-gap) !important;
    padding-bottom: var(--zaeske-block-gap) !important;
  }

  /* Überschrift "UNSERE LEISTUNGEN" → erstes Accordion: 40px Wrapper plus
     30/60px Überschriften-Abstand (70px Handy, 100px Tablet). Jetzt ein
     Wert, derselbe Schritt. */
  .page-id-62 .guten-post-content .guten-tc1vlN > .guten-column-wrapper {
    padding-bottom: 0 !important;
  }

  .page-id-62 .guten-post-content .guten-D7w88M {
    margin-bottom: var(--zaeske-block-gap) !important;
  }

  /* Accordion: halber Schritt zwischen den Elementen (Desktop 40px, Handy
     stand auf 30px, Tablet auf 40px); das letzte ohne Aussenabstand, damit
     unten allein das Section-Padding steht. Der Kopf hatte auf dem Tablet
     20px oben und 12px unten — die Zeile sass sichtbar zu hoch in ihrem
     Kasten. Oben und unten derselbe Wert, und der aufgeklappte Text
     schliesst unten mit demselben Wert ab wie der Kopf. */
  .page-id-62 .guten-post-content .guten-8e33jV .accordion-item {
    margin-bottom: var(--zaeske-accordion-gap) !important;
  }

  .page-id-62 .guten-post-content .guten-8e33jV .accordion-item:last-child {
    margin-bottom: 0 !important;
  }

  .page-id-62 .guten-post-content .guten-8e33jV .accordion-heading {
    padding-top: var(--zaeske-accordion-pad) !important;
    padding-bottom: var(--zaeske-accordion-pad) !important;
  }

  .page-id-62 .guten-post-content .guten-8e33jV .accordion-content {
    padding-top: 0 !important;
    padding-bottom: var(--zaeske-accordion-pad) !important;
  }

  /* Accordion-Kopf auf dem Handy: BRANDSCHUTZGUTACHTEN, BAUSCHADENS-
     GUTACHTEN und SICHERHEITSKOORDINATION sind ein Wort. Bei 20px mit
     1,6px Laufweite braucht BRANDSCHUTZGUTACHTEN 284px, neben dem Icon
     stehen im Kasten aber 243px (gemessen bei 375px). Der Titel ist ein
     Flex-Kind mit min-width: auto und kann nicht unter seine Wortbreite
     schrumpfen; das Icon dagegen darf schrumpfen (flex-shrink: 1) und
     wurde aus dem Kasten geschoben.

     min-width: 0 lässt den Titel umbrechen, hyphens: auto trennt dabei
     nach Silben statt an beliebiger Stelle (funktioniert mit
     <html lang="de">, siehe die Heading-Regel oben). Allein damit nimmt
     der Browser aber die letzte Trennstelle, die noch in die Zeile passt
     (BRANDSCHUTZGUT-ACHTEN, SICHERHEITSKOORDI-NATION). text-wrap: balance
     wählt stattdessen die Trennstelle mit den gleichmässigsten Zeilen —
     bei diesen Komposita ist das die Wortfuge (BRANDSCHUTZ-GUTACHTEN,
     BAUSCHADENS-GUTACHTEN, SICHERHEITS-KOORDINATION). Einzige Ausnahme
     MACHBARKEITSSTUDIEN: dort wäre MACHBAR-KEITSSTUDIEN gleichmässiger
     als MACHBARKEITS-STUDIEN. Die Mindestzeichen (8 vor, 6 nach dem
     Strich) schliessen MACHBAR- aus, ohne die anderen Fugen zu berühren
     (geprüft für alle acht Titel bei 375px). Safari kennt nur die
     -webkit-Einzelwerte, Firefox keins von beiden und zeigt dort
     MACHBAR-KEITSSTUDIEN. overflow-wrap bleibt für Wörter ohne
     Trennstelle. Das Icon behält seine Breite und einen festen Abstand
     zum Text. */
  .page-id-62 .guten-post-content .guten-8e33jV .accordion-text {
    min-width: 0;
    -webkit-hyphens: auto;
    hyphens: auto;
    -webkit-hyphenate-limit-before: 8;
    -webkit-hyphenate-limit-after: 6;
    hyphenate-limit-chars: auto 8 6;
    text-wrap: balance;
    overflow-wrap: break-word;
  }

  .page-id-62 .guten-post-content .guten-8e33jV .accordion-icon {
    flex-shrink: 0;
    margin-left: 12px;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   CTA-Buttons: überall weisser Hintergrund, Hover in #e6007e.

   Betroffen sind die freistehenden Buttons, die direkt in einem
   Spalten-Wrapper sitzen — geprüft über die ganze Site:

     "Mehr über uns"   (Startseite,      guten-6FCfAC)
     "Mehr Projekte"   (Projektseiten,   guten-0GpZc9)
     "Senden"          (/contact-us/,    guten-lVrjuB, guten-submit-wrapper)

   Der Hintergrund war pro Button und pro Breakpoint einzeln gesetzt und
   lief deshalb auseinander (gemessen):

     Mehr über uns    rgba(255,253,253)  — fast, aber nicht ganz weiss
     Mehr Projekte    Desktop  #ffffff
                      Tablet   --wp--preset--color--theme-0 (#a2a273, khaki)
                      Handy    --wp--preset--color--m-bcs-5-w (#ffffff)
     Senden           --wp--preset--color--theme-1 (#ffffff)

   Der khakifarbene Button trat also nur zwischen 768px und 1024px auf;
   unter 767px war er schon weiss. Hier jetzt ein Wert ohne Breakpoints.

   Beim Hover lag die Farbe bei "Mehr über uns" und "Mehr Projekte" schon
   richtig (--wp--preset--color--fyc-ww-u ist #e6007e), bei "Senden"
   ebenfalls — dort fehlte aber die Schriftfarbe, der Text blieb auf
   #0e0e0e und stand schwarz auf Magenta. Alle drei bekommen jetzt
   dieselbe Hover-Regel.

   Selektor über die Struktur statt über die generierten guten-XXXXXX-
   Klassen: die Suffixe werden bei jeder Block-Bearbeitung im Editor neu
   vergeben (siehe CLAUDE.md), die Verschachtelung bleibt. Das direkte
   Kind-Zeichen grenzt bewusst gegen die Buttons in den Projekt-Kacheln
   ab ("Zum Projekt"): die sitzen in .icon-box-body, sind absichtlich
   komplett transparent und werden erst beim Hover auf die Kachel
   sichtbar — ein weisser Hintergrund würde sie dauerhaft einblenden.

   !important, weil Gutenverse seine Button-Farben inline im <head>
   ausgibt und damit unabhängig von der Reihenfolge der Stylesheets
   gewinnen würde.
   ────────────────────────────────────────────────────────────────────── */
.guten-column-wrapper > .guten-button-wrapper > .guten-button {
  background-color: #ffffff !important;
}

/* :focus-visible mit auf den Hover: sonst reagiert der Button nur auf die
   Maus und zeigt bei Tastaturbedienung keine Rückmeldung. */
.guten-column-wrapper > .guten-button-wrapper > .guten-button:hover,
.guten-column-wrapper > .guten-button-wrapper > .guten-button:focus-visible {
  background-color: #e6007e !important;
}

.guten-column-wrapper > .guten-button-wrapper > .guten-button:hover span,
.guten-column-wrapper > .guten-button-wrapper > .guten-button:hover i,
.guten-column-wrapper
  > .guten-button-wrapper
  > .guten-button:focus-visible
  span,
.guten-column-wrapper > .guten-button-wrapper > .guten-button:focus-visible i {
  color: #ffffff !important;
}

.guten-column-wrapper > .guten-button-wrapper > .guten-button:hover svg,
.guten-column-wrapper
  > .guten-button-wrapper
  > .guten-button:focus-visible
  svg {
  fill: #ffffff !important;
}

.accordion-item .accordion-heading .accordion-text {
  font-size: 2rem !important;
}
.accordion-item .accordion-body .accordion-content p {
  font-size: 24px !important;
  line-height: normal !important;
}

/* ──────────────────────────────────────────────────────────────────────
   Leistungen auf Über Zaeske (/ueber-zaeske/, Handy).

   Die Regel oben setzt die Accordion-Titel ohne Breakpoint auf 2rem
   (32px). Auf dem Handy stehen neben dem Plus-Icon 231px Textbreite zur
   Verfügung; BRANDSCHUTZGUTACHTEN braucht bei 32px rund 450px, fast jeder
   Titel brach deshalb über drei, vier Zeilen und teils mitten im Wort
   ("GENERALPLAU/NG").

   17px mit 0.04em Laufweite, dazu 16px statt 20px Innenabstand seitlich
   (239px Textbreite): das längste Wort SICHERHEITSKOORDINATION misst so
   235px, alle acht Titel stehen auf einem 375px-Gerät ohne Trennung.
   Darunter greift die Trennung an der Wortfuge (hyphenate-limit, siehe
   Accordion-Regeln oben).

   Die Überschrift UNSERE LEISTUNGEN (34px) passte mit 345px nicht in die
   315px der Box und wurde zu LEISTUN-GEN getrennt; 28px ergeben 284px,
   eine Zeile.

   Der aufgeklappte Text stand je Absatz auf 20px oder 24px — der erste
   Absatz trägt font-size:24px inline und fällt unter die Regel für
   Beschreibungstexte (1.25rem), die übrigen bekamen die 24px von oben.
   Einheitlich 1.25rem wie die übrigen Fliesstexte auf dem Handy.
   ────────────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {
  .page-id-62 .guten-post-content .guten-8e33jV .accordion-text {
    font-size: 17px !important;
    letter-spacing: 0.04em !important;
    line-height: 1.2 !important;
  }

  .page-id-62 .guten-post-content .guten-8e33jV .accordion-heading {
    padding-left: 16px !important;
    padding-right: 16px !important;
  }

  .page-id-62 .guten-post-content .guten-8e33jV .accordion-content {
    padding-left: 16px !important;
    padding-right: 16px !important;
  }

  .page-id-62 .guten-post-content .guten-8e33jV .accordion-content p {
    font-size: 1.25rem !important;
    line-height: 1.4 !important;
  }

  .page-id-62 .guten-post-content .guten-D7w88M {
    font-size: 28px !important;
  }
}

h1.wp-block-gutenverse-heading.guten-element.guten-reD6WA {
  font-size: 2.5rem !important;
  line-height: normal !important;
}

.icon-box.icon-box-body h3.title {
  font-size: 2.5rem !important;
  line-height: normal !important;
}
.icon-box.icon-box-body p {
  font-size: 24px !important;
  line-height: normal !important;
}

.guten-n8PV8N .icon-box-body {
  min-height: 7.9rem !important;
}

/* ──────────────────────────────────────────────────────────────────────
   Karten-Popup (cicero-maplibre): kein Kreis um das Schließen-X.

   Das Popup der Kontaktkarte öffnet sich beim Laden von selbst
   (openPopup). MapLibre setzt dabei den Fokus auf das X (focusAfterOpen),
   und weil dieser Fokus nicht von einem Mausklick kommt, zeichnet der
   Browser seinen Fokus-Ring — durch border-radius: 50% aus der
   Plugin-CSS als blauen Kreis. Dieselbe runde Fläche zeigt die
   Plugin-CSS auch beim Hover und bei :focus-visible als graue Tönung.

   Beides fällt weg; als Rückmeldung bleibt der Farbwechsel des X von
   Grau auf fast Schwarz. Im Plugin selbst bleibt alles, wie es ist —
   die Anpassung gilt nur für diese Site.
   ────────────────────────────────────────────────────────────────────── */
.cicero-maplibre .maplibregl-popup-close-button,
.cicero-maplibre .maplibregl-popup-close-button:focus,
.cicero-maplibre .maplibregl-popup-close-button:focus-visible,
.cicero-maplibre .maplibregl-popup-close-button:hover {
  outline: none !important;
  box-shadow: none !important;
  background-color: transparent !important;
}

/* ──────────────────────────────────────────────────────────────────────
   Zurück-Button unter der Galerie der Projektseiten.

   inc/back-to-category.php baut den "Mehr Projekte"-Button in "Zurück"
   um und setzt die Klasse zsk-back. Die Spalte richtet ihren Inhalt nach
   rechts aus (place-content: flex-end); margin-right: auto holt den Button
   nach links. Auf Desktop steht er bündig mit der Galerie: die Infospalte
   daneben ist 25 % breit, die Galerie hat 50px Innenabstand links. Ab
   Tablet läuft die Galerie über die volle Breite, dort also ohne Einzug.
   ────────────────────────────────────────────────────────────────────── */
.guten-button-wrapper.zsk-back {
  margin-left: calc(25% + 50px) !important;
  margin-right: auto !important;
  justify-content: flex-start !important;
}

/* Leere Blöcke in derselben Spalte (auf /hauptstelle-kreissparkasse-gross-
   gerau/ eine leere H2) sind unsichtbar, nehmen in der Flex-Zeile aber
   Breite ein und schieben den Button nach rechts. */
.guten-column-wrapper:has(> .zsk-back) > :empty {
  display: none !important;
}

.guten-button-wrapper.zsk-back .guten-button i {
  margin-left: 0 !important;
  margin-right: 5px;
}

/* Optische Mitte: Founders Grotesk reserviert unter der Grundlinie viel
   Platz (Ascent 10px, Descent 6px bei 16px Schrift). Die Zeilenbox ist
   korrekt zentriert, die Versalien darin sitzen aber 3px zu hoch. In em,
   damit der Versatz mit der Schriftgröße mitgeht. */
.guten-button-wrapper.zsk-back .guten-button span {
  position: relative;
  top: 0.1875em;
}

@media only screen and (max-width: 1024px) {
  .guten-button-wrapper.zsk-back {
    margin-left: 0 !important;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Kontaktformular (Fluent Forms) im Look des bisherigen Gutenverse-
   Formulars auf /kontakt/.

   Aufbau im Editor: Panel und Überschrift kommen weiter aus Gutenverse –
   die Section mit rgba(179,179,179,.12), 30px Innenabstand (Mobil 20px)
   und 630px Mindesthöhe, darin ein Wrapper mit der H1 "Schreiben sie
   uns". Der Fluent-Forms-Block steht in diesem Wrapper direkt unter der
   Überschrift. Hier werden nur die Formularelemente gestylt.

   Alle Werte sind am Gutenverse-Formular gemessen (1440 / 900 / 375 px):
   Felder ohne sichtbare Beschriftung (nur Platzhalter), weisser Button
   über die volle Breite mit Pfeil. Pflichtfelder tragen einen pinken
   Stern im Feld, der Hinweis "* Pflichtfeld" steht über dem Button.

   Beschriftungen bleiben für Screenreader im Markup und werden nur
   optisch ausgeblendet. Platzhalter und Button-Text kommen aus dem
   Formular-Editor von Fluent Forms.

   Die Selektoren beginnen mit .fluentform form.frm-fluent-form: Fluent
   Forms schreibt die Button-Farbe inline in den <head>
   (form.fluent_form_1 .ff-btn-submit:not(.ff_btn_no_style)), das muss
   ohne !important überstimmt werden. Die Schrift kommt aus der globalen
   Founders-Grotesk-Regel oben.

   Wichtig: den Fluent-Forms-Block nie in einen Gutenverse-Formularblock
   ("Form Builder") setzen. Ein <form> im <form> verwirft der Browser –
   das Formular verliert dann Styling und Absende-Funktion.
   ────────────────────────────────────────────────────────────────────── */
.fluentform {
  --zsk-ff-field: var(--wp--preset--color--theme-6, rgba(255, 255, 255, 0.1));
  --zsk-ff-text: var(--wp--preset--color--theme-1, #ffffff);
  --zsk-ff-placeholder: var(--wp--preset--color--theme-3, rgba(255, 255, 255, 0.6));
  --zsk-ff-dark: var(--wp--preset--color--theme-2, #0e0e0e);
  --zsk-ff-accent: #e6007e;
  --zsk-ff-error: #d60000;
  --zsk-ff-input-size: 16px;
  --zsk-ff-button-size: 18px;
  --zsk-ff-title-gap: 20px;
  --zsk-ff-submit-gap: 31px;

  /* Der Wrapper ist ein Flex-Container: ohne width: 100% würde das
     Formular nur so breit wie sein Inhalt. */
  box-sizing: border-box;
  width: 100%;
  color: var(--zsk-ff-text);
}

@media only screen and (max-width: 1024px) {
  .fluentform {
    --zsk-ff-input-size: 15px;
    --zsk-ff-button-size: 17px;
  }
}

@media only screen and (max-width: 767px) {
  .fluentform {
    --zsk-ff-input-size: 14px;
    --zsk-ff-button-size: 16px;
    --zsk-ff-title-gap: 40px;
    --zsk-ff-submit-gap: 21px;
  }
}

/* Abstand zur Überschrift: 40px (Mobil 50px) wie vorher. Die Überschrift
   bringt 20px (Mobil 10px) als eigenen Aussenabstand mit, der Rest kommt
   hier dazu. Vorher lag zusätzlich der Wrapper-Abstand dazwischen. */
.wp-block-gutenverse-heading + .fluentform {
  margin-top: var(--zsk-ff-title-gap);
}

/* Der Wrapper um Überschrift und Formular hat von Gutenverse noch 20px
   Aussenabstand (Mobil zusätzlich 20px Innenabstand) nach unten – der
   gehörte zur Überschrift und schob das Panel jetzt unter dem Button
   auseinander. */
.guten-wrap-helper:has(> .guten-inner-wrap > .fluentform) {
  margin-bottom: 0 !important;
  padding-bottom: 0 !important;
}

/* Abstand zwischen den Zeilen: 20px wie bei Gutenverse */
.fluentform form.frm-fluent-form .ff-el-group {
  margin-bottom: 20px;
}

/* Beschriftungen nur für Screenreader */
.fluentform form.frm-fluent-form .ff-el-input--label {
  position: absolute !important;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Vor- und Nachname nebeneinander, 20px Fuge; auf dem Handy untereinander */
.fluentform form.frm-fluent-form .ff-t-container {
  display: flex;
  gap: 20px;
}

.fluentform form.frm-fluent-form .ff-t-cell {
  flex: 1 1 0;
  width: auto;
  min-width: 0;
  padding: 0;
}

@media only screen and (max-width: 767px) {
  .fluentform form.frm-fluent-form .ff-t-container {
    display: block;
  }
}

/* Eingabefelder */
.fluentform form.frm-fluent-form .ff-el-form-control {
  display: block;
  width: 100%;
  max-width: 100%;
  height: auto;
  margin: 0;
  padding: 15px 16px;
  border: 1px solid var(--zsk-ff-field);
  border-radius: 0;
  background-color: var(--zsk-ff-field);
  box-shadow: none;
  color: var(--zsk-ff-text);
  font-size: var(--zsk-ff-input-size);
  font-weight: 400;
  line-height: 1.5;
  transition: all 0.25s ease;
}

.fluentform form.frm-fluent-form .ff-el-form-control::placeholder {
  color: var(--zsk-ff-placeholder);
  opacity: 1;
}

/* Pflichtfelder: Stern oben rechts im Feld. Die Beschriftung mit dem
   Stern von Fluent Forms ist ausgeblendet; Screenreader bekommen die
   Pflicht über aria-required mit. Rechts Platz lassen, damit Text nicht
   unter den Stern läuft. */
.fluentform form.frm-fluent-form .ff-el-group:has(> .ff-el-is-required) .ff-el-input--content {
  position: relative;
}

.fluentform form.frm-fluent-form .ff-el-group:has(> .ff-el-is-required) .ff-el-input--content::after {
  content: "*";
  position: absolute;
  top: 15px;
  right: 16px;
  color: var(--zsk-ff-accent);
  font-size: var(--zsk-ff-input-size);
  line-height: 1.5;
  pointer-events: none;
}

.fluentform form.frm-fluent-form .ff-el-group:has(> .ff-el-is-required) .ff-el-form-control {
  padding-right: 36px;
}

/* Fluent Forms setzt beim Fokus einen weissen Hintergrund – hier bleibt
   das Feld dunkel, nur der Rahmen wird weiss (wie bei Gutenverse). */
.fluentform form.frm-fluent-form .ff-el-form-control:hover,
.fluentform form.frm-fluent-form .ff-el-form-control:focus {
  border-color: var(--zsk-ff-text);
  background-color: var(--zsk-ff-field);
  color: var(--zsk-ff-text);
  box-shadow: none;
  outline: none;
}

.fluentform form.frm-fluent-form textarea.ff-el-form-control {
  height: 182px;
  min-height: 0;
}

/* Fehler */
.fluentform form.frm-fluent-form .ff-el-is-error .ff-el-form-control {
  border-color: var(--zsk-ff-error);
}

.fluentform form.frm-fluent-form .text-danger,
.fluentform .ff-errors-in-stack {
  margin-top: 4px;
  color: var(--zsk-ff-error);
  font-size: 14px;
}

/* Senden-Button */
/* padding statt margin: ein margin-top fiele mit den 20px Zeilenabstand
   des Felds darüber zusammen. 20px + 31px = 51px wie bei Gutenverse. */
.fluentform form.frm-fluent-form .ff-el-group.ff_submit_btn_wrapper {
  margin-bottom: 0;
  padding-top: var(--zsk-ff-submit-gap);
}

/* Legende zum Stern, mittig im Abstand über dem Button – nur wenn das
   Formular Pflichtfelder hat. */
.fluentform form.frm-fluent-form:has(.ff-el-is-required) .ff_submit_btn_wrapper {
  position: relative;
}

.fluentform form.frm-fluent-form:has(.ff-el-is-required) .ff_submit_btn_wrapper::before {
  content: "* Pflichtfeld";
  position: absolute;
  /* Zeilenbox über den ganzen Abstand zwischen Feld und Button: die
     20px Zeilenabstand darüber plus der eigene Innenabstand. */
  top: -20px;
  left: 0;
  color: var(--zsk-ff-placeholder);
  font-size: 14px;
  line-height: calc(var(--zsk-ff-submit-gap) + 20px);
}

.fluentform form.frm-fluent-form .ff-btn-submit:not(.ff_btn_no_style) {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  padding: 20px 40px;
  border: 0;
  border-radius: 0;
  background-color: var(--zsk-ff-text);
  color: var(--zsk-ff-dark);
  font-size: var(--zsk-ff-button-size);
  font-weight: 500;
  line-height: 1;
  opacity: 1;
  transition: all 0.3s;
}

/* Pfeil aus dem Gutenverse-Iconfont (gtn-arrow-right-solid), der für das
   Menü-Icon im Header ohnehin auf jeder Seite geladen wird. */
.fluentform form.frm-fluent-form .ff-btn-submit:not(.ff_btn_no_style)::after {
  content: "\e942";
  margin-left: 5px;
  font-family: gtnicon-1;
  font-size: 21px;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
}

.fluentform form.frm-fluent-form .ff-btn-submit:not(.ff_btn_no_style):hover,
.fluentform form.frm-fluent-form .ff-btn-submit:not(.ff_btn_no_style):focus-visible {
  background-color: var(--zsk-ff-accent);
  color: var(--zsk-ff-text);
  opacity: 1;
}

/* Erfolgsmeldung nach dem Absenden */
.fluentform .ff-message-success {
  margin-top: 0;
  padding: 15px 16px;
  border: 1px solid var(--zsk-ff-field);
  background-color: var(--zsk-ff-field);
  box-shadow: none;
  color: var(--zsk-ff-text);
  font-size: var(--zsk-ff-input-size);
  line-height: 1.5;
}

/* Nach dem Absenden blendet Fluent Forms das Formular aus und zeigt nur
   die Erfolgsmeldung. Die 630px Mindesthöhe des Gutenverse-Panels
   (.guten-H81UYo > .guten-container, inline im <head>) liess darunter
   eine grosse leere Fläche stehen – dann schrumpft das Panel auf
   Überschrift und Meldung. Solange das Formular sichtbar ist, bleibt die
   Mindesthöhe unverändert. */
.guten-section > .guten-container:has(.fluentform .ff-message-success) {
  min-height: 0;
}

/* Datenschutz-Einwilligung (Fluent-Feld "DSGVO-Einverständnis"): Text in
   der Grösse der Pflichtfeld-Legende, Link weiss und unterstrichen –
   ohne diese Regel erbt er die dunkle Linkfarbe des Themes und ist auf
   dem Panel kaum zu sehen. Das Häkchen nimmt die Akzentfarbe des Sterns. */
.fluentform form.frm-fluent-form .ff-el-tc .ff_tc_label {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  color: var(--zsk-ff-text);
  font-size: 14px;
  line-height: 1.5;
}

/* Kästchen auf die erste Textzeile zentrieren. Fluent Forms setzt am
   Span 8px Innenabstand mit !important und schiebt die Checkbox um 2px
   hoch – beides wird hier zurückgenommen. */
.fluentform form.frm-fluent-form .ff-el-tc .ff_tc_checkbox {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  height: 21px;
  padding-top: 0 !important;
}

.fluentform form.frm-fluent-form .ff-el-tc .ff-el-form-check-input {
  top: 0;
  width: 16px;
  height: 16px;
  margin: 0;
  accent-color: var(--zsk-ff-accent);
}

.fluentform form.frm-fluent-form .ff-el-tc a {
  color: var(--zsk-ff-text);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.fluentform form.frm-fluent-form .ff-el-tc a:hover,
.fluentform form.frm-fluent-form .ff-el-tc a:focus-visible {
  color: var(--zsk-ff-accent);
}

/* ──────────────────────────────────────────────────────────────────────
   Galerie-Großansicht (Popup des Gutenverse-Gallery-Blocks).
   Verhalten (Zurück, Tippen neben das Bild, Zoomstufe, Tastatur):
   assets/js/gallery-lightbox.js.

   1. Zwei Finger sollen das Foto zoomen, nicht die Seite. Swiper setzt am
      Container touch-action: pan-y – damit blieb Pinch-Zoom beim Browser,
      und senkrechtes Wischen scrollte die Projektseite hinter dem Popup.
      Mit none bekommt Swiper alle Gesten selbst; Wischen zum Blättern und
      Antippen funktionieren unverändert.
   2. Auf Tablet/Handy schien die Projektseite durch das Popup durch
      (Gutenverse: 80 % Schwarz) – Titel und Kenndaten standen sichtbar
      über und unter dem Bild. Dort deckend schwarz.
   3. Die Symbole oben rechts waren nur 24 × 24px gross (Abstand als
      margin, also nicht antippbar). Derselbe Abstand als padding: gleiche
      Optik, 44 × 44px Trefferfläche.
   4. Solange das Popup offen ist, scrollt die Seite dahinter nicht.
      scrollbar-gutter hält auf dem Desktop den Platz der Scrollleiste
      frei, sonst spränge der Inhalt hinter dem Popup seitlich.
   ────────────────────────────────────────────────────────────────────── */
.gutenverse-popup-gallery,
.gutenverse-popup-gallery .swiper-container,
.gutenverse-popup-gallery .swiper-wrapper,
.gutenverse-popup-gallery .swiper-slide {
  touch-action: none !important;
  overscroll-behavior: contain;
}

@media only screen and (max-width: 1024px) {
  .gutenverse-popup-gallery {
    background-color: #000000 !important;
  }
}

.gutenverse-popup-gallery .gallery-header svg {
  box-sizing: content-box;
  width: 24px;
  height: 24px;
  margin: 0 !important;
  padding: 10px;
}

html.zaeske-lightbox-open {
  overflow: hidden;
  scrollbar-gutter: stable;
}

/* ──────────────────────────────────────────────────────────────────────
   Rechtstexte (Impressum, Datenschutz).

   Der Text steht im Gutenverse-Text-Editor als Überschriften- und
   Absatzblöcke mit eigenen Klassen – die Regeln hängen daher an den
   Klassen, nicht an Block-IDs oder Seiten-Slugs:
     .zaeske-legal-h     Zwischenüberschrift (h3)
     .zaeske-legal-p     Absatz
     .zaeske-legal-li    Aufzählungspunkt (eigener Absatz; core/list ist im
                         Text-Editor nicht zugelassen)
     .zaeske-legal-meta  „Stand: …“ am Ende

   Größen angelehnt an die Site: Kicker-Überschriften 28px/500 versal,
   Fließtext 24px. Für lange Rechtstexte eine Stufe kleiner und mit
   begrenzter Zeilenlänge – auf dem Desktop ist der Textblock sonst
   1200px breit.
   ────────────────────────────────────────────────────────────────────── */
.gutenverse-text-editor .zaeske-legal-h,
.gutenverse-text-editor .zaeske-legal-p,
.gutenverse-text-editor .zaeske-legal-li,
.gutenverse-text-editor .zaeske-legal-meta {
  max-width: 760px;
  color: var(--wp--preset--color--theme-1);
}

.gutenverse-text-editor .zaeske-legal-h {
  margin: 2.4em 0 0.7em;
  font-size: 22px;
  font-weight: 500;
  line-height: 1.25;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.gutenverse-text-editor .zaeske-legal-h:first-child {
  margin-top: 0;
}

.gutenverse-text-editor .zaeske-legal-p,
.gutenverse-text-editor .zaeske-legal-li,
.gutenverse-text-editor .zaeske-legal-meta {
  font-size: 20px;
  line-height: 1.5;
}

.gutenverse-text-editor .zaeske-legal-p {
  margin: 0 0 0.8em;
}

.gutenverse-text-editor .zaeske-legal-li {
  position: relative;
  margin: 0 0 0.3em;
  padding-left: 1.2em;
}

.gutenverse-text-editor .zaeske-legal-li::before {
  content: "–";
  position: absolute;
  left: 0;
}

.gutenverse-text-editor .zaeske-legal-li:not(:has(+ .zaeske-legal-li)) {
  margin-bottom: 0.8em;
}

.gutenverse-text-editor .zaeske-legal-meta {
  margin: 3em 0 0;
  opacity: 0.6;
}

.gutenverse-text-editor :is(.zaeske-legal-p, .zaeske-legal-li) a {
  color: inherit;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.18em;
  overflow-wrap: anywhere;
}

@media only screen and (max-width: 767px) {
  .gutenverse-text-editor .zaeske-legal-h {
    margin-top: 2em;
    font-size: 19px;
  }

  .gutenverse-text-editor .zaeske-legal-p,
  .gutenverse-text-editor .zaeske-legal-li,
  .gutenverse-text-editor .zaeske-legal-meta {
    font-size: 17px;
  }
}
