/* ═══════════════════════════════════════════════════════════════════════
 * HAUT „BETON" — die dritte Oberfläche
 *
 * Alles hier hängt an `.haut-beton`. Ohne diese Klasse ist die Datei
 * wirkungslos: die klassische Oberfläche bleibt Zeichen für Zeichen die
 * alte. Das ist Absicht — stil.css wird NICHT angefasst.
 *
 * Zwei Dinge unterscheiden diese Haut grundsätzlich von der alten:
 *
 *  1. KEINE feste Bühne. Das Original rechnet mit 640x400 und skaliert
 *     ganzzahlig hoch; hier wird der Platz genommen, der da ist.
 *  2. KEINE Datei aus orig/. Beton, Rasen, Rahmen und Kopfleiste sind
 *     Verläufe und Ränder. Das ist der eigentliche Zweck der Übung.
 *
 * Farben: heller Beton als Grund, Rasengrün trägt, Bernstein markiert,
 * Rot ist ausschliesslich Warnung.
 * ═══════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════
 * FARBEN — jeder Wert nachgerechnet (WCAG 2.x, sRGB).
 *
 * Die Zahl hinter jedem Ton ist sein Kontrast gegen den Seitengrund
 * #f2f0e8. Fliesstext braucht 4.5, grosse/fette Schrift und Bedienteile 3.0.
 * Vorher fielen ZWEI Töne durch, und ausgerechnet die beiden meistbenutzten:
 * --dunkelgrau (4.24) trug fast jede Nebenschrift, --gelb (3.09) fast jede
 * Beschriftung. Deshalb las sich der Mangel als „stellenweise" statt als
 * durchgehend — auf Zebrazeilen war er am schlimmsten (3.91).
 *
 * EIN Ton kann nicht fünf Aufgaben haben. Deshalb ist der alte --dunkelgrau
 * in zwei Rollen geteilt: --text2 für alles, was man LIEST (Spaltenköpfe,
 * Beschriftungen, Kleingedrucktes), --text3 nur für Gedämpftes (gesperrt,
 * Platzhalter, Einheiten).
 * ═══════════════════════════════════════════════════════════════════════ */
.haut-beton {
  /* ── Text ────────────────────────────────────────────────────────── */
  --text:   #23241f;   /* 14.8 — Namen, Zahlen, Überschriften */
  --text2:  #55564d;   /*  7.1 — Spaltenköpfe, Beschriftungen, klein */
  --text3:  #6a6b61;   /*  5.1 — gesperrt, Platzhalter, Einheiten */

  /* ── Bedeutungsfarben ────────────────────────────────────────────── */
  --akzent:      #3d661b;   /* 6.4 — genau EINE Hauptaktion je Schirm */
  --akzentTief:  #2f5213;   /* 8.5 */
  --akzentText:  #ffffff;   /* auf --akzent: 6.7 */
  --positiv:     #365c17;   /* 7.4 */
  --negativ:     #b5341f;   /* 5.7 — auch als Fläche: Weiss darauf 6.0 */
  --bernsteinText: #7d5c0b; /* 5.9 — Bernstein, wenn er SCHRIFT ist */
  --bernstein:     #e0a51f; /* 2.1 — nur Fläche/Balken, NIE Schrift */

  /* ── Flächen und Linien ──────────────────────────────────────────── */
  --grund:       #f2f0e8;   /* Seitengrund — dunkler als vorher, damit */
  --karte:       #fffefb;   /* die Karte als eigene Ebene lesbar wird */
  --zebra:       #f7f5ee;
  --linieHaar:   #cfcdc1;   /* Zeilenlinien */
  --linieKante:  #b5b2a4;   /* Kästen, Tabellenrand */
  --linie:       #23241f;   /* NUR 1px, höchstens zweimal je Schirm */

  /* ── Rückwärtskompatibilität ─────────────────────────────────────
   * stil.css kennt nur die alten Namen. Sie zeigen hier auf die neuen
   * Rollen, damit bestehende Regeln die Korrekturen mitbekommen, ohne
   * dass jede einzeln angefasst werden muss. */
  --schwarz: var(--text);
  --blau: var(--karte);
  --blauTief: var(--zebra);
  --marmor: var(--grund);   /* Seitengrund = Betonebene */
  --steinHell: #ffffff;
  --stein: var(--linieKante);
  --steinDunkel: var(--text);
  --gruen: var(--akzent);
  --rot: var(--negativ);
  --braun: #7a5c34;
  --hellgrau: var(--text);
  --dunkelgrau: var(--text2);
  --hellgruen: var(--positiv);
  --hellrot: var(--negativ);
  /* --gelb bleibt die FLÄCHE. Fast alle Textstellen mit --gelb lagen im
   * Original auf Navy (.titel, .reiter.aktiv, button.gewaehlt …); deren
   * Grund ist jetzt hell, dort wird weiter unten auf --text umgestellt. */
  --gelb: var(--bernstein);
  --weiss: var(--text);
  --papier: var(--karte);
  --papierDunkel: var(--linieKante);
  --linieSchwach: var(--linieHaar);
  --flaecheHell: var(--grund);

  /* ── Schrift ─────────────────────────────────────────────────────
   * EINE Familie. Vorher liefen drei nebeneinander (Avenir Condensed für
   * die Oberfläche, Menlo für Zahlen, Palatino für Fliesstext) — der
   * Wechsel mitten in einer Tabellenzeile ist ein Hauptgrund dafür, dass
   * die Schrift „hässlich" wirkte. Zahlen kommen jetzt über
   * `tabular-nums` aus derselben Familie, nicht aus einer zweiten.
   *
   * Avenir Next Condensed gibt es zudem nur auf dem Mac; auf Windows fiel
   * die ganze Haut auf Helvetica zurück und veränderte ihre Proportionen. */
  --schrift: system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --schriftZahl: var(--schrift);
  --schriftText: Palatino, "Palatino Linotype", Georgia, serif;  /* nur Zeitung */

  background: #1a1a1c;
  font-family: var(--schrift);
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum" 1, "zero" 1;
}

/* stil.css setzt die Schrift auf `html, body` — also direkt am body. Eine
 * Regel am <html> erbt da nicht durch, der body ueberschreibt sie wieder.
 * Deshalb muss der body hier ausdruecklich genannt werden, sonst bleibt
 * die ganze Oberflaeche Courier. */
.haut-beton body {
  font-family: var(--schrift);
  background: #1a1a1c;
}

/* ═══════════════════════════════════════════════════════════════════
 * 1 — DIE BÜHNE LOSLASSEN
 * Das Original hält 640x400 fest und skaliert ganzzahlig. Diese Haut
 * nimmt den ganzen Platz und schaltet die Pixelrasterung ab: erst dadurch
 * sehen Schrift und Kanten nach 32 Bit aus statt nach VGA.
 * (Die Skalierung selbst wird in spiel.js übersprungen — sonst würde
 * transform: scale() diese Regeln wieder überfahren.)
 * ═══════════════════════════════════════════════════════════════════ */
.haut-beton #huelle {
  position: absolute; inset: 0;
}
.haut-beton #buehne {
  width: 100%; height: 100%;
  max-width: 1440px; margin: 0 auto;
  transform: none !important;
  image-rendering: auto;
  -webkit-font-smoothing: antialiased;
  font-size: 13px; line-height: 1.45;
  color: var(--hellgrau);
  display: flex; flex-direction: column;
  overflow: hidden;
}
/* Zwischen Buehne und Kopfleiste liegt #spiel — DAS ist das Flex-Kind der
 * Buehne, nicht #kopf. Ohne diese Regel bleibt #spiel inhaltshoch, und
 * Inhalt samt Fusszeile enden auf halber Strecke mit Leere darunter. */
.haut-beton #spiel {
  flex: 1 1 auto; min-height: 0;
  flex-direction: column;
}
/* spiel.js schaltet #spiel per INLINE-Style zwischen none und block. Inline
 * schlaegt JEDE Regel aus dem Stylesheet — auch die spezifischste; ein
 * Attribut-Selektor waehlt zwar treffsicher aus, aendert an dieser Rangfolge
 * aber nichts. Also braucht es `!important`.
 *
 * Pauschal waere das falsch: dann liesse sich das Spiel nicht mehr hinter dem
 * Startbild verbergen. Der Selektor greift jedoch NUR, solange inline
 * tatsaechlich `block` steht — bei `none` trifft er nicht zu und das
 * Verbergen funktioniert unveraendert. */
.haut-beton #spiel[style*="display: block"],
.haut-beton #spiel[style*="display:block"] {
  display: flex !important;
}

/* Beton statt Marmor: zwei sehr flache Verläufe, kein Bild. */
.haut-beton #buehne,
.haut-beton .marmor {
  background-color: var(--marmor);
  background-image:
    linear-gradient(180deg, rgba(255,255,255,0.55), rgba(255,255,255,0) 40%),
    linear-gradient(92deg, rgba(0,0,0,0.03), rgba(0,0,0,0) 60%);
  background-size: auto;
}
/* .pix bleibt ABSICHTLICH pixelig.
 *
 * Hier stand `image-rendering: auto`, aus der falschen Annahme, „32 Bit"
 * hiesse ueberall glatt. Was `.pix` traegt, ist aber echte Pixelgrafik in
 * kleiner Aufloesung — Managerportraet, Wappen, Pokale. Glaettet man die beim
 * Hochskalieren, wird daraus Brei, nicht Moderne. Scharfe Kanten sind bei
 * Pixelbildern das Richtige; glatt gehoert nur, was nie gepixelt war (die
 * echten Vereinslogos setzen dafuer selbst `.echt`). */

/* ═══════════════════════════════════════════════════════════════════
 * 2 — KOPFLEISTE
 * Im Original eine Rahmengrafik mit absolut gesetzten Slots. Hier eine
 * Zeile aus Papier mit kräftiger Unterkante und dem Flutlichtschimmer.
 * ═══════════════════════════════════════════════════════════════════ */
.haut-beton #kopf {
  position: relative; inset: auto;
  height: auto; min-height: 62px;
  background: linear-gradient(180deg, #fdfcf8 0%, #efeee6 100%);
  border-bottom: 1px solid var(--linie);
  display: flex; align-items: center; gap: 14px;
  padding: 9px 16px;
  overflow: hidden;
  flex: none;
}
/* Der Flutlichtkegel — reine Atmosphäre, keine Grafik. */
.haut-beton #kopf::after {
  content: ""; position: absolute; top: -70%; right: 9%;
  width: 300px; height: 260%;
  background: linear-gradient(100deg, transparent, rgba(224,165,31,0.17), transparent);
  transform: rotate(17deg); pointer-events: none;
}
/* Die Slots sind im Original absolut positioniert — hier fliessen sie. */
.haut-beton #kopf .slot {
  position: relative; left: auto; top: auto; width: auto; height: auto;
  overflow: visible; z-index: 1;
}
/* Portraet und Wappen stehen nebeneinander und tragen deshalb DIESELBE
 * Kantenlaenge (--kopfBild). Wer sie aendert, aendert beide zugleich. */
.haut-beton #kopf { --kopfBild: 90px; }

.haut-beton #kopfPortrait { order: 1; flex: none; }
.haut-beton #kopfPortrait img {
  width: var(--kopfBild); height: var(--kopfBild); object-fit: cover;
  border: 1px solid var(--linie);
  display: block;
}
.haut-beton #kopfWappen { order: 2; flex: none; }
/* Das echte Wappen kommt als <img> aus spiel.js und traf hier frueher GAR
 * keine Regel — es fiel auf stil.css zurueck (`#kopfWappen img`, max-width
 * 90 %). Prozente laufen dort gegen einen Slot, den die Haut auf
 * `width: auto` stellt, also entschied die natuerliche Bildgroesse: 90 px
 * statt der gemeinten 46. Darum ausdruecklich setzen. */
.haut-beton #kopfWappen img {
  width: var(--kopfBild); height: var(--kopfBild);
  /* stil.css deckelt zusaetzlich auf 90 %/92 %. Ohne dieses Zuruecknehmen
   * beschnitte der Deckel die Breite oben wieder auf 81 px. */
  max-width: none; max-height: none;
  object-fit: contain; display: block;
}
/* Fehlt ein Logo, schreibt spiel.js ein <span> OHNE id — die frueher hier
 * stehende Regel auf `#wappen` griff deshalb nur bis zur ersten
 * Aktualisierung der Kopfleiste. Der Typselektor trifft beide Faelle. */
.haut-beton #kopfWappen span {
  display: flex; align-items: center; justify-content: center;
  width: var(--kopfBild); height: var(--kopfBild);
  background: var(--linie); color: var(--bernstein);
  border: none; font-size: calc(var(--kopfBild) * 0.31); font-weight: 700;
  font-family: var(--schrift); letter-spacing: -0.02em;
}
/* Name und Zusatz sind KINDER von #kopfVerein (Spalte), keine Geschwister —
 * deshalb wird hier der Kasten ausgerichtet und die Kinder einzeln gesetzt. */
.haut-beton #kopfVerein {
  order: 3; flex: 1 1 auto; min-width: 0;
  width: auto; height: auto;
  align-items: flex-start; justify-content: center;
  text-align: left; color: var(--linie);
}
.haut-beton #kopfVerein .kvName {
  font-size: 21px; font-weight: 600; letter-spacing: 0.02em;
  color: var(--linie);
}
.haut-beton #kopfVerein .kvUnter {
  font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--dunkelgrau); margin-top: 2px;
}
.haut-beton #kopfVerein .kvTrenn { color: var(--linieSchwach); }
/* Die Statuszeile im Kopf faerbt sich mit FESTEN Werten (#ccd3ec, #a6afd0,
 * #ffffff) — gedacht fuer hellen Text auf dem Navy des Originals. Auf Papier
 * ist das praktisch unsichtbar, und weil es keine Variablen sind, hilft die
 * neue Palette hier nichts. Jede Stelle muss einzeln nachgezogen werden. */
.haut-beton #kopf #kopfUnter .kuName { color: var(--linie); font-weight: 600; }
.haut-beton #kopf #kopfUnter .kuLvl { color: var(--dunkelgrau); }
.haut-beton #kopf #kopfUnter .kuPaar i { color: var(--dunkelgrau); }
.haut-beton #kopf #kopfUnter .kuPaar b { color: var(--linie); }
.haut-beton #kopf #kopfUnter .kuPaar b.gut { color: var(--akzent); }
.haut-beton #kopf #kopfUnter .kuPaar b.warn { color: var(--rot); }

/* stil.css nennt diesen Slot mit ZWEI Ids (2,0,0) — eine Regel ueber
 * `.haut-beton #kopf .slot` (1,2,0) verliert dagegen stillschweigend.
 * Also hier ebenfalls zwei Ids plus Klasse (2,1,0). */
.haut-beton #kopf #kopfUnter {
  order: 4; flex: none;
  position: relative; inset: auto; width: auto; height: auto;
  justify-content: flex-end; gap: 10px;
  font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--dunkelgrau);
}
.haut-beton #kopfSpieltag {
  order: 5; flex: none;
  font-family: var(--schriftZahl); font-size: 15px; font-weight: 600;
  color: var(--linie);
}
.haut-beton #kopfKalender {
  order: 6; flex: none;
  display: flex; align-items: baseline; gap: 5px;
  font-family: var(--schriftZahl); color: var(--linie);
}
.haut-beton #kopfKalender .kWtag,
.haut-beton #kopfKalender .kRest {
  font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--dunkelgrau);
}
.haut-beton #kopfKalender .kTag { font-size: 19px; font-weight: 700; }

/* ── Statusgruppe rechts ────────────────────────────────────────────
 * Ersetzt die drei alten Slots. Drei Zellen, EINE Grundlinie, getrennt
 * durch Haarlinien statt durch Kästen. Beschriftung klein und versal,
 * Wert gross und in Ziffern gleicher Breite — der Blick springt über die
 * Werte, nicht über die Wörter. */
.haut-beton #kopf #kopfUnter,
.haut-beton #kopfSpieltag,
.haut-beton #kopfKalender { display: none; }

/* ZWEI Ids plus Klasse (2,1,0). In stil.css steht `#kopf #kopfStatus`
 * (2,0,0) — das musste dort sein, um `#kopf .slot` zu schlagen, gewinnt
 * damit aber auch gegen ein einfaches `.haut-beton #kopfStatus` (1,1,0).
 * Beim Reparieren der klassischen Ansicht war die Gruppe hier verschwunden. */
.haut-beton #kopf #kopfStatus {
  display: flex; order: 5; flex: none;
  position: relative; inset: auto; width: auto; height: auto;
  margin-left: auto; z-index: 1;
  align-items: stretch;
}
.haut-beton .ksZelle {
  display: flex; flex-direction: column; justify-content: center;
  padding: 0 18px; min-width: 96px;
  border-left: 1px solid var(--linieHaar);
}
.haut-beton .ksZelle:first-child { border-left: none; }
.haut-beton .ksZelle i {
  font-style: normal; font-size: 10px; font-weight: 600;
  letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--text2); margin-bottom: 3px;
}
.haut-beton .ksZelle b {
  font-size: 19px; font-weight: 600; line-height: 1;
  font-variant-numeric: tabular-nums; color: var(--text);
}
/* Der Zusatz (Datum, Ligagrösse) ist ein Beiwert, kein zweiter Wert. */
.haut-beton .ksZelle b em {
  font-style: normal; font-size: 13px; font-weight: 400;
  color: var(--text3); margin-left: 5px;
}
.haut-beton .ksZelle b.gut  { color: var(--positiv); }
.haut-beton .ksZelle b.warn { color: var(--negativ); }

/* Der Flutlichtschimmer lag genau UNTER dieser Schrift und hob dort den
 * Grund an — messbar schlechterer Kontrast an der dichtesten Stelle.
 * Er wandert hinter Porträt und Wappen, wo nichts zu lesen ist. */
.haut-beton #kopf::after { right: auto; left: 12%; }

/* ═══════════════════════════════════════════════════════════════════
 * 3 — NAVIGATION
 * ═══════════════════════════════════════════════════════════════════ */
.haut-beton #reiter,
.haut-beton #unterreiter {
  position: relative; inset: auto; height: auto;
  display: flex; flex-wrap: wrap;
  background: #fffefb;
  border-bottom: 1px solid var(--linieSchwach);
  flex: none;
}
.haut-beton #unterreiter {
  background: var(--zebra);
  border-bottom: 1px solid var(--linie);
}
.haut-beton #reiter > *,
.haut-beton #unterreiter > * {
  position: relative; left: auto; top: auto; width: auto; height: auto;
  padding: 8px 15px;
  font-family: var(--schrift);
  font-size: 12px; letter-spacing: 0.13em; text-transform: uppercase;
  color: var(--dunkelgrau);
  background: none; border: none;
  border-right: 1px solid var(--linieSchwach);
  cursor: pointer;
}
.haut-beton #reiter > *:hover,
.haut-beton #unterreiter > *:hover { color: var(--linie); background: var(--zebra); }
.haut-beton #reiter > .aktiv,
.haut-beton #reiter > .an,
.haut-beton #unterreiter > .aktiv,
.haut-beton #unterreiter > .an {
  background: var(--akzent); color: var(--akzentText); font-weight: 600;
  box-shadow: inset 0 -3px 0 var(--akzentTief);
}

/* ═══════════════════════════════════════════════════════════════════
 * 4 — INHALT
 * ═══════════════════════════════════════════════════════════════════ */
.haut-beton #inhalt {
  position: relative; inset: auto;
  flex: 1 1 auto; min-height: 0;
  background: var(--flaecheHell);
  overflow: auto;
  padding: 0;
}
/* ═══════════════════════════════════════════════════════════════════════
 * SCHRIFTGRÖSSEN
 *
 * Hier stand `zoom: 1.35` auf #inhalt — als Abkürzung, um die für die
 * 640x400-Bühne gedachten 9–11px lesbar zu machen. Das war aus vier Gründen
 * falsch und ist ersatzlos weg:
 *
 *  1. `zoom` vergrössert Abstände genauso wie Schrift. Aus 5px Zellenpolster
 *     wurden 6,75px — man bezahlt eine bequeme Zeile und bekommt eine enge.
 *  2. Es kann keine Rangfolge reparieren, sondern vergrössert auch eine
 *     falsche: Tabellendaten und Kleingedrucktes standen beide auf 11px, die
 *     Anmerkung also genauso gross wie das, was sie anmerkt.
 *  3. Was ausserhalb von #inhalt liegt, wird NICHT mitskaliert. Das
 *     Spielerprofil hängt an #buehne (nachgemessen: `imInhalt: false`) und
 *     stand deshalb in echten 12,5px neben einer Oberfläche in 14,9px —
 *     ausgerechnet der dichteste Schirm war der kleinste.
 *  4. Jede px-Angabe im Quelltext wurde zur Lüge: man muss im Kopf mit 1,35
 *     multiplizieren, um zu wissen, was man sieht.
 *
 * Stattdessen elf ausgeschriebene Grössen. Untergrenze 11px, und die nur für
 * VERSALE Spaltenköpfe: Versalhöhe entspricht optisch etwa 13px Gemischt.
 * Darunter bricht Deutsch zuerst — Umlautpunkte verschmelzen mit der
 * Oberlänge, lange Zusammensetzungen sind nicht mehr auf einen Blick
 * unterscheidbar.
 * ═══════════════════════════════════════════════════════════════════════ */
.haut-beton #buehne { font-size: 14px; line-height: 1.45; }
.haut-beton .seite { padding: 16px 24px; }

/* Tabellen: Daten 13px, Kopf 11px versal. */
.haut-beton table { font-size: 13px; }
.haut-beton td {
  font-size: 13px; line-height: 18px;
  padding: 7px 9px;
  color: var(--text);
}
.haut-beton th {
  font-size: 11px; line-height: 14px;
  letter-spacing: 0.06em; font-weight: 600;
  padding: 8px 9px;
  color: var(--text2);
}
/* Zahlen: gleiche Familie, nur Ziffern gleicher Breite. Ein Wechsel auf
 * Menlo mitten in der Zeile war ein Hauptgrund für „hässliche Schrift". */
.haut-beton td.r, .haut-beton th.r, .haut-beton .zahl {
  font-family: var(--schrift);
  font-variant-numeric: tabular-nums;
  font-weight: 500; letter-spacing: 0.01em;
}
/* Kleingedrucktes ist KLEINER als die Daten, nicht grösser. */
.haut-beton .klein { font-size: 12px; line-height: 16px; color: var(--text2); }

/* Namen dürfen ausgeschrieben werden. `td { max-width:150px }` in stil.css
 * ist ein Rest der 640px-Bühne und schnitt Vereins- und Spielernamen auf
 * einem 1440px-Schirm ohne Not ab. */
.haut-beton td { max-width: none; }

/* ABSTAND TRENNT BESSER ALS EINE LINIE. `.spalten { gap: 4px }` ist der
 * Grund, warum die Kästen aneinandergeschweisst wirkten. */
.haut-beton .spalten { gap: 16px; }

/* BERNSTEIN ALS SCHRIFT. Im Original stand er auf Navy; diese Stellen haben
 * jetzt hellen Grund, wo #e0a51f nur noch 2.1 erreicht — praktisch
 * unsichtbar. Sie bekommen den dunklen Bernstein (5.4). */
.haut-beton .tvGruppe,
.haut-beton .bahn.an,
.haut-beton .bandeSlot .bsText,
.haut-beton .wtBranche {
  color: var(--bernsteinText);
}

/* Kästen: im Original Navy mit Steinrahmen, hier Papier mit Haarlinie. */
.haut-beton .flaeche,
.haut-beton .kasten,
.haut-beton .box {
  background: #fffefb;
  border: 1px solid var(--linieKante);
  color: var(--hellgrau);
  padding: 10px 12px;
}
.haut-beton .gut { color: var(--gruen); }
.haut-beton .schlecht { color: var(--rot); }

/* Überschriften */
.haut-beton h1, .haut-beton h2, .haut-beton h3,
.haut-beton .titel, .haut-beton .ueberschrift {
  font-family: var(--schrift);
  letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--linie); font-weight: 600;
}
.haut-beton h1 { font-size: 17px; }
.haut-beton h2 { font-size: 13px; }
.haut-beton h3 { font-size: 12px; }

/* ── Tabellen ── */
.haut-beton table { border-collapse: collapse; width: 100%; }
/* Nur noch Ausrichtung und Linien — Groesse und Farbe kommen aus der
 * Schriftstaffel weiter oben. Standen sie hier ein zweites Mal, gewann
 * wegen gleicher Spezifitaet die SPAETERE Regel und die Staffel lief ins
 * Leere: Zellen blieben 11px, Koepfe 10px. */
.haut-beton th {
  text-align: left; text-transform: uppercase;
  background: var(--zebra);
  border-bottom: 1px solid var(--linie);
  position: sticky; top: 0; z-index: 1;
}
.haut-beton td {
  border-bottom: 1px solid var(--linieHaar);
}
.haut-beton tbody tr:nth-child(even) { background: var(--zebra); }
.haut-beton tbody tr.gewaehlt,
.haut-beton tbody tr.markiert,
.haut-beton tbody tr.eigen {
  background: #f0ede0;
  box-shadow: inset 3px 0 0 var(--bernstein);
}
.haut-beton tbody tr.gewaehlt td,
.haut-beton tbody tr.markiert td,
.haut-beton tbody tr.eigen td { color: var(--text); }
/* Zahlen gehören in eine Zifferbreite, sonst tanzen die Spalten. */

/* ── Knöpfe ── */
.haut-beton button {
  font-family: var(--schrift);
  font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase;
  font-weight: 600;
  background: var(--akzent); color: var(--akzentText);
  border: none;
  box-shadow: inset 0 -1px 0 rgba(0,0,0,0.22);
  padding: 7px 13px; cursor: pointer;
}
.haut-beton button:hover { background: var(--akzentTief); }
.haut-beton button.matt,
.haut-beton button.aus {
  background: transparent; color: var(--linie);
  border: 1px solid var(--linie);
}
.haut-beton button.gewaehlt {
  background: var(--bernstein); color: var(--linie);
  border-bottom-color: #a8760a;
}
.haut-beton button.gross { font-size: 14px; padding: 10px 20px; }

/* Eingaben */
.haut-beton input, .haut-beton select, .haut-beton textarea {
  font-family: var(--schrift); font-size: 13px;
  background: #fff; color: var(--linie);
  border: 1px solid var(--linie); padding: 5px 7px;
}

/* ═══════════════════════════════════════════════════════════════════
 * 5 — DIE VIER BILDSTELLEN AUS orig/ ERSETZEN
 * ═══════════════════════════════════════════════════════════════════ */

/* Der Steinrahmen ist KEINE Datei, sondern ein eingebettetes SVG in
 * stil.css — dieselbe Optik, nur als data:-URI. Er malt ÜBER border-color,
 * also reicht es nicht, eine eigene Randfarbe zu setzen: die Quelle muss
 * ausdruecklich weg, sonst steht der Stein weiter um jeden Kasten. */
.haut-beton .flaeche,
.haut-beton .versenkt,
.haut-beton #kopf,
.haut-beton #fuss,
.haut-beton .reiter,
.haut-beton button,
.haut-beton .kalender {
  border-image: none;
  border-style: solid;
}

/* DER DICKE SCHWARZE RAHMEN — mein eigener Fehler.
 *
 * `.versenkt` bringt `border-width: 5px` mit, weil dort die Steingrafik
 * hineingespannt wurde: fünf Pixel Rahmen sind für ein BILD gedacht, nicht
 * für eine Linie. Ich habe die Grafik entfernt und die Breite stehen lassen —
 * seitdem malt der Rahmen fünf Pixel in der Randfarbe, also fast Schwarz.
 * Ein Kasten trennt sich hier über eine Haarlinie und den Grundton, nicht
 * über einen Balken. */
.haut-beton .versenkt {
  border-width: 1px;
  border-color: var(--linieSchwach);
  background: var(--flaecheHell);
}

/* Fusszeile: im Original absolut an der Unterkante der festen Buehne.
 * Hier laeuft sie im Fluss mit, sonst klebt sie ueber dem Inhalt. */
.haut-beton #fuss {
  position: relative; inset: auto;
  height: auto; flex: none;
  border: none; border-top: 1px solid var(--linie);
  background: var(--zebra);
  display: flex; justify-content: space-between; align-items: center;
  padding: 5px 16px;
  font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--dunkelgrau);
}

/* Ikonennavigation: Rahmengrafik → einfacher Rand. */
.haut-beton .ikonNav .ikn {
  border: 1px solid var(--linie);
  border-image: none;
  background: #fffefb;
}
.haut-beton .ikonNav .ikn:hover { background: var(--zebra); filter: none; }

/* Werbeszene: gekacheltes Rasenbild → gemähte Streifen als Verlauf. */
.haut-beton #werbeSzene {
  background: repeating-linear-gradient(90deg, #dde5d2 0 32px, #d5dfc9 32px 64px);
  background-size: auto;
  image-rendering: auto;
  border: 1px solid var(--linie);
}

/* Die Wortmarke des Originals hat in dieser Haut nichts verloren.
 * `!important` ist hier kein Schmierfett, sondern notwendig: die beiden
 * <img> tragen ein INLINE `display:block`, und das schlaegt jede Regel
 * aus dem Stylesheet. Ohne das Ausrufezeichen bliebe das Originalbanner
 * stehen — also genau das, was diese Haut vermeiden soll. */
.haut-beton img[src*="banner"] { display: none !important; }
.haut-beton #wortmarke { display: block; }
#wortmarke { display: none; }
.haut-beton #wortmarke {
  padding: 16px 14px 14px;
  border-bottom: 1px solid var(--linie);
  background: linear-gradient(180deg, #fdfcf8, #efeee6);
  position: relative; overflow: hidden;
}
.haut-beton #wortmarke::after {
  content: ""; position: absolute; top: -70%; right: 12%;
  width: 260px; height: 260%;
  background: linear-gradient(100deg, transparent, rgba(224,165,31,0.22), transparent);
  transform: rotate(17deg);
}
.haut-beton #wortmarke .wm {
  font-family: var(--schrift);
  font-size: 34px; font-weight: 700; line-height: 1;
  letter-spacing: 0.02em; color: var(--linie);
  position: relative; z-index: 1;
}
.haut-beton #wortmarke .wm em {
  font-style: normal; color: var(--akzent);
}
.haut-beton #wortmarke .wmUnter {
  margin-top: 5px; position: relative; z-index: 1;
  font-size: 10px; letter-spacing: 0.3em; text-transform: uppercase;
  color: var(--dunkelgrau);
}

/* ═══════════════════════════════════════════════════════════════════
 * 6 — DAS BANKHAUS
 * Drei eigene Gebäude statt orig/bank.png. Sichtbar ist immer genau eines;
 * welches, entscheidet waehleBankhaus() und schreibt es nach data-typ.
 * ═══════════════════════════════════════════════════════════════════ */
#bankHaus { display: none; }
.haut-beton #bankBild { display: none; }
.haut-beton #bankHaus {
  display: block; max-width: 282px; margin: 0 auto 6px;
  border: 1px solid var(--linie); background: #eef0ea;
}
.haut-beton #bankHaus .bankBau { display: none; width: 100%; height: auto; }
.haut-beton #bankHaus[data-typ="altstadt"] .bankBau[data-bank="altstadt"],
.haut-beton #bankHaus[data-typ="jh20"] .bankBau[data-bank="jh20"],
.haut-beton #bankHaus[data-typ="jh21"] .bankBau[data-bank="jh21"] { display: block; }

/* ═══════════════════════════════════════════════════════════════════
 * 7 — NACHBESSERUNGEN AUS DEM ERSTEN DURCHGANG
 * ═══════════════════════════════════════════════════════════════════ */

/* Knöpfe IN Tabellenzeilen und in Listen waren grüne Wände: in jeder Zeile
 * ein satter Block, im Stadion acht übereinander. Ein Knopf, den es pro
 * Zeile gibt, ist kein Hauptweg — er wird ruhig und faerbt sich erst beim
 * Zeigen. Ausserdem stand der Preis dunkelgruen auf gruen, also unlesbar. */
.haut-beton td button,
.haut-beton .seite[data-seite="stadion"] button,
.haut-beton #bankStaffel button {
  background: transparent; color: var(--linie);
  border: 1px solid var(--linieKante); border-bottom-width: 2px;
  font-weight: 600;
}
.haut-beton td button:hover,
.haut-beton .seite[data-seite="stadion"] button:hover,
.haut-beton #bankStaffel button:hover {
  background: var(--akzent); color: var(--akzentText);
  border-color: var(--akzentTief);
}
/* Der Preis steht als <span class="klein"> IM Knopf und holte sich seine
 * Farbe aus --dunkelgrau — auf dem gruenen Knopf war er praktisch
 * unsichtbar. Er erbt jetzt die Farbe des Knopfes, in jedem Zustand. */
.haut-beton .seite[data-seite="stadion"] button .klein,
.haut-beton td button .klein { color: inherit; opacity: 0.7; }

/* Markierte Zeilen: die eigene Elf traegt die Klasse `ich` und wurde
 * flaechig mit --gelb gefuellt — damit leuchtete die halbe Tabelle.
 * Markierung heisst hier ruhiger Grundton plus eine kraeftige Kante. */
.haut-beton tr.ich,
.haut-beton .staffelZeile.gewaehlt {
  background: #efeadb;
  color: var(--linie);
  box-shadow: inset 3px 0 0 var(--bernstein);
}
.haut-beton tr.ich td { color: var(--linie); }

/* Spielernamen (.profilLink) tragen ihre gepunktete Unterstreichung INLINE.
 * Inline schlaegt jede Regel hier — ohne `!important` bliebe der Schmutz
 * stehen. Beim Zeigen darf der Strich zurueckkommen, dann ist er Absicht. */
.haut-beton .profilLink {
  text-decoration: none !important;
  color: var(--linie);
}
.haut-beton .profilLink:hover {
  text-decoration: underline !important;
  color: var(--akzent);
}

/* Der Stadionriss ist ein <svg> in #stadionBild. Sein Navy und die Rangfarben
 * stehen IM Bild, nicht am Kasten — ein Hintergrund am Elternteil kam da nie
 * an. stadionSvg() liest sie jetzt aus diesen Variablen (mit Rueckfall auf
 * die alten Werte, damit klassisch unveraendert bleibt). */
.haut-beton {
  --rissGrund: #eef0ea;
  --rissRand: #23241f;
  --rissRang: #bcb9ae;      /* offener Rang: Beton */
  --rissRangDach: #9d9a90;  /* ueberdacht: dunkler, damit man es sieht */
  --rissRangHell: #cfc4ad;  /* Laufbahn/Umfeld */
}
.haut-beton #stadionBild { display: block; }
.haut-beton #stadionBild svg { display: block; width: 100%; height: auto; }

/* ═══════════════════════════════════════════════════════════════════
 * 8 — EMPFANGSSEITE
 * Die Eingangsseite fuer alle, die noch nicht angemeldet sind. Erst
 * wofuer, dann wie: Schlagzeile, Bild, vier Gruende, dann die Formulare.
 * ═══════════════════════════════════════════════════════════════════ */
.haut-beton #willkommen {
  max-width: 1080px; margin: 0 auto 22px;
}
.haut-beton .wilOben {
  display: flex; align-items: baseline; justify-content: space-between;
  border-bottom: 1px solid var(--linie);
  padding-bottom: 9px; margin-bottom: 22px;
}
.haut-beton .wilMarke {
  font-size: 27px; font-weight: 700; letter-spacing: 0.02em; color: var(--linie);
}
.haut-beton .wilMarke em { font-style: normal; color: var(--akzent); }
.haut-beton .wilKlein {
  font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--dunkelgrau);
}

/* Buehne: die Kulisse liegt vollflaechig darunter, der Text darueber.
 * Ein Verlauf von links legt sich als Schleier dazwischen — sonst steht die
 * Schrift IM Bild statt darauf und ist auf den Zuschauerreihen nicht mehr
 * zu lesen. Rechts laeuft er auf null aus, damit Bude und Abklatschen frei
 * bleiben. */
.haut-beton .wilBuehne {
  position: relative; display: block;
  min-height: 430px; margin-bottom: 26px;
  border: 1px solid var(--linie);
  overflow: hidden;
}
.haut-beton .wilKulisse {
  position: absolute; inset: 0;
  width: 100%; height: 100%; display: block;
}
.haut-beton .wilBuehne::after {
  content: ""; position: absolute; inset: 0; z-index: 1;
  pointer-events: none;
  background: linear-gradient(101deg,
    rgba(250,249,244,0.97) 0%,
    rgba(250,249,244,0.93) 30%,
    rgba(250,249,244,0.62) 45%,
    rgba(250,249,244,0.10) 60%,
    rgba(250,249,244,0) 70%);
}
.haut-beton .wilText {
  position: relative; z-index: 2;
  max-width: 54%; padding: 36px 32px;
}

/* MIT Schluesselbild: das Bild fuellt die Buehne in seinem eigenen
 * Seitenverhaeltnis, der Schleier faellt weg (er wuerde den eingebauten
 * Titel ueberdecken), und aus dem Textblock bleibt nur die Handlungsleiste
 * unter dem Bild. */
.haut-beton .mitFoto .wilBuehne { min-height: 0; }
.haut-beton .mitFoto .wilBuehne::after { display: none; }
/* `.mitFoto .wilKulisse` in stil.css und `.haut-beton .wilKulisse` hier sind
 * GLEICH spezifisch (je zwei Klassen) — dann entscheidet die Ladereihenfolge,
 * und haut.css kommt zuletzt. Die gezeichnete Kulisse blieb deshalb unter dem
 * Foto stehen. Drei Klassen stellen die Rangfolge wieder her. */
.haut-beton .mitFoto .wilKulisse { display: none; }
/* Kein Deckel: hier darf das Bild in seinem eigenen Seitenverhaeltnis stehen. */
.haut-beton .mitFoto .wilFoto { max-height: none; }

/* ── Anmelde-Auflage ── */
.haut-beton #anmeldeLade { background: rgba(20, 22, 18, 0.72); }
.haut-beton .alHuelle { max-width: 470px; }
.haut-beton .alHuelle .spalte {
  background: var(--flaecheHell);
  border: 1px solid var(--linie);
  box-shadow: 0 18px 44px rgba(0,0,0,0.34);
  padding: 4px 6px 10px;
}
.haut-beton .alHuelle .titel {
  font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--akzentText); background: var(--akzent);
  padding: 8px 12px; margin: -4px -6px 10px;
}
.haut-beton .alHuelle .zeile {
  display: flex; align-items: center; gap: 10px; margin-bottom: 8px;
}
.haut-beton .alHuelle input { width: 100%; }
/* Der Schliesser liegt auf dem gruenen Kopfbalken und gehoert optisch dazu:
 * durchsichtig statt als eigener Kasten, erst beim Zeigen ein roter Fleck. */
.haut-beton .alZu {
  top: 8px; right: 8px;
  width: 30px; height: 30px;
  background: transparent; color: var(--akzentText);
  border: none;
  font-size: 20px; font-weight: 400;
}
.haut-beton .alZu:hover { background: var(--rot); color: #fff; }
.haut-beton .mitFoto .wilText {
  max-width: none; padding: 18px 20px 20px;
  background: var(--flaecheHell);
  border-top: 1px solid var(--linieSchwach);
  display: flex; flex-wrap: wrap; align-items: center; gap: 14px 22px;
}
.haut-beton .mitFoto .wilHinweis { margin-top: 0; }
.haut-beton .wilSchlag {
  margin: 0 0 12px; font-size: 40px; line-height: 1.04;
  font-weight: 700; letter-spacing: 0.01em; text-transform: none;
  color: var(--linie);
}
.haut-beton .wilSatz {
  margin: 0 0 18px; max-width: 46ch;
  font-family: var(--schriftText); font-size: 15px; line-height: 1.5;
  color: var(--text);
}
.haut-beton .wilTaten { display: flex; gap: 10px; flex-wrap: wrap; }
.haut-beton .wilHaupt {
  background: var(--akzent); color: var(--akzentText);
  border: none;
  box-shadow: inset 0 -1px 0 rgba(0,0,0,0.22);
  padding: 12px 24px; font-size: 14px; font-weight: 600;
  letter-spacing: 0.13em; text-transform: uppercase; cursor: pointer;
  font-family: var(--schrift);
}
.haut-beton .wilHaupt:hover { background: var(--akzentTief); }
.haut-beton .wilNeben {
  background: transparent; color: var(--linie);
  border: 1px solid var(--linie);
  padding: 12px 24px; font-size: 14px; font-weight: 600;
  letter-spacing: 0.13em; text-transform: uppercase; cursor: pointer;
  font-family: var(--schrift);
}
.haut-beton .wilNeben:hover { background: var(--zebra); }
.haut-beton .wilHinweis {
  margin-top: 12px; font-size: 12px; color: var(--dunkelgrau);
}
.haut-beton .wilHinweis b { color: var(--linie); }

/* Vier Gruende — knappe Kaesten, keine Werbesprache. */
.haut-beton .wilPunkte {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px;
  border-top: 1px solid var(--linieSchwach); padding-top: 18px;
}
.haut-beton .wilPunkt h3 {
  margin: 0 0 5px; font-size: 12px; letter-spacing: 0.16em;
  text-transform: uppercase; color: var(--linie);
  border-left: 3px solid var(--akzent); padding-left: 8px;
}
.haut-beton .wilPunkt p {
  margin: 0; padding-left: 11px;
  font-size: 12px; line-height: 1.5; color: var(--dunkelgrau);
}
.haut-beton .wilFuss {
  margin-top: 20px; padding-top: 10px;
  border-top: 1px solid var(--linieSchwach);
  font-size: 11px; letter-spacing: 0.13em; text-transform: uppercase;
  color: var(--dunkelgrau); text-align: center;
}

/* Schmaler Schirm: Bild unter den Text, Gruende zweispaltig. */
@media (max-width: 900px) {
  /* Schmal wird der Schleier senkrecht: der Text sitzt oben, die Kulisse
   * bleibt darunter sichtbar. Waagerecht wuerde er hier alles zudecken. */
  .haut-beton .wilBuehne { min-height: 480px; }
  .haut-beton .wilBuehne::after {
    background: linear-gradient(184deg,
      rgba(250,249,244,0.97) 0%,
      rgba(250,249,244,0.92) 38%,
      rgba(250,249,244,0.45) 56%,
      rgba(250,249,244,0) 72%);
  }
  .haut-beton .wilText { max-width: none; padding: 24px 20px; }
  .haut-beton .wilPunkte { grid-template-columns: 1fr 1fr; }
  .haut-beton .wilSchlag { font-size: 30px; }
}

/* ═══════════════════════════════════════════════════════════════════
 * 9 — SCHIRME MIT FEST VERDRAHTETEM NAVY
 *
 * Spielerprofil und Nachrichten-Postfach faerben sich nicht ueber die
 * Palette, sondern mit festen Hexwerten (#212951, #131a3c, #0e1526 …).
 * Die neuen Variablen erreichen sie deshalb nicht — jede Stelle muss
 * einzeln nachgezogen werden, sonst bleiben diese Seiten dunkelblau,
 * waehrend der Rest hell ist.
 * ═══════════════════════════════════════════════════════════════════ */

/* ── Spielerprofil ── */
.haut-beton #profilOverlay { background: rgba(28, 30, 24, 0.72); }
.haut-beton .profilKarte {
  background: var(--flaecheHell);
  border: 1px solid var(--linie);
  box-shadow: 0 18px 48px rgba(0,0,0,0.34);
  color: var(--text);
  max-width: 900px;
}
.haut-beton .profilKopf {
  background: var(--akzent); color: var(--akzentText);
  border-bottom: none; font-size: 15px;
  letter-spacing: 0.06em; padding: 10px 14px;
}
.haut-beton .profilX {
  background: transparent; color: var(--akzentText);
  border: none; font-size: 18px; top: 8px; right: 8px;
  width: 28px; height: 28px;
}
.haut-beton .profilX:hover { background: var(--rot); color: #fff; }
.haut-beton .profilSpalte,
.haut-beton .profilBox {
  background: #fffefb; border: 1px solid var(--linieKante);
  color: var(--text); font-size: 12.5px;
}
.haut-beton .profilStat { font-size: 12.5px; }
.haut-beton .profilStat th { color: var(--dunkelgrau); }
.haut-beton .profilLink:hover { color: var(--akzent); }
/* Die Beschriftungen im Profil stehen in --gelb; auf Hell braucht das
 * eine dunklere Goldstufe, sonst leuchtet es weiss. */
.haut-beton .profilKarte .gut { color: var(--akzent); }
.haut-beton .profilKarte .schlecht { color: var(--rot); }

/* ── ABREISSKALENDER ────────────────────────────────────────────────
 * Ein GEGENSTAND, keine Tapete. Ein Kalenderpapier als Hintergrund unter
 * einer Tabelle wäre falsch: sein Linienraster schlägt gegen die eigenen
 * Zeilenlinien, und Papierkorn liegt genau dort, wo 13px-Schrift einen
 * ruhigen Grund braucht. Als einzelnes Blatt auf der Lage-Seite bringt er
 * die Requisite zurück und räumt zugleich das Datum aus der Kopfleiste.
 *
 * Die gerissene Unterkante ist ein clip-path, kein Bild. */
/* Spielangaben links, Kalenderblatt rechts daneben — beides in derselben
 * Zeile, damit der freie Platz im Kasten genutzt wird statt eine eigene
 * Spalte zu belegen. */
.haut-beton .lageOben {
  display: flex; align-items: flex-start; gap: 18px;
}
.haut-beton .lageOben #naechstes { flex: 1 1 auto; min-width: 0; }

.haut-beton #kalenderBlatt {
  display: block; width: 150px; flex: none; margin: 4px 4px 0 0;
  background: #f6f2e6;
  border: 1px solid var(--linieKante);
  text-align: center;
  padding-bottom: 12px;
  clip-path: polygon(
    0 0, 100% 0, 100% calc(100% - 5px),
    94% 100%, 88% calc(100% - 4px), 82% 100%, 76% calc(100% - 5px),
    70% 100%, 64% calc(100% - 3px), 58% 100%, 52% calc(100% - 5px),
    46% 100%, 40% calc(100% - 3px), 34% 100%, 28% calc(100% - 5px),
    22% 100%, 16% calc(100% - 4px), 10% 100%, 4% calc(100% - 4px),
    0 100%);
}
/* Der rote Kopfstreifen mit zwei ausgestanzten Löchern. */
.haut-beton #kalenderBlatt .kbBand {
  height: 20px; background: var(--negativ);
  display: flex; align-items: center; justify-content: center; gap: 46px;
}
.haut-beton #kalenderBlatt .kbBand i {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--karte);
  box-shadow: inset 0 1px 1px rgba(0,0,0,0.35);
}
.haut-beton #kalenderBlatt .kbTag {
  font-size: 56px; font-weight: 700; line-height: 1;
  font-variant-numeric: tabular-nums;
  color: var(--text); margin: 8px 0 2px;
}
.haut-beton #kalenderBlatt .kbMonat {
  font-size: 12px; font-weight: 600; letter-spacing: 0.14em;
  text-transform: uppercase; color: var(--text2);
}
.haut-beton #kalenderBlatt .kbWtag {
  font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--text3); margin-top: 3px;
}

/* ── WERBUNG ────────────────────────────────────────────────────────
 * Der Schirm war ein Fremdkörper: `.werbeTile` bildet ein hölzernes
 * Sponsorenbrett von 1991 nach (Verlauf #b89d72→#a08557, brauner Rand,
 * doppelte Fase), `.bandeSlot.frei` legt eine 45°-Schraffur in Navy auf
 * cremefarbenes Papier, `.schwarzBox` ist schlicht schwarz. Nichts davon
 * benutzt eine Variable, deshalb kam die helle Palette dort nie an.
 *
 * Dazu kam: jede Kachel trug einen satten grünen Knopf. Zehn Hauptaktionen
 * nebeneinander heissen, dass keine davon die Hauptaktion ist. */
.haut-beton .waTabelle { width: 100%; border-collapse: collapse; margin-bottom: 6px; }
.haut-beton .waTabelle td { padding: 8px 9px; vertical-align: middle; }
.haut-beton .waSponsor { display: flex; align-items: center; gap: 9px; }
.haut-beton .waSponsor img { height: 20px; max-width: 74px; object-fit: contain; }
.haut-beton .waSponsor span { font-weight: 500; }
/* Die Gesamtsumme ist die Zahl, die entscheidet — sie darf auffallen. */
.haut-beton .waGesamt { font-weight: 600; }
.haut-beton .waJob {
  font-size: 11px; font-weight: 600;
  background: #f6eede; color: var(--bernsteinText);
  padding: 2px 7px; white-space: nowrap;
}
/* Gesperrt wird AUSDRÜCKLICH gedämpft, nicht per opacity: die trübt Rand,
 * Logo und Schrift gleichzeitig ein und macht die Zeile milchig. */
.haut-beton .waTabelle tr.still td,
.haut-beton .waTabelle tr.still .zahl { color: var(--text3); }
.haut-beton .waStill { font-size: 12px; color: var(--text3); }
/* Aktion als Geisterknopf — Farbe erst beim Zeigen. */
.haut-beton .waTabelle button {
  background: transparent; color: var(--text);
  border: 1px solid var(--linie); box-shadow: none;
  font-size: 11px; padding: 5px 12px;
}
.haut-beton .waTabelle button:hover {
  background: var(--akzent); color: var(--akzentText); border-color: var(--akzentTief);
}

/* Bandenboard: belegte Plätze sind Karten, freie sind gestrichelt.
 * Eine Schraffur sagt „kaputt", eine gestrichelte Linie sagt „Platz". */
.haut-beton #werbeBoard { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.haut-beton .bandeSlot {
  background: var(--karte); border: 1px solid var(--linieKante);
  padding: 12px; min-height: 92px;
  display: flex; flex-direction: column; gap: 3px;
}
.haut-beton .bandeSlot.belegt { background: var(--karte); }
.haut-beton .bandeSlot.frei {
  background: #edebe1; border: 1px dashed var(--linieKante);
  align-items: center; justify-content: center;
}
.haut-beton .bandeSlot .bsName { font-size: 13px; font-weight: 500; color: var(--text); }
.haut-beton .bandeSlot .bsBetrag { font-size: 15px; font-weight: 600; color: var(--text); }
.haut-beton .bandeSlot .bsFrei {
  font-size: 12px; font-weight: 600; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--text3);
}
.haut-beton .bandeSlot button {
  background: none; border: none; box-shadow: none;
  color: var(--text2); font-size: 11px; padding: 0; margin-top: auto;
  align-self: flex-start; text-transform: uppercase; letter-spacing: 0.08em;
}
.haut-beton .bandeSlot button:hover { color: var(--negativ); text-decoration: underline; background: none; }

/* Die schwarzen Wertkästchen werden zu schlichten Zeilen. */
.haut-beton .schwarzBox {
  background: none; color: var(--text); font-weight: 600;
  border: none; padding: 0;
}
.haut-beton .schwarzZeile {
  display: flex; justify-content: space-between; align-items: baseline;
  padding: 6px 0; border-bottom: 1px solid var(--linieHaar);
}
.haut-beton .szLabel { font-size: 12px; color: var(--text2); }
/* `border-top: 2px solid #fff` — weiss auf creme, also unsichtbar. */
.haut-beton .werbeTrenner { border-top: 1px solid var(--linie); margin: 10px 0 4px; }

/* ── Fanlager ───────────────────────────────────────────────────────
 * `.zeile` ist `justify-content: space-between` — für ein kurzes
 * Label/Wert-Paar richtig, hier falsch: der Wert ist ein zweizeiliger
 * Absatz, wurde an den rechten Rand geschoben und die Folgezeilen
 * standen versetzt darunter. Hier gehört eine Beschreibungsliste hin:
 * Beschriftung links, Text bündig daneben. */
.haut-beton #fanLager .zeile {
  justify-content: flex-start;
  align-items: baseline;
  gap: 20px;
  padding: 10px 0;
  border-bottom: 1px solid var(--linieHaar);
}
.haut-beton #fanLager .zeile:last-child { border-bottom: none; }
.haut-beton #fanLager .zeile > span:last-child { flex: 1 1 auto; min-width: 0; }
.haut-beton #fanLager .zeile > span:last-child .klein { display: block; margin-top: 3px; }

/* ── Nachrichten-Postfach ── */
.haut-beton #nxWrap { background: #fffefb; border: 1px solid var(--linie); }
.haut-beton .nx-top { background: var(--zebra); border-bottom: 1px solid var(--linieSchwach); }
.haut-beton .nx-top h2 { color: var(--linie); font-size: 13px; }
.haut-beton .nx-chip {
  background: #fff; border: 1px solid var(--linieKante);
  color: var(--dunkelgrau); font-size: 11px;
}
.haut-beton .nx-body { grid-template-columns: 250px 1fr; }
.haut-beton .nx-list { background: #fffefb; border-right: 1px solid var(--linieSchwach); }
.haut-beton .nx-empty { color: var(--dunkelgrau); font-size: 12px; }
.haut-beton .nx-row { border-bottom: 1px solid var(--linieSchwach); }
.haut-beton .nx-row:hover { background: var(--zebra); }
.haut-beton .nx-row.sel { background: #efeadb; box-shadow: inset 3px 0 0 var(--akzent); }
.haut-beton .nx-row.unread .nx-from,
.haut-beton .nx-row.unread .nx-subj { color: var(--linie); }
.haut-beton .nx-from { color: var(--text); font-size: 12px; }
.haut-beton .nx-dot { background: var(--akzent); }

/* ═══════════════════════════════════════════════════════════════════
 * 10 — START- UND ANMELDESCHIRM
 * ═══════════════════════════════════════════════════════════════════ */
.haut-beton #start {
  background: var(--marmor);
  display: flex; flex-direction: column;
}
.haut-beton #start > div:last-child { flex: 1; }
.haut-beton #wahl { background: var(--flaecheHell); }
