:root {
  --navy: #01152B;
  --gold: #EBB42C;
  --rot: #E7240E;
  --gruen: #2E9E4F;
  --grau: #6b7280;
  --kupfer: #B47049;
  --hintergrund: #f4f5f7;
  color-scheme: light dark;
}
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html { touch-action: manipulation; }
/* Rolle "Service" arbeitet spuerbar besser im Querformat (siehe manifest-service.json,
   orientation:landscape - wirkt aber nur bei installierter PWA unter Android, iPhones
   drehen sich nicht automatisch). Deshalb zusaetzlich dieser Hinweis-Screen, der bei
   Hochformat auf Handy-Breite ueberblendet; ueber den Weiter-Button abschaltbar, damit
   niemand ausgesperrt wird (z.B. bei aktiver Hochformat-Sperre im Handy-Betriebssystem). */
.quer-hinweis { display: none; }
.quer-hinweis-inhalt button.btn { background: var(--gold); color: #1a1a1a; margin-top: 16px; }
@media (max-width: 640px) and (orientation: portrait) {
  .quer-hinweis:not(.ausgeblendet) {
    display: flex; position: fixed; inset: 0; z-index: 9999;
    background: var(--navy); color: #fff; align-items: center; justify-content: center;
    text-align: center; padding: 24px; font-size: 1.2em; line-height: 1.5;
  }
  .quer-hinweis-inhalt { max-width: 320px; }
}
body {
  font-family: "Segoe UI", Arial, sans-serif;
  margin: 0;
  background: var(--hintergrund);
  color: #1a1a1a;
  font-size: 17px;
}
/* Optionales Firmenlogo als Wasserzeichen (siehe /einstellungen/betrieb) - fest im Hintergrund,
   so groß wie der Bildschirm es zulässt. Eigenes ::before-Element statt background-image direkt
   auf body: die Deckkraft läuft über normales CSS "opacity" (Standard-Alphablending), nicht über
   ein Bild mit fest eingebrannter Mini-Deckkraft - Letzteres führte in einer früheren Instanz zu
   sichtbarem Dithering (Karomuster) beim Verrechnen sehr niedriger Alpha-Werte. */
body.hat-wasserzeichen::before {
  content: "";
  position: fixed;
  inset: 0;
  background-image: var(--wasserzeichen-url);
  background-repeat: no-repeat;
  background-position: center center;
  background-size: min(90vw, 90vh);
  opacity: .10;
  pointer-events: none;
}
@media (prefers-color-scheme: dark) {
  body { background: #14181f; color: #e8e8e8; }
  .card, .plan-tisch, .tabelle, .artikel-kachel { background: #1f2530 !important; color: #e8e8e8 !important; }
  .tabelle th { background: #262c38 !important; }
}
.topbar {
  background: var(--navy);
  color: #fff;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 20px;
  flex-wrap: wrap;
  gap: 8px;
  position: sticky;
  top: 0;
  z-index: 100;
  box-shadow: 0 2px 6px rgba(0,0,0,.2);
}
/* Auf Handys mit wenig Höhe (typisch: Service-Rolle quer gehalten, damit Tischplan/Platz-
   Anordnung richtig aussieht) frisst das feststehende Menüband zu viel vom knappen
   Bildschirm - dort lieber wie gewohnt mitscrollen lassen. */
@media (max-height: 500px) {
  .topbar { position: static; box-shadow: none; }
}
.topbar .brand { color: var(--gold); font-weight: bold; font-size: 1.25em; text-decoration: none; }
.brand-version { color: rgba(255,255,255,.55); font-size: .7em; margin-left: 4px; white-space: nowrap; }
/* Name des Mandanten/Betriebs - groß und mittig in der Titelzeile, damit bei mehreren
   gleichzeitig geöffneten Instanzen (verschiedene Mandanten in verschiedenen Tabs) sofort
   erkennbar ist, in welcher man gerade arbeitet (siehe Kassenbindung-Mehrfachlogin-Thema). */
.topbar-mandant {
  flex: 1 1 auto;
  text-align: center;
  color: #fff;
  font-size: 1.35em;
  font-weight: bold;
  letter-spacing: .02em;
  min-width: 120px;
}
.topbar nav a {
  color: #fff; margin-left: 6px; text-decoration: none;
  padding: 10px 14px; border-radius: 6px; display: inline-block;
}
/* <form> ist von Haus aus display:block - ohne das hier würde der Sprachumschalter aus dem
   inline-Fluss der übrigen Nav-Links herausbrechen und eine eigene, unschön zusammengedrückte
   Zeile erzwingen (siehe Bug 2026-08-01: René meldete ein "zusammengedrücktes" Menü). */
.topbar nav .sprache-form {
  display: inline-block; vertical-align: middle; margin-left: 6px;
}
.topbar nav .sprache-form select {
  background: rgba(255,255,255,.08); color: #fff; border: 1px solid rgba(255,255,255,.3);
  border-radius: 6px; padding: 8px 10px; font-size: .95em; cursor: pointer;
}
/* Die aufgeklappte Optionsliste ist ein natives Browser-Popup und übernimmt NICHT das
   transluzente Nav-Hintergrund-Blau der geschlossenen Box, sondern rendert normalerweise mit
   weißem Standardhintergrund - ohne explizite Farbe hier bliebe color:#fff dort weiße Schrift
   auf Weiß (siehe Bug 2026-08-01, René: "weiße Schrift auf weißem Grund"). */
.topbar nav .sprache-form select option {
  background: var(--navy); color: #fff;
}
.topbar nav a:hover, .topbar nav a:active { background: rgba(255,255,255,.12); color: var(--gold); }
.wer-angemeldet { color: var(--gold); margin-left: 10px; font-size: .9em; }

/* Menüband ein-/ausblenden (René 2026-08-06): auf dem Tablet nimmt das Band viel Platz weg.
   Der Schalter bleibt immer sichtbar - sonst käme man an ein ausgeblendetes Menü nicht mehr
   heran. Tap-Ziel bewusst 44 px, das Ding wird mit dem Finger bedient. */
.menue-schalter {
  background: rgba(255,255,255,.08); color: #fff; border: 1px solid rgba(255,255,255,.3);
  border-radius: 6px; min-width: 44px; min-height: 44px; font-size: 1.2em;
  cursor: pointer; line-height: 1; order: 99;
}
.menue-schalter:hover, .menue-schalter:active { background: rgba(255,255,255,.18); color: var(--gold); }
body.menue-aus .topbar nav { display: none; }

/* Fertigmeldungen-Glocke (Servicekasse): bewusst klein und nur dezent blinkend statt Vollbild+
   Klingelton wie die Theken-Anzeige - soll einen laufenden Bestellvorgang nicht unterbrechen,
   aber auch nicht leicht zu uebersehen sein. */
.fertig-glocke { position: relative; }
.fertig-glocke-btn {
  background: none; border: none; color: #fff; font-size: 1.4em; cursor: pointer;
  padding: 4px 8px; position: relative; touch-action: manipulation;
}
.fertig-glocke.blinkt .fertig-glocke-btn { animation: fertig-glocke-blinken 1.1s ease-in-out infinite; }
@keyframes fertig-glocke-blinken {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.25); }
}
.fertig-glocke-badge {
  position: absolute; top: 0; right: 0; background: var(--kupfer); color: #fff;
  border-radius: 10px; font-size: .5em; font-weight: bold; padding: 2px 6px; line-height: 1;
}
.fertig-glocke-liste {
  display: none; position: absolute; right: 0; top: 100%; margin-top: 6px;
  background: #fff; color: #1a1a1a; border-radius: 10px; box-shadow: 0 4px 16px rgba(0,0,0,.3);
  min-width: 220px; max-width: 90vw; padding: 10px; z-index: 200;
}
.fertig-glocke-liste.sichtbar { display: block; }
.fertig-glocke-leer { margin: 4px 0; color: var(--grau); font-size: .9em; }
.fertig-glocke-zeile {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  padding: 6px 4px; border-bottom: 1px solid #eee; font-weight: 600;
}
.fertig-glocke-ok {
  background: var(--gruen); color: #fff; border: none; border-radius: 6px;
  width: 28px; height: 28px; cursor: pointer; font-weight: bold; flex-shrink: 0;
}
.fertig-glocke-alle { width: 100%; margin-top: 8px; }
main { max-width: 1100px; margin: 16px auto; padding: 0 14px 90px; }
.fusszeile {
  max-width: 1100px; margin: 0 auto; padding: 12px 14px 24px; text-align: center;
  font-size: .8em; color: var(--grau);
}
h1 { color: var(--navy); font-size: 1.5em; }
@media (prefers-color-scheme: dark) { h1, h2 { color: var(--gold); } }
.card {
  background: #fff;
  border-radius: 10px;
  padding: 16px 18px;
  margin-bottom: 18px;
  box-shadow: 0 1px 4px rgba(0,0,0,.1);
}
.card-schmal { max-width: 460px; }
.servicekasse-liste { display: flex; flex-direction: column; gap: 4px; }

/* ---------- Gesamtrechnung: Platzauswahl + Tisch-Vorschau ---------- */
.gr-layout { display: flex; gap: 18px; flex-wrap: wrap; align-items: flex-start; }
.gr-formular { flex: 1 1 320px; min-width: 280px; }
.gr-vorschau-wrap { flex: 0 1 300px; min-width: 260px; }
.gr-vorschau {
  position: relative; width: 100%; aspect-ratio: 1; max-width: 280px; margin: 0 auto;
  background: #e8ede9; border: 2px dashed #bbb; border-radius: 10px; overflow: hidden;
}
@media (prefers-color-scheme: dark) { .gr-vorschau { background: #1a2420; } }
.gr-vorschau-tisch {
  position: absolute; display: flex; align-items: center; justify-content: center;
  background: #fff; border: 2px solid var(--navy); border-radius: 6px;
  font-size: .75em; font-weight: bold; text-align: center; padding: 2px; overflow: hidden;
}
.gr-vorschau-tisch.rund { border-radius: 50%; }
@media (prefers-color-scheme: dark) { .gr-vorschau-tisch { background: #1f2530; color: #e8e8e8; } }
.gr-vorschau-platz {
  position: absolute; transform: translate(-50%, -50%);
  width: 30px; height: 30px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: .85em; font-weight: bold; color: #fff;
  background: #9db0c4; touch-action: manipulation;
}
.gr-vorschau-platz.offen { background: var(--rot); cursor: pointer; }
.gr-vorschau-platz.offen.ausgewaehlt { background: var(--gold); color: #1a1a1a; }
.gr-vorschau-platz:active { transform: translate(-50%, -50%) scale(.9); }
.gr-dot-ausgewaehlt { background: var(--gold); }
.gr-dot-abgewaehlt { background: var(--rot); }
.gr-dot-kein { background: #9db0c4; }
.form-inline { display: flex; flex-wrap: wrap; gap: 14px; align-items: end; }
form label { display: flex; flex-direction: column; font-size: .85em; color: var(--grau); gap: 4px; margin-bottom: 10px; }
/* In form-inline übernimmt schon "gap" den Abstand beim Zeilenumbruch - das margin-bottom
   der Labels würde bei align-items:end sonst Buttons/lose Inputs ohne eigenes margin-bottom
   sichtbar höher wirken lassen als die Label-Inhalte daneben (z.B. Benutzerverwaltung: Passwort-
   Input ohne Label neben dem "ändern"-Button). */
.form-inline label { margin-bottom: 0; }
.checkbox-inline { flex-direction: row !important; align-items: center; gap: 6px !important; }
/* Schalter in einer Filterleiste (z.B. "deaktivierte Artikel anzeigen"). Eigene Klasse statt
   .checkbox-inline, weil die Filterleiste kein <form> ist - dort greift die Regel "form label"
   nicht, das Label waere also gar kein Flex-Container und flex-direction liefe ins Leere. */
.filter-schalter {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: .85em; color: var(--grau); cursor: pointer; margin-bottom: 0;
}
.filter-schalter input { min-height: 0; width: 18px; height: 18px; cursor: pointer; }
.filter-anzahl { color: var(--grau); opacity: .8; }
form input, form select, form textarea {
  font-size: .95em; padding: 4px 6px; border: 1px solid #ccc; border-radius: 6px; min-height: 30px;
}
form textarea { min-height: 90px; }
/* Zahlen-Seite (Bargeld-Rechner "Gegeben"/"Soll bezahlen"): bewusst bei der größeren,
   touch-optimierten Feldgröße belassen - hier wird im hektischen Servicebetrieb schnell mit
   echtem Bargeld gerechnet, anders als bei den Verwaltungsseiten oben. */
.bar-rechner input { font-size: 1.05em; padding: 12px; min-height: 46px; }
/* "Soll bezahlen": Ändern-Button direkt neben dem Feld, damit der vorbelegte Betrag (z.B. bei
   "machen Sie 13") per Antippen markiert wird, statt ihn erst manuell markieren zu müssen. */
.feld-mit-aendern-btn { display: flex; align-items: center; gap: 8px; }
.feld-mit-aendern-btn input { flex: 1; min-width: 0; }
.btn-aendern {
  flex: 0 0 auto; min-height: 46px; min-width: 46px; font-size: 1.2em;
  border: 1px solid var(--grau); background: transparent; border-radius: 8px;
  cursor: pointer; touch-action: manipulation;
}
@media (prefers-color-scheme: dark) { .btn-aendern { border-color: #555; } }
.checkbox, .radio { flex-direction: row !important; align-items: center; gap: 8px !important; }
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--navy);
  color: #fff;
  border: none;
  padding: 13px 20px;
  border-radius: 8px;
  cursor: pointer;
  text-decoration: none;
  font-size: 1.05em;
  min-height: 48px;
  touch-action: manipulation;
}
.btn:active { background: #022246; transform: scale(.98); }
.btn:disabled { opacity: .5; cursor: not-allowed; }
.btn-primary { background: var(--gruen); }
.btn-primary:active { background: #257f40; }
.btn-gefahr { background: var(--rot); }
.btn-klein { padding: 8px 14px; font-size: .9em; min-height: 40px; }
/* Speichern-Knopf innerhalb einer Kachel, rechts unten. Bei langen Einstellungsseiten steht so
   in JEDER Kachel ein Speichern, statt nur einmal ganz unten am Seitenende - dort wurde er
   schlicht übersehen (René 2026-08-06). 48 px hohes Tap-Ziel, weil die Seite am Pad bedient
   wird. */
.karte-speichern { display: flex; justify-content: flex-end; margin-top: 14px; }
.karte-speichern .btn { min-height: 48px; }
.btn-gross { width: 100%; font-size: 1.25em; min-height: 60px; margin-top: 12px; font-weight: bold; }
.btn-zurueck { background: transparent; color: var(--navy); padding: 8px 4px; min-height: 40px; }
@media (prefers-color-scheme: dark) { .btn-zurueck { color: var(--gold); } }
.tabelle { width: 100%; border-collapse: collapse; background: #fff; }
.tabelle th, .tabelle td { padding: 10px 10px; border-bottom: 1px solid #eee; text-align: left; }
.tabelle th.num, .tabelle td.num { text-align: right; font-variant-numeric: tabular-nums; }
.tabelle th { background: #f0f1f3; }
.tabelle tr.inaktiv { opacity: .5; }
.tabelle-kompakt th, .tabelle-kompakt td { padding: 4px 8px; font-size: .88em; }
.tabelle-kompakt .btn-icon { padding: 3px 7px; font-size: 1em; min-width: 30px; min-height: 30px; }
.artikel-aktionen { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.btn-icon { padding: 6px 10px; font-size: 1.1em; line-height: 1; min-width: 40px; }
.artikel-bearbeiten-popup-form { display: flex; flex-direction: column; gap: 4px; }
.geraet-warten { text-align: center; }
.geraet-qr { width: 220px; height: 220px; margin: 16px auto; display: block; border: 1px solid #eee; border-radius: 8px; }
.geraet-entscheidung-buttons { display: flex; gap: 10px; margin-top: 10px; }
.geraet-entscheidung-buttons .btn { flex: 1 1 0; }
.gesamt { font-size: 1.4em; font-weight: bold; }
.hinweis { color: var(--grau); font-style: italic; }
.badge-gesetzt, .badge-nicht-gesetzt {
  display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: .78em;
  font-weight: normal; font-style: normal; margin-left: 4px;
}
.badge-gesetzt { background: var(--gruen); color: #fff; }
.badge-nicht-gesetzt { background: #ccc; color: #333; }
.hinweis-inline { color: var(--grau); font-size: .85em; }
.flash { padding: 12px 14px; border-radius: 8px; margin-bottom: 12px; font-size: 1.05em; }
.flash-ok { background: #e3f6e6; color: #1a6b30; }
.flash-err { background: #fce4e2; color: #a8271b; }

.schulung-banner {
  display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px;
  padding: 12px 16px; border-radius: 8px; margin-bottom: 14px; font-weight: bold;
  background: #fff3cd; color: #7a5b00; border: 2px solid #e0b000;
}
@media (prefers-color-scheme: dark) {
  .schulung-banner { background: #4a3b00; color: #ffe27a; border-color: #a88400; }
}
.standbetrieb-banner {
  padding: 12px 16px; border-radius: 8px; margin-bottom: 14px; font-weight: bold;
  background: #e0ecff; color: #0a3d7a; border: 2px solid #3d7ad0;
}
@media (prefers-color-scheme: dark) {
  .standbetrieb-banner { background: #12294a; color: #a9c9ff; border-color: #3d6fb0; }
}

/* ---------- Tischplan ---------- */
.bereich-tabs { display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap; }
.tischplan-ansicht-umschalten { margin-bottom: 12px; }
.betriebsart-umschalten { display: inline-block; margin-left: 6px; }
.betriebsart-umschalten .btn {
  background: transparent; color: #fff; border: 1px solid rgba(255,255,255,.5);
  min-height: auto; padding: 10px 14px;
}
.betriebsart-umschalten .btn:active { background: rgba(255,255,255,.12); }
.bereich-tab {
  padding: 12px 24px; border-radius: 8px; border: 2px solid var(--navy);
  background: #fff; color: var(--navy); text-decoration: none; font-weight: bold;
  font-size: 1.1em; min-height: 48px; display: inline-flex; align-items: center;
  touch-action: manipulation;
}
.bereich-tab.aktiv { background: var(--navy); color: #fff; }
@media (prefers-color-scheme: dark) {
  .bereich-tab { background: transparent; color: var(--gold); border-color: var(--gold); }
  .bereich-tab.aktiv { background: var(--gold); color: #1a1a1a; }
}
.bereich-tab-mit-loeschen { position: relative; display: inline-flex; }
.bereich-tab-mit-loeschen form { position: absolute; top: -6px; right: -6px; }
.bereich-tab-loeschen {
  width: 20px; height: 20px; min-height: 20px; border-radius: 50%; border: none;
  background: var(--rot); color: #fff; font-size: .8em; padding: 0; line-height: 1;
  cursor: pointer; touch-action: manipulation;
}
.bereich { margin-bottom: 26px; }
/* Die Tischkarte hat ein FESTES Seitenverhaeltnis von 5:3 - Tischplaetze werden intern auf
   einem 1000x600-Raster gespeichert (siehe tisch_editor.js: dxUnits/1000, dyUnits/600, und
   _tischplan_flaeche.html: x/10 bzw. y/6 ergeben Prozent). Ohne aspect-ratio richtete sich
   die Breite nach dem Fenster und die Hoehe nach vh - im Hochformat wurde die Karte dadurch
   horizontal gestaucht und vertikal gestreckt (auf dem Pad: Tische 79x90 statt 115x64 px,
   also 31 % schmaler und hochkant gekippt). Die Karte bildete den echten Raum dann nicht mehr
   ab, und der Editor (der mit demselben Raster rechnet) zeigte eine andere Anordnung als die
   Ansicht. Rene 2026-08-06: "quer ist die Ansicht normal, senkrecht ist die Ansicht kleiner".
   max-width haelt die Karte zusaetzlich so klein, dass sie samt max-height auf den Schirm
   passt, ohne das Verhaeltnis zu brechen. */
.plan-flaeche {
  position: relative;
  width: 100%;
  aspect-ratio: 5 / 3;
  max-height: clamp(320px, 60vh, 560px);
  max-width: calc(clamp(320px, 60vh, 560px) * 5 / 3);
  margin-left: auto;
  margin-right: auto;
  background: #e8ede9;
  border: 2px dashed #bbb;
  border-radius: 10px;
  overflow: hidden;
}
.plan-flaeche.plan-gross {
  max-height: clamp(460px, 78vh, 900px);
  max-width: calc(clamp(460px, 78vh, 900px) * 5 / 3);
  margin-bottom: 16px;
}
@media (prefers-color-scheme: dark) { .plan-flaeche { background: #1a2420; } }
.plan-tisch {
  position: absolute;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  background: #fff;
  border: 2px solid var(--navy);
  border-radius: 8px;
  padding: 4px;
  min-width: 60px;
  min-height: 34px;
  text-align: center;
}
.plan-tisch.rund { border-radius: 50%; }
.plan-tisch.gesamtrechnung-moeglich { border-color: var(--gold); border-style: dashed; }
.plan-tisch-gesamtrechnung {
  display: flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--gold); text-decoration: none; font-size: .9em;
  touch-action: manipulation;
}
.plan-tisch-gesamtrechnung:active { transform: scale(.9); }
.plan-editor .draggable { cursor: grab; user-select: none; touch-action: none; }
.plan-tisch-name { font-weight: bold; font-size: .85em; }
.plan-tisch-reservierung {
  display: block; max-width: 100%; font-size: .7em; color: #01152b; text-decoration: none;
  background: var(--gold); border-radius: 6px; padding: 1px 6px; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; touch-action: manipulation;
}
.reservierung-inline-form { margin: 0; }
/* Hinweis bei der Reservierungsannahme (Ruhetag / ausserhalb der Oeffnungszeit / Kuechenschluss).
   Bewusst kraeftig und ueber die volle Formularbreite: das Formular ist "form-inline", eine
   dezente Randnotiz zwischen den Feldern uebersieht man am Telefon garantiert. Der Anlegen-Knopf
   rutscht dadurch unter die Warnung - man kommt also nicht daran vorbei. */
.res-warnung {
  flex: 1 0 100%; margin: 4px 0 2px; padding: 10px 12px; border-radius: 8px;
  background: rgba(231, 36, 14, .12); border: 2px solid var(--rot);
}
.res-warnung-text { margin: 0 0 6px; font-weight: bold; color: var(--rot); }
/* flex-direction ausdruecklich: die globale Regel "form label" stellt Labels sonst untereinander
   (Beschriftung ueber dem Feld), hier soll der Haken aber NEBEN dem Text stehen. min-height 48px
   fuers Antippen auf dem Pad. */
.res-warnung-haken {
  display: flex; flex-direction: row; align-items: center; gap: 8px; min-height: 48px;
  cursor: pointer; font-weight: normal; font-size: .95em; color: inherit;
}
.res-warnung-haken input { width: 22px; height: 22px; flex: 0 0 auto; }
/* Reservierungs-Badge auf der Tischkarte, nach Zeitbezug eingefaerbt - gleiche Bedeutung wie in
   der Belegungsansicht, damit niemand zweierlei Farbcodes lernen muss:
   laufend = kupfern (Gast sitzt gleich/schon da), bald = gelb (Achtung, in Kuerze),
   spaeter = grau (nur Information, der Tisch ist jetzt frei). */
.badge-res-laufend { background: var(--kupfer); color: #fff; }
.badge-res-bald { background: var(--gold); color: #1a1a1a; }
.badge-res-spaeter { background: transparent; color: var(--grau); border: 1px solid rgba(107,114,128,.4); }
/* Ueberzogen OHNE wartenden Nachfolger: reine Information, bewusst ruhig. Blinkte alles, was
   ueberzieht, blinkte an einem gut gebuchten Abend die halbe Seite - und dann schaut niemand
   mehr hin. Das Blinken ist fuer den Fall reserviert, in dem wirklich jemand wartet. */
.badge-res-ueberzogen { background: var(--gold); color: #1a1a1a; }
/* Das Badge ist zugleich der Knopf "Gaeste sind da" - Browser-Standardstyling zuruecksetzen
   und auf Tap-Groesse bringen (mind. 44px, das Ding wird mitten im Service mit dem Daumen
   getroffen). Der Zusatz "Gäste da?" sagt, dass man draufdruecken kann; ohne ihn haelt man das
   Badge fuer eine reine Anzeige. */
/* Groesse exakt wie das reine Anzeige-Badge - eine eigene Tap-Hoehe hatte die Tischkarten
   sichtbar aufgeblaeht (René 2026-08-06: "viel zu gross"). Dass man tippen kann, sagt jetzt ein
   einzelnes Haekchen statt eines Textes; die Erklaerung steht im Tooltip. */
/* Kompakte Variante fuer die Reservierungs-Badges im einfachen Tischplan. Die globale
   .badge-reserviert bleibt unangetastet - sie wird auch anderswo verwendet. */
.badge-reserviert.badge-res-laufend, .badge-reserviert.badge-res-bald,
.badge-reserviert.badge-res-spaeter, .badge-reserviert.badge-res-ueberzogen,
.badge-reserviert.badge-res-konflikt {
  font-size: .68em; padding: 1px 6px; line-height: 1.5;
}
button.badge-antippbar {
  border: none; font: inherit; cursor: pointer; display: inline-flex; align-items: center;
  gap: 4px; touch-action: manipulation; text-align: left;
}
button.badge-antippbar:active { transform: scale(.97); }
.res-ankunft-knoepfe { display: flex; flex-direction: column; gap: 10px; }
.res-ankunft-knoepfe .btn { min-height: 52px; font-size: 1em; }
.badge-res-konflikt { background: var(--rot); color: #fff; animation: res-konflikt-blinken 1s ease-in-out infinite; }
@keyframes res-konflikt-blinken {
  0%, 100% { background: var(--rot); }
  50% { background: #ff6a55; }
}
.tisch-karte-einfach.res-konflikt { border: 2px solid var(--rot); }
.tisch-wartet {
  margin-top: 10px; padding: 6px 9px; border-radius: 6px; font-size: .8em; font-weight: bold;
  background: rgba(231,36,14,.12); color: var(--rot);
}

/* ---- Tischgruppen-Pflege: welche Tische duerfen zusammengeschoben werden ----
   Die Tische werden als antippbare Kacheln gezeigt statt als Auswahlliste - man sucht sie
   raeumlich, nicht alphabetisch. Ausgewaehlt = kraeftig, wie ein gedruecktes Schalterfeld. */
.tischgruppe-form { border: 1px solid #ddd; border-radius: 10px; padding: 12px; margin-bottom: 14px; }
@media (prefers-color-scheme: dark) { .tischgruppe-form { border-color: #444; } }
.tischgruppe-kopf { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.tischgruppe-name { flex: 1 1 200px; font-weight: bold; }
.tischgruppe-anzahl { font-size: .85em; color: var(--grau); white-space: nowrap; }
.tischgruppe-tische { display: flex; flex-wrap: wrap; gap: 8px; }
.tischgruppe-kachel { position: relative; margin: 0; cursor: pointer; }
.tischgruppe-kachel input { position: absolute; opacity: 0; width: 0; height: 0; }
.tischgruppe-kachel span {
  display: inline-flex; flex-direction: column; align-items: center; justify-content: center;
  min-width: 76px; min-height: 48px; padding: 6px 10px; border-radius: 8px;
  border: 2px solid #cbd5e1; background: transparent; font-size: .85em; font-weight: bold;
  color: inherit; touch-action: manipulation;
}
.tischgruppe-kachel span i { font-style: normal; font-weight: normal; font-size: .8em; color: var(--grau); }
.tischgruppe-kachel input:checked + span { border-color: var(--gold); background: var(--gold); color: #1a1a1a; }
.tischgruppe-kachel input:checked + span i { color: #1a1a1a; }
.tischgruppe-kachel input:focus-visible + span { outline: 2px solid var(--navy); outline-offset: 2px; }
.tischgruppe-fuss { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.tischgruppe-neu { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-end; margin-top: 6px; }

/* ---- Belegung, grafische Ansicht: Tischkacheln wie im einfachen Tischplan + Zeitregler ----
   René: "Die meisten Menschen sind visuelle Menschen. Wenige koennen aus einer Tabelle
   Zusammenhaenge ableiten." Deshalb ist das die Standardansicht. Die Kacheln uebernehmen bewusst
   die Optik der einfachen Tischansicht (.tisch-karte-einfach / .platz-btn-einfach) - wer den
   Tischplan bedienen kann, versteht diese Seite ohne Erklaerung. Der Regler liefert die Zeit,
   die ein Grundriss von sich aus nicht darstellen kann. */
.belegung-uhrzeit-block { display: flex; align-items: center; gap: 12px; flex: 1 1 320px; }
.belegung-uhrzeit { font-size: 1.6em; font-weight: bold; min-width: 3.2em; font-variant-numeric: tabular-nums; }
.belegung-regler { flex: 1 1 auto; min-width: 160px; height: 48px; touch-action: manipulation; }
.belegung-bereich { margin: 18px 0 6px; font-size: 1em; color: var(--grau); }
.belegung-punkt { display: inline-block; width: 14px; height: 14px; border-radius: 4px; }
.belegung-punkt.frei { background: var(--gruen); }
.belegung-punkt.reserviert { background: var(--kupfer); }
.belegung-punkt.angekommen { background: var(--rot); }
.belegung-punkt.bald { background: var(--gold); }
/* Zustand des ganzen Tisches als farbiger Rand - die einzelnen Platzkacheln zeigen zusaetzlich,
   wie viele Plaetze die Reservierung tatsaechlich braucht. */
.belegung-karte { border-left: 6px solid transparent; transition: border-color .15s; }
.belegung-karte.zustand-frei { border-left-color: var(--gruen); }
.belegung-karte.zustand-reserviert { border-left-color: var(--kupfer); }
.belegung-karte.zustand-angekommen { border-left-color: var(--rot); }
.belegung-karte.zustand-bald { border-left-color: var(--gold); }
.belegung-karte-info { font-size: .75em; color: var(--grau); text-align: right; }
.belegung-karte-naechste { font-size: .72em; color: var(--grau); margin-top: 6px; min-height: 1em; }
.belegung-platz { cursor: default; }
.belegung-platz.frei { background: var(--gruen); }
.belegung-platz.belegt { background: var(--kupfer); }
.belegung-karte.zustand-angekommen .belegung-platz.belegt { background: var(--rot); }
.belegung-ohne-block { margin-top: 18px; padding-top: 10px; border-top: 2px solid var(--rot); }
.belegung-ohne-liste { display: flex; flex-wrap: wrap; gap: 8px; }
.belegung-ohne-chip {
  display: inline-block; padding: 6px 10px; border-radius: 14px; font-size: .8em;
  background: rgba(231,36,14,.12); color: var(--rot); font-weight: bold;
}

/* ---- Belegungsuebersicht: Zeitachse je Tisch (Reservierungen) ----
   Bewusst eine Zeitachse statt des Grundrisses aus dem Tischplan: bei Reservierungen lautet die
   Frage nicht "wo steht der Tisch", sondern "wann ist er frei" - und Zeit kann ein Grundriss
   nicht darstellen. Die Balken werden in Prozent der Achse positioniert, dadurch passt sich das
   Ganze jeder Breite an; auf schmalen Geraeten scrollt der Block waagerecht statt die Seite. */
.belegung-kopf { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; justify-content: space-between; margin-bottom: 12px; }
.belegung-legende { display: flex; flex-wrap: wrap; gap: 14px; font-size: .85em; color: var(--grau); align-items: center; }
.belegung-legende span { display: inline-flex; align-items: center; gap: 6px; }
.belegung-muster { display: inline-block; width: 22px; height: 12px; border-radius: 3px; }
.belegung-puffer-muster { background: repeating-linear-gradient(45deg, #cbd5e1, #cbd5e1 3px, transparent 3px, transparent 6px); }
.belegung-vorschlag-muster { border: 2px dashed var(--gruen); background: rgba(46,158,79,.12); }
.belegung-tabelle { overflow-x: auto; padding-bottom: 4px; }
.belegung-zeile { display: flex; align-items: stretch; min-width: 620px; }
.belegung-zeile + .belegung-zeile { border-top: 1px solid rgba(107,114,128,.18); }
.belegung-zeile-kopf { border: 0; height: 22px; }
.belegung-zeile-ohne { border-top: 2px solid var(--grau); }
.belegung-name {
  flex: 0 0 110px; display: flex; align-items: center; justify-content: space-between; gap: 6px;
  font-size: .85em; font-weight: bold; padding: 6px 8px 6px 0; white-space: nowrap; overflow: hidden;
}
.belegung-plaetze { font-weight: normal; color: var(--grau); font-size: .9em; }
.belegung-spur { position: relative; flex: 1 1 auto; min-height: 38px; }
.belegung-zeile-kopf .belegung-spur { min-height: 0; }
.belegung-raster { position: absolute; top: 0; bottom: 0; width: 1px; background: rgba(107,114,128,.15); }
.belegung-stunde { position: absolute; top: 0; font-size: .72em; color: var(--grau); transform: translateX(-50%); }
.belegung-balken {
  position: absolute; top: 4px; bottom: 4px; background: var(--gold); color: #1a1a1a;
  border-radius: 5px; padding: 0 5px; display: flex; align-items: center; overflow: hidden;
  font-size: .75em; box-shadow: 0 1px 2px rgba(0,0,0,.15);
}
.belegung-angekommen { background: var(--gruen); color: #fff; }
/* Ohne Tisch: rot, weil es eine offene Aufgabe ist - nicht nur eine andere Farbe.
   Halbdurchsichtig, weil sich diese Balken ueberlappen duerfen (mehrere zur selben Zeit). */
.belegung-offen { background: rgba(231,36,14,.75); color: #fff; }
.belegung-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.belegung-puffer {
  position: absolute; top: 4px; bottom: 4px; border-radius: 0 5px 5px 0;
  background: repeating-linear-gradient(45deg, #cbd5e1, #cbd5e1 3px, transparent 3px, transparent 6px);
}
.belegung-vorschlag {
  position: absolute; top: 4px; bottom: 4px; border: 2px dashed var(--gruen);
  background: rgba(46,158,79,.12); border-radius: 5px; padding: 0 4px; display: flex;
  align-items: center; overflow: hidden; font-size: .75em; color: var(--gruen); font-weight: bold;
}
.belegung-offen-hinweis { color: var(--rot); font-weight: bold; }
.belegung-offen-name { display: inline-block; margin: 2px 6px 2px 0; padding: 2px 8px; border-radius: 10px; background: rgba(231,36,14,.12); font-weight: normal; }
.belegung-passt { color: var(--gruen); font-weight: bold; }
@media (prefers-color-scheme: dark) {
  .belegung-puffer, .belegung-puffer-muster {
    background: repeating-linear-gradient(45deg, #4b5563, #4b5563 3px, transparent 3px, transparent 6px);
  }
}

/* Verfuegbarkeitsmeldung ueber dem Anlegen-Knopf: ganze Formularbreite, damit sie nicht
   zwischen den Feldern untergeht (das Formular ist form-inline). */
.res-verfuegbar { flex: 1 0 100%; margin: 2px 0; font-size: .95em; font-weight: bold; min-height: 1.2em; }
.res-verfuegbar-laeuft { color: var(--grau); font-weight: normal; font-style: italic; }
.res-verfuegbar-ja { color: var(--gruen); }
.res-verfuegbar-nein { color: var(--rot); }
.res-zeit-zelle { white-space: nowrap; }
/* Endzeit dezenter als die Startzeit: der Beginn ist die Information, die beim Ueberfliegen
   der Liste zaehlt, das Ende ist Zusatzinfo fuer die Tischplanung. */
.res-ende { color: var(--grau); font-size: .9em; }
.res-zeit-zelle .reservierung-inline-form { display: inline-block; vertical-align: middle; }
/* offener Hinweis = da muss noch jemand beim Gast anrufen; erledigt = nur noch Nachweis */
tr.res-warnung-offen > td { background: rgba(231, 36, 14, .08); }
.res-hinweis-offen { background: var(--rot); }
.res-hinweis-erledigt { background: transparent; }
.tisch-liste { margin-top: 10px; margin-bottom: 30px; }
.tisch-liste-aktionen { display: flex; gap: 8px; flex-wrap: wrap; }
.benutzer-aktionen { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.benutzer-passwort-form { gap: 6px; }
.benutzer-passwort-form input { padding: 6px 8px; font-size: .9em; min-height: 32px; width: 130px; }
.benutzer-rolle-form select { padding: 4px 6px; font-size: .9em; min-height: 40px; }
/* einheitliche Zeilenhöhe, egal ob Rolle-Zelle nur Text (Administration) oder ein Select-Feld enthält;
   ohne das eigene min-height würde das Select sonst die globale "form select { min-height: 46px }"-Regel
   erben und die Zeile höher als alle anderen machen */
.benutzer-zeile td { min-height: 60px; vertical-align: middle; }
.plan-platz {
  position: absolute;
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 50%;
  text-decoration: none; font-size: .9em; font-weight: bold; color: #fff;
  touch-action: manipulation;
  transform: translate(-50%, -50%);
}
.plan-platz:active { transform: translate(-50%, -50%) scale(.95); }
.plan-platz.frei { background: var(--gruen); }
.plan-platz.belegt { background: var(--rot); }
.plan-platz.reserviert-heute { background: var(--kupfer); }
.plan-platz.aktuell { background: var(--gold); color: #1a1a1a; }
.plan-platz.ueberfaellig { animation: platz-blinken 1s ease-in-out infinite; }
@keyframes platz-blinken {
  0%, 100% { background: var(--rot); box-shadow: 0 0 0 0 rgba(231,36,14,.7); }
  50% { background: #ff9800; box-shadow: 0 0 0 6px rgba(255,152,0,0); }
}

/* Einfache Tischplan-Ansicht (Default, ohne Pro-Modul) - Liste statt frei positionierter Karte */
.tischliste-einfach {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 12px;
  margin-top: 12px;
}
.tisch-karte-einfach {
  border: 1px solid #ddd; border-radius: 10px; padding: 10px 12px; background: #fff;
}
@media (prefers-color-scheme: dark) { .tisch-karte-einfach { background: #1e1e1e; border-color: #444; } }
.tisch-karte-einfach-kopf { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.platzliste-einfach { display: flex; flex-wrap: wrap; gap: 8px; }
.platz-btn-einfach {
  display: inline-flex; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: 8px;
  text-decoration: none; font-size: 1em; font-weight: bold; color: #fff;
  touch-action: manipulation;
}
/* Für den Verschieben-Dialog (Einfach-Ansicht) sind manche dieser Kacheln echte <button>
   statt <a> - Browser-Standardstyling (Rahmen/Hintergrund/Schrift) zurücksetzen. */
button.platz-btn-einfach { border: none; font: inherit; cursor: pointer; }
.platz-btn-einfach:active { transform: scale(.95); }
.platz-btn-einfach.frei { background: var(--gruen); }
.platz-btn-einfach.belegt { background: var(--rot); }
.platz-btn-einfach.reserviert-heute { background: var(--kupfer); }
.platz-btn-einfach.ueberfaellig { animation: platz-blinken 1s ease-in-out infinite; }
.platz-btn-einfach.reserve { box-shadow: 0 0 0 3px #6b7d94; }
.platz-btn-einfach.aktuell { background: var(--gold); color: #1a1a1a; }
.badge-reserviert {
  font-size: .75em; color: #01152b; text-decoration: none; background: var(--gold);
  border-radius: 6px; padding: 2px 7px; white-space: nowrap; overflow: hidden;
  text-overflow: ellipsis; max-width: 100%;
}
.plan-platz-form { position: absolute; transform: translate(-50%, -50%); }
.plan-platz-form .plan-platz {
  position: static; transform: none; border: none; padding: 0; margin: 0;
  font-family: inherit; cursor: pointer;
}
.plan-platz-form .plan-platz:active { transform: scale(.95); }
.dot.aktuell { background: var(--gold); }
.plan-platz-editor {
  position: absolute;
  display: flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 50%;
  background: var(--navy); color: #fff; font-weight: bold; font-size: .9em;
  transform: translate(-50%, -50%);
}
@media (prefers-color-scheme: dark) { .plan-platz-editor { background: var(--gold); color: #1a1a1a; } }
.platz-loeschen-form { position: absolute; top: -6px; right: -6px; }
.platz-loeschen {
  width: 20px; height: 20px; min-height: 20px; border-radius: 50%; border: none;
  background: var(--rot); color: #fff; font-size: .8em; padding: 0; line-height: 1;
  cursor: pointer; touch-action: manipulation;
}
.legende { display: flex; gap: 8px 20px; align-items: center; color: var(--grau); flex-wrap: wrap; }
/* KEIN white-space: nowrap hier! Der Legendeneintrag zur Gang-Ueberfaelligkeit ist ein langer
   Satz; mit nowrap wurde er auf einem Pad im Hochformat 985 px breit und blaehte die Seite auf
   999 px bei 820 px Viewport auf. Android skaliert dann die GESAMTE Seite herunter, damit sie
   passt - Menueband, Schrift und Inhalt wirken kleiner und rechts bleibt ein leerer Streifen,
   obwohl der Browser-Zoom auf 100 % steht (Rene 2026-08-06: "es sieht aus, als wenn die
   Startseite einen negativen Zoom hat"). max-width haelt jeden Eintrag im Container, der Punkt
   davor darf nicht schrumpfen und bleibt am Textanfang. */
.legende-eintrag {
  display: inline-flex; align-items: flex-start; gap: 4px; max-width: 100%;
}
.legende-eintrag .dot { flex: 0 0 auto; margin-top: .15em; }
.dot { display: inline-block; width: 14px; height: 14px; border-radius: 50%; margin-right: 4px; vertical-align: middle; }
.dot.frei { background: var(--gruen); }
.dot.belegt { background: var(--rot); }
.dot.ueberfaellig { background: #ff9800; }
.dot.reserviert-heute { background: var(--kupfer); }
.dot.reserve { background: #6b7d94; }

/* ---------- Reserve-Stühle ---------- */
.plan-platz.reserve { box-shadow: 0 0 0 3px #6b7d94; }
.reserve-pool {
  margin-top: 14px; padding: 10px 14px; border-radius: 10px;
  background: #eef2f7; border: 2px dashed #9fb0c3;
}
@media (prefers-color-scheme: dark) { .reserve-pool { background: #1c2733; border-color: #45566b; } }
.reserve-pool-titel { font-weight: 600; margin-bottom: 8px; font-size: .9em; color: var(--grau); }
.reserve-pool-liste { display: flex; gap: 10px; flex-wrap: wrap; }
.plan-platz.reserve-chip {
  position: static; transform: none; background: #6b7d94; border: 2px dashed #fff;
}
.reserve-verwaltung-eintrag { display: inline-flex; align-items: center; gap: 8px; }
.reserve-zurueckgeben { margin: 10px 0 16px; }
.plan-tisch-klickbar { padding: 0; cursor: pointer; touch-action: manipulation; }
.plan-tisch-klickbar:active { background: #eee; }
@media (prefers-color-scheme: dark) { .plan-tisch-klickbar:active { background: #2a3140; } }
.plan-tisch-btn {
  all: unset; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;
  text-align: center; font-weight: bold; font-size: .85em; cursor: pointer; touch-action: manipulation;
  color: inherit; box-sizing: border-box;
}
.plan-platz-info { cursor: default; }
.plan-platz-info:active { transform: translate(-50%, -50%); }

/* ---------- Bestellseite: zweispaltig ab Tablet-Breite, als 2x2-Kastenraster (nach Skizze):
   oben Platzleiste (links) + Aktionsleiste (rechts) auf gleicher Höhe, darunter links
   Kategorien+Artikel gestapelt, rechts die Bestellung - über die volle restliche Höhe. Ab dieser
   Breite steht die ganze Ansicht fest (kein Seiten-Scroll, siehe .body-fest/.main-fest) -
   stattdessen scrollen Kategorien horizontal und Artikel-Grid/Bestellung jeweils für sich
   vertikal, jede Spalte unabhängig von der anderen. Höhe läuft über eine echte Flex-Kette
   body → main → bestellseite-layout (flex:1, min-height:0 auf jeder Zwischenebene) statt über
   einen geschätzten "calc(100vh - Xpx)" Fixwert - Kopfleiste/Fußzeile dürfen dadurch beliebig
   hoch sein (Zeilenumbruch, andere Zoomstufe, Gerät...), die Bestellung/Artikel-Bereiche
   erweitern bzw. verkleinern sich automatisch um genau den Rest. Unterhalb von 860px
   (Handy/Tablet hochkant) bleibt die Seite normal scrollend und einspaltig - dafür wird
   body.body-fest/main.main-fest dort bewusst NICHT eingeschränkt (Regeln nur in der
   Media-Query). */
main.main-fest { max-width: 1100px; }
/* Überschriften auf der Bestellseite ca. 40% kleiner (Tisch/Platz-Titel + "Artikel"/"Bestellung")
   - sparen Platz, der bei der festen Höhe (.main-fest) sonst dem scrollenden Inhalt fehlt. */
main.main-fest h1, main.main-fest h2 { font-size: .9em; }
@media (min-width: 860px) {
  body.body-fest { display: flex; flex-direction: column; min-height: 100vh; }
  body.body-fest > .topbar, body.body-fest > .fusszeile { flex: 0 0 auto; }
  body.body-fest > main.main-fest {
    flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; overflow: hidden;
    padding-bottom: 10px;
  }
  main.main-fest > .bestellseite-layout { flex: 1 1 auto; min-height: 0; }
}
.bestellseite-layout { display: flex; flex-direction: column; gap: 16px; }
.spalte-warenkorb { width: 100%; order: 1; }
.spalte-artikel { width: 100%; order: 2; min-width: 0; }
@media (min-width: 860px) {
  .bestellseite-layout { flex-direction: row; height: 100%; }
  .spalte-artikel {
    flex: 2 1 0; order: 1; display: flex; flex-direction: column; gap: 10px; min-height: 0;
  }
  .spalte-warenkorb {
    flex: 1 1 0; order: 2; display: flex; flex-direction: column; gap: 10px; min-height: 0;
  }
}

/* Platzleiste (links oben) und Aktionsleiste (rechts oben): eigene Kästen auf gleicher Zeile,
   feste Höhe (reservieren den Platz auch wenn leer, damit beide Spalten oben bündig bleiben).
   EIN Container statt vorher verschachtelter Box-in-Box - die doppelte Verschachtelung hatte
   zwei overflow-x:auto-Ebenen erzeugt (jede erzwingt implizit auch overflow-y:auto), wodurch
   die nach oben herausragenden Mengen-Badges an den Aktions-Symbolen (top:-6px) direkt am Rand
   der inneren Box abgeschnitten wurden, ohne das Padding der äußeren Box zu berücksichtigen.
   Außerdem min-height von 56 auf 64px erhöht, damit auch bei nur einer Ebene genug Luft über
   den 40px hohen Symbolen bleibt. */
#platzleiste-inhalt, #aktionen-inhalt {
  background: #fff; border-radius: 10px; padding: 8px 12px; min-height: 64px;
  display: flex; align-items: center; gap: 8px; flex-wrap: nowrap;
  overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; flex: 0 0 auto;
}
@media (prefers-color-scheme: dark) { #platzleiste-inhalt, #aktionen-inhalt { background: #1f2530; } }
#aktionen-inhalt { justify-content: flex-end; }
.warenkorb-gesamt-inline { font-weight: bold; font-size: 1.05em; margin-right: 2px; white-space: nowrap; }
.btn-aktion-icon {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  height: 40px; width: 40px; border-radius: 10px; border: none; background: var(--navy);
  color: #fff; font-size: 1.1em; line-height: 1; cursor: pointer; text-decoration: none;
  touch-action: manipulation; padding: 0;
}
.btn-aktion-icon:active { transform: scale(.94); }
.btn-aktion-icon.btn-senden { background: var(--kupfer); }
.btn-aktion-icon.btn-tisch-senden { background: var(--navy); }
.btn-aktion-icon.btn-zahlen { background: var(--gruen); }
.btn-aktion-badge {
  position: absolute; top: -6px; right: -6px; background: var(--gold); color: #1a1a1a;
  border-radius: 10px; font-size: .45em; font-weight: bold; padding: 3px 5px; line-height: 1;
  min-width: 14px; text-align: center;
}

/* ---------- Warenkorb (Bestellung je Platz) ---------- */
.warenkorb-kopf { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; }
.warenkorb-kopf h2 { margin: 0; }
/* Ab 860px füllt die Bestellung-Karte die ganze restliche Höhe der rechten Spalte, der Kopf
   (Überschrift + Tisch wechseln) bleibt fest oben, nur die Positionsliste scrollt für sich. */
@media (min-width: 860px) {
  #warenkorb-inhalt { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
  #warenkorb-inhalt .card.warenkorb {
    flex: 1 1 auto; min-height: 0; margin-bottom: 0; display: flex; flex-direction: column; overflow: hidden;
  }
  #warenkorb-inhalt .cart-liste { flex: 1 1 auto; min-height: 0; overflow-y: auto; }
}
.gruppen-karte > summary { cursor: pointer; list-style: none; }
.gruppen-karte > summary::-webkit-details-marker { display: none; }
.gruppen-karte > summary::before {
  content: '▸'; display: inline-block; margin-right: 8px; color: var(--grau);
  transition: transform .15s;
}
.gruppen-karte[open] > summary::before { transform: rotate(90deg); }
.gruppen-inhalt { margin-top: 14px; }
.statistik-presets { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.statistik-chart-wrapper { width: 100%; overflow-x: auto; }
#statistik-chart { display: block; width: 100%; }
.statistik-legende { display: flex; gap: 18px; flex-wrap: wrap; margin: 10px 0 4px; font-size: .85em; color: var(--grau); }
.statistik-legende span { display: inline-flex; align-items: center; gap: 6px; }
.statistik-swatch { display: inline-block; width: 12px; height: 12px; border-radius: 2px; }
.statistik-swatch-linie { border-radius: 50%; }
.statistik-zeittabelle { margin-top: 14px; }
.statistik-tag-zeile { cursor: pointer; }
.statistik-tag-zeile:hover { background: rgba(0,0,0,.03); }
@media (prefers-color-scheme: dark) { .statistik-tag-zeile:hover { background: rgba(255,255,255,.06); } }
.statistik-aufklapp-pfeil { color: var(--grau); width: 18px; transition: transform .15s; }
.statistik-tag-zeile.statistik-tag-offen .statistik-aufklapp-pfeil { transform: rotate(90deg); }
.statistik-tag-detail td { padding: 0 10px 14px; border-bottom: 1px solid #eee; }
.statistik-tag-artikel { margin: 0; }
.statistik-tag-artikel th, .statistik-tag-artikel td { padding: 6px 10px; font-size: .92em; }
.statistik-sortierbar thead th { cursor: pointer; user-select: none; white-space: nowrap; }
.statistik-sortierbar thead th:hover { color: var(--gold); }
.statistik-sortierbar thead th.sort-auf::after { content: ' \25B2'; font-size: .75em; }
.statistik-sortierbar thead th.sort-ab::after { content: ' \25BC'; font-size: .75em; }
.gruppen-titel-zeile { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.gruppen-name-form { display: flex; align-items: center; gap: 4px; }
.gruppen-name-eingabe {
  font-size: 1.2em; font-weight: 600; border: 1px solid transparent; border-radius: 4px;
  padding: 2px 6px; min-width: 120px; background: transparent; color: inherit;
}
.gruppen-name-eingabe:hover, .gruppen-name-eingabe:focus {
  border-color: var(--grau); background: rgba(0,0,0,.03);
}
@media (prefers-color-scheme: dark) {
  .gruppen-name-eingabe:hover, .gruppen-name-eingabe:focus { background: rgba(255,255,255,.06); }
}
.cart-liste { display: flex; flex-direction: column; gap: 8px; }
.cart-zeile {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 4px; border-bottom: 1px solid #eee;
}
@media (prefers-color-scheme: dark) { .cart-zeile { border-color: #333; } }
.cart-info { flex: 1 1 160px; min-width: 140px; }
.cart-name { font-weight: 600; font-size: 1.05em; }
.cart-detail { color: var(--grau); font-size: .85em; }
.tag {
  display: inline-block; background: var(--gold); color: #1a1a1a;
  border-radius: 4px; padding: 1px 6px; font-size: .75em; font-weight: bold;
}
.hauptgang-toggle {
  margin-top: 4px; font-size: .78em; padding: 5px 10px; border-radius: 12px;
  border: 1px solid var(--grau); background: transparent; color: var(--grau); cursor: pointer;
  touch-action: manipulation;
}
.hauptgang-toggle.aktiv { background: var(--gold); border-color: var(--gold); color: #1a1a1a; font-weight: bold; }
@media (prefers-color-scheme: dark) { .hauptgang-toggle { color: #aaa; border-color: #555; } }
.notiz-btn {
  margin-top: 4px; font-size: .78em; padding: 5px 10px; border-radius: 12px;
  border: 1px solid var(--grau); background: transparent; color: var(--grau); cursor: pointer;
  touch-action: manipulation; display: block;
}
@media (prefers-color-scheme: dark) { .notiz-btn { color: #aaa; border-color: #555; } }
.cart-notiz {
  font-size: .85em; font-weight: bold; color: var(--rot); background: rgba(231,36,14,.1);
  border-radius: 6px; padding: 3px 8px; margin-top: 4px; display: inline-block; width: fit-content;
}
.notiz-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.notiz-chip {
  border: 1px solid var(--gold); background: transparent; color: var(--navy); border-radius: 999px;
  padding: 6px 12px; font-size: .85em; cursor: pointer; touch-action: manipulation;
}
@media (prefers-color-scheme: dark) { .notiz-chip { color: var(--gold); } }
.notiz-textarea {
  width: 100%; border: 2px solid #d7dbe3; border-radius: 10px; padding: 10px; font: inherit;
  resize: vertical;
}
@media (prefers-color-scheme: dark) { .notiz-textarea { background: #14181f; color: #e8e8e8; border-color: #3a4356; } }
.tag-storniert {
  display: inline-block; background: var(--rot); color: #fff;
  border-radius: 4px; padding: 2px 10px; font-size: .55em; font-weight: bold;
  vertical-align: middle;
}
.tag-fertig { background: var(--gruen); color: #fff; }
.tag-ungesendet { background: var(--kupfer); color: #fff; }
/* Platznummer je Position (Tischbestellung) - bewusst dezenter/grau statt Gold, damit sie neben
   "mitnehmen"/Status-Tags nicht die Aufmerksamkeit auf sich zieht, aber trotzdem klein sichtbar ist. */
.tag-platz { background: #e2e4e8; color: #444; font-weight: 600; }
@media (prefers-color-scheme: dark) { .tag-platz { background: #333c4a; color: #cfd6e0; } }
.btn-senden { background: var(--kupfer); }
.btn-senden:active { background: #95583a; }
.btn-tisch-senden { background: var(--navy); }
.btn-tisch-senden:active { background: #0d1e33; }
.platz-chip {
  display: inline-flex; align-items: center; gap: 6px; height: 40px; padding: 0 14px;
  border-radius: 20px; border: 2px solid #ccc; background: #f0f1f3; color: #1a1a1a;
  text-decoration: none; font-weight: bold; touch-action: manipulation; flex: 0 0 auto;
}
.platz-chip.aktiv { border-color: var(--navy); background: var(--navy); color: #fff; }
.platz-chip.hat-ungesendet:not(.aktiv) { border-color: var(--kupfer); }
.platz-chip-badge {
  display: inline-block; background: var(--kupfer); color: #fff; border-radius: 10px;
  padding: 1px 7px; font-size: .8em; font-weight: bold;
}
.plan-tisch-aufnehmen {
  display: flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--navy); color: #fff; text-decoration: none; font-size: .9em;
  touch-action: manipulation;
}
.plan-tisch-aufnehmen:active { transform: scale(.9); }
.stepper { display: flex; align-items: center; gap: 8px; }
.btn-step {
  width: 44px; height: 44px; border-radius: 8px; border: 1px solid #ccc;
  background: #f0f1f3; color: #1a1a1a; font-size: 1.3em; font-weight: bold; cursor: pointer;
  touch-action: manipulation; line-height: 1;
}
.btn-step:active { background: #dcdfe4; }
.btn-step:disabled { opacity: .35; cursor: not-allowed; }
@media (prefers-color-scheme: dark) {
  .btn-step { background: #2a3140; color: #e8e8e8; border-color: #4a5468; }
  .btn-step:active { background: #3a4356; }
}
.cart-menge { min-width: 28px; text-align: center; font-size: 1.1em; font-weight: bold; }
.cart-summe { min-width: 80px; text-align: right; font-weight: bold; font-size: 1.05em; }
.cart-zeile-kombo { border-left: 3px solid #8b5cf6; padding-left: 8px; }
.cart-kombo-teil { margin-top: 2px; }
.card.inaktiv { opacity: .6; }
.kombo-toggle-form { margin-top: 8px; }

/* ---------- Kombo-Auswahl (Slots mit mehreren Optionen) ---------- */
.kombo-picker {
  position: fixed; inset: 0; z-index: 500; background: rgba(1, 21, 43, .55);
  display: flex; align-items: flex-end; justify-content: center; padding: 0;
}
.kombo-picker.versteckt { display: none; }
.kombo-picker-karte {
  background: #fff; width: 100%; max-width: 480px; border-radius: 16px 16px 0 0;
  padding: 18px; max-height: 85vh; overflow-y: auto; display: flex; flex-direction: column; gap: 16px;
}
@media (min-width: 640px) {
  .kombo-picker { align-items: center; }
  .kombo-picker-karte { border-radius: 16px; }
}
@media (prefers-color-scheme: dark) { .kombo-picker-karte { background: #1f2530; color: #e8e8e8; } }
.kombo-picker-kopf { display: flex; align-items: baseline; justify-content: space-between; font-weight: bold; font-size: 1.15em; }
.picker-slot { display: flex; flex-direction: column; gap: 8px; }
.picker-slot .slot-label {
  font-size: .78em; text-transform: uppercase; letter-spacing: .04em; font-weight: bold; color: var(--grau);
}
.picker-optionen { display: flex; flex-direction: column; gap: 8px; }
.picker-option {
  border: 2px solid #d7dbe3; border-radius: 10px; background: #fff; padding: 12px;
  font: inherit; font-weight: 600; text-align: left; cursor: pointer; touch-action: manipulation;
  min-height: 48px;
}
.picker-option[aria-pressed="true"] { border-color: var(--gold); background: #fdf3dc; }
@media (prefers-color-scheme: dark) {
  .picker-option { background: #14181f; color: #e8e8e8; border-color: #3a4356; }
  .picker-option[aria-pressed="true"] { background: #3a331a; }
}
.kombo-picker-fuss { display: flex; gap: 10px; }
.kombo-picker-fuss .btn-primary { flex: 1; }
.kombo-picker-fuss .btn-primary:disabled { opacity: .4; cursor: not-allowed; }
.picker-option-mit-preis { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.picker-option-mit-preis span:last-child { color: var(--gold); font-weight: bold; }

/* ---------- Artikel-Auswahl (Tap-Grid) ---------- */
.modus-umschalter { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
.modus-btn {
  padding: 12px 20px; border-radius: 8px; border: 2px solid var(--navy); background: #fff;
  color: var(--navy); font-size: 1.05em; font-weight: bold; cursor: pointer; min-height: 48px;
  touch-action: manipulation;
}
.modus-btn.aktiv { background: var(--navy); color: #fff; }
@media (prefers-color-scheme: dark) {
  .modus-btn { background: transparent; color: var(--gold); border-color: var(--gold); }
  .modus-btn.aktiv { background: var(--gold); color: #1a1a1a; }
}
/* Kategorien laufen horizontal als Reihe von Kacheln oberhalb des Artikel-Grids (statt als
   Sidebar links) - macht die Artikel-Spalte in der Zweispalten-Ansicht breiter nutzbar. Ab
   860px steht die Kategorien-Zeile fest und scrollt bei Bedarf horizontal (statt umzubrechen),
   damit die feste Gesamthöhe der Bestellseite (.main-fest) nicht durch Umbruch ins Wanken
   gerät - das Artikel-Grid darunter scrollt dafür unabhängig vertikal für sich. */
.artikel-card { display: flex; flex-direction: column; }
.artikel-bereich { display: flex; flex-direction: column; gap: 12px; }
.kategorien-verschieben-btn { margin-bottom: 4px; }
.kategorien-verschieben-btn.aktiv { background: var(--gold); border-color: var(--gold); color: #1a1a1a; }
.kategorie-tabs {
  display: flex; flex-direction: row; flex-wrap: wrap; gap: 8px;
}
.kat-zeile { display: flex; align-items: stretch; gap: 4px; flex: 0 0 auto; height: 40px; }
.kat-tab {
  flex: 0 0 auto; padding: 10px 16px; border-radius: 20px; border: 1px solid #ccc; text-align: center;
  background: #f0f1f3; color: #333; font-size: .95em; cursor: pointer; min-height: 40px; white-space: nowrap;
}
.kat-tab.aktiv { background: var(--gold); border-color: var(--gold); color: #1a1a1a; font-weight: bold; }
.kat-pfeile { display: none; flex-direction: column; gap: 2px; flex: 0 0 auto; }
.kategorie-tabs.verschieben-modus .kat-pfeile { display: flex; }
.kat-pfeil {
  flex: 1 1 0; width: 36px; border-radius: 6px; border: 1px solid #ccc; background: #fff;
  color: var(--navy); font-size: .9em; cursor: pointer; touch-action: manipulation; min-height: 21px;
}
.kat-pfeil:disabled { opacity: .3; cursor: default; }
.artikel-panels { min-width: 0; }
.artikel-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 12px;
}
@media (min-width: 860px) {
  .artikel-card { flex: 1 1 auto; min-height: 0; overflow: hidden; }
  .artikel-bereich { flex: 1 1 auto; min-height: 0; }
  /* 2 Kacheln untereinander statt einer einzelnen langen Zeile - bei gleicher Kategorien-Anzahl
     nur noch halb so weit horizontal zu scrollen. Erster Versuch war flex-flow:column wrap -
     das wrapt in echten Browsern (per Live-Test nachgewiesen, auch mit einem komplett
     losgelösten Minimal-Beispiel) trotz gesetzter Höhe zuverlässig NICHT, offenbar eine
     bekannte Schwäche von mehrzeiligem Column-Flex-Wrap. Stattdessen CSS Grid mit
     grid-auto-flow:column - dafür gemacht (Karten/Chip-Listen, die spaltenweise befüllt werden
     und bei Bedarf horizontal scrollen), im selben Live-Test zuverlässig funktioniert. Grid
     bringt außerdem gratis gleich hohe Zellen (align-items:stretch ist Grid-Default), die
     einzelne "Kombos"-Kachel (kein .kat-zeile-Wrapper, sonst minimal höher) muss dafür nicht
     mehr per Hand auf 40px gezwungen werden. */
  .kategorie-tabs {
    display: grid; grid-auto-flow: column; grid-template-rows: repeat(2, 40px); gap: 8px;
    overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; flex: 0 0 auto; padding-bottom: 4px;
  }
  .artikel-panels { flex: 1 1 auto; min-height: 0; overflow-y: auto; }
}
@media (max-width: 480px) {
  .kat-tab { padding: 8px 12px; font-size: .9em; min-height: 36px; }
  .artikel-grid { grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); gap: 8px; }
}
.versteckt { display: none !important; }
.artikel-kachel {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 6px; min-height: 88px; padding: 12px 8px; border-radius: 10px;
  border: 2px solid var(--navy); background: #fff; cursor: pointer; touch-action: manipulation;
  border-left-width: 6px;
  -webkit-appearance: none; appearance: none; font-family: inherit; color: #1a1a1a;
}
.artikel-kachel.getraenk { border-left-color: var(--gold); }
.artikel-kachel.speise { border-left-color: var(--gruen); }
.artikel-kachel.gutschein { border-left-color: var(--navy); }
.artikel-kachel.kombo { border-left-color: #8b5cf6; }
.artikel-kachel.variante { border-left-color: #0d9488; position: relative; }
.groessen-pille {
  position: absolute; top: 6px; right: 6px; background: #0d9488; color: #fff;
  font-size: .65em; font-weight: bold; padding: 2px 7px; border-radius: 999px;
}
.artikel-kachel.extras { border-left-color: var(--kupfer); position: relative; }
.extras-pille {
  position: absolute; top: 6px; right: 6px; background: var(--kupfer); color: #fff;
  font-size: .65em; font-weight: bold; padding: 2px 7px; border-radius: 999px;
}
@media (prefers-color-scheme: dark) { .artikel-kachel.gutschein { border-left-color: #6b7ba8; } }
.artikel-kachel:active { transform: scale(.96); background: #f0f1f3; }
.artikel-kachel-foto { width: 100%; height: 64px; object-fit: cover; border-radius: 6px; margin-bottom: 2px; }
.artikel-name { font-weight: 600; text-align: center; font-size: 1.02em; }
.artikel-preis { color: var(--grau); font-size: .9em; }
.artikel-foto-mini { width: 40px; height: 40px; object-fit: cover; border-radius: 6px; display: block; }
#bearbeiten-foto-vorschau-wrap { display: flex; align-items: center; gap: 10px; }
#bearbeiten-foto-vorschau-wrap .artikel-foto-mini { width: 56px; height: 56px; }

/* ---------- Zahlung ---------- */
.rabatt-box { margin-top: 12px; padding: 10px 14px; border-radius: 8px; background: #f0f1f3; }
@media (prefers-color-scheme: dark) { .rabatt-box { background: #262c38; } }
.rabatt-toggle { display: flex; align-items: center; gap: 8px; font-weight: 600; cursor: pointer; }
.rabatt-toggle input { width: 20px; height: 20px; }
#rabatt-felder { display: flex; gap: 10px; margin-top: 10px; align-items: center; flex-wrap: wrap; }
.rabatt-modus-wahl { display: flex; gap: 4px; flex: 0 0 auto; }
.rabatt-modus-btn.aktiv { background: var(--gold); border-color: var(--gold); color: #1a1a1a; font-weight: bold; }
#rabatt-wert { flex: 1 1 100px; min-width: 0; min-height: 40px; font-size: 1.05em; padding: 6px 10px; }
.zahlart-wahl { display: flex; flex-direction: column; gap: 12px; margin-top: 16px; }
.zahlart-btn { min-height: 68px; font-size: 1.3em; justify-content: center; }
.bar-rechner { display: flex; flex-direction: column; gap: 4px; margin-top: 16px; }
.bar-ergebnis {
  display: flex; justify-content: space-between; flex-wrap: wrap; gap: 6px 16px; font-size: 1.15em;
  background: #f0f1f3; border-radius: 8px; padding: 12px 16px; margin: 10px 0;
}
.bar-ergebnis > div { white-space: nowrap; }
@media (prefers-color-scheme: dark) { .bar-ergebnis { background: #262c38; } }
@media (max-width: 420px) { .bar-ergebnis { flex-direction: column; } }
.bar-ergebnis .negativ { color: var(--rot); }

/* ---------- Kassenabschlüsse-Menü ---------- */
.kassenabschluesse-wahl { display: flex; flex-direction: column; gap: 12px; margin-top: 16px; max-width: 420px; }

/* ---------- Tages-/Monatsabschluss ---------- */
.abschluss-nav { display: flex; align-items: center; gap: 12px; margin-bottom: 4px; flex-wrap: wrap; }
.abschluss-datum-picker { min-height: 44px; font-size: 1.05em; padding: 8px 12px; }
.abschluss-datum { color: var(--grau); font-weight: normal; font-size: 1.1em; margin-top: 0; }
.tabelle-summe { font-weight: bold; border-top: 2px solid #ccc; }
@media (prefers-color-scheme: dark) { .tabelle-summe { border-color: #555; } }

/* ---------- Küchenanzeige ---------- */
.kueche-leer { font-size: 1.3em; text-align: center; margin-top: 60px; }
.kueche-raster {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px;
}
.kueche-tisch {
  background: #fff; border-radius: 10px; padding: 14px 16px; box-shadow: 0 1px 4px rgba(0,0,0,.1);
  border-top: 6px solid var(--navy);
}
@media (prefers-color-scheme: dark) { .kueche-tisch { background: #1f2530; border-top-color: var(--gold); } }
.kueche-tisch-kopf { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 6px; }
.kueche-tisch-kopf h2 { margin: 0; font-size: 1.4em; }
.kueche-kurs { margin-top: 10px; padding-top: 8px; border-top: 1px solid #eee; }
@media (prefers-color-scheme: dark) { .kueche-kurs { border-color: #333; } }
.kueche-kurs-titel {
  font-weight: bold; font-size: .95em; text-transform: uppercase; letter-spacing: .03em;
  margin-bottom: 6px; padding: 2px 8px; border-radius: 4px; display: inline-block; color: #fff;
}
.kueche-kurs-vorspeise .kueche-kurs-titel { background: var(--gruen); }
.kueche-kurs-hauptspeise .kueche-kurs-titel { background: var(--navy); }
.kueche-kurs-nachspeise .kueche-kurs-titel { background: var(--rot); }
.kueche-gericht {
  padding: 8px 0; border-bottom: 1px dashed #ddd;
}
@media (prefers-color-scheme: dark) { .kueche-gericht { border-color: #3a4356; } }
.kueche-gericht:last-child { border-bottom: none; }
.kueche-gericht-zeit {
  display: flex; justify-content: flex-end; align-items: baseline; gap: 6px;
  font-size: .72em; color: var(--grau); margin-bottom: 2px;
}
.kueche-timer { font-variant-numeric: tabular-nums; font-weight: bold; }
.kueche-gericht.ueberfaellig .kueche-timer { color: var(--rot); }
.kueche-gericht-zeile { display: flex; justify-content: space-between; align-items: center; gap: 10px; }
.kueche-gericht-info { display: flex; flex-direction: column; gap: 2px; }
.kueche-platz { font-size: .8em; color: var(--grau); font-weight: bold; }
.kueche-name { font-size: 1.15em; font-weight: 600; }
.kueche-extra-zeile { font-size: .95em; color: var(--grau); padding-left: 12px; }
.kueche-notiz {
  font-size: .95em; font-weight: bold; color: var(--rot); background: rgba(231,36,14,.1);
  border-radius: 6px; padding: 3px 8px; margin-top: 2px; display: inline-block; width: fit-content;
}
.kueche-gericht.ueberfaellig {
  animation: kueche-gericht-blinken 1s ease-in-out infinite;
  border-radius: 6px; padding-left: 8px; padding-right: 8px; margin: 0 -8px;
}
@keyframes kueche-gericht-blinken {
  0%, 100% { background: rgba(231,36,14,.18); }
  50% { background: rgba(255,152,0,.30); }
}

/* Klingel-Benachrichtigung Theke: Küche hat ein Gericht fertiggemeldet (siehe theke.html) -
   bewusst als Vollbild-Banner, damit es auch aus einiger Entfernung von der Theke aus auffaellt. */
.fertig-overlay {
  display: none; position: fixed; inset: 0; z-index: 9998; flex-direction: column; gap: 32px;
  align-items: center; justify-content: center; text-align: center; padding: 24px;
  background: var(--gold); color: var(--navy);
  font-size: 3em; font-weight: 800; line-height: 1.3;
}
.fertig-overlay.sichtbar { display: flex; animation: fertig-overlay-blinken 1s ease-in-out infinite; }
@keyframes fertig-overlay-blinken {
  0%, 100% { background: var(--gold); }
  50% { background: var(--kupfer); }
}
#fertig-overlay-btn {
  font-size: .4em; font-weight: 700; padding: 18px 40px; border-radius: 10px;
  border: none; background: var(--navy); color: var(--gold); cursor: pointer;
}

/* Bleibt sichtbar, bis der Browser den Klingelton per Nutzer-Geste freigegeben hat -
   ohne diesen Hinweis bemerkt niemand, dass die erste Fertigmeldung stumm bleiben wuerde. */
.ton-hinweis {
  position: fixed; top: 10px; right: 10px; z-index: 9999;
  background: var(--kupfer); color: #fff; font-weight: 700; font-size: .95em;
  padding: 8px 16px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,.25);
}

/* ---------- Hilfeseite ---------- */
#hilfe-stack details.card { padding: 14px 18px; }
.hilfe-summary { cursor: pointer; font-weight: 600; font-size: 1.05em; color: var(--navy); }
@media (prefers-color-scheme: dark) { .hilfe-summary { color: var(--gold); } }
.hilfe-inhalt { margin-top: 10px; }
.hilfe-inhalt p { transition: background-color 1.2s ease; border-radius: 6px; padding: 2px 4px; margin: 6px 0; }
.hilfe-highlight { background-color: rgba(235, 180, 44, .35) !important; }
body.hilfe-modus, body.hilfe-modus * { cursor: help !important; }
body.hilfe-modus [data-hilfe]:hover { outline: 2px solid var(--gold); border-radius: 6px; }
.hilfe-modus-btn {
  background: transparent; color: #fff; border: 1px solid rgba(255,255,255,.5);
  border-radius: 50%; width: 34px; height: 34px; margin-left: 6px; font-weight: bold;
  cursor: pointer; font-size: 1em; line-height: 1;
}
.hilfe-modus-btn.btn-active { background: var(--gold); color: #1a1a1a; border-color: var(--gold); }

/* ---------- Selfservice: QR-Druckseite ---------- */
.qr-druck { text-align: center; }
.qr-bild { width: 100%; max-width: 320px; height: auto; margin: 14px 0; border-radius: 8px; }
@media print {
  .nur-bildschirm, .topbar, .fusszeile { display: none !important; }
  .qr-druck { box-shadow: none; }
}


/* Einklappbare Kacheln (Einstellungen -> Betrieb). Die Seite hat elf Bereiche, von denen man
   meist nur einen braucht - die Ueberschrift ist deshalb ein Schalter. Der Inhalt wird nur
   ausgeblendet, nicht entfernt: die Felder bleiben Teil des Formulars und werden weiter
   mitgespeichert. */
.karte-kopf {
  cursor: pointer;
  user-select: none;
  display: flex;
  align-items: center;
  gap: .45em;
}
.karte-kopf::before {
  content: "\25B8";           /* zeigt nach rechts = zugeklappt */
  font-size: .8em;
  opacity: .65;
}
.karte-kopf-offen::before { content: "\25BE"; }   /* zeigt nach unten = offen */
.karte-kopf:hover { text-decoration: underline dotted; }
.karte-kopf:focus-visible { outline: 2px solid var(--gold, #EBB42C); outline-offset: 3px; }
