/* =============================================================================
   Dyck Food GmbH — site.css
   Ein Stylesheet fuer alle Seiten. Keine externen Ressourcen.

   Leitidee „Packung": Schmalsatz wie ein Etikett (Archivo Var, Breitenachse
   wdth 68–100), Inhalt auf gerundeten Platten ueber einem DUNKLEREN
   Ablagegrund, Zahlen im tabular-nums-Raster, Glas nur dort, wo Inhalt
   dahinter scrollt (Kopfpille, Dock, Pausenschalter) — Glas ueber Weiss ist
   ein grauer Kasten. Harte Regel: #B8D79C traegt NIEMALS weissen Text (1,59:1).
   ========================================================================== */

/* --- 1. Tokens ----------------------------------------------------------- */
:root {
  --petrol:          #005965;   /* Pantone 3165 C */
  --petrol-tief:     #00434C;
  --gruen:           #B8D79C;   /* Pantone 577 C */
  --druck-petrol:    #00434F;   /* Pantone 3165 C der Druckvorlage, nur Akzent (Wortmarke im Film) */

  /* Der Grund ist DUNKLER als die Platte — daher kommt die Tiefe. */
  --grund-2:         #EBF1F0;   /* Seitengrund, liegt auf <html> */
  --grund-1:         #F6F9F8;   /* leichte Flaeche innerhalb der Platte */
  --grund-0:         #FFFFFF;   /* Platte */
  --tinte:           #00343B;

  --text:            #3A3A3C;
  --text-ueber:      #005965;
  --text-gedaempft:  #636366;
  --text-invers:     #FFFFFF;
  --akzent-invers:   #B8D79C;

  --rand-ui:         #767676;
  --rand-dekor:      rgba(0, 89, 101, .16);
  --rand-trenner:    rgba(0, 89, 101, .12);
  --haarlinie:       rgba(0, 52, 59, .13);
  --rand-feld:       #93999E;   /* hellstes Grau, das auf Weiss noch ueber 3:1 bleibt (WCAG 1.4.11) */

  --fehler:          #A4262C;

  /* Hebung, petrolgetoent, immer mit Lichtkante — sonst wirkt die Platte aufgeklebt */
  --hebung-1: 0 1px 1px rgba(0,52,59,.04), 0 2px 5px rgba(0,52,59,.05);
  --hebung-2: 0 2px 4px rgba(0,52,59,.05), 0 10px 24px -8px rgba(0,52,59,.11);
  --hebung-3: 0 4px 10px -4px rgba(0,52,59,.08), 0 28px 56px -18px rgba(0,52,59,.18);
  --hebung-4: 0 8px 18px -6px rgba(0,52,59,.10), 0 56px 100px -32px rgba(0,52,59,.26);
  --kante-licht: inset 0 1px 0 rgba(255,255,255,.92);
  --kante-hair:  inset 0 0 0 1px rgba(0,52,59,.07);

  --fokus: #005965;             /* auf dunklen Flaechen umgeschaltet, s. 3. */

  /* Abstaende (Fibonacci) */
  --f1: .5rem; --f2: .8125rem; --f3: 1.3125rem; --f4: 2.125rem; --f5: 3.4375rem; --f6: 5.5625rem;

  /* Typo, modulare Skala 1,25 */
  --t-kicker: .78rem;
  --t-klein:  .875rem;
  --t-0: clamp(1.0625rem, 1.0125rem + .25vw, 1.125rem);
  --t-1: clamp(1.125rem, 1.06rem + .3vw, 1.25rem);
  --t-2: clamp(1.375rem, 1.28rem + .47vw, 1.5625rem);
  --t-3: clamp(1.5rem, 1.27rem + 1.15vw, 1.953rem);
  --t-4: clamp(1.875rem, 1.45rem + 2.1vw, 2.75rem);
  --t-5: clamp(2.375rem, 1.5rem + 4.2vw, 4rem);

  --font-body: "Archivo Var", "Archivo Ersatz", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  /* Die Wortmarke auf dem Film — und NUR sie — laeuft in einer Antiqua. Keine
     Schriftdatei im Projekt, daher verwandte Systemantiquas. */
  --font-marke: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, "Times New Roman", serif;

  --wdth-etikett: 68;
  --wdth-schmal:  84;
  --wdth-normal:  100;

  --r-1: .625rem;    /* Felder, Chips */
  --r-2: 1.125rem;   /* Kacheln */
  --r-3: 1.75rem;    /* Panels, Bilder */
  --r-4: 2.5rem;     /* Platten */
  --r-5: 3.5rem;     /* Hero-Platte ab 62em */
  --r-pill: 999px;

  /* Glas: ohne saturate() wird jede Glasflaeche grau. */
  --glas-ton:      rgba(255, 255, 255, .58);
  --glas-filter:   blur(18px) saturate(1.7) brightness(1.02);
  --glas-filter-s: blur(9px) saturate(1.5);
  --glas-kante:    inset 0 1px 0 rgba(255,255,255,.88), inset 0 -1px 0 rgba(0,52,59,.07);
  --glas-schatten: 0 6px 20px -8px rgba(0,52,59,.20);

  /* Motion nach Weglaenge */
  --zeit-1: 120ms;   /* Farbe, Rand */
  --zeit-2: 180ms;   /* Chip, Button */
  --zeit-3: 320ms;   /* Panel, Zeile */
  --zeit-4: 520ms;   /* Sektionseintritt, Kopfpille */
  --ein: cubic-bezier(.16, .84, .44, 1);

  --breite: 72rem;
  --kopfhoehe: 4rem;
  --plattenrand: clamp(.5rem, 2vw, 1.5rem);
}
@media (min-width: 48em) { :root { --kopfhoehe: 4.75rem; } }

/* --- 2. Grundlagen ------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
[hidden] { display: none !important; }

html {
  color-scheme: light;
  -webkit-text-size-adjust: 100%;
  background: var(--grund-2);          /* auf <html>, damit auch die Ueberscroll-Zone den Grund traegt */
  /* --kopf-ist setzt site.js aus der tatsaechlichen Kopfhoehe, --dock-ist
     fx-szenen.js aus der Dockhoehe; ohne Skripte gelten die Entwurfswerte. */
  scroll-padding-top: calc(var(--kopf-ist, var(--kopfhoehe)) + var(--dock-ist, 0px) + var(--f3));
}
body {
  margin: 0;
  color: var(--text);
  font: 400 var(--t-0)/1.62 var(--font-body);
  font-variation-settings: "wght" 400, "wdth" var(--wdth-normal);
  font-variant-numeric: proportional-nums;
  overflow-wrap: break-word;
  min-height: 100svh;
}

/* Schmalsatz: die Breitenachse der Variable Font ist die Signatur. */
h1, h2, h3 { margin: 0 0 var(--f3); color: var(--text-ueber); line-height: 1.14; text-wrap: balance; }
h1, h2 { font-variation-settings: "wght" 640, "wdth" var(--wdth-schmal); letter-spacing: -.022em; }
h1 { font-size: var(--t-5); line-height: 1.04; }
h2 { font-size: var(--t-4); }
h3 { font-size: var(--t-2); line-height: 1.24; font-variation-settings: "wght" 620, "wdth" 92; letter-spacing: -.008em; }

p, li { text-wrap: pretty; }
p { margin: 0 0 var(--f3); }
p:last-child { margin-bottom: 0; }
.fliess { max-width: 64ch; }
a { color: var(--petrol); text-decoration-thickness: .08em; text-underline-offset: .15em; }
a:hover { color: var(--petrol-tief); }
img, svg, video { max-width: 100%; height: auto; }
img { display: block; }
ul, ol { margin: 0 0 var(--f3); padding-left: var(--f3); }
li + li { margin-top: var(--f1); }

/* --- 3. Fokus ------------------------------------------------------------ */
:focus-visible { outline: 3px solid var(--fokus); outline-offset: 2px; border-radius: 3px; }
.sektion-petrol, .fuss { --fokus: #B8D79C; }

/* --- 4. Hilfsklassen ----------------------------------------------------- */
.nur-sr {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}
.sprunglink {
  position: absolute; left: var(--f2); top: var(--f2); z-index: 200;
  transform: translateY(-250%);
  padding: var(--f2) var(--f3);
  background: var(--petrol); color: var(--text-invers);
  border-radius: var(--r-pill); text-decoration: none; font-weight: 600;
}
.sprunglink:focus { transform: translateY(0); color: var(--text-invers); }

.behaelter { width: 100%; max-width: var(--breite); margin-inline: auto; padding-inline: clamp(1rem, 4vw, 2.5rem); }

/* Das Etikett: wdth 68 ist der schmalste Satz der ganzen Seite. */
.kicker {
  display: block; margin: 0 0 var(--f2);
  font: 640 var(--t-kicker)/1.4 var(--font-body);
  font-variation-settings: "wght" 640, "wdth" var(--wdth-etikett);
  letter-spacing: .15em; text-transform: uppercase;
  color: var(--petrol);
}
.sektion-petrol .kicker { color: var(--akzent-invers); }

/* --- 5. Kopf: die Pille --------------------------------------------------
   Der Kopf aendert seine HOEHE nie (site.js fuehrt --kopf-ist nach; ein
   schrumpfender Kopf verstellte beim Scrollen fortlaufend scroll-padding-top).
   Beim Scrollen loest sich nur die FLAECHE zur Glaspille. overflow:hidden ist
   auf .kopf und .kopf-innen verboten: das Mobilmenue haengt absolut darunter. */
.kopf { position: sticky; top: 0; z-index: 100; padding-block: .5rem; }
.kopf-innen {
  position: relative;
  display: flex; align-items: center; gap: var(--f3);
  min-height: var(--kopfhoehe);
  border-radius: var(--r-pill);
  padding-inline: clamp(1rem, 3vw, 1.75rem);
}
@media (prefers-reduced-motion: no-preference) {
  .kopf-innen { transition: background-color var(--zeit-4) var(--ein), box-shadow var(--zeit-4) var(--ein), backdrop-filter var(--zeit-4) var(--ein); }
}
/* data-gescrollt setzt fx-szenen.js ueber einen Sentinel; ohne Skript bleibt der Kopf randlos. */
html[data-gescrollt] .kopf-innen {
  background: rgba(255, 255, 255, .78);
  box-shadow: var(--glas-kante), 0 4px 16px -6px rgba(0,52,59,.16);
}
@supports (backdrop-filter: blur(12px)) {
  html[data-gescrollt] .kopf-innen {
    background: rgba(255, 255, 255, .62);
    -webkit-backdrop-filter: var(--glas-filter); backdrop-filter: var(--glas-filter);
  }
}

.marke { display: inline-flex; align-items: center; gap: var(--f2); margin-right: auto; text-decoration: none; }
.marke img { width: 2.5rem; height: 2.5rem; border-radius: var(--r-1); }
.marke-text {
  font: 640 1.0625rem/1.12 var(--font-body);
  font-variation-settings: "wght" 660, "wdth" 88;
  color: var(--petrol); letter-spacing: -.012em;
}
.marke-text small {
  display: block; margin-top: .1em;
  font: 400 .7rem/1.3 var(--font-body);
  font-variation-settings: "wght" 420, "wdth" var(--wdth-etikett);
  color: var(--text-gedaempft); letter-spacing: .09em; text-transform: uppercase;
}
/* 62–75em: der Beisatz weicht, sonst braeche die Leiste mit fuenf Eintraegen um. */
@media (min-width: 62em) and (max-width: 74.99em) { .marke-text small { display: none; } }

.nav-schalter {
  display: inline-flex; align-items: center; gap: .5rem;
  min-height: 44px; padding: .5rem 1rem;
  border: 1px solid var(--rand-dekor); border-radius: var(--r-pill);
  background: var(--grund-0); color: var(--petrol);
  font: 600 var(--t-klein) var(--font-body); cursor: pointer;
}
.nav-schalter svg { width: 1.25rem; height: 1.25rem; }

.nav-liste { display: flex; flex-wrap: wrap; align-items: center; gap: var(--f3); list-style: none; margin: 0; padding: 0; }
.nav-liste li { margin: 0; }
.nav-liste a:not(.btn) {
  display: block; padding: .5rem .2rem;
  color: var(--text); font-size: var(--t-klein); font-weight: 500;
  text-decoration: none;
  border-bottom: 2px solid transparent;
}
.nav-liste a:not(.btn):hover { color: var(--petrol); border-bottom-color: var(--rand-dekor); }
.nav-liste a:not(.btn)[aria-current] { color: var(--petrol); font-weight: 700; border-bottom-color: var(--gruen); }
.nav-liste .btn { border-bottom: 2px solid transparent; }

@media (max-width: 61.99em) {
  .nav { display: none; }
  .nav[data-offen="true"] {
    display: block; position: absolute; left: 0; right: 0; top: calc(100% + .5rem);
    background: var(--grund-0); border-radius: var(--r-3);
    box-shadow: var(--hebung-3), var(--kante-licht);
    padding: var(--f2) clamp(1rem, 4vw, 1.75rem) var(--f3);
  }
  .nav[data-offen="true"] .nav-liste { flex-direction: column; align-items: stretch; gap: 0; }
  .nav[data-offen="true"] .nav-liste a { min-height: 48px; display: flex; align-items: center; border-bottom: 1px solid var(--haarlinie); }
  .nav[data-offen="true"] .nav-liste .btn { margin-top: var(--f2); justify-content: center; border-bottom: 2px solid transparent; }
}
@media (min-width: 62em) {
  .nav-schalter { display: none; }
  .nav { display: block; }
}

/* --- 6. Buttons: genau zwei Stufen, Pillenform ---------------------------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  min-height: 48px; padding: .8rem 1.5rem;
  border-radius: var(--r-pill); border: 2px solid transparent;
  font: 600 var(--t-klein)/1.2 var(--font-body);
  font-variation-settings: "wght" 640, "wdth" 96;
  letter-spacing: .005em;
  text-decoration: none; cursor: pointer;
}
@media (prefers-reduced-motion: no-preference) {
  .btn { transition: background-color var(--zeit-2) var(--ein), border-color var(--zeit-2) var(--ein), color var(--zeit-2) var(--ein), box-shadow var(--zeit-2) var(--ein), transform var(--zeit-2) var(--ein); }
}
.btn svg { width: 1.05rem; height: 1.05rem; flex: none; }
.btn:active { transform: translateY(1px); }

.btn-primaer { background: var(--petrol); color: var(--text-invers); box-shadow: var(--hebung-1); }
.btn-primaer:hover { background: var(--petrol-tief); color: var(--text-invers); box-shadow: var(--hebung-2); transform: translateY(-1px); }
.btn-sekundaer { background: var(--grund-0); color: var(--petrol); border-color: var(--rand-dekor); box-shadow: var(--hebung-1); }
.btn-sekundaer:hover { color: var(--petrol-tief); border-color: var(--petrol); box-shadow: var(--hebung-2); transform: translateY(-1px); }
.sektion-petrol .btn-primaer { background: var(--gruen); color: #00343B; box-shadow: none; }
.sektion-petrol .btn-primaer:hover { background: #CFE5BB; color: #00292F; }

/* --- 7. Platten ------------------------------------------------------------
   Sektionen sind eingerueckte Platten auf dem Ablagegrund, keine Vollbreite-
   Streifen. Der Grund bleibt in den Fugen sichtbar — daher die Tiefe. */
.sektion, .hero {
  position: relative;
  margin-inline: var(--plattenrand);
  margin-block: clamp(.5rem, 1.2vw, 1rem);
  border-radius: var(--r-4);
  background: var(--grund-0);
  box-shadow: var(--hebung-2), var(--kante-licht);
  padding-block: clamp(3.4375rem, 7vw, 5.5625rem);
}
.sektion-alt { background: var(--grund-1); }
/* Die Kontrastinsel: die einzige Platte, die tiefer wirkt statt hoeher. */
.sektion-petrol { background: var(--petrol); color: #E6F0F1; box-shadow: var(--hebung-4); }
.sektion-petrol h2, .sektion-petrol h3 { color: var(--text-invers); }
.sektion-petrol a:not(.btn) { color: var(--gruen); }
.sektion-petrol .fliess { color: #E6F0F1; }
.sektion-petrol .hinweis { color: #DCEAEB; }   /* das globale #45453F waere auf Petrol ~1,3:1 */

.hero { padding-block: clamp(2.75rem, 6vw, 4.5rem) clamp(3.4375rem, 7vw, 5.5625rem); }
@media (min-width: 62em) { .hero { border-radius: var(--r-5); } }
.hero h1 { margin-bottom: var(--f3); }
.hero-aktionen { display: flex; flex-wrap: wrap; align-items: center; gap: var(--f3); margin-top: var(--f4); }

.sektion-kopf { margin-bottom: var(--f5); max-width: 64ch; }
.sektion-kopf > :last-child { margin-bottom: 0; }
.lead { font-size: var(--t-1); line-height: 1.55; font-variation-settings: "wght" 420, "wdth" var(--wdth-normal); color: #4A4A4D; }
.sektion-fuss { margin-top: var(--f4); display: flex; flex-wrap: wrap; gap: var(--f3); }

/* --- 8. Raster ----------------------------------------------------------- */
.raster > *, .fuss-raster > *, .kopf-innen > * { min-width: 0; }
.raster { display: grid; gap: var(--f3); }

/* --- 9. Zeilen: eine Liste von Leistungen ist eine Liste, keine Kaesten --- */
.liste-zeilen { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--haarlinie); }
.liste-zeilen > li { margin: 0; }
.zeile {
  display: grid; gap: .35rem var(--f4); align-items: baseline;
  padding-block: var(--f3);
  border-bottom: 1px solid var(--haarlinie);
  position: relative; isolation: isolate;
}
@media (min-width: 48em) { .zeile { grid-template-columns: minmax(11rem, 22%) 1fr; padding-block: var(--f4); } }
.zeile h3 { margin: 0; font-size: var(--t-1); line-height: 1.3; font-variation-settings: "wght" 640, "wdth" 88; color: var(--text-ueber); }
.zeile p { margin: 0; max-width: 58ch; }
/* Hover hebt die Zeile leicht aus der Liste; die Flaeche greift ueber den Rand hinaus. */
.zeile::before { content: ""; position: absolute; inset: 0 calc(var(--f3) * -1); border-radius: var(--r-2); background: var(--grund-1); opacity: 0; z-index: 0; }
.zeile > * { position: relative; z-index: 1; }
@media (prefers-reduced-motion: no-preference) { .zeile::before { transition: opacity var(--zeit-1) var(--ein); } }
@media (hover: hover) and (pointer: fine) { .zeile:hover::before { opacity: 1; } }

/* --- 10. Bilder: gerundetes Fenster mit Haarlinie und Hebung ---------------- */
.bild { position: relative; border-radius: var(--r-3); box-shadow: var(--kante-hair), var(--hebung-3); overflow: hidden; background: var(--grund-1); }
.bild img { width: 100%; }

/* --- 11. Deklaration: Etikett links, Wert rechts, Haarlinie dazwischen ------ */
.daten { margin: 0; font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1; border-top: 1px solid var(--haarlinie); }
.daten > div { display: grid; gap: var(--f1); padding-block: var(--f2); border-bottom: 1px solid var(--haarlinie); }
/* min() deckelt die Etikettenspalte bei 200 % Textzoom, min-width: 0 laesst
   die Wertspalte schrumpfen — beides WCAG 1.4.10 (Reflow). */
@media (min-width: 36em) {
  .daten > div { grid-template-columns: minmax(min(10rem, 40%), 15rem) minmax(0, 1fr); gap: var(--f3); align-items: baseline; }
}
.daten dt {
  color: var(--text-gedaempft); font-size: var(--t-kicker);
  font-variation-settings: "wght" 600, "wdth" var(--wdth-etikett);
  letter-spacing: .1em; text-transform: uppercase;
  padding-top: .15em;
}
.daten dd { margin: 0; min-width: 0; overflow-wrap: anywhere; font-weight: 500; }

/* --- 12. Dock: das schwebende Glas-Sprungmenue ----------------------------- */
.sektion-nav {
  position: sticky; z-index: 90;
  top: calc(var(--kopf-ist, var(--kopfhoehe)) + 1rem);
  margin-inline: var(--plattenrand);
  margin-block: clamp(.5rem, 1.2vw, 1rem);
}
.sektion-nav > .behaelter { padding-inline: 0; }
.sektion-nav ul {
  position: relative;
  list-style: none; margin: 0;
  width: fit-content; max-width: 100%;
  padding: .4rem;
  display: flex; flex-wrap: nowrap; gap: .25rem;
  overflow-x: auto; overscroll-behavior-inline: contain;
  scrollbar-width: none;
  border-radius: var(--r-pill);
  background: rgba(255,255,255,.82);
  box-shadow: var(--glas-kante), var(--glas-schatten);
}
.sektion-nav ul::-webkit-scrollbar { display: none; }
@supports (backdrop-filter: blur(12px)) {
  .sektion-nav ul { background: var(--glas-ton); -webkit-backdrop-filter: var(--glas-filter-s); backdrop-filter: var(--glas-filter-s); }
}
.sektion-nav li { margin: 0; flex: none; }
.sektion-nav a {
  display: inline-flex; align-items: center;
  padding: .5rem 1rem; min-height: 40px; white-space: nowrap;
  font-size: var(--t-klein);
  font-variation-settings: "wght" 600, "wdth" 92;
  color: var(--petrol); text-decoration: none;
  border-radius: var(--r-pill);
}
@media (prefers-reduced-motion: no-preference) {
  .sektion-nav a { transition: background-color var(--zeit-1) var(--ein), color var(--zeit-1) var(--ein); }
}
@media (hover: hover) and (pointer: fine) { .sektion-nav a:hover { background: rgba(0,89,101,.08); } }
.sektion-nav a[aria-current="true"] { background: var(--petrol); color: var(--text-invers); }

/* Der Laeufer: EINE Pille wandert hinter dem aktiven Chip her. Erzeugt
   fx-szenen.js; ohne Skript bleibt der flache Farbwechsel oben. */
.dock-laeufer {
  position: absolute; left: 0; top: .4rem;
  width: 0; height: 0;
  border-radius: var(--r-pill);
  background: var(--petrol);
  z-index: 0; opacity: 0;
  pointer-events: none;
  will-change: transform, width;
}
.dock-laeufer[data-an] { opacity: 1; }
@media (prefers-reduced-motion: no-preference) {
  .dock-laeufer { transition: transform var(--zeit-3) var(--ein), width var(--zeit-3) var(--ein), opacity var(--zeit-2) var(--ein); }
}
.dock-mit-laeufer a { position: relative; z-index: 1; }
.dock-mit-laeufer a[aria-current="true"] { background: transparent; color: var(--text-invers); }

/* --- 13. Formular ------------------------------------------------------------
   Helle Karte auf der weissen Sektion, kein Glas (nichts dahinter). Keine
   Bewegung WAEHREND der Eingabe; erlaubt ist nur das einmalige Aufwachsen beim
   Reinscrollen. Die name-Attribute, .honigtopf, .formular-status und die
   #fehler-<name>-IDs sind Vertrag mit site.js — nicht umbenennen. */
.anfrage-panel {
  max-width: 46rem; margin-inline: auto;
  background: var(--grund-1); color: var(--text);
  border-radius: var(--r-4); padding: clamp(1.3125rem, 5vw, 3.4375rem);
  box-shadow: var(--hebung-2), var(--kante-licht);
}
.anfrage-panel h2, .anfrage-panel h3 { color: var(--tinte); }
/* Zustand ausserhalb von @supports ist der FERTIGE — nie opacity:0 dort, sonst
   bleibt das Panel ohne Scroll-Timelines unsichtbar. */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .anfrage-panel { animation: anfrage-auffalten ease-out both; animation-timeline: view(); animation-range: entry 0% entry 45%; }
    @keyframes anfrage-auffalten {
      from { opacity: 0; transform: scale(.94) translateY(28px); }
      to   { opacity: 1; transform: scale(1) translateY(0); }
    }
  }
}

.feld { margin-bottom: var(--f4); }
/* Direktes Kind: .chip ist selbst ein <label> und darf nicht auf volle Breite gestreckt werden. */
.feld > label, .chip-gruppe legend {
  display: block; margin-bottom: .5rem; width: 100%;
  font-size: var(--t-klein);
  font-variation-settings: "wght" 560, "wdth" 100;
}
.pflicht { color: #8C2A0F; font-weight: 700; margin-left: .15em; }
.hinweis { display: block; margin-top: .3rem; font-size: var(--t-klein); color: #45453F; }
.pflicht-legende { font-size: var(--t-klein); color: #45453F; }

input[type="text"], input[type="email"], input[type="tel"], textarea {
  width: 100%; min-height: 48px; padding: .75rem .9rem;
  font: 400 var(--t-0)/1.5 var(--font-body); color: var(--text);
  background: var(--grund-0);
  border: 1px solid var(--rand-feld); border-radius: var(--r-1);
}
textarea { min-height: 8rem; resize: vertical; }
input::placeholder, textarea::placeholder { color: var(--text-gedaempft); opacity: 1; }
:is(input[type="text"], input[type="email"], input[type="tel"], textarea):hover { border-color: var(--petrol); box-shadow: var(--hebung-1); }
:is(input[type="text"], input[type="email"], input[type="tel"], textarea):focus-visible { border-color: var(--petrol); box-shadow: 0 0 0 3px rgba(0, 89, 101, .18); }
@media (prefers-reduced-motion: no-preference) {
  input[type="text"], input[type="email"], input[type="tel"], textarea { transition: border-color .18s ease, box-shadow .18s ease; }
}
/* Gueltig erst nach Nutzereingabe (:user-valid), nie beim leeren Erstaufruf */
input:user-valid:required, textarea:user-valid:required { border-color: #2E6B3C; }
input[type="text"]:user-valid:required, input[type="email"]:user-valid:required {
  padding-right: 2.5rem;
  background: var(--grund-0) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%232E6B3C' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 8.5l3.5 3.5 7-8'/%3E%3C/svg%3E") no-repeat right .85rem center / 1rem 1rem;
}

/* Segment/Anliegen als Chips. Das native Radio bleibt SICHTBAR und bedienbar —
   Tastatur, Fokusring und Gruppen-Semantik bleiben die eingebauten. */
.chip-gruppe { border: 0; margin: 0; padding: 0; min-width: 0; }
.chip-optionen { display: flex; flex-wrap: wrap; gap: .6rem; }
.chip {
  display: inline-flex; align-items: center; gap: .55rem;
  padding: .6rem 1.05rem;
  background: var(--grund-0); color: var(--text);
  border: 1px solid var(--rand-feld); border-radius: var(--r-pill);
  font-size: var(--t-klein);
  font-variation-settings: "wght" 560, "wdth" 96;
  cursor: pointer;
}
.chip input[type="radio"] { width: 1.05rem; height: 1.05rem; margin: 0; accent-color: var(--petrol); }
@media (hover: hover) and (pointer: fine) { .chip:hover { border-color: var(--petrol); box-shadow: var(--hebung-1); } }
.chip:has(input:focus-visible) { box-shadow: 0 0 0 3px rgba(0, 89, 101, .18); }
.chip:has(input:checked) { background: var(--petrol); border-color: var(--petrol); color: var(--text-invers); }
.chip:has(input:checked) input[type="radio"] { accent-color: var(--text-invers); }
.chip-gruppe[data-ungueltig] .chip { border-color: var(--fehler); }
@media (prefers-reduced-motion: no-preference) {
  .chip { transition: background-color var(--zeit-1) var(--ein), border-color var(--zeit-1) var(--ein), color var(--zeit-1) var(--ein), box-shadow var(--zeit-1) var(--ein); }
}

/* Unternehmerbestaetigung (§ 14 BGB): Kaestchen und Beschriftung nebeneinander,
   Fehlerbox darunter ueber beide Spalten. font-variation-settings ist noetig,
   weil font-weight allein die wght-Achse von .feld > label nicht zuruecksetzt. */
.feld-zustimmung { display: grid; grid-template-columns: auto 1fr; gap: .1rem .6rem; align-items: start; }
.feld-zustimmung input { inline-size: 1.15rem; block-size: 1.15rem; margin-block-start: .15rem; accent-color: var(--petrol); }
.feld-zustimmung label { margin: 0; font-weight: 400; font-variation-settings: "wght" 400, "wdth" var(--wdth-normal); }
.feld-zustimmung .feld-fehler { grid-column: 1 / -1; }

.feld-fuss { display: flex; justify-content: space-between; align-items: baseline; gap: var(--f2); }
.zeichen-zaehler { white-space: nowrap; font-variant-numeric: tabular-nums; }

.formular-fortschritt { display: flex; align-items: center; gap: var(--f2); margin-bottom: var(--f3); font-size: var(--t-klein); color: #3F4A34; }
.fortschritt-balken { flex: 0 1 14rem; height: .4rem; border-radius: var(--r-pill); background: var(--grund-0); box-shadow: inset 0 0 0 1px var(--rand-ui); overflow: hidden; }
.fortschritt-wert { display: block; height: 100%; width: 0; background: var(--petrol); }
@media (prefers-reduced-motion: no-preference) { .fortschritt-wert { transition: width .25s ease; } }

.anfrage-panel button[type="submit"] { width: 100%; min-height: 56px; margin-top: var(--f1); font-size: var(--t-0); }
@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
  .anfrage-panel button[type="submit"] svg { transition: transform var(--zeit-2) var(--ein); }
  .anfrage-panel button[type="submit"]:hover svg { transform: translateX(3px); }
}

[aria-invalid="true"] { border-color: var(--fehler); border-width: 2px; }
.feld-fehler { display: flex; gap: .4rem; margin-top: .35rem; font-size: var(--t-klein); font-weight: 600; color: #7A1D22; }
.feld-fehler::before { content: "\26A0"; }

.formular-status:empty { display: none; }
.meldung { margin-bottom: var(--f3); padding: var(--f3); border-radius: var(--r-2); border-left: 4px solid; background: var(--grund-0); }
.meldung-fehler { border-color: var(--fehler); color: #7A1D22; }
.meldung-ok { border-color: var(--petrol); color: #0B3D14; }

.honigtopf { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* --- 14. Rechtstexte (impressum, datenschutz) — laufen ohne fx-basis.js ----- */
.rechtstext {
  margin-inline: var(--plattenrand);
  margin-block: clamp(.5rem, 1.2vw, 1rem);
  border-radius: var(--r-4);
  background: var(--grund-0);
  box-shadow: var(--hebung-2), var(--kante-licht);
  padding-block: var(--f5) var(--f6);
  line-height: 1.72;
}
.rechtstext .schmal > * { max-width: 68ch; }
.rechtstext h2 { font-size: var(--t-3); margin-top: var(--f5); font-variation-settings: "wght" 640, "wdth" 88; color: var(--petrol-tief); }
.rechtstext h2:first-of-type { margin-top: var(--f4); }
.rechtstext .daten { margin-bottom: var(--f3); }

/* Das Register: eingeklapptes Inhaltsverzeichnis im Fluss; ab 62em klebendes
   Panel neben dem Text (kein Glas — hinter ihm liegt nur leere Platte). */
.register { margin-bottom: var(--f5); padding: var(--f3) var(--f4); background: var(--grund-1); border-radius: var(--r-3); box-shadow: var(--kante-hair); }
.register ol, .register ul { margin: 0; }
.register li > ul { margin-top: var(--f1); }
.register h2 {
  font-size: var(--t-kicker); margin: 0 0 var(--f2);
  font-variation-settings: "wght" 640, "wdth" var(--wdth-etikett);
  letter-spacing: .12em; text-transform: uppercase; color: var(--petrol-tief);
}
.register a[aria-current="true"] { color: var(--tinte); font-variation-settings: "wght" 700, "wdth" 92; text-decoration-thickness: .12em; }
@media (min-width: 62em) {
  .rechtstext .schmal { display: grid; grid-template-columns: minmax(0, 1fr) 17rem; column-gap: var(--f5); align-items: start; }
  .rechtstext .schmal > * { grid-column: 1; }   /* sonst fuellt die Auto-Platzierung zeilenweise beide Spalten */
  .rechtstext .register {
    grid-column: 2;
    grid-row: 1 / span 50;   /* -1 zeigte ohne explizite Zeilen auf Linie 1: kein Weg fuer sticky */
    align-self: start;
    position: sticky;
    top: calc(var(--kopf-ist, var(--kopfhoehe)) + 1rem);
    max-height: calc(100svh - var(--kopf-ist, var(--kopfhoehe)) - 3rem);
    overflow-y: auto; scrollbar-width: thin;
    margin-bottom: 0;
  }
}

.geltungsbereich { margin-bottom: var(--f4); padding: var(--f4); background: #F0F6F6; border-radius: var(--r-3); box-shadow: inset 3px 0 0 var(--petrol); }
.geltungsbereich p:last-child { margin-bottom: 0; }
.brotkrume { font-size: var(--t-klein); color: var(--text-gedaempft); margin-bottom: var(--f3); }
.brotkrume a { display: inline-block; padding-block: .35rem; }

/* --- 15. Fuss ------------------------------------------------------------ */
.fuss {
  background: var(--petrol); color: #E6F0F1;
  margin-inline: var(--plattenrand);
  margin-block: clamp(.5rem, 1.2vw, 1rem);
  border-radius: var(--r-4);
  padding: var(--f5) 0 var(--f4);
  font-size: var(--t-klein);
  box-shadow: var(--hebung-4);
}
.fuss a { color: var(--gruen); }
.fuss a:hover { color: #D6EAC4; }
.fuss h2 {
  font-size: var(--t-kicker); color: var(--gruen);
  font-variation-settings: "wght" 640, "wdth" var(--wdth-etikett);
  text-transform: uppercase; letter-spacing: .12em; margin-bottom: var(--f2);
}
.fuss ul { list-style: none; padding: 0; margin: 0; }
.fuss li { margin: 0; }
.fuss li a { display: inline-block; padding-block: .4rem; }
.fuss address { font-style: normal; line-height: 1.75; }
.fuss-raster { display: grid; gap: var(--f4); grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr)); }
.fuss-register { margin-top: var(--f4); padding-top: var(--f3); border-top: 1px solid rgba(184, 215, 156, .3); color: #CFE0E2; font-size: .8125rem; }
.fuss-register p { margin-bottom: var(--f1); }

/* --- 16. Bewegung: raus, Zustandswechsel bleibt ---------------------------- */
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important;
    transition-duration: .01ms !important; scroll-behavior: auto !important;
  }
}

/* --- 17. Druck ----------------------------------------------------------- */
@media print {
  .kopf, .sprunglink, .btn, .anfrage-panel, .nav, .sektion-nav, .fx-spur, .fx-pause { display: none !important; }
  html { background: #fff; }
  body { color: #000; font-size: 11pt; background: #fff; }
  .sektion, .hero, .rechtstext, .fuss, .zeile, .bild, .register, .geltungsbereich {
    box-shadow: none !important; background: none !important;
    margin-inline: 0 !important; border-radius: 0 !important;
    position: static !important;
  }
  .sektion, .hero, .rechtstext { padding-block: 1rem; }
  .rechtstext .schmal { display: block; }
  .fuss { background: none; color: #000; padding-block: 1rem; border-top: 1px solid #000; }
  .fuss a, .fuss h2 { color: #000; }
  .sektion-petrol, .sektion-petrol h2, .sektion-petrol h3, .sektion-petrol .fliess { color: #000 !important; }
  .zeile, .daten > div { border-color: #999 !important; }
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 9pt; word-break: break-all; }
}

/* =============================================================================
   18. Effektschicht — alles additiv. Effekte greifen erst, wenn fx-basis.js
   die Klasse fx-bereit an <html> gesetzt hat.
   ========================================================================== */

/* Variable Font, selbst gehostet. unicode-range deckt Latin-1 + Interpunktion;
   Zeichen ausserhalb fallen sichtbar auf den Ersatz zurueck. */
@font-face {
  font-family: "Archivo Var";
  src: url("../font/archivo-var.woff2") format("woff2-variations");
  font-weight: 100 900;
  font-stretch: 62% 125%;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0100-017F, U+2000-206F, U+20AC, U+2122, U+2190-2199, U+26A0;
}
@font-face {
  font-family: "Archivo Ersatz";
  src: local("Segoe UI"), local("Helvetica Neue"), local("Arial"), local("Roboto");
  size-adjust: 95.1%; ascent-override: 87.8%; descent-override: 21%; line-gap-override: 0%;
}

/* Zeigerspur — cursor:none wird NIRGENDS gesetzt, der Systemzeiger bleibt. */
.fx-spur { display: none; }
.fx-bereit.fx-spur-an .fx-spur {
  display: block;
  position: fixed; left: 0; top: 0; z-index: 95;
  width: 26px; height: 26px; margin: -13px 0 0 -13px;
  border: 2px solid var(--petrol);
  border-radius: 50%;
  opacity: .3;
  pointer-events: none;
  will-change: transform;
  transition: width var(--zeit-3) var(--ein), height var(--zeit-3) var(--ein), margin var(--zeit-3) var(--ein), opacity var(--zeit-3) var(--ein);
}
.fx-bereit.fx-spur-an .fx-spur-aktiv { width: 46px; height: 46px; margin: -23px 0 0 -23px; opacity: .45; }
.fx-bereit.fx-spur-an .fx-spur-still { opacity: 0; }

/* Das innere <span> traegt die Magnetbewegung, nicht der Link — sonst wanderte die Trefferflaeche mit. */
.fx-magnet { display: inline-flex; align-items: center; gap: inherit; will-change: transform; }

/* Pausenschalter: Pflicht, sobald etwas dauerhaft laeuft. */
.fx-pause { display: none; }
.fx-bereit .fx-pause {
  display: inline-flex; align-items: center;
  position: fixed; right: var(--f3); bottom: var(--f3); z-index: 95;
  min-height: 48px; padding: .6rem 1.15rem;
  background: rgba(255,255,255,.82); color: var(--petrol);
  border: 0; border-radius: var(--r-pill);
  font: 600 var(--t-klein) var(--font-body);
  box-shadow: var(--glas-kante), var(--hebung-3);
  cursor: pointer;
}
@supports (backdrop-filter: blur(9px)) {
  .fx-bereit .fx-pause { background: var(--glas-ton); -webkit-backdrop-filter: var(--glas-filter-s); backdrop-filter: var(--glas-filter-s); }
}
.fx-bereit .fx-pause:hover { background: rgba(255,255,255,.94); }
@media (max-width: 34em) {
  .fx-bereit .fx-pause { right: .5rem; bottom: .5rem; padding: .5rem .8rem; font-size: .78rem; max-width: 52vw; }
}

/* --- 19. Abschaltungen -------------------------------------------------------
   Glas braucht Inhalt dahinter; Budget: hoechstens ZWEI sichtbare backdrop-
   filter-Flaechen, den Radius nie animieren. */
.fx-ohne-glas .sektion-nav ul, .fx-ohne-glas .kopf-innen, .fx-ohne-glas .fx-pause {
  -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
}
@media (prefers-reduced-transparency: reduce) {
  .sektion-nav ul, .kopf-innen, .fx-pause { -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
  .sektion-nav ul { background: var(--grund-0); }
  html[data-gescrollt] .kopf-innen { background: var(--grund-0); }
}
/* Systemeinstellung: nicht weniger Bewegung, sondern keine. */
@media (prefers-reduced-motion: reduce) { .fx-spur, .fx-pause { display: none !important; } }
/* Windows-Kontrastmodus */
@media (forced-colors: active) {
  .fx-spur, .fx-pause, .dock-laeufer { display: none !important; }
  .dock-mit-laeufer a[aria-current="true"] { background: Highlight; color: HighlightText; }
  .chip, .zeile, .bild, .anfrage-panel, .sektion, .hero, .sektion-nav ul { border: 1px solid; }
  :focus-visible { outline-color: Highlight; }
}
/* Unter file:// laedt fx-basis.js gar nicht erst. */
.fx-aus-datei .fx-spur, .fx-aus-datei .fx-pause { display: none !important; }
