/* ============================================================
   Visierung-Modul — Rapportdaten-Anzeige (read-only)
   Dual-Source: DV-Mirror (lohnlauf) + native (public.time_entries)
   Wiederverwendet globale Klassen (btn, pill, page-header, filterbar,
   field, grid-card, spinner). Nur modul-spezifische Stile hier.
   ============================================================ */

/* ===== Quelle-Badge (DV / nativ) ===== */
.vis-src { display:inline-flex; align-items:center; gap:4px; padding:1px 7px; border-radius:999px;
  font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; }
.vis-src.dv     { background:#e6f6fc; color:#0a6e90; }      /* DV-Mirror */
.vis-src.native { background:#ede9fe; color:#5b21b6; }      /* native Erfassung */

/* ===== Ampel Visiert-Status ===== */
.vis-amp { display:inline-flex; align-items:center; gap:5px; font-size:12px; font-weight:600; }
.vis-amp .dot { width:10px; height:10px; border-radius:50%; border:1px solid rgba(0,0,0,.06); }
.vis-amp.ja   .dot { background: var(--status-visiert, #bbf7d0); }
.vis-amp.nein .dot { background: var(--status-nicht-visiert, #fecaca); }
/* Kürzel des Visierers neben der «visiert»-Pille */
.vis-amp-vis {
  margin-left:6px; padding:1px 6px; border-radius:9px;
  font-size:11px; font-weight:700; letter-spacing:.02em; text-transform:uppercase;
  background:#dcfce7; color:#166534; border:1px solid #bbf7d0;
}

/* ===== MA-Auswahl-Liste ===== */
.vis-search { margin-bottom:12px; }
.vis-search input { width:100%; max-width:420px; padding:9px 12px; border:1px solid var(--border-strong);
  border-radius:8px; font-size:14px; background:var(--surface); color:var(--text); }

.vis-ma-list { display:flex; flex-direction:column; gap:1px; background:var(--border); border:1px solid var(--border);
  border-radius:var(--radius); overflow:hidden; box-shadow:var(--shadow-sm); }
.vis-ma-row { display:flex; align-items:center; gap:12px; padding:11px 16px; background:var(--surface);
  cursor:pointer; transition:background .1s; }
.vis-ma-row:hover { background:var(--bg); }
.vis-ma-row .vis-ma-nr { font-variant-numeric:tabular-nums; color:var(--text-muted); font-size:12px;
  min-width:48px; font-weight:600; }
.vis-ma-row .vis-ma-name { font-weight:500; flex:1; }
.vis-ma-row .vis-ma-src { display:flex; gap:5px; }
.vis-ma-row .chev { color:var(--text-dim); width:16px; height:16px; }

/* ===== Tagesliste ===== */
.vis-day-table { width:100%; border-collapse:separate; border-spacing:0; font-size:13px;
  background:var(--surface); border:1px solid var(--border); border-radius:var(--radius);
  overflow:hidden; box-shadow:var(--shadow-sm); }
.vis-day-table th { text-align:left; font-size:11px; text-transform:uppercase; letter-spacing:.04em;
  color:var(--text-muted); font-weight:600; padding:9px 14px; border-bottom:1px solid var(--border-strong);
  background:var(--bg); white-space:nowrap; }
.vis-day-table th.num, .vis-day-table td.num { text-align:right; font-variant-numeric:tabular-nums; }
.vis-day-table td { padding:10px 14px; border-bottom:1px solid var(--border); vertical-align:middle; }
.vis-day-table tbody tr { cursor:pointer; transition:background .1s; }
.vis-day-table tbody tr:hover { background:var(--bg); }
.vis-day-table tbody tr:last-child td { border-bottom:none; }
.vis-day-table td { vertical-align:top; }
.vis-day-date { font-weight:600; white-space:nowrap; }
.vis-day-date .wd { color:var(--text-muted); font-weight:400; font-size:11px; margin-left:5px; }
.vis-day-obj { color:var(--text); }
.vis-day-obj .vis-day-objlbl { color:var(--text-muted); font-size:11px; margin:1px 0 4px; }
.vis-day-times { white-space:nowrap; font-variant-numeric:tabular-nums; }
.vis-day-times .sub { color:var(--text-muted); font-size:11px; margin-top:2px; }
.vis-rap-btn { padding:4px 10px; font-size:12px; border:1px solid var(--border-strong); color:var(--brand-dark); }
.vis-rap-btn:hover { background:var(--brand-soft); }

/* ===== Gelber Lohnarten-Block (wie PowerApp) ===== */
.vis-la { border-collapse:collapse; font-variant-numeric:tabular-nums; margin-top:2px; }
.vis-la td { padding:1px 6px; text-align:center; border:1px solid #f1e3a0; background:#fff9c4; }
.vis-la td.la-head { background:transparent; border:none; color:var(--text-muted); font-size:10px;
  font-weight:700; text-transform:uppercase; padding-right:8px; }
.vis-la .la-nr { display:block; font-size:10px; color:#6b5d10; font-weight:600; }
.vis-la .la-menge { display:block; font-size:12px; font-weight:700; color:#3f3a08; }

/* ===== Vergleichs-LA-Block (Tagesliste): Engine vs DV, gleiche LA untereinander ===== */
.vis-lacmp { border-collapse:collapse; font-variant-numeric:tabular-nums; margin-top:3px; }
.vis-lacmp td { padding:1px 7px; text-align:center; border:1px solid var(--border); min-width:30px; }
.vis-lacmp td.h { background:transparent; border:none; color:var(--text-muted); font-size:10px;
  font-weight:700; text-transform:uppercase; text-align:right; padding-right:8px; }
.vis-lacmp tr:first-child td { font-size:10px; font-weight:700; color:var(--text-muted); background:var(--bg); }
.vis-lacmp td.eng { color:#5b21b6; font-weight:700; }      /* Engine = neue Routine (lila) */
.vis-lacmp td.dv  { color:#0a6e90; font-weight:600; }      /* DV gespeichert (blau) */
.vis-lacmp td.dv.diff { background:#fef2f2; color:#b91c1c; }   /* Abweichung Engine≠DV */
.vis-lacmp-none { color:var(--text-dim); font-size:11px; }

/* ===== Verpflegungs-Check-Chips (Detail) ===== */
.vis-rd-chips { display:flex; flex-wrap:wrap; gap:8px; margin:6px 0; }
.vis-chk { display:inline-flex; align-items:center; gap:5px; padding:4px 10px; border-radius:6px;
  font-size:12px; font-weight:500; }
.vis-chk.on  { background:var(--brand-soft); color:var(--brand-dark); }
.vis-chk.off { background:var(--bg); color:var(--text-dim); border:1px dashed var(--border-strong); font-weight:400; }
.vis-rd-la { margin:6px 0 2px; }

/* ===== Tagesdetail (read-only Karten) ===== */
.vis-detail-head { margin-bottom:8px; }
.vis-detail-head .obj-back { display:inline-flex; align-items:center; gap:6px; }

.vis-rd-card { border:1px solid var(--border); border-radius:8px; padding:10px 14px; margin-bottom:10px;
  background:var(--surface); box-shadow:var(--shadow-sm); }
.vis-rd-head { font-size:14px; margin-bottom:6px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.vis-rd-line { font-size:12.5px; line-height:1.8; display:flex; flex-wrap:wrap; gap:4px 20px; }
.vis-rd-seg { white-space:nowrap; }
.vis-rd-k { color:var(--text-muted); font-size:10px; text-transform:uppercase; letter-spacing:.04em; margin-right:5px; }
.vis-rd-dim { color:var(--text-muted); }
.vis-rd-bem { font-style:italic; color:var(--text); white-space:normal; margin-top:2px;
  border-left:3px solid var(--brand); padding-left:10px; }

/* ===== Vergleichs-Chips in der Tagesliste ===== */
.vis-vcell { display:flex; flex-wrap:wrap; gap:4px; }
.vchip { display:inline-flex; align-items:center; font-size:11px; font-weight:700;
  padding:1px 6px; border-radius:6px; white-space:nowrap; }
.vchip.ok   { background:#dcfce7; color:#15803d; }
.vchip.real { background:#fee2e2; color:#b91c1c; }
.vchip.dub  { background:#fde68a; color:#92400e; }
.vchip.open { background:#eef2f7; color:#475569; font-weight:600; }
.vchip.none { color:var(--text-dim); font-weight:400; }

/* ===== Vergleichsblock Engine ↔ DV (Tagesdetail) ===== */
.vis-cmp { border:1px solid var(--border); border-radius:8px; margin-bottom:14px; overflow:hidden;
  box-shadow:var(--shadow-sm); background:var(--surface); }
.vis-cmp-head { display:flex; align-items:center; gap:8px; padding:10px 14px; font-weight:600; font-size:13px;
  background:var(--bg); border-bottom:1px solid var(--border); }
.vis-cmp-hint { padding:12px 14px; font-size:13px; color:#92400e; background:#fffbeb;
  border:1px solid #fde68a; border-radius:8px; margin-bottom:14px; }
.vis-cmp-hint.dim, .vis-cmp-hint .dim { color:var(--text-muted); background:transparent; border:none; }

.vis-cmp-tbl { width:100%; border-collapse:collapse; font-size:13px; font-variant-numeric:tabular-nums; }
.vis-cmp-tbl th { text-align:left; font-size:11px; text-transform:uppercase; letter-spacing:.04em;
  color:var(--text-muted); font-weight:600; padding:7px 14px; border-bottom:1px solid var(--border); }
.vis-cmp-tbl td { padding:7px 14px; border-bottom:1px solid var(--border-subtle,#f0f1f3); }
.vis-cmp-tbl td.num, .vis-cmp-tbl th.num { text-align:right; }
.vis-cmp-tbl td.la { font-weight:700; }
.vis-cmp-tbl td.bez { color:var(--text); }
.vis-cmp-tbl td.obj { color:var(--text-muted); font-size:12px; }
.vis-cmp-tbl td.eng { font-weight:700; color:#5b21b6; }     /* Engine = neue Routine */
.vis-cmp-tbl td.dv  { font-weight:600; color:#0a6e90; }     /* DV gespeichert */
.vis-cmp-tbl td.st { font-size:12px; font-weight:600; }
.vis-cmp-tbl tr.ok td.st { color:#15803d; }
.vis-cmp-tbl tr.mismatch { background:#fef2f2; }
.vis-cmp-tbl tr.mismatch td.st { color:#b91c1c; }
.vis-cmp-tbl tr.only-eng { background:#f5f3ff; }
.vis-cmp-tbl tr.only-eng td.st { color:#5b21b6; }
.vis-cmp-tbl tr.only-dv { background:#fffbeb; }
.vis-cmp-tbl tr.only-dv td.st { color:#92400e; }
.vis-cmp-tbl tr.dub { background:#fffaf0; }
.vis-cmp-tbl tr.dub td.st { color:#b45309; font-weight:700; }

/* ===== Korrektur-/Verdachts-Badges ===== */
.vis-korr { display:inline-flex; align-items:center; padding:1px 7px; border-radius:999px;
  font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.04em;
  background:#ede9fe; color:#5b21b6; margin-left:4px; }
.vis-verdacht { display:inline-flex; align-items:center; gap:4px; padding:1px 7px; border-radius:999px;
  font-size:10.5px; font-weight:700; background:#fef3c7; color:#92400e; margin-left:6px; white-space:nowrap; }
.vis-pend { display:inline-flex; align-items:center; gap:4px; padding:1px 7px; border-radius:999px;
  font-size:10.5px; font-weight:700; background:#dbeafe; color:#1e40af; margin-left:6px; white-space:nowrap; }
.vis-frozen { display:inline-flex; align-items:center; padding:1px 7px; border-radius:999px;
  font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.04em;
  background:#e2e8f0; color:#475569; margin-left:6px; }

/* Wochenansicht: Bemerkung, Aktionen, Tageskopf-Marken (Detail-Screen abgelöst) */
.vis-wk-bem { font-size:12px; color:var(--text,#0f172a); line-height:1.35; white-space:normal; text-align:left; }
.vis-wk-bemvis { color:#64748b; }
.vis-wk-bemsep { border:0; border-top:1px dashed #e2e8f0; margin:4px 0; }
.vis-wk-actrow td, .vis-wk-actrow th { border-top:1px solid #e2e8f0; }
.vis-wk-actcell { text-align:center; }
.vis-wk-act { display:inline-flex; align-items:center; gap:3px; margin:1px 3px; }
.vis-wk-actlbl { font-size:10px; color:#94a3b8; margin-right:2px; }
.vis-wk-abtn { border:1px solid var(--border,#dbe2ea); background:#fff; border-radius:6px; width:26px; height:24px;
  cursor:pointer; color:#334155; display:inline-flex; align-items:center; justify-content:center; }
.vis-wk-abtn:hover { background:var(--brand-soft,#e6f6fc); border-color:var(--brand,#0099CC); }
.vis-wk-abtn.vis-danger { color:#b91c1c; }
.vis-wk-abtn.vis-danger:hover { background:#fee2e2; border-color:#fca5a5; }
.vis-wk-marks { display:flex; flex-wrap:wrap; gap:3px; justify-content:center; margin:2px 0; }
.vis-wk-korr { font-size:9px; font-weight:700; padding:0 5px; border-radius:6px; background:#ede9fe; color:#5b21b6; }
.vis-wk-pend { font-size:9px; font-weight:700; padding:0 5px; border-radius:6px; background:#dbeafe; color:#1e40af; }

/* Auswahl-Overlay bei mehreren Rapporten pro Tag */
.vis-ov { position:fixed; inset:0; background:rgba(15,23,42,.35); display:flex; align-items:center; justify-content:center; z-index:2000; }
.vis-ov-card { background:#fff; border-radius:12px; box-shadow:0 20px 50px rgba(15,23,42,.25); padding:18px 20px; width:min(460px,94vw); }
.vis-ov-card h3 { margin:0 0 12px; font-size:15px; }
.vis-ov-list { display:flex; flex-direction:column; gap:8px; }
.vis-ov-row { display:flex; align-items:center; gap:8px; width:100%; text-align:left; border:1px solid var(--border,#dbe2ea);
  background:#fff; border-radius:8px; padding:9px 12px; cursor:pointer; font:inherit; }
.vis-ov-row:hover { background:var(--brand-soft,#e6f6fc); border-color:var(--brand,#0099CC); }
.vis-ov-st { margin-left:auto; font-size:10.5px; font-weight:700; border-radius:999px; padding:1px 8px; }
.vis-ov-st.vis { background:#dcfce7; color:#166534; }
.vis-ov-st.off { background:#fef9c3; color:#854d0e; }
.vis-ov-foot { margin-top:14px; text-align:right; }
.vis-wk-expl { font-size:9px; font-weight:700; padding:0 5px; border-radius:6px; background:#ede9fe; color:#5b21b6; margin-left:4px; }

/* Einklappbare Sektionen in der Wochenansicht */
.vis-wk-sec { cursor:pointer; }
.vis-wk-sec .vis-wk-sechead { background:#f1f5f9; font-weight:700; color:#334155; text-transform:uppercase;
  font-size:11px; letter-spacing:.04em; user-select:none; }
.vis-wk-sec:hover .vis-wk-sechead { background:#e6f0f7; }
.vis-wk-sec td { background:#f1f5f9; }
.vis-wk-caret { display:inline-block; width:12px; transition:transform .12s; color:#64748b; }
.vis-wk-sec.collapsed .vis-wk-caret { transform:rotate(-90deg); }
/* Zwischentitel (z.B. „Reise Hin") + eingerückte Detailzeilen */
.vis-wk-subhead { background:#fafcff; font-weight:700; font-size:11px; color:#475569; padding-top:6px; }
.vis-wk-sublbl { display:inline-block; padding-left:16px; color:#64748b; }
/* Fahrer/Beifahrer-Flag auf der Reise-Hin/Rück-Titelzeile */
.vis-wk-roll { display:inline-block; min-width:16px; padding:0 4px; border-radius:4px; font-size:10px; font-weight:700; line-height:15px; text-align:center; }
.vis-wk-roll.f { background:#dbeafe; color:#1d4ed8; }   /* Fahrer */
.vis-wk-roll.b { background:#f1f5f9; color:#64748b; }   /* Beifahrer */
/* Fahrer, aber kein Fahrzeug erfasst → Zelle rot (light) markieren */
.vis-wk-cell.vis-wk-fehlt-fz { background:#fef2f2; color:#b91c1c; }
.vis-wk-nocoord { display:inline-flex; align-items:center; gap:4px; margin-top:3px; font-size:10.5px; font-weight:700;
  color:#b91c1c; background:#fee2e2; border:1px solid #fca5a5; border-radius:6px; padding:1px 6px; white-space:nowrap; }

/* ===== Reisekette-Übersicht (Heim/Auswärts je Tag, pro KW) ===== */
.vis-kette { border:1px solid var(--border); border-radius:10px; background:var(--surface);
  box-shadow:var(--shadow-sm); margin-bottom:14px; overflow:hidden; }
.vis-kette-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:9px 14px;
  font-size:12.5px; font-weight:600; background:var(--bg); border-bottom:1px solid var(--border); }
.vis-kleg { display:inline-flex; align-items:center; gap:6px; margin-left:auto; font-weight:400;
  font-size:11px; color:var(--text-muted); }
.vis-kette-strip { display:flex; flex-wrap:wrap; gap:12px; padding:12px 14px; }
/* Jeder Wochen-Block als sichtbares Tile — auch Wochen ohne Rapporte klar erkennbar. */
.vis-kweek { display:flex; flex-direction:column; gap:5px; background:var(--bg,#f4f6f8); border:1px solid var(--border,#e5e7eb); border-radius:8px; padding:7px 9px; }
.vis-kweek-lbl { font-size:10px; text-transform:uppercase; letter-spacing:.04em; color:var(--text-muted);
  font-weight:700; }
.vis-kweek-days { display:flex; align-items:center; gap:5px; }
.vis-kc { position:relative; display:inline-flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  width:46px; height:48px; border-radius:8px; border:2px solid transparent; cursor:pointer;
  font-variant-numeric:tabular-nums; transition:transform .08s; padding:0; }
.vis-kc:hover { transform:translateY(-1px); }
.vis-kc .vis-kc-wd { font-size:10px; opacity:.8; white-space:nowrap; }
.vis-kc.heim { background:#dcfce7; color:#15803d; }
.vis-kc.aus  { background:#eff6ff; color:#1d4ed8; }
.vis-kc.verdacht { border-color:#dc2626; box-shadow:0 0 0 1px #dc2626 inset; }
.vis-kc.korr { border-color:#7c3aed; }   /* bewusst übersteuert (Korrektur) */
.vis-kc.abs  { background:#fef9c3; color:#854d0e; }   /* Absenztag (lightyellow) */
.vis-kc.abs.offen { box-shadow:inset 0 0 0 2px #d97706; }        /* rapportiert, noch nicht visiert */
.vis-kc.abs.done  { box-shadow:inset 0 0 0 2px #16a34a; }        /* visiert: gelb bleibt (Absenz), grüner Rahmen */
/* Visiert-Status der Arbeitstage als Balken unter dem Datum (überschreibt weder Bruch-Rahmen noch aus/heim-Farbe) */
.vis-kc .vis-kvis { width:22px; height:4px; border-radius:2px; margin-top:1px; flex:0 0 auto; }
.vis-kc .vis-kvis.vis     { background:#16a34a; }
.vis-kc .vis-kvis.teilvis { background:linear-gradient(90deg,#16a34a 50%,#d97706 50%); }
.vis-kc .vis-kvis.offen   { background:#d97706; }
.vis-kc .vis-kvis.vbucht  { background:#64748b; }
.vis-abs-note { margin-left:auto; font-size:10.5px; color:#64748b; font-style:italic; }
.vis-abs-dim  { font-size:11px; color:#64748b; margin-left:6px; }
.vis-kc.feiertag { background:#fce7f3; color:#9d174d; }   /* Feiertag */
.vis-kc .vis-kfei { position:absolute; top:-1px; left:-1px; width:0; height:0; border-top:8px solid #db2777; border-right:8px solid transparent; }
.vis-kc.empty { background:var(--bg); color:var(--text-dim); border:1px dashed var(--border-strong);
  cursor:default; }                                    /* nicht rapportierter Tag (grau, leer) */
.vis-kc.empty:hover { transform:none; }
.vis-kc.mini { width:14px; height:14px; border-radius:4px; vertical-align:middle; padding:0; }
/* Reise-Badge auf dem Tag (Hin-/Heimreise) */
.vis-ktrip { position:absolute; top:-6px; width:18px; height:18px; border-radius:50%;
  display:inline-flex; align-items:center; justify-content:center; border:1.5px solid var(--surface); }
.vis-ktrip.hin  { left:-6px;  background:#fed7aa; color:#9a3412; }   /* Hinreise links */
.vis-ktrip.heim { right:-6px; background:#bbf7d0; color:#166534; }   /* Heimreise rechts */
.vis-ktrip.unsicher { border-style:dashed; opacity:.7; }            /* Übergang an Lücke = unsicher */
/* Lücken-Marker zwischen zwei Tagen (fehlende Werktage in der Kette) */
.vis-kgap { display:inline-flex; align-items:center; justify-content:center; color:#b45309;
  align-self:center; width:18px; }

/* ===== Aktionen im Tagesdetail ===== */
.vis-rd-actions { display:flex; flex-wrap:wrap; gap:8px; margin-top:10px; padding-top:10px;
  border-top:1px dashed var(--border-strong); }
.vis-rd-actions .vis-rap-btn { display:inline-flex; align-items:center; gap:5px; }
.vis-rd-actions .vis-danger { color:#b91c1c; border-color:#fecaca; }
.vis-rd-actions .vis-danger:hover { background:#fef2f2; }

/* ===== Editor-Overlay / Modal ===== */
.vis-overlay { position:fixed; inset:0; z-index:1000; background:rgba(15,23,42,.45);
  display:flex; align-items:flex-start; justify-content:center; padding:40px 16px; overflow:auto; }
.vis-modal { background:var(--surface); border-radius:12px; box-shadow:0 20px 60px rgba(0,0,0,.3);
  width:100%; max-width:560px; display:flex; flex-direction:column; max-height:calc(100vh - 80px); }
.vis-modal-wide { max-width:760px; }
.vis-modal-head { display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:14px 18px; border-bottom:1px solid var(--border); font-size:14px; }
.vis-modal-head .btn { padding:4px 8px; }
.vis-modal-body { padding:16px 18px; overflow:auto; }
.vis-modal-foot { display:flex; justify-content:flex-end; gap:10px; padding:14px 18px;
  border-top:1px solid var(--border); }
.vis-hint { font-size:12px; color:var(--text-muted); background:var(--bg); border-radius:8px;
  padding:9px 12px; margin-bottom:14px; }
.vis-fs { border:1px solid var(--border); border-radius:8px; padding:10px 14px 14px; margin-bottom:14px;
  display:grid; grid-template-columns:1fr 1fr; gap:10px 16px; }
.vis-fs legend { font-size:11px; text-transform:uppercase; letter-spacing:.04em; color:var(--text-muted);
  font-weight:700; padding:0 6px; }
.vis-f { display:flex; flex-direction:column; gap:4px; font-size:12px; }
.vis-f > span { color:var(--text-muted); font-size:11px; }
.vis-f input[type=text], .vis-f input[type=number], .vis-f input[type=time], .vis-f select {
  padding:7px 9px; border:1px solid var(--border-strong); border-radius:7px; font-size:13px;
  background:var(--surface); color:var(--text); }
.vis-f-cb { flex-direction:row; align-items:center; gap:8px; align-self:end; padding-bottom:7px; }
.vis-f-cb input { width:16px; height:16px; }
.vis-h-del td { color:var(--text-dim); text-decoration:line-through; }

/* ===== Reiseketten-verankerte Wochenansicht ===== */
.vis-kweek.active { background:var(--brand-soft,#e6f6fc); outline:2px solid var(--brand,#0099CC); outline-offset:1px; border-radius:6px; box-shadow:inset 0 0 0 1px var(--brand,#0099CC); }
.vis-kweek.active .vis-kweek-lbl { color:var(--brand-dark,#036); font-weight:700; }
.vis-kweek-lbl:hover { color:var(--brand-dark,#036); }
.vis-kweek.vis-kpause { background:transparent; border:1px dashed var(--border,#e5e7eb); }   /* ausserhalb Arbeitsblock */
.vis-kpause-lbl { color:var(--text-dim,#9ca3af); font-weight:400; cursor:default; }
.vis-kweek.vis-kabs { background:#fefce8; border-color:#fde68a; }   /* Absenz-Block (wochenweise) */
.vis-kabs-lbl { display:flex; align-items:center; gap:8px; color:#854d0e; font-weight:600; cursor:default; }
.vis-kabs-vbtn { font-size:10px; text-transform:none; letter-spacing:0; padding:2px 8px; border:1px solid #d97706; color:#92400e; background:#fff; border-radius:6px; cursor:pointer; font-weight:600; }
.vis-kabs-vbtn:hover { background:#d97706; color:#fff; }
.vis-wk-absrow > th.vis-wk-rowhead { color:#854d0e; font-weight:700; }
.vis-wk-abscell { background:#fef9c3; cursor:pointer; }
.vis-wk-dayhead.vis-wk-absday { background:#fefce8; }   /* Absenztag im Kopf gelb hervorheben */
.vis-wk-abs { font-size:11.5px; color:#854d0e; white-space:nowrap; }
.vis-wk-abs-offen { font-size:10px; color:#92400e; background:#fff; border:1px solid #d97706; border-radius:999px; padding:0 6px; }
/* Gedrehte Wochentabelle: Tage = Spalten, Felder + Lohnarten = Zeilen; scrollbar H+V */
.vis-wk-scroll { margin-top:12px; overflow:auto; max-height:64vh; border:0.5px solid var(--border,#e5e7eb); border-radius:8px; }
/* Feste Spaltenbreiten (table-layout:fixed) — lange Labels blasen die Spalte NICHT mehr auf.
   --vis-lblw = Feld- UND Total-Spalte (gleich breit), --vis-dayw = alle Tagesspalten. Beide user-ziehbar. */
/* Tabellenbreite EXAKT = Summe der Spalten → kein Auto-Verteilen von Restplatz,
   damit jede +/- Änderung (auch Tagesspalten) 1:1 wirkt. --vis-ndays = Anzahl Tage. */
.vis-wk-tbl { border-collapse:separate; border-spacing:0; font-size:12.5px; table-layout:fixed;
  width:calc(var(--vis-lblw,200px) + var(--vis-totw,72px) + var(--vis-ndays,5) * var(--vis-dayw,112px)); }
/* Spaltenbreiten über colgroup — in fixed-Layout zuverlässig honoriert (sticky-Kopf fror sonst die Tagesbreite ein) */
.vis-col-lbl { width:var(--vis-lblw,200px); }
.vis-col-tot { width:var(--vis-totw,72px); }
.vis-col-day { width:var(--vis-dayw,112px); }
.vis-wk-tbl th, .vis-wk-tbl td { border-bottom:0.5px solid var(--border,#eef0f2); border-right:0.5px solid var(--border,#eef0f2); padding:5px 9px; text-align:left; vertical-align:top; }
/* Feldspalte (links, fix) */
.vis-wk-rowhead { position:sticky; left:0; z-index:1; background:var(--surface,#fff); font-weight:500; color:var(--text,#111); width:var(--vis-lblw,200px); white-space:normal; overflow-wrap:anywhere; }
/* Wochentotal-Spalte: eigene Breite (--vis-totw), angepinnt hinter der Feldspalte, Zahlen rechtsbündig */
.vis-wk-total { position:sticky; left:var(--vis-lblw,200px); z-index:1; background:var(--surface,#fff); width:var(--vis-totw,72px); font-variant-numeric:tabular-nums; border-right:0.5px solid var(--border-strong,#cbd5e1); }
.vis-wk-tbl th.vis-wk-total, .vis-wk-tbl td.vis-wk-total { text-align:right; }   /* Total-Spalte durchgehend rechtsbündig */
.vis-wk-tbl thead th { position:sticky; top:0; z-index:2; background:var(--bg,#f7f8fa); font-weight:600; }
/* Ecken (Feld/Total-Titel) müssen beim H-Scroll ÜBER den Tages-Titeln bleiben.
   Höhere Spezifität nötig, sonst gewinnt '.vis-wk-tbl thead th { z-index:2 }'. */
.vis-wk-tbl thead th.vis-wk-corner,
.vis-wk-tbl thead th.vis-wk-corner2 { z-index:5; background:var(--bg,#f7f8fa); }
/* Toolbar-Stepper für Spaltenbreiten (zuverlässig, unabhängig vom Ziehgriff) */
.vis-wstep { display:inline-flex; align-items:center; gap:4px; margin-right:10px; font-size:12px; color:var(--text-muted,#6b7280); }
.vis-wstep .btn.wstep { padding:2px 0; width:28px; min-width:28px; font-size:15px; line-height:1; text-align:center; justify-content:center; }
/* Spaltenbreiten-Ziehgriff (rechte Kante des jeweiligen Kopfes) */
.vis-wk-rs { position:absolute; top:0; right:0; bottom:0; width:14px; cursor:col-resize; z-index:6; }
.vis-wk-rs:hover { background:var(--brand,#0099CC); opacity:.35; }
.vis-wk-dayhead { position:sticky; }   /* Anker für den Griff, damit er in der eigenen Zelle bleibt */
/* Tagesspalten alle gleich breit */
.vis-wk-dayhead, .vis-wk-cell { width:var(--vis-dayw,112px); }
.vis-wk-dayhead { white-space:normal; }
.vis-wk-cell { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }   /* 1 Zeile pro Feld, Rest … */
.vis-wk-dayhead { text-align:center; }
.vis-wk-dayhead.leer { color:var(--text-dim,#9ca3af); background:var(--surface,#fff); }
.vis-wk-dtop { margin-bottom:4px; }
.vis-wk-wd { font-weight:600; } .vis-wk-dm { color:var(--text-muted,#6b7280); font-weight:400; }
.vis-wk-cell { cursor:pointer; }
.vis-wk-cell.num { text-align:center; font-variant-numeric:tabular-nums; }   /* Spesen ✓/✗ zentriert */
.vis-wk-cell.src-eng { background:#eff6ff; }                                 /* LA-Wert aus Engine (native) */
.vis-wk-cell.src-eng:hover:not(.leer) { background:#e3eefc; }
.vis-wk-hint { font-weight:400; font-size:11px; color:var(--text-muted,#6b7280); }
.vis-wk-cell.leer { cursor:default; color:var(--text-dim,#cbd5e1); background:var(--bg,#fafbfc); text-align:center; }
.vis-wk-cell:hover:not(.leer) { background:var(--bg,#f2f6f9); }
.vis-wk-larow th { font-weight:400; color:var(--text-muted,#374151); }
.vis-wk-larow td { text-align:right; font-variant-numeric:tabular-nums; }   /* Lohnart-Zahlen rechtsbündig → fluchten */
.vis-wk-sep th, .vis-wk-sep td { border-top:2px solid var(--border-strong,#cbd5e1); background:var(--bg,#f7f8fa); }
.vis-wk-sep th { font-weight:600; }
.vis-wk-obj { line-height:1.35; } .vis-wk-obj + .vis-wk-obj { margin-top:2px; }
.vis-wk-obj > div { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }   /* Ort/Bez/Nr je 1 Zeile, gekürzt */
.vis-wk-objnr { color:var(--text-muted,#6b7280); font-size:11px; }
.vis-wk-azk { line-height:1.3; } .vis-wk-azk + .vis-wk-azk { margin-top:2px; padding-top:2px; border-top:1px dashed var(--border,#dbe2ea); }
.vis-wk-azk-int { display:inline-block; font-size:10px; font-weight:600; color:var(--brand,#0099CC); background:var(--brand-soft,#e6f6fc); border-radius:5px; padding:0 5px; margin-left:4px; vertical-align:middle; }
.vis-wk-azk-win { color:var(--text-muted,#6b7280); font-size:11px; font-variant-numeric:tabular-nums; }
.vis-wk-lanr { font-family:ui-monospace,Menlo,monospace; color:var(--text-muted,#6b7280); font-size:11px; margin-right:5px; }
.vis-wk-vbtn { font-size:11px; padding:2px 10px; border:1px solid var(--brand,#0099CC); color:var(--brand,#0099CC); background:transparent; border-radius:6px; cursor:pointer; font-weight:600; }
.vis-wk-vbtn:hover { background:var(--brand,#0099CC); color:#fff; }
.vis-wk-vbtn.done { border-color:#16a34a; color:#15803d; background:var(--status-visiert,#dcfce7); }
/* abgerechnet = Monat abgeschlossen (kein Button, eigener Zustand nach visiert) */
.vis-wk-vbtn.verbucht, .vis-wk-vbtn.abgerechnet { border-color:#7c3aed; color:#6d28d9; background:#ede9fe; cursor:default; font-weight:700; }
.vis-wk-vbtn.verbucht:hover, .vis-wk-vbtn.abgerechnet:hover { background:#ede9fe; color:#6d28d9; }
/* Visierer-Kürzel (Visum) neben der visiert/verbucht-Pille */
.vis-wk-viser { display:inline-block; margin-top:3px; padding:0 6px; border-radius:9px;
  font-size:10px; font-weight:700; letter-spacing:.02em; text-transform:uppercase;
  background:#dcfce7; color:#166534; border:1px solid #bbf7d0; }
/* Woche/Block vor-zurück-Navigation — feste Gruppe links vom Titel */
.vis-wk-titlerow { display:flex; align-items:center; gap:12px; }
.vis-wk-navrow { display:inline-flex; gap:4px; flex:0 0 auto; }
.vis-wk-titletxt { min-width:0; }
.vis-wk-nav { border:1px solid var(--border,#dbe2ea); background:#fff; color:var(--brand,#0099CC); width:28px; height:28px; border-radius:7px; cursor:pointer; font-size:18px; line-height:1; vertical-align:middle; padding:0; }
.vis-wk-nav:hover { background:var(--brand,#0099CC); color:#fff; border-color:var(--brand,#0099CC); }
/* Freigaben-Einstieg im Spaltenkopf + Popover (fixed, per JS positioniert) */
.vis-wk-frei-btn { font-size:11px; padding:2px 8px; margin-bottom:4px; border:1px solid #f59e0b; color:#b45309; background:#fff7ed; border-radius:6px; cursor:pointer; font-weight:700; display:block; width:100%; }
.vis-wk-frei-btn:hover { background:#fde68a; }
.vis-wk-frei-pop { position:fixed; z-index:1200; width:280px; max-width:92vw; background:#fff; border:1px solid var(--border,#dbe2ea); border-radius:10px; box-shadow:0 12px 30px rgba(15,23,42,.18); padding:8px; text-align:left; white-space:normal; font-weight:400; }
.vis-wk-frei-hd { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:#94a3b8; margin:2px 4px 6px; }
.vis-wk-frei-it { padding:6px 4px; border-top:1px solid #f1f5f9; }
.vis-wk-frei-lbl { font-size:12px; color:#0f172a; display:flex; flex-direction:column; line-height:1.35; }
.vis-wk-frei-lbl span { color:#64748b; }
.vis-wk-frei-btns { display:flex; gap:6px; margin-top:4px; }
.vis-wk-frei-btns button { flex:1; font-size:11px; padding:3px 6px; border-radius:6px; border:1px solid #dbe2ea; background:#fff; cursor:pointer; color:#475569; }
.vis-wk-frei-ja.on { background:#16a34a; border-color:#16a34a; color:#fff; }
.vis-wk-frei-nein.on { background:#dc2626; border-color:#dc2626; color:#fff; }
.vis-wk-frei-foot { display:flex; gap:6px; margin-top:8px; }
.vis-wk-frei-foot .btn { flex:1; font-size:11px; padding:4px 6px; }
/* Folgetag-Gate: gesperrter Visieren-Button sichtbar deaktiviert (Tooltip erklärt warum) */
.vis-wk-vbtn:disabled:not(.done) { border-color:#cbd5e1; color:#94a3b8; background:#f1f5f9; cursor:not-allowed; }
.vis-wk-vbtn:disabled:not(.done):hover { background:#f1f5f9; color:#94a3b8; }
.vis-wk-nostat { font-size:11px; color:var(--text-muted,#9ca3af); }
/* Header-Aktion: Hinweis statt Block-Button, wenn nichts (bzw. kein Block) zu visieren ist */
.vis-wk-hint { display:inline-flex; align-items:center; min-height:34px; padding:0 10px; font-size:12.5px; color:var(--text-muted,#6b7280); font-style:italic; }
.vis-wk-more { font-size:11px; color:var(--brand-dark,#036); font-weight:600; }
.vis-wk-aus { color:#b45309; font-weight:500; } .vis-wk-heim { color:#15803d; font-weight:500; }
.vis-wk-warn { color:#b91c1c; } .vis-wk-dash { color:var(--text-dim,#cbd5e1); }
.vis-yes { color:#15803d; font-weight:600; } .vis-no { color:var(--text-dim,#cbd5e1); }
.vis-calc { color:var(--text-muted,#94a3b8); font-size:10px; vertical-align:middle; }   /* berechnet (Calc) */

/* ===== Status/Footer ===== */
.vis-status { padding:24px; color:var(--text-muted); }
.vis-empty { padding:24px; color:var(--text-muted); }
.vis-footer { margin-top:12px; color:var(--text-muted); font-size:12px; display:flex; align-items:center; gap:8px; }

/* ===== "Wieso ist das so?" — LLM-Erklärungs-Popover (Stufe 1) ===== */
.vis-lacmp td.la-explain, .vis-la td.la-explain, .vis-wk-cell.la-explain { cursor:pointer; }
.vis-lacmp td.la-explain { text-decoration:underline dotted; text-underline-offset:2px; }
.vis-lacmp td.la-explain:hover, .vis-la td.la-explain:hover, .vis-wk-cell.la-explain:hover { color:#0099CC; background:rgba(0,153,204,0.08); }

.vis-explain-pop { position:fixed; inset:0; z-index:1000; display:flex; align-items:center; justify-content:center; }
.vis-explain-pop.hidden { display:none; }
.vis-explain-pop .vxp-backdrop { position:absolute; inset:0; background:rgba(0,0,0,0.32); }
.vis-explain-pop .vxp-card { position:relative; z-index:1; width:min(520px,92vw); max-height:80vh; overflow:auto;
  background:var(--surface); border:1px solid var(--border-strong); border-radius:var(--radius);
  box-shadow:var(--shadow-lg, 0 10px 40px rgba(0,0,0,0.25)); }
.vis-explain-pop .vxp-head { display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:12px 16px; border-bottom:1px solid var(--border); background:var(--bg);
  border-top-left-radius:var(--radius); border-top-right-radius:var(--radius); }
.vis-explain-pop .vxp-title { font-weight:600; color:var(--text); font-size:14px; }
.vis-explain-pop .vxp-x { border:none; background:none; font-size:20px; line-height:1; cursor:pointer;
  color:var(--text-muted); padding:0 4px; }
.vis-explain-pop .vxp-x:hover { color:var(--text); }
.vis-explain-pop .vxp-body { padding:16px; }
.vis-explain-pop .vxp-load { color:var(--text-muted); font-style:italic; }
.vis-explain-pop .vxp-val { font-size:22px; font-weight:700; color:#0099CC; margin-bottom:8px;
  font-variant-numeric:tabular-nums; }
.vis-explain-pop .vxp-text { color:var(--text); line-height:1.5; white-space:pre-wrap; }
.vis-explain-pop .vxp-rawpre { margin-top:12px; padding:10px; background:var(--bg); border:1px solid var(--border);
  border-radius:8px; font-size:12px; overflow:auto; white-space:pre; color:var(--text-muted); }
.vis-explain-pop .vxp-rawpre.hidden { display:none; }
.vis-explain-pop .vxp-foot { padding:8px 16px 14px; }
.vis-explain-pop .vxp-raw { border:1px solid var(--border-strong); background:var(--surface); color:var(--text-muted);
  border-radius:8px; padding:5px 10px; font-size:12px; cursor:pointer; }
.vis-explain-pop .vxp-raw:hover { color:var(--text); border-color:#0099CC; }
