/* =====================================================================
   MTY Tech GmbH — Basis-Stylesheet
   Alle Werte kommen aus tokens.css. Kein Hex-Wert in dieser Datei ausser
   den beiden WhatsApp-Markenfarben (Hausstandard §3.1):
     #25d366  Signalgruen, nur als Flaeche mit Navy-Icon
     #075e54  Dunkelgruen, traegt weissen Text mit 7,7:1

   Briefing: "keine Animationen". Erlaubt bleiben ausschliesslich
   Micro-Transitions auf Hover und Focus.
   ===================================================================== */

@import url("./fonts.css");

/* ------------------------------------------------------------------ 1. Reset */

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

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: 5.5rem;   /* sticky Nav, damit Ankersprünge nicht darunter landen */
}

body {
  margin: 0;
  background: var(--paper-soft);
  color: var(--ink);
  font-family: var(--sans);
  font-size: var(--t-md);
  line-height: var(--lh-body);
  font-synthesis-weight: none;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4 {
  margin: 0;
  line-height: var(--lh-tight);
  letter-spacing: var(--ls-tight);
  color: var(--navy);
  text-wrap: balance;
  font-weight: 700;
}

/* Deutsche Komposita sind laenger als jede Handybreite.
   "Unbedenklichkeitsbescheinigungen" sprengt sonst das Layout und erzeugt
   horizontales Scrollen (Hausstandard §3.3: kein horizontales Scrollen).
   hyphens: auto greift, weil <html lang> gesetzt ist. */
h1, h2, h3, h4, p, li, dt, dd, summary, label, figcaption, address {
  overflow-wrap: break-word;
  hyphens: auto;
}
/* Grid- und Flex-Kinder duerfen nicht ueber ihre Spalte hinauswachsen. */
.trust__item, .service, .step, .term, .faq-item, .field, .channel, .gate__card { min-width: 0; }

p  { margin: 0; }
ul, ol { margin: 0; padding: 0; }
li { list-style: none; }

img, svg, picture { display: block; max-width: 100%; }
img { height: auto; }

a { color: var(--link); text-decoration-thickness: 1px; text-underline-offset: 0.2em; }
a:hover { color: var(--link-hover); }

button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: 0; padding: 0; }

hr { border: 0; border-top: var(--bw) solid var(--line); margin: 0; }

/* Fokus: sichtbar auf allem Fokussierbaren, min. 2 px, Kontrast zum Untergrund */
:focus-visible {
  outline: 2px solid var(--navy);
  outline-offset: var(--focus-offset);
  border-radius: var(--r-sm);
}
.on-navy :focus-visible,
.footer :focus-visible,
.terms :focus-visible { outline-color: var(--accent); }

::selection { background: var(--accent); color: var(--navy); }

/* ------------------------------------------------------------- 2. Hilfsklassen */

.container {
  width: 100%;
  max-width: var(--max);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.container--wide { max-width: var(--max-wide); }

.section { padding-block: var(--section-y); }
.section--tight { padding-block: calc(var(--section-y) * 0.6); }
.section--ice { background: var(--paper-ice); }
.section--paper { background: var(--paper); }

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

.skip-link {
  position: absolute; left: var(--s-4); top: var(--s-4);
  z-index: var(--z-toast);
  transform: translateY(-200%);
  background: var(--accent); color: var(--navy);
  font-weight: 700;
  padding: var(--s-3) var(--s-5);
  border-radius: var(--r-sm);
  text-decoration: none;
  transition: transform var(--dur) var(--ease);
}
.skip-link:focus-visible { transform: translateY(0); color: var(--navy); }

.eyebrow {
  display: block;
  font-size: var(--t-xs);
  font-weight: 700;
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  color: var(--blue);
  margin-bottom: var(--s-3);
}
.on-navy .eyebrow { color: var(--accent); }

.section__head { max-width: 46rem; margin-bottom: var(--s-7); }
.section__title { font-size: var(--t-h2); }
.section__intro {
  margin-top: var(--s-4);
  font-size: var(--t-lg);
  color: var(--ink-mute);
  max-width: var(--measure);
}
.on-navy .section__title { color: var(--ink-invert); }
.on-navy .section__intro { color: var(--ink-invert-mute); }

.prose p + p { margin-top: var(--s-4); }
.prose { max-width: var(--measure); }

/* --------------------------------------------------------------- 3. Buttons */

.btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--s-2);
  min-height: 48px;
  padding: var(--s-3) var(--s-5);
  border-radius: var(--r-sm);
  font-weight: 700;
  font-size: var(--t-base);
  text-decoration: none;
  border: 2px solid transparent;
  transition: background-color var(--dur) var(--ease),
              border-color var(--dur) var(--ease),
              color var(--dur) var(--ease),
              box-shadow var(--dur) var(--ease);
}
.btn:active { transform: translateY(1px); }

/* Primaer: gelbe Flaeche, Navy-Schrift. Gelb ist NIE Textfarbe (Kontrast 1,7:1). */
.btn--primary { background: var(--accent); color: var(--navy); box-shadow: var(--sh-1); }
.btn--primary:hover { background: var(--accent-deep); color: var(--navy); box-shadow: var(--sh-2); }

.btn--secondary { background: transparent; color: var(--navy); border-color: var(--line-strong); }
.btn--secondary:hover { background: var(--paper); border-color: var(--navy); color: var(--navy); }

.on-navy .btn--secondary { color: var(--ink-invert); border-color: var(--navy-line); }
.on-navy .btn--secondary:hover { background: var(--navy-soft); border-color: var(--ink-invert-mute); color: var(--ink-invert); }

.btn--block { width: 100%; }

.btn[aria-disabled="true"], .btn:disabled { opacity: .6; pointer-events: none; }

/* ------------------------------------------------------------------- 4. Nav */

.nav {
  position: sticky; top: 0; z-index: var(--z-sticky);
  background: var(--navy);
  border-bottom: var(--bw) solid var(--navy-line);
}
.nav__inner {
  display: flex; align-items: center; gap: var(--s-5);
  min-height: 72px;
}
.nav__brand {
  display: flex; align-items: center; gap: var(--s-3);
  text-decoration: none; margin-right: auto;
  min-height: 44px;            /* Touch-Target, Hausstandard §3.7 */
}
.nav__logo { height: 34px; width: auto; }
.nav__menu { display: flex; align-items: center; gap: var(--s-5); }
.nav__link {
  color: var(--ink-invert-mute);
  text-decoration: none;
  font-size: var(--t-base);
  font-weight: 500;
  padding: var(--s-2) 0;
  border-bottom: 2px solid transparent;
  transition: color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.nav__link:hover { color: var(--ink-invert); border-bottom-color: var(--accent); }

.nav__aside { display: flex; align-items: center; gap: var(--s-4); }

.langswitch {
  display: inline-flex; align-items: center;
  border: var(--bw) solid var(--navy-line);
  border-radius: var(--r-sm);
  overflow: hidden;
}
.langswitch__item {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 44px; min-height: 44px;
  padding-inline: var(--s-3);
  font-size: var(--t-sm); font-weight: 700;
  color: var(--ink-invert-mute);
  text-decoration: none;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.langswitch__item:hover { background: var(--navy-soft); color: var(--ink-invert); }
.langswitch__item[aria-current="true"] { background: var(--accent); color: var(--navy); }

.nav__toggle {
  display: none;
  width: 48px; height: 48px;
  align-items: center; justify-content: center;
  color: var(--ink-invert);
  border: var(--bw) solid var(--navy-line);
  border-radius: var(--r-sm);
}
.nav__toggle:hover { background: var(--navy-soft); }

/* ------------------------------------------------------------------ 5. Hero */

.hero {
  background: var(--navy);
  border-bottom: var(--bw-accent) solid var(--accent);
  color: var(--ink-invert);
  padding-block: clamp(3rem, 6vw, 5.5rem);
}
.hero__grid {
  display: grid;
  gap: clamp(2rem, 4vw, 4rem);
  align-items: center;
}
.hero__title {
  font-size: var(--t-h1);
  color: var(--ink-invert);
  max-width: 24ch;   /* zwei Zeilen auf Desktop, Hausstandard §3.4 */
}
.hero__subtitle {
  margin-top: var(--s-5);
  font-size: var(--t-lg);
  color: var(--ink-invert-mute);
  max-width: 46ch;
  line-height: var(--lh-snug);
}
.hero__actions { display: flex; flex-wrap: wrap; gap: var(--s-3); margin-top: var(--s-6); }
.hero__media { position: relative; }
.hero__img {
  width: 100%; height: auto;
  border-radius: var(--r-lg);
  border: var(--bw) solid var(--navy-line);
  background: var(--navy-deep);
}

/* ----------------------------------------------------------------- 6. Trust */

.trust { background: var(--paper-ice); border-bottom: var(--bw) solid var(--line-ice); }
.trust__grid { display: grid; gap: var(--s-5); }
.trust__item {
  padding: var(--s-5);
  background: var(--paper);
  border: var(--bw) solid var(--line-ice);
  border-radius: var(--r-md);
  border-left: 3px solid var(--accent);
}
.trust__value { font-size: var(--t-h4); font-weight: 700; color: var(--navy); }
.trust__label { margin-top: var(--s-2); color: var(--ink-mute); font-size: var(--t-base); }

/* ------------------------------------------------------------- 7. Leistungen */

.services__grid { display: grid; gap: var(--s-5); }
/* Steht nur eine Leistung im Datensatz, spannt sie ueber beide Spalten des
   asymmetrischen Rasters (§17), statt eine leere Spalte stehen zu lassen. */
.services__grid > .service:only-child { grid-column: 1 / -1; }
/* Fuenf Zeilen: Nummer, Titel, Lead, Text, Vertragszeile. Die vierte nimmt den
   Rest auf, damit die Vertragszeile immer unten sitzt. Ab 1024 px teilen sich
   beide Karten dieselben Zeilen (subgrid, siehe §17). */
.service {
  display: grid;
  grid-template-rows: auto auto auto 1fr auto;
  padding: clamp(1.5rem, 3vw, 2.5rem);
  background: var(--paper);
  border: var(--bw) solid var(--line);
  border-radius: var(--r-md);
  box-shadow: var(--sh-1);
}
.service__number {
  font-size: var(--t-sm); font-weight: 700;
  letter-spacing: var(--ls-wide);
  color: var(--blue);
  margin-bottom: var(--s-3);
}
.service__title { font-size: var(--t-h3); }
.service__lead { margin-top: var(--s-4); font-size: var(--t-lg); color: var(--navy); font-weight: 500; }
.service__body { margin-top: var(--s-4); color: var(--ink-mute); max-width: var(--measure); }
/* Als Raster, damit die Box ihre Zeile ausfuellt: dann sind beide
   Vertragszeilen gleich hoch und schliessen oben wie unten buendig ab. */
.service__contract {
  display: grid;
  padding-top: var(--s-5);
}
.service__contract span {
  display: block;
  padding: var(--s-4);
  background: var(--paper-ice);
  border-left: 3px solid var(--blue);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  color: var(--navy);
  font-size: var(--t-base);
}

.note {
  margin-top: var(--s-6);
  padding: var(--s-5);
  border: var(--bw) dashed var(--line-strong);
  border-radius: var(--r-md);
  background: var(--paper);
}
.note__title { font-size: var(--t-h4); }
.note__body { margin-top: var(--s-3); color: var(--ink-mute); max-width: var(--measure); }

/* ---------------------------------------------------------------- 8. Gewerke */

/* Drei Baender, je Gruppe eins: Bild links, Gewerke rechts als umbrechende
   Chips. Kein Akkordeon, kein Klick, alle 19 Eintraege gleichzeitig sichtbar.
   Chips sind keine Bedienelemente, deshalb kein Hover- und kein Cursor-Zustand. */
.trades__bands { display: grid; gap: var(--s-5); }

.trade-band {
  display: grid;
  background: var(--paper);
  border: var(--bw) solid var(--line);
  border-radius: var(--r-md);
  overflow: hidden;
}

/* Das Bild wird NIE beschnitten. Logo oben links und der KI-Hinweis unten
   rechts sind ins Bild eingebrannt; jeder Beschnitt wuerde beide anschneiden.
   Deshalb kein object-fit und keine erzwungene Bildhoehe, sondern immer das
   volle 16:9 des Originals. */
.trade-band__media img {
  display: block;
  width: 100%; height: auto;
}

.trade-band__body {
  padding: var(--s-5);
  display: grid; gap: var(--s-4);
  align-content: start;
  min-width: 0;
}
.trade-band__title { font-size: var(--t-h4); font-weight: 700; color: var(--navy); }

.trade-chips { display: flex; flex-wrap: wrap; gap: var(--s-2) var(--s-3); }
.trade-chip {
  padding: var(--s-2) var(--s-4);
  background: var(--paper-ice);
  border: var(--bw) solid var(--line-ice);
  border-radius: var(--r-full);
  color: var(--navy);
  font-size: var(--t-sm);
  font-weight: 600;
}

.footnote {
  margin-top: var(--s-5);
  color: var(--ink-mute);
  font-size: var(--t-sm);
  max-width: var(--measure);
}

/* ----------------------------------------------------------------- 9. Ablauf */

.steps { display: grid; gap: var(--s-5); counter-reset: step; }
.step {
  position: relative;
  padding: var(--s-5);
  background: var(--paper);
  border: var(--bw) solid var(--line);
  border-radius: var(--r-md);
  border-top: 3px solid var(--accent);
}
.step__number {
  display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px;
  border-radius: var(--r-full);
  background: var(--navy); color: var(--accent);
  font-weight: 700; font-size: var(--t-lg);
  margin-bottom: var(--s-4);
}
.step__title { font-size: var(--t-h4); }
.step__subtitle { font-weight: 400; color: var(--ink-mute); font-size: var(--t-base); }
.step__body { margin-top: var(--s-3); color: var(--ink-mute); }
.step__need {
  margin-top: var(--s-4); padding-top: var(--s-3);
  border-top: var(--bw) solid var(--line);
  font-size: var(--t-sm); color: var(--navy); font-weight: 600;
}

/* ---------------------------------------------- 10. Rechtliches / Koho hledáme */

.terms { background: var(--navy); color: var(--ink-invert); }
.terms__grid { display: grid; gap: var(--s-5); margin-top: var(--s-6); }
.term {
  padding: var(--s-5);
  background: var(--navy-deep);
  border: var(--bw) solid var(--navy-line);
  border-radius: var(--r-md);
  border-left: 3px solid var(--accent);
}
.term__title { color: var(--ink-invert); font-size: var(--t-h4); }
.term__body { margin-top: var(--s-3); color: var(--ink-invert-mute); }

.disclaimer {
  margin-top: var(--s-6);
  padding: var(--s-5);
  border: var(--bw) solid var(--navy-line);
  border-radius: var(--r-md);
  color: var(--ink-invert-mute);
  font-size: var(--t-sm);
  display: flex; gap: var(--s-4); align-items: flex-start;
}
.disclaimer svg { flex-shrink: 0; color: var(--accent); }

/* -------------------------------------------------------------------- 11. FAQ */

.faq__list { display: grid; gap: var(--s-3); max-width: 56rem; }
.faq-item {
  background: var(--paper);
  border: var(--bw) solid var(--line);
  border-radius: var(--r-md);
  overflow: hidden;
}
.faq-item > summary {
  display: flex; align-items: flex-start; gap: var(--s-4);
  padding: var(--s-5);
  cursor: pointer; list-style: none;
  font-weight: 600; color: var(--navy);
  min-height: 44px;
  transition: background-color var(--dur) var(--ease);
}
.faq-item > summary::-webkit-details-marker { display: none; }
.faq-item > summary:hover { background: var(--paper-ice); }
.faq-item__chevron { flex-shrink: 0; margin-left: auto; color: var(--blue); transition: transform var(--dur) var(--ease); }
.faq-item[open] .faq-item__chevron { transform: rotate(180deg); }
.faq-item__answer {
  padding: 0 var(--s-5) var(--s-5);
  color: var(--ink-mute);
  max-width: var(--measure);
}

/* --------------------------------------------------------------- 12. Kontakt */

/* Beide Spalten enden auf gleicher Hoehe: die Kontaktkarte zieht sich auf die
   Hoehe des Formulars und verteilt ihre drei Bloecke ueber den Raum. Ein
   halbhoher Navy-Block neben einem langen Formular liest sich sonst wie ein
   abgeschnittener Rest. */
.contact__grid { display: grid; gap: clamp(2rem, 4vw, 3.5rem); align-items: stretch; }

.form { display: grid; gap: var(--s-5); align-content: start; }
.form__fieldset { border: 0; padding: 0; margin: 0; display: grid; gap: var(--s-4); }
.form__legend {
  padding: 0; margin-bottom: var(--s-1);
  font-size: var(--t-sm); font-weight: 700;
  letter-spacing: var(--ls-wide); text-transform: uppercase;
  color: var(--blue);
}
.form__row { display: grid; gap: var(--s-4); }

.field { display: grid; gap: var(--s-2); }
.field__label { font-weight: 600; color: var(--navy); font-size: var(--t-base); }
.field__req { color: var(--danger); }
.field__hint { font-size: var(--t-sm); color: var(--ink-mute); }

.field__input,
.field__textarea {
  width: 100%;
  min-height: 48px;
  padding: var(--s-3) var(--s-4);
  background: var(--paper);
  border: var(--bw) solid var(--line-strong);
  border-radius: var(--r-sm);
  color: var(--ink);
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.field__textarea { min-height: 8rem; resize: vertical; }
.field__input:hover, .field__textarea:hover { border-color: var(--blue); }
.field__input:focus-visible, .field__textarea:focus-visible {
  outline: 2px solid var(--navy); outline-offset: 1px; border-color: var(--navy);
}
.field__input[aria-invalid="true"],
.field__textarea[aria-invalid="true"] { border-color: var(--danger); }

.field__error { font-size: var(--t-sm); color: var(--danger); font-weight: 600; }
.field__error:empty { display: none; }

/* Gewerke-Auswahl. Zugeklappt eine Zeile wie jedes andere Feld, aufgeklappt
   ein Panel ueber dem Formular. Auf und zu macht <details>, den Zustand der
   Auswahl traegt :checked — beides ohne JavaScript. */
.picker { display: grid; gap: var(--s-3); }
.picker__menu { position: relative; }

.picker__trigger {
  display: flex; align-items: center; gap: var(--s-3);
  min-height: 48px;
  padding: var(--s-3) var(--s-4);
  background: var(--paper);
  border: var(--bw) solid var(--line-strong);
  border-radius: var(--r-sm);
  color: var(--ink-mute);
  cursor: pointer;
  list-style: none;   /* Standard-Dreieck des <summary> weg */
  transition: border-color var(--dur) var(--ease);
}
.picker__trigger::-webkit-details-marker { display: none; }
.picker__trigger:hover { border-color: var(--blue); }
.picker__trigger:focus-visible { outline: 2px solid var(--navy); outline-offset: 1px; }
.picker__menu[open] .picker__trigger { border-color: var(--navy); }
.picker[aria-invalid="true"] .picker__trigger { border-color: var(--danger); }
.picker__chevron { margin-left: auto; color: var(--blue); transition: transform var(--dur) var(--ease); }
.picker__menu[open] .picker__chevron { transform: rotate(180deg); }

/* Das Panel legt sich ueber den nachfolgenden Inhalt, statt ihn beim
   Aufklappen nach unten zu schieben: die Formularhoehe bleibt konstant.

   Das Ausblenden im zugeklappten Zustand muss ausdruecklich hier stehen. Ein
   <details> versteckt seinen Inhalt ueber content-visibility, und das greift
   bei einem absolut positionierten Kind nicht — ohne diese Regel steht das
   Panel dauerhaft offen. */
.picker__menu:not([open]) .picker__panel { display: none; }
.picker__panel {
  position: absolute; z-index: var(--z-dropdown);
  top: calc(100% + var(--s-1)); left: 0; right: 0;
  max-height: 20rem; overflow-y: auto;
  display: grid; gap: var(--s-4);
  padding: var(--s-4);
  background: var(--paper);
  border: var(--bw) solid var(--line-strong);
  border-radius: var(--r-sm);
  box-shadow: var(--sh-3);
}

.picker__group { display: grid; gap: var(--s-3); }
.picker__group + .picker__group {
  padding-top: var(--s-4);
  border-top: var(--bw) solid var(--line-soft);
}
/* Leiser als die blaue Formular-Legende: das hier ist eine Untergliederung
   innerhalb eines Feldes, keine eigene Feldgruppe. */
.picker__legend {
  font-size: var(--t-xs); font-weight: 700;
  letter-spacing: var(--ls-wide); text-transform: uppercase;
  color: var(--ink-mute);
}

.picker__chips { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.picker__item { position: relative; display: flex; max-width: 100%; }

/* Die Checkbox traegt nur Zustand und Fokus, sichtbar ist das Label. Sie
   bleibt im Chip liegen statt off-screen, sonst springt die Seite beim
   Fokussieren an den Anfang. */
.picker__input {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  margin: 0; opacity: 0;
  pointer-events: none;
}

/* Ein Gewerk sieht ueberall gleich aus, im Panel wie unter dem Feld. */
.picker__chip, .picker__token {
  display: inline-flex; align-items: center; gap: var(--s-2);
  min-height: 44px;                       /* Touch-Target, WCAG 2.5.8 */
  padding: var(--s-2) var(--s-4);
  background: var(--paper);
  border: var(--bw) solid var(--line-strong);
  border-radius: var(--r-full);
  color: var(--ink);
  font-size: var(--t-sm); font-weight: 600;
  line-height: var(--lh-snug);
  text-align: left;
  cursor: pointer;
  transition: background-color var(--dur) var(--ease),
              border-color var(--dur) var(--ease),
              color var(--dur) var(--ease);
}
.picker__chip:hover { border-color: var(--blue); color: var(--navy); }
.picker__input:focus-visible + .picker__chip { outline: 2px solid var(--navy); outline-offset: 2px; }

/* Ausgewaehlt: gefuellt in Navy, mit Kreuz zum Wegnehmen. Das Kreuz ist
   gezeichnet, kein Zeichen — ein "x" im Pseudoelement laesen Screenreader
   als Wort mit, den Zustand meldet aber schon die Checkbox selbst. */
.picker__input:checked + .picker__chip,
.picker__token {
  background: var(--navy);
  border-color: var(--navy);
  color: var(--ink-invert);
}
.picker__input:checked + .picker__chip:hover,
.picker__token:hover {
  background: var(--navy-soft);
  border-color: var(--navy-soft);
  color: var(--ink-invert);
}
.picker__input:checked + .picker__chip::after,
.picker__token::after {
  content: "";
  flex: none;
  width: 10px; height: 10px;
  transform: rotate(45deg);
  background:
    linear-gradient(currentColor, currentColor) center / 10px 1.5px no-repeat,
    linear-gradient(currentColor, currentColor) center / 1.5px 10px no-repeat;
}

/* Die Auswahl unter dem zugeklappten Feld. Jeder Chip ist ein Knopf, der
   sein Gewerk wieder abwaehlt. Ohne Auswahl bleibt die Zeile weg. */
.picker__tokens { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.picker__tokens:empty { display: none; }
.picker__token:focus-visible { outline: 2px solid var(--navy); outline-offset: 2px; }

.field--consent { grid-template-columns: auto 1fr; align-items: start; gap: var(--s-3); }
/* Die Box selbst ist 24 x 24 px, das Minimum aus WCAG 2.5.8.
   Der eigentliche Touch-Target ist das zugehoerige <label>: es ist
   mehrzeilig, ueber `for` verknuepft und schaltet die Box mit. Ein
   Pseudoelement zum Vergroessern waere wirkungslos, weil ein
   Checkbox-Input ein ersetztes Element ohne ::before ist. */
.field--consent input[type="checkbox"] {
  width: 24px; height: 24px; margin-top: 2px;
  accent-color: var(--navy);
  flex-shrink: 0;
}
.field--consent label { cursor: pointer; padding-block: var(--s-2); }
.field--consent .field__label { font-weight: 400; color: var(--ink); font-size: var(--t-base); }

/* Honeypot: fuer Menschen unsichtbar, fuer Bots ein Feld (Hausstandard §6.2) */
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.form__status { border-radius: var(--r-md); padding: var(--s-5); display: none; }
.form__status[data-state="error"],
.form__status[data-state="success"] { display: block; }
.form__status[data-state="error"] {
  background: color-mix(in srgb, var(--danger) 8%, var(--paper));
  border: var(--bw) solid var(--danger);
}
.form__status[data-state="success"] {
  background: color-mix(in srgb, var(--ok) 8%, var(--paper));
  border: var(--bw) solid var(--ok);
}
.form__status-title { font-weight: 700; color: var(--navy); }
.form__status-body { margin-top: var(--s-2); color: var(--ink-mute); }

.channels {
  padding: clamp(1.5rem, 3vw, 2rem);
  background: var(--navy);
  border-radius: var(--r-md);
  color: var(--ink-invert);
  border-top: var(--bw-accent) solid var(--accent);
  /* Drei Zeilen: Titel, Kanaele, Anschrift. Die mittlere nimmt den Rest auf.
     Ab 1024 px kommt die Bildmarke als zweite Zeile dazu, siehe unten. */
  display: grid; grid-template-rows: auto 1fr auto;
}
/* Nur sichtbar, wenn die Karte neben dem Formular steht und auf dessen Hoehe
   gezogen wird. Einspaltig gibt es keinen Leerraum zu fuellen, und ein drittes
   Logo neben Kopf- und Fusszeile waere dort nur Wiederholung. */
.channels__mark { display: none; }
.channels__title { color: var(--ink-invert); font-size: var(--t-h4); }
.channels__list { display: grid; align-content: start; gap: var(--s-3); margin-top: var(--s-5); }
.channel {
  display: flex; align-items: center; gap: var(--s-4);
  min-height: 48px;
  padding: var(--s-3) var(--s-4);
  border: var(--bw) solid var(--navy-line);
  border-radius: var(--r-sm);
  color: var(--ink-invert);
  text-decoration: none;
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.channel:hover { background: var(--navy-soft); border-color: var(--ink-invert-mute); color: var(--ink-invert); }
.channel svg { flex-shrink: 0; color: var(--accent); }
.channel__label { font-size: var(--t-sm); color: var(--ink-invert-mute); display: block; }
.channel__value { font-weight: 600; }

.channels__meta { margin-top: var(--s-5); padding-top: var(--s-5); border-top: var(--bw) solid var(--navy-line); display: grid; gap: var(--s-4); }
.channels__meta dt { font-size: var(--t-sm); color: var(--ink-invert-mute); }
.channels__meta dd { margin: var(--s-1) 0 0; color: var(--ink-invert); }

/* ----------------------------------------------------------------- 13. Footer */

.footer { background: var(--navy-deep); color: var(--ink-invert-mute); padding-block: var(--s-8) var(--s-6); }
.footer__grid { display: grid; gap: var(--s-6); }
.footer__logo { height: 32px; width: auto; margin-bottom: var(--s-4); }
.footer__tagline { max-width: 34ch; font-size: var(--t-base); }
.footer__col-title {
  font-size: var(--t-xs); font-weight: 700;
  letter-spacing: var(--ls-wide); text-transform: uppercase;
  color: var(--ink-invert); margin-bottom: var(--s-4);
}
.footer__list { display: grid; gap: var(--s-3); }
.footer a { color: var(--ink-invert-mute); text-decoration: none; }
.footer a:hover { color: var(--accent); text-decoration: underline; }
.footer address { font-style: normal; line-height: var(--lh-body); }

.footer__lang {
  display: inline-flex; align-items: center; gap: var(--s-3);
  min-height: 44px; padding: var(--s-2) var(--s-4);
  border: var(--bw) solid var(--navy-line); border-radius: var(--r-sm);
  text-decoration: none;
}
.footer__lang:hover { background: var(--navy); border-color: var(--accent); }
.footer__lang-hint { display: block; font-size: var(--t-xs); color: var(--ink-invert-mute); }

.footer__bottom {
  margin-top: var(--s-7); padding-top: var(--s-5);
  border-top: var(--bw) solid var(--navy-line);
  display: flex; flex-wrap: wrap; gap: var(--s-4);
  justify-content: space-between;
  font-size: var(--t-sm);
}

/* -------------------------------------------------------------------- 14. FAB */

/* Schnellkontakt auf allen Breakpoints sichtbar — Anruf und WhatsApp sollen
   unabhaengig vom Geraet jederzeit einen Klick entfernt sein. */
.fab-stack {
  position: fixed; bottom: var(--s-5); right: var(--s-5);
  z-index: var(--z-modal);
  display: flex;
  flex-direction: column; align-items: flex-end; gap: var(--s-3);
}
.fab {
  display: flex; align-items: center; gap: var(--s-2);
  height: 52px; padding: 0 var(--s-4);
  color: var(--paper);
  border-radius: var(--r-full);
  box-shadow: var(--sh-3);
  text-decoration: none;
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease), filter var(--dur) var(--ease);
}
.fab:hover { filter: brightness(1.06); color: var(--paper); }
.fab__label { font-weight: 700; font-size: var(--t-sm); white-space: nowrap; }
.fab--wa   { background: #075e54; }             /* WhatsApp-Dunkelgruen, 7,7:1 mit Weiss */
.fab--call { background: var(--navy); color: var(--accent); }
.fab--call:hover { color: var(--accent); }

.fab-stack__options { display: flex; flex-direction: column; align-items: flex-end; gap: var(--s-3); }
.fab-stack:not(.is-open) .fab-stack__options { pointer-events: none; }
.fab-stack:not(.is-open) .fab-stack__options .fab { opacity: 0; transform: translateY(8px); }
.fab-stack.is-open .fab-stack__options .fab { opacity: 1; transform: translateY(0); }

.fab-toggle {
  display: flex; align-items: center; justify-content: center;
  width: 56px; height: 56px;
  border-radius: var(--r-full);
  box-shadow: var(--sh-3);
  color: var(--paper);
  background: #25d366;                          /* WhatsApp-Markenfarbe */
  position: relative; overflow: hidden;
  transition: transform var(--dur) var(--ease), filter var(--dur) var(--ease);
}
.fab-toggle:hover { filter: brightness(1.06); }
.fab-toggle__half--call { position: absolute; inset: 0; background: var(--navy); clip-path: polygon(100% 0, 100% 100%, 0 100%); }
.fab-toggle__icons { position: relative; width: 100%; height: 100%; z-index: 1; }
.fab-toggle__icons svg { position: absolute; width: 15px; height: 15px; top: 50%; left: 50%; margin: -7.5px 0 0 -7.5px; }
.fab-toggle__icons .icon-wa   { transform: translate(-9px, -9px); color: var(--navy); }
.fab-toggle__icons .icon-call { transform: translate(9px, 9px); color: var(--accent); }
.fab-toggle[aria-expanded="true"] { transform: rotate(45deg); }

/* ------------------------------------------------------------ 15. Sprachweiche */

.gate { min-height: 100dvh; display: flex; flex-direction: column; background: var(--navy); color: var(--ink-invert); }
.gate__inner {
  flex: 1;
  display: flex; flex-direction: column;
  align-items: flex-start;      /* sonst dehnt der Flex-Container das Logo-SVG */
  justify-content: center;
  padding-block: var(--s-8);
}
.gate__inner > * { width: 100%; }
.gate__logo { height: 44px; width: auto; margin-bottom: var(--s-7); }
.gate__title { color: var(--ink-invert); font-size: var(--t-h2); max-width: 22ch; }
.gate__sub { margin-top: var(--s-4); color: var(--ink-invert-mute); max-width: 52ch; }
.gate__cards { display: grid; gap: var(--s-5); margin-top: var(--s-7); }
.gate__card {
  display: block;
  padding: clamp(1.5rem, 3vw, 2.25rem);
  background: var(--navy-deep);
  border: var(--bw) solid var(--navy-line);
  border-left: var(--bw-accent) solid var(--accent);
  border-radius: var(--r-md);
  text-decoration: none; color: var(--ink-invert);
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.gate__card:hover { background: var(--navy-soft); color: var(--ink-invert); }

/* Die Karteninhalte sind <span>, damit ein Link sie umschliessen darf.
   Ohne display:block laufen Label, Titel, Text und Pfeil zu einem Absatz
   zusammen. */
.gate__card-lang {
  display: block;
  font-size: var(--t-xs); font-weight: 700;
  letter-spacing: var(--ls-wide); text-transform: uppercase;
  color: var(--accent);
}
.gate__card-title {
  display: block;
  color: var(--ink-invert); font-size: var(--t-h3);
  line-height: var(--lh-tight); letter-spacing: var(--ls-tight); font-weight: 700;
  margin-top: var(--s-3);
}
.gate__card-body { display: block; margin-top: var(--s-3); color: var(--ink-invert-mute); }
.gate__card-go { display: inline-flex; align-items: center; gap: var(--s-2); margin-top: var(--s-5); font-weight: 700; color: var(--accent); }
.gate__foot { padding-block: var(--s-5); border-top: var(--bw) solid var(--navy-line); font-size: var(--t-sm); }
.gate__foot a { color: var(--ink-invert-mute); }

/* -------------------------------------------------- 16. 404 und Rechtsseiten */

.page-head { background: var(--navy); color: var(--ink-invert); padding-block: var(--s-8) var(--s-7); border-bottom: var(--bw-accent) solid var(--accent); }
.page-head__title { color: var(--ink-invert); font-size: var(--t-h1); }
.page-head__sub { margin-top: var(--s-4); color: var(--ink-invert-mute); max-width: var(--measure); }

.legal { padding-block: var(--section-y); }
.legal__body { max-width: 46rem; }
.legal__body h2 { font-size: var(--t-h3); margin-top: var(--s-7); }
.legal__body h2:first-child { margin-top: 0; }
.legal__body h3 { font-size: var(--t-h4); margin-top: var(--s-5); }
.legal__body p { margin-top: var(--s-4); color: var(--ink-mute); }
.legal__body ul { margin-top: var(--s-4); display: grid; gap: var(--s-2); }
.legal__body li { position: relative; padding-left: var(--s-5); color: var(--ink-mute); }
.legal__body li::before { content: ""; position: absolute; left: 0; top: .7em; width: 6px; height: 6px; background: var(--accent); border-radius: 2px; }
.legal__body dl { margin-top: var(--s-4); display: grid; gap: var(--s-4); }
.legal__body dt { font-weight: 700; color: var(--navy); }
.legal__body dd { margin: var(--s-1) 0 0; color: var(--ink-mute); }
.legal__body a { color: var(--link); }

.legal__toc {
  margin-bottom: var(--s-7); padding: var(--s-5);
  background: var(--paper-ice); border: var(--bw) solid var(--line-ice);
  border-radius: var(--r-md);
}
.legal__toc ol { display: grid; gap: var(--s-2); counter-reset: toc; }
.legal__toc li { counter-increment: toc; }
.legal__toc li::marker { content: none; }
.legal__toc a { color: var(--navy); }

.notfound__actions { display: flex; flex-wrap: wrap; gap: var(--s-3); margin-top: var(--s-6); }

/* ---------------------------------------------------------- 17. Breakpoints */

@media (min-width: 640px) {
  .trust__grid   { grid-template-columns: repeat(3, 1fr); }
  .form__row--2  { grid-template-columns: 1fr 1fr; }
  .gate__cards   { grid-template-columns: 1fr 1fr; }
}

@media (min-width: 768px) {
  .steps { grid-template-columns: repeat(3, 1fr); }
  .steps--four { grid-template-columns: repeat(2, 1fr); }
  .terms__grid { grid-template-columns: 1fr 1fr; }
  .footer__grid { grid-template-columns: 2fr 1fr 1fr 1fr; }

  /* Gewerke-Band: Bild links, randlos bis an die Kartenkante. Es behaelt sein
     volles 16:9 und bestimmt damit meist die Zeilenhoehe. Bleibt rechts einmal
     mehr Platz, steht das Bild mittig statt gestreckt. */
  .trade-band { grid-template-columns: minmax(0, 38%) minmax(0, 1fr); }
  .trade-band__media { align-self: center; }
  .trade-band__body { padding: var(--s-6); align-self: center; }
}

@media (min-width: 1024px) {
  .hero__grid { grid-template-columns: 1.15fr 0.85fr; }
  /* Zwei gleich breite Spalten: beide Leistungen sind gleichwertig, ein
     ungleiches Raster liest sich hier als Fehler. Beide Karten spannen
     dieselben fuenf Zeilen, damit Titel, Lead, Text und Vertragszeile auf
     gleicher Hoehe stehen, auch wenn ein Titel zweizeilig laeuft. row-gap 0,
     weil die Abstaende innerhalb der Karte aus den Elementen selbst kommen.
     Gilt fuer bis zu zwei Karten; eine dritte braeuchte eigene Zeilen. */
  .services__grid {
    grid-template-columns: 1fr 1fr;
    grid-template-rows: auto auto auto 1fr auto;
    row-gap: 0;
  }
  .service { grid-row: span 5; grid-template-rows: subgrid; }
  .contact__grid { grid-template-columns: 1.4fr 1fr; }
  /* Vier Zeilen: Titel, Bildmarke, Kanaele, Anschrift. Den Rest nimmt die
     Bildmarke auf — dadurch sitzen die Kanaele unten bei der Anschrift statt
     oben, und der Leerraum der auf Formularhoehe gezogenen Karte wird zur
     Flaeche fuer das Logo. */
  .channels { grid-template-rows: auto 1fr auto auto; }
  .channels__mark { display: grid; place-items: center; padding: var(--s-4) 0; }
  /* Nach der verfuegbaren Hoehe bemessen, nicht nach der Breite: die Bildmarke
     ist nahezu quadratisch und soll die Flaeche fuellen, die zwischen
     Ueberschrift und Kanaelen frei bleibt. Der Deckel verhindert, dass sie in
     einer sehr hohen Karte breiter wird als die Karte selbst. */
  .channels__mark img { height: 100%; width: auto; max-width: 100%; max-height: 220px; }

  .steps--four { grid-template-columns: repeat(4, 1fr); }
}

/* Mobile Navigation: unter 1024 px klappt das Menue in ein Panel */
@media (max-width: 1023px) {
  .nav__toggle { display: inline-flex; }
  .nav__menu {
    display: none;
    position: absolute; left: 0; right: 0; top: 100%;
    flex-direction: column; align-items: stretch; gap: 0;
    background: var(--navy-deep);
    border-bottom: var(--bw) solid var(--navy-line);
    padding: var(--s-3) var(--gutter) var(--s-5);
  }
  .nav.is-open .nav__menu { display: flex; }
  .nav__inner { position: relative; }
  .nav__link { padding: var(--s-4) 0; border-bottom: var(--bw) solid var(--navy-line); }
  .nav__link:hover { border-bottom-color: var(--accent); }
  .nav__cta { display: none; }
}

@media (max-width: 480px) {
  .fab__label { display: none; }
  .fab { width: 52px; padding: 0; justify-content: center; }
  .fab-stack { bottom: var(--s-4); right: var(--s-4); }
}

/* --------------------------------------------- 18. Reduced Motion und Druck */

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

@media print {
  .nav, .fab-stack, .skip-link { display: none !important; }
  body { background: var(--print-paper); color: var(--print-ink); }
  .hero, .terms, .channels, .footer { background: var(--print-paper) !important; color: var(--print-ink) !important; }
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: .8em; }
}
