/* Filialkasse (GaiGo.Kasse) — Tablet im Querformat, Bedienung mit dem Finger: große Flächen, klare Kontraste. */
:root {
    --kasse-ink: #12203a;
    --kasse-muted: rgba(18, 32, 58, 0.62);
    /* Leitstand-Primärfarbe (#112, MudBlazor-Theme in MainLayout.razor). Weiß auf #df4661 = 4,05:1 → nur unter großer,
       fetter Schrift (WCAG „large text“ ≥ 3:1: ab 18,7 px fett bzw. 24 px): Bezahlknopf „Bar kassieren“ (22 px fett),
       OK-Taste, Initialen. Normale Knöpfe (18 px), kleine Schrift auf Primär (Chips, Tabs, Zähler) und Primär als
       Textfarbe auf hellem Grund nehmen die dunklere Stufe: 5,2:1 auf Weiß, 4,8:1 auf --kasse-bg. */
    --kasse-primary: #df4661;
    --kasse-primary-strong: #c8334f;
    --kasse-primary-soft: #fdeef1;
    --kasse-ok: #2e7d32;
    --kasse-warn: #b26a00;
    --kasse-error: #c62828;
    --kasse-bg: #f4f6fa;
}

* { box-sizing: border-box; }

html, body {
    margin: 0;
    height: 100%;
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    font-size: 18px;
    color: var(--kasse-ink);
    background: var(--kasse-bg);
    -webkit-tap-highlight-color: transparent;
}

.kasse-boot { padding: 48px 24px; text-align: center; color: var(--kasse-muted); }

.kasse-shell { min-height: 100%; display: flex; flex-direction: column; }

.kasse-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 20px;
    background: var(--kasse-ink);
    color: #fff;
}
.kasse-logo { width: 32px; height: 32px; border-radius: 8px; }
.kasse-brand { font-weight: 700; }
.kasse-where { margin-left: auto; font-weight: 600; }
.kasse-offline {
    margin-left: 12px;
    padding: 2px 10px;
    border-radius: 999px;
    background: var(--kasse-warn);
    font-size: 14px;
}

.kasse-main { flex: 1; display: flex; align-items: flex-start; justify-content: center; padding: 32px 16px; }

.kasse-card {
    width: 100%;
    max-width: 640px;
    padding: 28px 28px 24px;
    border-radius: 16px;
    background: #fff;
    box-shadow: 0 1px 3px rgba(18, 32, 58, 0.12);
}
.kasse-card h1 { margin: 0 0 8px; font-size: 28px; }
.kasse-card p { line-height: 1.5; }
.kasse-card--ok { border-top: 6px solid var(--kasse-ok); }
.kasse-card--warn { border-top: 6px solid var(--kasse-warn); }
.kasse-sub { margin-top: 0; color: var(--kasse-muted); font-size: 20px; }
.kasse-note { padding: 10px 14px; border-radius: 10px; background: rgba(178, 106, 0, 0.1); color: var(--kasse-warn); }
.kasse-error { color: var(--kasse-error); font-weight: 600; }

.kasse-button {
    display: inline-block;
    min-height: 56px;
    padding: 14px 28px;
    border: 0;
    border-radius: 12px;
    background: var(--kasse-primary-strong);
    color: #fff;
    font: inherit;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
}
.kasse-button:disabled { opacity: 0.45; cursor: default; }
.kasse-button--secondary { background: #e3e8f2; color: var(--kasse-ink); }

.kasse-video { display: block; width: 100%; max-height: 360px; margin: 8px 0 12px; border-radius: 12px; background: #000; object-fit: cover; }
.kasse-hidden { display: none; }

.kasse-code { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 24px; }
.kasse-code label { width: 100%; color: var(--kasse-muted); font-size: 15px; }
.kasse-code input {
    flex: 1;
    min-width: 0;
    min-height: 56px;
    padding: 0 14px;
    border: 1px solid rgba(18, 32, 58, 0.25);
    border-radius: 12px;
    font: inherit;
    font-family: ui-monospace, monospace;
}

#blazor-error-ui {
    display: none;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    padding: 12px 20px;
    background: #fff3cd;
    box-shadow: 0 -1px 4px rgba(0, 0, 0, 0.2);
    z-index: 1000;
}
#blazor-error-ui .reload { margin-left: 12px; }

/* Kassierer-Anmeldung (#74): Kacheln und Ziffernblock, für den Finger. */
.kasse-cashier {
    margin-left: 12px;
    padding: 4px 12px;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.16);
    font-weight: 600;
    white-space: nowrap;
}
.kasse-signin { max-width: 900px; }
.kasse-tiles {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 14px;
    margin: 16px 0;
}
.kasse-tile {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    min-height: 140px;
    padding: 18px 10px;
    border: 2px solid transparent;
    border-radius: 16px;
    background: #eef2fb;
    color: var(--kasse-ink);
    font: inherit;
    cursor: pointer;
}
.kasse-tile:active { background: #dfe6f7; }
.kasse-tile--active { border-color: var(--kasse-primary); }
.kasse-tile-initials {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    background: var(--kasse-primary);
    color: #fff;
    font-size: 22px;
    font-weight: 700;
}
.kasse-tile-name { font-weight: 600; text-align: center; }
.kasse-tile-role { font-size: 14px; color: var(--kasse-muted); }

.kasse-pin { display: flex; flex-direction: column; align-items: center; text-align: center; }
.kasse-pin-dots { display: flex; gap: 14px; margin: 8px 0 16px; min-height: 22px; }
.kasse-pin-dot { width: 18px; height: 18px; border: 2px solid var(--kasse-ink); border-radius: 50%; }
.kasse-pin-dot--set { background: var(--kasse-ink); }
.kasse-keypad {
    display: grid;
    grid-template-columns: repeat(3, 96px);
    gap: 12px;
    margin-bottom: 16px;
}
.kasse-key {
    height: 76px;
    border: 0;
    border-radius: 14px;
    background: #eef2fb;
    color: var(--kasse-ink);
    font: inherit;
    font-size: 28px;
    font-weight: 600;
    cursor: pointer;
}
.kasse-key:active { background: #dfe6f7; }
.kasse-key:disabled { opacity: 0.45; cursor: default; }
.kasse-key--muted { font-size: 24px; }
.kasse-key--ok { background: var(--kasse-primary); color: #fff; font-size: 22px; font-weight: 700; }
.kasse-wide { min-width: 312px; }
.kasse-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 8px; }

/* Verkauf am Kassenplatz (#75) — Components/SaleScreen.razor, CashPayment.razor. Querformat: Artikel links,
   Warenkorb rechts; Hochformat: untereinander. */
.kasse-sale-wrap { width: 100%; max-width: 1400px; display: flex; flex-direction: column; gap: 12px; }
.kasse-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 18px; font-size: 16px; color: var(--kasse-muted); }
.kasse-toolbar b { color: var(--kasse-ink); }
.kasse-link {
    min-height: 44px;
    padding: 0 6px;
    border: 0;
    background: none;
    color: var(--kasse-primary-strong);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
}
.kasse-link:disabled { opacity: 0.45; cursor: default; }
.kasse-muted { color: var(--kasse-muted); }

/* Bezahlknopf immer im Bild (#120): solange der Verkauf zu sehen ist, füllen Kopf, Leiste und Verkauf genau das Bild, die
   Seite scrollt nicht. Artikel und Warenkorb sind Spalten bis zum unteren Rand; es scrollen nur die Kacheln und die
   Positionsliste. Koppeln, Anmeldung und Eröffnung scrollen wie bisher. */
.kasse-shell:has(.kasse-sale) { height: 100vh; height: 100dvh; }
.kasse-main:has(.kasse-sale) { min-height: 0; align-items: stretch; padding-top: 16px; padding-bottom: 16px; }
.kasse-sale {
    flex: 1 1 0;
    min-height: 0;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 420px;
    grid-template-rows: minmax(0, 1fr);
    gap: 16px;
}
.kasse-sale-products, .kasse-sale-cart {
    min-height: 0;
    padding: 16px;
    border-radius: 16px;
    background: #fff;
    box-shadow: 0 1px 3px rgba(18, 32, 58, 0.12);
}
.kasse-sale-products { display: flex; flex-direction: column; }
/* Kacheln (Schnelltasten oder Suchtreffer) füllen die Spalte unter Suche und Chip-Leiste. */
.kasse-sale-products > .kasse-qk { flex: 1 1 0; min-height: 0; }
.kasse-sale-products .kasse-products { flex: 1 1 0; min-height: 0; align-content: start; }
/* Zahlung und Abschluss scrollen hier, falls sie auf einem niedrigen Bildschirm nicht ganz hineinpassen. */
.kasse-sale-cart { display: flex; flex-direction: column; overflow-y: auto; }

.kasse-search { position: relative; margin-bottom: 14px; }
.kasse-search input {
    width: 100%;
    min-height: 56px;
    padding: 0 52px 0 16px;
    border: 1px solid rgba(18, 32, 58, 0.25);
    border-radius: 12px;
    font: inherit;
}
.kasse-search-clear {
    position: absolute;
    top: 6px;
    right: 6px;
    width: 44px;
    height: 44px;
    border: 0;
    border-radius: 10px;
    background: #eef2fb;
    font-size: 24px;
    cursor: pointer;
}
/* Artikelsuche am Verkaufsbildschirm (Sichtprüfung #117) — SaleScreen: Die Suche bleibt nach einem Treffer stehen,
   „Suche beenden“ steht als Knopf mit Text neben dem Feld statt als kleines x darin. */
.kasse-sale-search { display: flex; gap: 10px; align-items: stretch; }
.kasse-sale-search input { flex: 1; min-width: 0; padding-right: 16px; }
.kasse-sale-search-close { flex: none; min-height: 56px; white-space: nowrap; }

.kasse-products {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 10px;
    overflow-y: auto;
}
.kasse-product {
    display: flex;
    flex-direction: column;
    gap: 8px;
    /* Feste Höhe (#122): Innenabstand oben 6 + Kopfzeile 32 + Abstand 4 + drei Namenszeilen (3 × 1,25em) + Abstand 8 +
       Preiszeile 20 + Innenabstand unten 12. Alle Kacheln einer Reihe sind gleich hoch, ein langer Name streckt die Reihe
       nicht. */
    height: calc(3 * 1.25em + 82px);
    padding: 6px 12px 12px;
    border: 0;
    border-radius: 14px;
    background: #eef2fb;
    color: var(--kasse-ink);
    font: inherit;
    text-align: left;
    cursor: pointer;
}
.kasse-product:active { background: #dfe6f7; }
.kasse-product:disabled { opacity: 0.45; cursor: default; }
/* Kopfzeile (Sichtprüfung #117): Mengen-Badge links, darüber liegen x („Zuletzt verkauft“) und Favoriten-Stern
   (QuickKeyPad, absolut, auf die Zeilenmitte 22 px ausgerichtet). Der Name beginnt darunter über die volle Breite. */
.kasse-product-top { display: flex; align-items: center; min-height: 32px; margin-bottom: -4px; }
/* Name (#122): höchstens drei Zeilen, deutsche Silbentrennung (<html lang="de">); nur ein Wort, das auch getrennt nicht in
   die Zeile passt, bricht notfalls an beliebiger Stelle. */
.kasse-product-name {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
    line-clamp: 3;
    overflow: hidden;
    font-weight: 600;
    line-height: 1.25;
    -webkit-hyphens: auto;
    hyphens: auto;
    overflow-wrap: break-word;
}
.kasse-product-meta { display: flex; justify-content: space-between; align-items: baseline; gap: 6px; margin-top: auto; font-size: 15px; line-height: 20px; }
.kasse-product-no { color: var(--kasse-muted); }
.kasse-product-price { margin-left: auto; font-weight: 700; }
/* Mengen-Badge (#122) — Components/ProductTile.razor: Menge im Warenkorb links in der Kopfzeile (rechts vom x von
   „Zuletzt verkauft“), die Kachel ist dann gefüllt. Weiß auf --kasse-primary-strong = 5,2:1. Eine Menge
   mit Einheit („0,5 kg“, Review #117) bleibt in einer Zeile. */
.kasse-product--in-cart { background: var(--kasse-primary-soft); box-shadow: inset 0 0 0 2px var(--kasse-primary-strong); }
.kasse-product--in-cart:active { background: #f9d9e0; }
.kasse-product-badge {
    display: inline-block;
    min-width: 26px;
    padding: 0 7px;
    border-radius: 999px;
    background: var(--kasse-primary-strong);
    color: #fff;
    font-size: 15px;
    font-weight: 700;
    line-height: 20px;
    text-align: center;
    white-space: nowrap;
}

/* Schnelltasten (#77) — Components/QuickKeyPad.razor: Seiten-Leiste (Favoriten, Ordner), darunter die Kacheln. */
/* contain: die Leiste scrollt quer, statt die Spalte (und im Hochformat die Seite) zu verbreitern. */
.kasse-qk { display: flex; flex-direction: column; gap: 12px; contain: inline-size; }
.kasse-qk-tabs { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 2px; scrollbar-width: none; }
.kasse-qk-tabs::-webkit-scrollbar { display: none; }
/* Überlauf der Chip-Leiste (#122) — QuickKeyPad.razor, kasse.chipBar (kasse.js): Verlauf ins Weiß der Spalte mit Pfeil an
   dem Rand, an dem die Leiste weitergeht. Tipps gehen hindurch auf den angeschnittenen Chip. */
.kasse-qk-bar { position: relative; }
.kasse-qk-more {
    position: absolute;
    top: 0;
    bottom: 2px;
    display: none;
    align-items: center;
    width: 48px;
    color: var(--kasse-ink);
    font-size: 30px;
    font-weight: 700;
    pointer-events: none;
}
.kasse-qk-more--start { left: 0; justify-content: flex-start; background: linear-gradient(to left, rgba(255, 255, 255, 0), #fff 60%); }
.kasse-qk-more--end { right: 0; justify-content: flex-end; background: linear-gradient(to right, rgba(255, 255, 255, 0), #fff 60%); }
.kasse-qk-bar[data-more-start] .kasse-qk-more--start,
.kasse-qk-bar[data-more-end] .kasse-qk-more--end { display: flex; }
.kasse-qk-tab {
    flex: none;
    min-height: 52px;
    padding: 0 18px;
    border: 2px solid #d6dded;
    border-radius: 999px;
    background: #fff;
    color: var(--kasse-ink);
    font: inherit;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
}
.kasse-qk-tab--active { border-color: var(--kasse-primary-strong); background: var(--kasse-primary-strong); color: #fff; }
/* Leerer Chip (#109, Badge 0): Hinweis über die ganze Breite statt Kacheln. */
.kasse-qk-empty { grid-column: 1 / -1; margin: 0; }

/* Favoriten-Stern an der Kachel (#108) — Components/QuickKeyPad.razor */
.kasse-qk-key { position: relative; display: flex; }
.kasse-qk-key .kasse-product { flex: 1; }
.kasse-qk-key .kasse-product-top { padding-right: 36px; }
.kasse-qk-star {
    position: absolute;
    top: 2px;
    right: 4px;
    width: 40px;
    height: 40px;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: var(--kasse-muted);
    font-size: 22px;
    line-height: 1;
    cursor: pointer;
}
.kasse-qk-star:active { background: #dfe6f7; }
.kasse-qk-star--on { color: #f2a71b; }
.kasse-qk-star:disabled { opacity: 0.45; cursor: default; }

/* Zähler-Badge an jedem Chip und x am Chip „Zuletzt verkauft“ (#109) — Components/QuickKeyPad.razor */
.kasse-qk-badge {
    display: inline-block;
    min-width: 22px;
    margin-left: 8px;
    padding: 1px 7px;
    border-radius: 999px;
    background: #e6ebf5;
    color: var(--kasse-ink);
    font-size: 0.8em;
    font-weight: 700;
    text-align: center;
}
/* Aktiver Chip (#112): Badge weiß mit Primär-Schrift — 5,2:1 statt Weiß auf halbtransparentem Rot. */
.kasse-qk-tab--active .kasse-qk-badge { background: #fff; color: var(--kasse-primary-strong); }
.kasse-qk-key--recent .kasse-product-top { padding-left: 30px; }
.kasse-qk-remove {
    position: absolute;
    top: 6px;
    left: 4px;
    width: 32px;
    height: 32px;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: var(--kasse-muted);
    font-size: 20px;
    line-height: 1;
    cursor: pointer;
}
.kasse-qk-remove:active { background: #dfe6f7; }
.kasse-qk-remove:disabled { opacity: 0.45; cursor: default; }

.kasse-cart-head { display: flex; align-items: center; justify-content: space-between; }
.kasse-cart-head h2 { margin: 0 0 8px; font-size: 22px; }
/* Zähler im Kopf (#121): „n Stück · m Positionen“ unter „Warenkorb“, zusammen nicht höher als „Parken“/„Leeren“. */
.kasse-cart-title { display: flex; flex-direction: column; min-width: 0; }
.kasse-cart-title h2 { margin: 0; line-height: 24px; }
.kasse-cart-count { font-size: 15px; line-height: 18px; color: var(--kasse-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.kasse-lines { margin: 0; padding: 0; list-style: none; }
/* Warenkorb (#120): Kopf, Banner und Hinweise in natürlicher Höhe, die Positionsliste füllt den Rest und scrollt; der Fuß
   mit Summe und Bezahlknöpfen schrumpft nie. Offene Lieferscheine geben notfalls Platz ab und scrollen selbst. */
.kasse-cart-body { flex: 1 1 0; min-height: 0; display: flex; flex-direction: column; }
.kasse-cart-body > * { flex: none; }
.kasse-cart-body > .kasse-cart-lines { flex: 1 1 0; min-height: 0; overflow-y: auto; }
.kasse-cart-body > .kasse-open-notes { flex: 0 1 auto; min-height: 0; overflow-y: auto; }
.kasse-line {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto 84px;
    align-items: center;
    gap: 8px;
    padding: 8px 0;
    border-bottom: 1px solid rgba(18, 32, 58, 0.08);
}
.kasse-line-text { display: flex; flex-direction: column; min-width: 0; }
.kasse-line-name { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kasse-line-unit { font-size: 14px; color: var(--kasse-muted); }
.kasse-line-total { text-align: right; font-weight: 600; font-variant-numeric: tabular-nums; }
.kasse-qty { display: flex; align-items: center; gap: 4px; }
.kasse-qty-btn {
    width: 48px;
    height: 48px;
    border: 0;
    border-radius: 12px;
    background: #eef2fb;
    color: var(--kasse-ink);
    font-size: 26px;
    font-weight: 700;
    cursor: pointer;
}
.kasse-qty-btn:active { background: #dfe6f7; }
.kasse-qty-value { min-width: 36px; text-align: center; font-weight: 700; font-variant-numeric: tabular-nums; }
/* Kompakte Warenkorbzeile mit Auswahl (#121) — SaleScreen. Name bis zwei Zeilen, Einzelpreis, Menge, Summe; die
   ausgewählte Position klappt darunter Rabatt, Preis ändern und Entfernen einzeilig über die volle Breite auf. Die Spalten
   gelten für alle Zeilen gemeinsam (subgrid): die Summenspalte ist so breit wie der breiteste Betrag („-2.450,00 €“),
   die Mengenknöpfe stehen untereinander. Liste und Zeilen reichen 8 px in den Rand des Warenkorbs, damit die Fläche der
   ausgewählten Zeile den Text nicht berührt. Höhe ohne Auswahl: zweizeiliger Name + Preis 58 px + 2 × 5 px. */
.kasse-cart-body > .kasse-cart-lines {
    --kasse-line-flash: #f7c3cd;
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto minmax(64px, max-content);
    align-content: start;
    column-gap: 10px;
    margin: 0 -8px;
    padding: 0 8px;
}
.kasse-cart-lines > .kasse-line {
    grid-column: 1 / -1;
    grid-template-columns: subgrid;
    gap: 0 10px;
    margin: 0 -8px;
    padding: 5px 8px;
    border-radius: 10px;
}
/* Hinweis im leeren Warenkorb (Review #117): steht in der Liste, über die volle Breite. */
.kasse-cart-lines > .kasse-cart-empty { grid-column: 1 / -1; }
.kasse-cart-lines > .kasse-line--selectable { cursor: pointer; }
.kasse-cart-lines > .kasse-line--selected { background: var(--kasse-primary-soft); border-bottom-color: transparent; }
.kasse-cart-lines .kasse-line-name {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    white-space: normal;
    overflow-wrap: break-word;
    hyphens: auto;
    font-size: 17px;
    line-height: 20px;
}
.kasse-cart-lines .kasse-line-unit { line-height: 18px; }
.kasse-cart-lines .kasse-qty-btn { width: 44px; height: 44px; }
/* Menge mit Verkaufseinheit („0,5 kg“, #162) bleibt einzeilig; die Mengenspalte wird so breit wie die breiteste Menge. */
.kasse-cart-lines .kasse-qty-value { min-width: 32px; white-space: nowrap; }
.kasse-cart-lines .kasse-line-total { white-space: nowrap; }
.kasse-line-return {
    display: inline-block;
    margin-right: 4px;
    padding: 0 6px;
    border-radius: 6px;
    background: rgba(198, 40, 40, 0.1);
    color: var(--kasse-error);
    font-size: 13px;
    font-weight: 700;
    line-height: 16px;
}
.kasse-line--return .kasse-qty-value, .kasse-line--return .kasse-line-total { color: var(--kasse-error); }
.kasse-cart-lines .kasse-line-actions--row { grid-column: 1 / -1; gap: 8px; margin-top: 6px; }
.kasse-line-actions--row .kasse-line-action { flex: 1 1 0; min-height: 40px; white-space: nowrap; }

.kasse-cart-foot { flex: none; margin-top: 12px; display: flex; flex-direction: column; gap: 10px; }
.kasse-total { display: flex; justify-content: space-between; align-items: baseline; font-size: 22px; }
.kasse-total b { font-size: 30px; font-variant-numeric: tabular-nums; }
/* „Bar kassieren“ = CTA in Leitstand-Primär (#112); 22 px fett = große Schrift. */
.kasse-pay { width: 100%; min-height: 68px; font-size: 22px; font-weight: 700; background: var(--kasse-primary); }

.kasse-sums { display: grid; grid-template-columns: auto 1fr; gap: 6px 16px; margin: 8px 0 12px; font-size: 20px; }
.kasse-sums dt { color: var(--kasse-muted); }
.kasse-sums dd { margin: 0; text-align: right; font-weight: 700; font-variant-numeric: tabular-nums; }
.kasse-sums--big { font-size: 24px; }
.kasse-sums .kasse-change { color: var(--kasse-ok); font-size: 1.15em; }
.kasse-sums .kasse-change--low { color: var(--kasse-error); }

.kasse-quick { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 10px; }
.kasse-quick-btn {
    min-height: 52px;
    border: 2px solid var(--kasse-primary-strong);
    border-radius: 12px;
    background: #fff;
    color: var(--kasse-primary-strong);
    font: inherit;
    font-weight: 700;
    cursor: pointer;
}
.kasse-keypad--pay { grid-template-columns: repeat(3, 1fr); grid-auto-rows: minmax(44px, 64px); margin: 0 0 12px; }
.kasse-keypad--pay .kasse-key { height: auto; }
/* Zahlung im Warenkorb (#120): passt sie nicht ganz in die Spalte (Stammkunde, Trinkgeld, niedriger Bildschirm), gibt der
   Ziffernblock Höhe ab (Tasten bis 44 px), damit „Kassieren“ ganz im Bild bleibt. */
.kasse-sale-cart > .kasse-payment { min-height: 0; display: flex; flex-direction: column; }
.kasse-sale-cart > .kasse-payment > * { flex: none; }
.kasse-sale-cart > .kasse-payment > .kasse-keypad--pay { flex: 0 1 auto; min-height: 0; }

.kasse-done { display: flex; flex-direction: column; align-items: stretch; text-align: center; }
.kasse-done-title { margin: 8px 0 0; font-size: 28px; font-weight: 700; color: var(--kasse-ok); }
.kasse-done-number { margin: 4px 0 8px; font-size: 22px; }
.kasse-done .kasse-sums { text-align: left; }
.kasse-done .kasse-wide { min-width: 0; width: 100%; }

/* Bon-Druck und Vorschau (#76) — Components/SaleScreen.razor; der Bon selbst: _content/GaiGo.Documents.Layout/bon/bon.css */
.kasse-print { display: flex; flex-direction: column; align-items: stretch; gap: 8px; margin: 4px 0 12px; }
.kasse-print p { margin: 0; }
.kasse-print-msg { color: var(--kasse-muted); }
.kasse-print-msg--ok { color: var(--kasse-ok); font-weight: 600; }
.kasse-print .kasse-link { align-self: center; }
.kasse-bon-overlay {
    position: fixed;
    inset: 0;
    z-index: 50;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    background: rgba(18, 32, 58, 0.55);
}
.kasse-bon-dialog {
    display: flex;
    flex-direction: column;
    max-height: 100%;
    border-radius: 16px;
    background: var(--kasse-bg);
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.3);
}
.kasse-bon-head { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 12px 16px; }
.kasse-bon-head h2 { margin: 0; font-size: 20px; }
.kasse-bon-paper { overflow: auto; padding: 0 16px 16px; }
.kasse-bon-paper .bon-sheet { margin: 0 auto; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15); }

@media (max-width: 960px) {
    .kasse-main { padding: 16px; }
    /* Hochformat (#120): oben der Warenkorb, darunter die Kacheln, unten die Leiste mit Summe und Bezahlknöpfen. Die
       Warenkorb-Section gibt ihre Teile ans Raster ab, damit der Fuß unter den Kacheln steht. Die Positionsliste selbst hat
       eine feste Höhe von etwa 30 % des Bildes (Review #117), Kopf und Banner kommen in natürlicher Höhe dazu; der Kopf ist
       leer so hoch wie mit „Parken“/„Leeren“ — Positionen dazu oder weg verschieben keine Kachel. */
    .kasse-sale { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr) auto; }
    .kasse-sale-products { grid-row: 2; }
    .kasse-sale-cart { display: contents; }
    .kasse-sale-cart > * {
        grid-row: 1;
        min-height: 0;
        padding: 16px;
        border-radius: 16px;
        background: #fff;
        box-shadow: 0 1px 3px rgba(18, 32, 58, 0.12);
    }
    .kasse-cart-body > .kasse-cart-lines { flex: none; height: 30vh; }
    .kasse-cart-body > .kasse-cart-head { min-height: 44px; }
    /* Leiste über die ganze Breite am unteren Rand, Abstand zur Systemleiste. Zuunterst Summe und Bezahlknöpfe in einer
       Reihe (Daumen, und die Kacheln behalten Höhe); Hinweise und „Als Abholung anlegen“ stehen darüber. */
    .kasse-sale-cart > .kasse-cart-foot {
        grid-row: 3;
        display: grid;
        grid-template-columns: auto minmax(0, 1fr);
        gap: 8px 16px;
        margin: 0 -16px -16px;
        padding: 12px 16px max(12px, env(safe-area-inset-bottom));
        border-radius: 16px 16px 0 0;
        box-shadow: 0 -2px 10px rgba(18, 32, 58, 0.14);
    }
    .kasse-cart-foot > * { grid-column: 1 / -1; }
    .kasse-cart-foot > .kasse-total { grid-column: 1; order: 1; align-self: center; gap: 12px; }
    .kasse-cart-foot > .kasse-pay-row { grid-column: 2; order: 1; }
}

/* Kundenkarte (#88) — Components/CustomerDesk.razor, CustomerCard.razor, CustomerCardLines.razor. Ebene über dem
   Verkauf (der Warenkorb bleibt stehen); Querformat drei Spalten, Hochformat untereinander. */
.kasse-toolbar-customer { min-height: 48px; padding: 8px 20px; margin-left: auto; }
.kasse-cust {
    position: fixed;
    inset: 0;
    z-index: 50;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    padding: 24px 16px;
    background: rgba(18, 32, 58, 0.35);
    overflow-y: auto;
}
.kasse-cust-panel {
    width: 100%;
    max-width: 1400px;
    padding: 18px 20px 24px;
    border-radius: 16px;
    background: #fff;
    box-shadow: 0 8px 28px rgba(18, 32, 58, 0.25);
}
.kasse-cust-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.kasse-cust-head h2 { margin: 0; font-size: 24px; }
.kasse-cust-close { min-height: 48px; padding: 8px 20px; }
.kasse-cust-search { display: flex; gap: 12px; align-items: flex-start; }
.kasse-cust-search .kasse-search { flex: 1; }
.kasse-cust-hits { margin: 8px 0 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 10px; }
.kasse-cust-hit {
    display: flex;
    flex-direction: column;
    gap: 4px;
    width: 100%;
    min-height: 72px;
    padding: 12px 14px;
    border: 0;
    border-radius: 14px;
    background: #eef2fb;
    color: var(--kasse-ink);
    font: inherit;
    text-align: left;
    cursor: pointer;
}
.kasse-cust-hit:active { background: #dfe6f7; }
.kasse-cust-hit-name { font-weight: 700; }
.kasse-cust-hit-meta { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 15px; color: var(--kasse-muted); }

.kasse-cust-card-head h2 { margin: 0; font-size: 28px; }
.kasse-cust-card-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; margin: 6px 0 14px; color: var(--kasse-muted); font-size: 16px; }
.kasse-cust-cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; align-items: start; }
.kasse-cust-col { padding: 14px; border-radius: 14px; background: var(--kasse-bg); }
.kasse-cust-col h3 { margin: 0 0 10px; font-size: 20px; }
.kasse-cust-day { font-weight: 400; color: var(--kasse-muted); }
.kasse-cust-item { margin-bottom: 10px; padding: 10px 12px; border-radius: 12px; background: #fff; }
.kasse-cust-item-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.kasse-cust-amount { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.kasse-cust-sub { margin: 4px 0; font-size: 15px; color: var(--kasse-muted); }
.kasse-cust-badge { display: inline-block; padding: 1px 10px; border-radius: 999px; background: #e3e8f2; color: var(--kasse-ink); font-size: 14px; font-weight: 600; }
.kasse-cust-badge--warn { background: rgba(178, 106, 0, 0.14); color: var(--kasse-warn); }
.kasse-cust-lines { margin: 6px 0 0; padding: 0; list-style: none; font-size: 16px; }
.kasse-cust-lines li { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 8px; padding: 3px 0; }
.kasse-cust-qty { font-variant-numeric: tabular-nums; color: var(--kasse-muted); }
.kasse-cust-line-name { overflow-wrap: anywhere; }
.kasse-cust-line-amount { text-align: right; font-variant-numeric: tabular-nums; }
.kasse-cust-total { margin-top: 4px; font-size: 18px; }
.kasse-cust-total b { font-size: 24px; }

@media (max-width: 960px) {
    .kasse-cust { padding: 12px; }
    .kasse-cust-cols { grid-template-columns: 1fr; }
}
.kasse-cust-discount { display: flex; justify-content: space-between; margin: 2px 0 0; font-size: 16px; color: var(--kasse-muted); font-variant-numeric: tabular-nums; }

/* Artikel mit Preiseingabe (#78) — Components/PriceEntryPad.razor: Ziffernblock als Dialog über dem Verkauf. */
.kasse-price-backdrop {
    position: fixed;
    inset: 0;
    z-index: 60;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    background: rgba(18, 32, 58, 0.45);
}
.kasse-price {
    width: 100%;
    max-width: 380px;
    padding: 20px;
    border-radius: 18px;
    background: #fff;
    box-shadow: 0 12px 40px rgba(18, 32, 58, 0.3);
}
.kasse-price-hint { margin: 0; font-size: 15px; color: var(--kasse-muted); }
.kasse-price-name { margin: 2px 0 10px; font-size: 22px; overflow-wrap: anywhere; }
.kasse-price-amount {
    margin-bottom: 12px;
    padding: 10px 14px;
    border-radius: 12px;
    background: var(--kasse-bg);
    font-size: 36px;
    font-weight: 700;
    text-align: right;
    font-variant-numeric: tabular-nums;
}
.kasse-price-amount--empty { color: var(--kasse-muted); }
.kasse-keypad--price { grid-template-columns: repeat(3, 1fr); margin: 0 0 14px; }
.kasse-keypad--price .kasse-key { height: 64px; }
.kasse-price-actions { display: grid; grid-template-columns: 1fr 1.4fr; gap: 10px; }
.kasse-price-actions .kasse-button { min-width: 0; }
/* Rückfrage ab 100 € (#123): statt Ziffernblock nur Betrag und Ja/Nein, damit kein Tipp daneben weitertippt. */
.kasse-price-ask-question {
    margin: 4px 0 18px;
    padding: 18px 14px;
    border-radius: 12px;
    background: var(--kasse-bg);
    font-size: 28px;
    font-weight: 700;
    text-align: center;
    font-variant-numeric: tabular-nums;
}

/* Eröffnung und Tagesabschluss (#82) — Components/DayOpening.razor, DayClosing.razor, AmountPad.razor */
.kasse-day { max-width: 520px; }
.kasse-day-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin: 8px 0; font-size: 18px; color: var(--kasse-muted); }
.kasse-day-row .kasse-link { font-size: 20px; font-weight: 700; }
.kasse-day-warn p { margin: 0 0 8px; }
.kasse-day-warn .kasse-button { margin-top: 4px; }
.kasse-day-dialog { width: min(560px, 100%); overflow: auto; padding-bottom: 16px; }
.kasse-day-dialog > :not(.kasse-bon-head):not(.kasse-bon-paper) { margin-left: 16px; margin-right: 16px; }
.kasse-day-dialog .kasse-tiles { margin-bottom: 12px; }
.kasse-amount-value {
    margin: 8px 0 12px;
    padding: 10px 16px;
    border-radius: 12px;
    background: #fff;
    font-size: 32px;
    font-weight: 700;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

/* Verkauf an Stammkunden (#89) — SaleScreen, CashPayment, CustomerCard: Lieferschein bar oder auf Rechnung */
.kasse-cust-card-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin: 0 0 14px; }
.kasse-sale-customer { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin: 0 0 10px; padding: 8px 12px; border-radius: 12px; background: var(--kasse-primary-soft); font-size: 17px; }
.kasse-sale-customer .kasse-cust-badge { margin-left: 6px; }
/* Kundenbanner einzeilig (#120): der Name wird gekürzt, Standardrabatt-Badge und „Laufkunde“ bleiben ganz. */
.kasse-sale-customer-text { display: flex; align-items: center; gap: 6px; min-width: 0; white-space: nowrap; }
.kasse-sale-customer-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.kasse-sale-customer-text .kasse-cust-badge { flex: none; margin-left: 0; }
.kasse-sale-customer-text .kasse-icon { margin-right: 0; }
.kasse-sale-customer > .kasse-link { flex: none; }
.kasse-discount-hint { margin: 2px 0 8px; font-size: 15px; text-align: right; }
.kasse-pay-row { display: flex; gap: 10px; }
/* „Bar“ und „Auf Rechnung“ (#120): nebeneinander gleich hoch und einzeilig, notfalls gekürzt statt umgebrochen. */
.kasse-pay-row .kasse-pay { flex: 1 1 0; min-width: 0; padding-left: 12px; padding-right: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Neben dem CTA „Bar kassieren“: gleiche Größe, aber umrandet, damit nur ein Knopf in Primär gefüllt ist. */
.kasse-pay--account { border: 2px solid var(--kasse-primary-strong); background: #fff; color: var(--kasse-primary-strong); }
.kasse-onaccount-text { margin: 8px 0 12px; font-size: 18px; }
.kasse-done-customer { margin: 2px 0 0; font-size: 20px; font-weight: 600; }
.kasse-pay-customer { margin: 0 0 6px; font-size: 17px; color: var(--kasse-muted); }

/* Belegsuche und Nachdruck (#86) — Components/ReceiptSearch.razor. Ebene wie die Kundenkarte (kasse-cust*). */
.kasse-rcpt-filter { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 12px; margin-bottom: 14px; }
.kasse-rcpt-filter label { display: flex; flex-direction: column; gap: 4px; font-size: 15px; color: var(--kasse-muted); }
.kasse-rcpt-filter input {
    min-height: 48px;
    padding: 6px 12px;
    border: 1px solid #c9d2e3;
    border-radius: 12px;
    font: inherit;
    font-size: 18px;
    color: var(--kasse-ink);
    background: #fff;
}
.kasse-rcpt-filter input[inputmode="decimal"] { width: 130px; }
.kasse-rcpt-number { flex: 1; min-width: 180px; }
.kasse-rcpt-filter .kasse-button { min-height: 48px; padding: 8px 24px; }
.kasse-rcpt-hits { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 8px; }
.kasse-rcpt-hit {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto auto;
    align-items: center;
    gap: 14px;
    padding: 10px 14px;
    border-radius: 14px;
    background: #eef2fb;
}
.kasse-rcpt-time { font-size: 20px; font-weight: 700; font-variant-numeric: tabular-nums; }
.kasse-rcpt-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.kasse-rcpt-no { font-weight: 700; overflow-wrap: anywhere; }
.kasse-rcpt-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: 15px; color: var(--kasse-muted); }
.kasse-rcpt-customer { color: var(--kasse-ink); font-weight: 600; overflow-wrap: anywhere; }   /* Stammkunde (#126) */
.kasse-rcpt-amount { font-size: 20px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.kasse-rcpt-copy { min-height: 48px; padding: 8px 18px; }
.kasse-rcpt-status { display: flex; align-items: center; gap: 10px; margin-left: auto; font-size: 15px; }
/* Belegdetails (#110) — aufgeklappter Treffer in ReceiptSearch.razor */
.kasse-rcpt-detail { grid-column: 1 / -1; padding: 8px 0 4px; border-top: 1px solid #d8deea; }
.kasse-rcpt-detail .kasse-cust-lines { margin-bottom: 10px; }
.kasse-rcpt-detail .kasse-cust-badge { margin-left: 6px; }
.kasse-rcpt-takeover { min-height: 48px; padding: 8px 22px; }
@media (max-width: 700px) {
    .kasse-rcpt-hit { grid-template-columns: auto minmax(0, 1fr) auto; }
    .kasse-rcpt-actions { grid-column: 1 / -1; }
}

/* Rechte der Filialleitung (#83) — Rabatt/Preis je Zeile (SaleScreen), DiscountPad, fehlende Freigabe */
.kasse-line-discount { font-size: 14px; color: var(--kasse-ok); font-weight: 600; }
.kasse-line-actions { display: flex; gap: 6px; margin-top: 4px; }
.kasse-line-action {
    min-height: 36px;
    padding: 4px 12px;
    border: 1px solid rgba(18, 32, 58, 0.18);
    border-radius: 999px;
    background: #fff;
    color: var(--kasse-primary-strong);
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
}
/* Umschalter Prozent | Betrag (DiscountPad); derselbe Umschalter für Art und Kunde der Bestellmaske (OrderDesk, #143; vorher
   Laufkunde | Stammkunde im Dialog „Als Abholung“, #125) mit eigenen Klassen kasse-order-mode*. */
.kasse-discount-modes, .kasse-order-modes { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 12px 0; }
.kasse-discount-mode, .kasse-order-mode {
    min-height: 48px;
    border: 2px solid rgba(18, 32, 58, 0.15);
    border-radius: 12px;
    background: #fff;
    font: inherit;
    font-weight: 700;
    cursor: pointer;
}
.kasse-discount-mode--active, .kasse-order-mode--active { border-color: var(--kasse-primary-strong); background: var(--kasse-primary-strong); color: #fff; }
.kasse-approval-missing { display: flex; align-items: center; justify-content: space-between; gap: 12px; }

/* Beleg per Mail (#81) — Components/ReceiptMail.razor, Knopf im Abschluss (SaleScreen) */
.kasse-mail { display: flex; flex-direction: column; gap: 8px; margin: 4px 0 12px; }
.kasse-mail-form { display: flex; flex-direction: column; gap: 10px; }
.kasse-mail-form label { display: flex; flex-direction: column; gap: 6px; font-size: 15px; color: var(--kasse-muted); }
.kasse-mail-form input {
    width: 100%;
    min-height: 56px;
    padding: 0 16px;
    border: 1px solid rgba(18, 32, 58, 0.25);
    border-radius: 12px;
    font: inherit;
    font-size: 20px;
    color: var(--kasse-ink);
    background: #fff;
}
.kasse-mail-hint { margin: 0; font-size: 15px; }

/* Abholungen (#91) — Components/PickupDesk.razor („Heute abzuholen“), SaleScreen (übernommene Abholung). Ebene wie die
   Kundenkarte (kasse-cust-*); Karten je Abholung im Raster, schon abgeholte als kurze Liste darunter. */
.kasse-pk-reload { margin-left: auto; }
/* Fünf Knöpfe in der Leiste (mit „Abholungen“): kompakter, damit sie im Querformat in eine Zeile passen. */
.kasse-toolbar .kasse-button { min-height: 48px; padding: 8px 18px; }
.kasse-pk-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; align-items: start; }
.kasse-pk { display: flex; flex-direction: column; gap: 4px; margin: 0; padding: 14px; background: var(--kasse-bg); }
.kasse-pk-time { font-size: 20px; }
.kasse-pk-name { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin: 0; font-size: 19px; font-weight: 700; }
.kasse-pk-name .kasse-cust-sub { margin: 0; font-weight: 400; }
.kasse-pk .kasse-wide { margin-top: 8px; }
.kasse-pk-done-head { margin: 20px 0 6px; font-size: 18px; color: var(--kasse-muted); }
.kasse-pk-done { margin: 0; padding: 0; list-style: none; font-size: 16px; }
.kasse-pk-done li { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 12px; padding: 6px 0; border-top: 1px solid #e3e8f2; }
.kasse-sale-pickup { background: rgba(46, 125, 50, 0.1); }
.kasse-line-unit--missing { color: var(--kasse-warn); font-weight: 600; }
.kasse-cust-item .kasse-wide { margin-top: 8px; min-height: 48px; }

@media (max-width: 700px) {
    .kasse-pk-list { grid-template-columns: 1fr; }
}

/* Trinkgeld (#84) — Components/CashPayment.razor (Trinkgeld-Knopf, „Stimmt so“, Aufteilung), Components/DayClosing.razor */
.kasse-pay-field {
    padding: 2px 8px;
    margin: -4px 0 -4px -10px;
    border: 2px solid transparent;
    border-radius: 10px;
    background: none;
    color: inherit;
    font: inherit;
    cursor: pointer;
}
.kasse-pay-field--active { border-color: var(--kasse-primary-strong); color: var(--kasse-primary-strong); font-weight: 700; }
.kasse-sums .kasse-pay-split { grid-column: 1 / -1; margin-top: -6px; font-size: 16px; font-weight: 400; color: var(--kasse-muted); }
.kasse-pay-split span { font-weight: 700; color: var(--kasse-ink); }
.kasse-pay-split .kasse-pay-split-tip--active { color: var(--kasse-primary-strong); text-decoration: underline; }
/* Schein-Vorschläge (#123): bis zu vier Beträge und Trinkgeld in einer Reihe, damit „Kassieren“ im Bild bleibt. Gleich
   breit, soweit Platz ist; ein Betrag wird nie umbrochen, „Trinkgeld fertig“/„Stimmt so“ schon. Erst vierstellige
   Beträge schieben den Trinkgeld-Knopf in eine zweite Reihe. */
.kasse-quick--pay { display: flex; flex-wrap: wrap; }
.kasse-quick--pay .kasse-quick-btn { flex: 1 1 0; min-width: min-content; padding: 0 4px; white-space: nowrap; }
.kasse-quick--pay .kasse-quick-btn--tip { white-space: normal; }
.kasse-quick-btn--tip { border-color: var(--kasse-ok); color: var(--kasse-ok); line-height: 1.1; }
.kasse-quick-btn--active { border-color: var(--kasse-primary-strong); background: var(--kasse-primary-strong); color: #fff; }
.kasse-day-tips { padding: 10px 14px; border-radius: 10px; background: rgba(46, 125, 50, 0.1); font-size: 20px; }
/* Querformat-Tablet (800 px hoch): Bezahlknopf ohne Scrollen erreichbar. */
@media (max-height: 820px) and (orientation: landscape) {
    .kasse-keypad--pay { grid-auto-rows: minmax(44px, 56px); }
    .kasse-payment .kasse-sums--big { gap: 4px 16px; margin: 4px 0 8px; }
}

/* Mehrere Abholungen, überfällig/heute/morgen, neue Abholung (#92) — PickupDesk (Abschnitte, „Dazunehmen“), SaleScreen
   (mehrere übernommene Abholungen, Zeilen-Kennzeichen, „Als Abholung anlegen“ → Bestellmaske OrderDesk, #143). */
.kasse-pk-section { display: flex; align-items: center; gap: 8px; margin: 18px 0 8px; font-size: 18px; }
.kasse-pk-section--0 { color: var(--kasse-error); }
.kasse-pk-section--2 { color: var(--kasse-muted); }
.kasse-pk-count { min-width: 26px; padding: 1px 8px; border-radius: 999px; background: #e3e8f2; color: var(--kasse-ink); font-size: 14px; text-align: center; }
.kasse-pk--overdue { border-left: 5px solid var(--kasse-error); }
.kasse-pk--in-cart { outline: 2px solid var(--kasse-ok); }
.kasse-pk-day { font-weight: 600; color: var(--kasse-muted); }
.kasse-pk-hint { margin: 0 0 8px; }
.kasse-pk-new-hint { margin-top: 18px; font-size: 15px; }
.kasse-pk-tag { display: inline-block; margin-left: 6px; padding: 0 7px; border-radius: 8px; background: var(--kasse-primary-soft); color: var(--kasse-primary-strong); font-size: 13px; font-weight: 600; vertical-align: middle; }
.kasse-pk-more { display: block; margin: 2px 0 8px; }
.kasse-pk-create { display: block; margin: 10px auto 0; }
/* Bestätigung „Abholung … angelegt“ (#125) steht nie hinter einer Ebene (Geparkt, Belege, Kundenkarte, Bestellmaske). */
body:has(.kasse-cust, .kasse-bon-overlay) .kasse-pk-created { display: none; }
.kasse-sale-pickups { flex-wrap: wrap; gap: 4px 12px; }
.kasse-sale-pickups > span:first-child { flex: 1 1 100%; }
.kasse-sale-pickup-row { display: inline-flex; align-items: center; gap: 6px; font-size: 15px; }
.kasse-sale-pickup-row .kasse-pk-tag { margin-left: 0; }

/* Offene Lieferscheine im Warenkorb (#90) — SaleScreen (über der Ware, „Zurücklegen“), CustomerCard („In den Warenkorb“,
   „Alle offenen kassieren“). */
.kasse-open-notes { margin-bottom: 4px; padding: 0 10px; border-radius: 12px; background: #fff7e6; }
.kasse-open-note:last-child { border-bottom: none; }
.kasse-open-note { grid-template-columns: minmax(0, 1fr) 84px; }
.kasse-cust-incart { color: var(--kasse-ok); font-weight: 600; }
.kasse-cust-col .kasse-cust-item .kasse-button { margin-top: 8px; }

/* Storno an der Filialkasse (#87) — ReceiptSearch: Knopf je Beleg, Rückfrage mit Grund, Ergebnis mit Auszahlung */
.kasse-rcpt-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.kasse-rcpt-storno { min-height: 48px; padding: 8px 18px; color: var(--kasse-error); }
.kasse-rcpt-reason { display: flex; flex-direction: column; gap: 4px; margin: 12px 0; font-size: 15px; color: var(--kasse-muted); }
.kasse-rcpt-reason input {
    box-sizing: border-box;
    min-height: 48px;
    padding: 8px 12px;
    border: 1px solid rgba(18, 32, 58, 0.2);
    border-radius: 10px;
    font: inherit;
    font-size: 18px;
    color: var(--kasse-ink);
    background: #fff;
}
.kasse-rcpt-storno-ok { min-height: 56px; margin-top: 8px; background: var(--kasse-error); }
.kasse-rcpt-payout { margin: 0 16px 10px; font-size: 24px; font-weight: 700; font-variant-numeric: tabular-nums; }
[data-testid="receipt-storno-done"] .kasse-muted,
[data-testid="receipt-storno-done"] .kasse-note { margin: 0 16px 10px; }

/* Tagesbestellung (#68) aus der Kundenkarte — CustomerCard („Ändern“ je Lieferung von morgen, „Tagesbestellung …“); beide
   öffnen die Bestellmaske (OrderDesk, #143). */
.kasse-cust-order-edit { min-height: 44px; margin-top: 8px; padding: 6px 18px; }
.kasse-cust-order-new { display: block; width: 100%; margin-top: 4px; }

/* Verkauf parken (#85) — SaleScreen („Parken“ im Warenkorb-Kopf, Hinweis im leeren Warenkorb), Home (Toolbar „Geparkt“ mit
   Anzahl), ParkedDesk (Liste, Ebene wie die Abholungen), DayClosing (Warnung vor dem Zählen). */
.kasse-cart-head-actions { display: inline-flex; align-items: center; gap: 18px; }
.kasse-park-count { display: inline-block; min-width: 24px; margin-left: 6px; padding: 0 7px; border-radius: 999px; background: #e3e8f2; color: var(--kasse-muted); font-size: 14px; text-align: center; }
.kasse-park-count--some { background: var(--kasse-primary-strong); color: #fff; }
.kasse-park-hint { display: block; margin: 6px 0 0; }
.kasse-park-summary { margin: 4px 0; font-size: 17px; }
.kasse-day-parked { display: flex; flex-direction: column; gap: 10px; }
.kasse-day-parked .kasse-error, .kasse-day-parked .kasse-sub { margin: 0; }
/* Sechs Toolbar-Knöpfe (mit „Geparkt“, seit #112 mit Icon) passen bei 1280 px in eine Zeile; mit „Abholungen“ sind es
   sieben, daher etwas enger (#120) — eine zweite Zeile kostet den Warenkorb Höhe. Mit „Bestellung“ (#143) acht: noch etwas
   enger, und unter 1440 px entfällt „Angemeldet:“ vor dem Namen (er steht auch im Kopf der Kasse). */
.kasse-toolbar { gap: 4px; }
.kasse-toolbar .kasse-button { padding: 8px 6px; font-size: 15px; }
.kasse-toolbar .kasse-link { padding: 0 4px; }
.kasse-toolbar .kasse-park-count { margin-left: 4px; }
@media (max-width: 1439px) {
    .kasse-toolbar-label { display: none; }
}

/* Offline-Start (#95) — Components/OfflineBanner.razor, Sperrhinweise in SaleScreen/CashPayment/CashierSignIn. */
.kasse-offline-banner {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 12px 16px;
    border-radius: 12px;
    border-left: 6px solid var(--kasse-warn);
    background: #fff4e0;
    color: var(--kasse-ink);
}
.kasse-offline-text { flex: 1; display: flex; flex-direction: column; gap: 2px; font-size: 16px; line-height: 1.4; }
.kasse-offline-text b { font-size: 20px; color: var(--kasse-warn); }
.kasse-offline-age { color: var(--kasse-muted); }
.kasse-offline-banner .kasse-button { flex: none; }
.kasse-offline-note { margin: 0 0 10px; font-size: 16px; }
.kasse-signin .kasse-offline-note { margin: 0 0 16px; }
@media (max-width: 900px) {
    .kasse-offline-banner { flex-direction: column; align-items: stretch; }
}
.kasse-signin .kasse-tile:disabled { opacity: 0.55; cursor: default; }

/* Icons neben der Beschriftung (#112) — Components/Icon.razor, LucideIcons aus dem Leitstand. Nie reine Symbol-Knöpfe. */
.kasse-icon { display: inline-flex; flex: none; margin-right: 8px; vertical-align: -0.2em; line-height: 0; }
.kasse-icon svg { width: 1.15em; height: 1.15em; }
.kasse-toolbar .kasse-icon { margin-right: 5px; }
.kasse-pay .kasse-icon { margin-right: 10px; }
.kasse-link .kasse-icon { margin-right: 4px; }

/* Bestellmaske „Bestellung“ (#143) — Components/OrderDesk.razor (Ebene wie die Kundenkarte, kasse-cust-*; auch über ihr),
   OrderProductPicker.razor (Suche, „Zuletzt bestellt“, Schnelltasten), OrderCustomerSearch.razor (Stammkunden-Suche),
   ProductTile (gesperrte Kachel). Querformat: Bestellung links, Artikel rechts (bleibt beim Scrollen stehen); Hochformat
   untereinander. Folgetickets ergänzen eigene Unterpräfixe (kasse-order-copy-, kasse-order-move-). */
.kasse-cust.kasse-order { z-index: 55; }
.kasse-order-panel { max-width: 1500px; }
.kasse-order-head { flex-wrap: wrap; }
.kasse-order-head h2 { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.kasse-order-head h2 .kasse-muted { font-size: 18px; font-weight: 400; }
.kasse-order-kinds { flex: 0 1 420px; margin: 0 0 0 auto; }
.kasse-order-choose { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; max-width: 900px; margin: 8px auto 16px; }
.kasse-order-choose > p { grid-column: 1 / -1; margin: 0; font-size: 18px; }
.kasse-order-choice { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; min-height: 120px; padding: 18px 22px; font-size: 24px; font-weight: 700; text-align: left; }
.kasse-order-choice span { font-size: 16px; font-weight: 400; }
.kasse-order-body { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 4fr); gap: 16px; align-items: start; }
.kasse-order-main { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.kasse-order-section { margin: 0; padding: 12px 14px; border-radius: 14px; background: var(--kasse-bg); }
.kasse-order-section > .kasse-order-modes { margin-top: 0; }
.kasse-order-label { font-size: 15px; font-weight: 600; color: var(--kasse-muted); }
.kasse-order-days { display: flex; flex-direction: column; gap: 6px; }
.kasse-order-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.kasse-order-chip-day { min-height: 48px; padding: 6px 14px; flex-direction: row; font-size: 16px; }
.kasse-order-chip-day.kasse-tile--active { border-color: var(--kasse-primary-strong); background: var(--kasse-primary-strong); color: #fff; }
.kasse-order input[type="date"], .kasse-order input[type="time"], .kasse-order-field input {
    box-sizing: border-box;
    min-height: 48px;
    padding: 6px 12px;
    border: 1px solid #c9d2e3;
    border-radius: 12px;
    font: inherit;
    font-size: 18px;
    color: var(--kasse-ink);
    background: #fff;
}
.kasse-order-time { display: inline-flex; align-items: center; gap: 8px; font-size: 15px; color: var(--kasse-muted); }
.kasse-order-fields { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 8px; }
.kasse-order-field { display: flex; flex-direction: column; gap: 4px; flex: 1 1 200px; font-size: 15px; color: var(--kasse-muted); }
.kasse-order-field--wide { flex: 2 1 280px; }
.kasse-order-field input { width: 100%; }
.kasse-order-customer { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin: 0; font-size: 18px; }
.kasse-order-hits { grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.kasse-order-context { display: flex; flex-direction: column; gap: 8px; }
.kasse-order-context-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.kasse-order-tour { display: inline-flex; align-items: baseline; gap: 6px; padding: 6px 12px; border-radius: 999px; background: #fff; font-weight: 600; box-shadow: inset 0 0 0 1px #c9d2e3; }
.kasse-order-tour--off { color: var(--kasse-muted); font-weight: 400; }
.kasse-order-tour--away { box-shadow: inset 0 0 0 2px var(--kasse-warn); }
.kasse-order-hint { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0; font-size: 15px; color: var(--kasse-ink); }
.kasse-order-standing { margin: 0; padding: 0; list-style: none; font-size: 16px; }
.kasse-order-standing li { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 8px; padding: 3px 0; }
.kasse-order-standing-qty { min-width: 64px; text-align: right; font-variant-numeric: tabular-nums; }
.kasse-order-positions { display: flex; flex-direction: column; gap: 10px; }
/* Der Hinweis nach dem Bestellschluss muss auffallen: kräftige Warnfarbe, groß. */
.kasse-order-cutoff { margin: 0; padding: 12px 16px; border-radius: 12px; background: var(--kasse-warn); color: #fff; font-size: 20px; font-weight: 700; }
.kasse-order-cutoff--big { padding: 18px 16px; font-size: 26px; text-align: center; }
.kasse-order-lines { padding: 0 12px; border-radius: 12px; background: #fff; }
.kasse-order-lines .kasse-line { grid-template-columns: minmax(0, 1fr) auto 96px 44px; }
.kasse-order-line--blocked { background: rgba(198, 40, 40, 0.06); }
.kasse-order-line--blocked .kasse-line-name { color: var(--kasse-muted); text-decoration: line-through; }
.kasse-order-line-blocked { font-size: 14px; font-weight: 600; color: var(--kasse-error); }
.kasse-order-line-hint { font-size: 14px; color: var(--kasse-warn); }
.kasse-order-qty {
    width: 76px;
    min-height: 48px;
    border: 1px solid #c9d2e3;
    border-radius: 12px;
    font: inherit;
    font-size: 20px;
    font-weight: 700;
    text-align: center;
    color: var(--kasse-ink);
    background: #fff;
}
.kasse-order-remove { min-width: 44px; justify-content: center; }
.kasse-order-remove .kasse-icon { margin-right: 0; }
.kasse-order-removed { margin: 0; font-size: 15px; color: var(--kasse-warn); }
.kasse-order-total { padding: 0 4px; }
.kasse-order-note { flex: none; }
.kasse-order-note input { width: 100%; }
.kasse-order-actions { position: sticky; bottom: 0; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 10px; padding: 8px 0; background: var(--kasse-bg); }
.kasse-order-save { background: var(--kasse-ok); }
.kasse-order-delete-ok { background: var(--kasse-error); }
.kasse-order-done { display: flex; flex-direction: column; gap: 14px; max-width: 760px; margin: 8px auto 12px; }
.kasse-order-done-title { margin: 0; font-size: 24px; font-weight: 700; color: var(--kasse-ok); }
/* Artikel (OrderProductPicker): Suche mit Platz für Werkzeuge daneben, Vorschläge als Chips, darunter Schnelltasten oder
   Treffer; die Spalte ist weiß wie die Verkaufsspalte (Verlauf der Chip-Leiste). */
.kasse-order-products {
    position: sticky;
    top: 0;
    display: flex;
    flex-direction: column;
    min-width: 0;
    max-height: calc(100vh - 140px);
    padding: 12px;
    border-radius: 14px;
    background: #fff;
    box-shadow: inset 0 0 0 1px #e3e8f2;
}
.kasse-order-search { display: flex; gap: 10px; align-items: stretch; }
.kasse-order-search .kasse-search { flex: 1; min-width: 0; }
.kasse-order-search .kasse-search input { padding-right: 16px; }
.kasse-order-search > .kasse-button { flex: none; min-height: 56px; white-space: nowrap; }
.kasse-order-suggestions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin: 0 0 12px; font-size: 15px; }
.kasse-order-chip { display: inline-flex; align-items: stretch; overflow: hidden; border-radius: 999px; background: #eef2fb; }
.kasse-order-chip button { min-height: 44px; border: 0; background: none; color: var(--kasse-ink); font: inherit; cursor: pointer; }
.kasse-order-chip-add { padding: 0 6px 0 14px; font-weight: 600; }
.kasse-order-chip-remove { padding: 0 12px 0 6px; font-size: 20px; color: var(--kasse-muted); }
.kasse-order-products > .kasse-qk, .kasse-order-product-list { flex: 1 1 auto; min-height: 0; }
.kasse-order-products > .kasse-qk .kasse-products { overflow-y: auto; }
.kasse-order-product-list { align-content: start; }
.kasse-product--unavailable .kasse-product-price { font-size: 13px; font-weight: 400; color: var(--kasse-muted); }

@media (max-width: 960px) {
    .kasse-order-body { grid-template-columns: 1fr; }
    .kasse-order-products { position: static; max-height: none; }
    .kasse-order-choose { grid-template-columns: 1fr; }
}

/* Abholung ändern und stornieren (#144) — PickupDesk und CustomerCard („Ändern“ neben „Übernehmen“), OrderDesk im
   Bearbeitungsmodus („Abholung stornieren“ neben „Speichern“, Rückfrage mit kasse-order-delete-ok). */
.kasse-pk-actions { display: flex; align-items: stretch; gap: 8px; }
.kasse-pk-actions .kasse-wide { flex: 1 1 auto; min-width: 0; }
.kasse-pk-edit { flex: none; min-height: 48px; margin-top: 8px; padding: 6px 18px; }
.kasse-order-cancel { color: var(--kasse-error); }

/* „Kopieren aus …“ (#145) — Components/OrderCopyDialog.razor (Ebene über der Bestellmaske), OrderCopyNotes.razor
   (Lieferscheine, aufklappbar), OrderCopyLine.razor (Position zum Anhaken: die ganze Zeile hakt an, große Checkbox für den
   Finger); in OrderDesk.razor der Knopf neben der Suche, die Markierung „+ Mo“ und die Vormerkung „Am Quelltag nichts liefern“. */
.kasse-order-copy-overlay {
    position: fixed;
    inset: 0;
    z-index: 57;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    background: rgba(18, 32, 58, 0.55);
}
.kasse-order-copy {
    display: flex;
    flex-direction: column;
    gap: 10px;
    width: min(780px, 100%);
    max-height: 100%;
    padding: 16px 18px;
    border-radius: 16px;
    background: #fff;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.3);
}
.kasse-order-copy-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.kasse-order-copy-head h2 { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; margin: 0; font-size: 22px; }
.kasse-order-copy-head h2 .kasse-muted { font-size: 17px; font-weight: 400; }
.kasse-order-copy > .kasse-order-modes { margin: 0; }
.kasse-order-copy-day { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.kasse-order-copy-day .kasse-button { min-width: 56px; min-height: 48px; padding: 4px 14px; font-size: 22px; line-height: 1; }
.kasse-order-copy-weekday { font-weight: 600; }
.kasse-order-copy-hint { color: var(--kasse-muted); }
.kasse-order-copy-body { flex: 1 1 auto; min-height: 180px; overflow-y: auto; padding: 10px 12px; border-radius: 14px; background: var(--kasse-bg); }
.kasse-order-copy-body > p { margin: 8px 0; }
.kasse-order-copy-toolbar { display: flex; align-items: center; gap: 4px 12px; margin-bottom: 6px; }
.kasse-order-copy-toolbar > .kasse-muted { margin-right: auto; }
.kasse-order-copy-group { margin-bottom: 10px; padding: 6px 12px 8px; border-radius: 12px; background: #fff; }
.kasse-order-copy-group-head, .kasse-order-copy-line, .kasse-order-copy-clear-label { display: flex; align-items: center; gap: 12px; min-height: 48px; cursor: pointer; }
.kasse-order-copy-group-name { font-size: 18px; font-weight: 700; }
.kasse-order-copy input[type="checkbox"] { flex: none; width: 26px; height: 26px; margin: 0; accent-color: var(--kasse-primary-strong); cursor: inherit; }
.kasse-order-copy-line { padding: 4px 0 4px 2px; border-top: 1px solid #eef1f6; font-size: 17px; }
.kasse-order-copy-line-name { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
.kasse-order-copy-line-info { flex: none; max-width: 45%; font-size: 14px; text-align: right; }
.kasse-order-copy-line-reason { font-style: italic; }
.kasse-order-copy-line-min { color: var(--kasse-warn); font-weight: 600; }
.kasse-order-copy-line-qty { flex: none; min-width: 72px; text-align: right; font-weight: 700; font-variant-numeric: tabular-nums; }
.kasse-order-copy-line--off { color: var(--kasse-muted); cursor: default; }
.kasse-order-copy-line--off .kasse-order-copy-line-qty { font-weight: 400; }
.kasse-order-copy-notice { margin: 4px 0; font-size: 15px; }
.kasse-order-copy-notes { display: flex; flex-direction: column; gap: 8px; }
.kasse-order-copy-note { border-radius: 12px; background: #fff; }
.kasse-order-copy-note--open { box-shadow: inset 0 0 0 2px var(--kasse-primary-strong); }
.kasse-order-copy-note-head {
    display: grid;
    grid-template-columns: 18px auto auto minmax(0, 1fr) auto;
    align-items: center;
    gap: 10px;
    width: 100%;
    min-height: 56px;
    padding: 6px 12px;
    border: 0;
    background: none;
    color: var(--kasse-ink);
    font: inherit;
    text-align: left;
    cursor: pointer;
}
.kasse-order-copy-chev { font-size: 20px; line-height: 1; color: var(--kasse-muted); }
.kasse-order-copy-note-date { font-weight: 700; white-space: nowrap; }
.kasse-order-copy-note-no { color: var(--kasse-muted); font-variant-numeric: tabular-nums; }
.kasse-order-copy-note-origin { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--kasse-muted); }
.kasse-order-copy-note-total { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.kasse-order-copy-note-body { padding: 0 12px 8px; }
.kasse-order-copy-clear { padding: 6px 12px 8px; border-radius: 12px; background: rgba(178, 106, 0, 0.08); }
.kasse-order-copy-clear-label { font-size: 18px; font-weight: 700; }
.kasse-order-copy-clear-hint { margin: 0 0 4px 38px; font-size: 15px; color: var(--kasse-muted); }
.kasse-order-copy-clear-hint--on { color: var(--kasse-warn); font-weight: 600; }
.kasse-order-copy-clear .kasse-note { margin: 4px 0; }
.kasse-order-copy-foot { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; }
/* In der Maske: Markierung „+ Mo“ neben den übrigen Kennzeichen (blau statt Primär, 7:1), Vormerkung mit „Doch liefern“. */
.kasse-order-copy-tag { background: #e6f0ff; color: #1c4f9c; }
.kasse-order-copy-done { color: var(--kasse-ok); font-weight: 600; }
.kasse-order-copy-pending { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 12px; margin: 0; }

@media (max-width: 700px) {
    .kasse-order-copy-note-head { grid-template-columns: 18px auto minmax(0, 1fr) auto; }
    .kasse-order-copy-note-no { display: none; }
}

/* Lieferung verlegen und „Auch für weitere Tage“ (#146) — Components/OrderMoveDialog.razor (kasse-move-), OrderDaysDialog.razor
   (kasse-days-): Dialoge über der Bestellmaske (OrderDesk, z-index 55). In OrderDesk.razor wie im Büro „Lieferung verlegen …“
   im Kopf der Positionen (kasse-order-move) und „Auch für weitere Tage …“ neben „Speichern“ (.kasse-order-actions).
   Kacheln und Felder aus der Maske (kasse-order-chip-day, kasse-order-field, kasse-order-label). */
.kasse-order-move { display: inline-flex; align-items: center; margin-left: auto; }
.kasse-move-backdrop, .kasse-days-backdrop {
    position: fixed;
    inset: 0;
    z-index: 60;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    background: rgba(18, 32, 58, 0.45);
}
.kasse-move, .kasse-days {
    display: flex;
    flex-direction: column;
    gap: 12px;
    width: 100%;
    max-width: 760px;
    max-height: 100%;
    overflow-y: auto;
    padding: 20px;
    border-radius: 18px;
    background: #fff;
    box-shadow: 0 12px 40px rgba(18, 32, 58, 0.3);
}
.kasse-move-head, .kasse-days-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.kasse-move-head h2, .kasse-days-head h2 { margin: 0; font-size: 24px; }
.kasse-move-head .kasse-muted, .kasse-days-head .kasse-muted { font-size: 18px; }
.kasse-move-section { display: flex; flex-direction: column; gap: 6px; }
.kasse-move-label { font-size: 15px; font-weight: 600; color: var(--kasse-muted); }
.kasse-move-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.kasse-move-chip { min-height: 48px; padding: 6px 14px; flex-direction: row; font-size: 16px; }
.kasse-move-chip.kasse-tile--active { border-color: var(--kasse-primary-strong); background: var(--kasse-primary-strong); color: #fff; }
.kasse-move-confirm, .kasse-days-save { background: var(--kasse-ok); }
.kasse-move input[type="date"], .kasse-days input[type="date"] {
    box-sizing: border-box;
    min-height: 48px;
    padding: 6px 12px;
    border: 1px solid #c9d2e3;
    border-radius: 12px;
    font: inherit;
    font-size: 18px;
    color: var(--kasse-ink);
    background: #fff;
}
.kasse-move-hint, .kasse-days-hint { margin: 0; font-size: 15px; }
.kasse-move-note { margin: 0; padding: 10px 14px; border-radius: 10px; background: var(--kasse-bg); font-size: 16px; }
.kasse-move-note--warn { background: rgba(178, 106, 0, 0.1); color: var(--kasse-warn); }
.kasse-move-note--lock { background: rgba(198, 40, 40, 0.08); color: var(--kasse-error); font-weight: 600; }
.kasse-move-lines { margin: 0; padding: 0 12px; border-radius: 12px; background: var(--kasse-bg); list-style: none; }
.kasse-move-line { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px 12px; padding: 8px 0; border-bottom: 1px solid #e3e8f2; }
.kasse-move-line:last-child { border-bottom: 0; }
.kasse-move-line-qty { font-weight: 600; font-variant-numeric: tabular-nums; }
.kasse-move-line--off .kasse-move-line-name, .kasse-move-line--off .kasse-move-line-qty { color: var(--kasse-muted); text-decoration: line-through; }
.kasse-move-line-reason { grid-column: 1 / -1; font-size: 14px; font-weight: 600; color: var(--kasse-error); }
.kasse-move-actions, .kasse-days-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; padding-top: 4px; }
.kasse-days-info { margin: 0; padding: 10px 14px; border-radius: 10px; background: var(--kasse-bg); font-size: 16px; }
.kasse-days-range { display: flex; flex-wrap: wrap; gap: 10px; }
.kasse-days-field { display: flex; flex-direction: column; gap: 4px; flex: 1 1 200px; font-size: 15px; color: var(--kasse-muted); }
.kasse-days-field input { width: 100%; }
.kasse-days-list-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 16px; }
.kasse-days-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 8px; margin: 0; padding: 0; list-style: none; }
.kasse-days-day {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    width: 100%;
    min-height: 64px;
    padding: 10px 12px;
    border: 2px solid transparent;
    border-radius: 14px;
    background: #eef2fb;
    color: var(--kasse-ink);
    font: inherit;
    font-size: 16px;
    text-align: left;
    cursor: pointer;
}
.kasse-days-day--on { border-color: var(--kasse-primary-strong); background: var(--kasse-primary-soft); }
.kasse-days-day--off { background: var(--kasse-bg); color: var(--kasse-muted); cursor: default; }
.kasse-days-check {
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border: 2px solid #9aa6bd;
    border-radius: 8px;
    background: #fff;
    color: #fff;
    font-weight: 700;
}
.kasse-days-day--on .kasse-days-check { border-color: var(--kasse-primary-strong); background: var(--kasse-primary-strong); }
.kasse-days-day--off .kasse-days-check { border-color: #d3d9e6; background: transparent; }
.kasse-days-day-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.kasse-days-day-date { font-size: 18px; font-weight: 700; }
.kasse-days-day--off .kasse-days-day-date { font-weight: 600; }
.kasse-days-day-reason { font-size: 14px; color: var(--kasse-warn); }
.kasse-days-day .kasse-pk-tag { margin-left: 0; align-self: center; }
