:root { --bs-body-font-size: .95rem; }
body { background: #f4f5f7; }
.card { box-shadow: 0 1px 2px rgba(0,0,0,.06); }
.table-sm td, .table-sm th { vertical-align: middle; }
.sortlink { color: inherit; text-decoration: none; white-space: nowrap; }
.sortlink:hover { text-decoration: underline; }
tr.klickbar { cursor: pointer; }
.rest-offen { background: #d1f2d9 !important; }
.rest-null  { background: #f8d7da !important; }
.suchfeld:focus, .scanfeld:focus { background: #fff8c5; }
.scanfeld { font-size: 1.6rem; letter-spacing: .1em; }
.zahl-gross { font-size: 2.6rem; font-weight: 700; line-height: 1; }
.feedback { position: fixed; inset: 0; display: none; align-items: center; justify-content: center; z-index: 2000; pointer-events: none; }
.feedback.show { display: flex; }
.feedback .symbol { font-size: 14rem; text-shadow: 0 4px 20px rgba(0,0,0,.25); }
.feedback .ok { color: #198754; }
.feedback .nein { color: #dc3545; }
.badge-vip { background: #6f42c1; }
.mono { font-family: ui-monospace, Consolas, monospace; }
@media print { nav, .no-print { display: none !important; } body { background: #fff; } }
/* Kamera-Scanner (assets/kamera.js) */
.kamera-bild { position: relative; background: #000; border-radius: .5rem; overflow: hidden; aspect-ratio: 4 / 3; max-height: 60vh; }
.kamera-bild video { width: 100%; height: 100%; object-fit: cover; display: block; }
.kamera-rahmen { position: absolute; inset: 15% 20%; border: 3px solid rgba(255,255,255,.85); border-radius: .75rem; box-shadow: 0 0 0 100vmax rgba(0,0,0,.35); pointer-events: none; }
.kamera-box.erkannt .kamera-rahmen { border-color: #20c997; }
.kamera-status { position: absolute; left: 0; right: 0; bottom: 0; padding: .35rem .6rem; color: #fff; background: rgba(0,0,0,.55); text-align: center; }
.kamera-status.fehler { background: rgba(220,53,69,.85); }
