/*
 * anpassungen.css — Korrekturen über dem Webflow-Stylesheet.
 *
 * WARUM EINE EIGENE DATEI
 *
 * `proteccolor.css` ist 431 KB generierter Webflow-Code. Darin zu editieren
 * heißt, jede künftige Aktualisierung des Exports zu verlieren und in einer
 * Datei zu suchen, die niemand geschrieben hat. Diese Datei lädt danach und
 * überschreibt gezielt — was hier nicht steht, bleibt wie im Original.
 *
 * Behoben werden drei Dinge, die auf großen Bildschirmen auffielen:
 * die Überschrift sprengte den Bereich, die Unterzeile wurde in eine
 * fingerbreite Spalte gequetscht, und die Knöpfe fielen unten heraus.
 */

/* ── Hero: Layout = Webflow-Original, Headline bewusst 12,5 % kleiner ─────
 * Historie: Hier standen Grid-, Schriftgrößen-, Padding- und Zeilenbreiten-
 * Overrides, die auf breiten Schirmen Ein-Wort-Zeilen verhindern sollten.
 * PWs Referenz-Screenshots (19.08.2026, Webflow bei ~1300 UND ~1680 px
 * logischer Breite) zeigen: Das Original verhält sich auf allen Breiten
 * korrekt, weil seine Hero-Maße durchgehend in vw skalieren — Headline,
 * Claim-Spalte (18.44vw) und Abstände bleiben proportional. Die Overrides
 * erzeugten genau die Quetschung, die sie verhindern sollten (Claim-Spalte
 * ~120 px, Headline nach rechts gerückt und verkleinert). Deshalb komplett
 * entfernt; Grid, Abstände und Claim rendern 1:1 nach proteccolor.css.
 *
 * Einzige gewollte Abweichung (PW-Design-Entscheidung 19.08.2026): Die
 * Startseiten-H1 wirkt im Verhältnis zu den rem-basierten Nachbarn (Claim,
 * Knöpfe, Navigation) auf Desktop zu wuchtig — sie wird um 12,5 % verkleinert
 * (5.33vw → 4.66vw). Nur Desktop: unter 768 px gelten die festen 48/40 px des
 * Originals unverändert. `.heading-7` existiert nur in diesem Hero. */
@media (min-width: 992px) {
  .section_hero-home .heading-7 {
    font-size: 4.66vw;
  }
}

/* Linke Textkante bündig mit dem „Nach unten scrollen"-Tag (PW 19.08.2026):
 * H1-Box und Tag hängen am selben Container (content_hero-home) und beginnen
 * daher auf jeder Breite an derselben Kante — aber der zentrierte Text saß
 * eingerückt, weil er schmaler als seine Box war. max-content schrumpft die
 * Box exakt auf die breiteste Zeile (die Umbrüche sind per <br> fest): deren
 * Anfang liegt damit auf der Kante, die kürzeren Zeilen bleiben darunter
 * zentriert. max-width sichert gegen Überlauf, falls es je eng wird. */
/* Kantenbündigkeit ist ein Desktop-Konzept (Bezug: „Nach unten scrollen"-
 * Kante) — der Webflow-Designer-Soll zeigt die Mobil-H1 ZENTRIERT.
 * Deshalb erst ab 768 px (Designer-Abgleich 19.08.2026). */
@media (min-width: 768px) {
  .section_hero-home .heading-7 {
    width: max-content;
    max-width: 100%;
  }
}

/* 480–767 px begrenzt das Original den Headline-Wrapper auf 3 Spalten
 * (~332 px) — mit dem neuen Satz blieb dadurch „Hand." allein auf der
 * letzten Zeile. Freigeben: Der übergeordnete Wrapper deckelt weiter bei
 * 448 px (4 Spalten), die breiteste Zeile braucht 425 px — die drei
 * <br>-Zeilen stehen damit auch hier fest und kantenbündig. */
@media (min-width: 480px) and (max-width: 767px) {
  .section_hero-home .heading_hero-home {
    width: 100%;
    max-width: none;
  }
}

/* Die festen Umbrüche gelten auf allen Breiten: Seit der Wort-pro-Zeile-
 * Struktur (PW 19.08.2026 — „Pulverbeschichtung / & / Nasslackierung –")
 * passt jede Zeile auch bei 375 px in die feste 40-px-Mobilschrift;
 * eine fließende Mobil-Variante ist nicht mehr nötig. */

/* Hero-Hintergrund der Startseite: Kundenfoto laut Ziel-PDF (19.08.2026) —
 * die Spritzpistolen-Wandhalterung ersetzt das bisherige Kabinenfoto; das
 * CARGO-Template-Video im Markup ist entfernt. Die Gradient-Schicht des
 * Originals bleibt (dunkelt fürs weiße Menü/Headline ab). Quellbild ist
 * nur 1000 px breit (größte Fassung des Kunden) — auf großen Monitoren
 * wirkt es wie im Webflow-Soll leicht weich. */
.section_hero-home {
  background-image: linear-gradient(#0000003d, #0000003d), url('../images/kundenfotos/lackierpistole-hero-proteccolor.webp');
}
/* Mobil-Hintergründe der „Unsere Leistungen"-Karten (Befund Mobil-Design-
 * check 19.08.2026): Unter 480 px zeigen die drei Karten ihre Bilder als
 * Karten-Hintergrund (.transparent-image-div) statt per Hover — zwei davon
 * hingen noch auf alten Webflow-Bildern. Auf die Soll-Motive der
 * Desktop-Hover umgestellt (Nasslackierung/_2nd stimmte bereits). */
@media (max-width: 479px) {
  .transparent-image-div {
    background-image: linear-gradient(#000000a8 6%, #00000075 54%, #00000057 95%), url('../images/kundenfotos/maskierte-metallgehaeuse-lackiervorbereitung-940w.webp');
  }
  .transparent-image-div._1st {
    background-image: linear-gradient(#000000a8 6%, #00000075 54%, #00000057 95%), url('../images/kundenfotos/stahlprofile-pulverbeschichtung-kabine-940w.webp');
  }
}

/* 992–1279 px setzt das Original die H1-Zeilenhöhe absolut (5.1vw statt der
 * Faktor-1.05-Regel ab 1280 px) — mitskaliert, sonst stünden die Zeilen im
 * verkleinerten Schriftbild zu weit auseinander. */
@media (min-width: 992px) and (max-width: 1279px) {
  .section_hero-home .heading-7 {
    line-height: 4.46vw;
  }
}

/* ── Hauptmenü ────────────────────────────────────────────────────────────
 * Die Einträge trugen je einen eigenen Rahmen — vier Kästchen nebeneinander,
 * die miteinander um Aufmerksamkeit konkurrieren. Ruhiger: kein Rahmen, dafür
 * eine Linie, die beim Überfahren mitwächst. Der Handlungsknopf rechts bleibt
 * der einzige umrandete Punkt und gewinnt dadurch.
 */
.nav_menu-link,
.nav-link,
.navbar a[class*='menu'] {
  border: 0 !important;
  background: transparent !important;
  position: relative;
  padding: 0.35rem 0.15rem;
  transition: color 0.18s ease;
}

.nav_menu-link::after,
.nav-link::after,
.navbar a[class*='menu']::after {
  content: '';
  position: absolute;
  left: 0.15rem;
  right: 0.15rem;
  bottom: 0;
  height: 1.5px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.22s ease;
}

.nav_menu-link:hover::after,
.nav-link:hover::after,
.navbar a[class*='menu']:hover::after {
  transform: scaleX(1);
}

/* Abstand zwischen den Einträgen — ohne Rahmen brauchen sie Luft, sonst
 * lesen sie sich als ein Wort. */
.nav_menu,
.nav_menu-list {
  gap: clamp(1.25rem, 2.2vw, 2.5rem);
}

/* Wer die Bewegung abgeschaltet hat, bekommt keine — die Linie ist dann
 * einfach da. */
@media (prefers-reduced-motion: reduce) {
  .nav_menu-link::after,
  .nav-link::after,
  .navbar a[class*='menu']::after {
    transition: none;
  }
}

/* ══ Durchgehend dunkel ═══════════════════════════════════════════════════
   Issues #12 und #13.

   Die Webflow-Vorlage ist eine helle Website: An `:root` und `body` steht
   gemessen `--…background--base: white` und `--…tone--strong: #070707`.
   Alles Dunkle darin ist eine Ausnahme, die einzelne Sektionen selbst setzen.

   DER WEG, DER NICHT FUNKTIONIERT HAT

   Naheliegend wäre, die beiden Variablen an der Wurzel zu tauschen — ein
   Eingriff statt vieler. Gemessen kam dabei heraus: die Rechtsseiten wurden
   hell, weil `tone--strong` dort die Hintergrundfarbe ist, und der Fließtext
   verschwand, weil er seine Farbe aus keiner der beiden bezieht. Die
   Variablen tragen je nach Sektion verschiedene Rollen; ein Tausch an der
   Wurzel trifft sie alle gleich und deshalb die meisten falsch.

   Also die Sektionen selbst, und in jeder ausdrücklich beides — Grund und
   Schrift. Ein Grund allein macht aus einem unsichtbaren Text nur einen
   anders unsichtbaren. */
.section,
.section-2,
.section-anchor-links,
.section_features-about,
.section_features-about-2,
.section_newsroom,
.section_testimonial,
.section_hero-home,
.section_team-a {
  background-color: #070707;
  color: #fff;
}

.section :is(h1, h2, h3, h4, h5, p, li, span, div, a):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small),
.section-2 :is(h1, h2, h3, h4, h5, p, li, span, div, a):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small),
.section-anchor-links :is(h1, h2, h3, h4, h5, p, li, span, div, a):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small),
.section_features-about :is(h1, h2, h3, h4, h5, p, li, span, div, a):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small),
.section_features-about-2 :is(h1, h2, h3, h4, h5, p, li, span, div, a):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small),
.section_newsroom :is(h1, h2, h3, h4, h5, p, li, span, div, a):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small),
.section_testimonial :is(h1, h2, h3, h4, h5, p, li, span, div, a):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small),
.section_hero-home :is(h1, h2, h3, h4, h5, p, li, span, div, a):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small),
/* `.black` bleibt ausgenommen: Die Kacheln auf der Startseite tragen jeden
   Titel zweimal — einmal hell für den Ruhezustand, einmal schwarz für die
   Kachel, die beim Überfahren aufhellt. Eine Kontrastmessung sieht die
   schwarze Fassung auf dem dunklen Ruhegrund und meldet sie; sie hell zu
   machen würde den Effekt zerstören, den sie tragen soll. */
/* Ebenso ausgenommen (18.08.2026, Design-Abgleich mit dem Webflow-Original):
   `.green-detail` (die grünen Akzente der Kennzahlen: 35+, >1 Mio., >100 k),
   `.tone-medium` (die bewusst grauen Teil-Überschriften wie „– Fünf Gründe …")
   und `.link-intern` (grüne Content-Links). Die Pauschal-Regel hatte sie alle
   auf Weiß gezwungen — im Original sind sie farbige Gestaltungselemente. */
.section_team-a :is(h1, h2, h3, h4, h5, p, li, span, a):not(.black):not(.green-detail):not(.tone-medium):not(.link-intern):not(.button-text):not(.cta_main):not(.cta_small) {
  color: inherit;
}

/* Links im Text und im Formular-Einwilligungssatz: CI-Grün #1b3f38 — PW-
   Vorgabe 19.08.2026: Es gibt genau EIN Grün auf der Seite, 1:1 die CI-Farbe;
   der frühere aufgehellte Ton war eine Eigenmächtigkeit. Die Unterstreichung
   bleibt, damit die Links trotz des dunklen Tons als Links erkennbar sind. */
.section_contact a,
.form_wrapper a,
.link-intern,
a[href*="datenschutz"]:not(.link_footer-legal-2),
a[href*="privacy-policy"]:not(.link_footer-legal-2) {
  color: #1b3f38;
  text-decoration: underline;
  text-underline-offset: 0.18em;
}

/* Akzentschrift = CI-Grün #1b3f38, exakt wie im Webflow-Original (dort
   nachgemessen: tone-medium, green-detail, Kennzahlen, Footer-Band — alle
   rgb(27,63,56), auch auf Schwarz; der subtile, dunkle Look ist gewollt).
   PW-Vorgabe 19.08.2026: einziges Grün der Seite, 1:1 — die frühere
   Aufhellung auf #7fa89c war eine Eigenmächtigkeit und ist zurückgedreht. */
.text-color-accent,
.text-style-accent,
.tone-medium,
[class*="accent"]:not(button):not(.w-button) {
  color: #1b3f38;
}

/* Der Grund unter allem.
   
   Die Sektionen weiter oben decken die Seite ab, solange eine da ist. Unter
   der Fußzeile ist keine mehr — dort schien der weiße Body durch, ein heller
   Streifen am Seitenende. Im Bild sofort zu sehen, in der Messung nicht:
   Das Prüfskript sah section, div, main, header und footer an, und body war
   in dieser Liste nie enthalten. */
html,
body {
  background-color: #070707;
}

/* ══ Schmale Schirme: der Knopf in der Kopfzeile ═══════════════════════════
   Auf 390 Pixel Breite lief „Projekt anfragen" rechts aus dem Bild — sichtbar
   war nur noch „PRO". Genau die Beobachtung von Christos am 10.08.: „die
   Buttons hängen raus".

   Der erste Versuch hat die Polsterung des Knopfs verkleinert und nichts
   bewirkt. Der Grund steht im CSS der Vorlage und nicht am Knopf:

       .nav_right   width: 13rem     (208 px, fest)
       .cta_small   width: 135px     (fest)

   Zwei feste Breiten nebeneinander, dazu Hamburger und Logo — das passt auf
   390 Pixel nicht, egal wie schmal die Polsterung ist. Feste Breiten sind
   hier das Problem, nicht die Innenabstände.

   Die Vorlage hat Medienabfragen für 767 und 479 Pixel, aber für diese beiden
   Regeln keine. Der Fall war dort nie bedacht.

   Verkleinert statt ausgeblendet: Der Knopf ist auf dem Telefon der kürzeste
   Weg zur Anfrage, und im eingeklappten Menü sucht ihn niemand. */
@media (max-width: 767px) {
  .nav_right {
    width: auto;
    min-width: 0;
    flex-shrink: 1;
  }

  .button-group_nav {
    min-width: 0;
    flex-shrink: 1;
  }

  .nav_right .cta_small {
    width: auto;
    min-width: 0;
    padding-left: 0.75em;
    padding-right: 0.75em;
    font-size: 0.68rem;
    white-space: nowrap;
  }
}

@media (max-width: 479px) {
  .nav_right .cta_small {
    padding-left: 0.6em;
    padding-right: 0.6em;
    font-size: 0.6rem;
  }
}

/* ══ Waagerechtes Scrollen auf dem Telefon ════════════════════════════════
   Gemessen bei 500 Pixel Fensterbreite: Die Seite war 590 Pixel breit. Man
   konnte sie seitlich schieben, und am rechten Rand stand nichts.

   Verursacher ist das Logo-Laufband: `.clients-grid.logo-animate` ist mit
   `width: 106rem` bewusst überbreit — es soll ja durchlaufen. Abgeschnitten
   wird es in der Vorlage von `.section_clients { overflow: clip }`.

   Nur heißt die Sektion auf dieser Seite `section_logos`. Die Regel greift
   deshalb nicht, und das Laufband schiebt die ganze Seite auf.

   Zusätzlich `overflow-x: clip` auf der Wurzel: als Fangnetz für die nächste
   überbreite Sektion, die anders heißt als erwartet. `clip` statt `hidden`,
   weil `hidden` auf der Wurzel klebende Elemente (`position: sticky`)
   unbrauchbar macht — die Navigation ist eines. */
.section_logos,
.marquee {
  overflow: clip;
}

html,
body {
  overflow-x: clip;
}

/* ══ Bilder behalten ihr Seitenverhältnis ═════════════════════════════════
   proteccolor.css setzt für Bilder nur:

       img { max-width: 100%; display: inline-block; }

   Kein `height: auto`. Solange die Bilder keine width/height-Attribute
   tragen, fällt das nicht auf — aktuell haben alle 104 keines.

   Sobald jemand die Maße nachträgt, kippt es: Die Breite wird von
   `max-width: 100%` heruntergerechnet, die Höhe bleibt beim Attributwert
   stehen, und das Bild wird gestaucht oder gestreckt.

   Genau das steht bevor. Der publish-worker ergänzt beim Abschluss
   Bildmaße — für diesen Mandanten hat er zuletzt „32 Bild(er) auf 1
   Seite(n) ergänzt" gemeldet. Er läuft wieder, sobald `render_mode` auf
   `statisch` steht (#22).

   Diese Regel ist die Voraussetzung dafür, dass das gutgeht. Sie ändert
   nichts, solange keine Maße gesetzt sind, und verhindert den Schaden,
   sobald welche kommen. */
img {
  height: auto;
}

/* ── Gabi Schweikles Porträt: die Parallax schnitt den Kopf an ──────────────
   Gemeldet von Mario am 12.08.2026 über „Anpassung melden" (#49): Die Bilder
   von Timon und Gabi Schweikle müssten „weiter nach unten ausgerichtet"
   werden.

   Nachgemessen im Browser, über den ganzen Scrollverlauf — und der Befund ist
   ein anderer, als er zunächst aussieht:

     Scrollstand      Timon      Gabi
        0 %          -11 px     54 px
       50 %            0 px     95 px      ← hier entstand der Screenshot
       90 %            0 px     49 px

   Timons Bild sitzt sauber. Gabis Bild wird von der Webflow-Parallax per
   `translateY(-95px)` nach oben gezogen und dort vom Rahmen abgeschnitten —
   Stirn und Haaransatz fehlen.

   Warum `object-position` hier NICHT hilft: Rahmen und Bild haben dasselbe
   Seitenverhältnis (0,67 — 1440×2160 in 423×634). Bei `object-fit: cover`
   gibt es damit nichts zu verschieben; der Beschnitt kommt allein von der
   Bewegung.

   Deshalb wird sie für dieses eine Bild angehalten. Das ist ein Eingriff in
   die Gestaltung, und er ist es wert: Eine Bewegung, die ein Gesicht
   anschneidet, erreicht das Gegenteil dessen, wofür sie da ist. Die übrigen
   Parallax-Elemente der Seite bleiben unberührt — die Regel greift nur, wo
   ein Personenbild betroffen ist.

   `!important` ist nötig, weil Webflows Interaktions-Skript den Wert als
   Inline-Stil setzt; ohne den Zusatz gewinnt das Skript. */
.image_cover.parallax.gabi {
  transform: none !important;
}

/* ── Zwei-Klick-Karte auf /kontakt (18.08.2026) ─────────────────────────────
   Der Platzhalter steht dort, wo vorher ein statisches Kartenbild lag (das
   fälschlich Warschau zeigte). Die echte Google-Karte lädt erst nach Klick —
   ohne Klick fließt kein Byte an Google. Größe kommt von .map / ._2nd-version
   aus proteccolor.css; hier stehen nur Innenleben und Knopf. */
.karte-consent {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 16px;
  padding: 24px;
  /* Hell wie die Google-Karte, die nach dem Klick erscheint — im
   * Webflow-Original saß hier eine helle Map-Fläche (19.08.2026). */
  background-color: #f6f3f0;
  text-align: center;
}
.karte-consent-text {
  color: #070707;
  font-size: 14px;
  line-height: 1.5;
  margin: 0;
  max-width: 52ch;
}
.karte-consent-text a {
  color: inherit;
  text-decoration: underline;
}
.karte-consent-knopf {
  cursor: pointer;
  border: 0;
  border-radius: 100px;
  padding: 12px 28px;
  background-color: #1b3f38;
  color: #fffdf3;
  font-family: inherit;
  font-size: 14px;
}
.karte-consent-knopf:hover {
  /* Kein zweiter Grünwert (PW: ein Grün) — Aufhellen desselben Tons. */
  filter: brightness(1.35);
}
/* Nach dem Laden trägt allein das iframe die Fläche. */
.karte-consent.karte-geladen {
  padding: 0;
}

/* ── Zweite Überschrift auf /kontakt ist jetzt eine H2 (18.08.2026) ─────────
   Vorher war „Mehrere Informationen" eine zweite H1. Die neue H2 behält die
   H1-Optik über die Typo-Variablen, damit sich am Layout nichts ändert. */
h2.kontakt-h1 {
  font-family: var(--_🔠-typography---font-family--h1);
  font-size: var(--_🔠-typography---size--h1);
  line-height: var(--_🔠-typography---line-height--h1);
  font-weight: var(--_🔠-typography---font-weight--h1);
  letter-spacing: var(--_🔠-typography---letter-spacing--h1);
}

/* ── Mobil-Menü deckt den Seiteninhalt (18.08.2026) ─────────────────────────
   Vom Kunden am 31.07. gemeldet (damals Webflow-Staging, beim Umzug
   mitgekommen): Bei geöffnetem Burger-Menü schien der Seiteninhalt zwischen
   und unter den Menüpunkten durch und wurde mitten in der Zeile angeschnitten.
   Webflows .w-nav-overlay spannt sich beim Öffnen über die volle Seite, ist
   aber transparent — er bekommt hier den Seitengrund. Sichtbar ist das Overlay
   nur bei geöffnetem Menü; Desktop bleibt unberührt. */
@media screen and (max-width: 991px) {
  .w-nav-overlay {
    background-color: #070707;
  }
}

/* ── Kontextuelle Links im Fließtext (18.08.2026) ───────────────────────────
   .link-intern färbt CI-grün (proteccolor.css); im Fließtext von FAQ,
   Faktenbox und Absätzen bekommen die Links zusätzlich eine dezente
   Unterstreichung, damit sie als Links erkennbar sind. */
.faq-paragraph .link-intern,
.text-style-factbox .link-intern,
.text-h5 .link-intern,
.text-size-regular .link-intern {
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* Formular-Erfolgszustand im CI-Grün statt des Template-Signalgrüns #2ad87f —
 * PW-Vorgabe 19.08.2026: #1b3f38 ist das einzige Grün der Seite. Weißer Text
 * auf dem Erfolgs-Block bleibt mit ~11:1 gut lesbar. */
:root {
  --_🎨-color--base---ui--success: #1b3f38;
}

/* Navigation farblich festnageln (PW-Meldung 19.08.2026): Ein Webflow-
 * Scroll-Trigger setzt beim Überfahren bestimmter Sektionen die Klasse
 * `light-mode` auf .master_navigation — die Template-Variante für HELLE
 * Sektionen (Navi-Text kippt auf Dunkel). Proteccolor hat keine hellen
 * Sektionen: Die Leiste wurde dadurch auf der Startseite (Leistungen bis
 * Team) und mehrfach auf den Unterseiten unsichtbar. Hier werden exakt
 * die Variablen der dunklen Navi-Variante (proteccolor.css) mit höherer
 * Spezifität auch für den light-mode-Zustand gesetzt — die Leiste sieht
 * damit auf jeder Scroll-Position gleich aus. */
.master_navigation.light-mode {
--_🎨-color--tokens---background--base: var(--_🎨-color--base---base--dark-100);
  --_🎨-color--tokens---tone--strong: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---tone--medium: var(--_🎨-color--base---base--light-64);
  --_🎨-color--tokens---input-default--border: var(--_🎨-color--base---base--light-0);
  --_🎨-color--tokens---input-active--border: var(--_🎨-color--base---base--light-32);
  --_🎨-color--tokens---tone--subtle: var(--_🎨-color--base---base--light-48);
  --_🎨-color--tokens---tone--faint: var(--_🎨-color--base---base--light-16);
  --_🎨-color--tokens---input--icon: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---button-primary-default--background: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---button-primary-default--text: var(--_🎨-color--base---base--dark-100);
  --_🎨-color--tokens---button-secondary-default--background: var(--_🎨-color--base---base--light-8);
  --_🎨-color--tokens---button-secondary-default--text: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---button-primary-hover--text: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---button-secondary-hover--text: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---button-primary-default--border: var(--_🎨-color--base---base--dark-0);
  --_🎨-color--tokens---button-secondary-default--border: var(--_🎨-color--base---base--light-0);
  --_🎨-color--tokens---button-primary-hover--border: var(--_🎨-color--base---base--light-8);
  --_🎨-color--tokens---button-secondary-hover--border: var(--_🎨-color--base---base--light-8);
  --_🎨-color--tokens---button-secondary-hover--background: var(--_🎨-color--base---lift--dark);
  --_🎨-color--tokens---button-primary-hover--background: var(--_🎨-color--base---lift--dark);
  --_🎨-color--tokens---background--lift: var(--_🎨-color--base---lift--dark);
  --_🎨-color--tokens---button-tertiary-default--text: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---button-tertiary-hover--text: var(--_🎨-color--base---base--light-88);
  --_🎨-color--tokens---background--semi-transparent: var(--_🎨-color--base---base--dark-48);
  --_🎨-color--tokens---input--label: var(--_🎨-color--base---base--light-64);
  --_🎨-color--tokens---background-gradient-purposes--gradient-64: var(--_🎨-color--base---base--dark-64);
  --_🎨-color--tokens---input-default--background: var(--_🎨-color--base---lift--dark);
  --_🎨-color--tokens---background-gradient-purposes--gradient-100: var(--_🎨-color--base---base--dark-100);
  --_🎨-color--tokens---background-gradient-purposes--gradient-0: var(--_🎨-color--base---base--dark-0);
  --_🎨-color--tokens---input-default--text: var(--_🎨-color--base---base--light-48);
  --_🎨-color--tokens---input-active--background: var(--_🎨-color--base---lift--dark);
  --_🎨-color--tokens---input-active--text: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---input-filled--background: var(--_🎨-color--base---lift--dark);
  --_🎨-color--tokens---input-filled--text: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---input-filled--border: var(--_🎨-color--base---base--light-0);
  --_🎨-color--tokens---input-error--background: var(--_🎨-color--base---lift--dark);
  --_🎨-color--tokens---input-error--text: var(--_🎨-color--base---base--light-100);
  --_🎨-color--tokens---input-error--border: var(--_🎨-color--base---base--light-0);
}

/* Porträt-Ausschnitte (PW-Meldung 19.08.2026): Cover-Crop schnitt Timon
 * (Testimonial) und Gabi (Team-Karte) den Kopf ab — der Standard-Ausschnitt
 * liegt mittig. Oben ausrichten: Die Studio-Porträts bringen ihre Luft über
 * dem Kopf selbst mit, unten darf dafür fehlen. Gilt für alle Personen-
 * Porträts in Team/Testimonial-Slots. */
/* Porträt-Regel (PW 19.08.2026): Über dem Kopf bleiben im sichtbaren
 * Rahmen nur ~5 % Luft, dann beginnt der Scheitel. Studio-Porträts bringen
 * oben deutlich mehr Eigenluft mit — deshalb nicht auf die Bildoberkante
 * (50% 0) ausrichten, sondern pro Bild so weit nachjustieren, bis der
 * Scheitel knapp unter der Rahmenkante sitzt. Werte sind je Bild einzeln
 * gesichtet (Einzelbild-Grundsatz). */
.image_cover.gabi,
.image-wrap_team .image_cover {
  object-position: 50% 12%;
}
/* Schmalere Mobil-Rahmen haben weniger vertikalen Überstand — derselbe
 * Prozent-Offset schiebt dort mehr Bild hinaus. Etwas zurücknehmen, damit
 * die ~5 % Kopf-Luft auch mobil stehen. */
@media (max-width: 767px) {
  .image_cover.gabi,
  .image-wrap_team .image_cover {
    object-position: 50% 8%;
  }
}

/* Die Team-Porträts tragen zusätzlich den Parallax-Effekt: Das Bild ist
 * ~1,8-fach so hoch wie sein Rahmen, wird von ihm vertikal ZENTRIERT
 * (daher der Kopf-Anschnitt trotz object-position) und beim Scrollen per
 * Skript verschoben. Bei Personen-Porträts ist der Effekt verzichtbar:
 * Bild absolut exakt in den Rahmen legen — object-fit/object-position
 * übernehmen den Ausschnitt (Oberkante), !important schlägt die
 * Inline-Transforms des Skripts. */
.image-wrap_team,
.image-wrap_testimonial {
  position: relative;
  overflow: hidden;
}
.image-wrap_team picture,
.image-wrap_team .image_cover,
.image-wrap_testimonial picture,
.image-wrap_testimonial .image_cover {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  transform: none !important;
}

/* Timons Testimonial-Rahmen ist QUERformatig und zeigt nur gut die Hälfte
 * des Hochformat-Porträts — mit Ausrichtung ganz oben (50% 0) landete die
 * Luft über dem Kopf im Rahmen und das Gesicht unterm Text-Overlay. Leicht
 * nach unten versetzt: Kopf knapp unter der Oberkante, Gesicht komplett. */
.image_cover.timon {
  object-position: 50% 15%;
}

/* Timon-Testimonial (PW 19.08.2026): Das Text-Overlay verdeckte zu viel
 * Gesicht. Drei Maßnahmen: ① Rahmen höher (450 → 560 px, Breite bleibt —
 * mehr Porträt sichtbar), ② die Glas-Karte spannt über die volle
 * Bildbreite mit gleichem Rand links wie rechts (statt 130 px Leerraum
 * links), ③ Schrift minimal kleiner — der Text steht damit in zwei
 * Zeilen statt drei und die Karte wird flacher. Nur ab 992 px — in der
 * schmalen Tablet-Spalte (768–991) und mobil quetschte die Vollbreiten-
 * Karte den Text, dort bleibt das Original-Layout. */
@media (min-width: 992px) {
  .image-wrap_testimonial {
    /* Seitenverhältnis statt fester Höhe: Eine fixe Pixel-Höhe kippte den
     * Ausschnitt je Fensterbreite (breites Fenster → breiterer Rahmen →
     * Cover zoomt ins Gesicht; PW-Meldung 19.08.). Mit dem Verhältnis
     * skaliert die Höhe mit der Breite — der Ausschnitt ist auf jeder
     * Fensterbreite identisch. 578:560 = der abgenommene Stand bei 1680 px. */
    height: auto;
    /* +7 % Höhe (PW 19.08.: Kinn frei bekommen) gegenüber dem 560er-Stand. */
    aspect-ratio: 578 / 600;
  }
  /* Glas-Karte kompakter: kleinere Innenabstände, damit sie flacher wird
   * und das Kinn nicht mehr überdeckt (PW 19.08.2026). */
  .text-info_testimonial {
    padding: 10px 12px;
    gap: 6px;
  }
  /* Seit Runde 4 steht nur noch das Kurz-Zitat + Link in der Karte —
   * die Vollbreiten-Fassung (für den alten Langtext gebaut) wirkte
   * dadurch leer (PW 23.08.). Kompakt rechts unten andocken. */
  .text-info_testimonial {
    left: auto;
    right: 15px;
    width: fit-content;
    padding: 12px 18px;
  }
  .text-info_testimonial p,
  .text-info_testimonial div {
    font-size: 14px;
  }
  /* Höherer Rahmen = weniger vertikaler Überstand — Kopf-Luft wieder auf
   * die ~5-%-Porträt-Norm bringen. */
  .image_cover.timon {
    object-position: 50% 12%;
  }
}

/* Testimonial-Typografie (PW 19.08.2026): Name/Titel größer, fett und im
 * CI-Grün; die Kennzahlen 15+/6+ größer und fett (bleiben grün); die
 * Unterzeilen dazu in Weiß. Das !important an der Namensfarbe ist nötig,
 * weil die Kontrast-Pauschalregel weiter oben (color: inherit, sehr hohe
 * Spezifität durch die :not-Ketten) sie sonst überstimmt. */
.section_testimonial p.heading-style-h3.margin-0 {
  font-size: 22px;
  font-weight: 700;
  color: #1b3f38 !important;
}
.section_testimonial .heading-style-h3.tone-medium {
  font-size: 54px;
  font-weight: 700;
}
.section_testimonial .text-size-large.tone-medium {
  color: #fff;
}

/* Foto-Kacheln in den Karten-Grids (PW 19.08.2026): Das Original will die
 * Kachel per height:100% auf Zeilenhöhe ziehen, deckelt sie aber mit
 * max-height:24.89vw — ab ~1920 px Fensterbreite wachsen die Text-Karten
 * darüber hinaus und die Foto-Kachel bleibt kleiner als ihre Nachbarn.
 * Deckel weg (die Varianten-Deckel .home-div/.paralax-image/.image-6-items
 * mit max-height:100% bleiben durch ihre höhere Spezifität bestehen) und
 * das Bild absolut in die Kachel gelegt: Es füllt sie per Cover und trägt
 * selbst nichts mehr zur Zeilenhöhe bei — die bestimmen allein die Karten.
 * Damit ist die Foto-Kachel auf jeder Fensterbreite exakt so groß wie die
 * Kacheln daneben. */
.card_image-feature {
  max-height: none;
  position: relative;
}
/* Startseiten-Variante („Was Proteccolor ausmacht"): Dort liegt die
 * Foto-Kachel in einem Flex-Container mit align-items:flex-start und
 * eigenem Höhen-Deckel — auf Stretch koppeln, damit auch sie exakt die
 * Höhe der Nachbar-Karten bekommt. */
.holder-images {
  align-items: stretch;
}
.card_image-feature.image-6-items {
  height: auto;
  max-height: none;
}
.card_image-feature img {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  transform: none !important;
  object-fit: cover;
}

/* ══ Mobil-/Tablet-Reparaturen (Designcheck 19.08.2026) ══════════════════
 * Befund des Breakpoint-Checks: Die Mobil-Zustände des Webflow-Originals
 * sind an mehreren Stellen unfertig (identisch auf der Staging nachge-
 * messen) — hier bewusst über das Original hinaus repariert. */

/* 1. Sektions-CTA („Kontakt aufnehmen") ragte unter 480 px über den
 *    rechten Rand (Flex nowrap neben der Überschrift). Umbrechen lassen. */
@media (max-width: 479px) {
  .headline_features-facts-factbox.button {
    flex-wrap: wrap;
    row-gap: 12px;
  }
}

/* 2. FAQ-Zeilen 480–767 px: Das Original gibt dem Zeilen-Grid EINE fixe
 *    Spalte — das Plus-Icon rutschte unter die Frage. Zwei Spalten,
 *    vertikal zentriert (wie bei 900 px und 390 px). */
@media (min-width: 480px) and (max-width: 767px) {
  .expandable-top {
    grid-template-columns: 1fr auto;
    align-items: center;
  }
}

/* 3. Team-Raster unter 480 px: krumme feste Spaltenbreiten (134/192 px …)
 *    machten die Kacheln ungleich — auf gleich breite Spalten gestellt.
 *    Die Namen standen in 5,85 px (kleiner als die Rollen-Labels) —
 *    lesbare Größe, Hierarchie wiederhergestellt. */
@media (max-width: 479px) {
  .member_halves,
  .member_thirds {
    /* minmax(0,1fr): Nacktes 1fr schrumpft nicht unter die Mindestbreite
     * des Inhalts — das lange Rollen-Label „Qualitätsmanagement" zwang
     * seine Spalte breiter und machte die Kacheln ungleich. */
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;
  }
  .label-large.team {
    overflow-wrap: anywhere;
  }
}
@media (max-width: 767px) {
  /* Voller Original-Selektor (0,3,0) — die 1.5vw-Regel des Originals ist
   * gleich spezifisch und verlor nur durch die Ladereihenfolge nicht. */
  .text-size-large.text_body-bold.team {
    font-size: 16px;
  }
}

/* 4. „Unsere Leistungen"-Karten 480–991 px: Das Original zeigt die
 *    Karten-Hintergrundbilder nur unter 480 px (Desktop = Hover) — im
 *    Zwischenbereich blieben die Karten LEER. Die Mobil-Hintergründe
 *    gelten jetzt bis 991 px (Touch-Geräte haben keinen Hover). */
@media (min-width: 480px) and (max-width: 991px) {
  /* Struktur-Umschalter wie im ≤479-Original: Desktop-Hover-Karten aus,
   * Mobil-Karten (mit festen Hintergrundbildern) an — sonst blieben die
   * Karten im Touch-Bereich 480–991 leer. Werte 1:1 aus dem 479er-Block. */
  .newsroom_halves.desktop {
    display: none;
  }
  .leistungen-wrapper {
    grid-column-gap: 40px;
    grid-row-gap: 40px;
    flex-flow: column;
    display: flex;
  }
  .leistungen-link {
    border-radius: var(--_🔘-radius---general--default);
    flex-flow: column;
    justify-content: space-between;
    align-items: stretch;
    width: 100%;
    min-height: 400px;
    padding: 40px 40px 20px 25px;
    display: flex;
    position: relative;
  }
  .leistungen-paragraph {
    color: var(--_🎨-color--tokens---tone--strong);
    font-size: var(--_🔠-typography---size--h3);
  }
  .leistungen-paragraph.link {
    font-size: var(--_🔠-typography---size--body-2);
  }
  .transparent-image-div {
    position: absolute;
    inset: 0;
    z-index: -1;
    border-radius: var(--_🔘-radius---general--default);
    background-position: 50% 50%;
    background-size: cover;
    background-image: linear-gradient(#000000a8 6%, #00000075 54%, #00000057 95%), url('../images/kundenfotos/maskierte-metallgehaeuse-lackiervorbereitung-940w.webp');
  }
  .transparent-image-div._2nd {
    background-image: linear-gradient(#000000a8 6%, #00000075 54%, #00000057 95%), url('../images/proteccolor_03.ae85b787d9ddd95653e49d326cf6592f.jpg');
  }
  .transparent-image-div._1st {
    background-image: linear-gradient(#000000a8 6%, #00000075 54%, #00000057 95%), url('../images/kundenfotos/stahlprofile-pulverbeschichtung-kabine-940w.webp');
  }
}

/* 5. Timon-Porträt unter 992 px: Der breit-flache Original-Rahmen zoomte
 *    ins Gesicht (Kinn ab, Overlay über dem Mund) — Porträt-freundliches
 *    Seitenverhältnis + Ausrichtung nach der 5-%-Norm. */
@media (max-width: 991px) {
  .image-wrap_testimonial {
    height: auto;
    aspect-ratio: 4 / 5;
  }
  .image_cover.timon {
    object-position: 50% 12%;
  }
}

/* 6. Komplettservice-Hero (Lkw-Banner) unter 480 px: Der mittige
 *    Cover-Ausschnitt schnitt den proteccolor-Schriftzug auf der Plane
 *    an — Fokus nach links auf Zugmaschine + Schriftzug. */
@media (max-width: 479px) {
  img[src*="proteccolor-lkw-fuhrpark-banner"] {
    object-position: 28% 50%;
  }
}


/* ══ Mobil-Startseite nach Webflow-Designer-Soll (19.08.2026) ═══════════ */

/* Button-Pfeile: Das Webflow-Skript blendet sie erst beim Hover ein —
 * auf Touch-Geräten gibt es keinen Hover, der Designer-Soll zeigt sie
 * permanent. Unter 992 px daher immer sichtbar (!important schlägt das
 * Inline-width:0 des Skripts). */
@media (max-width: 991px) {
  .button_icon-wrap {
    width: auto !important;
  }
}

/* Hero mobil deutlich dunkler: Der Designer-Soll zeigt einen dunklen,
 * satten Hero — unser helles Pistolen-Foto braucht mobil das kräftige
 * Abdunklungs-Gefälle (Werte = Original-Mobil-Gradient). */
@media (max-width: 767px) {
  .section_hero-home {
    background-image: linear-gradient(#000000a8 6%, #00000075 54%, #00000057 95%), url('../images/kundenfotos/lackierpistole-hero-proteccolor.webp');
  }
}

/* Footer unter 480 px nach Designer-Soll: Adresse zentriert über die
 * volle Breite, darunter Kontakt und Geschäftszeiten als ZWEI Spalten
 * mit Luft — statt Adresse+Kontakt gequetscht nebeneinander und
 * Geschäftszeiten allein darunter. */
@media (max-width: 479px) {
  .footer_columns-2.left {
    justify-content: space-evenly;
  }
  .footer_columns-2.left > .footer_column-2:first-child {
    flex-basis: 100%;
    align-items: center;
    text-align: center;
  }
  .footer_column-2.mobile-last {
    margin-left: 0;
    margin-right: 0;
  }
}

/* Zahlen-Sektion (35+ / >1 Mio. / >100 k) mobil luftiger — im Soll haben
 * Zahl und Label sowie die Blöcke untereinander deutlich mehr Abstand. */
@media (max-width: 767px) {
  .heading_overview-system {
    margin-bottom: 10px;
  }
  .overview_halves > div,
  .overview_thirds > div {
    padding-top: 14px;
    padding-bottom: 14px;
  }
}

/* PW-Meldungen über das Anpassung-melden-Widget (19.08.2026, mobil): */

/* Meldung 1: Die Karten der Feature-Grids füllten ihre Grid-Zelle mobil
 * nicht (Karte 351 px in 390-px-Zelle) — rechts blieb mehr Rand als
 * links. Volle Zellenbreite bis zur Padding-Grenze. */
@media (max-width: 479px) {
  .grid_features .card_feature {
    width: 100%;
    max-width: none;
  }
}

/* Meldung 2: „Mehr erfahren" in den drei Leistungs-Kacheln ~30 % größer
 * und unterstrichen, damit es als Link erkennbar ist. */
.leistungen-paragraph.link {
  font-size: calc(var(--_🔠-typography---size--body-2) * 1.3);
  text-decoration: underline;
  text-underline-offset: 0.18em;
}

/* PW-Meldungen Runde 2 (19.08.2026, Anpassung-melden-Widget): */

/* M1: Die Fakten-Überschriften („Gegründet", „Standort", „Leistungen" …)
 * auf /ueber-uns standen weiß — im CI-Grün gewünscht. Nur die Titel der
 * Fakten-Zeilen (expandable-top-factbox), nicht die FAQ-Fragen. */
.expandable-top-factbox .heading-style-h4 {
  color: #1b3f38;
}

/* M2: „Nachricht senden" klebte direkt an der Einwilligungs-Checkbox
 * (9 px) — Luft nach oben. Ohne Container-Präfix, der Knopf liegt
 * direkt im Formular-Element (kein .form-kontakt-Wrapper). */
.submit-button {
  margin-top: 32px;
}

/* M4: Formular und Karte lagen mobil ohne jeden Abstand aneinander
 * (0 px) — deutlicher Abstand, sobald beide untereinander stehen. */
@media (max-width: 991px) {
  .map.karte-consent {
    margin-top: 56px;
  }
}

/* M5: Die Überschrift „Kontaktieren Sie uns" brauchte mobil mehr Abstand
 * zum Element darüber. */
@media (max-width: 991px) {
  /* Voller Original-Selektor (.kontakt-h1.second-info, 0-2-0) — die
   * Kurzform h2.kontakt-h1 (0-1-1) verlor gegen die Original-Regel. */
  .kontakt-h1.second-info {
    margin-top: 88px;
  }
}

/* PW-Meldung: Die Karte auf der Kontaktseite hatte eine feste Höhe
 * (400 px) und war dadurch kürzer als das Formular daneben (541 px) —
 * oben und unten unbündig. Ab Tablet-Breite füllt sie jetzt die Höhe
 * ihrer Zeile, also exakt die Formularhöhe. Unter 768 px (gestapelt)
 * bleibt die feste Höhe des Originals. */
@media (min-width: 768px) {
  .div-block-3,
  .div-block-3 > .form-holder {
    align-items: stretch;
  }
  .kontakt-div-holder._2nd-edition {
    flex: 1 1 auto;
    height: 100%;
    align-self: stretch;
  }
  .map._2nd-version.karte-consent {
    height: 100%;
    min-height: 100%;
  }
}

/* Kleiner CTA-Knopf („Projekt anfragen" in der Navigation): Das Original
 * gibt ihm ab 1440 px eine FESTE Breite (135 px) — der Inhalt braucht aber
 * mehr (Text 124 px + Innenabstände 38 px), und beim Überfahren klappt
 * zusätzlich der Pfeil auf (+15 px). Bei `overflow: hidden` wurde der Text
 * dann links angeschnitten (PW-Meldung #128, 19.08.2026). min-width sorgt
 * dafür, dass der Knopf nie schmaler wird als sein Inhalt — die feste
 * Breite bleibt sonst wirksam, die Hover-Animation ebenso. */
.cta_small {
  min-width: max-content;
}

/* Kontakt-Icons robust dimensionieren (PW-Meldung 21.08.2026, Fabio-
 * Feedback 6.1): Die Größe steckte allein im HTML-Attribut `width="25"`
 * innerhalb eines <picture>-Konstrukts. Lokal (Dev UND Build) rendert das
 * korrekt mit 25 px, auf der Vorschau erscheinen die Icons dagegen in
 * Originalgröße (128 px) — ein Attribut wird von jeder CSS-Regel mit
 * `width` überstimmt, und offenbar greift dort eine. Feste CSS-Größe
 * beendet die Abhängigkeit vom Attribut in jedem Browser und jeder
 * Umgebung. */
.social-media-icon {
  width: 25px;
  height: 25px;
  object-fit: contain;
  flex: 0 0 auto;
}

/* ══ Kundenfeedback Fabio #3 (21.08.2026) ══════════════════════════════ */

/* 1.2/1.3 Hero-Kopf: Fabio will die Headline als reine Schlagworte mittig
 * (Satzzeichen raus — im Markup erledigt) und den Claim NICHT mehr in der
 * schmalen rechten Spalte, sondern als zentrierte Unterzeile darunter.
 * Damit entfällt die Kantenbündigkeit zur Scroll-Marke (PW-Wunsch vom
 * 19.08.) — bewusste Rücknahme auf Kundenwunsch. Rückweg: den
 * width:max-content-Block wieder aktivieren und diesen Abschnitt
 * entfernen. */
@media (min-width: 768px) {
  .section_hero-home .heading-7 {
    width: auto;
    margin-left: auto;
    margin-right: auto;
  }
  .section_hero-home .home-hero_top-tile {
    flex-direction: column;
    align-items: center;
    /* Volle Breite, gleiche Falle wie bei headline_hero-home: Als
     * fit-content-Kind des zentrierten content_hero-home schrumpfte die
     * Kachel auf die H1-Breite und deckelte den einzeiligen Claim. */
    width: 100%;
  }
  .section_hero-home .headline_hero-home {
    align-items: center;
  }
  /* Der Hero-Inhalt sitzt im Original in der linken Grid-Spalte und war
   * dadurch rechts der Bildschirmmitte. Fabio will den Kopf mittig —
   * Spalte über die volle Breite ziehen und Inhalt zentrieren. */
  /* Webflow setzt die Spalte per ID-Regel (grid-area: 1/2/2/3) — die ist
   * spezifischer als jede Klasse, deshalb hier mit !important. */
  .section_hero-home .content_hero-home {
    grid-area: 1 / 1 / 2 / -1 !important;
    align-items: center;
  }
  .section_hero-home .master_hero-home {
    grid-template-columns: 1fr;
  }
}

/* 1.5 Absatz unter der Kennzahlen-Zeile zentrieren (Fabio: „moderner").
 * Fachlich heikel bei neun Zeilen — deshalb zusätzlich die Zeilenlänge
 * begrenzt, damit der Block nicht ausfranst. RÜCKWEG, falls es nicht
 * gefällt: diesen Block ersatzlos löschen, dann steht der Absatz wieder
 * linksbündig über die volle Containerbreite wie zuvor. */
.section_sektion .text-h4,
.text-h4 {
  text-align: center;
  max-width: 68ch;
  margin-left: auto;
  margin-right: auto;
}

/* 6.1 Kontakt-Überschriften kleiner (Fabio: zu dominant). Die H1 hing am
 * globalen 5.33vw-Token und war dadurch GRÖSSER als die Startseiten-H1,
 * die am 19.08. auf 4.66vw verkleinert wurde — hier auf dasselbe Maß.
 * Die H2 „Kontaktieren Sie uns" trägt dieselbe Klasse und wird
 * mitverkleinert; das entspricht Fabios Wunsch („beide Ebenen").
 * VORHERIGER STAND für den Rückweg: H1 76,8 px bei 1440 px (5.33vw),
 * Einleitungstext 22,5 px (1.56vw). */
@media (min-width: 768px) {
  h1.kontakt-h1 {
    font-size: 4.1vw;
  }
  .kontakt-h1.second-info {
    font-size: 3.4vw;
  }
  /* Das Element heißt p.kontakt-paragraph — die frühere text-h5-Fassung
   * zielte auf eine Klasse, die es hier gar nicht gibt, und blieb wirkungslos
   * (Re-Audit 22.08.2026). */
  .main-holder-hero .kontakt-paragraph {
    /* clamp statt purem vw: 1.2vw allein schrumpfte den Text an der
     * 768-px-Kante auf 9,2 px (Doppelcheck 22.08.) — Untergrenze 15 px
     * hält ihn auf Tablets lesbar, Obergrenze = alter 20-px-Originalwert. */
    font-size: clamp(15px, 1.2vw, 20px);
  }
}

/* 6.1 Kontakt-Kacheln (Fabio, Folie 34): Die Überschriften standen 10 px
 * rechts der Kachelmitte, weil die Kachel nur links Innenabstand hatte,
 * und die erste Kachel saß 6 px höher als die beiden anderen (vertikal
 * zentrierter Inhalt bei ungleicher Textmenge). Beides begradigt. */
.kontakt-div {
  padding-left: 20px;
  padding-right: 20px;
  justify-content: flex-start;
}

/* 2.4 (Fabio, Folie 19): Inline-Links im Fließtext sind im dünnen
 * Schriftschnitt schwer zu lesen — kräftiger setzen. Die Unterstreichung
 * bleibt, damit sie nicht allein über die Farbe erkennbar sind (BFSG).
 * Farbe bleibt das CI-Grün (PW-Vorgabe: genau ein Grün). */
.link-intern {
  font-weight: 600;
}

/* Claim als Untertitel ZWISCHEN H1 und Knöpfen (Fabio Folie 6 „in die
 * Breite mittig zentriert unter der Überschrift" + PW 21.08.: „zwischen
 * H1 und Buttons"). Der Block sitzt seit dem Umbau im Markup direkt in
 * headline_hero-home — hier nur Breite, Ausrichtung und Abstände.
 * Der Original-gap der headline (80er) wäre mit drei Kindern doppelt so
 * hoch wie vorher, deshalb kleiner; die Knöpfe bekommen etwas mehr Luft
 * als der Claim. */
.section_hero-home .headline_hero-home {
  grid-row-gap: 24px;
  /* Volle Breite: Das Original deckelt die Headline-Spalte auf ~44 vw
   * (Zwei-Spalten-Layout); seit der Hero zentriert ist, braucht der
   * einzeilige Claim die ganze Container-Breite. */
  width: 100%;
  max-width: none;
}
.section_hero-home .text-wrap_hero-home {
  /* Kein ch-Deckel: Fabio will den Untertitel „in einer Textzeile in die
   * Breite" — ab ~1300 px passt der Satz komplett in eine Zeile, darunter
   * bricht er an der Containerbreite. (Das Original deckelte auf die
   * 3-Spalten-Breite, daher der schmale Block.) */
  max-width: 100%;
  margin-left: auto;
  margin-right: auto;
  text-align: center;
}
.section_hero-home .button-group_hero-home {
  margin-top: 12px;
  justify-content: center;
}

/* TÜV-Badge bleibt rechts außen (PW 21.08.): Die Hero-Zentrierung
 * (align-items: center auf content_hero-home) ließ die untere Zeile auf
 * Inhaltsbreite schrumpfen — Scroll-Tag und Badge rückten zur Mitte.
 * Volle Breite stellt die Original-Verteilung (space-between) wieder her. */
.section_hero-home .home-hero_bottom-tile {
  width: 100%;
}

/* 1.5 (Fabio Folie 8): Der „Seit über 35 Jahren…"-Absatz auf der
 * Startseite mittig. Bewusst auf die Mission-Sektion gescopt —
 * heading-style-h4 tragen auch FAQ- und Fakten-Überschriften auf sechs
 * weiteren Seiten, die linksbündig bleiben. */
.section_mission-b .headline_mission-b .heading-style-h4 {
  text-align: center;
  margin-left: auto;
  margin-right: auto;
}
/* Der Textblock selbst: Das Original deckelt headline_mission-b auf
 * ~57 vw und lässt sie links kleben — zentrierter Text in linksbündigem
 * Block sähe weiter schief aus, deshalb den Block mittig stellen. */
.section_mission-b .headline_mission-b {
  margin-left: auto;
  margin-right: auto;
}


/* ── Doppelcheck-Befunde 22.08.2026 (adversarialer Voll-Audit) ── */

/* 1.1 mobil: Die Hero-Bildebene stand auf 0% (linksverankert) — bei
 * schmalen Fenstern war nur die motivfreie dunkle Zone links der
 * Lackierpistole sichtbar. Das Motiv sitzt im rechten Bilddrittel. */
@media (max-width: 767px) {
  .section_hero-home {
    background-position: 0 0, 68% 50%;
  }
}

/* 1.6 bei >=1920 px: Das Original koppelt die Kartenhöhe an die
 * FENSTERHÖHE (height: 40vh) — bei nicht maximierten Fenstern
 * (< ~890 px hoch) schnitt das die Flexibilität-Karte wieder ab,
 * exakt wie auf Fabios Folie 9. Inhalt bestimmt jetzt die Höhe,
 * min-height erhält die Gleichhöhe im Raster. */
@media (min-width: 1920px) {
  .card_feature.home-div-size {
    height: auto;
    min-height: 40vh;
  }
}

/* 5.1a mobil: Das Fassaden-Logo sitzt bei ~78-88 % der Bildbreite —
 * der zentrierte Cover-Crop schnitt es unter 480 px komplett ab.
 * Nur dieses eine Bild betroffen, deshalb über src gescopt. */
@media (max-width: 767px) {
  img[src*='firmengebaeude-proteccolor-fassade-logo'] {
    object-position: 85% 50%;
  }
}

/* Hero-Claim: Das Original-vw-Token fällt an der 768-px-Kante auf
 * 8,5 px — als zentraler Untertitel unter der H1 unlesbar. clamp
 * hält 1440 px unverändert (~16 px) und sichert Tablets ab. */
@media (min-width: 768px) {
  .section_hero-home .text-wrap_hero-home p {
    font-size: clamp(14px, 1.11vw, 22px);
  }
}

/* 6.1b: Die zweizeilige Adresse der ersten Kontakt-Kachel schob deren
 * Fax-/Telefon-Zeilen 13 px tiefer als bei den Nachbar-Kacheln.
 * Einheitliche Zeilenhöhe lässt alle Zeilen und damit auch die
 * Kachelhöhen beider Reihen fluchten. */
.kontakt-div .social-media-div {
  min-height: 53px;
  align-items: center;
}

/* ── Abnahme-Fixes 23.08.2026 ─────────────────────────────────────────── */

/* §7.4: Der Fließtext-Font lag nur als WOFF vor (121 KB) — WOFF2 spart
 * ~23 % auf dem LCP-Pfad. Gleiche family überschreibt die Original-
 * Deklaration aus proteccolor.css (diese Datei lädt zuletzt). */
@font-face {
  font-family: 'Overused Grotesk';
  src: url('../fonts/OverusedGrotesk-VF.woff2') format('woff2-variations'),
       url('../fonts/OverusedGrotesk-VF.woff') format('woff');
  font-weight: 300 900;
  font-style: normal;
  font-display: swap;
}

/* §8.3: Skip-Link — unsichtbar bis zum Tastatur-Fokus. */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 10000;
  background: #1b3f38;
  color: #fff;
  padding: 10px 18px;
  border-radius: 0 0 8px 0;
}
.skip-link:focus {
  left: 0;
}

/* D2 (26.08.2026): <main> wird nur programmatisch fokussiert (Sprungmarke),
 * ist nie selbst eine Tab-Station — der Fokusring des Browsers wäre hier ein
 * über 9000 px hoher Rahmen um die halbe Seite. Gilt ausschließlich für
 * #inhalt, alle echten Tab-Ziele behalten ihren Ring. */
#inhalt:focus {
  outline: none;
}

/* §3.7-B2: Der Mini-CTA in der Testimonial-Karte fiel auf Phones auf
 * 3–4 px (vw-Token ohne Untergrenze) — als Conversion-Element unlesbar
 * und weit unter der 24-px-Touch-Norm. */
.text-info_testimonial .link_underline-animated {
  font-size: clamp(14px, 1.11vw, 18px);
  min-height: 24px;
  display: inline-flex;
  align-items: center;
}

/* §4.3: Komplettservice-Lkw-Banner zeigte mobil fast nur Landschaft —
 * Zugmaschine + Schriftzug sitzen in der Bildmitte. */
@media (max-width: 479px) {
  img[src*='proteccolor-lkw-fuhrpark-banner'] {
    object-position: 52% 50%;
  }
}

/* §3.5-B3: Team-Rollen-Labels brachen mobil mitten im Wort um
 * („QUALITÄTSMANAGEM/ENT") — mit Trennstrich statt hartem Umbruch. */
.label-large,
.label {
  overflow-wrap: normal;
  hyphens: auto;
  -webkit-hyphens: auto;
}

/* §8.6b: Logo-Laufband und Footer-Marquee liefen auch bei
 * prefers-reduced-motion endlos weiter (WCAG 2.3.3/2.2.2). */
@media (prefers-reduced-motion: reduce) {
  .clients-grid,
  [class*='marquee'] {
    animation-play-state: paused !important;
  }
  .clients-grid *,
  [class*='marquee'] * {
    animation-play-state: paused !important;
  }
}

/* §8.1: Footer-Links unterschritten die 24-px-Touch-Zielhöhe. */
.link_footer {
  padding-block: 4px;
  min-height: 24px;
  display: inline-flex;
  align-items: center;
}

/* §8.5: Bei 320 px ragte der Hero-Claim 10 px in die GSAP-Masken —
 * „Flexibel vo…" wurde rechts gekappt. */
@media (max-width: 340px) {
  .section_hero-home .text-wrap_hero-home {
    padding-inline: 18px;
  }
}

/* §8.1: Screenreader-Volltext für GSAP-zerlegte Absätze (siehe Basis.astro). */
.sr-volltext {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}


/* Runde-4-Feedback (Fabio 23.08.2026): Über-uns-Header etwas nach links
 * schieben — rechts (Rest der Halle + Logo) ist interessanter als das
 * geparkte Auto links. Mobil (<768) gilt weiter die 85%-Regel oben. */
/* object-position griff hier nicht: Auf breiten Slots beschneidet Cover
 * nur vertikal. Die Bildbox ist aber 120 % breit und mittig — flex-end
 * schiebt sie an den rechten Anschlag: sichtbar wird der rechte Teil
 * der Halle samt Logo, das Auto links verschwindet fast ganz. */
/* Runde 4 (Fabio): „mehr vom rechten Gebäudeteil" — der breite Desktop-
 * Slot zeigt das Foto in voller Breite (Cover beschneidet nur vertikal),
 * CSS kann nichts verschieben. Gelöst am Quellbild: links 405 px
 * (Auto-Zone) beschnitten, Stufen neu als 500/1000/1600/1900w. */


/* Über-uns-/Leistungs-Header: Das Webflow-Parallax-Skript verschiebt das
 * Cover-Bild beim Scrollen per transform und reißt dabei oben/unten
 * schwarze Lücken auf (PW-Screenshot 23.08., 96 px bei 1700er-Breite).
 * Der Mikroeffekt ist die kaputte Darstellung nicht wert — Transform aus,
 * Bild füllt den Rahmen exakt. */
.image-wrap_about-a .image_cover.parallax {
  transform: none !important;
  /* Und weil der Parallax-Effekt hier ohnehin abgeschaltet ist: Die 120-%-
   * Überbreite aus dem Original (`.image_cover.parallax { width: 120% }`,
   * ab 1920 px zusätzlich `max-width: 120%`) wird vom Rahmen nur noch
   * weggeschnitten — sie verlangt aber eine um 20 % größere Quelldatei.
   * Bei 1920 px Fenster war der Bildkasten 2304 px breit, bei 2560 px sogar
   * 3072 px. Kappen senkt die Auflösungsanforderung der flachen
   * Leistungs-Banner spürbar (Zweitlauf-Befund A1/A2, 26.08.2026).
   *
   * Wirkt ausschließlich auf /nasslackierung und /komplettservice:
   * Auf /ueber-uns und /pulverbeschichtung schrumpft das Bild als Flex-Item
   * ohnehin auf Containerbreite, dort ist das Ergebnis mit und ohne Kappung
   * bitgleich (gemessen). PWs Ausschnitt-Vorgabe vom 23.08. für das
   * Fassadenbild bleibt damit unangetastet. */
  width: 100%;
  max-width: 100%;
}

/* Fassaden-Header: PW-Vorgabe 23.08. — die linke untere Hallenecke muss
 * links unten im Bild sichtbar sein. Quellbild neu ab x=160 beschnitten
 * (Ecke bleibt, Auto raus); der vertikale Cover-Ausschnitt wird so gelegt,
 * dass Gebäudeunterkante UND Logo im Fenster liegen. */
@media (min-width: 768px) {
  img[src*='firmengebaeude-proteccolor-fassade-logo'] {
    object-position: 0% 62%;
  }
}

/* Timon-Zitat ~20 % größer (PW 23.08.). */
.text-info_testimonial .text_body-bold {
  font-size: 17px;
}

/* Hero gestreckt (PW 24.08.): Zwischen Knöpfen und der unteren Zeile
 * (Scroll-Hinweis + TÜV-Badge) lagen ungenutzt bis zu 259 px, während
 * H1/Claim/Knöpfe eng aufeinander saßen. Der Textblock füllt jetzt die
 * freie Höhe und ist unten verankert: Die Knöpfe enden knapp über dem
 * TÜV-Badge, die Abstände dazwischen wachsen mit.
 * Selbstregulierend: Bei breiten Fenstern (große vw-H1) und flachen
 * Fenstern bleibt weniger Platz — die clamp-Abstände schrumpfen mit,
 * statt in die untere Zeile zu laufen. */
/* Zweitlauf-Befund: Die Hero-Streckung galt erst ab 992 px — zwischen 768
 * und 991 klaffte dadurch bis zu 570 px Leere zwischen Knöpfen und der
 * unteren Zeile. Grenze auf 768 gezogen. */
@media (min-width: 768px) {
  .section_hero-home .home-hero_top-tile {
    flex: 1 1 auto;
    min-height: 0;
  }
  .section_hero-home .headline_hero-home {
    height: 100%;
    justify-content: flex-end;
    padding-bottom: clamp(16px, 3vh, 34px);
    grid-row-gap: clamp(24px, 6vh, 64px);
    row-gap: clamp(24px, 6vh, 64px);
  }
  .section_hero-home .button-group_hero-home {
    margin-top: 0;
  }
}

/* ══ Zweitlauf-Befunde 26.08.2026 (adversarialer Check vor dem Livegang) ══ */

/* BLOCKER: Fluid-Typografie ohne Untergrenze.
 * Das Webflow-Original definiert alle Textgrößen ab 768 px rein in vw und
 * deckelt sie nach unten NICHT — px-Werte gibt es nur unter 767 px. Ein
 * einziges Pixel Fensterbreite (767→768) halbierte damit die Schrift:
 * Fließtext 16 → 6,8 px, Button-Beschriftung 10,9 → 5,1 px. Betroffen war
 * jede Breite bis ~1728 px, also alle Tablets und kleineren Notebooks.
 * Gemessen im Zweitlauf über 26 Breiten (Minimum 4,32 px).
 *
 * Fix als Token-Override (anpassungen.css lädt zuletzt): dieselbe
 * vw-Skalierung, aber mit Unter- UND Obergrenze. Erst ab 768 px, damit die
 * bestehenden Mobil-Overrides des Originals unangetastet bleiben.
 * Die Obergrenzen halten sehr breite Schirme im Rahmen; bei den bisher
 * abgenommenen Breiten (1440–1920) ändert sich praktisch nichts.
 * Zu JEDER Größe gehört die Zeilenhöhe mit Untergrenze — sonst kollidieren
 * die Zeilen (eigener Befund: Hero-Unterzeile, Zeilenabstand < Schriftgröße). */
@media (min-width: 768px) {
  /* ⚠️ Doppelter Selektor mit Absicht: Unter 991 px setzt das Original
   * dieselben Token nicht auf :root, sondern auf `body` — eine :root-Regel
   * allein verliert dort (gemessen: 768-900 px blieben unverändert bei
   * 6,8 px Fließtext). Deshalb beides. */
  :root,
  body {
    --_🔠-typography---size--body-1: clamp(16px, 1.11vw, 24px);
    --_🔠-typography---line-height--body-1: clamp(25px, 1.78vw, 38px);
    --_🔠-typography---size--body-2: clamp(14px, 0.89vw, 19px);
    --_🔠-typography---line-height--body-2: clamp(21px, 1.33vw, 28px);
    --_🔠-typography---size--button-1: clamp(13px, 0.78vw, 16px);
    --_🔠-typography---line-height--button-1: clamp(18px, 1.11vw, 23px);
    --_🔠-typography---size--button-2: clamp(12px, 0.67vw, 15px);
    --_🔠-typography---line-height--button-2: clamp(16px, 0.9vw, 20px);
    --_🔠-typography---size--label-1: clamp(12px, 0.67vw, 15px);
    --_🔠-typography---line-height--label-1: clamp(16px, 0.89vw, 20px);
    --_🔠-typography---size--label-2: clamp(11px, 0.56vw, 13px);
    --_🔠-typography---line-height--label-2: clamp(14px, 0.67vw, 16px);
    --_🔠-typography---size--h5: clamp(18px, 1.56vw, 30px);
    --_🔠-typography---line-height--h5: clamp(22px, 1.78vw, 34px);
    --_🔠-typography---size--h4: clamp(20px, 2vw, 38px);
    --_🔠-typography---line-height--h4: clamp(24px, 2.22vw, 42px);
  }

  /* Header-CTA + Navigation: Trefferfläche nach WCAG 2.2 (mind. 24 px hoch).
   * Gemessen war der Haupt-CTA bei 768 px nur 73 × 12 px groß. */
  .cta_small,
  .nav_menu-link,
  .nav-link {
    min-height: 24px;
    display: inline-flex;
    align-items: center;
  }
}

/* Hero-Unterzeile: Die GSAP-Zeilen erbten eine vw-Zeilenhöhe, die zwischen
 * 768 und ~1050 px KLEINER war als die Schrift — die Unterlängen schnitten
 * durch die nächste Zeile. Feste relative Zeilenhöhe für den Claim. */
.section_hero-home .text-wrap_hero-home p,
.section_hero-home .text-wrap_hero-home .gsap_split_line {
  line-height: 1.45 !important;
}

/* Formular-Rückmeldungen waren praktisch unlesbar: weiße Schrift auf
 * hellem Grund (1,25:1 bzw. 1,36:1) — ausgerechnet auf der einzigen
 * Conversion-Strecke. Dunkle Schrift, WCAG-konform. */
.w-form-done,
.w-form-done div,
.w-form-fail,
.w-form-fail div {
  color: #0f2b22 !important;
}
.w-form-fail,
.w-form-fail div {
  color: #7a1420 !important;
}

/* Nachzügler: Diese Klassen setzen ihre Schriftgröße direkt (statt über die
 * Token) und blieben deshalb vom Clamp oben unberührt — gemessen zwischen
 * 6,9 und 11,9 px. Betrifft Footer-Spaltenköpfe, Rollen-Labels der Team- und
 * Kontaktkarten, Kennzahlen-Labels, Button-Beschriftung auf Phones und den
 * Pflicht-Link im Einwilligungstext des Formulars. */
.label-large-2,
.label-large,
.label {
  font-size: clamp(12px, 0.67vw, 15px) !important;
  line-height: clamp(16px, 0.95vw, 20px) !important;
}
.berschrift-footer {
  font-size: clamp(13px, 0.9vw, 17px) !important;
}
.text-size-large.text_body-bold {
  font-size: clamp(14px, 1vw, 18px) !important;
}
.button-text,
.w-form-label,
.w-checkbox-input + span,
.w-checkbox a {
  font-size: clamp(12px, 0.78vw, 15px) !important;
}

/* ══════════════════════════════════════════════════════════════════════════
   Zweitlauf-Befunde 26.08.2026, zweite Runde
   ══════════════════════════════════════════════════════════════════════════ */

/* D4 (axe target-size, wcag258): Der Spalten-Titel „Kontakt" in der Fußzeile
 * ist als einziger Titel ein Link und misst mobil nur 55,8 × 16 px. Die
 * anderen Titel sind <div> und daher nicht betroffen. min-height hebt die
 * Trefffläche auf die geforderten 24 px; die Breite bleibt bei 55,8 px
 * (gemessen). Hinweis: Das Element ist Flex-Item seiner Spalte, inline-flex
 * wird deshalb zu flex blockifiziert — hier ohne Folge, weil die Spalte ihre
 * Kinder am Anfang ausrichtet und die Breite dadurch nicht wächst. */
a.berschrift-footer {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
}

/* B1 — Footer 480–602 px: Die Spalte „Geschäftszeiten" verschwand komplett.
 * Das Webflow-Original stellt die drei Fußzeilen-Spalten unter 768 px auf
 * `flex-flow: row` um — die Kurzform setzt flex-wrap dabei auf nowrap. Die
 * Spalten selbst haben `flex: none`, können also auch nicht schrumpfen. Ihr
 * Mindestbedarf summiert sich auf 580,7 px (229,2 + 159,0 + 128,5 px Spalten
 * + 2 × 32 px Abstand) — mehr, als der Container unterhalb von ca. 603 px
 * Viewport hergibt. Folge: Die Spalte lief rechts aus dem Viewport und wurde
 * von `body { overflow-x: clip }` ersatzlos abgeschnitten. Bei 480 px waren
 * 85 % davon weg, ohne Scrollbalken zum Nachscrollen — Geschäftszeiten sind
 * auf einer Handwerksseite keine Nebensache.
 *
 * flex-wrap: wrap greift ausschließlich, solange die Zeile nicht passt — ab
 * 603 px bleibt das Layout deshalb bitgenau wie bisher (nachgemessen in
 * 10-px-Schritten von 400 bis 800 px). Kein !important nötig: anpassungen.css
 * lädt zuletzt, und die Langform schlägt die Kurzform bei gleicher
 * Spezifität. */
@media screen and (min-width: 480px) and (max-width: 767px) {
  .footer_columns-2.left {
    flex-wrap: wrap;
  }
}

/* B2 — Lange URLs in Rechtstexten liefen aus dem Bild: Auf /datenschutz endet
 * der Absatz „Beschwerderecht bei der zuständigen Aufsichtsbehörde" mit einer
 * 83 Zeichen langen, unumbrechbaren URL (bfdi.bund.de), die im HTML als
 * nackter Text steht. Bei 320 px war die Zeile 526 px breit — 222 px davon
 * lagen hinter dem rechten Bildrand. Scrollen half nicht, weil html und body
 * `overflow-x: clip` tragen: Der Mittelteil der Adresse war schlicht weg.
 * Die zuständige Regel in RechtstextInhalt.astro setzt nur Größe und
 * Abstände, kein Umbruchverhalten — deshalb hier ergänzt. */
.section_body-legal p,
.section_body-legal li,
.section_body-legal a,
.section_body-legal td {
  overflow-wrap: break-word;
}

/* NEU 26.08.2026 (bei der Nachmessung von B2 gefunden): Auf der Startseite
 * lief die Kachel-Überschrift „Pulverbeschichtung" rechts aus dem Bild — bei
 * 320 px waren 54 px weg, das Wortende fehlte sichtbar, und bei 360 px (viele
 * Android-Geräte) noch 14 px. Die Größe steht fest auf 32 px, das Wort ist mit
 * 18 Zeichen das längste der drei Kacheln.
 *
 * Die Kurve ist so gelegt, dass sie bei 375 px genau die ursprünglichen 32 px
 * erreicht: Ab dort ändert sich nichts, und einen Sprung an der Grenze gibt es
 * nicht. Gemessen: 320 → 25,0 px (Bedarf ≤ 25,8), 360 → 30,1 px (Bedarf
 * ≤ 30,4), 374 → 31,9 px. Die Untergrenze fängt Geräte unter 280 px ab. */
@media screen and (max-width: 374px) {
  .leistungen-paragraph {
    font-size: max(20px, calc(12.73vw - 15.7px));
  }
}

/* B4 — Kopf-CTA „Projekt anfragen" wurde links angeschnitten: Der Knopf ist bei
 * 320 px Fensterbreite nur 127,6 px breit, sein Inhalt braucht aber 141 px
 * (Text 127,2 + Pfeil 16 + Innenabstand 11,5). Der Text ragte deshalb 7 px über
 * die linke Knopfkante hinaus und wurde von dessen `overflow: hidden`
 * abgeschnitten — sichtbar fehlte das „P" von „PROJEKT".
 *
 * Das ist KEIN reines Alt-Geräte-Thema, wie es zunächst aussah: 320 px ist die
 * Prüfbreite für WCAG 2.2 Erfolgskriterium 1.4.10 (Reflow), und ein
 * Desktop-Browser mit 400 % Zoom landet real bei 318 px. Betroffen sind also
 * vor allem Menschen, die die Schrift vergrößern — nicht nur iPhones von 2016.
 * Abgeschnittener Text ist dort ein Informationsverlust, kein Schönheitsfehler.
 *
 * Statt eines Umbaus entfällt unterhalb von 400 px der dekorative Pfeil. Das
 * bringt 16 px — mehr als die fehlenden 14 px — und lässt Schriftgröße,
 * Trefffläche und Beschriftung unangetastet. Der Pfeil trägt keine Information;
 * das Ziel steht im Text. Ab 400 px ist er unverändert da.
 *
 * Gilt bewusst NUR für .cta_small (den Knopf in der Kopfzeile). Die großen
 * Schaltflächen im Seiteninhalt behalten ihren Pfeil auf jeder Breite. */
@media screen and (max-width: 399px) {
  .cta_small .button_icon-wrap {
    display: none;
  }
}

/* Und für den engsten Fall — 318 px, also 400 % Zoom auf einem 1280er Fenster —
 * fehlte danach noch genau 1 px. Der seitliche Innenabstand des Knopfes geht
 * dort von 5,76 auf 3 px zurück; das reicht und bleibt optisch unauffällig,
 * weil unterhalb von 340 px ohnehin jeder Pixel zählt. */
@media screen and (max-width: 339px) {
  /* Selektor bewusst zweistufig: Weiter oben steht bereits
   * `.nav_right .cta_small { padding-left: 0.6em }` (Spezifität 0,2,0).
   * Eine einstufige `.cta_small`-Regel verliert dagegen, obwohl sie später
   * steht — beim ersten Versuch blieb sie wirkungslos und wurde nur durch
   * Nachmessen im Browser entdeckt. */
  .nav_right .cta_small {
    padding-left: 3px;
    padding-right: 3px;
  }

  /* Letzte 4 px: Die Beschriftung ist gesperrt gesetzt (0,75 px Laufweite auf
   * 16 Zeichen = 12 px allein aus den Abständen). Auf 0,04em zurückgenommen
   * bleibt der gesperrte Charakter erhalten, es passt aber auch bei 318 px —
   * der Breite, bei der ein Desktop-Browser mit 400 % Zoom real landet. */
  .nav_right .cta_small .button-text {
    letter-spacing: 0.04em;
  }
}

/* ── Kundenmeldung 28.08.2026 (Livegang-Tag): TÜV-Badge abgeschnitten ── */

/* Der Hero ist im Original fest 100vh hoch, sein Inhalt (Überschriften +
 * Claim + Knöpfe + untere Zeile mit Scroll-Tag und TÜV-Badge) braucht bei
 * flachen Fenstern aber mehr: Bei 1512×750 war der Inhalt 850 px hoch,
 * das Badge ragte 125 px über die Sektion hinaus und wurde beschnitten
 * (nachgemessen am Live-Stand). Die Sektion darf mitwachsen — auf hohen
 * Fenstern ändert sich nichts, weil der Inhalt dort kleiner als 100svh ist. */
.section_hero-home {
  height: auto;
  min-height: 100svh;
}

/* Nachbesserung zum Badge-Fix (PW-Screenshot 28.08., zweiter Anlauf): Der
 * mitwachsende Hero allein reichte nicht — das Badge endete rechnerisch
 * an der Fensterkante (16 px Luft bei 1722×1025) und kippte bei real
 * kleinerem Viewport (Lesezeichenleiste) unter die Falte. Zwei Griffe:
 * fester Puffer nach unten, und bei knapper Fensterhöhe wird das Badge
 * kleiner, damit der ganze Hero-Inhalt in den ersten Blick passt. */
.section_hero-home .home-hero_bottom-tile {
  padding-bottom: 40px;
}
@media (max-height: 1080px) {
  .section_hero-home .iso-badge-image {
    /* 200 px war PW zu klein (28.08., dritter Anlauf) — 260 px wirkt fast wie
     * das Original (300) und spart trotzdem genug Hoehe fuer die Falte. */
    width: 260px;
    height: auto;
  }
  /* Vierter Anlauf (PW 28.08.): Der Puffer unter dem Badge lag UNTER der
   * Falte, weil der Hero-Inhalt (136 px Kopfabstand + 61 px Blockluecke +
   * Bloecke) die Fensterhoehe um Haaresbreite ueberragte — gemessen 942 px
   * Inhalt bei 940 px Fenster. Bei knapper Hoehe werden deshalb die OBEREN
   * Abstaende gestaucht; space-between verteilt den gewonnenen Platz, und
   * die untere Zeile (Scroll-Tag + Badge) bekommt sichtbar Luft zur Kante. */
  .section_hero-home .content_hero-home {
    padding-top: 104px;
    row-gap: clamp(20px, 3.5vh, 44px);
  }
}
