/* ============================================================
   SCHRIFTEN — ausgelagert am 13.08.2026
   ------------------------------------------------------------
   Vorher steckten beide Schriften als base64 in JEDER Seite, und
   zwar zwölfmal: einmal je Schriftschnitt, obwohl alle auf dieselbe
   Datei zeigten. Das waren 539 KB je Seite fuer 73 KB echte Daten.
   Beide sind Variable Fonts (fvar/gvar geprueft), daher genuegt je
   eine Regel mit Gewichtsbereich. Gemessene Bereiche: Archivo
   traegt 100–900, IBM Plex Sans 100–700 (darueber aendert sich
   nichts mehr). unicode-range wie im Original beibehalten.
   Pfade sind relativ zu DIESER Datei, gelten also fuer alle Seiten
   unabhaengig von ihrer Verzeichnistiefe.
   ============================================================ */
@font-face{
  font-family:'Archivo';
  font-style:normal;
  font-weight:100 900;
  font-stretch:100%;
  font-display:swap;
  src:url('fonts/archivo-var.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'IBM Plex Sans';
  font-style:normal;
  font-weight:100 700;
  font-stretch:100%;
  font-display:swap;
  src:url('fonts/plexsans-var.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ============================================================
   responsive.css — Globale responsive Feinanpassungen
   ------------------------------------------------------------
   Wird als LETZTES Stylesheet im <head> jeder Seite eingebunden
   und überschreibt damit die inline definierten Schriftgrößen.

   Die Seiten sind bereits grundlegend responsiv (Breakpoints,
   Hamburger-Nav, kollabierende Grids). Diese Datei ist der zentrale
   Ort für globale Feinjustierungen über ALLE Seiten hinweg.
   ============================================================ */


/* ============================================================
   TABLET + LAPTOP — Schriftgrößen (681–1499 px)
   ------------------------------------------------------------
   Alle großen Headlines durchgehend kompakt halten. Dieser
   Bereich beginnt direkt über dem Mobil-Breakpoint der Seiten
   (≤680 px) und reicht bis 1499 px – so gibt es bei 1280 px
   KEINEN Sprung mehr (vorher sprangen die Überschriften unter
   1280 px zurück auf die großen Basis-Werte).

   Die Werte nutzen clamp(): per vw skalieren sie auf Tablets
   automatisch nach unten; die Obergrenze (Cap) verhindert nur,
   dass sie auf breiteren Screens „riesig" werden.
   >1499 px bleibt komplett unberührt (Basis-Standard gilt dort).
   ============================================================ */
@media (min-width: 681px) and (max-width: 1499px) {

  /* Hero-Headline: Obergrenze von 120 auf 100 px (Vorgabe).
     Basis-Standard ist clamp(42px,8vw,120px). */
  .hero h1    { font-size: clamp(42px, 8vw, 100px); }

  /* Große Section- & CTA-Überschriften kompakter */
  .sec-title  { font-size: clamp(40px, 4vw, 54px); }   /* Basis bis 68 px  */
  .finder h2,.finder .hx2{ font-size: clamp(44px, 4.6vw, 62px); } /* Basis bis 76 px  */
  .consult h2,.consult .hx2{ font-size: clamp(38px, 3.8vw, 50px); } /* Basis bis 60 px  */
  .final h2,.final .hx2{ font-size: clamp(64px, 7vw, 100px); }  /* Basis bis 140 px */

  /* Fließtext / Intros einen Tick kleiner */
  .hero-sub     { font-size: 16px; }   /* Basis 18 px */
  .sec-intro    { font-size: 14px; }   /* Basis 15 px */
  .consult-text { font-size: 15px; }   /* Basis 16 px */
}


/* ============================================================
   LAPTOP — Layout-Feinheiten (1280–1499 px)
   ------------------------------------------------------------
   Nur layoutbezogene Tweaks, die gezielt fürs MacBook Air
   abgestimmt sind, damit die Buttons im ersten View sichtbar
   sind. Schriftgrößen werden NICHT hier, sondern im Block
   darüber (681–1499) gesteuert.
   ============================================================ */
@media (min-width: 1280px) and (max-width: 1499px) {

  /* Linke Hero-Spalte oben ausrichten statt unten am Bild → Headline &
     Content rücken nach oben, der Leerraum über der Headline verschwindet. */
  .hero-grid { align-items: start; }

  /* Hero-Abstände */
  .hero      { padding-top: 100px; }
  .hero-meta { margin-bottom: 30px; }
  .hero-sub  { margin: 30px 0; }

  /* Haupthebel: Hero-Bild niedriger halten. Da das Grid bottom-aligned
     ist, bestimmt die Bildhöhe, wie weit unten die Buttons liegen. */
  .hero-visual { max-height: 620px; }
}


/* ============================================================
   BUGFIXES — Mobil & Tablet
   ------------------------------------------------------------
   Vorbestehende Overflows. Ursache: einige Grids haben ein
   inline-style "grid-template-columns:…" direkt am Element –
   inline-Styles schlagen jede Media-Query, daher kollabieren
   diese Grids auf kleinen Screens nicht. Wir überstimmen sie
   gezielt mit !important.
   ============================================================ */

/* (1) Handy: JEDES Element mit inline-Grid auf 1 Spalte zwingen.
   Der Attribut-Selektor trifft nur Elemente mit inline-style
   (auch klassenlose Grids), nicht die per CSS-Klasse definierten
   Layouts wie .hero-grid, .content-block usw. */
@media (max-width: 600px) {
  [style*="grid-template-columns"] { grid-template-columns: 1fr !important; }
}

/* (2) Bekannte mehrspaltige Grids an ihren Design-Breakpoints
   kollabieren lassen – auch gegen inline-styles. */
@media (max-width: 980px) {
  .svc-grid { grid-template-columns: 1fr 1fr !important; } /* 4-spaltig -> 2 auf Tablet */
}
@media (max-width: 880px) {
  .eco-items { grid-template-columns: 1fr !important; }
}
@media (max-width: 600px) {
  .svc-grid { grid-template-columns: 1fr !important; }
}

/* (3) + (4) gelten NUR bis 1499px – große Monitore (>1499px) bleiben
   komplett unberührt von dieser Datei. */
@media (max-width: 1499px) {

  /* (3) FAQ-Antworten nicht mehr bei 300px hart abschneiden. */
  .faq-item.open .faq-a { max-height: 1500px !important; }

  /* (4) Lange (deutsche) Überschriften sicher umbrechen statt überlaufen. */
  .sec-title,.finder h2,.consult h2,.final h2,.finder .hx2,.consult .hx2,.final .hx2{
    overflow-wrap: break-word;
  }
}


/* ============================================================
   (5) HERO-BILD-FIX (alle Breiten)
   ------------------------------------------------------------
   Lange Einzelwort-Headlines (z.B. „HALLENMARKIERUNGEN") erzeugen
   bei großer Schrift eine riesige Mindestbreite der linken Grid-
   Spalte und quetschen dadurch die Bild-Spalte zusammen (das Hero-
   Bild wird winzig). Tritt nur >1499px auf, daher OHNE Media-Query.
   `hyphens:auto` (lang="de" ist gesetzt) trennt an Silbengrenzen mit
   Bindestrich, gibt die Bildspalte wieder frei und sieht sauber aus.
   Ändert KEINE Schriftgrößen.
   ============================================================ */
.hero h1 {
  hyphens: auto;
  -webkit-hyphens: auto;
  overflow-wrap: break-word; /* Fallback, falls keine Silbentrennung verfügbar */
}


/* ============================================================
   (6) HERO-BILD MOBIL/TABLET (≤980px)
   ------------------------------------------------------------
   Einspaltig gestapelt waren die Hero-Bilder riesig: hohes Portrait
   (aspect 4/5, 60vh) bzw. ungestylte Bilder in voller Auflösung.
   Lösung: JEDES Hero-Bild als kompaktes Vollbreiten-Band fixer Höhe.

   Deckt alle Varianten ab:
     - .hero-visual-Foto (Standardseiten)
     - klassenloses <img> (sportplatz)
     - Seiten ganz ohne .hero-visual-CSS (sperrflaechen)
   !important, weil mehrere Bilder inline-Styles (height:100%/object-fit)
   tragen. Bleibt 'cover' → zukunftssicher, falls Platzhalter (M-Logo)
   später durch echte Fotos ersetzt werden (kein contain/Letterbox).
   ============================================================ */
@media (max-width: 980px) {
  .hero-visual { height: 300px; max-height: none; aspect-ratio: auto; }
  .hero img {
    width: 100% !important;
    height: 300px !important;
    object-fit: cover !important;
  }
}
@media (max-width: 600px) {
  .hero-visual { height: 200px; }
  .hero img { height: 200px !important; }
}


/* ============================================================
   (7) SEKTIONS-BILDER MOBIL/TABLET (≤980px)
   ------------------------------------------------------------
   Gleiches Problem wie beim Hero: Bild-Container in Content-
   Sektionen (consult, split, feature-split, content-split, eco …)
   haben aspect-ratio 4/5 bzw. 4/3 und werden einspaltig riesig
   (z.B. .consult-visual = 704×880). Lösung: kompaktes Band fixer
   Höhe, cover. Gleiche Technik wie (6).
   ============================================================ */
@media (max-width: 980px) {
  .consult-visual,
  .content-block-visual,
  .content-split-visual,
  .feat-split-visual,
  .feature-split-visual,
  .split-visual,
  .split-visual-wrap,
  .eco-visual {
    aspect-ratio: auto;
    height: 320px;
    max-height: none;
  }
  .consult-visual img,
  .content-block-visual img,
  .content-split-visual img,
  .feat-split-visual img,
  .feature-split-visual img,
  .split-visual img,
  .split-visual-wrap img,
  .eco-visual img {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
  }
}
@media (max-width: 600px) {
  .consult-visual,
  .content-block-visual,
  .content-split-visual,
  .feat-split-visual,
  .feature-split-visual,
  .split-visual,
  .split-visual-wrap,
  .eco-visual {
    height: 220px;
  }
}


/* ============================================================
   Kundenfeedback: Textauswahl Gelb statt Blau (alle Seiten)
   ============================================================ */
::selection{background:#eba910;color:#161616}
::-moz-selection{background:#eba910;color:#161616}


/* ============================================================
   Kundenfeedback: Google-Bewertungen-Block (Startseite + Unterseiten)
   ============================================================ */
.rev-head-r{display:flex;flex-direction:column;gap:20px;align-self:end}
.rev-sub{color:var(--muted);max-width:560px;font-size:15px;line-height:1.55}
.rev-summary{display:flex;align-items:center;gap:18px}
.rev-score{font-family:'Archivo',sans-serif;font-weight:900;font-size:54px;line-height:.85;color:var(--accent)}
.rev-summary-r{display:flex;flex-direction:column;gap:7px}
.rev-stars{color:var(--accent);font-size:16px;letter-spacing:3px;line-height:1}
.rev-stars-lg{font-size:22px;letter-spacing:4px}
.rev-glink{color:var(--text);font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:.06em;text-transform:uppercase;text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:3px;width:max-content;transition:color .15s}
.rev-glink:hover{color:var(--accent)}
.rev-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line2);border:1px solid var(--line2)}
/* An .rev-grid gebunden: .rev heisst auf zwei Seiten auch der Seitentausch-
   Modifier von .split-grid ("split-grid rev"). Ungebunden traf diese Regel
   dort das Raster und machte daraus einen Flex-Container mit Innenabstand.
   Alle 189 Bewertungskarten liegen in .rev-grid, die Bindung ist verlustfrei. */
.rev-grid>.rev{background:var(--bg);padding:28px;display:flex;flex-direction:column;gap:14px}
.rev-top{display:flex;align-items:center;gap:13px}
.rev-av{width:44px;height:44px;border-radius:50%;background:var(--accent);color:#161616;display:flex;align-items:center;justify-content:center;font-family:'Archivo',sans-serif;font-weight:800;font-size:15px;flex:0 0 auto}
.rev-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
.rev-name{font-weight:700;font-size:15px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rev-date{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.06em;color:var(--muted)}
.rev-g{margin-left:auto;font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.12em;color:var(--muted);text-transform:uppercase;align-self:start}
.rev-text{color:var(--muted);font-size:15px;line-height:1.6}
@media(max-width:900px){.rev-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.rev-grid{grid-template-columns:1fr}.rev-g{display:none}}


/* ============================================================
   Kundenfeedback: Ghost-Buttons (Telefon etc.) Hover Gelb statt Weiß
   (nur globaler/dunkler Kontext; .final-CTA-Banner bleibt unberührt)
   ============================================================ */
.btn.ghost:hover{background:var(--accent);border-color:var(--accent);color:#161616}
.btn.ghost:hover .arr{background:#161616;color:var(--accent)}

/* ============================================================
   Kundenfeedback: Back-to-top-Button (alle Seiten, via site.js)
   ============================================================ */
.back-to-top{position:fixed;right:24px;bottom:24px;width:48px;height:48px;border:none;border-radius:50%;background:var(--accent);color:#161616;font-family:'Archivo',sans-serif;font-size:22px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transform:translateY(12px);transition:opacity .25s ease,transform .25s ease,visibility .25s;z-index:900;box-shadow:0 8px 24px rgba(0,0,0,.4)}
.back-to-top.show{opacity:1;visibility:visible;transform:translateY(0)}
.back-to-top.show:hover{transform:translateY(-3px)}
@media(max-width:680px){.back-to-top{bottom:84px;right:16px;width:44px;height:44px}}


/* ============================================================
   Kundenfeedback G4: Leistungen-Dropdown weniger empfindlich
   - Bridge überbrückt die 8px-Lücke zwischen Trigger und Menü
   - .wc-open (via site.js) hält das Menü mit Verzögerung offen
   ============================================================ */
.wc-svcmenu::before{content:"";position:absolute;top:-10px;left:0;right:0;height:10px}
.wc-svcnav.wc-open .wc-svcmenu{display:block}


/* ============================================================
   Kundenfeedback G1: Headlines nicht mitten im Wort umbrechen
   (mobil): keine Silbentrennung/kein word-break; lange Komposita
   passen durch etwas kleinere Schrift ganz in die Zeile.
   ============================================================ */
@media(max-width:680px){
  h1,h2,h3,h4,h5,.sec-title,.hero-title,[class*="title"],[class*="head"],[class*="hero"],.hx2,.hx{
    word-break:normal!important;
    -webkit-hyphens:manual!important;hyphens:manual!important;
    overflow-wrap:break-word;                 /* nur Notfall gegen Overflow */
  }
  h1{font-size:clamp(24px,7vw,40px)!important}
  .sec-title{font-size:clamp(22px,6.6vw,30px)!important}
}


/* ============================================================
   Kundenfeedback: Branchenführer-Marquee (alle Seiten)
   Namen gelb, Trennpunkte grau
   ============================================================ */
.marquee-item{color:var(--accent)}
.marquee-item.dot{color:var(--muted)}

/* ═══════════════ BLOCK C — Einheitliche Navigation (2026-07-30) ═══════════════ */

/* ---------- Desktop: Mega-Menü ---------- */
.wc-svcnav{position:relative;display:inline-block}
.wc-svctrig{cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.wc-car{font-size:10px;line-height:1;display:inline-block;transition:transform .2s}
.wc-svcnav.wc-open .wc-car{transform:rotate(180deg)}
.wc-svcmenu.wc-mega{
  display:none;position:absolute;top:calc(100% + 8px);left:0;
  background:var(--bg,#161616);border:1px solid rgba(255,255,255,.14);border-radius:10px;
  padding:20px;z-index:400;box-shadow:0 24px 60px rgba(0,0,0,.55);
  column-count:initial;gap:4px 24px;max-width:calc(100vw - 48px)
}
.wc-svcnav:hover>.wc-svcmenu.wc-mega,
.wc-svcnav:focus-within>.wc-svcmenu.wc-mega,
.wc-svcnav.wc-open>.wc-svcmenu.wc-mega{display:grid}
.wc-mega-4{grid-template-columns:repeat(4,minmax(202px,1fr));min-width:890px}
.wc-mega-3{grid-template-columns:repeat(3,minmax(202px,1fr));min-width:660px}
.wc-megacol{display:flex;flex-direction:column;min-width:0}
.wc-megahd{
  font-family:'Archivo',system-ui,sans-serif;font-weight:800;font-size:11px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--accent,#eba910);
  padding:2px 10px 8px;margin-bottom:6px;border-bottom:1px solid rgba(255,255,255,.12);
  min-height:46px;display:flex;align-items:flex-end
}
.wc-svcmenu.wc-mega a{
  display:block;padding:7px 10px;font-size:13px;line-height:1.35;white-space:normal;
  text-decoration:none;opacity:.82;border-radius:6px;color:var(--text,#fff);
  overflow-wrap:normal;word-break:normal;hyphens:none
}
.wc-svcmenu.wc-mega a:hover{opacity:1;color:var(--accent,#eba910);background:rgba(255,255,255,.06)}
.wc-svcmenu.wc-mega a.is-current{color:var(--accent,#eba910);opacity:1}
@media(max-width:1240px){
  .wc-mega-4{grid-template-columns:repeat(2,minmax(168px,1fr));min-width:400px}
  .wc-mega-3{grid-template-columns:repeat(2,minmax(168px,1fr));min-width:390px}
}

/* ---------- Mobil: Menü mit aufklappbaren Gruppen ---------- */
.menu-links>a,.menu-links .m-group{opacity:1!important;transform:none!important;animation:none!important}
.m-group{border-bottom:1px solid var(--line2,#2a2a2a)}
.m-grouphd{
  width:100%;background:none;border:0;color:var(--text,#fff);cursor:pointer;text-align:left;
  display:flex;justify-content:space-between;align-items:center;padding:18px 0;
  font-family:'Archivo',system-ui,sans-serif;font-weight:800;font-size:24px;text-transform:uppercase
}
.m-ind{color:var(--accent,#eba910);flex:0 0 auto;display:flex;align-items:center;justify-content:center;
  width:34px;height:34px;border:1px solid rgba(235,169,16,.45);border-radius:50%;transition:transform .25s,background .2s}
.m-ind svg{width:20px;height:20px;display:block}
.m-group.open .m-ind{background:rgba(235,169,16,.14)}
.m-group.open .m-ind{transform:rotate(180deg)}
.m-groupbody{display:none;padding:0 0 14px}
.m-group.open .m-groupbody{display:block}
.m-sub{
  font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--accent,#eba910);padding:14px 0 4px
}
.menu-links .m-groupbody a{
  display:block;padding:11px 0 11px 14px;border-bottom:0;border-left:2px solid rgba(255,255,255,.14);
  font-family:'IBM Plex Sans',system-ui,sans-serif;font-weight:600;font-size:16px;text-transform:none;
  opacity:1!important;transform:none!important;animation:none!important;color:var(--text,#fff)
}
.menu-links .m-groupbody a.is-current{color:var(--accent,#eba910);border-left-color:var(--accent,#eba910)}

/* ═══════════════ BLOCK B1 — Markierungs-Finder mobil (2026-07-30) ═══════════════ */
/* Ursache der abgeschnittenen Inhalte: grid-template-columns:1fr erlaubt den Kindern
   min-width:auto, dadurch bleibt die Spalte auf max-content (375px) in einer 350px-Karte. */
@media(max-width:880px){
  .finder-card{grid-template-columns:minmax(0,1fr);padding:22px 18px;gap:22px}
  .finder-card>*{min-width:0}
  .finder-side{min-width:0;gap:16px}
  .finder-opts{grid-template-columns:minmax(0,1fr);min-width:0}
  .finder-opt{min-width:0;padding:16px 14px;font-size:14px;gap:10px}
  .finder-opt .arr,.finder-opt span{flex:0 0 auto}
  .finder-q{font-size:22px;line-height:1.1}
  .finder-result{min-width:0}
  .finder-actions{flex-wrap:wrap;gap:8px}
  .finder-actions .btn{flex:1 1 100%!important;min-width:0;justify-content:center}
  .rec{padding:16px}
  .finder-head{margin-bottom:26px}
}

/* ═══════════════ BLOCK B2 — Anfrageformular im Finder (2026-07-30) ═══════════════ */
.finder-formwrap{border-top:1px solid var(--line2,rgba(255,255,255,.14));padding-top:18px}
.finder-form{gap:12px}
/* Das Inline-CSS stylt nur input/textarea — select fehlte komplett */
.mk-form select{
  background:rgba(255,255,255,.04);border:1px solid var(--line2,rgba(255,255,255,.14));border-radius:0;
  color:var(--text,#f2f2f0);padding:12px 14px;font-family:'IBM Plex Sans',system-ui,sans-serif;font-size:14px;
  width:100%;min-width:0;appearance:none;-webkit-appearance:none;cursor:pointer;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23eba910' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center;background-size:16px;padding-right:38px
}
.mk-form select:focus{outline:none;border-color:var(--accent,#eba910)}
.mk-form select option{background:#161616;color:#f2f2f0}
.finder-form .mk-status:empty{display:none}
.finder-form textarea{min-height:76px;resize:vertical}
@media(max-width:880px){
  .finder-formwrap{padding-top:14px}
  .finder-form .finder-actions{flex-wrap:wrap}
  .finder-form .finder-actions .btn{flex:1 1 100%!important}
}


/* ═══ SEO-LP Parkplatzmarkierungen: Verweis-Links in Content-Bloecken (2026-07-30) ═══ */
.svc-link{margin-top:auto;display:inline-flex;align-items:center;gap:8px;font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);border-bottom:1px solid transparent;align-self:flex-start;padding-bottom:2px;transition:border-color .2s}
.svc-link:hover{border-bottom-color:var(--accent)}

/* ═══ SEO-LP: Vergleichstabelle aufgewertet (2026-07-30) ═══ */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line2,rgba(255,255,255,.14))}
.data-table{width:100%;border-collapse:collapse;min-width:680px;font-size:14px}
.data-table thead th{
  background:var(--accent,#eba910);color:#161616;
  font-family:'Archivo',system-ui,sans-serif;font-weight:800;font-size:12px;
  letter-spacing:.08em;text-transform:uppercase;text-align:left;
  padding:15px 18px;white-space:nowrap;border:0
}
.data-table thead th:first-child{width:34%}
.data-table tbody td{padding:15px 18px;border-top:1px solid var(--line2,rgba(255,255,255,.12));color:var(--muted,#b9b9b4);line-height:1.5}
.data-table tbody tr:nth-child(odd){background:rgba(255,255,255,.025)}
.data-table tbody tr:hover{background:rgba(235,169,16,.07)}
/* Kriterien-Spalte als Anker hervorheben */
.data-table tbody td:first-child{
  color:var(--text,#f2f2f0);font-weight:700;
  border-left:3px solid var(--accent,#eba910);background:rgba(0,0,0,.18)
}
@media(max-width:760px){
  .data-table{font-size:13px}
  .data-table thead th,.data-table tbody td{padding:12px 13px}
  .table-wrap::after{content:"◄ seitlich scrollbar ►";display:block;font-family:'IBM Plex Mono',monospace;
    font-size:10px;letter-spacing:.1em;color:var(--muted,#8a8a86);text-align:center;padding:8px}
}

/* ═══ SEO-LP: CTA-Trenner + Leistungsliste + Link/Button-Abstand (2026-07-30) ═══ */
/* --- gelbes CTA-Band zwischen den Textblöcken --- */
.lp-cta{
  background:var(--accent,#eba910);color:#161616;
  border-top:8px solid #161616;border-bottom:8px solid #161616;
  padding:54px 0
}
.lp-cta-inner{
  /* identisch zu .wrap der Seiten: max-width 1440 + 32px Innenabstand */
  max-width:1440px;margin:0 auto;padding:0 32px;display:grid;
  grid-template-columns:1.5fr auto;gap:52px;align-items:center
}
.lp-cta-eyebrow{
  font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.15em;
  text-transform:uppercase;color:#161616;opacity:.62;margin-bottom:14px
}
.lp-cta h2,.lp-cta .hx2{
  font-family:'Archivo',system-ui,sans-serif;font-weight:900;
  font-size:clamp(27px,3.4vw,46px);line-height:1.02;letter-spacing:-.02em;
  text-transform:uppercase;color:#161616;margin:0 0 16px
}
.lp-cta-acc{color:#161616;text-decoration:underline;text-decoration-thickness:5px;text-underline-offset:8px}
.lp-cta p{font-size:15px;line-height:1.6;color:#161616;opacity:.82;max-width:520px;margin:0}
.lp-cta-actions{display:flex;flex-direction:column;gap:12px;min-width:270px}
.lp-cta-btn{
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  background:#161616;color:#f2f2f0;text-decoration:none;
  padding:17px 22px;font-family:'Archivo',system-ui,sans-serif;font-weight:800;
  font-size:13px;letter-spacing:.06em;text-transform:uppercase;
  transition:transform .15s,background .15s
}
.lp-cta-btn:hover{background:#000;transform:translateX(3px)}
.lp-cta-btn.ghost{background:transparent;color:#161616;border:2px solid #161616}
.lp-cta-btn.ghost:hover{background:rgba(22,22,22,.09)}
@media(max-width:860px){
  .lp-cta{padding:40px 0}
  .lp-cta-inner{padding:0 20px}
  .lp-cta-inner{grid-template-columns:1fr;gap:30px}
  .lp-cta-actions{min-width:0}
}

/* --- Leistungsliste in der linken Spalte (füllt die Leerfläche neben dem Bild) --- */
.lp-list{list-style:none;margin:26px 0 0;padding:0;display:flex;flex-direction:column;gap:2px}
.lp-list li{
  position:relative;padding:13px 0 13px 30px;
  border-bottom:1px solid var(--line2,rgba(255,255,255,.12));
  color:var(--muted,#b9b9b4);font-size:15px;line-height:1.5
}
.lp-list li::before{
  content:"→";position:absolute;left:0;top:13px;
  color:var(--accent,#eba910);font-weight:700
}
.lp-list li:last-child{border-bottom:0}

/* --- Verweis-Link darf nicht am CTA-Button kleben --- */
.svc-link+.btn,.svc-link+a.btn{margin-left:24px}
.svc-link{margin-right:8px;margin-bottom:6px}

/* ═══ Übersichts-Zeile im Leistungen-Menü (2026-07-30) ═══ */
.wc-megatop{
  grid-column:1/-1;display:flex;align-items:center;gap:10px;
  margin:-4px 0 14px;padding:11px 12px;
  background:rgba(235,169,16,.12);border:1px solid rgba(235,169,16,.4);border-radius:6px;
  font-family:'Archivo',system-ui,sans-serif;font-weight:800;font-size:12px;
  letter-spacing:.05em;text-transform:uppercase;color:var(--accent,#eba910)!important;
  opacity:1!important;text-decoration:none
}
.wc-megatop:hover{background:rgba(235,169,16,.2)}
.menu-links .m-groupbody a.m-top{
  border-left-color:var(--accent,#eba910);color:var(--accent,#eba910);
  font-weight:700;margin-bottom:6px
}

/* ═══ SEO-LPs: Abstand zwischen Kachel-Grids und folgendem Text/Bild (2026-07-30) ═══ */
.svc-grid + .content-grid,.svc-grid + .content-body,.svc-grid + h3,.table-wrap + .content-grid,.hero-stats + .content-grid,.svc-grid + .hx{margin-top:56px}
.svc-grid + .content-grid > .content-body > h3:first-child,.svc-grid + .content-grid > .content-body > .hx:first-child{margin-top:0}

/* ═══ SEO-LPs: Leistungskarten im Startseiten-Stil (2026-07-30) ═══ */
/* Die LPs definieren .svc-grid nur 2-spaltig und kennen .svc/.svc-img nicht. */
.svc-grid:has(> .svc){grid-template-columns:repeat(3,1fr)}
.svc{background:var(--bg,#161616);padding:32px;display:flex;flex-direction:column;gap:18px;position:relative;transition:background .2s}
.svc-img{aspect-ratio:16/10;background:#0a0a0a;overflow:hidden;margin:0 -32px}
.svc-img img{width:100%;height:100%;object-fit:cover;transition:transform .4s;display:block}
.svc:hover .svc-img img{transform:scale(1.04)}
.svc h3,.svc .hx{font-family:'Archivo',system-ui,sans-serif;font-weight:800;font-size:22px;
  text-transform:uppercase;letter-spacing:-.01em;line-height:1.05;margin:0}
.svc p{color:var(--muted,#b9b9b4);font-size:15px;line-height:1.6;margin:0}
.svc .svc-link{margin-top:auto}
@media(max-width:1100px){.svc-grid:has(> .svc){grid-template-columns:repeat(2,1fr)}}
@media(max-width:700px){.svc-grid:has(> .svc){grid-template-columns:1fr}}

/* ═══ SEO-LPs: Textbreiten — Fließtext nutzt den Container (2026-07-30) ═══ */
/* .sec-intro war auf 420px begrenzt (70% Leerraum), Fließtext auf 860/1080px. */
.sec-intro{max-width:820px}
.sec-head{align-items:start}

/* Fließtext, der über die volle Containerbreite läuft, wird zweispaltig gesetzt:
   nutzt die Breite (kein Leerraum) und hält die Zeilen bei ~75 statt 153 Zeichen. */
@media(min-width:920px){
  .wrap > .content-body{column-count:2;column-gap:56px}
  .wrap > .content-body > p{break-inside:avoid-column}
  .wrap > .content-body > h3,.wrap > .content-body > .hx{column-span:all;margin-bottom:14px}
}
/* unter 920px einspaltig — Container ist dort schmal genug für kurze Zeilen */

/* ── Referenzen: Logowand (index.html) ──────────────────────────────
   Logos liegen als helle Graustufen auf transparentem Grund vor
   (aufbereitet fuer den dunklen Sektionshintergrund #161616).
   Groesse und Abstand skalieren mit, damit auf schmalen Displays
   nicht nur ein Logo je Zeile steht. */
/* Kundenwunsch: 3 volle Reihen. 24 Logos = 3 x 8, deshalb festes Raster
   statt Flex-Umbruch, der je nach Logobreite 4 Reihen erzeugt hat. */
.logo-wall{display:grid;grid-template-columns:repeat(8,1fr);gap:34px 24px;
           align-items:center;justify-items:center;}
@media (max-width:1180px){.logo-wall{grid-template-columns:repeat(6,1fr);}}
@media (max-width:900px){.logo-wall{grid-template-columns:repeat(4,1fr);}}
.logo-wall img{max-height:38px;height:auto;width:auto;max-width:100%;object-fit:contain;
               opacity:.75;transition:opacity .25s;}
.logo-wall img:hover{opacity:1;}
@media (max-width:720px){
  .logo-wall{gap:26px 20px;}
  .logo-wall img{max-height:32px;}
}
@media (max-width:400px){
  /* 3*92 + 2*14 = 304px passen noch in die 312px bei 360px Viewport */
  .logo-wall{grid-template-columns:repeat(3,1fr);gap:22px 14px;}
  .logo-wall img{max-height:26px;}
}

/* ── Mobiler Überstand: Flex-/Grid-Kinder dürfen schrumpfen ──────────
   Ursache: die vorhandenen Mobilregeln setzen `1fr`, das bedeutet
   minmax(auto,1fr). Das Auto-Minimum ist die Inhaltsbreite, deshalb
   bleiben Spalten auf max-content stehen und ragen aus dem Viewport.
   Gleiches Muster wie beim Markierungs-Finder in Runde 2.            */
@media (max-width:980px){
  .hero-stats{grid-template-columns:minmax(0,1fr) minmax(0,1fr);}
  .hero-stat{min-width:0;}
}
@media (max-width:880px){
  /* Generisch statt Klasse für Klasse: min-width:0 hebt das Inhalts-Minimum
     von Flex- und Grid-Kindern auf. Damit verhält sich auch ein bestehendes
     `1fr` wie minmax(0,1fr). Auf Blockelemente hat die Regel keine Wirkung,
     dort ist 0 ohnehin der Ausgangswert. */
  .wrap *{min-width:0;}
  .proc-row{grid-template-columns:60px minmax(0,1fr);}
  /* Das Rasterkind ist auf mehreren Seiten ein <div>-Wrapper statt des <p>.
     Ohne diese Regel landet der komplette Schritttext in der 60px-Nummernspalte. */
  .proc-row>*:not(.proc-num):not(h3):not(.hx),.proc-row>*:not(.proc-num):not(.hx):not(.hx){grid-column:1/-1;}
  /* Zwei Ausnahmen, die absichtlich breiter als der Bildschirm bleiben: */
  .data-table{min-width:680px;}              /* scrollt innerhalb .table-wrap */
  .marquee-track,.marquee-item{min-width:auto;}  /* Laufband */
  /* lange Zeichenketten ohne Trennmöglichkeit (Telefonnummern, Normketten) */
  .mono,.split-eyebrow,.eyebrow,.proc-tag,.answer-box{overflow-wrap:anywhere;}
  /* .rev-glink hat width:max-content, dagegen hilft min-width:0 nicht */
  .rev-glink{width:auto;max-width:100%;}
  /* lange Komposita in Überschriften: erst Silbentrennung, dann harter Umbruch */
  .acc,.sec-title,.split-h,h1,h2,h3,.hx2,.hx{hyphens:auto;-webkit-hyphens:auto;overflow-wrap:break-word;}
}

/* .split-imgs .split-visual-wrap trägt zwei Klassen und ist damit spezifischer
   als der Sammelselektor oben. Ohne diese Zeile bleibt aspect-ratio:1/1 aktiv,
   die Kachel wird so breit wie hoch und sprengt ihre Rasterspalte. */
@media (max-width:980px){
  .split-imgs .split-visual-wrap{aspect-ratio:auto;}
}

/* Rechtstexte: Impressum und Datenschutz nutzen .legal-wrap statt .wrap
   und werden von der generischen Regel oben nicht erfasst. Lange Komposita
   wie „Auftragsverarbeitungsvertrag" passen bei 320px sonst nicht. */
@media (max-width:880px){
  .legal-wrap,.legal-wrap *{min-width:0;}
  .legal-wrap{hyphens:auto;-webkit-hyphens:auto;overflow-wrap:break-word;}
  .legal-wrap a,.legal a{overflow-wrap:anywhere;}
}

/* ── Sehr schmale Displays (≤400px) ──────────────────────────────────
   Das FAQ-Plus (.ic) ist flex:0 0 40px und kann nicht schrumpfen. Neben
   langen Komposita in Großbuchstaben passt es bei 320px nicht mehr in
   die Zeile und wird herausgedrückt. Abstand und Symbol verkleinern,
   lange Wörter trennen lassen. */
@media (max-width:400px){
  .faq-q{gap:12px;font-size:16px;hyphens:auto;-webkit-hyphens:auto;overflow-wrap:break-word;}
  .faq-q .ic{flex:0 0 32px;height:32px;font-size:16px;}
}

/* ── Kapitales ẞ im Versalsatz ─────────────────────────────
   `text-transform:uppercase` bildet ß nach Unicode auf SS ab. Bei der
   Maß-Familie entsteht dadurch ein anderes Wort („MASSE" = Gewicht),
   deshalb steht das Zeichen ẞ (U+1E9E) direkt im Markup. DIN 5008
   empfiehlt es für Großbuchstaben seit 2020. Betrifft nur Maße/Maßen
   und Zusammensetzungen; FUSSGÄNGER, STRASSE oder HEISSPLASTIK bleiben
   bei SS, dort ist die Schreibung eindeutig.

   Die beiden Hauptschriften oben liefern das Zeichen nicht: ihre
   `unicode-range` endet bei U+00FF. Ergänzt wird es aus dem
   latin-ext-Subset DERSELBEN Schriften, als zweite Deklaration der
   gleichen Familie mit `unicode-range:U+1E9E`. Der Browser holt sich
   damit nur dieses eine Zeichen dort, und zwar automatisch aus der
   Schrift, die an der Stelle ohnehin läuft: Archivo in Überschriften,
   IBM Plex Sans im übrigen Text. Geladen werden die Dateien nur auf
   Seiten, die ein ẞ zeigen.

   FRÜHER stand hier ein `<span class="sz">` um jedes Zeichen, mit
   eigenen Familiennamen ArchivoSZ/PlexSZ. Das war die Ursache eines
   sichtbaren Fehlers: In einem Flex-Container wird JEDES Kindelement
   zum eigenen Flex-Item. In `.faq-q` (display:flex, space-between)
   riß der Span Lücken von 169 bis 240px mitten ins Wort
   („IN WELCHEN MA … ẞ … EN"), in `.toc li a` (flex-direction:column)
   stapelte er das Wort sogar über drei Zeilen. Per CSS ist das am Span
   nicht zu heilen: Flex-Items werden blockifiziert, `display:inline`
   greift also nicht. Der Fallback auf Zeichenebene braucht gar kein
   Element und kann den Fehler deshalb nicht wieder erzeugen.
   Die Mehrdeutigkeit, die den früheren Umweg begründete, existiert
   seit der Schriftauslagerung nicht mehr: die Hauptdeklarationen
   stehen in DIESER Datei und schließen U+1E9E über ihre
   `unicode-range` sauber aus, es gibt also keine Überlappung. */
@font-face{
  font-family:'Archivo';
  font-style:normal;
  font-weight:100 900;
  font-stretch:100%;
  font-display:swap;
  src:url('fonts/archivo-latin-ext.woff2') format('woff2');
  unicode-range:U+1E9E;
}
@font-face{
  font-family:'IBM Plex Sans';
  font-style:normal;
  font-weight:100 700;
  font-stretch:100%;
  font-display:swap;
  src:url('fonts/plexsans-latin-ext.woff2') format('woff2');
  unicode-range:U+1E9E;
}

/* ── Überschrift links, Text rechts (Paket 05) ───────────────────────
   Die betroffenen Abschnitte stapeln Überschrift und Text in einem auf
   860px begrenzten Container, dadurch bleibt die rechte Seitenhälfte
   leer. Dieser Modifier hebt die Begrenzung auf und stellt zwei Spalten
   her, wie auf Stellplätzen. Typografie kommt weiterhin aus den
   seiteneigenen Regeln (.content-inner h2, .content-inner p), deshalb
   bleibt der Container seine Klasse behalten.
   Achtung: NICHT über .content-block-inner lösen — diese Klasse ist auf
   LKW-Parkplatz nur ein Breitenbegrenzer, eine globale Grid-Regel
   darauf würde die Seite zerlegen. */
.head-left{max-width:none;display:grid;grid-template-columns:1fr 1.4fr;gap:64px;align-items:start;}
.head-left > .hl-title{position:sticky;top:120px;}
.head-left > .hl-body > p:last-child{margin-bottom:0;}
@media (max-width:980px){
  .head-left{grid-template-columns:1fr;gap:28px;}
  .head-left > .hl-title{position:static;}
}

/* ── Letzte Karte allein in der Zeile (Paket 05) ─────────────────────
   Kartenraster mit 4 Elementen in 3 Spalten lassen die vierte Karte
   allein stehen, zwei Drittel der Zeile bleiben leer. Sie spannt jetzt
   über die volle Breite.
   `:last-child:nth-child(3n+1)` greift nur, wenn das letzte Element in
   der ersten Spalte einer Zeile beginnt, also tatsächlich allein steht.
   Die Media Queries sind nötig, weil der Selektor die echte Spaltenzahl
   nicht kennt: im zweispaltigen Zustand ist die vierte Karte NICHT
   allein und darf nicht gespannt werden.
   Die Regel wirkt nur mit der Zusatzklasse `span-last` am Raster, weil
   dieselbe Rasterklasse auf verschiedenen Seiten verschiedene Umbruch-
   punkte hat: .feat3-grid ist auf „Einen Parkplatz markieren" ab 769px
   dreispaltig, auf „Thermoplastische Bodenmarkierung" erst ab 981px.
   Eine ungebundene Regel haette dort im zweispaltigen Zustand gespannt.
   Deshalb wird `span-last` gezielt gesetzt, nicht global. */
@media (min-width:981px){
  .feat-grid.span-last > :last-child:nth-child(3n+1){grid-column:1 / -1;}
}
@media (min-width:769px){
  .feat3-grid.span-last > :last-child:nth-child(3n+1){grid-column:1 / -1;}
}

/* ── RAL-Farbauswahl (Paket 07) ──────────────────────────────────────
   Bisher nur auf 5 Seiten seiteneigen definiert. Zentral abgelegt,
   damit der Baustein auf jeder Seite gleich aussieht. Werte entsprechen
   der Referenz (leitlinien). */
.ral-grid{display:flex;flex-wrap:wrap;gap:8px;margin-top:28px;}
.ral-swatch{width:44px;height:44px;border:1px solid var(--line);transition:transform .15s;}
.ral-swatch:hover{transform:scale(1.15);}

/* ── Blogkarten „Das könnte Sie auch interessieren" (Paket 07) ───────
   Vorher nur auf 7 bzw. 9 Seiten seiteneigen definiert. Zentral, damit
   der Baustein auf allen 32 Seiten identisch aussieht. Werte = Referenz. */
.related-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line2);border:1px solid var(--line2);}
.related-card{background:var(--bg);padding:32px;display:flex;flex-direction:column;gap:14px;transition:background .2s;}
.related-card:hover{background:var(--concrete);}
.related-card .date{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.15em;text-transform:uppercase;color:var(--accent);}
.related-card h3,.related-card .hx{font-family:'Archivo',sans-serif;font-weight:800;font-size:18px;text-transform:uppercase;letter-spacing:-.01em;line-height:1.1;}
.related-card p{font-size:14px;color:var(--muted);line-height:1.55;}
.related-card .card-link{margin-top:auto;display:inline-flex;align-items:center;gap:8px;font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);border-bottom:1px solid transparent;align-self:flex-start;padding-bottom:2px;transition:border-color .2s;}
.related-card .card-link:hover{border-bottom-color:var(--accent);}
.card-img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;margin-bottom:16px;background:#0c0c0c;}
@media(max-width:980px){.related-grid{grid-template-columns:1fr 1fr;}}
@media(max-width:600px){.related-grid{grid-template-columns:1fr;}}

/* ── Leistungssegmente vollflächig klickbar (Paket 09) ────────────────
   .svc bringt position:relative schon mit. Die Deckfläche liegt über
   der Karte, der Beratungslink darüber, damit er weiter eigenständig
   funktioniert. */
.svc-cover{position:absolute;inset:0;z-index:0;}
/* Inline-Links im Kacheltext müssen über der Deckfläche liegen, sonst
   schluckt sie der Segmentlink (auf der Startseite betraf das den
   redaktionellen Link „Sperrflächen"). */
.svc p a,.svc-desc a,.bento-item p a,.bento-card p a,.part-item p a,.eco-item p a{position:relative;z-index:2;}

/* Kundenwunsch „Link im ganzen Segment", auch auf den Themenseiten.
   Umgesetzt über den vorhandenen „Mehr Infos"-Link statt über eine zweite
   Deckfläche: der Link spannt sich per ::after über die ganze Kachel auf.
   Vorteil gegenüber .svc-cover: der Kacheltext bleibt markierbar und
   Inline-Links bleiben erreichbar. */
.svc,.bento-item,.bento-card,.part-item,.eco-item{position:relative;}
/* Der Link darf selbst nicht positioniert sein, sonst bezieht sich inset:0
   auf den Link statt auf die Kachel (so war es auf leitlinien.html). */
.svc>a:last-child:not(.svc-cover):not([href^="#"]),.bento-item>a:last-child:not([href^="#"]),.bento-card>a:last-child:not([href^="#"]),
.part-item>a:last-child:not([href^="#"]),.eco-item>a:last-child:not([href^="#"]){position:static;}
.svc>a:last-child:not(.svc-cover):not([href^="#"])::after,.bento-item>a:last-child:not([href^="#"])::after,.bento-card>a:last-child:not([href^="#"])::after,
.part-item>a:last-child:not([href^="#"])::after,.eco-item>a:last-child:not([href^="#"])::after{content:"";position:absolute;inset:0;z-index:1;}
.svc:hover,.bento-item:hover,.bento-card:hover,.part-item:hover,.eco-item:hover{cursor:pointer;}
.svc-cover:focus-visible{outline:2px solid var(--accent);outline-offset:-4px;}
/* Alles, was eigenständig anklickbar bleiben muss, liegt über der
   Deckfläche. Der Beratungslink war von Anfang an dabei, die Links im
   Fließtext nicht — dadurch war der einzige redaktionelle Inline-Link
   der Startseite („Sperrflächen" in Kachel 03) nicht mehr erreichbar,
   der Klick landete auf der Kachelseite. Das arbeitete gegen den
   Kundenwunsch, die interne Verlinkung im Text zu stärken. Als Regel
   für alle Absatzlinks, damit ein künftiger Textlink nicht wieder
   verdeckt wird. */
.svc > .svc-link,.svc p a{position:relative;z-index:2;}

/* ── Links im Fließtext sichtbar machen (Paket 09) ────────────────────
   Bisher gab es diese Regel nur auf dem Parkplatz-Hub, überall sonst
   nahm ein Textlink die Farbe des Absatzes an und war nicht als Link
   erkennbar. Bewusst eng gefasst: nur Links ohne eigene Klasse in
   Inhaltsabsätzen, damit Buttons, Karten, Menü und Fußzeile unberührt
   bleiben. */
.wrap p > a:not([class]),
.content-body a:not(.btn),
.proc-row a:not(.btn){
  color:var(--accent);
  border-bottom:1px solid rgba(235,169,16,.4);
  transition:border-color .2s;
}
.wrap p > a:not([class]):hover,
.content-body a:not(.btn):hover,
.proc-row a:not(.btn):hover{border-bottom-color:var(--accent);}

/* ── Inhaltsverzeichnis (Paket 09) ───────────────────────────────────
   Bisher nur seiteneigen auf den drei Hubs. Zentral, damit es auf den
   elf neuen Seiten identisch aussieht. Werte = Vorlage Parkplatz-Hub. */
.toc-sec{background:var(--bg2);padding:44px 0;border-bottom:1px solid var(--line2);}
.toc{display:grid;grid-template-columns:200px 1fr;gap:28px;align-items:start;}
.toc p{font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);padding-top:4px;margin:0;}
.toc ol{list-style:none;counter-reset:toc;display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0;padding:0;}
.toc li{counter-increment:toc;display:flex;}
.toc li a{display:flex;flex-direction:column;gap:10px;width:100%;background:var(--concrete);border:1px solid var(--line2);padding:18px;font-family:'Archivo',sans-serif;font-weight:800;font-size:13.5px;line-height:1.2;text-transform:uppercase;letter-spacing:-.005em;transition:border-color .2s,color .2s,background .2s;}
.toc li a::before{content:"/ " counter(toc,decimal-leading-zero);font-family:'IBM Plex Mono',monospace;font-weight:400;font-size:10px;letter-spacing:.15em;color:var(--accent);text-transform:none;}
.toc li a:hover{border-color:var(--accent);color:var(--accent);background:var(--bg);}
@media(max-width:980px){.toc{grid-template-columns:1fr;gap:18px;} .toc ol{grid-template-columns:repeat(2,1fr);}}
@media(max-width:560px){.toc ol{grid-template-columns:1fr;}}

/* ── Zeilenbreite der Abschnittsüberschriften (Paket 11) ──────────────
   `.sec-title` war seiteneigen auf max-width:900px gedeckelt, obwohl im
   `.sec-head` bis zu 1376px Platz stehen. Dadurch brachen Überschriften
   um, die bequem in eine Zeile passen („Was sind Markierungsarbeiten?"
   braucht 1060px). Gemessen über 35 Seiten bei 1440/1280/1024:
   900px → 137 einzeilig, 1200px → 234, 1280px → 242. Bei 1200px wird
   kein `.sec-intro` schmaler als 220px und nichts läuft über; darüber
   bringt es kaum noch etwas und die Zeile wird zu lang zum Lesen. */
h1.sec-title,h2.sec-title,.hx2.sec-title{max-width:1400px;}
/* 1400 statt 1200 nachgezogen: bei breiten Fenstern wächst die Schrift
   auf 68px, die Zeile braucht dann rund 1335px. `.wrap` deckelt ohnehin
   auf 1440px, mehr als ~1376px stehen also nie zur Verfügung — 1400 wirkt
   damit wie „kein Deckel", gemessen identisch (161 einzeilig bei 1920/1600/1440). */

/* ── Gezielter Umbruch, nur wo er gebraucht wird (Paket 11) ───────────
   Ab 900px steht „Was sind Markierungsarbeiten?" in einer Zeile, ein
   fester <br> würde sie dort unnötig brechen. Darunter passt die Zeile
   nicht mehr und das gelbe Wort würde zerlegt — dort schaltet sich der
   Umbruch zu, damit „MARKIERUNGSARBEITEN?" zusammenbleibt. */
.br-eng{display:none;}
@media(max-width:899px){.br-eng{display:inline;}}

/* ── Bento-Kacheln: Beschreibungstext (Paket 06) ──────────────────────
   Drei Seiten tragen die Kacheln ohne Absatz, entsprechend fehlte die
   Regel. Werte wie auf stellplaetze, wo die Kacheln schon Text haben. */
.bento-card p,
.bento-item p{font-size:14px;color:var(--muted);line-height:1.5;}
/* .bento-item ist die zweite Kachelvariante (schraffierte-schwarz-gelb,
   fussgaengerueberweg). Ohne diese Regel steht der Text dort in 16px
   und voller Textfarbe, also wie eine zweite Überschrift. */

/* ── Bilder in den Bestandteile-Kacheln (Paket 08) ────────────────────
   Der Kunde hat auf acht Seiten „Bilder fehlen bei den Segmenten"
   gemeldet. Vorbild sind die Leistungssegmente der Startseite (.svc-img).
   Die negative Außenkante muss zur Innenkante der jeweiligen Kachel
   passen: .bento-card hat 28px seitlich, .bento-item und .svc je 32px. */
.bento-img{aspect-ratio:16/10;background:#0a0a0a;overflow:hidden;max-height:300px;}
/* Innenabstand vereinheitlicht: .bento-item stand auf piktogramme bei
   32px 28px, .bento-card auf sperrflaechen ebenso, auf stellplaetze bei
   32px. Ohne gleichen Wert sitzt die Bildkante nicht bündig. */
.bento-item,.bento-card{padding:32px;}
.bento-card .bento-img{margin:0 -32px;}
.bento-item .bento-img{margin:0 -32px;}
.part-item .bento-img{margin:0 -24px;}
.bento-img img{width:100%;height:100%;object-fit:cover;transition:transform .4s;}
.bento-card:hover .bento-img img,
.bento-item:hover .bento-img img{transform:scale(1.04);}

/* ── Bildgalerie „Kurzer Einblick“ (Paket 08, Gruppe 3) ───────────────
   Zwei Abschnitte versprachen einen visuellen Einblick und zeigten kein
   einziges Bild. Eigene Klasse, damit die Galerie nicht von den je Seite
   verschiedenen Kachelbausteinen abhängt. */
.galerie-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--line2);border:1px solid var(--line2);margin-top:44px;}
.galerie-item{background:var(--bg);display:flex;flex-direction:column;}
.galerie-item img{width:100%;aspect-ratio:16/10;object-fit:cover;display:block;transition:transform .4s;}
.galerie-item:hover img{transform:scale(1.04);}
.galerie-item figcaption{padding:18px 22px;font-size:13.5px;color:var(--muted);line-height:1.5;}
@media(max-width:700px){.galerie-grid{grid-template-columns:1fr;}}

/* ── Einzelbild im Zweispalter (Paket 08) ─────────────────────────────
   `.split-imgs` ist ein 1fr-1fr-Raster. Steht dort nur ein Bild, blieb
   die halbe Breite leer und das Bild wirkte zu klein (Kundenpunkt
   Flughafenmarkierungen). Ein einzelnes Bild nimmt jetzt beide Spalten. */
.split-imgs > .split-visual-wrap:only-child{grid-column:1 / -1;}
.split-imgs > .split-visual-wrap:only-child{aspect-ratio:4/5;}
/* 4:5 statt 16/10 (Nachbesserung Paket 04): die Schwesterseiten nutzen fuer das
   grosse Einzelbild im Zweispalter `.split-visual{aspect-ratio:4/5}`. Mit 16/10
   blieb das Flughafenbild halb so hoch und die 4:5-Quelle wurde beschnitten. */

/* ============================================================
   Nachbesserung Paket 06: Hero-Kennzahlenleisten trennen sauber
   ------------------------------------------------------------
   Die Regel „Kundenfeedback G1" oben schaltet auf Mobil fuer alles mit
   [class*="hero"] die Silbentrennung ab (hyphens:manual !important).
   Das trifft auch `.hero-stat` — dort sind die Zellen aber so schmal,
   dass lange Woerter brechen MUESSEN. Ohne Trennung brach es mitten im
   Wort: „DEUTSCHLAN/D", „ARBSTAETT/V" (Kundenpunkt, extern bestaetigt).
   Gemessen: 164 zerschnittene Woerter ueber 9 Breiten (ab 600px), mit
   dieser Regel 0. Silbentrennung greift, weil lang="de" gesetzt ist.
   Betrifft nur die Kennzahlenzellen, nicht die Ueberschriften.
   ============================================================ */
.hero-stat .l, .hero-stat .v {
  -webkit-hyphens: auto !important;
  hyphens: auto !important;
  overflow-wrap: break-word;
}

/* Unter 360px reicht auch die getrennte Silbe nicht mehr: gemessen bleiben
   bei 320px nur 99px Innenbreite, „DEUTSCH-" braucht 101px. Deshalb dort
   weniger Seitenabstand (24/20 -> 18/12 = 116px innen) und eine etwas
   kleinere Kennzahl. Gleiches Mittel wie bei der G1-Korrektur der
   Ueberschriften, keine Aenderung oberhalb von 360px. */
@media (max-width: 360px) {
  .hero-stat { padding: 18px 12px; }
  .hero-stat .v { font-size: 17px; }
}

/* ============================================================
   Paket 07: Ankersprünge landen nicht mehr hinter dem festen Kopf
   ------------------------------------------------------------
   `nav.nav` ist `position:fixed` und 79px hoch (1440px) bzw. 75px
   (<=980px). Ohne `scroll-margin-top` beginnt der Zielabschnitt bei
   y=0 und damit hinter dem Kopf. Gemessen vor der Regel (1440px,
   170 TOC-Anker): 1 Ueberschrift verdeckt (-36px), 6 mit nur 1px
   Luft, uebrige >=16px. `scroll-margin` kam im Projekt 0x vor.
   Wert = Kopfhoehe + 25px Luft. Wirkt nur beim Scrollen, aendert
   kein Layout.
   ============================================================ */
:target { scroll-margin-top: 104px; }
section[id], .content-block[id], .features-3col[id], .feature-split[id],
.features-bento[id], .eco[id], .proc[id], .split[id], .stats-sec[id],
.final[id], .toc-sec[id] { scroll-margin-top: 104px; }

@media (max-width: 980px) {
  :target { scroll-margin-top: 96px; }
  section[id], .content-block[id], .features-3col[id], .feature-split[id],
  .features-bento[id], .eco[id], .proc[id], .split[id], .stats-sec[id],
  .final[id], .toc-sec[id] { scroll-margin-top: 96px; }
}

/* ============================================================
   Navigation: Dropdown-Auslöser sind Schaltflächen, keine Links
   ------------------------------------------------------------
   „Leistungen" und „Ratgeber" oeffnen ein Menue und navigieren nie.
   Als `<a href="#ratgeber">` waren sie auf 33 Seiten ein toter Anker
   (`id="ratgeber"` gab es 0x) und wurden von Screenreadern als Link
   angekuendigt. Jetzt `<button type="button">` mit `aria-controls`,
   wie es das mobile Menue mit `.m-grouphd` bereits vorgibt.
   Die Typografie lag auf `.nav-links a` und muss deshalb hier
   nachgezogen werden; den Button-Reset (font/border/background)
   liefert die bestehende globale `button`-Regel.
   ============================================================ */
.nav-links .wc-svctrig {
  font-size: 13px;
  font-weight: 500;
  letter-spacing: .02em;
  position: relative;
  padding: 6px 0;
}
.nav-links .wc-svctrig::after {
  content: "";
  position: absolute;
  left: 0;
  right: 100%;
  bottom: 0;
  height: 2px;
  background: var(--accent);
  transition: right .2s;
}
/* Unterstreichung auch, solange das Menue offen ist */
.nav-links .wc-svctrig:hover::after,
.nav-links .wc-svctrig[aria-expanded="true"]::after { right: 0; }
.nav-links .wc-svctrig:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

/* Der Primärbutton in .split-content ist Flex-Kind einer Spalte und wurde dadurch
   auf die volle Spaltenbreite gedehnt (656px statt Inhaltsbreite). */
.split-content>.btn,.split-content>.consult-cta>.btn{align-self:flex-start;}

/* Skip-Link: erstes fokussierbares Element, nur bei Tastaturfokus sichtbar. */
.skip-link{position:absolute;left:-9999px;top:0;z-index:1000;
  background:var(--accent,#eba910);color:#161616;padding:12px 20px;
  font-family:'IBM Plex Mono',monospace;font-size:13px;font-weight:600;
  letter-spacing:.08em;text-transform:uppercase;text-decoration:none;}
.skip-link:focus{left:0;outline:3px solid #161616;outline-offset:-3px;}
main:focus{outline:none;}

/* FAQ: eingeklappte Antworten sind nur per max-height verborgen und blieben
   damit im Accessibility-Baum und in der Tabreihenfolge. visibility nimmt sie
   heraus, ohne die Aufklapp-Animation zu zerstören. */
.faq-a{visibility:hidden;transition:max-height .3s ease,visibility 0s linear .3s;}
.faq-item.open .faq-a{visibility:visible;transition:max-height .3s ease,visibility 0s;}

/* ============================================================
   SEO-Runde 09/2026: Kartentitel und Footer-Spaltentitel sind
   keine echten Überschriften mehr (Vorgabe SEO-Abteilung), sie
   laufen jetzt als <div class="hx"> bzw. <div class="hx2">.
   Damit sie exakt gleich aussehen wie vorher, wurden alle
   bestehenden h2/h3-Selektoren um die Klassen erweitert. Die
   folgende Regel ersetzt zusätzlich die Browser-Grundwerte, die
   ein <div> nicht von sich aus mitbringt. :where() hat
   Spezifität 0, jede Gestaltungsregel der Seite sticht sie.
   ============================================================ */
:where(.hx){font-size:1.17em;font-weight:bold}
:where(.hx2){font-size:1.5em;font-weight:bold}
