/* Weihnachtsmarkt am Alexanderplatz — ein Stylesheet, keine Bibliothek, kein fremder Host. */

/* ---------- Schriften: selbst ausgeliefert (OFL). Nie Google-Fonts-CDN. ---------- */
@font-face{font-family:'Caudex';font-style:normal;font-weight:700;font-display:swap;
  src:url(fonts/caudex-700.woff2) format('woff2')}
@font-face{font-family:'Urbanist';font-style:normal;font-weight:400;font-display:swap;
  src:url(fonts/urbanist-400.woff2) format('woff2')}
@font-face{font-family:'Urbanist';font-style:normal;font-weight:600;font-display:swap;
  src:url(fonts/urbanist-600.woff2) format('woff2')}
@font-face{font-family:'Great Vibes';font-style:normal;font-weight:400;font-display:swap;
  src:url(fonts/greatvibes-400.woff2) format('woff2')}

:root{
  --creme:#FEF3E6; --creme2:#F8EADA; --papier:#FFFBF6;
  --nacht:#14100E; --nacht2:#1F1814;
  --gold:#C0925F; --goldhell:#E3B878; --goldmetall:#D4AF37;
  --rot:#8F321C; --text:#241C17; --texthell:#F3E7DA; --leise:#6B5A4C;
  /* ⚠️ --gold ist eine FLAECHEN- und LINIENfarbe. Auf Creme erreicht sie als Text nur
     2,55:1 (gemessen 13.09.2026) — unter der Grenze von 4,5:1. Text auf hellem Grund
     nimmt --goldtext: derselbe Ton, 5,1:1 auf Creme. */
  /* 19.09.2026 von #8A5F2A auf #7F5726 abgedunkelt: auf Creme 5,8:1, auf dem warmen Ton
     #F5E3CC 5,0:1 — vorher fiel er auf den getoenten Abschnitten auf 4,28:1 und riss
     damit die Grenze von 4,5:1, fuer die er urspruenglich gewaehlt worden war. */
  --goldtext:#7F5726;
  /* HELLE FASSUNG seit 17.09.2026 (Kundenrunde 5: "kein dunkler Hintergrund, der Stil der
     Firma ist der helle Beigeton"). Die Konzeptseiten des Kunden stehen auf #FDF3E6 —
     gemessen am PDF. Getoente Flaechen liegen alle nah am Creme; ein Abschnitt hebt sich
     ab, ohne je eine Kante zu bilden. --nacht und --texthell bleiben NUR fuer das Heldbild. */
  --warm:#F5E3CC; --kuehl:#E7ECF0; --schiefer:#5E7B95;
  --licht:#FDE6C4;   /* aus den Lichtpunkten der Bilder gemessen — Farbe aller Effekte */
  --tiefe:#0D0C10;   /* aus den Bildschatten gemessen */
  --serif:'Caudex',Georgia,'Times New Roman',serif;
  --sans:'Urbanist',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --schreib:'Great Vibes','Snell Roundhand',cursive;
  --mw:1180px; --kopf-h:76px;
  /* Hausmass fuer Bewegung. Vorher: 13 verschiedene Dauern, 38 von 46 Uebergaengen
     auf dem Browser-Standard 'ease' — also auf dem Wert, den der Browser vergibt,
     wenn niemand entschieden hat. Gemessen am 13.09.2026. */
  --kurz:220ms;        /* Hover, Fokus, Rahmenfarben */
  --mittel:420ms;      /* Menue, Kopf, Banner, Aufklapper */
  --szenisch:1200ms;   /* Einblendung beim Scrollen */
  --weich:cubic-bezier(.33,0,.15,1);   /* alles, was ankommt */
  --raus:cubic-bezier(.4,0,1,1);       /* alles, was verschwindet */
  --weg:48px;          /* Weg einer Einblendung — rund zwei Textzeilen */
  --winkel-maske:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>');
  --stern-maske:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2l2.1 7.9L22 12l-7.9 2.1L12 22l-2.1-7.9L2 12l7.9-2.1z" fill="black"/></svg>');
  --takt:160ms;        /* Staffelung zwischen Geschwistern */
}
*{box-sizing:border-box}
/* overflow-x gehoert an BEIDE: body allein reicht nicht. Bei body{overflow-x:clip} und
   html{overflow-x:visible} waechst die Dokumentbreite trotzdem, und auf dem Handy laesst
   sich die Seite um genau diesen Betrag zur Seite ziehen — sichtbar als leerer Streifen
   am rechten Rand. Robert, 14.09.2026: "bei der Handyversion ist rechts noch ein Balken
   ohne Inhalt." Gemessen waren es 1 px, auf jeder Geraetebreite. */
/* html traegt den Ton des Fusses: unterhalb des Dokuments (kurze Seiten, Ueberdehnen auf
   dem Handy) steht so dieselbe Farbe wie der Fuss — gemessen 17.09.2026: ohne das ein
   Sprung von 12 Stufen ueber alle 60 Spalten an der Unterkante. */
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--kopf-h) + 16px);overflow-x:clip;background:var(--creme2)}
body{margin:0;background:var(--creme);color:var(--text);
  font:400 17px/1.65 var(--sans);-webkit-font-smoothing:antialiased;overflow-x:clip}
h1,h2,h3{font-family:var(--serif);font-weight:700;line-height:1.14;letter-spacing:-.01em;margin:0}
p{margin:0 0 1em}
a{color:inherit}
img,svg{max-width:100%;height:auto;display:block}
.wrap{max-width:var(--mw);margin:0 auto;padding:0 24px}
/* ⚠️ NUR in Verbindung mit .wrap. Als nackte .eng kollidierte diese Hilfsklasse mit der
   Zustandsklasse, die seite.js beim Scrollen an den Kopf haengt — der Kopf erbte dann
   max-width:800px, klappte von 1440 auf 800 px zusammen und rutschte nach links.
   Genau das war Roberts "irgendwie linksbuendig" (gemessen 13.09.2026, CLS 0,0272). */
.wrap.eng{max-width:800px}
.nur-lesen{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip{position:absolute;left:-9999px;top:0;background:var(--nacht);color:var(--texthell);
  padding:12px 18px;z-index:120}
.skip:focus{left:8px;top:8px}
/* Zweifarbig: dunkler Kern traegt auf Creme (14,8:1), goldener Hof auf Nacht.
   Einfarbig Gold erreichte auf Creme nur 1,92:1 (gemessen 13.09.2026). */
:focus-visible{outline:3px solid #14100E;outline-offset:2px;border-radius:2px;
  box-shadow:0 0 0 6px rgba(212,175,55,.85)}
.held :focus-visible{
  outline-color:var(--goldmetall);box-shadow:0 0 0 6px rgba(20,16,14,.9)}
.kicker{display:block;font:600 12px/1 var(--sans);letter-spacing:.22em;text-transform:uppercase;color:var(--goldtext)}
.held .kicker{color:var(--goldhell)}

/* ---------- Knöpfe ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5em;
  min-height:52px;padding:0 30px;border-radius:2px;border:1px solid transparent;
  font:600 16px/1 var(--sans);letter-spacing:.02em;text-decoration:none;cursor:pointer;
  transition:transform .18s ease,background .18s ease,color .18s ease,box-shadow .18s ease}
.btn-haupt{background:var(--goldmetall);color:#1A1207;border-color:var(--goldmetall);
  box-shadow:0 8px 26px rgba(192,146,95,.28)}
.btn-haupt:hover{transform:translateY(-2px);background:var(--goldhell);box-shadow:0 12px 34px rgba(192,146,95,.36)}
.btn-leise{background:transparent;color:var(--text);border-color:rgba(138,95,42,.5)}
.btn-leise:hover{border-color:var(--goldtext);color:var(--goldtext)}
.held .btn-leise{color:var(--texthell);border-color:rgba(224,184,120,.55)}
.held .btn-leise:hover{border-color:var(--goldmetall);color:var(--goldmetall)}
.btn-gleich{background:transparent;color:var(--text);border-color:rgba(192,146,95,.6)}
.btn-gleich:hover{border-color:var(--rot);color:var(--rot);transform:translateY(-2px)}
/* ⚠️ LANGE ADRESSEN MUESSEN BRECHEN DUERFEN (19.09.2026). Ein Link, dessen Text eine
   URL oder eine E-Mail ist, ist EIN Wort — die OpenStreetMap-Datenschutzadresse auf
   /datenschutz lief damit auf 360 px um 13 px aus dem Absatz heraus, gemessen von
   seiten-messen, nicht gesehen. `anywhere` greift nur, wenn es sonst ueberlaufen
   wuerde; normale Woerter bleiben unangetastet. */
.textlink{overflow-wrap:anywhere;font:600 15px/1 var(--sans);color:var(--rot);text-decoration:none;
  border-bottom:1px solid rgba(143,50,28,.4);padding:6px 0;min-height:44px;
  display:inline-flex;align-items:center;gap:7px;transition:border-color .2s ease}
.textlink:hover{border-color:var(--rot)}

/* ---------- Platzhalter sichtbar halten ---------- */
/* KEIN white-space:nowrap — lange Platzhaltertexte ("Behörde, die die Reisegewerbekarte …")
   sind sonst ein einziges unbrechbares Wort und ziehen die Seite auf 360 px auseinander.
   Gemessen am 13.09.2026: Impressum 245 px Querlauf. */
.ph{position:relative;border-bottom:1.5px dotted var(--rot);padding:0 .15em}
.ph::after{content:"▢";font-size:.62em;vertical-align:super;color:var(--rot);margin-left:.15em}
/* Das Band muss auffallen, ohne als roter Klotz ueber der dunklen Seite zu stehen.
   Robert, 14.09.2026: "Manche Buttons sind rot auf dunklem Hintergrund, das sieht nicht
   schoen aus." Gemessen war es die einzige rote Flaeche der ganzen Website (1440x38 px,
   #8F321C) — direkt ueber dem dunklen Kopf. Jetzt traegt es den Nachtton der Seite und
   sagt dasselbe in Gold: erkennbar als Hinweis, nicht als Fremdkoerper. */
.entwurfsband{background:#F3E2C6;color:#5A3D14;
  font:600 13px/1.5 var(--sans);letter-spacing:.04em;text-align:center;
  padding:9px 16px;position:relative;z-index:60;
  border-bottom:1px solid rgba(192,146,95,.35)}
.entwurfsband b{font-weight:600;color:#3A2A14;border-bottom:1px dotted rgba(138,95,42,.6)}

/* ---------- Kopf ---------- */
.kopf{position:sticky;top:0;z-index:50;background:rgba(254,243,230,.88);
  backdrop-filter:saturate(150%) blur(12px);border-bottom:1px solid rgba(192,146,95,.3);
  transition:background var(--mittel) ease,box-shadow var(--mittel) ease}
.kopf.kopf-eng{background:rgba(254,243,230,.97);box-shadow:0 10px 30px -18px rgba(80,52,28,.35)}
/* ⚠️ Die AUSSENHOEHE bleibt konstant. Vorher schrumpfte sie beim Scrollen von 76 auf
   60 px — und weil der Kopf im Fluss steht, wurde dabei das ganze Dokument kuerzer
   und der Inhalt ruckte 16 px nach oben. Genau das war die "komisch wirkende"
   Hero-Section (gemessen 13.09.2026). Innen darf sich etwas bewegen, aussen nie. */
.kopf-in{display:flex;align-items:center;gap:24px;height:var(--kopf-h)}
.kopf.kopf-eng .marke img{transform:scale(.80)}
.kopf.kopf-eng .marke b{font-size:14px}
.marke{display:flex;align-items:center;gap:12px;text-decoration:none;margin-right:auto}
.marke img{width:44px;transform-origin:left center;transition:transform var(--mittel) var(--weich)}
.marke b{font:700 15px/1.2 var(--serif);color:var(--text);letter-spacing:.01em;display:block}
.marke small{display:block;font:400 10px/1.4 var(--sans);letter-spacing:.2em;
  text-transform:uppercase;color:var(--goldtext)}
.nav{display:flex;gap:26px;align-items:center}
.nav a{font:600 14px/1 var(--sans);color:var(--text);text-decoration:none;
  padding:14px 0;opacity:.9;position:relative}
.nav a::after{content:"";position:absolute;left:0;right:100%;bottom:8px;height:1px;
  background:var(--goldtext);transition:right .28s cubic-bezier(.22,.7,.3,1)}
.nav a:hover,.nav a[aria-current="page"]{opacity:1;color:var(--goldtext)}
.nav a:hover::after,.nav a[aria-current="page"]::after{right:0}
.tel{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;
  border:1px solid rgba(138,95,42,.4);border-radius:2px;color:var(--text);
  text-decoration:none;font:600 14px/1 var(--sans);transition:border-color .2s ease,color .2s ease}
.tel:hover{border-color:var(--goldtext);color:var(--goldtext)}

/* ---------- Burger + Überblendung ---------- */
#menue-auf{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
/* Der Burger ist ein <label> zur versteckten Box: damit oeffnet das Menue auch,
   wenn seite.js ausfaellt. Auf dem Handy war sonst KEINE Navigation erreichbar. */
.burger{display:none;width:48px;height:48px;align-items:center;justify-content:center;border:1px solid rgba(138,95,42,.4);
  border-radius:2px;background:transparent;cursor:pointer;position:relative;z-index:110;
  padding:0;transition:border-color .25s ease,transform .25s ease}
.burger:hover{border-color:var(--goldtext)}
.burger span{position:absolute;left:13px;width:22px;height:1.6px;background:var(--text);
  border-radius:2px;transition:transform .42s cubic-bezier(.6,-.4,.3,1.4),opacity .2s ease,width .3s ease}
.burger span:nth-child(1){top:17px}
.burger span:nth-child(2){top:23px;width:16px}
.burger span:nth-child(3){top:29px;width:19px}
.burger[aria-expanded="true"] span,#menue-auf:checked ~ .kopf .burger span{background:var(--goldtext);width:22px}
.burger[aria-expanded="true"] span:nth-child(1),#menue-auf:checked ~ .kopf .burger span:nth-child(1){transform:translateY(6px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2),#menue-auf:checked ~ .kopf .burger span:nth-child(2){opacity:0;transform:scaleX(0)}
.burger[aria-expanded="true"] span:nth-child(3),#menue-auf:checked ~ .kopf .burger span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
.menue{position:fixed;inset:0;z-index:100;background:linear-gradient(165deg,#FFFBF6,#F5E3CC);
  display:flex;flex-direction:column;justify-content:center;padding:80px 22px 40px;
  overflow-y:auto;max-width:100vw;
  opacity:0;visibility:hidden;transition:opacity .38s ease,visibility .38s ease}
.menue[data-offen="ja"],#menue-auf:checked ~ .menue{opacity:1;visibility:visible}
.menue::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(ellipse at 70% 12%,rgba(212,175,55,.18),transparent 58%)}
/* Sitzt oben rechts im Menue, ueber allem, und ist von Anfang an sichtbar —
   nicht eingeblendet wie die Eintraege darunter: Wer ein Menue aus Versehen oeffnet,
   sucht den Ausgang sofort und nicht nach 400 ms. */
.menue-zu{position:absolute;top:max(16px,env(safe-area-inset-top));right:16px;z-index:3;
  display:inline-flex;align-items:center;gap:9px;min-height:48px;padding:0 16px 0 13px;
  border:1px solid rgba(138,95,42,.4);border-radius:2px;background:rgba(255,251,246,.6);
  color:var(--goldtext);cursor:pointer;
  font:600 13px/1 var(--sans);letter-spacing:.14em;text-transform:uppercase;
  transition:border-color .2s ease,background .2s ease,color .2s ease}
.menue-zu:hover{border-color:var(--goldtext);background:rgba(224,184,120,.25);color:var(--text)}
.menue-zu .ic{transition:transform .3s var(--weich)}
.menue-zu:hover .ic{transform:rotate(90deg)}
@media (max-width:420px){.menue-zu span{position:absolute;width:1px;height:1px;padding:0;
  margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
  .menue-zu{padding:0;width:48px;justify-content:center}}

.menue-liste{list-style:none;margin:0;padding:0;position:relative;z-index:1;min-width:0;max-width:100%}
.menue-liste li{border-bottom:1px solid rgba(192,146,95,.35);
  opacity:0;transform:translateX(-22px);
  transition:opacity .45s ease,transform .5s cubic-bezier(.22,.7,.3,1)}
.menue[data-offen="ja"] .menue-liste li,#menue-auf:checked ~ .menue .menue-liste li{opacity:1;transform:none}
/* ⚠️ Zaehlt NICHT von Hand mit: die Verzoegerungen standen bis nth-child(6), das Menue
   hat acht Punkte — „Aussteller werden" und „Presse" blendeten sich ohne Verzoegerung
   ein, also VOR dem ersten Eintrag (gemessen 18.09.2026). */
.menue-liste li{transition-delay:calc(.04s + var(--i,0) * .06s)}
.menue-liste a{display:flex;align-items:baseline;gap:14px;padding:18px 0;text-decoration:none;
  font:700 clamp(23px,6.2vw,36px)/1.15 var(--serif);color:var(--text);transition:color .25s ease;
  min-width:0;flex-wrap:wrap}
.menue-liste a:hover,.menue-liste a[aria-current="page"]{color:var(--goldtext)}
.menue-liste i{font:600 12px/1 var(--sans);font-style:normal;letter-spacing:.18em;color:var(--goldtext)}
.menue-fuss{margin-top:34px;position:relative;z-index:1;min-width:0;max-width:100%;
  opacity:0;transform:translateY(14px);transition:opacity .5s ease .46s,transform .5s ease .46s}
.menue[data-offen="ja"] .menue-fuss,#menue-auf:checked ~ .menue .menue-fuss{opacity:1;transform:none}
body[data-menue="offen"]{overflow:hidden}
@media (max-width:900px){.nav{display:none}.tel{display:none}.burger{display:flex}}

/* ---------- Bewegung: NUR mit JS, sonst ist alles sichtbar ---------- */
/* Die Kurve trug vorher 90 % des Weges in den ersten 49 % der Zeit — deklariert
   waren 800 ms, gefuehlt waren es 420. Jetzt: weicher Anlauf, Spitze erst bei 290 ms.
   Deckkraft ist von der Bewegung entkoppelt, damit Text frueher lesbar ist. */
.js .rv{opacity:0;
  transition:opacity 900ms cubic-bezier(.4,0,.4,1) calc(var(--i,0) * var(--takt)),
             transform var(--szenisch) var(--weich) calc(var(--i,0) * var(--takt))}
.js .rv-auf{transform:translateY(var(--weg))}
.js .rv-links{transform:translateX(calc(var(--weg) * -1.3))}
.js .rv-rechts{transform:translateX(calc(var(--weg) * 1.3))}
.js .rv-gross{transform:scale(.965)}
.js .rv.da{opacity:1;transform:none}
/* Was nach einer Panne nachtraeglich sichtbar gemacht wird, bewegt sich NICHT —
   eine Bewegung, die niemand sieht, ist keine Choreografie, sondern ein Zucken. */
.js .rv.da-sofort{opacity:1;transform:none;transition:none}
/* Nachlaufen: Kicker, Ueberschrift, Text und Knopfreihe kommen versetzt an,
   statt als ein geschobener Kasten. */
.js .rv-folge > *{opacity:0;transform:translateY(28px);
  transition:opacity 820ms cubic-bezier(.4,0,.4,1),transform 1060ms var(--weich)}
.js .rv-folge > *:nth-child(1){transition-delay:0ms}
.js .rv-folge > *:nth-child(2){transition-delay:120ms;transform:translateY(46px)}
.js .rv-folge > *:nth-child(3){transition-delay:260ms;transform:translateY(34px)}
.js .rv-folge > *:nth-child(4){transition-delay:400ms;transform:translateY(26px)}
.js .rv-folge.da > *{opacity:1;transform:none}
/* Auf dem Handy ist ein Element nur halb so lange im Bild (ein Wisch legt rund
   2000 px/s zurueck) — kuerzerer Weg, kuerzere Dauer, engere Staffelung. */
@media (max-width:760px){
  :root{--weg:30px;--szenisch:880ms;--takt:115ms}
  .js .rv-links,.js .rv-rechts{transform:translateY(var(--weg))}
  .js .rv-gross{transform:scale(1.03)}
}
.js .strich{transform:scaleX(0);transform-origin:left;transition:transform .9s cubic-bezier(.22,.7,.3,1)}
.js .strich.da{transform:scaleX(1)}
/* ⚠️ Der Universalselektor trifft KEINE Pseudoelemente. Vorher lief die
   Hero-Bewegung (.hero::before/::after) unter "Bewegung reduzieren" munter weiter —
   im Browser nachgemessen: zwei laufende Animationen. */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto!important}
  *,*::before,*::after{
    animation:none!important;
    transition-duration:.01ms!important;
    transition-delay:0s!important}
  .js .rv,.js .strich,.js .rv-folge > *{opacity:1!important;transform:none!important}
  .js .ton::before{opacity:1!important}
}

/* ---------- Abschnitte ---------- */
.abschnitt{position:relative;padding:94px 0}
/* Der Inhalt steht ueber dem Funkenfeld — sonst glitzert es auf den weissen Karten und
   sieht dort aus wie ein Ladezeichen (gemessen 18.09.2026). */
.abschnitt > .wrap,.welt > .wrap,.plan > .wrap,.seitenkopf > .wrap{position:relative;z-index:2}
.abschnitt.schmal{padding:64px 0}
/* Getoenter Abschnitt (seit 17.09.2026, Kundenrunde 5: "kein dunkler Hintergrund").
   Der Ton liegt INNERHALB des Abschnitts als Verlauf und laeuft oben wie unten in den
   Seitengrund aus. Damit gibt es an keiner Abschnittsgrenze eine Kante — der Uebergang
   braucht kein eigenes Band mehr, und die Lichterkette ist Geschichte. */
.ton{position:relative;isolation:isolate;overflow:hidden;background:var(--creme)}
/* Der Ton liegt auf einer eigenen Lage und kommt mit dem Abschnitt ins Bild: so
   "fliesst" ein Abschnitt in den naechsten, statt fertig dazustehen (Kundenrunde 5b,
   17.09.2026: "nicht alles hat einen fluessigen Uebergang zur naechsten Sektion").
   Ohne JavaScript steht der Ton sofort — die Versteckregel haengt an .js. */
.ton::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(180deg,var(--creme) 0%,var(--ton,var(--creme2)) 16%,
             var(--ton,var(--creme2)) 84%,var(--creme) 100%);
  transition:opacity 1400ms var(--weich)}
.js .ton:not(.da)::before{opacity:0}
.js .ton.da-sofort::before{transition:none}
.kopfblock{max-width:62ch;margin:0 auto 50px;text-align:center}
.kopfblock.links{margin-left:0;text-align:left}
.kopfblock h2{font-size:clamp(30px,4vw,46px);margin:14px 0 14px}
.kopfblock p{color:#4A3B31}
.regel{height:1px;background:linear-gradient(90deg,var(--gold),transparent);border:0;margin:26px 0}

/* ---------- Hero ---------- */
.hero{background:linear-gradient(180deg,var(--papier) 0%,var(--creme) 58%,var(--creme2) 100%);
  padding:76px 0 82px;position:relative;overflow:hidden;text-align:center}
.hero::before,.hero::after{content:"";position:absolute;width:580px;height:580px;border-radius:50%;
  background:radial-gradient(circle,rgba(212,175,55,.15),transparent 68%);pointer-events:none;
  animation:schweben 14s ease-in-out infinite alternate}
.hero::before{top:-240px;left:-190px}
.hero::after{bottom:-290px;right:-210px;animation-delay:-7s}
@keyframes schweben{to{transform:translate3d(26px,20px,0) scale(1.06)}}
.hero .wrap{position:relative}
.hero-logo{width:100%;max-width:720px;margin:0 auto 26px;mix-blend-mode:multiply}
.hero h1{font-size:clamp(38px,6.2vw,72px);margin:0 0 18px}
.hero h1 em{font-style:normal;display:block;color:var(--gold)}
.hero .unter{max-width:56ch;margin:0 auto 32px;font-size:clamp(17px,1.9vw,20px);color:#4A3B31}
.tun{display:flex;gap:18px;justify-content:center;align-items:center;flex-wrap:wrap}
.hero .vertrauen{margin-top:28px;font:400 14.5px/1.7 var(--sans);color:var(--leise)}

/* ---------- Status-Karte ---------- */
.status{max-width:620px;margin:44px auto 0;background:var(--papier);
  border:1px solid rgba(192,146,95,.45);border-radius:3px;padding:24px 28px 26px;
  box-shadow:0 14px 40px rgba(80,52,28,.07);text-align:left}
.status-kopf{display:flex;align-items:center;gap:11px;padding-bottom:14px;
  border-bottom:1px solid rgba(192,146,95,.3);margin-bottom:4px}
.punkt{width:10px;height:10px;border-radius:50%;background:#2E8B57;
  box-shadow:0 0 0 4px rgba(46,139,87,.18);flex:0 0 auto;animation:puls 2.6s ease-in-out infinite}
@keyframes puls{0%,100%{box-shadow:0 0 0 4px rgba(46,139,87,.18)}50%{box-shadow:0 0 0 7px rgba(46,139,87,.06)}}
.status-kopf b{font:700 19px/1.2 var(--serif)}
.status-kopf span{margin-left:auto;font:600 12.5px/1 var(--sans);color:var(--rot);
  letter-spacing:.1em;text-transform:uppercase}
.zeile{display:flex;gap:16px;align-items:baseline;padding:12px 0;
  border-bottom:1px solid rgba(192,146,95,.18);font-size:16px}
.zeile:last-child{border-bottom:0;padding-bottom:0}
.zeile time{font:700 16px/1 var(--sans);color:var(--goldtext);min-width:60px;flex:0 0 auto;
  font-variant-numeric:tabular-nums}
.zeile em{font-style:normal;color:#3D3129}

/* ---------- Wochenstreifen ---------- */
.woche{background:var(--nacht2);color:var(--texthell);padding:30px 0 34px}
.woche-in{display:flex;gap:10px;overflow-x:auto;padding:4px 2px;scrollbar-width:thin;
  scroll-snap-type:x proximity}
.tag{flex:0 0 auto;min-width:132px;background:rgba(255,251,246,.04);scroll-snap-align:start;
  border:1px solid rgba(224,184,120,.2);border-radius:3px;padding:15px 17px;
  transition:border-color .25s ease,background .25s ease,transform .25s ease}
.tag:hover{border-color:rgba(224,184,120,.55);background:rgba(255,251,246,.07);transform:translateY(-3px)}
.tag.heute{border-color:var(--goldmetall);background:rgba(212,175,55,.1)}
.tag b{display:block;font:700 15px/1.2 var(--serif);color:#fff}
.tag small{display:block;font:400 13px/1.5 var(--sans);color:rgba(243,231,218,.62);margin-top:5px}
.tag span{display:block;margin-top:9px;font:600 12.5px/1.4 var(--sans);color:var(--goldhell)}

/* ---------- Welt-Bänder ---------- */
/* Zwei Welten, zwei helle Tinten: warm am Brunnen, kuehl an der Weltzeituhr. Beide
   liegen als .ton auf dem Cremegrund und laufen in ihn aus — unterscheidbar, ohne Kante. */
.welt{position:relative;color:var(--text);padding:92px 0;overflow:hidden}
.welt-trad{--ton:var(--warm)}
.welt-urban{--ton:var(--kuehl)}
/* Der Schein wird vor beiden Raendern ausgeblendet — sonst steht er als Kante an der
   Oberkante des Abschnitts (gemessen 17.09.2026: 45 von 60 Spalten springen um 14 Stufen).
   Dieselbe Lehre wie bei den alten Uebergangsbaendern: Zierde muss VOR dem Rand bei null sein. */
.welt::after{content:"";position:absolute;inset:0;pointer-events:none;
  -webkit-mask:linear-gradient(180deg,transparent 0%,#000 22%,#000 78%,transparent 100%);
          mask:linear-gradient(180deg,transparent 0%,#000 22%,#000 78%,transparent 100%);
  background:radial-gradient(ellipse at 78% 18%,rgba(212,175,55,.2),transparent 56%)}
.welt-urban::after{background:radial-gradient(ellipse at 22% 18%,rgba(94,123,149,.14),transparent 56%)}
.welt .wrap{position:relative;z-index:1}
.welt-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:60px;align-items:center}
.welt-urban .welt-grid{grid-template-columns:minmax(0,1.05fr) minmax(0,1fr)}
.welt-urban .welt-wort{order:2}
.welt h2{font-size:clamp(32px,4.4vw,52px);margin:14px 0 18px;color:var(--text)}
.welt p{color:#4A3B31;font-size:17px;max-width:46ch}
.welt ul{list-style:none;margin:26px 0 30px;padding:0}
.welt li{padding:14px 0 14px 32px;position:relative;border-top:1px solid rgba(138,95,42,.22);
  font-size:16.5px;transition:padding-left .25s ease,color .25s ease}
/* Vorher content:"✦" — gezeichnet von Zapf Dingbats, einer fremden Systemschrift.
   Jetzt eine Maske aus eigenem SVG: erbt die Farbe, skaliert sauber, kein Schriftzufall. */
.welt li::before{content:"";position:absolute;left:0;top:15px;width:13px;height:13px;
  background:var(--goldmetall);transition:transform .35s ease;
  -webkit-mask:var(--stern-maske) center/contain no-repeat;
          mask:var(--stern-maske) center/contain no-repeat}
.welt-urban li::before{background:var(--schiefer)}
.welt li:hover{padding-left:38px;color:var(--goldtext)}
.welt li:hover::before{transform:rotate(90deg) scale(1.15)}
.welt-bild{position:relative;aspect-ratio:4/3;border:1px solid rgba(224,184,120,.24);border-radius:3px;
  display:flex;align-items:center;justify-content:center;overflow:hidden;
  background:radial-gradient(ellipse at 50% 60%,rgba(212,175,55,.1),transparent 62%)}
.welt-urban .welt-bild{border-color:rgba(159,182,204,.26);
  background:radial-gradient(ellipse at 50% 60%,rgba(159,182,204,.1),transparent 62%)}
.welt-bild svg{width:74%}
.welt-bild .bildnote{position:absolute;bottom:14px;left:0;right:0;text-align:center;
  font:600 11px/1 var(--sans);letter-spacing:.2em;text-transform:uppercase;color:rgba(243,231,218,.42)}
@media (max-width:900px){
  .welt-grid,.welt-urban .welt-grid{grid-template-columns:minmax(0,1fr);gap:34px}
  .welt-urban .welt-wort{order:0}.welt{padding:62px 0}}
.naht{margin:0;background:linear-gradient(180deg,var(--creme),var(--creme2) 35%,var(--creme2) 65%,var(--creme));
  color:var(--goldtext);text-align:center;padding:34px 24px;
  font:400 clamp(17px,2.1vw,23px)/1.5 var(--serif)}

/* ---------- Plan ---------- */
.plan{position:relative;isolation:isolate;overflow:hidden;color:var(--text);padding:86px 0}
.plan figure{margin:0;background:var(--papier);border:1px solid rgba(192,146,95,.3);border-radius:3px;
  padding:clamp(10px,2vw,22px) clamp(10px,2vw,22px) 18px}
.plan svg{width:100%}
.plan figcaption{text-align:center;font:400 13.5px/1.6 var(--sans);color:var(--leise);
  margin-top:16px;padding:0 24px}
/* Die Hervorhebung haengt nicht mehr allein am Mauszeiger: sie greift auch bei
   Tastaturfokus und bei Fingertipp (Klasse .aktiv aus seite.js). */
/* Kein Hand-Zeiger: die Zonen heben sich hervor, sie fuehren nirgendwohin. */
.zone{transition:opacity .35s ease}
.zone-flaeche{transition:filter .35s ease}
/* ⚠️ Am SVG haengt das Dimmen falsch: der Zeiger im Leerraum (rund die Haelfte der
   Flaeche) blendete beide Welten aus. Es haengt an den Zonen selbst. */
.plan-szene:has(.zone:hover) .zone,.plan-szene:has(.zone:focus-visible) .zone,svg.hat-aktiv .zone{opacity:.42}
.plan-szene .zone:hover,.plan-szene .zone:focus-visible,.plan-szene .zone.aktiv{opacity:1}
.plan-szene .zone:hover .zone-flaeche,.plan-szene .zone.aktiv .zone-flaeche,
.plan-szene .zone:focus-visible .zone-flaeche{filter:saturate(1.6) brightness(.965)}
.zone:focus-visible .zone-rahmen{stroke-width:2.6}
.zone:focus-visible{outline:none}
.js .plan-an .zeichnen{stroke-dasharray:var(--len,1400);stroke-dashoffset:var(--len,1400);
  animation:zeichnen 1.5s cubic-bezier(.3,.7,.3,1) forwards}
.js .plan-an .zeichnen-2{animation-delay:.35s}
.js .plan-an .auf{opacity:0;animation:aufblenden .6s ease forwards}
.js .plan-an .st-1{animation-delay:.7s}.js .plan-an .st-2{animation-delay:.85s}
.js .plan-an .st-3{animation-delay:1s}.js .plan-an .st-4{animation-delay:1.15s}
.js .plan-an .st-5{animation-delay:1.3s}
@keyframes zeichnen{to{stroke-dashoffset:0}}
@keyframes aufblenden{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.js .gasse{stroke-dasharray:5 7;animation:wandern 3.2s linear infinite}
@keyframes wandern{to{stroke-dashoffset:-24}}
.js .brunnen-puls{transform-box:fill-box;transform-origin:center;animation:atmen 4.2s ease-in-out infinite}
/* ---- Die gezeichnete Szene (17.09.2026, statt des Schemas) ----
   Zwei Fassungen im HTML, eine sichtbar: breit am Schreibtisch, schmal auf dem Handy —
   eine Zeichnung, die auf 360 px schrumpft, hat 5-px-Beschriftungen. */
.plan svg text{font-family:var(--sans)}
.plan-szene.schmal{display:none}
@media (max-width:640px){.plan-szene.breit{display:none}.plan-szene.schmal{display:block}}
.js .plan-an .weg{stroke-dasharray:var(--len,2000);stroke-dashoffset:var(--len,2000);
  animation:zeichnen 2.4s cubic-bezier(.3,.7,.3,1) .2s forwards}
.js .plan-szene .weg{stroke-dashoffset:var(--len,2000);stroke-dasharray:var(--len,2000)}
/* Erscheinen NUR ueber die Deckkraft: eine Keyframe-Regel mit transform:none loescht das
   transform-ATTRIBUT einer SVG-Gruppe — mit .auf lagen alle Stationen bei (0,0)
   (gemessen 17.09.2026, Kaputtmachung durch Kopieren der alten Klasse). */
.js .plan-an .erscheint{opacity:0;animation:erscheinen .7s ease forwards}
@keyframes erscheinen{from{opacity:0}to{opacity:1}}
.fenster{animation:fensterGlimmt 3.6s ease-in-out infinite;animation-delay:var(--v,0s)}
@keyframes fensterGlimmt{0%,100%{opacity:.55}50%{opacity:1}}
.lampe{animation:lampeAn 2.8s ease-in-out infinite;animation-delay:var(--v,0s)}
@keyframes lampeAn{0%,100%{opacity:.4}50%{opacity:1}}
.dampf{animation:dampfen 3.4s ease-in-out infinite;animation-delay:var(--v,0s)}
@keyframes dampfen{0%{opacity:0;transform:translateY(5px)}35%{opacity:.75}100%{opacity:0;transform:translateY(-12px)}}
.flocke{animation:flockeFaellt var(--d,9s) linear infinite;animation-delay:var(--v,0s)}
@keyframes flockeFaellt{0%{opacity:0;transform:translateY(-14px)}18%{opacity:.9}78%{opacity:.7}100%{opacity:0;transform:translateY(46px)}}
.laeufer{filter:drop-shadow(0 0 5px rgba(212,175,55,.85))}
.plan .station text{paint-order:stroke;stroke:#FFFBF6;stroke-width:3px;stroke-linejoin:round}
@media (prefers-reduced-motion:reduce){.laeufer{display:none}.js .plan-szene .weg{stroke-dashoffset:0}}
@keyframes atmen{0%,100%{opacity:.35;transform:scale(1)}50%{opacity:.85;transform:scale(1.09)}}

/* ---------- Karten ---------- */
.karten{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:26px}
.karten.zwei{grid-template-columns:repeat(2,minmax(0,1fr))}
.karte{background:var(--papier);border:1px solid rgba(192,146,95,.3);border-radius:3px;
  padding:34px 28px 30px;display:flex;flex-direction:column;text-decoration:none;color:inherit;
  transition:transform .3s cubic-bezier(.22,.7,.3,1),box-shadow .3s ease,border-color .3s ease}
.karte:hover{transform:translateY(-6px);border-color:rgba(192,146,95,.65);
  box-shadow:0 18px 44px rgba(80,52,28,.12)}
.karte .num{font:700 13px/1 var(--sans);letter-spacing:.2em;color:var(--goldtext)}
.karte h3{font-size:24px;margin:14px 0 12px}
.karte p{font-size:16px;color:#4A3B31;margin-bottom:18px}
.karte-fuss{margin-top:auto;font:600 13.5px/1.4 var(--sans);color:var(--rot);letter-spacing:.03em}
@media (max-width:880px){.karten,.karten.zwei{grid-template-columns:minmax(0,1fr)}.abschnitt{padding:64px 0}}

/* ---------- Fakten: siehe Abschnitt NEUE BAUSTEINE weiter unten.
   Der alte Block stand hier und setzte background:var(--papier) — die neue Regel
   erwaehnt den Hintergrund nicht, also gewann der alte Wert und das Faktenband
   im dunklen Hero wurde cremefarben: Creme-Text auf Creme-Grund. Entfernt statt
   ueberschrieben — zwei Regeln fuer dasselbe Bauteil sind die Ursache, nicht die
   fehlende Ueberschreibung (13.09.2026). */

/* ---------- Stationen (Rundgang) ---------- */
.station{display:grid;grid-template-columns:96px 1fr;gap:30px;position:relative;padding-bottom:46px}
.station::before{content:"";position:absolute;left:47px;top:64px;bottom:0;width:1px;
  background:linear-gradient(180deg,var(--gold),rgba(192,146,95,.12))}
.station:last-child::before{display:none}
.station-num{width:96px;height:96px;border-radius:50%;border:1px solid rgba(192,146,95,.5);
  display:flex;align-items:center;justify-content:center;background:var(--papier);
  font:700 30px/1 var(--serif);color:var(--goldtext);position:relative;z-index:1;
  transition:transform .35s ease,border-color .35s ease}
.station:hover .station-num{transform:scale(1.06);border-color:var(--goldmetall)}
.station-text{padding-top:8px}
.station-text h3{font-size:clamp(23px,2.7vw,31px);margin:8px 0 12px}
.station-text p{color:#4A3B31;max-width:62ch;font-size:16.5px}
.station-text .detail{display:inline-block;margin-top:4px;font:600 14px/1.5 var(--sans);color:var(--rot)}
@media (max-width:700px){.station{grid-template-columns:60px 1fr;gap:18px}
  .station-num{width:60px;height:60px;font-size:21px}.station::before{left:29px;top:42px}}

/* ---------- FAQ ---------- */
.faq{border-top:1px solid rgba(192,146,95,.3)}
.faq details{border-bottom:1px solid rgba(192,146,95,.3)}
.faq summary{cursor:pointer;list-style:none;padding:22px 44px 22px 0;position:relative;
  font:700 19px/1.4 var(--serif);transition:color .2s ease}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";position:absolute;right:6px;top:26px;width:20px;height:20px;
  background:var(--goldtext);transition:transform var(--mittel) var(--weich);
  -webkit-mask:var(--winkel-maske) center/contain no-repeat;
          mask:var(--winkel-maske) center/contain no-repeat}
.faq details[open] summary::after{transform:rotate(180deg)}
.faq summary:hover{color:var(--rot)}
.faq-antwort{padding:0 44px 22px 0;color:#4A3B31}

/* ---------- Formular ---------- */
.formular{display:grid;gap:18px;max-width:640px}
.feld{display:grid;gap:7px}
.feld label{font:600 14px/1 var(--sans);letter-spacing:.02em}
.feld input,.feld textarea{font:400 16.5px/1.5 var(--sans);color:var(--text);
  background:var(--papier);border:1px solid rgba(192,146,95,.5);border-radius:2px;
  padding:14px 16px;min-height:52px;transition:border-color .2s ease,box-shadow .2s ease}
.feld textarea{min-height:150px;resize:vertical}
/* ⚠️ KEIN outline:none. Der Hausrahmen (:focus-visible, Zeile 71) ist die einzige
   Rueckmeldung fuer Tastaturbedienung; er stand ausgerechnet im Formular aus. */
.feld input:focus,.feld textarea:focus{border-color:var(--goldmetall);
  box-shadow:0 0 0 3px rgba(212,175,55,.18)}
.feld .hinweis{font:400 13.5px/1.5 var(--sans);color:var(--leise)}
.honig{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-note{font:400 14px/1.6 var(--sans);color:var(--leise);max-width:56ch}
.form-meldung{padding:16px 18px;border-radius:2px;font:600 15px/1.5 var(--sans);display:none}
.form-meldung[data-art="ok"]{display:block;background:rgba(46,139,87,.12);
  border:1px solid rgba(46,139,87,.45);color:#1F6B43}
.form-meldung[data-art="fehler"]{display:block;background:rgba(143,50,28,.1);
  border:1px solid rgba(143,50,28,.45);color:var(--rot)}

/* ---------- Karten-Fassade (Zwei Klicks) ---------- */
.karte-fassade{position:relative;border:1px solid rgba(192,146,95,.4);border-radius:3px;
  background:var(--creme2);min-height:340px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;text-align:center;padding:36px 28px;gap:14px}
.karte-fassade h3{font-size:22px}
.karte-fassade p{max-width:46ch;color:#4A3B31;font-size:15.5px;margin:0}
.karte-fassade iframe{position:absolute;inset:0;width:100%;height:100%;border:0}

/* ---------- Einwilligungs-Banner ---------- */
.einwilligung{position:fixed;left:16px;right:16px;bottom:16px;z-index:90;max-width:430px;
  background:var(--papier);border:1px solid rgba(192,146,95,.55);border-radius:3px;
  padding:18px 20px;font-size:14px;box-shadow:0 22px 60px rgba(40,25,12,.28);
  transform:translateY(130%);transition:transform .5s cubic-bezier(.22,.7,.3,1)}
.einwilligung[data-sichtbar="ja"]{transform:none}
.einwilligung h2{font-size:20px;margin-bottom:10px}
.einwilligung p{font-size:14px;line-height:1.55;color:#4A3B31;margin-bottom:7px}
.einwilligung .knoepfe{display:flex;gap:12px;margin-top:16px;flex-wrap:wrap}
.einwilligung .btn{flex:1 1 150px;min-height:48px;font-size:15px;padding:0 18px;min-width:0}
.einwilligung .btn-gleich{background:transparent;color:var(--text);border-color:rgba(192,146,95,.6)}
.einwilligung .btn-gleich:hover{border-color:var(--rot);color:var(--rot);transform:translateY(-2px)}
.einwilligung .mehr{font:400 13px/1.5 var(--sans);color:var(--leise);margin-top:12px}
.einwilligung .mehr a{color:var(--rot)}
@media (min-width:700px){.einwilligung{left:24px;right:auto;bottom:24px}}

/* ---------- Fuß ---------- */
/* Der Fuss beginnt im Seitengrund und wird nach unten leise waermer — keine Kante. */
.fusszeile{background:linear-gradient(180deg,var(--creme) 0,var(--creme2) 150px);color:var(--text);padding:100px 0 34px}
.fuss-grid{display:grid;grid-template-columns:minmax(0,1.4fr) repeat(3,minmax(0,1fr));gap:40px}
.fusszeile h3{font-size:19px;color:var(--goldtext);margin-bottom:14px}
.fusszeile a{color:var(--text);text-decoration:none;opacity:.9;display:inline-block;padding:6px 0}
.fusszeile a:hover{opacity:1;color:var(--goldtext);text-decoration:underline}
.fusszeile ul{list-style:none;margin:0;padding:0;font-size:15px}
.fusszeile p{color:#4A3B31;font-size:15px}
.fuss-unten{margin-top:46px;padding-top:22px;border-top:1px solid rgba(138,95,42,.25);
  display:flex;flex-wrap:wrap;gap:8px 26px;font-size:13.5px;opacity:.72}
@media (max-width:1000px){.fuss-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:34px}}
@media (max-width:620px){.fuss-grid{grid-template-columns:1fr;gap:28px}}

/* ---------- Rechtstext-Seiten ---------- */
.rechtstext{max-width:760px}
.rechtstext h2{font-size:26px;margin:40px 0 12px}
.rechtstext h3{font-size:19px;margin:26px 0 8px}
.rechtstext p,.rechtstext li{font-size:16.5px;color:#3D3129}
.rechtstext ul{padding-left:22px}
.lueckenhinweis{background:rgba(143,50,28,.08);border-left:3px solid var(--rot);
  padding:16px 20px;margin:0 0 30px;font-size:15px}

/* ============================================================================
   NEUE BAUSTEINE — Held mit Bild, Faktenband, Bildkarten, Weiter-Wege, Listen.
   ============================================================================ */

/* ---- Icons: erben die Textfarbe, schrumpfen nie ---- */
/* ⚠️ display:inline-block ist PFLICHT, nicht Kosmetik: img,svg{display:block} (Zeile 61,
   gegen die Zeilenluecke unter Bildern) warf jedes Inline-Icon auf eine eigene Zeile —
   gemessen 18.09.2026 an 27 Stellen auf allen zehn Seiten. In Flex-Behaeltern
   (.fakt, .mitIcon li, Knoepfe) ist der Wert ohnehin wirkungslos. */
.ic{flex:0 0 auto;vertical-align:-.18em;display:inline-block}
a .ic,button .ic,li .ic,dt .ic{pointer-events:none}

/* ---- Held: Bild, Wortmarke, Fakten — alles ueber der Falzkante ---- */
/* ⚠️ HIER WIRD NICHTS EINGEBLENDET. Was oberhalb der Falz steht, muss sofort da sein:
   vorher startete das groesste Element mit opacity:0 und der Browser mass den LCP
   erst bei 1416 ms statt bei 250 ms. Die reiche Bewegung beginnt ab dem zweiten Abschnitt. */
.held{position:relative;color:var(--texthell);isolation:isolate;overflow:hidden;
  padding:clamp(56px,9vw,104px) 0 0;background:var(--creme)}
.held-bild{position:absolute;inset:0;z-index:-2}
.held-bild img{width:100%;height:100%;object-fit:cover;object-position:50% 42%}
/* Zwei Lagen ueber dem Bild: oben die Abdunklung fuer den Text, unten der Uebergang ins
   Papier. Das Bild LOEST SICH im Seitengrund auf — es gibt keine Kante, an der der Grund
   wechselt (Kundenrunde 17.09.2026: "fluessig und stimmig"). Beide Lagen sind in Pixeln
   gesetzt, damit der Text nie in die Aufloesungszone rutscht: der Inhalt endet mindestens
   210 px ueber dem Rand, die Aufloesung beginnt 250 px darueber mit nahezu null Deckung. */
.held::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:
    linear-gradient(180deg,rgba(254,243,230,0) calc(100% - 250px),rgba(254,243,230,.55) calc(100% - 120px),var(--creme) 100%),
    linear-gradient(180deg,rgba(12,9,8,.70) 0%,rgba(12,9,8,.42) 34%,rgba(12,9,8,.56) 60%,rgba(12,9,8,0) calc(100% - 110px))}
.held-inhalt{position:relative;text-align:center;padding-bottom:clamp(210px,24vw,300px)}
.held-wortmarke{width:min(720px,88%);margin:0 auto clamp(20px,3vw,32px);
  filter:drop-shadow(0 8px 30px rgba(0,0,0,.55))}
.held-claim{font:700 clamp(28px,4.6vw,54px)/1.12 var(--serif);color:#fff;margin:0 0 16px;
  letter-spacing:-.01em;text-shadow:0 3px 24px rgba(0,0,0,.5)}
.held-claim em{font-style:normal;color:var(--goldhell);display:block}
.held-unter{max-width:54ch;margin:0 auto 30px;font-size:clamp(16.5px,1.8vw,19px);
  color:rgba(243,231,218,.9);text-shadow:0 2px 14px rgba(0,0,0,.6)}
/* Die Zeile liegt auf dem hellsten Teil des Fotos (gemessen 18.09.2026: bis 2,29:1).
   Ein Schatten ist keine Deckung — sie bekommt einen eigenen, halbdurchsichtigen Traeger. */
.held .vertrauen{margin-top:24px;font:400 14px/1.9 var(--sans);color:#F6EEE2;
  background:rgba(12,9,8,.55);border-radius:3px;padding:8px 14px;width:fit-content;margin-inline:auto;
  text-shadow:0 2px 12px rgba(0,0,0,.7);
  display:flex;gap:6px;justify-content:center;flex-wrap:wrap;align-items:center}
.held .vertrauen .ic{color:var(--goldmetall)}
/* Das Faktenband ist eine Papierkarte, die in das auslaufende Bild hineinragt — Papier
   auf dem Foto, nicht ein zweiter dunkler Grund. Es steht NACH dem Helden im Fluss. */
.held-fakten{position:relative;z-index:2;margin:-130px 0 0}
.held-fakten .fakten{margin-top:0;box-shadow:0 26px 60px -30px rgba(80,52,28,.5)}
@media (max-width:760px){.held-bild img{object-position:50% 46%}}

/* ---- Faktenband ---- */
.fakten{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;margin:0}
.fakt{display:flex;gap:13px;align-items:flex-start;padding:24px 22px;background:transparent;
  border-right:1px solid rgba(224,184,120,.16)}
.fakt:last-child{border-right:0}
.fakt .ic{color:var(--goldmetall);margin-top:2px}
.fakt dt{font:600 11.5px/1 var(--sans);letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold);margin-bottom:7px}
.fakten.klein .fakt dt{color:var(--goldtext)}
.fakt dd{margin:0;font:700 17.5px/1.3 var(--serif);color:var(--texthell)}
.fakt small{display:block;margin-top:5px;font:400 13px/1.5 var(--sans);color:rgba(243,231,218,.6)}
/* Auf hellem Grund (Unterseiten) dreht sich die Farbgebung um */
.fakten.klein{border:1px solid rgba(192,146,95,.32);background:var(--papier);margin-top:34px}
.fakten.klein .fakt{border-right-color:rgba(192,146,95,.24);padding:20px 18px}
.fakten.klein dd{color:var(--text);font-size:16.5px}
.fakten.klein small{color:var(--leise)}
.fakten.klein .fakt .ic{color:var(--goldtext)}
@media (max-width:900px){.fakten{grid-template-columns:repeat(2,minmax(0,1fr))}
  .fakt:nth-child(2n){border-right:0}
  .fakt:nth-child(-n+2){border-bottom:1px solid rgba(224,184,120,.16)}}
@media (max-width:520px){.fakten{grid-template-columns:minmax(0,1fr)}
  .fakt{border-right:0;border-bottom:1px solid rgba(224,184,120,.16)}
  .fakt:last-child{border-bottom:0}}

/* ---- Seitenkopf der Unterseiten ---- */
.seitenkopf{position:relative;background:linear-gradient(180deg,var(--papier),var(--creme) 82%);
  color:var(--text);padding:clamp(48px,7vw,86px) 0 clamp(36px,5vw,58px);overflow:hidden}
.seitenkopf .wrap{position:relative;z-index:2}
.seitenkopf h1{font-size:clamp(32px,5vw,56px);color:var(--text);margin:14px 0 16px}
.seitenkopf p{color:#4A3B31;max-width:62ch}
.seitenkopf .kopfblock{text-align:left;margin:0 0 6px;max-width:64ch}

/* ---- Bildkarten ---- */
.bildkarte{padding:0;overflow:hidden}
.bildkarte .karte-bild{margin:0;border-radius:0;border:0}
.bildkarte .karte-bild::after{box-shadow:inset 0 -90px 80px -60px rgba(14,11,9,.45)}
.karte-text{padding:26px 26px 28px;display:flex;flex-direction:column;flex:1}
.karte-text .num{display:inline-flex;align-items:center;gap:7px;
  font:700 12px/1 var(--sans);letter-spacing:.16em;color:var(--goldtext);text-transform:uppercase}
.karte-text h3{font-size:23px;margin:12px 0 10px}
.karte-text p{font-size:15.8px;color:#4A3B31;margin-bottom:16px}
.karte-text .karte-fuss{display:inline-flex;align-items:center;gap:7px;margin-top:auto}
.karte:hover .karte-fuss .ic{transform:translateX(4px)}
.karte-fuss .ic{transition:transform var(--kurz) var(--weich)}

/* ---- Weiter-Wege am Seitenende ---- */
.weiter{background:transparent}
/* auto-fit statt fester Drei: auf /erleben stehen vier Karten, die sonst 3 + 1 brechen. */
.weiter-karten{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:18px}
.weiter-karte{display:flex;flex-direction:column;gap:9px;padding:26px 24px;text-decoration:none;
  background:var(--papier);border:1px solid rgba(192,146,95,.3);border-radius:3px;color:inherit;
  transition:transform var(--kurz) var(--weich),border-color var(--kurz) ease,box-shadow var(--kurz) ease}
.weiter-karte:hover{transform:translateY(-4px);border-color:var(--goldmetall);
  box-shadow:0 16px 36px -18px rgba(80,52,28,.35)}
.weiter-karte .ic{color:var(--goldtext)}
.weiter-karte b{font:700 19px/1.3 var(--serif)}
.weiter-karte span{font-size:14.6px;color:#4A3B31}
@media (max-width:880px){.weiter-karten{grid-template-columns:minmax(0,1fr)}}

/* ---- Fliesstext ueber einer Liste ----
   Der Barrierefreiheits-Text des Veranstalters steht ueber der Aufzaehlung. Er darf nicht
   wie ein zweiter Vorspann wirken, also etwas kleiner als der Vorspann und mit klarem
   Abstand zur Liste — sonst lesen sich Absatz und erster Listenpunkt als ein Block. */
.barriere-text{margin:22px 0 6px;max-width:66ch}
.barriere-text p{margin:0 0 12px;font-size:16.4px;line-height:1.66}
.barriere-text p:last-child{margin-bottom:0}

/* ---- Listen mit Icon ---- */
.mitIcon{list-style:none;margin:24px 0 28px;padding:0}
/* ⚠️ KEIN display:flex hier. Die Listenpunkte enthalten „<b>Fett.</b> Rest des Satzes" —
   flex macht daraus zwei Spalten, und der Rest wird abgeschnitten (gemessen 18.09.2026
   auf /aussteller und /presse, je vier Zeilen). Grid: erste Spalte Icon, zweite ALLES
   andere, egal aus wie vielen Knoten der Satz besteht. */
.mitIcon li{display:grid;grid-template-columns:auto 1fr;gap:14px;align-items:start;padding:14px 0;
  border-top:1px solid rgba(192,146,95,.22);font-size:16.4px}
.welt .mitIcon li{border-top-color:rgba(138,95,42,.22)}
.mitIcon .ic{color:var(--goldtext);margin-top:2px;transition:transform var(--kurz) var(--weich)}
.welt .mitIcon .ic{color:var(--goldtext)}
.welt-urban .mitIcon .ic{color:var(--schiefer)}
/* Alles ausser dem Icon gehoert in die zweite Spalte — auch wenn ein Satz aus <b>, Text
   und <a> besteht. */
.mitIcon li > :not(.ic){grid-column:2}
.mitIcon li > .ic{grid-column:1;grid-row:1}
/* Zweispaltige Icon-Listen: die Klasse „zwei" stand im Markup, ohne dass es eine Regel gab
   (gemessen 18.09.2026: Zeilen bis 135 Zeichen). */
.mitIcon.zwei{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:40px}
@media (max-width:880px){.mitIcon.zwei{grid-template-columns:minmax(0,1fr)}}
.mitIcon li:hover .ic{transform:scale(1.12) rotate(-6deg)}
/* ---------- Kriterien-Liste (/aussteller „Wen wir suchen") ---------- */
/*
   ⚠️ WARUM EINE EIGENE KLASSE UND NICHT .mitIcon (19.09.2026).
   In .mitIcon liegt jedes Kind des <li> in EINER eigenen Grid-Zelle. Bei Punkten der
   Form „<b>Fett</b> Rest des Satzes" wurden daraus ZWEI Rasterzellen: das <b> landete
   rechts oben in einer schmalen Spalte („Gestaltung, / die zum / Bereich / passt.") und
   der Satz darunter links. Am 18.09.2026 war derselbe Fehler schon einmal repariert
   worden — von display:flex auf grid. Das hat nur das Symptom getauscht (vorher
   abgeschnitten, danach nach rechts gedrueckt), weil beide Verfahren aus Geschwistern
   eigene Kaesten machen. Gesehen hat es niemand, weil die Reparatur an der Frage
   gemessen wurde „wird der Satz noch abgeschnitten?" und nicht am Bild.
   Merksatz: eine Layout-Reparatur ist erst fertig, wenn man sie ANGESEHEN hat.
   Hier liegt deshalb jedes Feld in genau einem Kasten, und die Punkte bekommen die
   Gestaltung, die der Kunde am 19.09. verlangt hat: Haken als Plakette, Titel auf eigener
   Zeile, Text darunter, viel Luft — kein Tabellengitter aus Haarlinien.
*/
.kriterien{list-style:none;margin:34px 0 6px;padding:0;
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:44px;row-gap:34px}
.kriterien li{display:block}
.krit-haken{display:inline-grid;place-items:center;width:36px;height:36px;border-radius:50%;
  background:rgba(192,146,95,.15);border:1px solid rgba(192,146,95,.34);color:var(--goldtext);
  transition:transform var(--kurz) var(--weich),background var(--kurz) var(--weich)}
.kriterien li:hover .krit-haken{transform:scale(1.08);background:rgba(192,146,95,.26)}
.kriterien b{display:block;margin:15px 0 7px;font:600 clamp(18px,1.7vw,20.5px)/1.32 var(--serif);
  color:var(--goldtext);letter-spacing:.005em}
.kriterien p{margin:0;color:#4A3B31;font-size:16.4px;line-height:1.66;max-width:44ch}
/* ⚠️ .textlink IM FLIESSTEXT (19.09.2026). Die Klasse ist als eigenstaendiges Tippziel
   gebaut: display:inline-flex mit min-height:44px. Mitten in einem Satz wird daraus ein
   44 px hoher Kasten — seine Unterkante zeichnet den Strich dann unter die FOLGENDE
   Zeile, sichtbar auf /presse unter „geplantem Erscheinungstermin". Im laufenden Satz
   ist ein Link ein Wort, kein Knopf; die 44-px-Mindestflaeche gilt dort auch nach
   WCAG 2.5.8 nicht (Ausnahme fuer Links im Text). */
.kriterien p .textlink{display:inline;min-height:0;padding:0;font:inherit;
  color:var(--rot);border-bottom-width:1px}
/* ⚠️ `overflow-wrap:anywhere` ist hier kein Schoenheitsmittel (19.09.2026). Seit dem
   Adresswechsel ist die E-Mail ein Wort aus 38 Zeichen; auf 360 px lief es aus dem
   Absatz heraus — gemessen von seiten-messen, nicht gesehen. Eine lange Adresse ist
   ein unbrechbares Wort, und das sprengt jede schmale Spalte. */
/* ---------- Dateiauswahl im Bewerbungsformular ---------- */
/* Der Browser zeichnet den Knopf selbst; wir geben ihm nur den Rahmen der uebrigen
   Felder, damit er nicht wie ein Fremdkoerper wirkt. Keine Attrappe aus <label> und
   verstecktem Input: die verliert die Dateinamen-Anzeige und die Tastaturbedienung. */
.feld input[type="file"]{width:100%;box-sizing:border-box;padding:11px 12px;
  font:400 15.5px/1.5 var(--sans);color:var(--text);background:var(--papier);
  border:1px solid rgba(192,146,95,.42);border-radius:3px}
.feld input[type="file"]::file-selector-button{margin-right:12px;padding:8px 14px;
  font:600 14.5px/1 var(--sans);color:var(--text);background:rgba(192,146,95,.16);
  border:1px solid rgba(192,146,95,.42);border-radius:3px;cursor:pointer}
.feld input[type="file"]::file-selector-button:hover{background:rgba(192,146,95,.28)}
.feld input[type="file"]:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

@media (max-width:880px){
  .kriterien{grid-template-columns:minmax(0,1fr);row-gap:26px;column-gap:0}
  .kriterien p{max-width:none}
}


/* ---- Tagesplan ---- */
.tagesplan{list-style:none;margin:0;padding:0;border:1px solid rgba(192,146,95,.32);
  border-radius:3px;background:var(--papier);overflow:hidden}
.tagesplan li{display:flex;gap:16px;align-items:center;padding:18px 22px;
  border-bottom:1px solid rgba(192,146,95,.2)}
.tagesplan li:last-child{border-bottom:0}
.tagesplan .ic{color:var(--goldtext)}
.tagesplan time{font:700 18px/1 var(--sans);color:var(--rot);min-width:64px;
  font-variant-numeric:tabular-nums}
.tagesplan b{display:block;font:700 17px/1.3 var(--serif)}
.tagesplan small{display:block;margin-top:3px;font-size:13.4px;color:var(--leise)}

/* ---- Takte der Saison ---- */
.takte{list-style:none;margin:0;padding:0;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.takte li{display:flex;gap:17px;align-items:flex-start;padding:24px 24px;
  background:var(--papier);border:1px solid rgba(192,146,95,.3);border-radius:3px}
.takte .ic{color:var(--goldtext);margin-top:3px}
.takte b{display:block;font:700 18px/1.3 var(--serif);color:var(--text);margin-bottom:5px}
.takte span{display:block;font-size:15.6px;color:#4A3B31}
.takte small{display:inline-flex;align-items:center;gap:6px;margin-top:9px;
  font:600 13px/1 var(--sans);color:var(--goldtext)}
@media (max-width:880px){.takte{grid-template-columns:minmax(0,1fr)}}

/* ---- Verkehrsmittel ---- */
.verkehr{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:28px}
.verkehr-karte{display:flex;flex-direction:column;gap:8px;padding:22px 20px;text-align:center;
  align-items:center;background:var(--papier);border:1px solid rgba(192,146,95,.3);border-radius:3px}
.verkehr-karte .ic{color:var(--goldtext)}
.verkehr-karte b{font:700 17px/1.2 var(--serif)}
.verkehr-karte span{font-size:14.4px;color:#4A3B31}
@media (max-width:760px){.verkehr{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ---- Öffnungszeiten ---- */
.zeitenliste{list-style:none;margin:0;padding:0}
.zeitenliste li{display:flex;gap:14px;align-items:center;padding:15px 0;
  border-bottom:1px solid rgba(192,146,95,.22);font-size:16.5px}
.zeitenliste .ic{color:var(--goldtext)}

/* ---- Charity-Band ---- */
/* ⚠️ <figure> bringt aus dem Browser `margin-inline:40px` mit, und `.bild` hat das nie
   zurueckgesetzt. Auf dem Desktop sah das wie eine gewollte Einrueckung aus — auf dem
   Handy addieren sich die 2x40px zum Seitenrand, und das Charity-Bild stand mit 264 von
   390px da (gemessen 20.09.2026, Handy-Pruefung). Eine Einrueckung, die niemand
   entschieden hat, ist keine Gestaltung. Der Wert steht jetzt hier und ist 0. */
.bild{margin:0}

.charity-band{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:52px;align-items:center}
/* Kicker, Ueberschrift, Text und Knopf standen fast ohne Abstand uebereinander: `h1,h2,h3`
   tragen global `margin:0`, und dieser Block ist kein `.kopfblock`, hat also keinen eigenen
   Rhythmus geerbt (Robert, 20.09.2026: „viel zu eng"). Der Abstand steht bewusst HIER und
   nicht an der globalen h2-Regel — die traefe jede Ueberschrift der Seite. */
/* ⚠️ AM BAND, NICHT AN .charity-text (26.09.2026). Die Regeln hingen an der Klasse des
   Textblocks — und das Band auf /ein-herz-fuer-kinder traegt ein nacktes <div>. Robert
   hat den engen Satz am 20.09. gemeldet, behoben wurde er nur dort, wo die Klasse stand;
   auf der Kinderseite klebte die Ueberschrift seitdem weiter am Absatz. Dieselbe Sorte
   Treffer wie bei der Spaltenregel darunter: wer am Klassennamen aufhaengt, verfehlt die
   Seite, die den Fehler hat. Die Werte sind unveraendert, nur der Geltungsbereich. */
.charity-band .kicker{margin-bottom:15px}
.charity-band h2{font-size:clamp(26px,3.2vw,40px);line-height:1.16;margin:0 0 20px}
.charity-band p{margin:0 0 28px;max-width:46ch;line-height:1.74}
/* ⚠️ EIN BAND OHNE BILD IST EINSPALTIG (26.09.2026).
   `repeat(2,…)` ist eine feste Zusage auf zwei Spalten — steht nur ein Kind darin, nimmt
   es Spalte 1 und die zweite bleibt leer. Gemessen am 26.09.: auf /ein-herz-fuer-kinder
   stand der Textblock mit 540 von 1180 px da, 640 px daneben waren nichts. Das war schon
   live, seit dort das Bild fehlt — und waere mit dem Wegfall des Gassenbildes auch auf die
   Startseite gekommen (Robert zu genau diesem Zustand am 20.09.: „sehr gequetscht").
   Die Spaltenzahl wird deshalb am INHALT abgelesen, nicht an einer Zusatzklasse: eine
   Klasse muss man an zwei Stellen mitpflegen und vergisst sie beim dritten Band.
   `> *` statt `.charity-text`, weil das Band auf /ein-herz-fuer-kinder ein nacktes <div>
   traegt — eine Regel am Klassennamen haette genau die Seite verfehlt, die den Fehler
   schon hatte.
   Die Form ist NICHT neu erfunden: ein Textblock allein in einem Abschnitt sieht auf
   dieser Seite aus wie .kopfblock (62ch, mittig, Text zentriert) — so steht es seit dem
   ersten Entwurf im Abschnitt „Zwei Welten". Linksbuendig auf 64ch sah dagegen aus, als
   fehle rechts etwas — was ja auch stimmte, nur soll man es der Seite nicht ansehen. */
.charity-band:not(:has(> figure, > picture, > img)){grid-template-columns:minmax(0,1fr)}
.charity-band:not(:has(> figure, > picture, > img)) > *{max-width:62ch;margin-inline:auto;text-align:center}
.charity-band:not(:has(> figure, > picture, > img)) p{max-width:56ch;margin-inline:auto}
/* Ein Hinweiskasten ist eine Randnotiz, kein Aushang: er behaelt seine linke Kante, sonst
   steht sein Symbol allein vor zentriertem Text und der Kasten liest sich wie eine
   zweite Ueberschrift (gesehen am 26.09. auf /ein-herz-fuer-kinder). */
.charity-band:not(:has(> figure, > picture, > img)) .lueckenhinweis{text-align:left}
@media (max-width:880px){.charity-band{grid-template-columns:minmax(0,1fr);gap:30px}}
/* Seit 17.09.2026 hell (Kundenrunde 5). Der Ton laeuft ueber .ton in den Grund aus. */
.band-charity{--ton:var(--creme2)}

/* ---- Kontakt ---- */
.kontakt-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:52px;align-items:start}
.kontakt-neben h2{font-size:24px;margin-bottom:16px}
.kontakt-bild{margin-top:26px}
@media (max-width:880px){.kontakt-grid{grid-template-columns:minmax(0,1fr);gap:34px}}

/* ---- Zeichnungen als ehrlicher Gegenpol ---- */
.zeichnung-paar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:26px;margin-top:20px}
.zeichnung-paar figure{margin:0;padding:26px;text-align:center;
  border:1px solid rgba(192,146,95,.3);border-radius:3px;background:var(--papier)}
.zeichnung-paar svg{width:64%;margin:0 auto;color:var(--gold)}
.zeichnung-paar figcaption{margin-top:12px;font:600 12px/1 var(--sans);
  letter-spacing:.16em;text-transform:uppercase;color:var(--leise)}
@media (max-width:640px){.zeichnung-paar{grid-template-columns:minmax(0,1fr)}}

/* ---- Hinweiskasten ---- */
.lueckenhinweis{display:flex;gap:13px;align-items:flex-start;
  background:rgba(143,50,28,.09);border-left:3px solid var(--rot);
  padding:16px 20px;margin:24px 0 0;font-size:14.8px;border-radius:0 3px 3px 0}
.lueckenhinweis .ic{color:var(--rot);margin-top:2px}

/* ---- Entwurfsband + Kopf-Icons ---- */
.entwurfsband{display:flex;gap:10px;align-items:center;justify-content:center}
.entwurfsband .ic{color:var(--goldmetall)}
.tel{gap:9px}.tel span{white-space:nowrap}
.menue-liste a{gap:16px}
.menue-ic{color:var(--goldtext);flex:0 0 auto}
.menue-liste a span{flex:1 1 auto;min-width:0}
.menue-liste i{margin-left:auto}
.fuss-siegel{width:54px;margin-bottom:14px;opacity:.9}
.fuss-kontakt{list-style:none;margin:16px 0 0;padding:0;font-size:15px}
/* ⚠️ DAS SYMBOL GEHOERT AUF DIE ERSTE ZEILE — und die liegt nicht ueberall gleich
   (19.09.2026, Roberts Befund „die Icons sind noch nicht auf derselben Höhe wie der
   Text"). Gemessen: bei Telefon und E-Mail sass das Symbol **6,5 px zu hoch**, weil der
   Link darin ein Tippziel mit 44 px Mindesthoehe ist und seinen Text mittig fuehrt,
   waehrend `flex-start` das Symbol an den oberen Rand haengte. Bei der mehrzeiligen
   Anschrift stimmte es, weil dort kein Tippziel im Weg steht.
   Ein einheitliches `center` richtet zwar Telefon und E-Mail, schiebt aber die Anschrift
   um 12,75 px in die Mitte ihres Blocks — gemessen, nicht vermutet. Deshalb zwei Regeln
   statt einer Vermutung: Zeilen mit Tippziel bekommen dessen halbe Hoehe als Versatz,
   alle anderen den kleinen Ausgleich der Schriftlinie. Ergebnis: ueberall 0,4 px. */
/* ⚠️ GRUNDLINIE STATT KANTE (19.09.2026, Roberts Befund „die Icons sind noch nicht auf
   derselben Höhe wie der Text"). Gemessen war das Symbol bei Telefon und E-Mail 6,5 px
   zu hoch. Ursache: `.fusszeile a` hat `padding:6px 0`, die danebenstehende Anschrift
   als <span> nicht — bei `align-items:flex-start` beginnt der Text der Links also 6 px
   tiefer als der der Anschrift, das Symbol aber bei beiden oben.
   Zwei feste Zahlen waeren keine Loesung: in der Randspalte von /presse traegt derselbe
   Baustein andere Polster, dort braeuchte es 9,5 px statt 2,5. `align-items:baseline`
   richtet am TEXT aus statt am Kasten und ist damit von jedem Polster unabhaengig —
   gemessen in allen drei Faellen unter 1,2 px Abweichung, vorher 6,5. Der kleine
   Versatz in em haelt das Symbol optisch mittig zur Zeile statt auf ihrer Grundlinie. */
.fuss-kontakt li{display:flex;gap:12px;align-items:baseline;padding:8px 0}
.fuss-kontakt .ic{color:var(--goldtext);flex:0 0 auto;transform:translateY(0.28em)}
.fuss-kontakt small{display:block;font-size:12.8px;opacity:.65}
/* Soziale Netzwerke (Robert, 22.09.2026) — waagerecht unter der Anschrift.
   ⚠️ MINDESTENS 44 px HOCH. `.fusszeile a` bringt nur `padding:6px 0` mit; ein Symbol
   von 20 px ergaebe damit 32 px, und die Handy-Messung vom 20.09. verlangt 40 px
   (WCAG 2.5.8). Gemessen wird die ausgelieferte Seite, nicht diese Regel.
   ⚠️ Symbol UND Wort stehen in DEMSELBEN Tippziel — am 20.09. war ein Symbol von
   seinem Wort getrennt, und auf dem Telefon trifft man dann zweimal daneben.
   Der Randfarbwert ist derselbe wie an `.fuss-unten`, keine zweite Quelle. */
.fuss-social{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:10px}
.fuss-social li a{display:inline-flex;align-items:center;gap:9px;min-height:44px;
  padding:6px 15px 6px 13px;border:1px solid rgba(138,95,42,.3);border-radius:999px;
  font-size:14.4px;line-height:1.2;transition:border-color var(--kurz) var(--weich),color var(--kurz) var(--weich)}
.fuss-social li a:hover{border-color:var(--goldtext);color:var(--goldtext)}
.fuss-social .ic{color:var(--goldtext);flex:0 0 auto}
.fuss-liste li a{display:inline-flex;gap:10px;align-items:center}
.fuss-liste .ic{color:var(--goldtext);opacity:.85;flex:0 0 auto}
/* Ein Eintrag OHNE Icon haelt trotzdem die Flucht. In der Spalte "Rechtliches"
   tragen Impressum, Datenschutz und Kontakt keins, der Eintrag darunter schon —
   ohne diesen Platzhalter beginnt ihr Text 26 px weiter links als der des Nachbarn,
   und die Spalte sieht aus wie verrutscht (Robert, 17.09.2026). */
.fuss-liste li a:not(:has(.ic))::before{content:"";flex:0 0 16px}
.fuss-hinweis{margin-top:12px;font-size:13.4px;opacity:.7;max-width:64ch}
/* Im Fliesstext ist Farbe allein kein Linkmerkmal (1,56:1 gemessen) — Unterstrich dauerhaft. */
.fuss-hinweis a{text-decoration:underline;text-underline-offset:2px}

/* ---- Einwilligung: schlanker, nicht bildschirmfuellend ---- */
.einwilligung-kopf{display:flex;gap:11px;align-items:center;margin-bottom:10px}
.einwilligung-kopf .ic{color:var(--gold)}
.einwilligung-kopf h2{margin:0;font-size:19px}
.einwilligung .klein{font-size:13.6px;color:var(--leise)}
.einwilligung[hidden]{display:none!important}

/* ---- Kartenfassade ---- */
.karte-fassade .ic{color:var(--goldtext)}

/* ---- Zierband aus Icons im Held — Roberts "mehr Flaticons" ---- */
.zierband{display:flex;gap:clamp(14px,2.4vw,26px);justify-content:center;align-items:center;
  margin:26px 0 0;color:rgba(224,184,120,.55)}
.zierband span{display:inline-flex;animation:zierAtmen 5.5s ease-in-out infinite;
  animation-delay:calc(var(--i,0) * 340ms)}
.zierband span:nth-child(even){color:rgba(224,184,120,.34)}
@keyframes zierAtmen{0%,100%{opacity:.5;transform:translateY(0) scale(1)}
  50%{opacity:1;transform:translateY(-3px) scale(1.09)}}
@media (max-width:620px){.zierband span:nth-child(n+6){display:none}}
@media (prefers-reduced-motion:reduce){.zierband span{animation:none;opacity:.7}}

/* ---------- Aussteller und Presse (14.09.2026) ---------- */
/* Masse und Bereich stehen ueber dem Beschreibungstext, nicht darin: wer Staende
   vergleicht, liest zuerst Groesse und Ort und erst dann den Fliesstext. */
.stand-masse{display:flex;align-items:center;gap:7px;margin:0 0 10px;
  font:600 13.5px/1.4 var(--sans);letter-spacing:.04em;color:var(--goldtext)}
.stand-masse .ic{flex:0 0 auto}

@media (max-width:640px){.eckdaten > div{grid-template-columns:1fr;gap:4px;padding:13px 0}}

/* ---------- Handy: der Held war vollgepackt (14.09.2026) ----------
   Robert: "wenn man auf der Startseite mit der Hero Session runterscrollt, dann ist es
   noch sehr verpackt. Das muss auf jeden Fall fluessiger funktionieren."
   Gemessen auf 390 x 844: der Held brauchte 1163 px — 1,38 Bildschirme — bevor der erste
   eigentliche Abschnitt kam. Die Hoehe lag nicht dort, wo man sie vermutet:
     Entwurfsband  78 px (vier Zeilen)   ·  Kopf            77 px
     Wortmarke     85 px                 ·  Claim           63 px
     Fliesstext   109 px (vier Zeilen)   ·  Knoepfe        122 px
     Vertrauen     80 px (drei Zeilen)   ·  FAKTENBAND     459 px
   Das Faktenband allein war mehr als ein Drittel. Es stand unter 520 px einspaltig,
   vier Karten mit 24 px Polsterung untereinander. Gekuerzt wird deshalb dort, wo es
   wirklich kostet — nicht dort, wo es am schnellsten geht. */

@media (max-width:640px){
  /* Das Hinweisband sagt dasselbe in einer Zeile statt in vieren. */
  .nur-breit{display:none}
  .entwurfsband{padding:7px 14px;font-size:12.5px}

  /* Der Fliesstext bekommt die volle Breite statt 54 Zeichen — vier Zeilen werden drei. */
  .held-unter{max-width:none;font-size:16px;line-height:1.6;margin-bottom:24px}
  .held-claim{margin-bottom:12px}

  /* Zwei Angaben nebeneinander statt vier untereinander, und ohne die dicke Polsterung. */
  .held-fakten .fakten{grid-template-columns:repeat(2,minmax(0,1fr))}
  .held-fakten .fakt{padding:15px 13px;gap:9px}
  .held-fakten .fakt dd{font-size:15px}
  .held-fakten .fakt small{font-size:12px;line-height:1.45}
  .held-fakten .fakt:nth-child(-n+2){border-bottom:1px solid rgba(224,184,120,.16)}

  /* Die Vertrauenszeile trennt sich sauber, statt in drei Zeilen zu zerfallen. */
  .held .vertrauen{margin-top:16px;font-size:13px;line-height:1.7}

  /* Etwas weniger Luft um den ganzen Block — aber der Inhalt bleibt ueber der Zone,
     in der sich das Bild ins Papier aufloest (hier 180 px statt 250). */
  .held-inhalt{padding-top:26px;padding-bottom:150px}
  .held::after{background:
    linear-gradient(180deg,rgba(254,243,230,0) calc(100% - 180px),rgba(254,243,230,.55) calc(100% - 80px),var(--creme) 100%),
    linear-gradient(180deg,rgba(12,9,8,.70) 0%,rgba(12,9,8,.45) 40%,rgba(12,9,8,.5) 62%,rgba(12,9,8,0) calc(100% - 80px))}
  .held-fakten{margin-top:-96px}
  .zierband{margin:14px 0 4px}
}
/* Ganz schmale Geraete: eine Spalte, aber kompakt — zwei Spalten waeren hier gequetscht. */
/* Zwei Spalten erst ab 420 px: darunter lief „ÖFFNUNGSZEITEN" mit .18em Sperrung ueber
   den Kartenrand (gemessen 18.09.2026 bei 380–520 px). */
@media (max-width:419px){
  .held-fakten .fakten{grid-template-columns:minmax(0,1fr)}
  .held-fakten .fakt{border-right:0;border-bottom:1px solid rgba(224,184,120,.16)}
}
@media (min-width:641px){.nur-schmal{display:none}}

/* ---------- Handy: was auf dem iPhone bremst, obwohl es im Labor nicht auffaellt ----------
   Gemessen am 14.09.2026 auf 390 px mit 6-fach gedrosselter CPU: Median 16,7 ms je Bild,
   kein einziges Bild ueber 32 ms — im Labor ruckelt nichts. Robert sieht es trotzdem auf
   seinem Telefon, und das ist kein Widerspruch: Chrome auf dem Mac rendert anders als
   Safari auf einem iPhone. Zwei Dinge bremsen dort regelmaessig, ohne dass eine Messung
   am Rechner es zeigt, und beide kosten nichts, wenn man sie auf dem Handy zuruecknimmt:

   1. backdrop-filter an einer klebenden Leiste. Safari muss den Bereich hinter der Leiste
      bei JEDEM Bildaufbau neu weichzeichnen, auch beim Nachschwingen des Fingers.
      Auf dem Handy steht die Leiste ohnehin fast deckend — der Weichzeichner ist dort
      nicht zu sehen, nur zu spueren.
   2. Drei fest positionierte, dauerhaft animierte Ebenen (der Schnee). Fest positioniert
      heisst: sie liegen NICHT im scrollenden Bild und muessen waehrend des Scrollens
      gesondert gezeichnet werden.
   Deshalb: auf dem Handy kein Weichzeichner und zwei Schneeebenen statt drei. Es bleibt
   Schnee, es bleibt eine dunkle Leiste — nur ohne den Teil, den man nicht sieht. */
@media (max-width:760px){
  .kopf{-webkit-backdrop-filter:none;backdrop-filter:none;background:rgba(254,243,230,.97)}
  .schneeSeite .flocken:nth-child(2){display:none}
}
/* Auch auf schwachen Geraeten mit feiner Aufloesung (alte iPhones, viele Android-Mittelklassen). */
@media (max-width:900px) and (prefers-reduced-motion:no-preference){
  .held-bild{will-change:auto}
}

/* ---------- Datenschutz-Fenster (14.09.2026) ----------
   Erreichbar von JEDER Seite ueber die Zustandszeile in der Fusszeile. Ein echtes
   <dialog>: Escape schliesst, der Fokus bleibt darin, der Hintergrund ist inert.
   Ohne JavaScript bleibt es zu und die Datenschutzseite traegt denselben Inhalt —
   deshalb ist es Zierde im besten Sinn: sein Ausfall kostet keine Information. */
/* Unter dem Link statt daneben (ragte 8 px aus der Spalte) und ohne Toenung, damit der
   gepruefte Wert von --goldtext auf Creme wirklich gilt. */

.ds-fenster{width:min(680px,calc(100% - 32px));max-height:86vh;padding:0;border:0;
  border-radius:3px;background:var(--papier);color:var(--text);
  box-shadow:0 40px 100px rgba(30,18,8,.45);overflow:auto}
.ds-fenster::backdrop{background:rgba(12,9,7,.72);backdrop-filter:blur(2px)}
.ds-fenster > *{padding-left:clamp(18px,3.4vw,34px);padding-right:clamp(18px,3.4vw,34px)}
.ds-schliessen-form{position:sticky;top:0;z-index:2;display:flex;justify-content:flex-end;
  padding-top:14px;padding-bottom:0;background:linear-gradient(180deg,var(--papier) 68%,transparent)}
.ds-schliessen{width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid rgba(192,146,95,.45);border-radius:2px;background:transparent;
  color:var(--text);cursor:pointer;transition:border-color .2s ease,background .2s ease}
.ds-schliessen:hover{border-color:var(--goldmetall);background:rgba(224,184,120,.12)}
.ds-fenster h2{display:flex;align-items:center;gap:11px;font-size:clamp(21px,3vw,27px);margin:0 0 10px}
.ds-vor{font-size:15.5px;line-height:1.6;color:#4A3B31;margin:0 0 6px}

/* Kompakt seit 17.09.2026 (Kundenrunde 5: "einfache, direkte Cookies, nicht ewig
   scrollen"). Je Dienst EINE Zeile — Name, Zweck, Schalter. Alles Weitere (Empfaenger,
   Daten, Rechtsgrundlage, Drittland, was es NICHT gibt, der Browser-Auszug) steht auf
   /datenschutz, aus derselben Quelle. Das Fenster ist die Entscheidung, die Seite der Beleg. */
/* ⚠️ ZWEIMAL DIESELBE STELLE (17.09. und 20.09.2026). Erst stand hier `padding:0` — das
   hob die Einrueckung auf, die `.ds-fenster > *` allen Kindern gibt, und die Zeilen
   standen auf der Fensterkante. Der Ersatz `padding-inline-start:0` sah nach einer
   Praezisierung aus, war aber genau die HAELFTE der Ursache: er setzt in LTR wieder
   padding-left auf 0 und schlaegt die geteilte Regel (gleiche Spezifitaet, spaeter).
   Rechts wirkte die Einrueckung, links nicht — und im Kommentar stand, es sei behoben.
   Deshalb jetzt GAR KEINE eigene Angabe: die geteilte Regel gilt fuer beide Seiten, und
   die 40px Listenpunkt-Einrueckung des Browsers werden von ihr ohnehin ueberschrieben.
   Nachgemessen am Bild, nicht am Quelltext. */
.ds-liste{list-style:none;margin:20px 0 0;border-top:1px solid rgba(192,146,95,.28)}
.ds-zeile{display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:17px 0;border-bottom:1px solid rgba(192,146,95,.28)}
.ds-zeile > div{min-width:0}
.ds-zeile b{display:block;font:700 16px/1.35 var(--serif)}
.ds-was{display:block;margin-top:2px;font:400 14px/1.5 var(--sans);color:var(--leise)}
.ds-fest{flex:0 0 auto;font:600 11.5px/1 var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--leise)}

/* Der Schalter: gross genug fuer den Daumen, und sein Zustand steht als WORT daneben —
   eine Farbe allein ist fuer Rot-Gruen-Blinde keine Auskunft. */
.ds-schalter{display:inline-flex;align-items:center;gap:9px;cursor:pointer;min-height:44px}
.ds-schalter input{position:absolute;opacity:0;width:0;height:0}
.ds-bahn{position:relative;width:50px;height:28px;border-radius:14px;flex:0 0 auto;
  background:#B0967A;border:1px solid rgba(138,95,42,.55);transition:background .25s ease}
.ds-bahn::after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;
  background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.3);transition:transform .25s var(--weich)}
.ds-schalter input:checked + .ds-bahn{background:#2E8B57}
.ds-schalter input:checked + .ds-bahn::after{transform:translateX(22px)}
.ds-schalter input:focus-visible + .ds-bahn{outline:3px solid #14100E;outline-offset:3px}
.ds-wort{font:600 12.5px/1 var(--sans);letter-spacing:.1em;text-transform:uppercase;
  color:var(--leise);min-width:26px}
/* Knopfreihe und Schlusssatz hatten gar keine eigene Regel und klebten an der Liste.
   Die drei Knoepfe duerfen umbrechen statt sich gegenseitig zu quetschen. */
.ds-tun{display:flex;flex-wrap:wrap;gap:12px;margin:22px 0 0}
.ds-tun .btn{flex:1 1 auto}
.ds-nach{margin:20px 0 0;padding-bottom:26px;font-size:14.5px;line-height:1.62;color:var(--leise)}

.rechtstext .klein{font-size:14px;color:var(--leise)}
@media (max-width:560px){
  .ds-fenster{width:calc(100% - 16px);max-height:92vh}
  /* Auf dem Handy bekommt jede Zeile ihre eigene Zeile fuer den Schalter — nebeneinander
     bleiben vom Zwecktext sonst zwei Woerter uebrig. */
  .ds-zeile{flex-wrap:wrap}
  .ds-zeile .ds-schalter,.ds-zeile .ds-fest{margin-left:auto}
  .ds-tun .btn{flex:1 1 100%}
}

/* Fuenf Saetze, fuenf Absaetze — mit Luft dazwischen statt einer Textmauer. */
.fuenf-saetze p{margin:0 0 14px;max-width:62ch;line-height:1.72}
.fuenf-saetze p:last-child{margin-bottom:0}

/* ---------- Anschriftblock auf den Rechtsseiten ---------- */
/* Die Anbieterkennung ist das, wonach auf einer Rechtsseite gesucht wird. Als
   Komma-Reihe im Fliesstext findet man nichts; als Block mit Bezeichnung und Wert
   liest man in zwei Sekunden, wer verantwortlich ist (Roberts Ansage 20.09.2026). */
.anschriftblock{background:var(--papier);border:1px solid rgba(192,146,95,.34);border-radius:3px;
  padding:22px 24px;margin:18px 0 30px}
.anschrift-name{margin:0 0 4px;font:600 clamp(18px,1.7vw,20.5px)/1.35 var(--serif);color:var(--goldtext)}
.anschrift-zeilen{margin:0 0 16px;line-height:1.62}
.anschrift-daten{display:grid;grid-template-columns:minmax(0,1fr);gap:9px;margin:0;
  padding-top:16px;border-top:1px solid rgba(192,146,95,.24)}
.anschrift-daten > div{display:grid;grid-template-columns:minmax(9.5rem,auto) minmax(0,1fr);gap:4px 16px}
.anschrift-daten dt{margin:0;font:600 14.6px/1.5 var(--sans);color:var(--leise)}
.anschrift-daten dd{margin:0;line-height:1.5}
@media (max-width:620px){
  .anschrift-daten > div{grid-template-columns:minmax(0,1fr);gap:1px}
  .anschrift-daten dd{margin-bottom:6px}
}

/* ---------- Handy: Tippflaechen und Paare (Messung 20.09.2026) ----------
   Gemessen mit scratchpad/mobil-pruefen.mjs bei 390 px, geraetetreu emuliert.
   Drei Befunde, alle drei hier behoben:
   1. Die Fusszeilen-Links waren 37 px hoch. Apple und Google empfehlen 44 px, WCAG 2.5.8
      verlangt 24 — ein Daumen trifft 37 px, aber nicht zuverlaessig. Nur auf schmalen
      Schirmen erhoeht: mit der Maus braucht niemand 44 px.
   2. Zeichen und Wort der Vertrauenszeile brachen auseinander („barrierefrei" stand ohne
      sein Zeichen auf der naechsten Zeile). Jedes Paar ist jetzt eine Einheit.
   3. Der Kleintext im Faktenband war auf dem Handy 12 px — kleiner als auf dem Desktop,
      obwohl er dort MEHR Platz hat. Das ist genau verkehrt herum. */
.vertrauen .vp{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.vertrauen .vp-punkt{opacity:.55;margin:0 4px}

@media (max-width:760px){
  .fusszeile a{min-height:44px;display:inline-flex;align-items:center;padding:4px 0}
  /* `.fuss-kontakt` steht nicht nur in der Fusszeile, sondern auch im Seiteninhalt
     (/kontakt, /aussteller, /presse). Dort griff die Regel darueber nicht, und die
     Telefonnummer blieb 25 px hoch — gefunden von der neuen Tippflaechen-Messung,
     nicht vom Auge. Spalte, damit das `<small>` darunter stehen bleibt. */
  .fuss-kontakt li{padding:6px 0}
  .fuss-kontakt a{min-height:40px;display:inline-flex;flex-direction:column;justify-content:center}
  /* Telefon und E-Mail im Anschriftblock der Rechtsseiten: je ein Link allein in seinem
     <dd>, also eine echte Tippflaeche — und 20 px hoch. Von der Live-Messung gefunden,
     nicht vom Auge (20.09.2026). */
  .anschrift-daten dd a{min-height:40px;display:inline-flex;align-items:center}
  .held-fakten .fakt small{font-size:13px;line-height:1.5}
}

/* ============================================================================
   ATMOSPHAERE — Licht, Glitzer, Sterne, Schnee.
   Robert: "ein Glitzer, ein Schleier oder vielleicht Sterne, die sich beim
   Runterscrollen bewegen ... viel mehr Leben, viel mehr Bilder, Glitzer und Weihnachten."

   Drei Regeln, die fuer JEDEN Effekt hier gelten:
   1. Nur transform und opacity — beides laeuft auf der Grafikkarte. Kein Effekt
      darf das Layout neu berechnen lassen (kein top/left/width/height/filter im Takt).
   2. Jeder Effekt ist Zierde. Faellt er aus, fehlt nichts am Inhalt: alle
      Atmosphaeren-Elemente tragen aria-hidden und stehen in position:absolute
      ueber dem Inhalt, nie darin.
   3. prefers-reduced-motion haelt ALLES an — am Ende der Datei, in einem Block.
   ============================================================================ */

/* ---- Sternenfeld mit Parallaxe ------------------------------------------- */
/* Zwei Ebenen, die beim Scrollen unterschiedlich schnell wandern. Den Wert
   --pa setzt seite.js einmal je Bildwiederholung; die Ebene selbst bewegt sich
   dann allein per transform. */
/* Der Ueberhang gibt der Parallaxe Luft — aber in PIXELN, nicht in Prozent.
   Mit -18 % wuchs er mit der Abschnittshoehe: auf der Ausstellerseite ragte das Sternenfeld
   203 px ueber seinen Abschnitt hinaus und malte Sterne ueber den Nachbarn (gemessen
   14.09.2026). Die Parallaxe versetzt hoechstens rund 80 px; 110 px reichen immer. */
.sternfeld{position:absolute;inset:-110px 0;pointer-events:none;overflow:hidden;z-index:0}
.sternfeld svg{position:absolute;left:0;top:0;width:100%;height:100%}
.sternfeld .ebene{will-change:transform}
.sternfeld .fern{transform:translate3d(0,calc(var(--pa,0) * 0.10 * 1px),0);opacity:.55}
.sternfeld .nah {transform:translate3d(0,calc(var(--pa,0) * 0.26 * 1px),0);opacity:.85}
.sternfeld circle{animation:blinzeln var(--dauer,6s) ease-in-out infinite;animation-delay:var(--verzug,0s)}
@keyframes blinzeln{0%,100%{opacity:.25}50%{opacity:1}}

/* ---- Glitzer: einzelne Funken, die aufgehen und vergehen ------------------ */
.funkenfeld{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:1}
.funke{position:absolute;color:var(--goldmetall);opacity:0;
  animation:funkeln var(--dauer,7s) ease-in-out infinite;animation-delay:var(--verzug,0s)}
@keyframes funkeln{
  0%,100%{opacity:0;transform:scale(.4) rotate(0deg)}
  8%     {opacity:.9;transform:scale(1) rotate(22deg)}
  16%    {opacity:.15;transform:scale(.75) rotate(40deg)}
  24%    {opacity:.75;transform:scale(.95) rotate(58deg)}
  40%    {opacity:0;transform:scale(.5) rotate(80deg)}
}

/* ---- Schneefall: drei Ebenen, sehr sparsam ------------------------------- */
/* Bewusst wenige, grosse, weiche Flocken statt vieler kleiner — viele kleine
   sehen im Browser nach Bildrauschen aus und kosten auf dem Handy spuerbar. */
.schnee{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:1}
.schnee span{position:absolute;top:-8%;border-radius:50%;background:rgba(255,250,242,.85);
  filter:blur(.4px);opacity:0;
  animation:rieseln var(--dauer,18s) linear infinite;animation-delay:var(--verzug,0s)}
@keyframes rieseln{
  0%  {opacity:0;   transform:translate3d(0,0,0)}
  10% {opacity:.65}
  90% {opacity:.5}
  100%{opacity:0;   transform:translate3d(var(--drift,14px),118vh,0)}
}

/* ---- Lichtschleier: warmer Dunst ueber dunklen Flaechen ------------------- */
.schleier{position:absolute;inset:0;pointer-events:none;z-index:1;
  -webkit-mask:linear-gradient(180deg,transparent 0%,#000 18%,#000 82%,transparent 100%);
          mask:linear-gradient(180deg,transparent 0%,#000 18%,#000 82%,transparent 100%);
  background:radial-gradient(60% 50% at var(--lx,72%) var(--ly,16%),
             rgba(212,175,55,.20), transparent 62%);
  animation:atemzug 16s ease-in-out infinite alternate}
@keyframes atemzug{to{opacity:.62;transform:scale(1.08)}}

/* ---- Bilder: Rahmen, Lichtsaum, langsames Heranfahren --------------------- */
/* Robert: "Die Bilder muessen richtig hervorstechen." */
.bild{position:relative;overflow:hidden;border-radius:3px;isolation:isolate;
  background:var(--creme2)}
.bild img{display:block;width:100%;height:100%;object-fit:cover;
  transform:scale(1.06);transition:transform 1.5s cubic-bezier(.16,.72,.24,1)}
.js .bild.da img{transform:scale(1)}
/* Goldsaum innen + Abdunklung nach unten, damit Text darauf lesbar bleibt */
.bild::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:2;
  box-shadow:inset 0 0 0 1px rgba(192,146,95,.35),
             inset 0 -110px 100px -70px rgba(14,11,9,.55);
  border-radius:inherit}
/* Lichtstreif, der einmal ueber das Bild wandert, wenn es erscheint */
.bild::before{content:"";position:absolute;top:0;bottom:0;width:46%;z-index:3;
  left:-60%;pointer-events:none;opacity:0;
  background:linear-gradient(100deg,transparent,rgba(255,246,230,.16) 44%,transparent);
  transform:skewX(-14deg)}
.js .bild.da::before{animation:streif 1.9s cubic-bezier(.3,.6,.2,1) .5s 1 forwards}
@keyframes streif{0%{left:-60%;opacity:0}12%{opacity:1}100%{left:120%;opacity:0}}
/* Beim Ueberfahren hebt sich das Bild leicht und wird waermer */
.bild-halt{transition:transform .9s cubic-bezier(.16,.72,.24,1),
                      box-shadow .9s ease}
.bild-halt:hover{transform:translateY(-6px);
  box-shadow:0 26px 60px -24px rgba(0,0,0,.6), 0 0 0 1px rgba(224,184,120,.3)}
.bild-halt:hover img{transform:scale(1.045)}
/* Der Ehrlichkeits-Hinweis muss LESBAR sein, sonst erfuellt er seinen Zweck nicht.
   Gemessen 18.09.2026: 1,37:1 bis 4,60:1 je nach Bild. Eigener Grund statt mehr Deckkraft —
   sonst wird er auf dunklen Bildern grell. */
.bildnote{position:absolute;left:50%;transform:translateX(-50%);bottom:12px;z-index:4;text-align:center;
  font:600 11px/1 var(--sans);letter-spacing:.18em;text-transform:uppercase;
  color:#F6EEE2;background:rgba(14,11,9,.72);padding:5px 10px;border-radius:2px}

/* ---- Schimmer ueber grossen Ueberschriften -------------------------------- */
.schimmer{background-image:linear-gradient(100deg,
    currentColor 0%, currentColor 38%,
    var(--goldhell) 47%, #FFF3DC 50%, var(--goldhell) 53%,
    currentColor 62%, currentColor 100%);
  background-size:280% 100%;background-position:150% 0;
  -webkit-background-clip:text;background-clip:text;color:inherit}
.js .schimmer.da{-webkit-text-fill-color:transparent;color:transparent;
  animation:schimmern 2.6s cubic-bezier(.5,0,.3,1) .35s 1 forwards}
@keyframes schimmern{to{background-position:-60% 0}}

/* ---- Goldlinie, die sich zieht -------------------------------------------- */
.zierlinie{height:1px;border:0;margin:34px 0;
  background:linear-gradient(90deg,transparent,var(--gold),transparent);
  transform:scaleX(0);transform-origin:center;
  transition:transform 1.5s cubic-bezier(.16,.72,.24,1)}
.js .zierlinie.da{transform:scaleX(1)}

/* ---- Kerzenflackern fuer einzelne Icons ----------------------------------- */
.flackert{animation:flackern 5.5s ease-in-out infinite}
@keyframes flackern{
  0%,100%{opacity:1;filter:drop-shadow(0 0 3px rgba(212,175,55,.5))}
  42%    {opacity:.82;filter:drop-shadow(0 0 7px rgba(212,175,55,.75))}
  61%    {opacity:1;filter:drop-shadow(0 0 4px rgba(212,175,55,.55))}
}

/* ---- Alles aus, wenn der Besucher das so eingestellt hat ------------------ */
@media (prefers-reduced-motion:reduce){
  .sternfeld .ebene,.sternfeld circle,.funke,.schnee span,.schleier,
  .flackert,.js .schimmer.da,.js .bild.da::before{
    animation:none!important;transform:none!important}
  .funke,.schnee span{opacity:.5!important}
  .js .schimmer.da{-webkit-text-fill-color:currentColor;color:inherit}
  .bild img,.js .bild.da img{transform:none!important;transition:none!important}
  .zierlinie,.js .zierlinie.da{transform:scaleX(1)!important;transition:none!important}
}

/* ---- Effektfarbe kommt aus den Bildern, nicht aus der Markenpalette ----------
   #D4AF37 ist ein Druckgold und wirkt als Lichtpunkt gelblich-stumpf. Die aus den
   Bildern gemessene Lichtfarbe #FDE6C4 ist heller und waermer. */
.sternfeld circle{fill:var(--licht)}
/* Auf dem hellen Grund (seit 17.09.2026) sind Funken GOLD — die Lichtfarbe waere auf
   Creme unsichtbar. Nur ueber dem Heldbild bleibt sie Licht. */
.funke{color:var(--goldmetall)}
.held .funke{color:var(--licht)}
.schnee span{background:rgba(253,230,196,.55)}

/* ============================================================================
   ZWEITE RUNDE ATMOSPHAERE — Schnee ueber der ganzen Seite, Sternschnuppe,
   Lichtstrahlen. Robert, 14.09.2026. (Die Uebergangsbaender von damals sind seit dem
   17.09.2026 weg — siehe unten.)
   ============================================================================ */

/* ---- Uebergangsbaender: ENTFERNT am 17.09.2026 (Kundenrunde 5) ----------------------
   Seit die Seite EINEN hellen Grund hat, gibt es keine Kante zwischen hell und dunkel,
   die ein Band ueberbruecken muesste. Getoente Abschnitte (.ton in stil.css) laufen in
   sich selbst in den Grund aus. Die Lichterkette hat der Kunde ausdruecklich abgelehnt
   ("nicht besonders schoen") — wer je wieder einen zweiten Grund braucht, baut den
   Uebergang IN den Abschnitt, nie als Zwischenelement mit eigener Zierde. */

/* ---- Schneefall ueber der ganzen Seite --------------------------------------
   Robert: "Die Schneeflocken finde ich ganz gut; das koennte man auf der kompletten
   Website machen." Drei feste Ebenen mit wiederholtem Muster statt hunderter Knoten. */
.schneeSeite{position:fixed;inset:0;z-index:3;pointer-events:none;overflow:hidden}
.schneeSeite .flocken{position:absolute;left:-10%;right:-10%;top:-110%;height:220%;
  will-change:transform;animation:schneien var(--dauer,30s) linear infinite}
@keyframes schneien{from{transform:translate3d(0,0,0)}to{transform:translate3d(16px,50%,0)}}

/* ---- Sternschnuppe ----------------------------------------------------------
   Roberts Wunsch. Sie faellt SELTEN — eine, die staendig faellt, wird zur Lichtorgel.
   seite.js zuendet sie hoechstens alle neun Sekunden und nur, solange der Held im Bild ist. */
.schnuppenfeld{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:2}

/* Der Kopf: klein, aber mit zwei Hoefen — einem engen weissen und einem weiten goldenen. */
.schnuppe{position:absolute;width:4px;height:4px;border-radius:50%;background:#FFFDF6;
  box-shadow:0 0 10px 3px rgba(255,246,222,.95), 0 0 30px 10px rgba(236,180,108,.42);
  opacity:0}
.schnuppe::before{content:"";position:absolute;left:50%;top:50%;width:40px;height:40px;
  margin:-20px 0 0 -20px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,240,210,.45),transparent 68%)}

/* Der Schweif haengt HINTER dem Kopf und liegt auf der Flugbahn.
   Bis zum 14.09.2026 lief er vom Kopf nach links weg, waehrend der Stern selbst nach
   links unten flog — der Schweif zog also voraus statt nach. Dass das "irgendwie nicht
   cool" aussieht, sieht man; woran es liegt, nicht. seite.js setzt --neigung aus der
   Flugrichtung, damit Schweif und Bahn dieselbe Linie sind. */
.schnuppe::after{content:"";position:absolute;left:2px;top:50%;width:var(--schweif,300px);height:2px;
  border-radius:2px;transform-origin:left center;
  transform:translateY(-50%) rotate(var(--neigung,-31deg));
  background:linear-gradient(90deg,
    rgba(255,252,242,.98) 0%,
    rgba(255,236,200,.70) 15%,
    rgba(236,180,108,.34) 42%,
    rgba(236,180,108,.11) 70%,
    transparent 100%)}
.schnuppe.los{animation:schnuppeFliegt var(--flug,1500ms) cubic-bezier(.28,.5,.26,1) forwards}
.schnuppe.los::before{animation:schnuppeHof var(--flug,1500ms) ease-out forwards}
@keyframes schnuppeFliegt{
  0%{opacity:0;transform:translate3d(0,0,0) scale(.5)}
  9%{opacity:1;transform:translate3d(calc(var(--dx,-540px) * .09),calc(var(--dy,330px) * .09),0) scale(1)}
  74%{opacity:.9}
  100%{opacity:0;transform:translate3d(var(--dx,-540px),var(--dy,330px),0) scale(.72)}}
@keyframes schnuppeHof{
  0%{opacity:0;transform:scale(.4)} 12%{opacity:1;transform:scale(1)}
  100%{opacity:0;transform:scale(1.9)}}

/* ---- Lichtstrahlen hinter der Wortmarke ------------------------------------- */
.strahlen{position:absolute;left:50%;top:-16%;width:min(1150px,124%);height:82%;
  transform:translateX(-50%);pointer-events:none;z-index:1;
  background:conic-gradient(from 168deg at 50% 0%,
    transparent 0deg, rgba(253,230,196,.10) 9deg, transparent 18deg,
    transparent 27deg, rgba(253,230,196,.07) 36deg, transparent 45deg,
    transparent 129deg, rgba(253,230,196,.08) 138deg, transparent 147deg,
    transparent 156deg, rgba(253,230,196,.11) 165deg, transparent 174deg);
  -webkit-mask:linear-gradient(180deg,#000 0%,rgba(0,0,0,.5) 52%,transparent 88%);
          mask:linear-gradient(180deg,#000 0%,rgba(0,0,0,.5) 52%,transparent 88%);
  animation:strahlenAtmen 19s ease-in-out infinite alternate}
@keyframes strahlenAtmen{to{opacity:.5;transform:translateX(-50%) rotate(2.2deg) scale(1.05)}}

/* ---- Wortmarke: Aufglimmen beim Laden --------------------------------------- */
.held-wortmarke{animation:markeAn 2200ms cubic-bezier(.16,1,.3,1) both}
@keyframes markeAn{
  0%{opacity:0;transform:scale(.966);filter:brightness(.62)}
  55%{opacity:1}
  100%{opacity:1;transform:none;filter:drop-shadow(0 10px 34px rgba(0,0,0,.55)) brightness(1)}}

/* ---- Held: eigene, langsame Bewegung am Scrollweg --------------------------- */
/* Der Held hatte bisher transform:none bei jedem Scrollstand — also gar keine Tiefe. */
.held-bild{will-change:transform;transform:translate3d(0,calc(var(--pa,0) * 1px),0)}

/* ---- Und alles aus, wenn der Besucher das so eingestellt hat ----------------- */
@media (prefers-reduced-motion:reduce){
  .strahlen,.held-wortmarke,.schneeSeite .flocken{animation:none!important}
  .schneeSeite,.schnuppenfeld{display:none!important}
  .held-wortmarke{opacity:1!important;transform:none!important;filter:none!important}
  .held-bild{transform:none!important}
}

/* Zierband: auf dem hellen Teil des Heldbilds war es bei 35 % Deckung nicht zu sehen. */
.zierband{color:rgba(253,230,196,.9);filter:drop-shadow(0 2px 8px rgba(0,0,0,.7))}
.zierband span:nth-child(even){color:rgba(253,230,196,.62)}
