/* ══ Die Fußzeile — EINE Fassung für alle Seiten ══════════════════════════════════════
   Percy-Entscheid 24.08.2026 zum Blatt «Fusszeile»: «Gleiche den Footer jeder Seite an die
   der Startseite an.» Vorher trugen 26 Seiten SIEBEN verschiedene Fußzeilen — die
   Startseite eine helle, die übrigen eine schwarze, Shop und Warenkorb je eine eigene, die
   Karte nur zwei Verweise.

   ⚑ Diese Datei ist die EINZIGE Quelle für den Fußzeilen-Stil. Die früheren `.tp-footer`-
   Regeln in `ds/site.css` und die eigenen `footer{…}`-Regeln im Stilblock von `index.html`
   sind entfernt — zwei Fassungen derselben Sache laufen beim ersten Umbau auseinander, und
   genau daraus sind die sieben entstanden.

   ⚑⚑ Zwei Namensräume, ein Design. Die Startseite lädt `ds/site.css` NICHT und benennt
   ihre Farben selbst (`--gelb`, `--ink`, `--label`, `--linie`, `--serif`). Die übrigen
   Seiten benutzen `--tp-*`. Nachgemessen: die Werte sind buchstäblich dieselben
   (#ffcc00 · #1b1b18 · #5f5d54 · #dad8cf). Darum steht unten je eine Fallback-Kette
   `var(--tp-…, var(--…, <Wert>))` — sie trägt in beiden Welten und selbst dann, wenn eine
   Seite gar keine Farben mitbringt. Ohne diese Kette stünde die Fußzeile ausgerechnet auf
   der Startseite ohne Farbe da, also auf der Seite, nach der sich alle richten sollen.

   ⚑ Gebaut und geändert wird sie über `_werkzeuge/fusszeile_setzen.py`, nicht von Hand in
   26 Dateien. Wer hier etwas ändert, ändert dort das Markup mit.
   ══════════════════════════════════════════════════════════════════════════════════════ */

.tp-footer {
  /* ⚑⚑ EIGENE Grundschrift statt der geerbten. Der Quervergleich fand sieben
     Abweichungen, alle auf der Startseite: `body` steht dort auf 20 px/31, auf den übrigen
     31 Seiten auf 19 px/28,5 — Kopf und Fuß erbten das und wurden dadurch ein bis
     fünfzehn Pixel höher. Sichtbar ist davon fast nichts; gemeinsam ist es trotzdem nicht.
     Ein Bauteil, das auf allen Seiten gleich sein soll, darf nicht davon abhängen, auf
     welcher Seite es steht. (25.08.2026) */
  font-size: var(--tp-t-5); line-height: 1.55;

  --fz-gelb:  var(--tp-yellow,     var(--gelb,  #ffcc00));
  --fz-ink:   var(--tp-ink,        var(--ink,   #1b1b18));
  --fz-grau:  var(--tp-ink-muted,  var(--label, #5f5d54));
  --fz-linie: var(--tp-border,     var(--linie, #dad8cf));
  --fz-serif: var(--tp-font-serif, var(--serif, "EB Garamond", Georgia, serif));
  --fz-sans:  var(--tp-font-sans,  var(--sans,  "Nunito Sans", Arial, sans-serif));

  /* ⚑ Gelbe Linie oben statt schwarzer (Percy 24.08.2026). Sie trennt nicht nur, sie
     gehört zur Marke — dasselbe Gelb wie der Balken über dem Kopf. */
  border-top: 2px solid var(--fz-gelb);
  background: transparent;
  color: var(--fz-ink);
  margin-top: clamp(50px, 7vw, 100px);
  padding: clamp(28px, 4vw, 52px) 0 48px;
}

/* Die Fußzeile richtet sich nach der INHALTSSPALTE der Seite, auf der sie steht — nicht
   nach dem Kopf. Gemessen bei 1400 px: das Logo im Kopf steht bei x≈40 (`.tp-header__inner`
   hat feste 40 px), der Seiteninhalt und die Fußzeile bei x≈56. Auf die Inhaltsspalte
   auszurichten ist richtig, denn darunter steht sie; hier stand einmal der Kopf als
   Begründung, und das war falsch gemessen.
   Die Startseite steht in ihrem eigenen `.wrap` (1500 px) — dafür die Zusatzklasse
   `--wrap`, die nur dort gesetzt wird. Eine feste Breite für alle hätte die Fußzeile auf
   breiten Schirmen gegen den randlosen Inhalt der übrigen Seiten versetzt. */
.tp-footer__inner { padding: 0 clamp(20px, 4vw, 56px); }
.tp-footer--wrap .tp-footer__inner { max-width: 1500px; margin: 0 auto; padding: 0 var(--rand, clamp(18px, 4vw, 60px)); }

/* ⚑ 1.9fr für die Anschriftenspalte und 40 px Abstand: «rechts neben der Adresse noch
   etwas mehr Platz lassen» (Percy). Vorher 1.4fr bei 26 px — die Verweisspalte begann
   unmittelbar neben der Telefonnummer. */
.tp-footer__top {
  display: grid;
  grid-template-columns: 1.9fr 1fr 1fr 1fr 1fr;
  gap: 40px;
}
.tp-footer__brand .word {
  font-family: var(--fz-serif); font-weight: 600; font-size: var(--tp-t-3);
  line-height: 1.1; letter-spacing: 0; text-transform: none;
  color: var(--fz-ink); margin: 0;
}
.tp-footer__brand address {
  font-family: var(--fz-serif); font-style: normal; font-size: var(--tp-t-5);
  line-height: 1.5; color: var(--fz-grau); margin: 10px 0 0;
  max-width: 34ch;  /* ⚑ Ausnahme vom Hausmass var(--tp-content-max) = 62ch, Percy-Entscheid 04.09.2026. eine Anschrift, keine Prosa — die Breite hält sie dreizeilig wie auf einem Briefkopf */
}

/* ⚑ Die Rubriken stehen in NUNITO SANS, nicht in der Monospace — Percy-Entscheid
   24.08.2026 auf die Frage «Rubriken-Schrift»: die Hausordnung §2 gilt («Nunito Sans
   strukturiert den Raum — Labels, Navigation, Rubriken»), nicht die Mono-Ebene der
   Startseite. Die Fußzeile war zuerst 1:1 von dort übernommen; damit stand sie quer zu §2,
   und Percy hat den Widerspruch zugunsten von §2 aufgelöst. Die Startseite selbst zieht in
   einem eigenen Schritt nach — bis dahin weicht ihre Label-Ebene bewusst ab. */
/* ⚑⚑ `h2`, nicht `h5` (25.08.2026). Die vier Spaltenköpfe standen auf der FÜNFTEN Ebene —
   und weil die Fußzeile auf jeder Seite steht, sprang JEDE Seite am Ende von der ersten,
   zweiten oder dritten Ebene direkt auf die fünfte. 20 von 25 übersprungenen Ebenen der
   ganzen Website waren dieses eine Stück. Sichtbar war daran nie etwas; ein Vorleseprogramm
   meldet den Sprung auf jeder einzelnen Seite.
   ⚑ Die Erscheinung ändert sich NICHT — sie steht hier und hing noch nie an der Ebene.
   Die Fußzeile ist ein eigener Bereich (`<footer>`); ihre Spalten sind darin die oberste
   Gliederung, also h2. */
/* ⚑⚑ ZWEI Klassen im Selektor, und das ist kein Zufall: `body.start h2` in
   colors_and_type.css hebt auf der Startseite jedes h2 auf 58 px — und griff damit bis in
   die FUSSZEILE hinein, die dort schlagartig vier 58-px-Köpfe trug. Gemessen am 25.08.2026,
   Sekunden nachdem die Köpfe von h5 auf h2 gewechselt waren; mit h5 war das nie aufgefallen.
   Eine Seitenregel darf nicht in ein geteiltes Bauteil hineinreichen. Da die Website keinen
   `<main>`-Rahmen hat, an dem sich `body.start` festmachen ließe, gewinnt die Fußzeile
   hier über die Anzahl der Klassen (2 gegen 1) statt über die Reihenfolge — das hält
   unabhängig davon, welches Stilblatt zuerst geladen wird.
   ⚑ Gegenprobe bei jeder Änderung: `gesamtbild.py --quer`. Er hat genau diesen Fehler
   gemeldet (Fußzeilenhöhe 298 auf index.html gegen 253 überall sonst), bevor irgendjemand
   die Seite ansehen musste. */
.tp-footer .tp-footer__top h2 {
  font-family: var(--fz-sans);
  font-size: var(--tp-t-label); font-weight: 500; letter-spacing: .2em; text-transform: uppercase;
  color: var(--fz-grau); margin: 0 0 12px;
  /* ⚑ Auch die Zeilenhöhe steht hier ausgeschrieben. index.html hat in seinem eigenen
     Stilblock ein nacktes `h1,h2,h3{line-height:1}` — ein Rest der alten Insel. Es kommt
     NACH den verlinkten Stilblättern und gewann darum bei gleicher Spezifität: 11 px statt
     12,65 px, viermal, also gut 6 px weniger Fußzeilenhöhe auf der Startseite als überall
     sonst. Gemessen am 25.08.2026. Ein geteiltes Bauteil schreibt aus, was es braucht,
     statt sich auf Vererbung zu verlassen — sonst entscheidet die Ladereihenfolge. */
  line-height: var(--tp-leading-tight);
}
.tp-footer ul { list-style: none; padding: 0; margin: 0; }
.tp-footer li { margin: 0 0 7px; }
.tp-footer a {
  color: var(--fz-ink); text-decoration: none;
  font-family: var(--fz-serif); font-size: var(--tp-t-5);
}
/* Der gelbe Unterstrich ist die Handschrift der Startseite — kein gewöhnlicher Link-Strich,
   sondern ein Leuchtstift unter dem Wort. Er wandert mit der Fußzeile auf alle Seiten.
   ⚑ NUR beim Überfahren, ausdrücklich NICHT bei `:focus-visible`. Es gibt bereits einen
   globalen gelben Fokusring (3 px, `ds/colors_and_type.css` und der Stilblock der
   Startseite); käme der Leuchtstift dazu, wäre der Fokus zweifach gelb markiert — genau
   der Doppelring, den Percy am 10.08.2026 abgeschafft hat (Hausordnung §3). */
.tp-footer a:hover { background: linear-gradient(transparent 66%, var(--fz-gelb) 66%); }

/* ── Die sozialen Kanäle, unter der Anschrift ─────────────────────────────────────────
   ⚑ Die Zeichen sind INLINE-SVG, keine Bilddateien: vier Dateien mehr wären vier
   Anfragen mehr, und ein fehlendes Bild fiele als leerer Kasten auf. So sind sie da oder
   gar nicht. Die Farbe erbt vom Text — Markenfarben würden vier bunte Flecken in eine
   sonst zweifarbige Seite setzen. */
/* ⚑ Tippfläche 44×44 px (22 px Zeichen + 2×11 px Polster), nicht 32×32 wie zuerst — auf
   dem Handy sind vier kleine Zeichen nebeneinander sonst schwer zu treffen. Der negative
   linke Aussenabstand zieht das erste Zeichen wieder bündig unter die Anschrift; sonst
   stünde die Reihe um das Polster eingerückt. */
.tp-sozial { display: flex; gap: 2px; margin: 10px 0 0 -11px; }
.tp-sozial a { display: inline-flex; padding: 11px; color: var(--fz-grau); background: none; }
.tp-sozial a:hover, .tp-sozial a:focus-visible { color: var(--fz-ink); background: none; }
.tp-sozial svg { width: 22px; height: 22px; display: block; fill: currentColor; }

/* Nur für Vorleseprogramme: die Zeichen tragen keinen sichtbaren Namen, aber jedes
   braucht einen hörbaren. */
.tp-sr { position: absolute; width: 1px; height: 1px; overflow: hidden;
         clip-path: inset(50%); white-space: nowrap; }

/* ── Trägerschaft ────────────────────────────────────────────────────────────────────
   ⚑ «Unterstützt von» ohne die Namen — die stehen in den Wappen daneben. Der frühere
   volle Satz «Unterstützt vom Kanton Thurgau und der Stadt Bischofszell» nannte beide ein
   zweites Mal. Percy: «etwas präsenter», darum 56 px hohe Wappen statt einer Textzeile. */
.tp-traeger {
  border-top: 1px solid var(--fz-linie); margin-top: 36px; padding-top: 24px;
  display: flex; align-items: center; gap: clamp(20px, 3vw, 44px); flex-wrap: wrap;
}
.tp-traeger__wort {
  font-family: var(--fz-sans);
  font-size: var(--tp-t-label); font-weight: 500; letter-spacing: .2em; text-transform: uppercase;
  color: var(--fz-grau); white-space: nowrap;
}
.tp-traeger__logos { display: flex; align-items: center; gap: clamp(18px, 2.5vw, 36px); flex-wrap: wrap; }
.tp-traeger__logos img { height: 56px; width: auto; display: block; }

/* ── Das Rechtliche, klein ───────────────────────────────────────────────────────────
   «und das mit Impressum und so kleiner» (Percy, 24.08.2026) — 12 px in der Grotesk.
   ⚑ Die Hausordnung §2 nimmt Fußzeilen NICHT aus; hier stand einmal, sie tue es, und das
   war frei erfunden. §2 fordert ≥19 px für **Fließtext**; diese Zeile ist Seitenmöbel in
   Nunito Sans, kein Fließtext — und die 12 px sind Percys ausdrückliche Ansage. Wer sie
   ändern will, ändert damit seinen Entscheid, nicht eine Regelauslegung. */
.tp-footer__bot {
  border-top: 1px solid var(--fz-linie); margin-top: 22px; padding-top: 12px;
  display: flex; justify-content: space-between; gap: 8px 26px; flex-wrap: wrap;
  font-family: var(--fz-sans); font-size: var(--tp-t-label); color: var(--fz-grau);
}
.tp-footer__bot a { font-family: var(--fz-sans); font-size: var(--tp-t-label); color: var(--fz-grau); }

@media (max-width: 900px) {
  .tp-footer__top { grid-template-columns: 1fr 1fr; gap: 28px; }
  .tp-traeger { flex-direction: column; align-items: flex-start; gap: 14px; }
}
@media (max-width: 560px) {
  .tp-footer__top { grid-template-columns: 1fr; }
  .tp-footer__bot { flex-direction: column; gap: 6px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   Newsletter-Anmeldung — Percy-Entscheid 10.09.2026 («Ort C, Ton Werkstatt»).
   Zwei Formen derselben Sache: `--schmal` in der Fusszeile aller Seiten, `--voll`
   auf `aktuelles.html` und `kontakt.html`.

   ⚑⚑ DIE FUSSZEILE IST HELL. Die erste Fassung dieses Blocks stand auf dunklem
   Grund — schwarzes Eingabefeld, Label in Grau kalt (#bbbcbc). Der Grund war
   keine Messung, sondern meine eigene Vorschau: dort hatte ich die Fusszeile
   dunkel gezeichnet und diese Attrappe dann für die Wirklichkeit genommen.
   Tatsächlich läuft `.tp-footer` auf `background: transparent` mit `--fz-ink`.
   Das Label hätte damit 1.9:1 gehabt — nach CI Abschnitt 03 als Text verboten.
   Darum benutzt dieser Block jetzt DIESELBEN Token wie die Fusszeile ringsum
   (`--fz-ink`, `--fz-grau`, `--fz-linie`, `--fz-gelb`) und erfindet keine eigenen.
   ═══════════════════════════════════════════════════════════════════════════ */

.tp-nl {
  margin-top: 26px; padding-top: 20px;
  border-top: 1px solid var(--fz-linie, #dad8cf);
}
/* ⚑ Der Innenabstand der vollen Form ist von den Nachbarn abgelesen, nicht gewählt:
   `.tps-pagehead` (shared.css) und `.agrid` (aktuelles.html) laufen beide randlos mit
   56 px, unter 820 px mit 20 px. Eine eigene max-width hätte den Block gegen alles
   darüber versetzt. */
/* ⚑ Die `--fz-*`-Token sind auf `.tp-footer` definiert. Die volle Form steht AUSSERHALB
   der Fusszeile — dort griffen bisher nur die Rückfallwerte hinter dem Komma. Die
   stimmen zwar, aber ein Block, der von seinen eigenen Fallbacks lebt, sieht richtig
   aus und ist es nur zufällig. Darum hier ausdrücklich gesetzt. */
.tp-nl--voll {
  --fz-gelb:  var(--tp-yellow,    var(--gelb,  #ffcc00));
  --fz-ink:   var(--tp-ink,       var(--ink,   #1b1b18));
  --fz-grau:  var(--tp-ink-muted, var(--label, #5f5d54));
  --fz-linie: var(--tp-border,    var(--linie, #dad8cf));
  margin-top: 34px; padding: 20px 56px 64px;
}
@media (max-width: 820px) { .tp-nl--voll { padding: 18px 20px 48px; } }

.tp-nl__lab {
  display: block;
  font-family: var(--tp-font-sans, "Nunito Sans", sans-serif);
  font-weight: 700; font-size: 12px; letter-spacing: .14em; text-transform: uppercase;
  color: var(--fz-grau, #5f5d54);
  margin-bottom: 8px;
}
.tp-nl__satz { margin: 0 0 12px; max-width: 54ch; color: var(--fz-ink, #1b1b18); }

.tp-nl__form { display: block; }

/* ⚑ Die Feldreihe ist der einzige Flex-Container. War in der ersten Fassung das ganze
   `<form>` flex, lagen Label, Satz, Feld, Knopf und Kleintext als Geschwister
   nebeneinander — der Block riss auseinander (Satz links, Feld weit rechts). Im Bild
   sofort zu sehen, im Markup nicht. */
.tp-nl__reihe {
  display: flex; gap: 10px; flex-wrap: wrap; align-items: stretch;
  /* ⚑⚑ Breiter als der Satz darüber (54ch): drei Felder und ein Knopf brauchen den
     Platz, und eine Formularzeile ist kein Fliesstext — sie muss nicht auf Lesebreite.
     ⚑ 74ch (rund 740 px) waren zu wenig und der Umbruch blieb: gemessen wuchsen die drei
     Felder auf je 230 px, zusammen mit den Lücken 710 — und der Knopf (120) fiel in die
     zweite Zeile. In Zeichen zu rechnen war hier der Fehler: `ch` folgt der Schrift,
     nicht dem Inhalt der Zeile. */
  max-width: 900px;
}

/* ⚑⚑ Alle vier nebeneinander, solange der Platz reicht — Percy 10.09.2026: «Ich frag
   mich ja wirklich, warum du das nicht nebeneinander machst…» Er hat recht, und der
   Grund war eine Regel von mir, die sich selbst im Weg stand: `calc(50% - 5px)` zwang
   die beiden Namen auf eine eigene Zeile, weil zwei halbe Breiten schon die ganze sind.
   Jetzt wachsen alle drei Felder aus einer kleinen Grundbreite, und der Umbruch
   entsteht dort, wo er wirklich nötig ist — nicht dort, wo eine Zahl ihn erzwingt.
   ⚑ Die E-Mail-Adresse bekommt doppeltes Gewicht (`flex-grow: 2`): sie ist das Feld,
   auf das es ankommt, und «vorname.nachname@…» ist länger als jeder Name. */
.tp-nl__feld--name { flex: 1 1 120px; }

.tp-nl__feld {
  flex: 2 1 200px; min-width: 0;
  font-family: var(--tp-font-serif, "EB Garamond", Georgia, serif);
  font-size: 20px; padding: 11px 14px;
  border: 2px solid var(--fz-ink, #1b1b18);
  /* ⚑ Weiß wie jedes Formularfeld im Haus (`.gsform`). Hier stand bis 11.09.2026
     `var(--tp-panel, #fbfbf9)` — eine Marke, die es in der Website-Palette nicht gibt;
     der Rückfall griff also immer und war eine Fremdfarbe auf allen 29 Seiten
     (`farbbild.py`: 74 Stellen). Keiner der fünf Prüfstände vor dem Deploy sah es. */
  background: var(--tp-white, #ffffff);
  color: var(--fz-ink, #1b1b18);
}
/* ⚑ Formularelemente erben keine Textfarbe — der Platzhalter braucht seine eigene
   Angabe, sonst steht er im Systemgrau da (Hauslektion). #736f67 ist der geprüfte
   Hinweiston: 5.00 auf Weiss, 4.62 auf Papier. */
.tp-nl__feld::placeholder { color: var(--tp-hint); opacity: 1; }
.tp-nl__feld:focus-visible {
  outline: 3px solid var(--fz-gelb, #ffcc00); outline-offset: 2px;
}

.tp-nl__knopf {
  flex: 0 0 auto;
  font-family: var(--tp-font-sans, "Nunito Sans", sans-serif);
  font-weight: 700; font-size: 14px; letter-spacing: .04em;
  padding: 11px 24px; cursor: pointer; line-height: 1.2;
  border: 2px solid var(--fz-ink, #1b1b18);
  background: var(--fz-gelb, #ffcc00);
  color: var(--fz-ink, #1b1b18);      /* Schwarz auf Gelb: 13.9:1 */
}
/* ⚑⚑ Das Haus hellt Knöpfe im Hover über die Deckkraft auf, nicht über eine zweite Farbe:
   `.tp-btn:hover { opacity: .85 }` in `ds/site.css` gilt für jeden Knopf der Website. Hier
   stand stattdessen ein handgemischtes `#ffd633` — eine Farbe, die die Palette nicht kennt
   (Hausordnung §1). Sichtbar ist der Unterschied nicht: Hausgelb bei 85 % über Weiss ergibt
   #ffd426, also fast genau denselben Ton. Gemessen ist er trotzdem, auf JEDER Seite, weil
   das Newsletter-Feld in der Fusszeile steht — er machte den grössten Teil der «18 von 68
   Läufen mit Fremdfarben im Hover» aus, die seit dem 11.09.2026 im Register stehen.
   Nachgemessen 16.09.2026: danach bleibt dort nur noch `#e8e6e0` auf shop.html, und das ist
   eine eigene, schon vorgemerkte Gestaltungsfrage. */
.tp-nl__knopf:hover { opacity: .85; }
.tp-nl__knopf:focus-visible {
  outline: 3px solid var(--fz-gelb, #ffcc00); outline-offset: 2px;
}
.tp-nl__knopf[disabled] { opacity: .55; cursor: default; }

/* Der Honigtopf muss für Menschen unsichtbar sein, für Automaten aber ausfüllbar —
   `display:none` überspringen viele von ihnen. */
.tp-nl__topf { position: absolute; left: -9999px; width: 1px; height: 1px;
               overflow: hidden; }

/* ⚑⚑ 20 px, nicht 16 oder 17. HAUSORDNUNG §2 kennt für Fliesstext KEINE Ausnahme:
   «Grundschrift 20 px auf 1,55 — auf ALLEN Seiten» (Percy-Entscheid 25.08.2026). Der
   Unterschied zwischen dem Satz und diesen beiden Zeilen kommt über die FARBE
   (--fz-grau), nicht über die Grösse. Beim ersten Anlauf standen sie auf 16 px und
   `musterpruefung.py` meldete sie prompt auf beiden Seiten — dieselbe Regel hatte mich
   am Vormittag schon beim Einwilligungskasten erwischt. */
.tp-nl__meldung {
  margin: 10px 0 0; font-size: 20px; line-height: 1.45;
  color: var(--fz-grau, #5f5d54); min-height: 1.4em; max-width: 54ch;
}
.tp-nl__meldung--fehler { color: var(--tp-brick, #a8412b); }

.tp-nl__klein {
  font-size: 20px; line-height: 1.45; color: var(--fz-grau, #5f5d54);
  margin: 12px 0 0; max-width: 56ch;
}
.tp-nl__klein a { color: inherit; }

@media (max-width: 620px) {
  .tp-nl__reihe { gap: 8px; }
  .tp-nl__knopf { flex: 1 1 100%; }
}
