/* Der Umschaltpunkt richtet sich nach dem Platz, den die LISTE hat -
   nicht nach der Fensterbreite. Dadurch wird sie auch in einem schmalen
   Panel zur Karte. */
.cs-liste {
  container-type: inline-size;
  container-name: liste;
}

.cs-liste__tabelle {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--cs-schrift-normal);
}
.cs-liste__tabelle th {
  text-align: left;
  padding: var(--cs-abstand-2) var(--cs-abstand-3);
  background: #f0f2ec;
  color: #4a5340;
  font-size: var(--cs-schrift-klein);
  white-space: nowrap;
}
.cs-liste__tabelle td {
  padding: var(--cs-abstand-2) var(--cs-abstand-3);
  border-top: 1px solid var(--cs-linie);
  vertical-align: top;
}
.cs-liste__tabelle tbody tr:nth-child(even) { background: #fbfcfa; }

.cs-liste__leer {
  padding: var(--cs-abstand-5) var(--cs-abstand-3);
  color: var(--cs-text-leise);
  text-align: center;
}

/* In der TABELLENFORM stehen die Aktionen nebeneinander.

   Ohne diese Regel bekommt die Spalte von der automatischen
   Tabellenaufteilung nur so viel Platz, wie der Rest uebrig laesst, und
   stapelt die Knoepfe untereinander - bei fuenf Aktionen also fuenf
   Zeilen. Gemessen an der Tourenliste: die Spalte bekam 132 statt der
   noetigen 511 Pixel, und JEDE Tabellenzeile wurde dadurch 128 bis 257
   Pixel hoch. Vom Betreiber gemeldet: "wenn ich sehr breite fenster habe
   sind die buttons rechts untereinander und brauchen unnoetig viel platz".

   Mit nowrap fordert die Spalte die Breite an, die sie braucht; der Platz
   kommt aus den Textspalten, die dank cs-langtext schmaler werden duerfen.

   Stand vorher zweimal einzeln da (#liste-guideinfo, #liste-touren) und
   fehlte bei fuenf weiteren Listen. Beim dritten Mal gehoert es in die
   Komponente - sonst braucht jede neue Liste denselben Eintrag.

   Auf der KARTE muss umgebrochen werden duerfen: dort ist die Zelle so
   breit wie die Karte. Jeder Kartenblock nimmt die Regel darum zurueck. */
.cs-liste__aktionen { white-space: nowrap; }

/* ACHTUNG: Angaben in PIXELN, nicht in rem. screen.css:8 setzt die
   Wurzel-Schriftgroesse auf 9pt = 12px - eine rem-Angabe waere hier also
   ein Viertel kleiner als erwartet (55rem = 660px statt 880px).

   Umschaltpunkt 880px, an den tatsaechlichen Containerbreiten
   ausgerichtet:
     390er Fenster  -> Container ~366  -> Karten
     768er Fenster  -> Container ~744  -> Karten (7 Spalten brauchen 941px)
    1024er Fenster  -> Container ~1000 -> Tabelle passt
    1440er Fenster  -> Container ~1150 -> Tabelle
   Bei 40rem blieb zwischen 640 und 940 eine seitwaerts scrollende Tabelle. */

/* ---- Karten ------------------------------------------------------------
   Unter 40rem verfuegbarer Breite wird aus jeder Zeile eine Karte.
   Gleiches DOM, andere Darstellung. */
@container liste (max-width: 880px) {

  .cs-liste__tabelle,
  .cs-liste__tabelle tbody,
  .cs-liste__tabelle tr,
  .cs-liste__tabelle td { display: block; }
  /* Auf der Karte duerfen die Aktionen umbrechen - die Zelle ist hier so
     breit wie die Karte. Nimmt die Grundregel zurueck (siehe .cs-liste__aktionen). */
  .cs-liste__aktionen { white-space: normal; }


  .cs-liste__tabelle thead { display: none; }

  .cs-liste__tabelle tr {
    margin-bottom: var(--cs-abstand-2);
    padding: var(--cs-abstand-3);
    background: var(--cs-flaeche);
    border: 1px solid var(--cs-linie);
    border-left: 3px solid var(--cs-linie);
    border-radius: var(--cs-radius);
  }
  .cs-liste__tabelle tbody tr:nth-child(even) { background: var(--cs-flaeche); }

  .cs-liste__tabelle td {
    padding: 2px 0;
    border-top: 0;
  }

  /* Beschriftung vor den Wert setzen - sie steht sonst nur im thead. */
  .cs-liste__tabelle td::before {
    content: attr(data-label) ": ";
    color: var(--cs-text-leise);
    font-size: var(--cs-schrift-klein);
  }

  /* Die Kopfzeile der Karte braucht keine Beschriftung. */
  .cs-liste__primaer {
    font-size: var(--cs-schrift-gross);
    font-weight: 600;
    margin-bottom: var(--cs-abstand-1);
  }
  .cs-liste__tabelle td.cs-liste__primaer::before { content: none; }
}

/* ---- Feldpriorisierung --------------------------------------------------
   Zurueckstufen, nicht weglassen. */
@container liste (max-width: 880px) {
  /* prio 2 bleibt sichtbar, aber leiser. */
  .cs-liste__tabelle td[data-prio="2"] {
    font-size: var(--cs-schrift-klein);
    color: var(--cs-text-leise);
  }

  /* Zellen ohne Aussage verschwinden auf der Karte - in der Tabelle
     bleiben sie, damit die Spalten stimmen. */
  .cs-liste__tabelle td[data-leer="ja"] { display: none; }

  /* prio 3 wird eingeklappt - NICHT entfernt. Sonst verlieren die
     mobilen Nutzer Daten, die am Desktop sichtbar sind. */
  .cs-liste__tabelle td[data-prio="3"] { display: none; }
  .cs-liste tr[data-detail="offen"] td[data-prio="3"] { display: block; }

  .cs-liste__mehr {
    display: inline-flex;
    align-items: center;
    min-height: var(--cs-ziel);
    margin-top: var(--cs-abstand-1);
    background: none;
    border: 0;
    padding: 0;
    color: var(--cs-gruen-dunkel);
    font-size: var(--cs-schrift-klein);
    cursor: pointer;
  }
}

/* Breit gibt es keinen Aufklapper - dort stehen alle Spalten ohnehin. */
@container liste (min-width: 881px) {
  .cs-liste__mehr { display: none; }
}

/* ---- Status und Aktionen ------------------------------------------------ */
.cs-status {
  display: inline-block;
  padding: 3px 9px;
  border-radius: 99px;
  font-size: var(--cs-schrift-klein);
  font-weight: 600;
  white-space: nowrap;
}
/* offen und gebucht lagen zu dicht beieinander (Delta R14/G6/B1) - auf dem
   Handy im Sonnenlicht nicht trennbar. Jetzt ueber Helligkeit UND Form:
   offen ist hell mit Rahmen, gebucht ist gefuellt und dunkler. */
.cs-status[data-art="offen"] {
  background: #f4faE6;
  color: #3f5c08;
  box-shadow: inset 0 0 0 1px #b7d16a;
}
.cs-status[data-art="gebucht"] { background: #2f7a25; color: #fff; }
.cs-status[data-art="zu"]      { background: #ececec; color: #555; }
/* vorbei war transparent und las sich dadurch nicht als Abzeichen,
   sondern wie versehentlich grauer Text. */
.cs-status[data-art="vorbei"] {
  background: #f2f2f2;
  color: #7a7a7a;
  box-shadow: inset 0 0 0 1px #e0e0e0;
}
/* "Keine Anmeldung" in der Tour-Uebersicht ist der Zustand, der Handeln
   verlangt - im Bestand ein Warndreieck. Mit einer der drei Arten darueber
   stuende der dringendste Fall so ruhig da wie der erledigte: "zu" ist grau,
   "offen" ist hellgruen. Darum eine vierte Art, gefuellt und deutlich waermer -
   sie unterscheidet sich von "gebucht" auch dann, wenn Rot und Gruen nicht
   getrennt werden koennen (Helligkeit 4,9:1 zu Weiss). */
.cs-status[data-art="warnung"] { background: #8a3b00; color: #fff; }

.cs-knopf {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  /* Abstand zwischen Symbol und Beschriftung. Bei den symbolonly-Knoepfen
     bleibt er wirkungslos: deren .cs-nur-sr steht absolut und ist damit kein
     Flex-Element mehr. */
  gap: var(--cs-abstand-2);
  min-height: var(--cs-ziel);
  padding: 0 var(--cs-abstand-3);
  margin: 2px 4px 2px 0;
  border: 1px solid #cfd8c0;
  border-radius: var(--cs-radius);
  /* Hintergrund und Schrift MUESSEN gesetzt sein, sonst sieht die Klasse auf
     <a> und auf <button> verschieden aus: der Browser gibt jedem <button>
     ein graues #efefef und seine eigene Systemschrift. Die Kalenderknoepfe
     (Bearbeiten/Loeschen, Neuer Eintrag) standen darum grau da.

     Ausdruecklich die UI-Schrift, NICHT "inherit": "Neuer Eintrag" steht in
     einem <h2> und haette geerbt die Markenschrift bekommen - derselbe Knopf
     saehe dann je nach Umgebung anders aus. */
  background: #fff;
  font-family: var(--cs-schrift-ui);
  color: #4a6b0a;
  text-decoration: none;
  font-size: var(--cs-schrift-klein);
  cursor: pointer;
}
.cs-knopf--primaer {
  background: var(--cs-gruen-hell);
  border-color: var(--cs-gruen-hell);
  color: #fff;
  font-weight: 600;
}

@container liste (max-width: 880px) {
  /* Muss ueber "td" qualifiziert werden - sonst gewinnt
     .cs-liste__tabelle td::before (0,1,2) gegen .cs-liste__statuszelle::before
     (0,1,1) und die Beschriftung bleibt stehen. Gleiche Bauart wie bei
     td.cs-liste__primaer::before weiter oben.
     .cs-liste__mehrzelle traegt kein data-label und erzeugt sonst ein
     freistehendes ": " in der Karte. */
  .cs-liste__tabelle td.cs-liste__statuszelle::before,
  .cs-liste__tabelle td.cs-liste__aktionen::before,
  .cs-liste__tabelle td.cs-liste__mehrzelle::before { content: none; }
  .cs-liste__aktionen { margin-top: var(--cs-abstand-2); }
}

/* ---- Abrechnungsuebersicht ----------------------------------------------
   Achtzehn Spalten: sechzehn Datenfelder, Zustand und Aufklapper. Die
   Tabelle braucht je nach Datenbestand 1296 bis 1335 Pixel (ueber fuenf
   Seiten gemessen). Im Inhaltsbereich eines 1440er Fensters stehen 1180
   zur Verfuegung - sie passt dort nicht.

   Der gemeinsame Umschaltpunkt von 880px greift fuer diese Liste also viel
   zu frueh. Dazwischen stand eine Tabelle, die die SEITE seitwaerts
   scrollen liess (gemessen bei 1440: window.scrollX 212) - genau der Fall,
   den die Komponente vermeiden soll.

   Diese Liste schaltet darum erst bei 1700px auf die Tabelle um: groesster
   gemessener Bedarf plus Reserve. Darunter gilt die Kartenform, in der die
   acht Einzelposten ordentlich hinter "Details" liegen.

   Die Kartenregeln stehen dafuer ein zweites Mal hier. Eine Container-
   Abfrage kann ihre Schwelle nicht aus einer Eigenschaft beziehen, und die
   gemeinsame Schwelle darf sich nicht verschieben - /meine-touren ist bei
   880px gemessen. Alle Angaben in PIXELN (siehe oben). */
@container liste (min-width: 881px) and (max-width: 1699px) {

  #liste-abrechnungen .cs-liste__tabelle,
  #liste-abrechnungen .cs-liste__tabelle tbody,
  #liste-abrechnungen .cs-liste__tabelle tr,
  #liste-abrechnungen .cs-liste__tabelle td { display: block; }
  /* Auf der Karte duerfen die Aktionen umbrechen - die Zelle ist hier so
     breit wie die Karte. Nimmt die Grundregel zurueck (siehe .cs-liste__aktionen). */
  #liste-abrechnungen .cs-liste__aktionen { white-space: normal; }


  #liste-abrechnungen .cs-liste__tabelle thead { display: none; }

  #liste-abrechnungen .cs-liste__tabelle tr {
    margin-bottom: var(--cs-abstand-2);
    padding: var(--cs-abstand-3);
    background: var(--cs-flaeche);
    border: 1px solid var(--cs-linie);
    border-left: 3px solid var(--cs-linie);
    border-radius: var(--cs-radius);
  }
  #liste-abrechnungen .cs-liste__tabelle tbody tr:nth-child(even) {
    background: var(--cs-flaeche);
  }

  #liste-abrechnungen .cs-liste__tabelle td {
    padding: 2px 0;
    border-top: 0;
  }
  #liste-abrechnungen .cs-liste__tabelle td::before {
    content: attr(data-label) ": ";
    color: var(--cs-text-leise);
    font-size: var(--cs-schrift-klein);
  }
  #liste-abrechnungen .cs-liste__primaer {
    font-size: var(--cs-schrift-gross);
    font-weight: 600;
    margin-bottom: var(--cs-abstand-1);
  }
  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__primaer::before { content: none; }

  #liste-abrechnungen .cs-liste__tabelle td[data-prio="2"] {
    font-size: var(--cs-schrift-klein);
    color: var(--cs-text-leise);
  }
  #liste-abrechnungen .cs-liste__tabelle td[data-leer="ja"] { display: none; }
  #liste-abrechnungen .cs-liste__tabelle td[data-prio="3"] { display: none; }
  #liste-abrechnungen tr[data-detail="offen"] td[data-prio="3"] { display: block; }

  /* Der Aufklapper ist ab 881px allgemein ausgeblendet. Hier wird er
     gebraucht - hier gilt die Karte. */
  #liste-abrechnungen .cs-liste__mehr {
    display: inline-flex;
    align-items: center;
    min-height: var(--cs-ziel);
    margin-top: var(--cs-abstand-1);
    background: none;
    border: 0;
    padding: 0;
    color: var(--cs-gruen-dunkel);
    font-size: var(--cs-schrift-klein);
    cursor: pointer;
  }

  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__statuszelle::before,
  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__aktionen::before,
  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__mehrzelle::before { content: none; }
  #liste-abrechnungen .cs-liste__aktionen { margin-top: var(--cs-abstand-2); }
}

/* Neun Betragsspalten - Tour bis Gesamt, Position 5 bis 13. Rechtsbuendig
   mit gleich breiten Ziffern, damit die Kommastellen untereinander liegen,
   und enger gesetzt: zwoelf Pixel je Seite sind an neun Spalten 216 Pixel,
   die der Tabelle sonst fehlen. Nur in der Tabellenform - auf der Karte
   steht der Betrag direkt hinter seiner Beschriftung. */
@container liste (min-width: 1700px) {
  #liste-abrechnungen .cs-liste__tabelle th:nth-child(n+5):nth-child(-n+13),
  #liste-abrechnungen .cs-liste__tabelle td:nth-child(n+5):nth-child(-n+13) {
    text-align: right;
    font-variant-numeric: tabular-nums;
    padding-left: 6px;
    padding-right: 6px;
  }
}

/* Die drei Summen standen bisher als Zeilen im Tabellenfuss. Sie sind keine
   Daten der Liste und stehen jetzt darunter - eine Zeile je Summe, die auf
   schmalen Fenstern umbricht statt die Tabelle zu verbreitern. */
.cs-summen,
.cs-bank {
  margin: var(--cs-abstand-4) 0;
}
.cs-summen__zeile,
.cs-bank__zeile {
  display: flex;
  flex-wrap: wrap;
  gap: var(--cs-abstand-2);
  padding: var(--cs-abstand-2) var(--cs-abstand-3);
}
.cs-summen__zeile {
  justify-content: space-between;
  border-top: 1px solid var(--cs-linie);
}
.cs-summen__wert {
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.cs-summen__zeile--gesamt {
  font-size: var(--cs-schrift-gross);
  border-top-width: 2px;
}
.cs-bank__zeile { padding: 2px var(--cs-abstand-3); }
.cs-bank__name  { color: var(--cs-text-leise); }

/* ---- Kontaktverweise ----------------------------------------------------
   Im Kollegen-Verzeichnis ist der Verweis das eigentliche Ziel der Seite:
   E-Mail und Rufnummer werden unterwegs angetippt, um jemanden zu erreichen.
   Als reiner Textverweis ist er rund 15 Pixel hoch - deutlich unter den 44
   Pixeln, die eine Fingerkuppe sicher trifft (--cs-ziel). Gemessen bei 390:
   53 der 111 Ziele lagen darunter, davon alle 53 Kontaktverweise.

   Nur auf der Karte. In der Tabellenform wird mit der Maus gezielt, dort
   wuerde die Hoehe die Zeilen bloss auseinanderziehen.
   Alle Angaben in PIXELN (siehe oben). */
@container liste (max-width: 880px) {
  .cs-kontakt {
    display: inline-flex;
    align-items: center;
    min-height: var(--cs-ziel);
  }
}

/* ---- Allgemeine Informationen -------------------------------------------
   Nachschlagematerial: Bemerkung und Adresse stehen ungekuerzt in der Karte.
   Beide bringen Zeichenketten mit, die fuer den Umbruch als EIN Wort gelten -
   eine Bemerkung enthaelt eine nackte Adresse mitten im Satz (84 Zeichen),
   die Adressen selbst sind bis zu 97 Zeichen lang. Ohne Umbruch an
   beliebiger Stelle schiebt so ein Wort die Karte auseinander.

   anywhere statt break-word: nur anywhere senkt auch die Mindestbreite der
   Zelle. Das haelt zusaetzlich die Tabellenform schmal genug, statt sie
   seitwaerts scrollen zu lassen.

   Ausdruecklich NUR an diesem Inhalt und nicht an der ganzen Zeile: auf alle
   Zellen angewandt senkt anywhere auch die Mindestbreite der Aktionsspalte -
   gemessen bei 1440 brach "Bearbeiten" dann mitten im Wort um und jede
   Tabellenzeile wurde 161 Pixel hoch. */
.cs-langtext { overflow-wrap: anywhere; }

/* Vier Aktionen je Zeile (Hoch, Runter, Bearbeiten, Loeschen) brauchen
   nebeneinander 317 Pixel. Die automatische Tabellenaufteilung gab der
   Spalte nur 192 und stapelte die Knoepfe auf drei Zeilen - gemessen bei
   1440 wurde dadurch JEDE Zeile 161 Pixel hoch. Mit nowrap fordert die
   Spalte ihre 317 Pixel an; der Platz kommt aus der Kommentarspalte, die
   dank cs-langtext beliebig schmal werden darf.
   Nur in der Tabellenform - auf der Karte stehen die Knoepfe ohnehin
   untereinander und duerfen umbrechen. */
@container liste (min-width: 881px) {
}

/* Die Adresse ist auf dieser Seite das Ziel: das Handout, die Karte, die
   Anleitung. screen.css:23 faerbt jeden Verweis schwarz und unterstreicht
   erst beim Ueberfahren mit der Maus - auf dem Handy gibt es kein
   Ueberfahren, dort bliebe der einzige Knopf der Seite als schwarzer Text
   stehen. Er bekommt darum die Farbe und die Unterstreichung fest. */
/* :link und :visited muessen mitgenannt werden, sonst greift screen.css:32
   (a:visited { color: #000 }) - dessen Spezifitaet (0,1,1) schlaegt eine
   reine Klasse (0,1,0). Ohne das war genau der Fall wieder da, den der
   Kommentar darueber verhindern soll: ein besuchter Verweis stand als
   schwarzer Text da. */
.cs-verweis,
a.cs-verweis:link,
a.cs-verweis:visited {
  color: var(--cs-gruen-dunkel);
  text-decoration: underline;
}

/* Angetippt wird er ausserdem mit dem Finger - dieselbe Zielhoehe wie bei
   den Kontaktverweisen im Kollegen-Verzeichnis, und nur dort, wo mit dem
   Finger gezielt wird. Auf der Karte darf die Kurzform ausserdem an jeder
   Stelle umbrechen: sie ist bis zu 36 Zeichen lang und enthaelt nicht
   zwingend ein Leerzeichen. In der Tabelle gilt das bewusst NICHT - dort
   zerfiele der Dateiname sonst in vier Zeilen, obwohl die Spalte reicht.
   Alle Angaben in PIXELN (siehe oben). */
@container liste (max-width: 880px) {
  .cs-verweis {
    display: inline-flex;
    align-items: center;
    min-height: var(--cs-ziel);
    overflow-wrap: anywhere;
  }
}

/* ---- Buchungsuebersicht (/touren/buchungen) -----------------------------
   Sechzehn Spalten: zwoelf Datenfelder, Kundenname, Zahlungszustand, Aktionen
   und Aufklapper.

   Die Kopfzeilen setzen sich hier um. Die allgemeine Regel gibt jedem
   Tabellenkopf white-space: nowrap; bei Beschriftungen wie
   "Haftungsausschlüsse", "Zahlungsart" oder "Buchungsnr." fordert das allein
   fuer die Koepfe mehr Platz an als der Inhalt braucht (gemessen: 1733px
   Mindestbreite ueber 37 Datensaetze). Umbruch mit Silbentrennung - die Seite
   ist als lang="de" ausgezeichnet - loest das ohne Datenverlust.

   Ausgenommen die Schaltflaechen: eine Beschriftung, die als "Bearbei-ten"
   dasteht, liest sich wie ein Fehler.
   Nur in der Tabellenform - auf der Karte gibt es keinen Tabellenkopf.
   Alle Angaben in PIXELN (siehe oben). */
/* Rufnummer und E-Mail-Adresse sind hier Verweise und muessen als solche zu
   erkennen sein: screen.css:23 faerbt jeden Verweis schwarz und unterstreicht
   erst beim Ueberfahren mit der Maus - auf dem Handy gibt es kein Ueberfahren.
   :link und :visited ausdruecklich, sonst schlaegt screen.css:32
   (a:visited { color: #000 }, Spezifitaet 0,1,1) die reine Klasse (0,1,0).
   Bewusst nur in dieser Liste: .cs-kontakt gilt auch im Kollegen-Verzeichnis
   und in der Buchungsliste auf "Tour bearbeiten" - beide sind abgenommen und
   werden hier nicht nachtraeglich umgefaerbt. */
#liste-buchungen .cs-kontakt,
#liste-buchungen a.cs-kontakt:link,
#liste-buchungen a.cs-kontakt:visited {
  color: var(--cs-gruen-dunkel);
  text-decoration: underline;
}

@container liste (min-width: 1700px) {
  #liste-buchungen .cs-liste__tabelle th { white-space: normal; }
  #liste-buchungen .cs-liste__tabelle th,
  #liste-buchungen .cs-liste__tabelle td { hyphens: auto; }
  #liste-buchungen .cs-knopf { hyphens: manual; }
}

/* Die Kartenform gilt hier deutlich laenger als sonst.
   Mit umbrechenden Koepfen und Silbentrennung braucht die Tabelle je nach
   Datenbestand 1263 bis 1362 Pixel (width:min-content, gemessen ueber 51
   Seiten zu je 20 Zeilen: 14 Seiten der echten Ansicht in allen sieben
   Sortierungen samt Stornos, dazu 37 Datensaetze aus 10 Seiten der
   Vorgabesortierung, 20 zufaelligen Seiten quer durch die 6635 verbundenen
   Buchungen und 7 Extremfaellen - laengster Tour-Name, laengster Kundenname,
   laengste Adresse, laengste Rufnummer, laengste Zahlungsart, hoechste
   Betraege, Stornos).

   Die OBERGRENZE liegt hoeher: legt man alle 6635 Buchungen in EINE Tabelle,
   treffen die laengsten Werte jeder Spalte zusammen und es sind 1427 Pixel.
   Genau das kann ein Filter erzeugen (z.B. Suche nach einem Nachnamen), darum
   ist das der Wert, an dem sich der Umschaltpunkt ausrichtet.

   Der gemeinsame Umschaltpunkt von 880px greift viel zu frueh: dazwischen
   stuende eine Tabelle, die nicht mehr passt und die SEITE seitwaerts scrollen
   laesst - genau der Fall, den die Komponente vermeiden soll. Diese Liste
   schaltet darum erst bei 1700px auf die Tabelle um: Obergrenze plus Reserve.
   Im Inhaltsbereich eines 1440er Fensters (rund 1150 Pixel) bleibt es damit
   bei der Karte, auf einem 1920er Bildschirm gibt es die Tabelle.

   Die Kartenregeln stehen dafuer ein zweites Mal hier. Eine Container-Abfrage
   kann ihre Schwelle nicht aus einer Eigenschaft beziehen, und die gemeinsame
   Schwelle darf sich nicht verschieben - /meine-touren ist bei 880px gemessen.
   Gleiche Bauart wie bei der Abrechnungsuebersicht und der Buchungsliste auf
   "Tour bearbeiten". Alle Angaben in PIXELN (siehe oben). */
@container liste (min-width: 520px) and (max-width: 1699px) {

  #liste-buchungen .cs-liste__tabelle,
  #liste-buchungen .cs-liste__tabelle tbody,
  #liste-buchungen .cs-liste__tabelle td { display: block; }
  /* Auf der Karte duerfen die Aktionen umbrechen - die Zelle ist hier so
     breit wie die Karte. Nimmt die Grundregel zurueck (siehe .cs-liste__aktionen). */
  #liste-buchungen .cs-liste__aktionen { white-space: normal; }


  #liste-buchungen .cs-liste__tabelle thead { display: none; }

  /* Auf breiten Geraeten steht EINE Karte je Zeile, ihr INHALT aber
     zweispaltig. Auf einem 1440er Bildschirm wird eine Karte sonst zu einer
     sehr langen, sehr duennen Liste aus Beschriftung-Wert-Zeilen, die den
     Platz nicht nutzt.

     (Karten NEBENEINANDER waren der erste Versuch und laut Betreiber
     schlechter: zwei Karten mit je zwoelf Feldern nebeneinander machen es
     unuebersichtlicher, nicht besser.)

     Titel, Aktionen und der Details-Knopf laufen ueber beide Spalten - sie
     gehoeren zur Karte als Ganzem, nicht in eine Feldspalte. */
  #liste-buchungen .cs-liste__tabelle tr {
    /* Bezugspunkt fuer den absolut verankerten Details-Knopf. */
    position: relative;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--cs-abstand-5);
    align-items: start;
  }
  /* Kopfzeile der Karte: Kundenname links, Tour-Name rechts daneben.
     Vorher lief der Name ueber die ganze Breite und die zwei bis drei Spalten
     daneben blieben LEER, waehrend der Tour-Name unten im Feldraster stand und
     dort umbrach - bei 28 bis 80 Zeichen Laenge sprangen die Kartenhoehen
     dadurch zwischen 199 und 220 Pixel.

     Der Tour-Name ist ueber sein data-label ansprechbar; die Komponente setzt
     es aus dem Spaltentitel. grid-row: 1 an beiden Zellen haelt sie zusammen in
     der ersten Zeile, die uebrigen Felder fliessen ab Zeile 2. */
  #liste-buchungen .cs-liste__tabelle td.cs-liste__primaer {
    grid-column: 1 / 2;
    grid-row: 1;
  }
  #liste-buchungen .cs-liste__tabelle td[data-label="Tour-Name"] {
    grid-column: 2 / -1;
    grid-row: 1;
    align-self: center;

    /* Einzeilig mit Auslassung. Das ist der eigentliche Zweck: ein langer
       Tour-Name darf die Kartenhoehe nicht mehr veraendern. Der vollstaendige
       Text bleibt im Dokument und damit fuer Vorleseprogramme lesbar. */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* Gemessen an einer echten Karte (274px hoch): Aktionen 60px und "Details"
     52px machten zusammen 41 Prozent der Hoehe - und beide schrumpfen durch
     keine Spaltenzahl. Mehr Spalten verdichten nur die 101px Feldflaeche,
     darum blieb der erste Versuch mit drei Spalten wirkungslos.

     Loesung: Aktionen und "Details" teilen sich EINE Zeile.

     Der Details-Knopf bekommt dafuer KEINE eigene Rasterspalte - das war der
     erste Versuch und falsch: bei zwei Spalten blieben den Aktionen nur 508
     statt 1016 Pixel, sie brachen um, waehrend rechts eine fast leere Spalte
     stand. Er wird stattdessen aus dem Raster genommen und unten rechts in der
     Karte verankert. Die Aktionen nutzen dadurch die ganze Breite; der
     Innenabstand rechts haelt den Platz fuer den Knopf frei. */
  #liste-buchungen .cs-liste__tabelle td.cs-liste__aktionen {
    grid-column: 1 / -1;
    padding-right: 120px;
  }
  #liste-buchungen .cs-liste__tabelle td.cs-liste__mehrzelle {
    position: absolute;
    right: var(--cs-abstand-3);
    bottom: var(--cs-abstand-3);
    text-align: right;
  }

  #liste-buchungen .cs-liste__tabelle tr {
    padding: var(--cs-abstand-3);
    background: var(--cs-flaeche);
    border: 1px solid var(--cs-linie);
    border-left: 3px solid var(--cs-linie);
    border-radius: var(--cs-radius);
  }
  #liste-buchungen .cs-liste__tabelle tbody tr:nth-child(even) {
    background: var(--cs-flaeche);
  }

  #liste-buchungen .cs-liste__tabelle td {
    padding: 2px 0;
    border-top: 0;
  }
  #liste-buchungen .cs-liste__tabelle td::before {
    content: attr(data-label) ": ";
    color: var(--cs-text-leise);
    font-size: var(--cs-schrift-klein);
  }
  #liste-buchungen .cs-liste__primaer {
    font-size: var(--cs-schrift-gross);
    font-weight: 600;
    margin-bottom: var(--cs-abstand-1);
  }
  #liste-buchungen .cs-liste__tabelle td.cs-liste__primaer::before { content: none; }

  #liste-buchungen .cs-liste__tabelle td[data-prio="2"] {
    font-size: var(--cs-schrift-klein);
    color: var(--cs-text-leise);
  }
  #liste-buchungen .cs-liste__tabelle td[data-leer="ja"] { display: none; }
  #liste-buchungen .cs-liste__tabelle td[data-prio="3"] { display: none; }
  #liste-buchungen tr[data-detail="offen"] td[data-prio="3"] { display: block; }

  /* Der Aufklapper ist ab 881px allgemein ausgeblendet. Hier wird er
     gebraucht - hier gilt die Karte. */
  #liste-buchungen .cs-liste__mehr {
    display: inline-flex;
    align-items: center;
    min-height: var(--cs-ziel);
    margin-top: var(--cs-abstand-1);
    background: none;
    border: 0;
    padding: 0;
    color: var(--cs-gruen-dunkel);
    font-size: var(--cs-schrift-klein);
    cursor: pointer;
  }

  #liste-buchungen .cs-liste__tabelle td.cs-liste__statuszelle::before,
  #liste-buchungen .cs-liste__tabelle td.cs-liste__aktionen::before,
  #liste-buchungen .cs-liste__tabelle td.cs-liste__mehrzelle::before { content: none; }
  #liste-buchungen .cs-liste__aktionen { margin-top: var(--cs-abstand-2); }

  /* KEINE 44px-Fingerhoehe in diesem Bereich. Hier steht die Karte auf einem
     Bildschirm ab 881px - dort wird mit der Maus gezielt. Die Fingerhoehe
     kostete nur Kartenhoehe: gemessen war die Rasterzeile mit der
     Buchungsnummer dadurch 48px statt 25px hoch, bei acht Feldern also rund
     23px je Karte.

     Vorher stand hier min-height: var(--cs-ziel) mit der Begruendung "wird
     auch hier mit dem Finger getroffen" - das trifft fuer einen 1440er
     Bildschirm nicht zu. Unter 881px gilt die Fingerhoehe weiter, sie steht
     im allgemeinen Kartenblock. */
  #liste-buchungen .cs-kontakt,
  #liste-buchungen .cs-verweis {
    display: inline-flex;
    align-items: center;
  }
}

/* Drei Spalten. Die Schwelle folgt der GEMESSENEN Eigenbreite der Felder, nicht
   einem Gefuehl: das breiteste Feld im Raster ist "Tour-Datum" mit 174px
   (danach Buchungsnr. 170, Gesamtpreis 148, Haftungsausschluesse 136, Stadt 114,
   Segways 72, Bezahlt 62). Der Tour-Name (611px) zaehlt nicht mit - er steht in
   der Kopfzeile und wird gekuerzt.

   Bedarf fuer drei Spalten: 3 x 174 + 2 x 24 Spaltenabstand + 24 Innenabstand
   = rund 594px. Mit Reserve also ab 780px.

   Frueher stand hier 1250px - viel zu vorsichtig, es blieb sehr viel Weissflaeche
   stehen. Die Obergrenze 1699 bleibt, weil darueber die Tabelle steht; verschiebt
   sich der Tabellen-Umschaltpunkt, gehoert sie mit verschoben. */
@container liste (min-width: 780px) and (max-width: 1699px) {
  #liste-buchungen .cs-liste__tabelle tr {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* ---- Tour-Uebersicht (/touren) ------------------------------------------
   Sechzehn Spalten: zwoelf Datenfelder, das Datum als Kartenkopf, der
   Aktiv-Zustand, Aktionen und Aufklapper.

   Gemessen im Browser bei 500px Fensterbreite lief die Bestands-Seite NICHT
   ueber (500/500) - die Tabelle war aber 693px breit in einem 476px-Behaelter
   und 100 von 164 Bedienelementen lagen ausserhalb des Sichtfelds. Der Schaden
   war unsichtbar; genau darum ging es.

   Rufnummern gibt es hier nicht, dafuer drei Verweise je Zeile (Tour-Name,
   Tour-Guide, Bearbeiten). screen.css:23 faerbt jeden Verweis schwarz und
   unterstreicht erst beim Ueberfahren mit der Maus - auf dem Handy gibt es kein
   Ueberfahren. :link und :visited ausdruecklich, sonst schlaegt screen.css:32
   (a:visited { color: #000 }, Spezifitaet 0,1,1) die reine Klasse (0,1,0).
   .cs-verweis bringt Farbe und Unterstreichung allgemein schon mit; hier steht
   nur noch die Sammel-Leiste, die keine eigene Klasse an den Verweisen hat.
   Alle Angaben in PIXELN (siehe oben). */

/* Die Sammelbearbeitung. Im Bestand ein <div> mit
   style="background: #ddd; padding: 2px 0px 0px 6px;" - grau auf grau, 2px
   Innenabstand oben und keiner unten. Sie steht AUSSERHALB der Liste und wird
   von der Umstellung nicht beruehrt; nur die Verweise brauchen Farbe und eine
   Trefferflaeche, weil sie auf dem Handy sonst als schwarzer Text dastehen. */
.cs-sammel {
  margin-top: var(--cs-abstand-2);
  padding: var(--cs-abstand-2) var(--cs-abstand-3);
  background: var(--cs-flaeche-leise);
  border-radius: var(--cs-radius);
  font-size: var(--cs-schrift-klein);
  color: var(--cs-text-leise);
}
.cs-sammel a,
.cs-sammel a:link,
.cs-sammel a:visited {
  color: var(--cs-gruen-dunkel);
  text-decoration: underline;
}
/* Angetippt wird mit dem Finger - nur dort, wo das zutrifft. Auf dem
   Schreibtisch zoegen 44px die Leiste bloss auseinander.
   Hier ausnahmsweise eine Fenster- statt einer Container-Abfrage: die Leiste
   steht AUSSERHALB von .cs-liste, ein @container liste greift dort nicht. */
@media (max-width: 519px) {
  .cs-sammel a {
    display: inline-flex;
    align-items: center;
    min-height: var(--cs-ziel);
  }
}

/* Tabellenform: lange Koepfe umbrechen, Aktionen NICHT.
   Sie gilt erst ab 1810px - siehe die Herleitung im Kartenblock darunter. */
@container liste (min-width: 1810px) {
  /* Die allgemeine Regel gibt jedem Tabellenkopf white-space: nowrap. Bei
     "Mindestteilnehmer" und "Guide-Anmeldung" fordert das allein fuer die Koepfe
     mehr Platz an, als der Inhalt braucht ("6" bzw. ein Abzeichen). Umbruch mit
     Silbentrennung - die Seite ist als lang="de" ausgezeichnet - loest das ohne
     Datenverlust. */
  #liste-touren .cs-liste__tabelle th { white-space: normal; }
  /* Silbentrennung NUR in den Koepfen. In den Zellen richtete sie Schaden an:
     die Tabellenaufteilung machte daraus "Seg-way", "Knu-mo" und
     "Baden-Ba-den" - Werte, die kurz genug sind, um ganz dazustehen, sahen
     dadurch nach Fehler aus. Die langen Werte dieser Liste (Tour-Name,
     Guide-Name) enthalten Leerzeichen und brechen ohnehin um; anders als in der
     Buchungsuebersicht, wo "Vorkasse/Überweisung" fuer den Umbruch EIN Wort ist
     und die Trennung dort gebraucht wird. */
  #liste-touren .cs-liste__tabelle th { hyphens: auto; }

  /* Fuenf Aktionen je Zeile (Aktivieren, Bearbeiten, Buchung anlegen, Kopieren,
     Loeschen) brauchen nebeneinander 511 Pixel. Die automatische
     Tabellenaufteilung gab der Spalte 132 und stapelte die Knoepfe auf fuenf
     Zeilen - gemessen wurde JEDE Tabellenzeile dadurch 128 bis 257 Pixel hoch,
     und zwar bis 2000 Pixel Containerbreite hinauf. Mit nowrap fordert die
     Spalte ihre 511 Pixel an. Gleiche Bauart und gleiche Begruendung wie bei
     #liste-guideinfo weiter oben.
     Nur in der Tabellenform - auf der Karte stehen die Knoepfe ohnehin
     untereinander und duerfen umbrechen. */
}

/* Das Ankreuzfeld der Sammelbearbeitung.
   Kennung und onclick kommen unveraendert aus dem Bestand, damit
   selectedTours[], markTours() und tourBulkProcessing() weiterarbeiten.

   Gemessen auf /touren bei 390px war das Feld 22px hoch - die Haelfte der 44px,
   die eine Fingerkuppe sicher trifft. base.css:82 loest das bereits, und
   ausdruecklich NICHT ueber die Hoehe ("Checkboxen bleiben bewusst 22px"):
   11px Aussenabstand ringsum machen aus dem 22px-Feld eine 44px grosse Flaeche.
   Aussenabstand allein nimmt aber keinen Klick an - dafuer steht das Feld hier
   in einem <label>. Dessen Kasten umschliesst den Aussenabstand und ist damit
   44x44 gross; ein Klick darin geht an das Ankreuzfeld, samt dessen onclick.
   Kein height, kein Pseudo-Element - beides waere doppelt. */
.cs-auswahl {
  display: inline-flex;
  align-items: center;
}

/* Das Ankreuzfeld liegt in JEDER Kartenbreite oben links in der Karte -
   verankert, nicht im Feldraster. Im Bestand war es die erste Spalte; dort
   gehoert es hin, weil man von links nach rechts abhakt.
   Eine eigene Rasterspalte bekommt es NICHT: bei zwei Spalten haette ein 22px
   breites Feld die halbe Karte belegt. Gleiche Bauart wie der Details-Knopf
   unten rechts.

   left/top: 0 setzt die 44px grosse Trefferflaeche in die Ecke der Karte; das
   Datum ruecken 36px Innenabstand aus dem Weg, damit seine ersten Zeichen nicht
   IN der Trefferflaeche liegen und ein Klick darauf das Feld umschaltet
   (nachgemessen, siehe tourenkarte.mjs). */
@container liste (max-width: 1809px) {
  #liste-touren .cs-liste__tabelle tr { position: relative; }
  /* top: 5px, nicht 0. Gemessen bei 688px: die Mitte des Kaestchens lag bei
     y=23, die Mitte des Datumstextes daneben bei y=28 - das Kaestchen stand
     also fuenf Pixel zu hoch ("die checkbox zur batch-auswahl ist etwas zu
     hoch"). Die Differenz kommt daher, dass das Kaestchen 22px hoch ist und
     mit 11px Rand in einer Zelle ohne Innenabstand sitzt, waehrend die
     Datumszeile die groessere Schriftgroesse traegt. */
  #liste-touren .cs-liste__tabelle td[data-label="Auswahl"] {
    position: absolute;
    left: 0;
    top: 5px;
    padding: 0;
  }

  /* Die Beschriftung "Tour-Name: " entfaellt in JEDER Kartenbreite, nicht nur
     auf dem Handy: der Name steht direkt unter dem Datum und ist als Verweis
     gesetzt - eine Ansage braucht er nicht. Vom Betreiber: "tour-name als titel
     kann auch bei breiteren geräten entfallen". */
  #liste-touren .cs-liste__tabelle td[data-label="Tour-Name"]::before { content: none; }
  /* Muss ueber "td" qualifiziert werden - sonst gewinnt
     .cs-liste__tabelle td::before (0,1,2) gegen die reine Attributregel und die
     Beschriftung "Auswahl: " bleibt neben dem Kaestchen stehen. Gleiche Bauart
     wie bei td.cs-liste__primaer::before. */
  #liste-touren .cs-liste__tabelle td[data-label="Auswahl"]::before { content: none; }
  #liste-touren .cs-liste__tabelle td.cs-liste__primaer { padding-left: 36px; }
}

/* ---- Tour-Karte auf dem Handy: zwei Felder je Zeile ---------------------
   Gemessen bei 400px Fenster: die Karte war 535px hoch, 20 Touren also rund
   10.700px Scrollweg. Der Betreiber: "welche der felder können auch mobile auf
   50/50 zusammen in eine zeile?"

   Nutzbare Kartenbreite 348px, also 174px je Spalte. Eigenbedarf je Feld
   einschliesslich Beschriftung, gemessen an der ersten Zeile:

     Uhrzeit 164 | Stadt 165        -> passt
     Segways 166 | Freie Plaetze 77 -> passt
     Tour-Guide 105 | Guides 48     -> passt (und beantwortet, dass Verweis und
                                       Anzahl der Guides zusammen gehoeren)
     Preis 75 | Aktiv 69            -> passt
     Typ 73 | Mindestteilnehmer 132 -> passt (beide hinter "Details")
     Guide-Anmeldung 279            -> passt NICHT, bleibt ganze Zeile
     Tour-Name 401, Aktionen 435    -> bleiben ganze Zeile

   Die Reihenfolge wird ueber order gesetzt, nicht ueber die Feldfolge im
   Markup. Ohne das reisst "Guide-Anmeldung" als ganze Zeile das Paar
   Tour-Guide/Guides auseinander: die automatische Platzierung folgt der
   Dokumentfolge, und dort steht die Anmeldung zwischen den beiden.

   Die Beschriftung "Tour-Name: " entfaellt hier - der Name steht direkt unter
   dem Datum und braucht keine Ansage ("mobile braucht es auch den titel
   'Tour-Namen' nicht"). Alle Angaben in PIXELN (siehe oben). */
@container liste (max-width: 519px) {

  /* align-items: baseline, nicht start. Mit start klebt jedes Feld an der
     Oberkante SEINER Zelle - und das sieht verschoben aus, sobald die beiden
     Felder eines Paares unterschiedlich hoch beginnen. Gemessen an
     "Tour-Guide: Uwe (+1)" gegen "Preis: 89,00 €": 26px Versatz. Ursache ist
     nicht die Zeile, sondern der Verweis im Guide-Feld - er hat unter 520px
     eine 44px hohe Trefferflaeche und sein Text sitzt darin mittig, waehrend
     der Preis als reiner Text oben anliegt.

     Mit baseline liegen die ersten Textlinien beider Felder auf einer Linie.
     Das ist auch bei mehrzeiligen Feldern richtig ("Segways: 2 von 4 gebucht"
     bricht auf zwei Zeilen, die erste bleibt auf Hoehe von "Freie Plaetze"). */
  #liste-touren .cs-liste__tabelle tr {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--cs-abstand-4);
    align-items: baseline;
  }

  /* Ganze Zeile: zu breit fuer eine Haelfte, oder Ueberschrift der Karte. */
  #liste-touren .cs-liste__tabelle td.cs-liste__primaer,
  #liste-touren .cs-liste__tabelle td[data-label="Tour-Name"],
  #liste-touren .cs-liste__tabelle td[data-label="Guide-Anmeldung"],
  #liste-touren .cs-liste__tabelle td.cs-liste__aktionen {
    grid-column: 1 / -1;
  }

  /* Oben rechts in der Ecke steht das Zustands-Abzeichen, nicht als Rasterfeld,
     sondern absolut an der Karte - genau wie das Auswahlkaestchen links.

     Warum ueberhaupt absolut: als halbe Rasterspalte blieben dem Datum nur
     146px (bei 360px Fenster) bzw. 161px (bei 390px). Der Datumstext braucht
     130px, dazu 36px Einzug fuer das Kaestchen - macht 166px. Das Datum brach
     also auf ZWEI Zeilen um, und weil das Kaestchen absolut haengt, stand es
     danach 14px ueber der Textmitte. Genau das war als "die checkbox hängt
     jetzt tiefer als das datum" zu sehen - die Ursache lag beim Datum, nicht
     beim Kaestchen. Absolut gesetzt bekommt das Datum die ganze Kartenbreite
     zurueck und bricht nicht mehr um.

     Zuerst stand hier der Preis. Der Betreiber hat getauscht: "das aktiv feld
     gefällt mir noch nicht, mach es auch oben rechts in die ecke". Das
     Abzeichen ist die richtige Wahl fuer diese Stelle - es ist ein Zustand der
     ganzen Tour, kein Messwert unter anderen.

     top: 16px und nicht 5px wie beim Kaestchen gegenueber. Beide haengen absolut
     an derselben Karte, aber das Kaestchen bringt 11px Eigenrand mit
     (base.css: input[type=checkbox] { margin: 11px }) - sichtbar beginnt es
     also ebenfalls bei 16px. Das Abzeichen hat keinen Rand; mit 5px stand es
     zehn Pixel ueber der Mitte der Datumszeile ("aktiv hängt noch zu hoch").
     Gemessen, nicht geschaetzt: Datumstext beginnt 17px unter der Kartenkante,
     ist 22px hoch, das Abzeichen 24px - seine Oberkante gehoert damit auf 16px. */
  #liste-touren .cs-liste__tabelle td[data-label="Aktiv"] {
    position: absolute;
    right: var(--cs-abstand-3);
    top: 16px;
    padding: 0;
    text-align: right;
  }
  #liste-touren .cs-liste__tabelle td[data-label="Aktiv"]::before { content: none; }

  /* Beschriftungen, die nur Platz kosten. Der Tour-Name steht direkt unter dem
     Datum und braucht keine Ansage. Uhrzeit und Stadt sind an ihrer Form
     erkennbar ("10:00 - 12:00 Uhr", "Baden-Baden (100)") - MIT Beschriftung
     brachen beide auf zwei Zeilen um, weil in einer halben Kartenbreite von
     rund 166px kein Platz fuer "Uhrzeit: " davor ist. Vom Betreiber:
     "entferne mobil die feldtitel uhrzeit und stadt, damit die zeilenumbrüche
     entfallen".

     Nur hier, unter 520px. Ab 520px ist die Karte zwei- bis dreispaltig, dort
     ist Platz und die Beschriftung hilft beim Zuordnen. */
  #liste-touren .cs-liste__tabelle td[data-label="Uhrzeit"]::before,
  #liste-touren .cs-liste__tabelle td[data-label="Stadt"]::before { content: none; }

  /* Die Kopfzeile nimmt an der Textlinien-Ausrichtung NICHT teil.
     Das Auswahlkaestchen haengt absolut an der Karte (top gemessen), das Datum
     dagegen ist ein Rasterfeld - mit align-items: baseline verschiebt es sich
     je nach Inhalt der Zeile. Gemessen: mit 5px stand das Kaestchen bei 390px
     vierzehn Pixel zu hoch, mit 19px bei 480px vierzehn zu tief. Ein fester
     Wert kann das nicht treffen, weil die Ursache wandert.

     Mit align-self: start beginnt die Kopfzeile immer am Zeilenanfang, und der
     eine gemessene Wert stimmt in jeder Breite. Die uebrigen Paare behalten
     ihre Ausrichtung an der Textlinie - dort ist sie richtig. */
  #liste-touren .cs-liste__tabelle td.cs-liste__primaer,
  #liste-touren .cs-liste__tabelle td[data-label="Preis"] {
    align-self: start;
  }

  /* Der Guide-Verweis hat hier eine 44px hohe Trefferflaeche (allgemeiner
     Kartenblock) und zentriert seinen Text darin. Damit liegt die Textlinie
     des Feldes 16px tiefer als die des Partners rechts daneben - gemessen
     "Tour-Guide: Uwe" gegen "Guides: 1".

     align-items: baseline im Verweis SELBST loest das: seine Grundlinie wird
     die des Textes, und die Ausrichtung der Karte (align-items: baseline am
     tr) hat damit etwas Verwertbares. Versatz 16px -> 4px, bei unveraenderter
     Trefferflaeche von 44px und unveraenderter Kartenhoehe.

     Zwei Alternativen waren messbar schlechter: vertical-align: middle brachte
     nur 14px, und Innenabstand statt Mindesthoehe (13px bzw. 11px oben/unten)
     verschlechterte es auf 17 bzw. 15px - dabei waere auch die Trefferflaeche
     ueber das Feld darunter gewachsen.

     Dieselbe Ursache steckt in der Buchungsuebersicht; die ist aber abgenommen
     und wird hier nicht mitgeaendert. */
  #liste-touren .cs-verweis { align-items: baseline; }

  /* Der Guide-Verweis wird hier zu gewoehnlichem inline-Text. Als inline-flex
     ist er ein UNTEILBARER Kasten: bricht der Name in sich um - und
     "KNUMO Guide noch nicht festgelegt!" tut das bei 390px immer, er steht an
     10.416 von 19.447 Touren -, ist der Kasten zweizeilig, und die Klammer
     dahinter findet daneben keinen Platz mehr. Sie landete auf einer DRITTEN
     Zeile, gemessen 23px unter der letzten Namenszeile. Das geschuetzte
     Leerzeichen im Markup half dagegen nicht, weil der Umbruch nicht zwischen
     Name und Klammer passiert, sondern IM Kasten.

     Vom Betreiber gemeldet: "in der aktuellen ansicht ist der guide (1) in
     einer extra zeile mobil, statt hinter Guide noch nicht festgelegt".

     Dieselbe Falle und dieselbe Loesung wie beim Tour-Namen in der Kopfzeile.
     Der Preis dafuer: die 44px hohe Trefferflaeche entfaellt fuer diesen einen
     Verweis. Der Innenabstand haelt ihn bei rund 34px - kleiner als das Ziel,
     aber groesser als reiner Text, und ohne die Trefferflaeche ueber das Feld
     darunter zu legen. */
  #liste-touren .cs-liste__tabelle td[data-label="Tour-Guide"] .cs-verweis {
    display: inline;
    min-height: 0;
    padding: 6px 0;
  }

  /* Paare. Die Werte sind bewusst gestreut, damit spaeter ein Feld dazwischen
     passt, ohne alles neu zu numerieren.

     Die Reihenfolge ergibt:
       Datum                    [Aktiv]     <- ganze Zeile, Abzeichen absolut rechts
       Tour-Name                            <- ganze Zeile
       Uhrzeit           | Stadt
       Mindestteilnehmer | Tour-Guide       <- Guide ist oft ZWEIZEILIG,
       Preis             |    (2. Zeile)       darum spannt er ueber beide Zeilen
       Geraete           | Freie Plaetze
       Guide-Anmeldung                      <- ganze Zeile, direkt darunter
       Aktionen                             <- ganze Zeile

     Der Preis sitzt in der Luecke, die der zweizeilige Guide links laesst -
     "der preis könnte unter mindestteilnehmer (links) - die Tour-Guide Inhalte
     sind oft zweizeilig". Damit das aufgeht, spannt das Guide-Feld ueber zwei
     Rasterzeilen und die drei linken Felder sind fest auf Spalte 1 gebunden;
     ohne die Bindung zoege die automatische Platzierung den Preis nach rechts.

     In der LINKEN Spalte stehen damit untereinander: Mindestteilnehmer, Preis,
     Geraete.

     Fuenf Entscheidungen des Betreibers stecken darin:
     - "die mindestteilnehmer bitte hoch über die gebuchten Segways": sie steht
       direkt UEBER den Geraeten (beide linke Spalte) und ist die Schwelle, an
       der die Buchungslage darunter gemessen wird. Geraete und Freie Plaetze
       bleiben dabei als Paar beisammen - die Mindestzahl direkt NEBEN die
       Geraete zu setzen haette dieses Paar auseinandergerissen.
     - "Der Preis kann hoch rechts neben das datum".
     - "das feld Guide-Anmeldung bitte unter die Geräte": ganze Zeile, direkt
       nach dem Geraete-Paar. Halbe Breite geht dort nicht - das Abzeichen
       "Anmeldung geschlossen" allein ist breiter als eine Kartenhaelfte. */
  #liste-touren .cs-liste__tabelle td.cs-liste__primaer            { order: 10; }
  #liste-touren .cs-liste__tabelle td[data-label="Preis"]          { order: 15; }
  #liste-touren .cs-liste__tabelle td[data-label="Tour-Name"]      { order: 20; }
  #liste-touren .cs-liste__tabelle td[data-label="Uhrzeit"]        { order: 30; }
  #liste-touren .cs-liste__tabelle td[data-label="Stadt"]          { order: 40; }
  #liste-touren .cs-liste__tabelle td[data-label="Mindestteilnehmer"] { order: 45; grid-column: 1; }
  #liste-touren .cs-liste__tabelle td[data-label="Tour-Guide"]     { order: 48; grid-column: 2; grid-row: span 2; }
  #liste-touren .cs-liste__tabelle td[data-label="Preis"]          { order: 49; grid-column: 1; }
  #liste-touren .cs-liste__tabelle td[data-label="Geräte"]         { order: 50; grid-column: 1; }
  #liste-touren .cs-liste__tabelle td[data-label="Freie Plätze"]   { order: 60; grid-column: 2; }
  #liste-touren .cs-liste__tabelle td[data-label="Guide-Anmeldung"] { order: 65; }
  #liste-touren .cs-liste__tabelle td.cs-liste__aktionen           { order: 140; }
}

/* Die Kartenform gilt hier laenger als bei jeder anderen Liste.
   Mit umbrechenden Koepfen braucht die Tabelle je nach Datenbestand 1607 bis
   1761 Pixel (width:min-content, gemessen ueber 46 Seiten zu je 20 Zeilen: die
   fuenf Sortierungen der Ansicht mit je vier Seiten, 20 zufaellige Seiten quer
   durch die 19447 Touren und 13 Extremfaelle - laengster Tour-Name, laengster
   Guide-Name, ohne Guide, hoechster Preis, meiste Segways, meiste Zusatz-Guides,
   inaktiv, beide Anmeldezustaende, Knumo, Zeilen mit fehlenden Fremdschluesseln
   sowie eine Seite, die die Extremwerte aller Spalten zusammenlegt).

   Die OBERGRENZE liegt bei 1769 Pixeln: das ist die Summe der groessten
   Mindestbreite JE SPALTE ueber alle Seiten. Treffen die Extremwerte mehrerer
   Spalten auf einer Seite zusammen - genau das kann ein Filter erzeugen -, ist
   das der Wert. Daran richtet sich der Umschaltpunkt aus: 1810px.

   Den groessten Anteil haben die Aktionen mit 535 Pixeln. Diese Liste hat FUENF
   Aktionen je Zeile; im Bestand waren es vier Symbole plus das Aktiv-Kaestchen,
   nur unbeschriftet und in einer Tabelle, die aus ihrem Behaelter herauslief.
   Auf einem 1920er Bildschirm (Inhaltsbereich rund 1630) bleibt es damit bei der
   Karte; die Tabelle gibt es erst darueber. Das ist gewollt: die Alternative
   waere eine Tabelle, in der die Knoepfe auf fuenf Zeilen stapeln und JEDE Zeile
   128 bis 257 Pixel hoch wird (gemessen bis 2000px Containerbreite hinauf).

   Silbentrennung in den ZELLEN wuerde die Tabelle auf 1623 Pixel druecken und
   den Umschaltpunkt auf 1680 - genutzt haette das niemandem: ein 1920er
   Bildschirm bleibt in beiden Faellen bei der Karte, dafuer stuenden in der
   Tabelle "Seg-way" und "Knu-mo". Darum die 1810 mit ungetrennten Werten.

   Die Kartenregeln stehen dafuer ein zweites Mal hier. Eine Container-Abfrage
   kann ihre Schwelle nicht aus einer Eigenschaft beziehen, und die gemeinsame
   Schwelle von 880px darf sich nicht verschieben - /meine-touren ist dort
   gemessen. Gleiche Bauart wie bei der Buchungsuebersicht.
   Alle Angaben in PIXELN (siehe oben). */
@container liste (min-width: 520px) and (max-width: 1809px) {

  #liste-touren .cs-liste__tabelle,
  #liste-touren .cs-liste__tabelle tbody,
  #liste-touren .cs-liste__tabelle td { display: block; }
  /* Auf der Karte duerfen die Aktionen umbrechen - die Zelle ist hier so
     breit wie die Karte. Nimmt die Grundregel zurueck (siehe .cs-liste__aktionen). */
  #liste-touren .cs-liste__aktionen { white-space: normal; }


  #liste-touren .cs-liste__tabelle thead { display: none; }

  /* Auf breiteren Geraeten steht EINE Karte je Zeile, ihr INHALT aber
     mehrspaltig. Karten NEBENEINANDER waren beim ersten Versuch an der
     Buchungsuebersicht dabei und laut Betreiber schlechter - das Raster sitzt
     darum auf dem tr, nicht auf dem tbody. */
  #liste-touren .cs-liste__tabelle tr {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--cs-abstand-5);
    align-items: start;
  }

  /* Kopfzeile der Karte: Datum links, Tour-Name rechts daneben.
     Der Tour-Name ist mit 612 Pixeln Eigenbreite das laengste Feld der Liste
     (bis 97 Zeichen, gemessen in tour_title). Stuende er im Feldraster, brachte
     er dort um und die Kartenhoehe sprang von Zeile zu Zeile. Einzeilig mit
     Auslassung: der vollstaendige Text bleibt im Dokument und damit fuer
     Vorleseprogramme lesbar.
     grid-row: 1 an beiden Zellen haelt sie zusammen in der ersten Zeile, die
     uebrigen Felder fliessen ab Zeile 2. */
  #liste-touren .cs-liste__tabelle td.cs-liste__primaer {
    grid-column: 1 / 2;
    grid-row: 1;
  }
  #liste-touren .cs-liste__tabelle td[data-label="Tour-Name"] {
    grid-column: 2 / -1;
    grid-row: 1;
    align-self: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* Die Aktionen nehmen die ganze Zeile. Der Innenabstand rechts, der bei der
     Buchungsuebersicht den Platz fuer den "Details"-Knopf freihaelt, entfaellt
     hier: diese Liste hat keinen solchen Knopf mehr (Typ und
     Mindestteilnehmer stehen auf prio 2, siehe touroverview.phtml). Ohne diese
     Zeile waeren 120px am rechten Rand nur Luft. */
  #liste-touren .cs-liste__tabelle td.cs-liste__aktionen {
    grid-column: 1 / -1;
  }

  /* Der Abstand zwischen den Karten steht im allgemeinen Kartenblock, der nur
     bis 880px gilt. Ohne ihn stossen die Karten ab 881px aneinander -
     nachgemessen: Luecke 8px bei 868px Containerbreite, 0px bei 1118px. Zwei
     Karten ohne Luecke lesen sich als eine. */
  #liste-touren .cs-liste__tabelle tr {
    margin-bottom: var(--cs-abstand-2);
    padding: var(--cs-abstand-3);
    background: var(--cs-flaeche);
    border: 1px solid var(--cs-linie);
    border-left: 3px solid var(--cs-linie);
    border-radius: var(--cs-radius);
  }
  #liste-touren .cs-liste__tabelle tbody tr:nth-child(even) {
    background: var(--cs-flaeche);
  }

  #liste-touren .cs-liste__tabelle td {
    padding: 2px 0;
    border-top: 0;
  }
  #liste-touren .cs-liste__tabelle td::before {
    content: attr(data-label) ": ";
    color: var(--cs-text-leise);
    font-size: var(--cs-schrift-klein);
  }
  #liste-touren .cs-liste__primaer {
    font-size: var(--cs-schrift-gross);
    font-weight: 600;
    margin-bottom: var(--cs-abstand-1);
  }
  #liste-touren .cs-liste__tabelle td.cs-liste__primaer::before { content: none; }

  #liste-touren .cs-liste__tabelle td[data-prio="2"] {
    font-size: var(--cs-schrift-klein);
    color: var(--cs-text-leise);
  }
  #liste-touren .cs-liste__tabelle td[data-leer="ja"] { display: none; }

  /* Hier standen die Regeln fuer prio 3 und den Aufklapper. Diese Liste hat
     keinen mehr: Typ und Mindestteilnehmer stehen auf prio 2 und damit
     dauerhaft auf der Karte. Der Helfer erzeugt den Knopf nur, wenn eine
     Spalte prio 3 hat (hatDetails()), es gibt also nichts mehr zu gestalten -
     eine Regel dafuer waere eine Falle fuer den Naechsten.
     Die Buchungsuebersicht behaelt ihren Aufklapper und ihre Regeln. */

  #liste-touren .cs-liste__tabelle td.cs-liste__statuszelle::before,
  #liste-touren .cs-liste__tabelle td.cs-liste__aktionen::before { content: none; }
  #liste-touren .cs-liste__aktionen { margin-top: var(--cs-abstand-2); }

  /* KEINE 44px-Fingerhoehe in diesem Bereich. Hier steht die Karte auf einem
     Bildschirm ab 520px - dort wird mit der Maus gezielt, und die Hoehe kostete
     nur Kartenhoehe. Unter 520px gilt sie weiter, sie steht im allgemeinen
     Kartenblock. Gleiche Entscheidung wie in der Buchungsuebersicht. */
  #liste-touren .cs-verweis {
    display: inline-flex;
    align-items: center;
  }

  /* AUSGENOMMEN der Tour-Name in der Kartenkopfzeile.
     Dort ist der Verweis der zu kuerzende Text - und ein inline-flex-Kasten ist
     fuer den Umbruch UNTEILBAR: text-overflow: ellipsis kann ihn nicht mitten
     im Wort abschneiden, sondern laesst ihn ganz weg. Gemessen bei 768px stand
     in der Kopfzeile nur noch "Tour-Name: …" - der Name, an dem man die Tour
     erkennt, war unsichtbar. Als gewoehnlicher inline-Verweis wird er gekuerzt
     statt geschluckt. */
  /* Der Tour-Guide steht aus demselben Grund hier mit drin: hinter seinem
     Namen folgt die Klammer mit der Zahl der weiteren Guides, und ein
     inline-flex-Kasten schiebt sie bei langem Namen in eine eigene Zeile. */
  #liste-touren .cs-liste__tabelle td[data-label="Tour-Name"] .cs-verweis,
  #liste-touren .cs-liste__tabelle td[data-label="Tour-Guide"] .cs-verweis {
    display: inline;
  }
}

/* Drei Spalten. Die Schwelle folgt der GEMESSENEN Eigenbreite der Felder, nicht
   einem Gefuehl: das breiteste Feld im Raster ist "Tour-Guide" mit 310px
   (danach Guide-Anmeldung 273, Segways 180, Uhrzeit 167, Stadt 164, Freie Plätze
   89, Preis 85, Aktiv 58, Guides 55). Der Tour-Name (612px) zaehlt nicht mit -
   er steht in der Kopfzeile und wird gekuerzt.

   310px sind kein Ausreisser: "Guide noch nicht festgelegt!" steht an 10416 der
   19447 Touren, "KNUMO Guide noch nicht festgelegt!" an weiteren 604. Der lange
   Wert ist hier der Normalfall.

   Bedarf fuer drei Spalten: 3 x 310 + 2 x 24 Spaltenabstand + 24 Innenabstand
   = rund 1002px. Nachgemessen ueber alle 46 Messeseiten: ab 1040px
   Containerbreite bricht keine Feldzelle mehr um (bei 1000px noch 43), und die
   mittlere Kartenhoehe faellt von 250 auf 203 Pixel. Darum 1040px.

   Zwei Spalten beginnen dagegen schon mit der Kartenform bei 520px: einspaltig
   ist eine Karte dort im Mittel 618px hoch, zweispaltig 336px - die paar langen
   Guide-Namen, die zwischen 520 und 700px umbrechen, wiegen das nicht auf.

   Die Obergrenze 1809 bleibt, weil darueber die Tabelle steht; verschiebt sich
   der Tabellen-Umschaltpunkt, gehoert sie mit verschoben. */
@container liste (min-width: 1040px) and (max-width: 1809px) {
  #liste-touren .cs-liste__tabelle tr {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* ---- Sortierleiste ------------------------------------------------------
   Die Buchungsuebersicht laesst sich nach sieben Feldern sortieren. Als
   Knopfgruppe waeren das mit Richtung vierzehn Knoepfe; .cs-ansicht ist auf
   zwei bis drei ausgelegt (max-width: 320px). Das Feld waehlt darum ein
   Auswahlfeld - durch base.css 44px hoch und 16px gross -, die Richtung
   bleiben zwei Knoepfe.
   Alle Angaben in PIXELN (siehe oben). */
.cs-sortierung {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--cs-abstand-3);
  margin-top: var(--cs-abstand-3);
}
.cs-sortierung__marke {
  color: var(--cs-text-leise);
  font-size: var(--cs-schrift-klein);
}
/* .cs-ansicht bringt fuer die Monatsumschaltung einen eigenen Abstand und die
   volle Breite mit - hier steht sie in einer Reihe neben dem Auswahlfeld. */
.cs-sortierung .cs-ansicht {
  width: auto;
  max-width: none;
  margin: 0;
}

/* Das Symbol steht immer, die Beschriftung nur, wenn Platz ist. Gemeldet vom
   Betreiber: "kann man mobile die aufsteigend/absteigend buttons mit icons
   verkuerzen". Gemessen bei 400px Fenster: die beiden Knoepfe waren 104px
   breit, mit Auswahlfeld (128px) und Beschriftung passte die Leiste nicht in
   376px und wurde 100px hoch - sie brach um.

   Nur .cs-sortierung: dieselbe Knopfklasse traegt in vier mytours-Ansichten
   die Monat/Liste-Umschaltung. "Monat" als Pfeilsymbol waere Unsinn.

   Die Beschriftung wird NICHT auf display: none gesetzt, sondern nur optisch
   verborgen - dieselbe Technik wie .cs-nur-sr in base.css. Mit display: none
   verliert der Verweis seinen zugaenglichen Namen und wird vorgelesen als
   "Link" ohne Inhalt. Alle Angaben in PIXELN (siehe oben). */
.cs-sortierung .cs-ansicht__knopf {
  gap: var(--cs-abstand-2);
}

@container formular (max-width: 479px) {
  .cs-sortierung .cs-ansicht__knopf .cs-ansicht__text {
    position: absolute;
    width: 1px; height: 1px;
    margin: -1px; padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
  }
}

/* ---- Erklaerter Wert in Klammern ----------------------------------------
   Zwei Zahlen auf der Tourenkarte stehen ohne Zusammenhang in Klammern: die
   Guide-Anzahl hinter dem Namen und der Geraetebestand hinter der Stadt. Beide
   tragen jetzt einen title. Damit man ueberhaupt merkt, DASS dort etwas zu
   holen ist, bekommen sie die Frageform des Zeigers und eine gepunktete Linie -
   die Konvention fuer "hier steht eine Erlaeuterung".

   Kein <abbr>: das ist eine Abkuerzung, keine Zahl. Und keine eigene
   Tooltip-Mechanik - der title des Browsers wird auf dem Handy zwar nicht
   angezeigt, dort ist die Zahl aber auch nicht ueberfahrbar. Ein sichtbarer
   Ersatztext wuerde die Karte wieder verlaengern, genau das war der Auftrag
   nicht.

   white-space: nowrap zusaetzlich zum geschuetzten Leerzeichen im Markup:
   das eine haelt die Klammer am Wort davor, das andere haelt "(12)" in sich
   zusammen. */
.cs-neu .cs-klammer {
  white-space: nowrap;
  cursor: help;
  border-bottom: 1px dotted var(--cs-linie);
}

/* Nur-Text-Aktion: ein Hinweis, keine Bedienung.
   Bekommt bewusst KEINE Knopfoptik - sonst tippt man dagegen. */
.cs-liste__hinweis {
  display: inline-block;
  padding: 0 var(--cs-abstand-2);
  color: var(--cs-text-leise);
  font-size: var(--cs-schrift-klein);
  font-style: italic;
}

/* ---- Bestehende Buchungen einer Tour ------------------------------------
   Dreizehn Spalten: neun Datenfelder, Name, Zahlungszustand, Aktionen und
   Aufklapper. Sie stecken im Inhaltsbereich von "Tour bearbeiten", der in
   einem 1440er Fenster 1154 Pixel breit ist.

   1) Die Kopfzeilen setzen sich hier um.
   Die allgemeine Regel gibt jedem Tabellenkopf white-space: nowrap. Bei den
   langen Beschriftungen dieser Liste ("Haftungsausschlüsse",
   "Segway-Erfahrung", "Schon mitgefahren") fordert das 429 Pixel allein fuer
   drei Koepfe an - die Tabelle brauchte dadurch 1358 Pixel und liess bei
   1440 die ganze SEITE seitwaerts scrollen (gemessen: scrollWidth 1619).
   Umbruch mit Silbentrennung (die Seite ist als lang="de" ausgezeichnet)
   bringt dieselben drei Koepfe auf 221 Pixel. Nur in der Tabellenform -
   auf der Karte gibt es keinen Tabellenkopf.

   2) Die Kartenform gilt hier laenger als sonst.
   Die Mindestbreite der Tabelle haengt am Datenbestand und liegt zwischen
   918 und 1061 Pixeln (width:min-content gemessen ueber 65 Touren: 55
   zufaellige mit mindestens drei Buchungen und 10 mit den laengsten Namen,
   Rufnummern und Zahlungsarten). Der gemeinsame Umschaltpunkt von 880px
   greift dafuer zu frueh: zwischen 881 und 1060 Pixeln Containerbreite
   stand eine Tabelle, die nicht mehr passte und die SEITE scrollen liess
   (gemessen bei 1170: scrollWidth 1299) - genau der Fall, den die Komponente
   vermeiden soll. Betroffen waren die verbreiteten 1280er Fenster
   (Container 994).

   Diese Liste schaltet darum erst bei 1110px auf die Tabelle um: groesste
   gemessene Mindestbreite plus Reserve. Im 1440er Fenster (Container 1154)
   bleibt es damit bei der Tabelle, im 1366er und im 1280er wird daraus die
   Karte.

   Die Kartenregeln stehen dafuer ein zweites Mal hier. Eine Container-
   Abfrage kann ihre Schwelle nicht aus einer Eigenschaft beziehen, und die
   gemeinsame Schwelle darf sich nicht verschieben - /meine-touren ist bei
   880px gemessen. Gleiche Bauart wie bei der Abrechnungsuebersicht weiter
   oben. Alle Angaben in PIXELN (siehe oben). */
@container liste (min-width: 1111px) {
  #liste-tourbuchungen .cs-liste__tabelle th {
    white-space: normal;
  }

  /* In der TABELLE steht die Nummer wieder als Text. Ein Symbol in einer
     Spalte mit der Ueberschrift "Telefon" waere hier keine Ersparnis, sondern
     ein Raetsel - die Kartenform hat die Ecke, die Tabelle hat die Spalte. */
  #liste-tourbuchungen .cs-kontakt__symbol { display: none; }
  #liste-tourbuchungen .cs-kontakt__nummer {
    position: static;
    width: auto; height: auto;
    margin: 0;
    overflow: visible;
    clip-path: none;
  }
  /* Silbentrennung auch in den Zellen: "Vorkasse/Überweisung" und
     "Neckarsteinacherstr.40" sind fuer den Umbruch je EIN Wort und wuerden
     ihrer Spalte sonst 170 Pixel abverlangen. overflow-wrap: anywhere waere
     das grobe Mittel - es senkt die Mindestbreite auf ein Zeichen, worauf
     die Tabellenaufteilung der Spalte so wenig Platz gibt, dass "Umbuchung"
     mitten im Wort umbricht (gemessen bei 1440: "Umbuc hung"). Die
     Silbentrennung bricht an erlaubten Stellen und nur, wenn noetig. */
  #liste-tourbuchungen .cs-liste__tabelle th,
  #liste-tourbuchungen .cs-liste__tabelle td {
    hyphens: auto;
  }
  /* Ausgenommen die Schaltflaechen: eine Beschriftung, die als "Bearbei-ten"
     dasteht, liest sich wie ein Fehler. Sie sind kurz genug, um ohne
     Trennung auszukommen. */
  #liste-tourbuchungen .cs-knopf { hyphens: manual; }
}

/* ---- Suchergebnis "Auf andere Tour umbuchen": zwei Felder je Zeile -------
   Die Liste ersetzt eine resultTable, die 561px breit in einem 317px schmalen
   Behaelter stand - 231px wurden abgeschnitten, ohne dass die Seite einen
   Ueberlauf gemeldet haette. Als Karte ist nichts mehr verdeckt, dafuer wurde
   sie lang: 15 Karten zu je 388px.

   Dieselbe Paarbildung wie in den uebrigen Karten. Ganze Zeile bekommen nur
   die drei, die es brauchen: das Datum als Kopfzeile, der Tour-Name als
   laengstes Textfeld und die Aktionen.

   Der Aufklapper entfaellt hier - die Liste hat keine prio-3-Felder. */
@container liste (max-width: 880px) {

  #liste-umbuchen-treffer .cs-liste__tabelle tr {
    position: relative;   /* Bezugspunkt fuer das Abzeichen in der Ecke */
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--cs-abstand-4);
    align-items: baseline;
  }

  #liste-umbuchen-treffer .cs-liste__tabelle td { order: 100; }

  /* Der Zustand gehoert in die Ecke, nicht in eine eigene Zeile - gleiche
     Bauart wie in der Tourenliste. top: 16px, weil das Abzeichen keinen
     Eigenrand hat; das Datum daneben beginnt bei 17px. */
  #liste-umbuchen-treffer .cs-liste__tabelle td.cs-liste__statuszelle {
    position: absolute;
    right: var(--cs-abstand-3);
    top: 16px;
    padding: 0;
    text-align: right;
  }
  #liste-umbuchen-treffer .cs-liste__tabelle td.cs-liste__statuszelle::before { content: none; }

  /* Das Datum braucht rechts Platz fuer das Abzeichen. */
  #liste-umbuchen-treffer .cs-liste__tabelle td.cs-liste__primaer {
    padding-right: 84px;
  }

  /* "Uhrzeit: " und "Stadt: " kosten nur Platz - beide sind an ihrer Form zu
     erkennen ("10:00 - 12:00 Uhr", "Baden-Baden (100)"). Gleiche Entscheidung
     wie in der Tourenliste. */
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Tour-Name"]::before,
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Uhrzeit"]::before,
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Stadt"]::before { content: none; }

  #liste-umbuchen-treffer .cs-liste__tabelle td.cs-liste__primaer,
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Tour-Name"],
  #liste-umbuchen-treffer .cs-liste__tabelle td.cs-liste__aktionen {
    grid-column: 1 / -1;
  }

  #liste-umbuchen-treffer .cs-liste__tabelle td.cs-liste__primaer        { order: 10; }
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Tour-Name"]  { order: 20; }
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Uhrzeit"]    { order: 30; }
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Stadt"]      { order: 40; }
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Geräte"]     { order: 50; }
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Freie Plätze"] { order: 60; }
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Tour-Guide"] { order: 70; }
  #liste-umbuchen-treffer .cs-liste__tabelle td[data-label="Preis"]      { order: 80; }
  #liste-umbuchen-treffer .cs-liste__tabelle td.cs-liste__statuszelle    { order: 90; }
  #liste-umbuchen-treffer .cs-liste__tabelle td.cs-liste__aktionen       { order: 140; }
}

/* ---- Buchungen unter "Tour bearbeiten": zwei Felder je Zeile -------------
   Die Karte stand einspaltig da, zehn Felder untereinander, 365px hoch bei
   340px Container - "die card für die bestehenden buchung sind noch
   einspaltig mit viel platz".

   Gemessener Eigenbedarf je Feld einschliesslich Beschriftung, bei rund 162px
   nutzbarer Haelfte:
     Kunde 202, Telefon 174, Aktionen 251        -> ganze Zeile
     Geräte 60, Haftungsausschlüsse 152          -> Paar
     Segway-Erfahrung 136, Schon mitgefahren 138 -> Paar
     Gesamtpreis 145, Bezahlt 104                -> Paar

   Der Aufklapper bleibt hier, anders als in der Tourenliste: dahinter stehen
   mehrere Felder, nicht nur eines - er spart also mehr als er kostet.

   Gilt im ganzen Kartenbereich bis 880px. Darueber hat diese Liste eigene
   Kartenregeln (Block darunter, 881-1110px), ab 1111px die Tabelle. */
@container liste (max-width: 880px) {

  #liste-tourbuchungen .cs-liste__tabelle tr {
    position: relative;   /* Bezugspunkt fuer das Telefonsymbol in der Ecke */
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--cs-abstand-4);
    align-items: baseline;
  }

  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__primaer,
  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__aktionen,
  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__mehrzelle {
    grid-column: 1 / -1;
  }


  /* Grundwert fuer JEDE Zelle. Ohne ihn stehen Felder ohne eigene Angabe auf
     order: 0 und damit VOR allem anderen - genau das ist passiert: beim
     Aufklappen erschienen "Gebucht am", "Anschrift" und "Zahlungsart" ueber
     dem Namen des Buchenden ("wenn ich details toggle kommen infos über dem
     buchenden"). Mit 100 als Grundwert landet ein neu hinzukommendes Feld
     hinter den benannten und vor den Aktionen, statt nach oben zu springen. */
  #liste-tourbuchungen .cs-liste__tabelle td { order: 100; }

  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__primaer        { order: 10; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Telefon"]    { order: 20; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Geräte"]     { order: 30; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Haftungsausschlüsse"] { order: 40; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Segway-Erfahrung"]    { order: 50; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Schon mitgefahren"]   { order: 60; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Gesamtpreis"] { order: 70; }
  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__statuszelle     { order: 80; }

  /* Die drei Felder hinter "Details", in der Reihenfolge, in der man sie
     liest: wann gebucht, wohin, womit bezahlt. Die Anschrift bekommt die
     ganze Zeile - sie ist mehrzeilig (gemessen 67px). */
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Gebucht am"]  { order: 90; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Anschrift"]   { order: 92; grid-column: 1 / -1; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Zahlungsart"] { order: 94; }

  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__aktionen        { order: 140; }
  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__mehrzelle       { order: 150; }

  /* ---- Telefon als Symbol in der Ecke ------------------------------------
     Die Nummer belegte eine eigene Zeile, und weil sie ein tel:-Verweis mit
     44px Trefferflaeche ist, stand darunter Luft, die dem Text nicht gehoert.
     Zwei Zwischenschritte - die Zeile teilen, die Flaeche auf 32px kuerzen -
     haben je 12 bis 16px gebracht. Der Vorschlag des Betreibers loest es ganz:

       "du könntest rechts in die ecke von dem buchungsnamen einfach ein großes
        telefon-icon setzen, dann fällt der bereich komplett weg"

     Das Feld haengt jetzt absolut oben rechts an der Karte, auf Hoehe des
     Namens - dieselbe Bauart wie das Aktiv-Abzeichen in der Tourenliste. Es
     belegt keine Rasterzeile mehr, die Zeile ist also nicht kuerzer, sondern
     WEG.

     Die Nummer bleibt lesbar: als Text fuer Vorleseprogramme und im title.
     Das Symbol bekommt die vollen 44px - hier ist es ein einzelnes Ziel in
     einer sonst leeren Ecke, da kostet Groesse nichts. */
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Telefon"] {
    position: absolute;
    right: var(--cs-abstand-3);
    top: 8px;
    padding: 0;
    order: 20;
  }
  #liste-tourbuchungen .cs-liste__tabelle td[data-label="Telefon"]::before { content: none; }

  #liste-tourbuchungen .cs-kontakt {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: var(--cs-ziel);
    min-height: var(--cs-ziel);
    text-decoration: none;
  }
  #liste-tourbuchungen .cs-kontakt__symbol { font-size: 20px; }

  /* Die Nummer selbst ist auf der Karte nur fuer Vorleseprogramme da -
     sichtbar verborgen, nicht display: none, sonst faellt sie aus dem
     zugaenglichen Namen des Verweises heraus. Technik wie .cs-nur-sr. */
  #liste-tourbuchungen .cs-kontakt__nummer {
    position: absolute;
    width: 1px; height: 1px;
    margin: -1px; padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
  }

  /* Der Name braucht rechts Platz fuer das Symbol. */
  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__primaer {
    padding-right: 56px;
  }
}

@container liste (min-width: 881px) and (max-width: 1110px) {

  #liste-tourbuchungen .cs-liste__tabelle,
  #liste-tourbuchungen .cs-liste__tabelle tbody,
  #liste-tourbuchungen .cs-liste__tabelle tr,
  #liste-tourbuchungen .cs-liste__tabelle td { display: block; }
  /* Auf der Karte duerfen die Aktionen umbrechen - die Zelle ist hier so
     breit wie die Karte. Nimmt die Grundregel zurueck (siehe .cs-liste__aktionen). */
  #liste-tourbuchungen .cs-liste__aktionen { white-space: normal; }


  #liste-tourbuchungen .cs-liste__tabelle thead { display: none; }

  #liste-tourbuchungen .cs-liste__tabelle tr {
    margin-bottom: var(--cs-abstand-2);
    padding: var(--cs-abstand-3);
    background: var(--cs-flaeche);
    border: 1px solid var(--cs-linie);
    border-left: 3px solid var(--cs-linie);
    border-radius: var(--cs-radius);
  }
  #liste-tourbuchungen .cs-liste__tabelle tbody tr:nth-child(even) {
    background: var(--cs-flaeche);
  }

  #liste-tourbuchungen .cs-liste__tabelle td {
    padding: 2px 0;
    border-top: 0;
  }
  #liste-tourbuchungen .cs-liste__tabelle td::before {
    content: attr(data-label) ": ";
    color: var(--cs-text-leise);
    font-size: var(--cs-schrift-klein);
  }
  #liste-tourbuchungen .cs-liste__primaer {
    font-size: var(--cs-schrift-gross);
    font-weight: 600;
    margin-bottom: var(--cs-abstand-1);
  }
  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__primaer::before { content: none; }

  #liste-tourbuchungen .cs-liste__tabelle td[data-prio="2"] {
    font-size: var(--cs-schrift-klein);
    color: var(--cs-text-leise);
  }
  #liste-tourbuchungen .cs-liste__tabelle td[data-leer="ja"] { display: none; }
  #liste-tourbuchungen .cs-liste__tabelle td[data-prio="3"] { display: none; }
  #liste-tourbuchungen tr[data-detail="offen"] td[data-prio="3"] { display: block; }

  /* Der Aufklapper ist ab 881px allgemein ausgeblendet. Hier wird er
     gebraucht - hier gilt die Karte. */
  #liste-tourbuchungen .cs-liste__mehr {
    display: inline-flex;
    align-items: center;
    min-height: var(--cs-ziel);
    margin-top: var(--cs-abstand-1);
    background: none;
    border: 0;
    padding: 0;
    color: var(--cs-gruen-dunkel);
    font-size: var(--cs-schrift-klein);
    cursor: pointer;
  }

  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__statuszelle::before,
  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__aktionen::before,
  #liste-tourbuchungen .cs-liste__tabelle td.cs-liste__mehrzelle::before { content: none; }
  #liste-tourbuchungen .cs-liste__aktionen { margin-top: var(--cs-abstand-2); }

  /* Die Rufnummer ist auch hier das Ziel des Fingers - dieselbe Zielhoehe
     wie in der allgemeinen Kartenform. */
  #liste-tourbuchungen .cs-kontakt {
    display: inline-flex;
    align-items: center;
    min-height: var(--cs-ziel);
  }
}

/* ---- Filterkopf: Ueberschrift links, Zuruecksetzen rechts ----------------
   In JEDER Breite, ohne Schwelle. Vom Betreiber gefragt: "das filter reset icon
   kann beim oben rechts in die ecke auf höhe von 'Filter'?"

   Der Grund, warum es das nicht schon tat: die Regel darunter macht solche
   Ueberschriften erst ab 620px Container einzeilig. Darunter ist das
   <div class="pagination"> ein Block und rutscht unter das Wort "Filter".
   Fuer die ERGEBNIS-Ueberschrift ist diese Schwelle richtig - dort stecken
   fuenf Bedienelemente und ein Auswahlfeld in der Leiste, die auf dem Handy
   nicht neben den Text passen. Im FILTER-Kopf steht nach dem Umzug der Lupe in
   die Filterzeile nur noch ein einziges Symbol; das passt in jeder Breite.

   h2.actionIcons trennt die beiden Faelle: die Klasse tragen genau die
   Filterkoepfe (bookingoverview, touroverview - und damit die Bauform, die
   jede weitere umgestellte Liste uebernimmt), die Ergebnis-Ueberschrift hat
   keine Klasse. */
.cs-neu h2.actionIcons:has(> .pagination) {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--cs-abstand-3);
  flex-wrap: nowrap;
}
.cs-neu h2.actionIcons:has(> .pagination) > .pagination {
  display: flex;
  align-items: center;
  gap: var(--cs-abstand-2);
  flex: none;
}

/* ---- Ergebnis-Ueberschrift und Blaetterleiste in EINER Zeile -------------
   Im Bestand steht die Blaetterleiste als <div class="pagination"> INNERHALB
   des <h2> "Suchergebnis - Seite 1 von 42 (827 Eintraege)". Als Block bricht
   sie dort auf eine zweite Zeile - gemessen zwei Zeilen bei 1067px Breite.

   Auf breiteren Geraeten stehen beide nebeneinander: Text links, Blaettern
   rechts. Auf dem Handy bleibt es untereinander, dort ist kein Platz.

   :has(> .pagination) trifft genau die Ueberschriften, die eine Leiste
   enthalten - das Muster gibt es in allen 20 Listenansichten, die Regel gilt
   also fuer alle und nicht nur fuer eine Seite. */
@container formular (min-width: 620px) {
  .cs-neu h2:has(> .pagination) {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--cs-abstand-4);
    flex-wrap: nowrap;
  }
  .cs-neu h2:has(> .pagination) > .pagination {
    display: flex;
    align-items: center;
    gap: var(--cs-abstand-2);
    flex: none;
  }

  /* Die untere Blaetterleiste steht ohne "Suchergebnis"-Text in ihrem <h2>.
     space-between schoebe die einzelne Leiste sonst nach links - hier soll sie
     wie die obere rechts stehen, damit beide uebereinander fluchten. */
  .cs-neu h2.cs-blaetter-unten:has(> .pagination) {
    justify-content: flex-end;
  }
}

/* ---- Gutscheinuebersicht: Karte bis 1799px -------------------------------
   Gemessen an /gutscheine/stadt-tour: die Tabellenform braucht 1213px fuer
   ihre dreizehn Spalten. Im Inhaltsbereich eines 1280er Fensters stehen 988px
   zur Verfuegung - die Tabelle stand also 225px ueber, und die SEITE liess
   sich 197px seitwaerts rollen.

   Warum gerade diese Liste? Nicht die Spaltenzahl ist der Grund: /touren hat
   ebenfalls dreizehn, /touren/buchungen sogar sechzehn, und beide passen in
   988px. Es sind die KOEPFE. Sie stehen nowrap, und hier heissen sie
   "Bestellnummer", "Gutscheincode", "Gutscheinwert", "Zahlungsart" - lauter
   lange deutsche Woerter, die die Mindestbreite je Spalte hochziehen.

   Ein Versuch mit overflow-x: auto an .cs-liste half NICHT: die Liste rollte
   dann zwar selbst, die Seite aber weiterhin auch. Ein rollender Behaelter
   traegt seine Inhaltsbreite trotzdem nach oben weiter. Die Regel ist darum
   wieder entfernt - sie haette einen Schutz vorgetaeuscht, den sie nicht
   bietet.

   Also derselbe Weg wie bei der Buchungsuebersicht: die Karte bleibt, bis
   wirklich Platz fuer die Tabelle ist.

   NACHGEMESSEN AM 2026-08-18, nachdem die Aktionen in der Tabellenform
   nowrap bekommen haben (siehe .cs-liste__aktionen). Die Knoepfe stehen
   seither nebeneinander statt gestapelt - die Spalte fordert dadurch mehr
   Breite an, und der alte Punkt von 1250px reichte nicht mehr. Am echten
   Datenbestand gemessen, Behaelterbreite gegen Ueberstand:

     1708px: +36    1728px: +16    1748px: passt

   1800px = Bedarf plus Reserve. Erst auf einem sehr breiten Bildschirm
   gibt es damit die Tabelle; auf 1920px (Inhaltsbereich rund 1630px)
   bleibt es bei der Karte - und das ist richtig so, dort waere die
   Tabelle 100px zu breit.

   Die Kartenregeln stehen dafuer ein zweites Mal hier - eine Container-Abfrage
   kann ihre Schwelle nicht aus einer Eigenschaft beziehen, und die gemeinsame
   Schwelle von 880px darf sich nicht verschieben. Alle Angaben in PIXELN. */
@container liste (min-width: 520px) and (max-width: 1799px) {

  #liste-gutscheine .cs-liste__tabelle,
  #liste-gutscheine .cs-liste__tabelle tbody,
  #liste-gutscheine .cs-liste__tabelle td { display: block; }
  /* Auf der Karte duerfen die Aktionen umbrechen - die Zelle ist hier so
     breit wie die Karte. Nimmt die Grundregel zurueck (siehe .cs-liste__aktionen). */
  #liste-gutscheine .cs-liste__aktionen { white-space: normal; }


  #liste-gutscheine .cs-liste__tabelle thead { display: none; }

  /* Eine Karte je Zeile, ihr Inhalt zweispaltig - sonst entsteht auf einem
     breiten Bildschirm eine sehr lange, sehr duenne Liste aus
     Beschriftung-Wert-Zeilen. Gleiche Entscheidung wie bei den Buchungen. */
  #liste-gutscheine .cs-liste__tabelle tr {
    position: relative;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--cs-abstand-5);
    align-items: start;

    padding: var(--cs-abstand-3);
    background: var(--cs-flaeche);
    border: 1px solid var(--cs-linie);
    border-left: 3px solid var(--cs-linie);
    border-radius: var(--cs-radius);
  }
  #liste-gutscheine .cs-liste__tabelle tbody tr:nth-child(even) {
    background: var(--cs-flaeche);
  }

  /* Kopfzeile: Bestellnummer links, Kunde rechts daneben. Beides zusammen
     benennt den Gutschein - die Nummer eindeutig, der Name wiedererkennbar. */
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__primaer {
    grid-column: 1 / 2;
    grid-row: 1;
  }
  #liste-gutscheine .cs-liste__tabelle td[data-label="Kunde"] {
    grid-column: 2 / -1;
    grid-row: 1;
    align-self: center;

    /* Einzeilig mit Auslassung: ein langer Doppelname darf die Kartenhoehe
       nicht veraendern. Der volle Text bleibt im Dokument lesbar. */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  #liste-gutscheine .cs-liste__tabelle td.cs-liste__aktionen {
    grid-column: 1 / -1;
    padding-right: 120px;
  }
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__mehrzelle {
    position: absolute;
    right: var(--cs-abstand-3);
    bottom: var(--cs-abstand-3);
    text-align: right;
  }

  #liste-gutscheine .cs-liste__tabelle td {
    padding: 2px 0;
    border-top: 0;
  }
  #liste-gutscheine .cs-liste__tabelle td::before {
    content: attr(data-label) ": ";
    color: var(--cs-text-leise);
    font-size: var(--cs-schrift-klein);
  }
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__primaer::before,
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__statuszelle::before,
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__aktionen::before,
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__mehrzelle::before { content: none; }

  #liste-gutscheine .cs-liste__tabelle td[data-leer="ja"] { display: none; }
  #liste-gutscheine .cs-liste__tabelle td[data-prio="3"] { display: none; }
  #liste-gutscheine .cs-liste tr[data-detail="offen"] td[data-prio="3"],
  #liste-gutscheine tr[data-detail="offen"] td[data-prio="3"] { display: block; }
}

/* ---- Gutscheinkarte: Zustand in die Kopfecke ----------------------------
   Vom Betreiber: "bezahlt und offen kann oben rechts neben die bestellnr,
   damit sparen wir diese zeile".

   Das Abzeichen belegte in der Karte eine eigene Zeile - fuer ein einziges
   Wort. Es steht jetzt oben rechts, auf Hoehe der Bestellnummer. Verankert
   statt im Raster: eine eigene Rasterspalte haette bei zwei Spalten die halbe
   Kartenbreite fuer ein Wort belegt. Gleiche Bauart wie "Aktiv" in der
   Tourenliste und der Details-Knopf unten rechts.

   Gilt in JEDER Kartenbreite, also bis 1799px - darueber ist es wieder eine
   gewoehnliche Tabellenspalte. Alle Angaben in PIXELN. */
@container liste (max-width: 1799px) {
  #liste-gutscheine .cs-liste__tabelle tr { position: relative; }

  #liste-gutscheine .cs-liste__tabelle td.cs-liste__statuszelle {
    position: absolute;
    top: var(--cs-abstand-3);
    right: var(--cs-abstand-3);
    padding: 0;
  }

  /* Platz fuer das Abzeichen freihalten, damit die Kopfzeile nicht darunter
     laeuft. Schmale Karte: die Bestellnummer steht allein oben. Breite Karte:
     rechts oben steht der Kundenname - dort muss der Abstand hin. */
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__primaer { padding-right: 90px; }
}

@container liste (min-width: 520px) and (max-width: 1799px) {
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__primaer { padding-right: 0; }
  #liste-gutscheine .cs-liste__tabelle td[data-label="Kunde"] { padding-right: 90px; }
}

/* Das Abzeichen auf Hoehe der Bestellnummer halten - aber NUR auf der
   schmalen Karte.

   Gemeldet: "das bezahlt badge hängt wieder höher als die
   gutschein-bestellnr. (mobile)". Nachgemessen, Mitte gegen Mitte:

     Behaelter  366px:  Verweis 44px hoch,  Abzeichen 12px zu hoch
     Behaelter  744px:  Verweis 44px hoch,  Abzeichen 12px zu hoch
     Behaelter  808px:  Verweis 44px hoch,  Abzeichen 12px zu hoch
     Behaelter 1008px:  Verweis 17px hoch,  Abzeichen buendig
     Behaelter 1608px:  Verweis 17px hoch,  Abzeichen buendig

   Der Sprung liegt bei 880px, und zwar aus einem Grund, der nichts mit
   dieser Liste zu tun hat: darunter macht eine allgemeine Regel aus JEDEM
   .cs-verweis eine 44px hohe Trefferflaeche. Die Bestellnummer waechst
   dadurch von 17 auf 44 Pixel, das Abzeichen bleibt bei 24 - und ein
   fester Abstand von oben kann beides nicht gleichzeitig treffen.

   Darum bekommt die Zelle hier dieselbe Hoehe wie die Trefferflaeche und
   richtet das Abzeichen darin mittig aus. Der Zuschlag von 2px ist der
   Innenabstand, den jede Zelle dieser Karte oben hat - ohne ihn saesse das
   Abzeichen zwei Pixel zu hoch.

   Oberhalb von 880px bleibt alles, wie es ist: dort ist die Bestellnummer
   eine gewoehnliche Textzeile und die Ausrichtung stimmt bereits. */
@container liste (max-width: 880px) {
  #liste-gutscheine .cs-liste__tabelle td.cs-liste__statuszelle {
    top: calc(var(--cs-abstand-3) + 2px);
    height: var(--cs-ziel);
    display: flex;
    align-items: center;
    justify-content: flex-end;
  }
}

/* ---- Vermietungskarte: "Bestätigt" in die Kopfecke ----------------------
   Vom Betreiber: "bei vermietung in der liste wieder Bestätigt rechts oben
   mobile". Gleiche Bauart wie bei den Gutscheinen und wie "Aktiv" in der
   Tourenliste: das Abzeichen belegte sonst eine eigene Zeile fuer ein Wort.

   Die Kopfzelle ist hier der KUNDENNAME und damit ein .cs-verweis - der ist
   unterhalb von 880px eine 44px hohe Trefferflaeche. Das Abzeichen bekommt
   dieselbe Hoehe und richtet sich darin mittig aus, sonst haengt es zwoelf
   Pixel zu hoch. Der Zuschlag von 2px ist der Innenabstand, den jede
   Kartenzelle oben hat.

   Gilt fuer BEIDE Vermietungslisten: die Uebersicht und das Teilstueck im
   Kalender. Beide zeigen dieselben Daten und sollen gleich aussehen.

   Alle Angaben in PIXELN. */
@container liste (max-width: 880px) {
  #liste-vermietungen .cs-liste__tabelle tr,
  #liste-kalender-vermietungen .cs-liste__tabelle tr { position: relative; }

  #liste-vermietungen .cs-liste__tabelle td.cs-liste__statuszelle,
  #liste-kalender-vermietungen .cs-liste__tabelle td.cs-liste__statuszelle {
    position: absolute;
    top: calc(var(--cs-abstand-3) + 2px);
    right: var(--cs-abstand-3);
    height: var(--cs-ziel);
    padding: 0;
    display: flex;
    align-items: center;
    justify-content: flex-end;
  }

  /* Platz fuer das Abzeichen freihalten. "Bestätigt" ist laenger als
     "Bezahlt" - darum mehr als die 90px der Gutscheinkarte. */
  #liste-vermietungen .cs-liste__tabelle td.cs-liste__primaer,
  #liste-kalender-vermietungen .cs-liste__tabelle td.cs-liste__primaer {
    padding-right: 104px;
  }
}

/* ---- Vermietungen im Tagesblock brauchen eine definierte Breite ---------
   screen.css gibt #calendarRentingBookings ein float: left. Ein Float ist
   schrumpfend: er wird so breit wie sein Inhalt. Solange dort eine
   resultTable stand, ging das - eine Tabelle meldet ihre Inhaltsbreite.

   Die Listenkomponente meldet dagegen NULL: .cs-liste traegt
   container-type: inline-size, und das bedeutet Groessencontainment in der
   Schreibrichtung. Der Behaelter hat damit keine Eigenbreite mehr, aus der
   ein Float seine Breite ableiten koennte. Gemessen im echten Kalender:
   97px statt der vollen Breite, das Abzeichen ueberlappte den Namen um 19px.

   Das gilt fuer JEDE Liste, die in einem Float oder einem inline-block
   steht - die Komponente braucht einen Eltern mit definierter Breite.

   float: none statt einer festen Breite: der Tagesblock stapelt damit
   Bemerkung und Vermietungen untereinander. Auf dem Handy war das Nebeneinander
   ohnehin nie zu sehen, und die Umgestaltung des Tagesblocks steht als eigener
   Punkt im Backlog. */
.cs-neu #calendarRentingBookings {
  float: none;
  clear: both;
  width: auto;
}

/* Die listeneigenen Umschaltpunkte fuer Tour-Guides und Benutzerverwaltung
   standen hier bis 2026-08-20 von Hand. Sie kommen jetzt aus der Komponente:
   adminDataList kennt die Option 'kartenBis' und erzeugt denselben Block mit
   der gemessenen Schwelle. Siehe AdminDataList::kartenRegeln().

   Die aelteren Listen (Gutscheine, Buchungen, Touren, Abrechnungen) behalten
   ihre handgeschriebenen Bloecke weiter oben - sie tragen Eigenheiten, die in
   einer allgemeinen Regel nichts zu suchen haben. */

/* ==========================================================================
   Reihenfolge per Ziehen: der Griff IST die Positionsnummer
   ==========================================================================
   Betreiber: "zeig die pos. als zahl links neben dem tourtitel dynamisch an."

   Ein zusaetzliches Anfass-Symbol neben der Zahl waere ein zweites Ziel fuer
   dieselbe Sache. Die Zahl ist gross genug zum Greifen und sagt zugleich, wo
   man steht - sie wird beim Ziehen fortgeschrieben.

   touch-action: none ist Pflicht: ohne sie scrollt das Geraet die Seite,
   sobald der Finger sich bewegt, und das Ziehen kommt nie zustande.
   Alle Angaben in PIXELN. */
/* Griff und Titel in einer Zeile. Der Griff behaelt seine 44px, der Titel
   nimmt den Rest und darf umbrechen (min-width: 0, sonst ignoriert ein
   Flex-Element seine Kuerzung). */
.cs-neu .cs-primaerzeile {
  display: flex;
  align-items: center;
  gap: var(--cs-abstand-2);
}
/* NUR der Titel darf schrumpfen. Vorher stand hier "> *", und damit schrumpfte
   auch die Marke: 60px Eigenbreite auf 48px gequetscht, der Text abgeschnitten.
   Gemeldet: "In der Liste wird das Contao Badge abgeschnitten". */
.cs-neu .cs-primaerzeile > .cs-verweis { min-width: 0; }

.cs-neu .cs-griff {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: var(--cs-ziel);
  min-height: var(--cs-ziel);
  margin: 0 var(--cs-abstand-2) 0 0;
  padding: 0;
  border: 1px solid var(--cs-linie);
  border-radius: var(--cs-radius);
  background: var(--cs-flaeche-leise);
  color: var(--cs-text-leise);
  font-family: var(--cs-schrift-ui);
  font-size: var(--cs-schrift-normal);
  font-weight: 700;
  line-height: 1;
  cursor: grab;
  touch-action: none;
  -webkit-user-select: none;
  user-select: none;
}
.cs-neu .cs-griff:active { cursor: grabbing; }

/* Die gezogene Zeile hebt sich ab, solange sie unter dem Finger ist. */
.cs-neu .cs-liste__tabelle tr.cs-zieht {
  outline: 2px solid var(--cs-gruen-hell);
  outline-offset: -2px;
}

/* Waehrend gespeichert wird, bleibt die Liste sichtbar, aber ruhig. */
.cs-neu .cs-liste__tabelle tbody[data-speichert] { opacity: .7; }


/* ---- Der Griff traegt den Zustand ---------------------------------------
   Betreiber: "du könntest auch die drag-drop design, je nach aktiv/inaktiv
   ändern, dann fiele das badge weg".

   FARBE ALLEIN TRAEGT DEN ZUSTAND NICHT. Zusaetzlich unterscheiden sich die
   Rahmenarten - durchgezogen fuer aktiv, gestrichelt fuer inaktiv - und der
   Zustand steht im title und im aria-label des Knopfes. Wer keine Farben
   trennen kann, sieht und hoert ihn trotzdem.

   #4a6b0a auf hellem Gruen ist dieselbe Paarung wie beim Hausknopf. */
.cs-neu .cs-griff[data-zustand="an"] {
  border-color: var(--cs-gruen-hell);
  background: var(--cs-gruen-hell);
  color: #fff;
}
.cs-neu .cs-griff[data-zustand="aus"] {
  border-style: dashed;
  background: var(--cs-flaeche);
  color: var(--cs-text-leise);
}

/* ---- Kleine Marke hinter dem Titel --------------------------------------
   Fuer Angaben, die nur dann etwas sagen, wenn sie da sind - "Contao" stand
   vorher als eigene Kartenzeile "Contao: ja". */
.cs-neu .cs-marke {
  flex: none;
  display: inline-block;
  padding: 0 var(--cs-abstand-2);
  border: 1px solid var(--cs-linie);
  border-radius: 99px;
  background: var(--cs-flaeche-leise);
  color: var(--cs-text-leise);
  font-size: var(--cs-schrift-klein);
  font-weight: 600;
  white-space: nowrap;
  vertical-align: middle;
}

/* Die Contao-Marke traegt das Bildzeichen statt des Wortes - als Text war sie
   60px breit und wurde in der 338px-Karte abgeschnitten. Das Bildzeichen ist
   ein Drittel davon und braucht kein Polster. */
.cs-neu .cs-marke--contao {
  display: inline-flex;
  align-items: center;
  padding: 2px 4px;
}
.cs-neu .cs-marke--contao img {
  display: block;
  width: 18px;
  height: 16px;
}

/* ==========================================================================
   Abrechnungskarte: Felder in mitwachsenden Spalten
   ==========================================================================
   Gemeldet: "auf dem desktop hat sehr viel weißraum, bitte hier auch noch
   spalten ergänzen in den cards".

   Nachgemessen bei 1920px: die Karte war einspaltig, jede Zelle also 1600px
   breit - fuer ein Datum oder einen Stadtnamen.

   auto-fit statt fester Spaltenzahl: die Karte nimmt so viele Spalten, wie in
   ihre Breite passen. Bei 366px Behaelter eine, bei 988px vier, bei 1628px
   sechs. Eine feste Zweispaltigkeit haette auf 1920px immer noch 800px je
   Zelle gelassen.

   240px Mindestbreite: die laengsten Werte sind Tourname und Guide-Name, kurze
   Betraege stehen daneben. Alle Angaben in PIXELN.

   Gilt bis 1699px - das ist der Umschaltpunkt dieser Liste, darueber ist es
   wieder eine Tabelle. */
@container liste (max-width: 1699px) {
  #liste-abrechnungen .cs-liste__tabelle tr {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    column-gap: var(--cs-abstand-5);
    align-items: start;
  }

  /* Kopfzeile und Aktionen ueber die volle Breite - sie tragen die Karte
     bzw. eine Knopfreihe, die nicht in eine Spalte gehoert. */
  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__primaer,
  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__aktionen {
    grid-column: 1 / -1;
  }

  /* Details steht auf der schmalen Karte weiterhin in der Zeile - dort ist
     keine Breite fuer etwas daneben. Siehe die Verankerung darunter. */
  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__mehrzelle {
    grid-column: 1 / -1;
    text-align: right;
  }
}

/* ---- Details-Knopf neben die Aktionen, sobald Platz ist -----------------
   Der Knopf hatte eine EIGENE Zeile - 52px fuer ein Wort, waehrend rechts
   neben den Aktionen Platz frei stand. Gemeldet: "ist eine extra zeile für
   details, wie können wir das optimieren".

   ERST AB 520px Behaelterbreite, und das ist gemessen: bei 366px (390er
   Geraet) kostet der freigehaltene Platz mehr, als er einbringt - die
   Knopfreihe bricht dann von 101 auf 148px um, und die Karte wird statt
   52px nur 5px niedriger. Dort bleibt Details in der Zeile.

   Ab 520px lohnt es: die Karte wird um die volle Zeilenhoehe kuerzer.

     Behaelter   vorher   nachher
        744       252      200
        988       227      175
       1628       202      150                                             */
@container liste (min-width: 520px) and (max-width: 1699px) {
  #liste-abrechnungen .cs-liste__tabelle tr { position: relative; }

  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__aktionen {
    padding-right: 120px;
  }
  #liste-abrechnungen .cs-liste__tabelle td.cs-liste__mehrzelle {
    position: absolute;
    right: var(--cs-abstand-3);
    bottom: var(--cs-abstand-3);
    text-align: right;
  }
}
