/* ════════════════════════════════════════════════════════════════════════════
   VICore · HAUPT-STYLESHEET
   ────────────────────────────────────────────────────────────────────────────
   KONSOLIDIERUNG 16.08.2026 — der frühere 105-Token-Block an dieser Stelle ist
   ENTFERNT. Er bezeichnete sich selbst als „die EINZIGE Quelle für Marken-,
   Neutral-, Status- und Energiefarben, Schrift, Radius und Schatten"; tatsächlich
   definierte auch public/css/design-system.css 65 dieser Tokens, teils mit anderen
   Werten (--radius-lg 10px hier gegen 12px dort). Welcher Wert galt, entschied
   allein die Ladereihenfolge — also der Zufall.

   AB JETZT: Design-Tokens ausschließlich in public/css/design-system.css.
   Die 40 Tokens, die es nur hier gab (Energie-Fachfarben, deutschsprachige
   Legacy-Aliase wie --gruen/--creme/--white/--border), sind dorthin umgezogen.
   Diese Datei LIEST Tokens und definiert Layout und Komponenten — sie setzt keine.
   Guardrail: npm run check:design
   ──────────────────────────────────────────────────────────────────────────── */

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html {
  height: 100%;
}

body {
  font-family: var(--font-family-body);
  background: var(--bg-primary);
  color: var(--text-primary);
  height: 100vh;
  display: flex;
  font-size: var(--font-size-lg);
  margin: 0;
  padding: 0;
}

/* ── SIDEBAR ─────────────────────────────────────────────────────────────── */

/* ═══════════════════════════════════════════════════════════════════════════
   SIDEBAR · VICore Hauptnavigation — Design-Spezifikation v0.2.0
   Ruhige, hochwertige Navigation. Light (primär) + Dark via data-theme.
   Tokens lokal an .sidebar; Komponenten nutzen NUR Tokens (keine festen Hex).
   ═══════════════════════════════════════════════════════════════════════════ */
.sidebar {
  /* ── Farb-Tokens · Light (primär) ── */
  --sb-bg: var(--gray-50);       --sb-border: var(--gray-300);    --sb-text: var(--gray-900);
  --sb-muted: var(--gray-500);    --sb-faint: var(--gray-400);     --sb-hover: var(--gray-100);
  --sb-active-bg: var(--brand-bg-soft); --sb-active-text: var(--brand-primary-hover); --sb-accent: var(--brand-primary);
  --sb-rail: var(--gray-300);     --sb-on-accent: var(--color-surface);

  width: var(--sidebar-width);  /* 272px – Token (design-system.css), Single Source */
  height: 100vh;
  background: var(--sb-bg);
  color: var(--sb-text);
  font-family: var(--vi-font-ui);
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  border-right: 1px solid var(--sb-border);
  z-index: var(--z-sticky);
  position: relative;
  overflow: hidden;  /* Contain scrollbar to .nav only */
  transition: width 220ms cubic-bezier(.4,0,.2,1),
              background-color 250ms ease, border-color 250ms ease;
}
.sidebar[data-theme="dark"] {
  /* Mandanten-CI: dunkle Seitenleiste nimmt den Markenton auf (color-mix tönt eine dunkle
     Basis Richtung --brand-primary; bleibt immer dunkel & lesbar, egal welche Markenfarbe). */
  --sb-bg: color-mix(in srgb, var(--brand-primary) 15%, #0B100C);
  --sb-border: color-mix(in srgb, var(--brand-primary) 26%, #11170F);
  --sb-text: #DCE4DE;
  --sb-muted: #8A968D;    --sb-faint: #5E6B62;     --sb-hover: color-mix(in srgb, var(--brand-primary) 22%, #11170F);
  --sb-active-bg: color-mix(in srgb, var(--brand-primary) 42%, #0B100C); --sb-active-text: #F2F7F3; --sb-accent: color-mix(in srgb, var(--brand-primary) 62%, var(--color-surface));
  --sb-rail: color-mix(in srgb, var(--brand-primary) 24%, #1A221C);     --sb-on-accent: #0B1410;
}
body.vi-resizing, body.vi-resizing * { user-select: none !important; }

/* Dünner Scrollbalken — nur für .nav (Header/Suche/Footer bleiben fix) */
/* Die Modulliste zeigt KEINEN Balken mehr (nav-sidebar.css erklärt warum) —
   diese Alt-Regel bleibt nur als Rückfallebene für andere .nav-Container. */
.sidebar .nav::-webkit-scrollbar { width: 0; }
.nav::-webkit-scrollbar { width: 7px; }
.nav::-webkit-scrollbar-track { background: transparent; }
.nav::-webkit-scrollbar-thumb {
  background: var(--sb-border);
  border-radius: var(--radius-pill);
  border: 2px solid transparent;
  background-clip: content-box;
  transition: background .2s;
}
.nav::-webkit-scrollbar-thumb:hover { background: var(--sb-faint); background-clip: content-box; }

/* ── Header (Marke + Einklapp-Button) — fix ── */
.sidebar-head {
  flex-shrink: 0; display: flex; align-items: center; justify-content: space-between;
  gap: 8px; padding: 18px 16px 14px; box-sizing: border-box;
}
.logo { padding: 0; border: 0; margin: 0; min-width: 0; flex: 0 1 auto; }
.logo-lockup { display: flex; align-items: center; gap: 10px; margin: 0; }
.logo-mark { flex-shrink: 0; display: block; width: 28px; height: 24px; border-radius: var(--radius-sm); }
.logo-company {
  font-family: var(--vi-font-display); font-size: var(--text-xl); font-weight: 600;
  letter-spacing: -.02em; color: var(--sb-text); line-height: 1; white-space: nowrap;
}
.logo-company .lc-accent { color: var(--sb-accent); }
.sidebar-collapse-btn {
  flex-shrink: 0; width: 30px; height: 30px; border-radius: var(--radius-md); border: 0;
  background: transparent; color: var(--sb-muted); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background 140ms ease, color 140ms ease;
}
.sidebar-collapse-btn:hover { background: var(--sb-hover); color: var(--sb-text); }
.sidebar-collapse-btn svg { width: 18px; height: 18px; }

/* ── Suche — fix ── */
.sb-search-wrap { flex-shrink: 0; padding: 0 14px 8px; box-sizing: border-box; }
/* Seitenleisten-Suche: bewusst HELLE Such-Oberfläche (weißes Feld + dunkler Text + weiße Ergebnisliste),
   unabhängig vom Sidebar-Theme — damit der Text immer lesbar ist und die Ergebnisliste weiß bleibt. */
.sb-search {
  display: flex; align-items: center; gap: 9px; width: 100%; box-sizing: border-box;
  min-height: 40px; padding: 9px 11px; border-radius: var(--radius-lg);
  background: var(--color-surface); border: 1px solid var(--gray-300); cursor: text;
  color: var(--gray-500); font-family: var(--vi-font-ui); font-size: var(--text-sm); text-align: left;
  transition: border-color 140ms ease, box-shadow 140ms ease;
}
.sb-search:hover { border-color: var(--gray-400); }
.sb-search-ic { width: 17px; height: 17px; flex-shrink: 0; color: #9ca3af; }
.sb-search-kbd {
  flex-shrink: 0; font-family: var(--vi-font-display); font-size: var(--text-xxs); font-weight: 600;
  color: var(--gray-500); background: #F3F1EA; border: 1px solid var(--gray-300); border-radius: var(--radius-sm); padding: 1px 6px;
}

.nav {
  flex: 1 1 auto; min-height: 0;   /* min-height:0 → Footer wird NIE abgeschnitten */
  overflow-y: auto; overflow-x: hidden;
  padding: 6px 12px 12px; box-sizing: border-box;
  scrollbar-width: thin;
  scrollbar-color: var(--sb-border) transparent;
}

/* ── Abschnittslabel (nicht klickbar · bündelt Gruppen) ── */
.nav-grouplabel {
  font-family: var(--vi-font-display); font-size: var(--text-xxs); font-weight: 600;
  letter-spacing: .1em; text-transform: uppercase; color: var(--sb-faint);
  padding: 14px 12px 6px; user-select: none; white-space: nowrap; overflow: hidden;
  display: flex; align-items: center;
}
.nav-start .nav-start-tile.active { background: var(--sb-active-bg); color: var(--sb-active-text); font-weight: 600; box-shadow: none; border-color: transparent; }
.nav-start .nav-start-tile.active .nst-ic { color: var(--sb-active-text); background: transparent; }
.nav-start .nav-start-tile.active::before {
  content: ''; position: absolute; left: -12px; top: 50%; transform: translateY(-50%);
  width: 3px; height: 20px; border-radius: 0 3px 3px 0; background: var(--sb-accent);
}

/* ── Gruppen (Sektion) ── */
.nav-section { margin: 0; overflow: hidden; }
.nav-section + .nav-section { border-top: 0; }

/* Gruppen-Kopf */
.nav-label {
  display: flex; align-items: center; gap: 11px; position: relative;
  padding: 9px 12px; border-radius: var(--radius-lg); min-height: 40px; box-sizing: border-box;
  font-family: var(--vi-font-ui); font-size: var(--text-md); font-weight: 500;
  letter-spacing: 0; text-transform: none; color: var(--sb-text);
  cursor: pointer; user-select: none; border-left: 0; white-space: nowrap; overflow: hidden;
  transition: background 140ms ease, color 140ms ease;
}
.nav-label:hover { background: var(--sb-hover); }
.nav-label:hover .nav-label-icon { color: var(--sb-text); }
.nav-label-text { flex: 1; overflow: hidden; text-overflow: ellipsis; }
.nav-label::after {
  content: ''; width: 16px; height: 16px; margin-left: 6px; flex-shrink: 0;
  background-color: var(--sb-faint);
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>") center / 16px no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>") center / 16px no-repeat;
  transition: transform 200ms cubic-bezier(.4,0,.2,1);
}
.nav-section.collapsed .nav-label::after { transform: rotate(-90deg); }
/* Gruppe enthält den aktiven Eintrag → Kopf hervorgehoben, OHNE Aktiv-Fläche */
.nav-section.has-active-child > .nav-label { color: var(--sb-active-text); font-weight: 600; background: transparent; }
.nav-section.has-active-child > .nav-label:hover { background: var(--sb-hover); }
.nav-section.has-active-child > .nav-label .nav-label-icon { color: var(--sb-active-text); }

/* ── Untereinträge (mit Rail-Hilfslinie) ── */
.nav-section .nav-item {
  display: flex; align-items: center; gap: 10px; position: relative;
  padding: 9px 11px 9px 38px; border-radius: var(--radius-md); box-sizing: border-box;
  /* KEIN min-height: würde beim Auf-/Zuklappen die max-height-Animation aushebeln (min gewinnt).
     Höhe kommt aus Padding + Inhalt (~36px); Touch-Ziel 44px setzt mobile.css für Touch-Viewports. */
  font-family: var(--vi-font-ui); font-size: var(--text-sm); font-weight: 500; letter-spacing: 0;
  color: var(--sb-muted); cursor: pointer; user-select: none; border-left: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  transition: background 140ms ease, color 140ms ease, max-height 240ms cubic-bezier(.4,0,.2,1), opacity 160ms ease, padding 200ms ease;
}
.nav-section .nav-item::before { content: ''; position: absolute; left: 21px; top: 0; bottom: 0; width: 1.5px; background: var(--sb-rail); }
.nav-section .nav-item:hover { background: var(--sb-hover); color: var(--sb-text); }
.nav-section .nav-item .nav-icon { width: 17px; height: 17px; flex-shrink: 0; color: var(--sb-faint); opacity: 1; }
.nav-section .nav-item:hover .nav-icon { color: var(--sb-muted); }
.nav-section .nav-item.active { background: var(--sb-active-bg); color: var(--sb-active-text); font-weight: 600; }
.nav-section .nav-item.active .nav-icon { color: var(--sb-active-text); }
.nav-section .nav-item.active::before { background: transparent; }
.nav-section .nav-item.active::after {
  content: ''; position: absolute; left: 21px; top: 50%; transform: translate(-50%,-50%);
  width: 6px; height: 6px; border-radius: 50%; background: var(--sb-accent);
  box-shadow: 0 0 0 2.5px var(--sb-bg);
}
.nav-text { flex: 1; overflow: hidden; text-overflow: ellipsis; }
.nav-icon { flex-shrink: 0; }

/* Auf-/Zuklappen der Untereinträge: eingeklappt komplett auf Höhe 0 (min-height MUSS 0 sein,
   sonst gewinnt min-height über max-height und die Items belegen weiter Platz → kein Reflow). */
.nav-section.collapsed > .nav-item {
  max-height: 0; min-height: 0; opacity: 0; pointer-events: none;
  padding-top: 0; padding-bottom: 0; margin: 0; border: 0; overflow: hidden;
}
.nav-section:not(.collapsed) > .nav-item { max-height: 48px; opacity: 1; pointer-events: auto; }

/* ── Footer (fix unten · obere Trennlinie) ── */
.sidebar-footer {
  flex-shrink: 0; margin-top: auto; background: var(--sb-bg);
  border-top: 1px solid var(--sb-border); padding: 12px 14px; box-sizing: border-box;
  display: flex; flex-direction: column; gap: 10px;
}

/* ── Suche: echtes Eingabefeld + Ergebnis-Dropdown (gleiche Engine wie Header) ── */
/* Höhere Spezifität als die globalen input / input:focus-Resets (design-system.css):
   dunkler, lesbarer Text auf weiß; den Fokus zeichnet der Container (.sb-search). */
.sb-search .sb-search-input,
.sb-search .sb-search-input:focus {
  flex: 1; min-width: 0; height: auto; border: 0; outline: none; background: transparent; box-shadow: none;
  font-family: var(--vi-font-ui); font-size: var(--text-sm); color: #1f2937;
  padding: 0; margin: 0; -webkit-appearance: none; appearance: none;
}
.sb-search .sb-search-input::placeholder { color: #9ca3af; opacity: 1; }
.sb-search .sb-search-input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
.sb-search:focus-within { border-color: var(--gruen, #147352); box-shadow: 0 0 0 3px rgba(19,109,57,.14); }
/* Ergebnis-Dropdown: weißer Background; Treffer dunkel auf weiß (Farben aus den Basis-.search-*-Regeln) */
.sb-search-dropdown {
  position: fixed; z-index: 1200;
  background: var(--color-surface); border: 1px solid var(--gray-300); border-radius: var(--radius-lg);
  box-shadow: 0 16px 48px rgba(0,0,0,.18);
  max-height: min(68vh, 540px); overflow-y: auto; padding: 4px 0;
  scrollbar-width: thin; scrollbar-color: #D9D4C8 transparent;
}
.sb-search-dropdown::-webkit-scrollbar { width: 10px; }
.sb-search-dropdown::-webkit-scrollbar-thumb { background: #D9D4C8; border-radius: var(--radius-sm); border: 3px solid transparent; background-clip: content-box; }
.sb-search-dropdown::-webkit-scrollbar-thumb:hover { background: var(--gray-400); background-clip: content-box; }
#sb-search-dropdown .search-dropdown-content { padding: 4px 0; }
#sb-search-dropdown .search-result { margin: 1px 6px; padding: 7px 10px; gap: 9px; border-radius: var(--radius-md); }
/* .sf-theme-toggle (Hell/Dunkel-Umschalter) entfernt — Sidebar ist dauerhaft dunkel (Forest). */

/* ── Badges & „geplant"-Kennzeichnung ── */
.nav-badge {
  margin-left: auto; min-width: 18px; height: 18px; padding: 0 5px; border-radius: var(--radius-md);
  display: inline-flex; align-items: center; justify-content: center; line-height: 1;
  font-family: var(--vi-font-display); font-size: var(--text-xxs); font-weight: 600;
  background: var(--sb-accent); color: var(--sb-on-accent);
}
.nav-badge-warn  { background: #C58A1A; color: var(--color-surface); }
.nav-badge-error { background: #B23A2C; color: var(--color-surface); }
.nav-item-disabled { color: var(--sb-faint); cursor: default; opacity: 1; pointer-events: none; }
.nav-item-disabled:hover { background: transparent; color: var(--sb-faint); }
.nav-item-disabled .nav-icon { color: var(--sb-faint); opacity: 1; }
.nav-item-planned, .nav-badge-mini, .nav-item-soon {
  margin-left: auto; flex-shrink: 0; font-family: var(--vi-font-display); font-size: var(--text-xxs); font-weight: 600;
  letter-spacing: 0; text-transform: none; color: var(--sb-faint); background: transparent;
  border: 1px solid var(--sb-border); border-radius: var(--radius-sm); padding: 1px 6px; font-style: normal; white-space: nowrap;
}

/* ── „Geplante Erweiterungen" = Roadmap, zurückgenommen ── */
.nav-section-planned { margin-top: 6px; }
.nav-section-planned .nav-label { color: var(--sb-muted); }
.nav-section-planned .nav-item { color: var(--sb-faint); cursor: default; }
/* „Geplant"-Einträge sind (noch) nicht klickbar → kein Klick-/Hover-Affordance, das Interaktivität vortäuscht */
.nav-section-planned .nav-item:hover { background: transparent; color: var(--sb-faint); }
.nav-item-secondary { font-style: normal; }

/* Resize-Griff bei fixen Breiten deaktiviert (Spez: 272/76 fix) */
.sidebar-resize { display: none; }

/* ═══ Eingeklappt (76 px · nur Icons) — nur Desktop; Mobile bleibt Drawer ═══ */
@media (min-width: 1024px) {
  .sidebar.is-collapsed { width: 76px; }
  .sidebar.is-collapsed .sidebar-head { justify-content: center; padding: 18px 0 14px; }
  .sidebar.is-collapsed .logo-company,
  .sidebar.is-collapsed .sidebar-collapse-btn,
  .sidebar.is-collapsed .sb-search-input,
  .sidebar.is-collapsed .sb-search-kbd,
  .sidebar.is-collapsed .nst-title,
  .sidebar.is-collapsed .nav-label-text,
  .sidebar.is-collapsed .nav-label::after,
  .sidebar.is-collapsed .nav-badge,
  .sidebar.is-collapsed .nav-item-planned,
  .sidebar.is-collapsed .nav-badge-mini,
  .sidebar.is-collapsed .nav-section-planned,
  .sidebar.is-collapsed .sf-meta-wrap,
  .sidebar.is-collapsed .vi-user-meta,
  .sidebar.is-collapsed .vi-user-logout { display: none; }

  .sidebar.is-collapsed .nav { padding: 6px 0 12px; }
  .sidebar.is-collapsed .sb-search-wrap { padding: 0 0 8px; display: flex; justify-content: center; }
  .sidebar.is-collapsed .sb-search { width: 44px; height: 44px; padding: 0; justify-content: center; gap: 0; }
  .sidebar.is-collapsed .nav-start { display: flex; justify-content: center; }
  .sidebar.is-collapsed .nav-start .nav-start-tile,
  .sidebar.is-collapsed .nav-label { width: 48px; height: 44px; min-height: 44px; padding: 0; gap: 0; justify-content: center; margin: 0 auto; border-radius: var(--radius-lg); }
  .sidebar.is-collapsed .nav-start .nav-start-tile.active::before { left: -14px; }
  .sidebar.is-collapsed .nav-grouplabel { padding: 10px 0; justify-content: center; font-size: 0; letter-spacing: 0; }
  .sidebar.is-collapsed .nav-grouplabel::after { content: ''; width: 36px; height: 1px; background: var(--sb-border); }
  /* Untereinträge verbergen — die Gruppe wird durch ihr Icon repräsentiert */
  .sidebar.is-collapsed .nav-section > .nav-item { display: none; }
  /* Gruppe mit aktivem Kind → kleiner Akzentpunkt oben rechts am Icon */
  .sidebar.is-collapsed .nav-section.has-active-child > .nav-label::before {
    content: ''; position: absolute; top: 7px; right: 13px; width: 6px; height: 6px; border-radius: 50%; background: var(--sb-accent);
  }
  .sidebar.is-collapsed .sidebar-footer { padding: 12px 0; align-items: center; }
  .sidebar.is-collapsed .vi-user-chip { padding: 0; justify-content: center; gap: 0; }
}

/* ── MAIN LAYOUT ──────────────────────────────────────────────────────────── */

.main { flex: 1; display: flex; flex-direction: column; min-height: 100vh; overflow: hidden; }

.topbar {
  background: var(--white);
  border-bottom: 1px solid var(--border);
  padding: 0 24px 0 32px;
  height: var(--topbar-height);  /* 58px – Token (design-system.css), Single Source */
  display: flex; align-items: center; gap: 16px; justify-content: space-between;
  flex-shrink: 0;
  position: sticky; top: 0; z-index: 60;   /* über Seiteninhalt (z. B. Filterleiste z-index:40), unter Modals (100) → „+ Neu"-Menü liegt nie hinter dem Inhalt */
  box-shadow: 0 1px 0 var(--border), 0 2px 8px rgba(0,0,0,.03);
}

.breadcrumb { font-size: var(--font-size-sm); letter-spacing: .04em; flex-shrink: 0; display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 40ch; overflow: hidden; white-space: nowrap; }
/* Bereichsstufe OHNE erreichbares Ziel (Verwaltungs-Einzelseiten, gesperrtes Modul).
   Hat die Stufe ein Ziel, rendert _viBreadcrumbSet stattdessen .breadcrumb-link —
   seit dem 05.09.2026 führt die Modulstufe dorthin, wohin auch die Sidebar führt. */
.breadcrumb-area { color: var(--muted); font-weight: 500; cursor: default; }
.breadcrumb-sep  { color: var(--subtle); opacity: .7; flex-shrink: 0; }
.breadcrumb-current { color: var(--text-primary); font-weight: 600; overflow: hidden; text-overflow: ellipsis; }   /* aktuelle Ansicht */
/* echter Link mit Zielseite — dauerhaft dezent unterstrichen, also unmissverständlich klickbar */
.breadcrumb .breadcrumb-link { color: var(--gruen); font-weight: 600; cursor: pointer; border-radius: 4px;
  text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; text-decoration-color: rgba(19,109,57,.45); }
.breadcrumb .breadcrumb-link:hover { color: var(--gruen-mid); text-decoration-color: var(--gruen-mid); }
.breadcrumb .breadcrumb-link:focus-visible { outline: 2px solid var(--gruen-mid); outline-offset: 2px; }

/* Global search */
.topbar-search {
  flex: 1; max-width: 420px; min-width: 160px;
  display: flex; align-items: center; gap: 8px;
  background: var(--bg-primary); border: 1.5px solid var(--border); border-radius: var(--radius-md);
  padding: 0 12px; height: 36px; transition: border-color .15s, box-shadow .15s;
}
.topbar-search:focus-within {
  border-color: var(--gruen-mid);
  box-shadow: 0 0 0 3px rgba(61,138,94,.1);
  background: var(--white);
}
.topbar-search-icon { width: 14px; height: 14px; color: var(--muted); flex-shrink: 0; opacity: .6; }
.topbar-search-input {
  flex: 1; border: none; background: transparent; outline: none;
  font-family: var(--font-family-body); font-size: var(--text-xs);
  color: var(--text-primary); cursor: pointer;
}
.topbar-search-input::placeholder { color: var(--subtle); }
.topbar-search-kbd {
  font-size: 9px; color: var(--subtle); background: var(--creme-dunkel);
  border: 1px solid var(--border); border-radius: 4px; padding: 1px 6px;
  white-space: nowrap; flex-shrink: 0; font-family: var(--font-family-body);
}

/* Search Dropdown */
.topbar-search { position: relative; }
.topbar-search-dropdown {
  position: absolute; top: calc(100% + 8px); left: 0; right: 0;
  background: var(--white); border: 1.5px solid var(--border); border-radius: var(--radius-lg);
  box-shadow: 0 12px 40px rgba(0,0,0,.15); z-index: 300;
  max-height: 500px; overflow-y: auto;
  min-width: 350px;
}

.search-dropdown-content {
  padding: 8px 0;
}

.search-group {
  padding: 6px 0;
}

.search-group:not(:last-child) {
  border-bottom: 1px solid var(--border);
}

.search-group-title {
  font-size: var(--font-size-xs); font-weight: 700; text-transform: uppercase;
  letter-spacing: .08em; color: var(--muted); padding: 6px 16px 8px;
}
/* Kopfzeile „Letzte Suchanfragen" mit dezentem Löschen-Button */
.search-group-title.search-recent-head { display: flex; align-items: center; justify-content: space-between; }
.search-recent-clear {
  border: none; background: none; cursor: pointer; padding: 0 2px;
  font-size: var(--text-xxs); font-weight: 600; text-transform: none; letter-spacing: 0;
  color: var(--muted); text-decoration: underline;
}
.search-recent-clear:hover { color: var(--vi-error, #C0392C); }

.search-result {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 8px 12px; margin: 2px 4px;
  cursor: pointer; transition: background .1s; border-radius: var(--radius-sm);
}

.search-result:hover, .search-result.selected {
  background: var(--bg-primary);
}

.search-result-icon {
  font-size: var(--font-size-xl); flex-shrink: 0; width: 20px; text-align: center;
}

.search-result-content {
  flex: 1; min-width: 0;
}

.search-result-title {
  font-size: var(--font-size-base); font-weight: 500; color: var(--text-primary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

.search-result-subtitle {
  font-size: var(--font-size-sm); color: var(--muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  margin-top: 2px;
}

.search-result-meta {
  font-size: var(--font-size-xs); color: var(--subtle); margin-top: 3px;
}
.search-result-reason {
  font-size: var(--text-xxs); color: var(--vi-green, #147352); margin-top: 3px;
  opacity: .82; font-style: italic; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

.search-result-badge {
  display: inline-block; font-size: 9px; font-weight: 600;
  padding: 2px 6px; border-radius: 3px; background: var(--creme);
  color: var(--muted); margin-top: 4px; white-space: nowrap;
}

.search-loading {
  padding: 20px 16px; text-align: center; color: var(--muted); font-size: var(--font-size-base);
}

.search-no-results {
  padding: 24px 16px; text-align: center; color: var(--muted); font-size: var(--font-size-base);
}

.search-error {
  padding: 16px; color: var(--rot); font-size: var(--font-size-sm); background: var(--color-danger-soft);
  border-radius: var(--radius-sm); margin: 8px;
}

/* "+ Neu" dropdown */
.topbar-neu-wrap { position: relative; }
.topbar-neu-dd {
  position: absolute; top: calc(100% + 6px); right: 0; z-index: 200;
  background: var(--white); border: 1.5px solid var(--border); border-radius: var(--radius-lg);
  box-shadow: 0 8px 28px rgba(0,0,0,.12); min-width: 210px;
  padding: 6px 0;
  max-height: calc(100vh - 78px); overflow-y: auto;   /* nie über den Bildschirmrand hinaus → scrollt statt zu überlaufen */
}
/* Gruppentitel im „+ Neu"-Menü */
.tnd-group { font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); padding: 8px 16px 4px; }
/* Schnellerfassungs-Einträge dezent hervorheben (Blitz-Icon grün) */
.tnd-item.tnd-quick .tnd-icon { opacity: 1; color: var(--gruen, #147352); }
.tnd-item {
  display: flex; align-items: center; gap: 9px;
  padding: 9px 16px; font-size: var(--font-size-base); color: var(--text-primary);
  cursor: pointer; transition: background .1s; letter-spacing: .02em;
}
.tnd-item:hover { background: var(--creme); }
.tnd-icon { width: 14px; height: 14px; flex-shrink: 0; opacity: .65; }
.tnd-sep { height: 1px; background: var(--border); margin: 4px 0; }

.topbar-right { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

/* Topbar action buttons */
.topbar-btn {
  display: flex; align-items: center; gap: 6px; position: relative;
  font-family: var(--font-family-body); font-size: var(--font-size-sm); letter-spacing: .04em;
  padding: 7px 14px;
  background: var(--creme); border: 1px solid var(--border); border-radius: var(--radius-sm);
  color: var(--muted); cursor: pointer; transition: all .15s; white-space: nowrap;
}
.topbar-btn:hover { background: var(--creme-dunkel); color: var(--text-primary); border-color: var(--sand); }
.topbar-btn-primary {
  background: var(--gruen); color: var(--creme); border-color: var(--gruen);
}
.topbar-btn-primary:hover { background: var(--gruen-mid); border-color: var(--gruen-mid); color: var(--creme); }
.topbar-btn-icon { width: 13px; height: 13px; opacity: .75; flex-shrink: 0; }
.topbar-badge {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 16px; height: 16px; padding: 0 4px;
  background: var(--rot); color: var(--color-surface); border-radius: var(--radius-md);
  font-size: 9px; font-weight: 700; letter-spacing: 0; line-height: 1;
}

/* ── Globaler Objektkontext-Chip im Header (ersetzt die frühere Vollzeilen-Leiste) ── */
.topbar-objctx { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 8px; overflow: hidden; }
#topbar-objctx-chip { min-width: 0; display: flex; align-items: center; padding-top: 0; flex: 1 1 auto; }
#topbar-objctx-chip .vi-ctx-chip { flex: 1 1 auto; flex-wrap: nowrap; min-width: 0; }
#topbar-objctx-chip .vi-ctx-chip-label { flex: 0 1 auto; min-width: 0; }
/* Header bewusst kompakt: „Unterebenen"-Schalter + „im Baum öffnen" stehen im Picker-Dialog */
#topbar-objctx-chip .vi-ctx-chip-toggle,
#topbar-objctx-chip .vi-ctx-chip-open { display: none; }
.topbar-objctx-na { font-size: var(--text-xxs); color: var(--muted); white-space: nowrap; flex-shrink: 0; }
/* Modul filtert NICHT nach dem Objektbezug → sichtbar, aber klar „nicht angewandt" */
.topbar-objctx.ctx-na .vi-ctx-chip-label { color: var(--muted) !important; text-decoration: line-through; opacity: .75; }
.topbar-objctx.ctx-na .vi-ctx-chip-icon  { opacity: .35 !important; color: var(--muted) !important; }

/* ── Header-Uhr · Kalenderwoche · Datum + Mini-Kalender-Popover ── */
.topbar-clock-wrap { position: relative; flex-shrink: 0; }
.topbar-clock {
  display: inline-flex; align-items: center; gap: 9px; cursor: pointer;
  background: var(--creme); border: 1px solid var(--border); border-radius: var(--radius-sm);
  padding: 4px 10px; color: var(--muted); font-family: var(--font-family-body);
  transition: all .15s; white-space: nowrap;
}
.topbar-clock:hover { background: var(--creme-dunkel); color: var(--text-primary); border-color: var(--sand); }
.topbar-clock:focus-visible { outline: 2px solid var(--gruen-mid); outline-offset: 2px; }
.topbar-clock-ic { width: 14px; height: 14px; opacity: .7; flex-shrink: 0; }
.topbar-clock .tc-main { display: inline-flex; flex-direction: column; align-items: flex-start; line-height: 1.12; }
.topbar-clock .tc-date { font-size: var(--text-xxs); color: var(--text-primary); font-weight: 600; }
.topbar-clock .tc-kw { font-size: 9.5px; color: var(--muted); letter-spacing: .03em; }
.topbar-clock .tc-time { font-size: var(--text-md); font-weight: 700; color: var(--text-primary); font-variant-numeric: tabular-nums; }

/* ── Benachrichtigungen / Ereigniszentrum (Header-Glocke + Panel) ── */
.notif-wrap { position: relative; flex-shrink: 0; }
.topbar-icon-btn {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  width: 34px; height: 34px; padding: 0; cursor: pointer;
  background: var(--creme); border: 1px solid var(--border); border-radius: var(--radius-sm);
  color: var(--muted); transition: all .15s;
}
.topbar-icon-btn:hover { background: var(--creme-dunkel); color: var(--text-primary); border-color: var(--sand); }
.topbar-icon-btn:focus-visible { outline: 2px solid var(--gruen-mid); outline-offset: 2px; }
.topbar-icon-btn .topbar-btn-icon { width: 16px; height: 16px; opacity: .8; }
.notif-wrap.has-unread .topbar-icon-btn { color: var(--text-primary); border-color: var(--sand); }
.notif-badge {
  position: absolute; top: -5px; right: -5px;
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 16px; height: 16px; padding: 0 4px; box-sizing: border-box;
  background: var(--rot); color: var(--color-surface); border-radius: var(--radius-md);
  font-size: 9px; font-weight: 700; letter-spacing: 0; line-height: 1;
  border: 1.5px solid var(--bg, #fff);
}
.notif-badge[hidden] { display: none; }
.notif-panel {
  position: absolute; top: calc(100% + 8px); right: 0; z-index: 1200;
  width: 360px; max-width: calc(100vw - 24px);
  background: var(--bg, #fff); border: 1px solid var(--border); border-radius: var(--radius-lg);
  box-shadow: 0 12px 32px rgba(0,0,0,.16); overflow: hidden;
}
.notif-panel[hidden] { display: none; }
.notif-panel-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 11px 14px; border-bottom: 1px solid var(--border); background: var(--creme);
}
.notif-panel-title { font-size: var(--text-sm); font-weight: 700; color: var(--text-primary); letter-spacing: .02em; }
.notif-readall {
  font-size: var(--text-xxs); color: var(--gruen-mid); background: none; border: none; cursor: pointer;
  padding: 2px 4px; border-radius: 4px; font-family: var(--font-family-body);
}
.notif-readall:hover { text-decoration: underline; color: var(--gruen); }
.notif-readall[disabled] { color: var(--muted); cursor: default; text-decoration: none; }
.notif-list { max-height: 420px; overflow-y: auto; }
.notif-empty { padding: 28px 16px; text-align: center; color: var(--muted); font-size: var(--text-xs); }
.notif-item {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 11px 14px; border-bottom: 1px solid var(--border); cursor: pointer;
  transition: background .12s; position: relative;
}
.notif-item:last-child { border-bottom: none; }
.notif-item:hover { background: var(--creme); }
.notif-item.is-unread { background: color-mix(in srgb, var(--gruen-mid) 6%, transparent); }
.notif-item.is-unread:hover { background: color-mix(in srgb, var(--gruen-mid) 11%, transparent); }
.notif-dot { width: 8px; height: 8px; border-radius: 50%; margin-top: 5px; flex-shrink: 0; background: var(--muted); }
.notif-item.sev-info .notif-dot { background: var(--gruen-mid); }
.notif-item.sev-success .notif-dot { background: var(--gruen); }
.notif-item.sev-warning .notif-dot { background: #d98a00; }
.notif-item.sev-danger .notif-dot { background: var(--rot); }
.notif-item.is-read .notif-dot { background: var(--sand); }
.notif-body { min-width: 0; flex: 1; }
.notif-title { font-size: var(--text-xs); font-weight: 600; color: var(--text-primary); line-height: 1.3; }
.notif-text { font-size: var(--text-xxs); color: var(--muted); margin-top: 2px; line-height: 1.35; overflow-wrap: anywhere; }
.notif-meta { display: flex; flex-wrap: wrap; gap: 4px 5px; margin-top: 5px; }
.notif-chip {
  font-size: 10px; line-height: 1.5; color: var(--muted);
  background: var(--creme); border: 1px solid var(--border);
  padding: 0 7px; border-radius: var(--radius-pill);
  max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.notif-chip-src { color: var(--gruen-mid); border-color: color-mix(in srgb, var(--gruen-mid) 32%, var(--border)); font-weight: 600; }
.notif-chip-actor { color: var(--text-primary); background: var(--sand); font-weight: 600; }
.notif-chip-obj { color: var(--text-primary); }
.notif-time { font-size: 10px; color: var(--muted); margin-top: 4px; letter-spacing: .02em; }
@media (max-width: 600px) {
  .notif-panel { position: fixed; top: 56px; right: 8px; left: 8px; width: auto; max-width: none; }
}

.topbar-cal-pop {
  position: absolute; top: calc(100% + 8px); right: 0; z-index: 400;
  background: var(--white); border: 1.5px solid var(--border); border-radius: var(--radius-lg);
  box-shadow: 0 12px 40px rgba(0,0,0,.16); padding: 12px; width: 250px;
}
.topbar-cal-pop[hidden] { display: none; }
.tcp-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; gap: 6px; }
.tcp-title { font-size: var(--text-sm); font-weight: 700; color: var(--text-primary); }
.tcp-nav {
  border: 1px solid var(--border); background: var(--creme); border-radius: var(--radius-sm);
  width: 26px; height: 26px; cursor: pointer; color: var(--muted); font-size: var(--text-base); line-height: 1;
  display: inline-flex; align-items: center; justify-content: center;
}
.tcp-nav:hover { background: var(--creme-dunkel); color: var(--text-primary); }
.tcp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
/* Wochenzeilen mit ISO-Kalenderwoche links (G-11): schmale, dezente Vorspalte. */
.tcp-grid--kw { grid-template-columns: auto repeat(7, 1fr); }
.tcp-kw { text-align: right; font-size: 9px; color: var(--subtle); padding: 5px 4px 0 0; font-variant-numeric: tabular-nums; align-self: start; }
.tcp-kw-head { font-size: 9px; font-weight: 700; color: var(--muted); padding-top: 2px; }
.tcp-dows { margin-bottom: 2px; }
.tcp-dow { text-align: center; font-size: 10px; font-weight: 700; color: var(--muted); padding: 2px 0; }
.tcp-day { text-align: center; font-size: var(--text-xs); color: var(--text-primary); padding: 5px 0; border-radius: var(--radius-sm); }
.tcp-out { color: var(--subtle); opacity: .5; }
.tcp-today { background: var(--gruen); color: var(--creme); font-weight: 700; }
.tcp-foot { margin-top: 8px; text-align: center; }
.tcp-todaybtn { border: 1px solid var(--border); background: var(--creme); border-radius: var(--radius-sm); padding: 4px 12px; font-size: var(--text-xxs); color: var(--muted); cursor: pointer; }
.tcp-todaybtn:hover { background: var(--creme-dunkel); color: var(--text-primary); }

/* Cockpit: Hinweis „gefiltert nach Objekt" (über der KPI-Leiste) */
.cockpit-filter-note { display: flex; align-items: center; gap: 10px; margin: 0 0 14px; padding: 8px 14px;
  background: var(--vi-info-soft, #eef4fb); border: 1px solid var(--color-primary-200, #c9dceb);
  border-left: 3px solid var(--color-primary-600, #245C7A); border-radius: var(--radius-md);
  font-size: var(--text-sm); color: var(--text-secondary, #374151); }
.cockpit-filter-note svg { flex-shrink: 0; color: var(--color-primary-600, #245C7A); }
.cockpit-filter-note .cfn-text { flex: 1 1 auto; min-width: 0; }
.cockpit-filter-note strong { color: var(--text-primary, #111827); font-weight: 700; }
.cockpit-filter-note .cfn-scope { color: var(--text-muted, #6b7280); font-size: var(--text-xs); }
.cockpit-filter-note .cfn-reset { flex: 0 0 auto; border: 1px solid var(--border, #d1d5db); background: var(--white, #fff);
  color: var(--color-primary-700, #1f5578); font-size: var(--text-xs); font-weight: 600; padding: 3px 10px; border-radius: var(--radius-sm); cursor: pointer; }
.cockpit-filter-note .cfn-reset:hover { background: var(--bg-hover, #f3f4f6); }

/* Schmale Laptops: Platz sparen — Datum (mit Wochentag) ausblenden, KW + Uhrzeit bleiben.
   Die Chip-Breite regelt die Flex-Verteilung selbst (Pfad kürzt, letzter Knoten bleibt). */
@media (max-width: 1150px) {
  .topbar-clock .tc-date { display: none; }
}
@media (max-width: 1040px) {
  .topbar-clock .tc-main { display: none; }   /* nur noch Icon + Uhrzeit */
}

/* ── CONTENT PAGES ──────────────────────────────────────────────────────── */

.content { padding: 28px 32px; flex: 1; overflow-y: auto; }
/* UX-Phase 3 (03.09.2026): Wo das Modul-Chrome oben schon Kopf, Tabs und
   Ansichtsleiste stellt, sind 28 px Vorlauf zu viel — die Seite hat ihren Rahmen
   bereits. 12 px genügen; das sind rund eine Datenzeile mehr im Bild. */
body.vmod-on .content { padding-top: var(--space-3, 12px); }
.page { display: none; }
.page.active { display: block; }

.page-header {
  display: flex; align-items: flex-end; justify-content: space-between;
  margin-bottom: 20px;
}
.page-title    { font-family: var(--vi-font-display); font-size: var(--font-size-5xl); font-weight: 600; color: var(--vi-green, #147352); letter-spacing: -0.02em; line-height: 1; }
.page-subtitle { font-size: var(--font-size-base); color: var(--muted); margin-top: 5px; letter-spacing: .02em; }

.btn-primary {
  font-family: var(--font-family-body); font-size: var(--font-size-sm); letter-spacing: .08em;
  text-transform: uppercase; padding: 10px 20px;
  background: var(--gruen); color: var(--creme);
  border: none; border-radius: var(--radius-sm); cursor: pointer; transition: background .15s;
  white-space: nowrap;
}
.btn-primary:hover { background: var(--gruen-mid); }

/* Jahr-Steuerung */
.dash-year-ctrl {
  display: flex; align-items: center; gap: 0;
  border: 1.5px solid var(--border); border-radius: var(--radius-sm);
  background: var(--bg-input); overflow: hidden;
}
.dash-year-nav {
  font-family: var(--font-family-body); font-size: var(--font-size-sm);
  padding: 6px 10px; border: none; background: transparent;
  color: var(--muted); cursor: pointer; transition: all .15s;
}
.dash-year-nav:hover:not(:disabled) { background: var(--creme-dunkel); color: var(--text-primary); }
.dash-year-nav:disabled { opacity: .3; cursor: default; }
.dash-year-val {
  font-family: var(--vi-font-display); font-size: var(--text-base); font-weight: 300;
  color: var(--text-primary); min-width: 44px; text-align: center; letter-spacing: -.01em;
  padding: 0 4px;
}

/* Datenbasis-Hinweis-Banner */
.dash-datenbasis-note {
  display: flex; align-items: center; gap: 8px;
  background: #fffbe6; border: 1px solid #f0d060; border-radius: var(--radius-md);
  padding: 9px 14px; margin-bottom: 14px;
  font-size: var(--font-size-base); color: #7a5c00;
}
.dash-datenbasis-note .dbn-icon { font-size: var(--text-base); flex-shrink: 0; }
.dq-value {
  font-family: var(--vi-font-display); font-size: var(--font-size-3xl); font-weight: 300;
  color: var(--text-primary); line-height: 1; letter-spacing: -.01em;
}
.dq-value.dq-date {
  font-family: var(--font-family-body); font-size: var(--font-size-base);
  font-weight: 500; letter-spacing: 0;
}
.dq-value.dq-ok       { color: var(--gruen-hell); }
.dq-value.dq-warn-val { color: var(--gelb); }
.dq-value.dq-err-val  { color: var(--rot); }

/* Legacy — keep for backward compat */
.objekt-filter { display: none; }
.filter-label  { font-size: 9px; letter-spacing: .15em; text-transform: uppercase; color: var(--muted); white-space: nowrap; }

/* ── COCKPIT KPI BAR ───────────────────────────────────────────────────────── */

.cockpit-kpi-bar {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
  width: 100%;
}
@media (max-width: 900px) { .cockpit-kpi-bar { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 520px) { .cockpit-kpi-bar { grid-template-columns: 1fr; } }
.ckpi-card.ckpi-card-warn { border-color: var(--color-warning-soft); }   /* warn = bernstein */
.ckpi-card.ckpi-card-crit { border-color: var(--color-danger-soft); }   /* crit = rot (Rail/Tint via vicore-premium.css) */

/* Icon circle */
.ckpi-icon {
  width: 36px; height: 36px; border-radius: var(--radius-md);
  display: flex; align-items: center; justify-content: center;
  margin-bottom: 12px; flex-shrink: 0;
}
.ckpi-icon svg { width: 18px; height: 18px; }

.ckpi-label {
  font-size: var(--font-size-xs); letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted); margin-bottom: 4px; font-weight: 600;
}
.ckpi-value {
  font-family: var(--vi-font-display); font-size: var(--text-2xl); font-weight: 300;
  color: var(--text-primary); line-height: 1; letter-spacing: -.02em;
}
.ckpi-value.ckpi-val-ok  { color: var(--gruen-hell); }
.ckpi-value.ckpi-val-err { color: var(--rot); }
.ckpi-card.ckpi-card-crit .ckpi-value { color: var(--rot); }

/* ── COCKPIT MAIN GRID ─────────────────────────────────────────────────────── */

.cockpit-grid {
  display: grid;
  grid-template-columns: 1fr 360px;
  gap: 20px;
  align-items: start;
}
@media (max-width: 1100px) {
  .cockpit-grid { grid-template-columns: 1fr; }
  .cockpit-col-side { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
}
@media (max-width: 700px) {
  .cockpit-col-side { grid-template-columns: 1fr; }
}

.cockpit-col-main {}
.cockpit-col-side {}

/* ═══════════════════════════════════════════════════════════════════════════
   COCKPIT V2 — Gesamtcockpit (Vorgänge, Wiedervorlagen, Aufgaben, Wartungen)
   ═══════════════════════════════════════════════════════════════════════════ */

/* Topbar — Layout/Kind-Elemente der Cockpit-Kopfzeile.
   HINWEIS (Phase 2 – Kanonisierung): Die SICHTBARE Hero-Optik der .cockpit-topbar
   (padding/Verlauf/Border/::before/::after) ist kanonisch in vicore-premium.css definiert
   und gewinnt die Kaskade (lädt später). HIER ausschließlich Flex-Layout + Kind-Elemente.
   Die Ablösung des Deko-Heros durch einen kompakten Modulkopf erfolgt erst im Cockpit-Umbau
   (Phase 3+). Nicht doppelt skinnen. Siehe docs/UI_UX_DESIGN_SYSTEM.md §6. */
.cockpit-topbar {
  display: flex; align-items: flex-start; justify-content: space-between;
  margin-bottom: 20px; gap: 16px; flex-wrap: wrap;
}
.cockpit-topbar-left { min-width: 0; }
.cockpit-topbar-right { flex-shrink: 0; display: flex; align-items: center; gap: 8px; }

/* Neue KPI-Kachel: clickable */
.ckpi-card-clickable { cursor: pointer; }

/* Grid V2: 2-Spalten, rechts schmaler.
   min-width: 0 auf beiden Spalten verhindert, dass Inhalte den Grid-Container aufblähen. */
.cockpit-grid-v2 {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 300px);
  gap: 16px;
  align-items: start;
  min-width: 0;
  width: 100%;
}
@media (max-width: 1280px) {
  .cockpit-grid-v2 { grid-template-columns: minmax(0, 1fr) minmax(0, 260px); }
}
@media (max-width: 1023px) {
  .cockpit-grid-v2 { grid-template-columns: 1fr; }
  .cockpit-grid-v2 .cockpit-col-side {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 12px;
  }
  .cockpit-grid-v2 .cockpit-col-side .cck-section { margin-bottom: 0; }
}
.ck-mine-c-tag.is-over { background: var(--vi-error-soft, #FBEAE6); color: var(--vi-error, #C0392C); }
.ck-mine-c-prev-d.is-over { background: var(--vi-error-soft, #FBEAE6); color: var(--vi-error, #C0392C); }

/* Lade/Leer-Zustand */
.cck-loading {
  padding: 20px 18px;
  font-size: var(--font-size-base);
  color: var(--vi-muted, #5F6B66);
}
.cck-empty {
  display: flex; align-items: center; gap: 10px;
  padding: 20px 18px;
  font-size: var(--font-size-base);
  color: var(--vi-muted, #5F6B66);
}
.cck-empty svg { flex-shrink: 0; opacity: .5; }

/* ── Vorgänge-Tabelle ─────────────────────────────────────────────────────── */
.cck-cases-wrap { overflow-x: auto; }
.cck-cases-table {
  width: 100%; border-collapse: collapse;
  font-size: var(--font-size-base); table-layout: fixed;
}
.cck-cases-table thead th {
  text-align: left; padding: 8px 12px;
  font-size: var(--font-size-xs); font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--vi-muted, #5F6B66);
  background: var(--vi-cream, #FAFBFA);
  border-bottom: 1px solid var(--vi-border, #D8DFDC);
  white-space: nowrap;
}
.cck-cases-table tbody td {
  padding: 9px 12px; border-bottom: 1px solid rgba(230,225,213,.5);
  vertical-align: middle; color: var(--vi-ink, #141A17);
}
.cck-cases-table tbody tr:last-child td { border-bottom: none; }

/* ── Responsive Anpassungen ─────────────────────────────────────────────── */
@media (max-width: 800px) {
  .cck-cases-table .cck-td-obj,
  .cck-cases-table .cck-td-tasks { display: none; }
}

/* Energie-Abschnitt Header */
.cockpit-section-bar {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 16px;
  padding-bottom: 12px;
  border-bottom: 1.5px solid var(--border);
}
.cockpit-section-title {
  font-family: var(--vi-font-display); font-size: var(--font-size-xl); font-weight: 600;
  color: var(--text-primary); letter-spacing: -.01em;
}
.cockpit-year-badge {
  font-family: var(--font-family-body);
  font-size: var(--font-size-sm); color: var(--muted); font-weight: 400;
  letter-spacing: 0; margin-left: 8px;
}

/* ══════════════════════════════════════════════════════════════════════════
   ZENTRALER OBJEKTBAUM-PICKER (vi-obj-picker)
   Einheitliche Komponente für ALLE Module: Messpunkte, Wartungen, Auswertungen,
   PV, Dokumente, Dashboard. Ersetzt moduleigene Dropdowns und <select>-Elemente.
   ══════════════════════════════════════════════════════════════════════════ */

.vi-obj-picker-wrap { width: 100%; position: relative; }
.vi-obj-picker { position: relative; width: 100%; }

/* Der Picker ist EIN Feld — genau wie ein <select> oder .form-input: gleiche Höhe
   (--input-height), gleicher Radius, gleicher Fokusring. Der Rahmen gehört dem WRAP,
   das innere <input> ist rahmenlos.

   SPEZIFITÄT (wichtig, war ein sichtbarer Fehler): die generische Feldregel
   `input[type="text"], .form-input, …` weiter unten hat (0,1,1) und schlug die alte
   Regel `.vi-obj-picker-input` (0,1,0). Das innere Eingabefeld bekam dadurch einen
   EIGENEN Rahmen im Rahmen — der Pfeil sah aus wie ein zweites, abgesetztes Kästchen.
   Deshalb sind die Innen-Regeln jetzt über den Wrap qualifiziert (0,2,0). */
.vi-obj-picker-input-wrap {
  display: flex; align-items: center;
  min-height: var(--input-height, 36px);
  border: 1px solid var(--vi-border, #D8DFDC);
  border-radius: var(--vi-r-md, 10px);
  background: var(--white, #fff);
  transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
  overflow: hidden;
}
.vi-obj-picker-input-wrap:hover { border-color: #D7CFBE; }
.vi-obj-picker-input-wrap:focus-within {
  border-color: var(--vi-green, #147352);
  box-shadow: 0 0 0 3px rgba(19, 109, 57, .12);
}
/* Gefüllt = fachlich gesetzt: dieselbe ruhige Hervorhebung wie beim Suchfeld (.is-set). */
.vi-obj-picker-input-wrap:has(.vi-obj-picker-input:not(:placeholder-shown)) {
  border-color: var(--vi-green, #147352); background: var(--green-50);
}

.vi-obj-picker-input-wrap .vi-obj-picker-input {
  flex: 1 1 auto; min-width: 0; width: 100%;
  height: auto; min-height: 0;
  border: none; outline: none; box-shadow: none; border-radius: 0;
  background: transparent;
  padding: 0 var(--input-padding-x, 12px);
  font-family: var(--vi-font-ui, inherit);
  font-size: var(--text-sm);
  color: var(--vi-ink, #141A17);
  cursor: pointer; text-overflow: ellipsis;
}
.vi-obj-picker-input-wrap .vi-obj-picker-input:focus { border: none; box-shadow: none; background: transparent; }
.vi-obj-picker-input-wrap .vi-obj-picker-input::placeholder { color: var(--vi-muted, #5F6B66); }
.vi-obj-picker-caret {
  display: inline-flex; align-items: center; align-self: stretch;
  padding: 0 10px; color: var(--vi-muted, #5F6B66);
  cursor: pointer; flex-shrink: 0; font-size: 10px; line-height: 1;
  transition: transform .18s ease, color .15s ease;
}
.vi-obj-picker-input-wrap:hover .vi-obj-picker-caret { color: var(--vi-ink, #141A17); }
.vi-obj-picker-clear {
  background: none; border: none; cursor: pointer;
  padding: 0 8px; color: var(--vi-muted, #5F6B66);
  font-size: var(--text-base); line-height: 1; flex-shrink: 0; align-self: stretch;
  transition: color .1s;
}
.vi-obj-picker-clear:hover { color: var(--vi-error, #C0392C); }

/* Fixierte Variante: gesetzt von _viObjPickerPlace, wenn ein beschneidender
   Container (Modal/Drawer/Panel) die Liste sonst abschneiden würde.
   WICHTIG: `min-width`/`max-width` müssen hier zurückgesetzt werden. Die Regel in
   vicore-premium.css setzt `min-width: 100%` — bei `position: fixed` ist der
   Bezugsrahmen aber das FENSTER, die Liste wäre also bildschirmbreit. Die Breite
   kommt ausschließlich aus der Inline-Angabe von _viObjPickerPlace (= Feldbreite). */
.vi-obj-picker-dropdown.is-fixed {
  position: fixed; right: auto; z-index: 9600;
  min-width: 0; max-width: none;
}
.vi-obj-picker-dropdown {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0;
  background: var(--white);
  border: 1px solid var(--vi-border, #D8DFDC);
  border-radius: var(--vi-r-md, 10px);
  box-shadow: var(--vi-shadow-raised, 0 5px 16px rgba(40,30,20,.12));
  z-index: 500;
  max-height: 320px; overflow-y: auto;
  overscroll-behavior: contain;
}

/* Der Picker rückt nach DERSELBEN Regel ein wie der Explorer (§5.1) — Einzug und
   Astlinie kommen aus denselben Variablen, damit Baum und Auswahl nie
   unterschiedlich tief aussehen. */
.vi-obj-picker-item {
  --obj-indent-base: 6px;
  --obj-indent-step: 20px;
  --obj-depth: 0;
  display: flex; align-items: center; gap: 7px;
  padding: 8px 12px 8px calc(var(--obj-indent-base) + var(--obj-depth) * var(--obj-indent-step));
  cursor: pointer;
  transition: background .1s; min-width: 0;
  background-image: repeating-linear-gradient(to right,
    var(--gray-200, #E4E9E7) 0, var(--gray-200, #E4E9E7) 1px,
    transparent 1px, transparent var(--obj-indent-step));
  background-position: calc(var(--obj-indent-base) + 7px) 0;
  background-size: calc(var(--obj-depth) * var(--obj-indent-step)) 100%;
  background-repeat: no-repeat;
}
.vi-obj-picker-item[style*="--obj-depth:0"] { background-image: none; }
.vi-obj-picker-item:hover { background: var(--vi-green-tint, #EDF7F2); }
.vi-obj-picker-item.is-active { background: var(--vi-green-soft, #EDF7F2); }
.vi-obj-picker-item-icon { flex-shrink: 0; display: inline-flex; }
.vi-obj-picker-item-name {
  font-size: var(--font-size-md, 13px); font-weight: 500;
  color: var(--vi-ink, #141A17); white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; flex: 1 1 auto; min-width: 0;
}
.vi-obj-picker-item-path {
  font-size: var(--text-xxs); color: var(--vi-muted, #5F6B66);
  white-space: nowrap; flex-shrink: 0;
  max-width: 200px; overflow: hidden; text-overflow: ellipsis;
}
/* ── Baumsuche: Treffer + Trefferzahl ───────────────────────────────────────────
   Die frühere flache Suchergebnis-Liste (.vi-obj-picker-result mit Pfadzeile unter jedem
   Treffer) ist am 20.08.2026 entfallen: Sie riss Treffer aus ihrer Struktur und wiederholte
   unter jedem Eintrag denselben grauen Pfad. Gesucht wird jetzt IM Baum. */
.vi-obj-picker-hits {
  display: flex; align-items: baseline; gap: 6px;
  padding: 7px 12px 6px;
  font-size: var(--text-xxs); font-weight: 600; letter-spacing: .02em;
  color: var(--vi-ink, #141A17);
  background: var(--vi-sand, #F7F5EF);
  border-bottom: 1px solid var(--vi-border, #D8DFDC);
  position: sticky; top: 0; z-index: 1;
}
.vi-obj-picker-hits-sub { font-weight: 400; color: var(--vi-muted, #5F6B66); }
/* Treffer dezent hervorheben: die Zeile bekommt Gewicht, die Fundstelle eine ruhige Marke. */
.vi-obj-picker-item.is-hit .vi-obj-picker-item-name { font-weight: 600; }
.vi-obj-picker-item .vi-tree-hit {
  background: var(--vi-green-tint, #EDF7F2);
  color: var(--vi-green, #147352);
  border-radius: 3px; padding: 0 1px; font-weight: 700;
}
/* ── Zweizeilige Trefferzeile — nur noch für den KATALOG-Picker (_viCatalogPickerInit).
   Fachkataloge (Kategorie, Leistungsbereich, Bauteilart) sind flache Listen, dort ist die
   Zeile „Name oben, Zusatz darunter" richtig. Der OBJEKT-Baum nutzt sie NICHT mehr. */
.vi-obj-picker-result { align-items: flex-start; gap: 9px; padding: 8px 12px; }
.vi-obj-picker-result .vi-obj-picker-item-icon { margin-top: 2px; }
.vi-obj-picker-result-text { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; gap: 1px; }
.vi-obj-picker-result .vi-obj-picker-item-name {
  flex: none; display: block; width: 100%;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.vi-obj-picker-result .vi-obj-picker-item-path {
  flex: none; display: block; width: 100%; max-width: none;
  font-size: var(--text-xxs); line-height: 1.35; color: var(--vi-muted, #5F6B66);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.vi-obj-picker-empty {
  padding: 14px 12px;
  font-size: var(--font-size-md, 13px);
  color: var(--vi-muted, #5F6B66);
  text-align: center;
}

/* ── Kontextvariante (variant:'context') ────────────────────────────────────────
   Für Masken, in denen die Objektwahl der ERSTE Schritt ist (Vorgang anlegen/bearbeiten):
   Das gewählte Objekt steht als ruhige Zeile „Name · Pfad" mit „Ändern" — nicht als leeres
   Eingabefeld, das erst noch bedient werden will. Der Baum dahinter ist derselbe. */
.vi-obj-picker-trigger { display: block; width: 100%; }
.vi-obj-ctx-row {
  display: flex; align-items: center; gap: 9px;
  min-height: var(--input-height, 36px);
  padding: 6px 6px 6px 10px;
  border: 1px solid var(--vi-green, #147352);
  border-radius: var(--vi-r-md, 10px);
  background: var(--green-50); cursor: pointer;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.vi-obj-ctx-row:hover { box-shadow: 0 0 0 3px rgba(19, 109, 57, .10); }
.vi-obj-ctx-ic { flex: 0 0 auto; display: inline-flex; }
.vi-obj-ctx-text { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; gap: 1px; }
.vi-obj-ctx-name {
  font-size: var(--text-sm); font-weight: 600; color: var(--vi-ink, #141A17);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.vi-obj-ctx-path {
  font-size: var(--text-xxs); line-height: 1.3; color: var(--vi-muted, #5F6B66);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.vi-obj-ctx-change {
  flex: 0 0 auto; border: 1px solid var(--vi-border, #D8DFDC); border-radius: var(--vi-r-sm, 7px);
  background: var(--white, #fff); color: var(--vi-green, #147352);
  font-family: inherit; font-size: var(--text-xs); font-weight: 600;
  padding: 5px 11px; cursor: pointer;
  transition: border-color .15s ease, background .15s ease;
}
.vi-obj-ctx-change:hover { border-color: var(--vi-green, #147352); background: #E3F2EA; }
.vi-obj-ctx-change:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(19, 109, 57, .18); }

/* Schmale Fenster: Name/Pfad dürfen umbrechen, „Ändern" bleibt erreichbar und
   rutscht bei sehr wenig Platz unter die Bezeichnung (kein Abschneiden). */
@media (max-width: 560px) {
  .vi-obj-ctx-row { flex-wrap: wrap; row-gap: 6px; padding-right: 10px; }
  .vi-obj-ctx-text { flex: 1 1 100%; order: 1; }
  .vi-obj-ctx-ic { order: 0; }
  .vi-obj-ctx-change { order: 2; margin-left: auto; }
  .vi-obj-ctx-name, .vi-obj-ctx-path { white-space: normal; }
}

/* ── Baummodus (Auf-/Zuklappen) — einheitlich in allen Modulen ─────────────── */
.vi-obj-picker-tree .vi-tree-row { padding-top: 5px; padding-bottom: 5px; padding-right: 12px; }
.vi-tree-caret {
  flex-shrink: 0; width: 16px; height: 16px; display: inline-flex;
  align-items: center; justify-content: center;
  color: var(--vi-muted, #5F6B66); font-size: var(--text-xxs); cursor: pointer;
  border-radius: 4px; transition: transform .12s, background .1s;
}
.vi-tree-caret:hover { background: var(--vi-green-soft, #EDF7F2); color: var(--vi-green, #147352); }
.vi-tree-caret.is-open { transform: rotate(90deg); }
.vi-tree-spacer { flex-shrink: 0; width: 16px; height: 16px; display: inline-block; }
.vi-tree-type {
  font-size: var(--text-xxs); color: var(--vi-muted, #5F6B66);
  white-space: nowrap; flex-shrink: 0; text-transform: uppercase;
  letter-spacing: .03em; opacity: .8;
}
/* Reine Strukturknoten (per allowedTypes nicht auswählbar): nur zum Aufklappen */
.vi-obj-picker-item.is-structure-only { cursor: default; }
.vi-obj-picker-item.is-structure-only .vi-obj-picker-item-name { color: var(--vi-muted, #5F6B66); font-weight: 400; }
.vi-obj-picker-item.is-structure-only:hover { background: transparent; }
.vi-obj-picker-empty-hint { display: block; margin-top: 4px; font-size: var(--text-xxs); opacity: .85; }

/* Variante: schmaler Picker (für dichte Filter-Bars) */
/* Kompakte Variante — muss die Wrap-qualifizierten Regeln oben überbieten (0,2,0). */
.vi-obj-picker-sm .vi-obj-picker-input-wrap { min-height: 30px; }
.vi-obj-picker-sm .vi-obj-picker-input-wrap .vi-obj-picker-input { padding: 0 8px; font-size: var(--text-xs); }
.vi-obj-picker-sm .vi-obj-picker-dropdown { max-height: 240px; }

/* Wiederverwendbarer Katalog-Picker (_viCatalogPicker): Gruppentitel im Dropdown
   (z. B. FM-Domäne TGM/KGM/IGM). Nutzt sonst die .vi-obj-picker*-Klassen. */
.vi-cat-group {
  padding: 7px 12px 4px; font-size: var(--text-xxs); font-weight: 700;
  letter-spacing: .04em; text-transform: uppercase; color: var(--vi-muted, #5F6B66);
  background: var(--vi-sand, #F7F5EF); border-top: 1px solid var(--vi-border, #D8DFDC);
}
.vi-cat-picker-dd .vi-cat-group:first-child { border-top: none; }
.vi-comp-links { margin-top: 14px; }
.vi-comp-links-head {
  font-size: var(--text-xxs); font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--vi-muted, #5F6B66); margin-bottom: 7px;
}
.vi-comp-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.vi-comp-chip {
  display: inline-flex; align-items: center; gap: 7px; padding: 5px 11px;
  border: 1px solid var(--vi-border, #D8DFDC); border-radius: var(--radius-pill); background: var(--color-surface); font-size: var(--text-xs);
}
.vi-comp-chip.is-primary { border-color: var(--vi-green, #12704B); background: var(--vi-green-tint, #EDF7F2); }
.vi-comp-chip-badge {
  font-size: 9.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
  color: var(--color-surface); background: var(--vi-green, #12704B); border-radius: var(--radius-pill); padding: 1px 7px;
}
.vi-comp-chip-name { font-weight: 500; color: var(--vi-ink, #141A17); }
.vi-comp-chip-loc { font-size: var(--text-xxs); color: var(--vi-muted, #5F6B66); }

/* Weitere Anlagen: Gruppen (Hauptanlage vs. weitere) + Add/Remove-Aktionen */
.vi-comp-group { margin-top: 9px; }
.vi-comp-group:first-child { margin-top: 0; }
.vi-comp-group-label {
  display: block; font-size: 10px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase;
  color: var(--vi-muted, #5F6B66); margin-bottom: 5px;
}
.vi-comp-chip-x {
  margin-left: 3px; border: none; background: none; cursor: pointer; color: var(--vi-muted, #5F6B66);
  font-size: var(--text-base); line-height: 1; padding: 0 1px; border-radius: 4px;
}
.vi-comp-chip-x:hover { color: var(--vi-error, #C0392C); }
.vi-comp-add {
  border: 1px dashed var(--vi-border, #D8DFDC); background: var(--color-surface); color: var(--vi-green-deep, #0F5C42);
  font-size: var(--text-xs); font-weight: 600; border-radius: var(--radius-pill); padding: 4px 11px; cursor: pointer;
}
.vi-comp-add:hover { background: var(--vi-green-tint, #EDF7F2); border-color: var(--vi-green, #12704B); }
.vi-comp-empty { font-size: var(--text-xs); color: var(--vi-muted, #5F6B66); align-self: center; }
.vi-comp-addpick { margin-top: 9px; max-width: 440px; }
.vi-comp-addpick-empty, .vi-comp-addpick-loading {
  font-size: var(--text-xs); color: var(--vi-muted, #5F6B66); padding: 4px 0; display: flex; align-items: center; gap: 10px;
}

/* Stage 5b: Übersicht in kompakte, beschriftete Blöcke gliedern */
.vi-ov-block { margin-top: 16px; }
.vi-ov-block:first-of-type { margin-top: 18px; }
.vi-ov-block-title {
  font-size: var(--text-xxs); font-weight: 700; letter-spacing: .05em; text-transform: uppercase;
  color: var(--vi-muted, #5F6B66); margin-bottom: 9px; padding-bottom: 5px;
  border-bottom: 1px solid var(--vi-border, #D8DFDC);
}

/* ── DATENQUALITÄT MINI-KARTE ─────────────────────────────────────────────── */

.dq-mini-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 7px 0; border-bottom: 1px solid var(--creme-dunkel);
  font-size: var(--font-size-base);
}
.dq-mini-row:last-child { border-bottom: none; }
.dq-mini-label { color: var(--muted); }
.dq-mini-val   { font-weight: 500; color: var(--text-primary); }
.dq-mini-err        { color: var(--muted); }
.dq-mini-err-active { color: var(--rot); font-weight: 600; }
.dq-mini-warn        { color: var(--muted); }
.dq-mini-warn-active { color: var(--gelb); font-weight: 600; }
.obj-dd-item.active   { background: #e8f4ee; color: var(--gruen-mid); font-weight: 600; }
.kpi-card-lg.strom::before { background: var(--c-strom); }
.kpi-card-lg.gas::before   { background: var(--c-gas); }
.medium-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.medium-badge {
  display: inline-block; padding: 2px 7px; border-radius: var(--radius-lg);
  font-size: var(--font-size-sm); font-weight: 600; white-space: nowrap;
  background: var(--border-light); color: var(--gray-700);
}
.dot-strom   { background: var(--c-strom); }
.dot-gas     { background: var(--c-gas); }
.dot-wasser  { background: var(--c-wasser); }
.dot-waerme  { background: var(--c-waerme); }
.dot-pv      { background: var(--c-pv); }
.delta-up      { color: var(--rot); }
.delta-down    { color: var(--gruen-hell); }
.delta-neutral { color: var(--muted); }

/* Secondary KPIs */
.kpi-secondary-wrap { margin-bottom: 22px; }
.kpi-secondary-label { font-size: 9px; letter-spacing: .15em; text-transform: uppercase; color: var(--muted); margin-bottom: 10px; }
.kpi-card-sm.wasser::before  { background: var(--c-wasser); }
.kpi-card-sm.waerme::before  { background: var(--c-waerme); }
.kpi-card-sm.pv::before      { background: var(--c-pv); }

/* KARTEN: die kanonische Definition steht WEITER UNTEN in dieser Datei
   („PHASE 2: COMPONENT STANDARDIZATION" → `.card`). Sie gewann ohnehin über die
   Ladereihenfolge; der frühere Block an dieser Stelle war eine zweite, abweichende
   Definition derselben Klassen (anderer Radius, anderer Kopf, andere Polsterung)
   und ist am 16.08.2026 entfernt worden. NICHT wieder hinzufügen —
   `npm run check:design` prüft auf doppelte Kernkomponenten. */

.chart-year-selector {
  display: flex; gap: 6px; flex-wrap: wrap;
  padding: 14px 22px 12px;
}
.chart-year-chip {
  font-family: var(--font-family-body); font-size: var(--font-size-xs); letter-spacing: .04em;
  padding: 3px 10px; border: 1px solid var(--border); border-radius: var(--radius-xl);
  background: transparent; color: var(--muted); cursor: pointer;
  transition: all .15s;
}
.chart-year-chip:hover:not(:disabled) { border-color: var(--gruen); color: var(--gruen-dunkel); }
.chart-year-chip.active { background: var(--vi-green-soft); color: var(--vi-green-deep); border-color: var(--vi-green-soft); font-weight: 600; }
.chart-year-chip.no-data { opacity: .35; cursor: default; }

.chart-legend-row { display: flex; flex-wrap: wrap; gap: 16px; padding-top: 14px; }
.chart-legend-item { display: flex; align-items: center; gap: 7px; font-size: var(--font-size-sm); }
.chart-legend-dot  { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.chart-legend-year { color: var(--text-primary); font-weight: 600; }
.chart-legend-total { color: var(--muted); }

/* Jahr-Chip: Farbe dynamisch via inline style im JS */
.chart-year-chip.active { font-weight: 600; }

/* Hover-Tooltip */
.chart-tooltip {
  position: absolute; z-index: 20; pointer-events: none;
  background: white; border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 10px 14px;
  box-shadow: 0 4px 16px rgba(0,0,0,.10);
  min-width: 150px; font-size: var(--font-size-sm);
}
.ct-month { font-weight: 700; color: var(--text-primary); margin-bottom: 8px; font-size: var(--font-size-base); }
.ct-row   { display: flex; align-items: center; gap: 8px; padding: 2px 0; }
.ct-dot   { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.ct-year  { color: var(--muted); min-width: 32px; }
.ct-val   { font-weight: 600; color: var(--text-primary); margin-left: auto; }

.chart-select {
  font-family: var(--font-family-body); font-size: var(--font-size-xs);
  border: 1px solid var(--border); border-radius: 4px;
  padding: 3px 8px; background: var(--creme); color: var(--muted);
}

/* Objekte list (Dashboard) */
.objekt-item { display: flex; align-items: center; padding: 11px 0; border-bottom: 1px solid var(--creme-dunkel); gap: 12px; cursor: pointer; }
.objekt-item:last-child { border-bottom: none; }
.objekt-item:hover .objekt-name { color: var(--gruen-hell); }
.objekt-icon  { width: 34px; height: 34px; background: var(--gruen-trace); border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: var(--font-size-lg); }
.objekt-info  { flex: 1; }
.objekt-name  { font-size: var(--font-size-base); font-weight: 500; color: var(--text-primary); transition: color .15s; }
.objekt-malo  { font-size: var(--font-size-xs); color: var(--muted); margin-top: 2px; letter-spacing: .04em; }
.objekt-status { display: flex; flex-direction: column; align-items: flex-end; gap: 3px; }
.status-badge  { font-size: 9px; letter-spacing: .1em; text-transform: uppercase; padding: 2px 8px; border-radius: var(--radius-xl); font-weight: 500; }
.badge-ok    { background: #e8f5ee; color: var(--gruen-hell); }
.badge-warn  { background: #fef9e7; color: var(--gelb); }
.badge-alert { background: #fdedec; color: var(--rot); }
.objekt-kwh  { font-size: var(--font-size-xs); color: var(--muted); }
.media-dots  { display: flex; gap: 4px; margin-top: 3px; }
.media-pip   { width: 6px; height: 6px; border-radius: 50%; }

/* Alerts */
.alert-item { display: flex; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--creme-dunkel); align-items: flex-start; }
.alert-item:last-child { border-bottom: none; }
.alert-icon-wrap { width: 28px; height: 28px; border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: var(--font-size-base); }
.alert-icon-rot  { background: #fdedec; }
.alert-icon-gelb { background: #fef9e7; }
.alert-icon-blau { background: #eaf3fb; }
.alert-text  { flex: 1; }
.alert-title { font-size: var(--font-size-sm); font-weight: 500; color: var(--text-primary); }
.alert-desc  { font-size: var(--font-size-xs); color: var(--muted); margin-top: 2px; line-height: 1.4; letter-spacing: .03em; }
.alert-time  { font-size: 9px; color: var(--sand); white-space: nowrap; }

/* ── MODAL ──────────────────────────────────────────────────────────────── */

/* Achtung: `.modal` ist in dieser App das DIALOGFELD, nicht der Overlay-Container
   (`.modal-overlay`). Struktur deshalb unverändert; nur Optik neu kalibriert. */
.modal-overlay {
  position: fixed; inset: 0; background: var(--color-primary-900)5C;
  display: none; align-items: center; justify-content: center; z-index: 100;
  backdrop-filter: blur(2px);
}
.modal-overlay.open { display: flex; }
.modal {
  background: var(--white); border-radius: var(--radius-xl, 16px);
  width: 480px; max-width: 95vw; max-height: 85vh;
  overflow-y: auto; box-shadow: var(--shadow-xl);
  animation: fadeUp .2s ease;
}
.modal-header { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); padding: var(--space-4) var(--space-5) var(--space-3); border-bottom: 1px solid var(--border-subtle, var(--border)); }
.modal-title  { font-family: var(--vi-font-display); font-size: var(--text-lg, 17px); font-weight: var(--fw-semibold, 600); letter-spacing: -.01em; color: var(--text-primary); }
.modal-close  { background: none; border: none; font-size: var(--font-size-xl); color: var(--muted); cursor: pointer; padding: 4px; border-radius: var(--radius-md, 8px); }
.modal-close:hover { background: var(--gray-100); color: var(--text-primary); }
.modal-body   { padding: var(--space-5); }

/* ── FORMS ──────────────────────────────────────────────────────────────── */

.form-group { margin-bottom: 14px; }
/* Satzschreibung statt gesperrter Versalien (Produktdesign 16.08.2026, in Welle 1
   durchgesetzt): ein Label beschriftet sein Feld — es soll nicht lauter sein als
   der Wert darin. Versalien bleiben ausschließlich den Navigations-Abschnitts-
   überschriften vorbehalten. */
.form-label { display: block; font-size: var(--font-size-xs); letter-spacing: .01em; text-transform: none; color: var(--muted); margin-bottom: 5px; }
.form-input, .form-select {
  width: 100%; padding: 9px 12px;
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  font-family: var(--font-family-body); font-size: var(--font-size-md);
  background: var(--white); color: var(--text-primary);
  transition: border-color .15s;
}
.form-input:focus, .form-select:focus { outline: none; border-color: var(--gruen-hell); }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.form-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--border); }
.btn-secondary {
  font-family: var(--font-family-body); font-size: var(--font-size-sm); letter-spacing: .04em;
  padding: 9px 18px; background: var(--bg-primary);
  border: 1px solid var(--border); border-radius: var(--radius-sm); cursor: pointer;
  transition: all .15s;
}
.btn-secondary:hover { background: var(--white); border-color: var(--border-strong); }

.btn-link {
  background: none; border: none; cursor: pointer; padding: 0;
  color: var(--accent); font-size: var(--font-size-base); text-decoration: none;
  font-family: inherit;
}
.btn-link:hover { text-decoration: underline; }
.btn-sm { padding: 4px 10px !important; font-size: var(--text-xxs) !important; }

/* Filter row */
.filter-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; font-size: var(--font-size-base); }
.filter-row label { display: flex; align-items: center; gap: 6px; }
.filter-row select, .filter-row input[type="date"] {
  font-family: var(--font-family-body); font-size: var(--font-size-base);
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  padding: 5px 8px; background: var(--white);
}

/* ── TABLES (Stammdaten-Seiten) ─────────────────────────────────────────── */

.data-table { width: 100%; border-collapse: collapse; background: var(--white); border-radius: var(--radius-lg); overflow: hidden; box-shadow: 0 1px 3px var(--color-primary-900)08; }
/* (thead/th hier entfernt — kanonisch konsolidiert weiter unten, „DATA TABLE modernization") */
.data-table td { padding: 11px 16px; border-bottom: 1px solid var(--gray-100); font-size: var(--font-size-base); }
.data-table tr:last-child td { border-bottom: none; }
.data-table tr:hover td { background: #fafbff; }
.btn-del    { color: var(--rot);         background: none; border: none; cursor: pointer; font-size: var(--font-size-sm); padding: 2px 6px; font-family: var(--font-family-body); }
.btn-edit:hover, .btn-del:hover { text-decoration: underline; }

/* ── Filter-Gruppen (Prüfbericht-Filter; ehem. Zählerstände-Seite) ────────── */
.abs-filter-group { display: flex; flex-direction: column; gap: 4px; }
.abs-filter-label { font-size: var(--font-size-xs); letter-spacing: .07em; text-transform: uppercase; color: var(--muted); font-family: var(--font-family-body); }
.abs-filter-group .form-select, .abs-filter-group .form-input { font-size: var(--font-size-md); height: 36px; padding: 6px 10px; }
.matrix-row:hover .mc-interpolated { background: var(--green-50) !important; }
.matrix-row:hover .mc-projected { background: var(--color-warning-soft) !important; }

/* Readings-Matrix */
.matrix-scroll { overflow-x: auto; padding: 4px 0 2px; }
.matrix-month-th {
  width: 110px; padding: 10px 20px; text-align: left; background: var(--bg-primary);
  font-size: var(--font-size-xs); color: var(--muted); letter-spacing: .05em;
  border-bottom: 1px solid var(--border); white-space: nowrap;
  position: sticky; left: 0; z-index: 1;
}
.matrix-year-th {
  padding: 10px 16px; text-align: center; background: var(--bg-primary);
  font-size: var(--font-size-base); font-weight: 600; color: var(--text-primary);
  border-bottom: 2px solid var(--border);
  border-left: 2px solid var(--border);
}
.matrix-month-td {
  width: 110px; padding: 8px 20px; font-size: var(--font-size-sm); color: var(--text-primary); font-weight: 500;
  white-space: nowrap; background: var(--white);
  border-bottom: 1px solid var(--creme-dunkel);
  position: sticky; left: 0; z-index: 1;
}
.matrix-row:hover .matrix-month-td { background: var(--bg-primary); }
.matrix-row:hover .matrix-td       { background: var(--bg-input); }
.matrix-td {
  padding: 6px 16px; text-align: right; font-size: var(--font-size-sm);
  border-bottom: 1px solid var(--creme-dunkel); white-space: nowrap;
  vertical-align: top; border-left: 2px solid var(--border);
  font-family: var(--font-family-body);
}
.matrix-td-empty { text-align: center; color: var(--border); }
.matrix-dash { color: var(--border); }

.matrix-row:last-child .matrix-td,
.matrix-row:last-child .matrix-month-td { border-bottom: none; }
.matrix-row:hover .mc-issue-error { background: #fce4e1 !important; }
.matrix-row:hover .mc-issue-warn  { background: #fff5d6 !important; }
@keyframes mc-cell-pulse {
  0%   { box-shadow: inset 0 0 0 200px rgba(251,146,60,.85); }
  25%  { box-shadow: inset 0 0 0 200px rgba(253,211,77,.75); }
  65%  { box-shadow: inset 0 0 0 200px rgba(254,243,199,.5); }
  100% { box-shadow: inset 0 0 0 200px rgba(254,243,199,0); }
}
.form-hint     { font-size: var(--font-size-sm); color: var(--muted); margin-top: 4px; }
.stammdaten-table th { background: var(--gruen); color: var(--color-surface); text-transform: none; font-size: var(--text-xxs); letter-spacing: normal; }

/* Medium badges */
.badge-medium {
  display: inline-block; padding: 2px 8px; border-radius: var(--radius-lg);
  font-size: var(--font-size-xs); font-weight: 600; letter-spacing: .04em;
}
.badge-Strom        { background: var(--green-50); color: var(--green-600); }
.badge-Gas          { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.badge-Wasser       { background: var(--green-50); color: var(--green-800); }
.badge-Fernwärme    { background: #fce7f3; color: #9d174d; }
.badge-PV-Einspeisung { background: var(--text-inverse); color: var(--green-800); }

/* Objekte cards (Objekte-Seite) */
.objekt-card {
  background: var(--white); border: 1px solid var(--border);
  border-radius: var(--radius-lg); padding: 20px;
  transition: box-shadow .2s, transform .2s;
  box-shadow: var(--shadow-sm);
}
.objekt-card:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); }
.objekt-card-name { font-family: var(--vi-font-display); font-size: var(--font-size-xl); font-weight: 600; color: var(--gruen); margin-bottom: 4px; }
.objekt-card-addr { font-size: var(--font-size-sm); color: var(--muted); margin-bottom: 12px; }
.objekt-card-footer { display: flex; justify-content: space-between; align-items: center; padding-top: 12px; border-top: 1px solid var(--border); }

/* Import result */
.import-ok  { color: var(--green-800); background: var(--green-50); padding: 10px 16px; border-radius: var(--radius-sm); font-size: var(--font-size-base); }
.import-err { color: var(--color-danger-ink); background: var(--color-danger-soft); padding: 10px 16px; border-radius: var(--radius-sm); font-size: var(--font-size-base); }

/* Toast — kurze Rückmeldung, dunkle neutrale Fläche.
   Bewusst NICHT in Markengrün: eine Rückmeldung ist keine Aktion und soll nicht mit
   der Primäraktion um dieselbe Farbe konkurrieren; die Erfolgs-/Fehlervarianten
   (.toast-info/.toast-warn/.toast-err) tragen die Bedeutung. */
.toast {
  position: fixed; bottom: 24px; right: 24px;
  background: var(--gray-900, #141A17); color: var(--color-surface);
  padding: 11px 18px; border-radius: var(--radius-md, 8px);
  font-size: var(--text-md, 14px); font-weight: var(--fw-medium, 500); letter-spacing: 0;
  box-shadow: var(--shadow-lg);
  opacity: 0; pointer-events: none; transition: opacity .3s;
  z-index: 9999;
}
.toast.show { opacity: 1; }

/* ── EMPTY STATES ───────────────────────────────────────────────────────── */

.empty-state {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 48px 24px; gap: 12px; text-align: center;
}
.empty-state-icon {
  width: 52px; height: 52px; border-radius: var(--radius-xl);
  display: flex; align-items: center; justify-content: center;
  background: var(--bg-primary); color: var(--subtle);
  margin-bottom: 4px;
}
.empty-state-icon svg { width: 26px; height: 26px; }
.empty-state-title { font-size: var(--font-size-lg); font-weight: 600; color: var(--text-primary); }
.empty-state-sub   { font-size: var(--font-size-base); color: var(--muted); max-width: 260px; line-height: 1.5; }
.empty-state-action {
  margin-top: 8px; font-size: var(--font-size-base); font-weight: 600;
  color: var(--gruen-hell); cursor: pointer; text-decoration: none;
}
.empty-state-action:hover { text-decoration: underline; text-underline-offset: 3px; }

/* ── STATUS PILLS (modern) ──────────────────────────────────────────────── */

.pill {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 8px; border-radius: var(--radius-pill); font-size: var(--font-size-sm); font-weight: 600;
  white-space: nowrap;
}

/* ── DATA TABLE modernization ───────────────────────────────────────────── */

.data-table tr:hover td { background: var(--bg-input); }

/* Animations */
@keyframes fadeUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }

/* Responsive */
@media (max-width: 900px) {
  .sidebar { width: 180px; }
}
@media (max-width: 640px) {
  .sidebar { display: none; }
  .content { padding: 16px; }
  .topbar  { padding: 0 16px; }
}

/* ── Navigation Badge / „geplant" / Sektionen ──────────────────────────────
   Vollständig token-basiert oben im SIDEBAR-Block (Design-Spez v0.2.0) definiert.
   Hier nur noch die gemeinsame Positionierungsbasis. ── */
.nav-item { position: relative; }

/* ── Prüfbericht Seite ───────────────────────────────────────────────────── */
.pruef-count { display: inline-flex; align-items: center; padding: 7px 18px; border-radius: var(--radius-xl); font-size: var(--font-size-md); font-weight: 600; }
.pruef-count-error { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.pruef-count-warn  { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.pruef-count-info  { background: var(--green-50); color: var(--green-700); }
.pruef-count-ok    { background: var(--green-50); color: var(--green-800); }
.pruef-all-ok { color: var(--muted); font-size: var(--font-size-lg); padding: 64px 0; text-align: center; }

.pruef-obj-block { background: var(--white); border: 1px solid var(--border); border-radius: var(--radius-lg); margin-bottom: 16px; overflow: hidden; }
.pruef-obj-header { display: flex; align-items: center; gap: 10px; padding: 14px 18px; background: var(--bg-primary); border-bottom: 1px solid var(--border); }
.pruef-obj-name { font-weight: 700; font-size: var(--font-size-lg); flex: 1; }
.pruef-badge { font-size: var(--font-size-sm); font-weight: 600; padding: 2px 10px; border-radius: var(--radius-lg); }
.pruef-badge-error { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.pruef-badge-warn  { background: var(--color-warning-soft); color: var(--color-warning-ink); }

.pruef-issues { padding: 0 18px; }
.pruef-issue { display: flex; align-items: flex-start; gap: 12px; padding: 14px 0; border-bottom: 1px solid var(--border); }
.pruef-issue:last-child { border-bottom: none; }
.pruef-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; margin-top: 5px; }
.pruef-dot-error { background: var(--color-danger); }
.pruef-dot-warn  { background: var(--color-warning); }
.pruef-dot-info  { background: var(--green-600); }
.pruef-issue-body { flex: 1; min-width: 0; }
.pruef-issue-meta { font-size: var(--font-size-sm); color: var(--muted); margin-bottom: 3px; }
.pruef-malo-id { font-family: var(--font-family-body); background: var(--creme); padding: 1px 5px; border-radius: 3px; font-size: var(--font-size-xs); }
.pruef-issue-type { font-size: var(--font-size-base); font-weight: 700; color: var(--text-primary); margin-bottom: 3px; }
.pruef-issue-msg { font-size: var(--font-size-base); color: var(--gray-700); line-height: 1.5; }
.pruef-issue-actions { display: flex; gap: 6px; flex-shrink: 0; padding-top: 2px; }

/* ── Dashboard Auffälligkeiten-Karte ────────────────────────────────────── */
/* ── Prüfbericht-Karte (Dashboard) ─────────────────────────────────────── */
.pruef-card-ok {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 32px 16px; gap: 6px; text-align: center;
}
.pruef-card-ok-icon { font-size: var(--text-2xl); color: var(--gruen-hell); }
.pruef-card-ok-text { font-size: var(--text-base); font-weight: 600; color: var(--gruen); }
.pruef-card-ok-sub  { font-size: var(--font-size-sm); color: var(--muted); }

.pruef-card-counts { display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
.pruef-card-pill {
  font-size: var(--font-size-sm); font-weight: 700; padding: 3px 10px; border-radius: var(--radius-xl);
}
.pruef-card-pill-error { background: #fde8e8; color: #b71c1c; }
.pruef-card-pill-warn  { background: #fff3e0; color: #bf360c; }

.pruef-card-row {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 8px 0; border-top: 1px solid var(--creme-dunkel);
  cursor: pointer; transition: background .1s; border-radius: 4px;
}
.pruef-card-row:hover { background: var(--creme); }
.pruef-card-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; margin-top: 4px; }
.pruef-card-dot-error { background: var(--color-danger); }
.pruef-card-dot-warn  { background: var(--color-warning); }
.pruef-card-info { min-width: 0; }
.pruef-card-obj { font-size: var(--font-size-base); font-weight: 600; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pruef-card-msg { font-size: var(--font-size-sm); color: var(--muted); line-height: 1.4; margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pruef-card-more {
  margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--creme-dunkel);
  font-size: var(--font-size-sm); color: var(--gruen-mid); cursor: pointer; text-align: center;
  font-weight: 600;
}
.pruef-card-more:hover { color: var(--gruen); }

/* ── Prüfbericht — Sektionen & Tabelle ──────────────────────────────────── */
.pruef-section-title { font-size: var(--font-size-sm); font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); margin-bottom: 14px; }
.pruef-table-wrap { overflow-x: auto; }
.pruef-table { width: 100%; border-collapse: collapse; font-size: var(--font-size-base); background: var(--white); border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; }
.pruef-table thead th { background: var(--creme); padding: 9px 12px; text-align: left; font-size: var(--font-size-xs); font-weight: 700; letter-spacing: normal; text-transform: none; color: var(--muted); border-bottom: 1px solid var(--border); white-space: nowrap; }
.pruef-table tbody tr { border-bottom: 1px solid var(--border); }
.pruef-table tbody tr:last-child { border-bottom: none; }
.pruef-table tbody tr:hover { background: #fafaf8; }
.pruef-sev-td, .pruef-obj-td, .pruef-type-td, .pruef-malo-td, .pruef-msg-td, .pruef-act-td { padding: 10px 12px; vertical-align: middle; }
.pruef-obj-td { font-weight: 600; white-space: nowrap; }
.pruef-type-td { white-space: nowrap; font-weight: 600; color: var(--text-primary); }
.pruef-msg-td { color: var(--gray-700); line-height: 1.4; max-width: 360px; }
.pruef-act-td { white-space: nowrap; }

.pruef-sev-badge { display: inline-block; font-size: var(--font-size-xs); font-weight: 700; padding: 2px 8px; border-radius: var(--radius-lg); }
.pruef-sev-error { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.pruef-sev-warn  { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.pruef-sev-info  { background: var(--green-50); color: var(--green-700); }

/* ── Prüfbericht — Filter-Bar ────────────────────────────────────────────── */
.pruef-filter-bar { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 20px; background: var(--white); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 14px 16px; box-shadow: var(--shadow-xs); }

/* ── Prüfbericht — Medium-Tag & Bezeichnung ─────────────────────────────── */
.pruef-medium-tag { display: inline-block; font-size: var(--font-size-xs); font-weight: 600; padding: 1px 7px; border-radius: var(--radius-lg); margin-right: 5px; background: #f0f0ec; color: var(--muted); }
.pruef-medium-strom      { background: var(--green-50); color: var(--green-600); }
.pruef-medium-gas        { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.pruef-medium-wasser     { background: #DCEFF2; color: #27768A; }
.pruef-medium-fernwrme   { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.pruef-medium-pveinspeisung { background: var(--green-50); color: var(--green-800); }
.pruef-bez { font-size: var(--font-size-sm); color: var(--muted); margin-right: 5px; }

/* ── Prüfbericht — Ignorieren ────────────────────────────────────────────── */
.pruef-count-ignored { background: var(--gray-100); color: var(--gray-500); }
.pruef-issue-ignored { opacity: .6; background: var(--gray-50) !important; }
.pruef-issue-ignored .pruef-issue-msg,
.pruef-issue-ignored .pruef-issue-type,
.pruef-issue-ignored .pruef-bez,
.pruef-issue-ignored .pruef-malo-id { text-decoration: line-through; color: var(--gray-500) !important; }
.pruef-issue-ignored .pruef-medium-tag { opacity: .45; }
.pruef-issue-ignored .pruef-dot { opacity: .3; }
.pruef-issue-fading  { opacity: 0; transition: opacity .35s ease; }
.pruef-filter-toggle { display: flex; align-items: flex-end; padding-bottom: 2px; }

/* ── Prüfbericht — Action Buttons ───────────────────────────────────────── */
.pruef-btn {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 10px; border-radius: var(--radius-sm); font-size: var(--text-xxs);
  font-family: var(--font-family-body);
  font-weight: 500; cursor: pointer; border: none;
  transition: background .15s, box-shadow .15s;
  white-space: nowrap;
}
.pruef-btn-action {
  background: var(--color-electricity); color: var(--color-surface);
  box-shadow: 0 1px 3px rgba(37,99,235,.25);
}
.pruef-btn-action:hover { background: var(--green-600); box-shadow: 0 2px 6px rgba(37,99,235,.35); }
.pruef-btn-ignore {
  background: var(--gray-100); color: var(--gray-500);
  border: 1px solid var(--vi-border);
}
.pruef-btn-ignore:hover { background: #e9eaeb; color: var(--gray-700); }
.pruef-btn-restore {
  background: var(--green-50); color: var(--green-700);
  border: 1px solid var(--green-300);
}
.pruef-btn-restore:hover { background: var(--green-200); color: var(--green-900); }

/* ══════════════════════════════════════════════════════════════════════════════
   AUSWERTUNGEN
══════════════════════════════════════════════════════════════════════════════ */

.aw-loading { color: var(--muted); font-size: var(--font-size-md); padding: 40px 0; text-align: center; }
.aw-empty   { color: var(--muted); font-size: var(--font-size-md); padding: 40px 0; text-align: center; }

/* ── KPI-Kacheln ────────────────────────────────────────────────────────────── */
.aw-kpi-row {
  display: flex; gap: 14px; flex-wrap: wrap; margin-bottom: 18px;
}
.aw-kpi-card {
  background: var(--white); border: 1px solid var(--border); border-radius: var(--radius-lg);
  padding: 18px 22px; min-width: 160px; flex: 1;
  box-shadow: var(--shadow-sm);
}
.aw-kpi-top  { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.aw-kpi-medium { font-size: var(--font-size-sm); font-weight: 600; letter-spacing: .07em; text-transform: uppercase; color: var(--muted); }
.aw-kpi-val  { font-family: var(--vi-font-display); font-size: var(--font-size-5xl); font-weight: 300; color: var(--text-primary); line-height: 1; }
.aw-kpi-unit { font-size: var(--font-size-sm); color: var(--muted); margin-top: 3px; margin-bottom: 6px; }

/* ── Steuerleiste ───────────────────────────────────────────────────────────── */
.aw-controls {
  display: flex; gap: 24px; flex-wrap: wrap; align-items: flex-start;
  background: var(--white); border: 1px solid var(--border);
  border-radius: var(--radius-lg); padding: 16px 20px; margin-bottom: 20px;
  box-shadow: var(--shadow-xs);
}
.aw-ctrl-group { display: flex; flex-direction: column; gap: 8px; }
.aw-ctrl-label {
  font-size: var(--font-size-xs); font-weight: 600; letter-spacing: .08em;
  text-transform: uppercase; color: var(--muted);
}
.aw-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.aw-chip {
  padding: 5px 12px; border-radius: var(--radius-xl); font-size: var(--font-size-base);
  font-family: var(--font-family-body);
  cursor: pointer; border: 1px solid var(--border);
  background: var(--bg-primary); color: var(--muted);
  transition: background .12s, color .12s, border-color .12s;
  user-select: none;
}
.aw-chip:hover  { background: var(--creme-dunkel); color: var(--text-primary); }
.aw-chip-on     { background: var(--vi-green-soft); color: var(--vi-green-deep); border-color: var(--vi-green-soft); }
.aw-chip-on:hover { background: #c7ddd0; }
.aw-chip-partial { font-size: 9px; opacity: .7; vertical-align: super; margin-left: 1px; }


/* Row */
.vp-list { display: flex; flex-direction: column; gap: 5px; }
.vp-row-open  { border-color: var(--gruen-hell); box-shadow: 0 2px 12px rgba(29,61,43,.1); }
.vp-row-main {
  display: grid;
  grid-template-columns: 20px 180px 100px 120px 70px 70px 60px 60px 50px 130px 120px 90px 1fr 28px;
  gap: 8px; padding: 11px 14px;
  cursor: pointer; align-items: center;
  transition: background .1s;
  overflow-x: auto;
}
.vp-row-main:hover     { background: #fafaf6; }
.vp-row-open .vp-row-main { background: #f3faf5; }
.vp-row-open .vp-expand-chevron { color: var(--gruen-mid); }
.vp-det-inner {
  padding: 20px; display: grid; gap: 20px;
}

/* Detail sections */
.vp-det-section { }
.vp-det-title {
  font-size: var(--font-size-xs); letter-spacing: .1em; text-transform: uppercase;
  color: var(--gruen-mid); font-weight: 700;
  margin-bottom: 10px; padding-bottom: 5px;
  border-bottom: 1px solid var(--border);
}
.vp-det-empty { font-size: var(--font-size-base); color: var(--muted); padding: 6px 0; }

/* Detail tables */
.vp-det-table-scroll { overflow-x: auto; }
.vp-det-table {
  width: 100%; border-collapse: collapse; font-size: var(--font-size-base);
}
.vp-det-table th {
  background: var(--creme); padding: 6px 10px; text-align: left;
  font-size: var(--font-size-xs); letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted); font-weight: 600; border-bottom: 1px solid var(--border);
  white-space: nowrap;
}
.vp-det-table td {
  padding: 7px 10px; border-bottom: 1px solid #f0ede8; vertical-align: middle;
}
.vp-det-table tr:last-child td { border-bottom: none; }

.vp-badge {
  display: inline-block; padding: 3px 8px; border-radius: var(--radius-lg);
  font-size: 9px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; white-space: nowrap;
}

/* Wechselstatus badges (used in detail tables) */
.vp-ws-badge {
  display: inline-block; padding: 2px 8px; border-radius: var(--radius-xl);
  font-size: var(--font-size-xs); white-space: nowrap;
}
.ws-confirmed { background: var(--green-50); color: var(--green-800); }
.ws-suspected { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.ws-unknown   { background: var(--gray-100); color: var(--gray-500); }

/* Responsive: ab 900px kompakter */
@media (max-width: 1100px) {
  .vp-table-header,
  .vp-row-main {
    grid-template-columns: 20px 1fr 90px 140px 0 120px 110px 160px 28px;
  }
}
@media (max-width: 860px) {
  .vp-row-main {
    grid-template-columns: 20px 1fr 90px 1fr 100px 28px;
    grid-template-areas: "status vs med meter reading actions expand";
  }
}

/* ── PV-Anlagen ─────────────────────────────────────────────────────────────── */

.pv-kpi-row   { margin-bottom: 0; }
.pv-kpi-card  { min-width: 150px; }
.pv-kpi-icon  { font-size: var(--text-base); line-height: 1; }

.pv-card {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  margin-bottom: 16px;
  overflow: hidden;
}
.pv-card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 20px 12px;
  border-bottom: 1px solid var(--border);
  background: #fafaf8;
}
.pv-card-name { font-size: var(--font-size-lg); font-weight: 600; color: var(--text-primary); }
.pv-card-jahr { font-size: var(--font-size-sm); color: var(--muted); background: var(--border); padding: 2px 8px; border-radius: 4px; }

.pv-card-body {
  display: flex;
  gap: 0;
  padding: 0;
}
.pv-card-left  { flex: 1; padding: 18px 20px; border-right: 1px solid var(--border); }
.pv-card-right { width: 150px; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 20px 14px; gap: 6px; }

/* Kennzahlen-Liste */
.pv-stats      { display: flex; flex-direction: column; gap: 7px; margin-bottom: 18px; }
.pv-stat       { display: flex; align-items: center; gap: 8px; }
.pv-stat-dot   { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.pv-stat-label { font-size: var(--font-size-base); color: var(--muted); flex: 1; }
.pv-stat-val   { font-size: var(--text-xs); font-weight: 600; color: var(--text-primary); }

/* Stacked Balken */
.pv-bar-group  { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.pv-bar-label  { font-size: var(--font-size-xs); color: var(--muted); width: 68px; flex-shrink: 0; text-align: right; }
.pv-bar-track  { flex: 1; height: 14px; background: var(--gray-100); border-radius: 4px; overflow: hidden; }
.pv-bar-outer  { height: 100%; display: flex; border-radius: 4px; overflow: hidden; transition: width .4s; }
.pv-bar-eig    { background: var(--color-primary-600); height: 100%; }
.pv-bar-eins   { background: var(--color-warning); height: 100%; }
.pv-bar-zuk    { background: var(--color-electricity); height: 100%; opacity: .6; border-radius: 4px; transition: width .4s; }

/* Sparkline */
.pv-spark-wrap { margin-top: 14px; }
.pv-spark-svg  { width: 100%; display: block; }

/* EVQ-Ring */
.pv-evq-ring-wrap { width: 82px; height: 82px; }
.pv-evq-svg       { width: 100%; height: 100%; }
.pv-evq-label     { font-size: var(--font-size-xs); color: var(--muted); text-align: center; line-height: 1.3; }

/* ── MODAL-LG (Import-Wizard) ──────────────────────────────────────────────── */

.modal-lg { width: 760px !important; max-width: 96vw !important; }

/* ── MODAL-AKTE (Auftragsakte, 10.09.2026) ─────────────────────────────────────
   Eine MASKE führt durch eine Eingabe — 760 px sind dafür genau richtig, und
   `.modal-lg` bleibt deshalb, wie es ist. Eine AKTE zeigt einen ganzen Datensatz
   mit Kopf, Reitern und Fachkarten; in 760 px standen davon drei Karten à 215 px
   nebeneinander (Nutzerbefund 10.09.2026: „alles so gequetscht").
   Wer die Klasse setzt, muss sie in `closeModal()` wieder abnehmen — das Fenster
   ist ein Singleton und beherbergt Dutzende weiterer Masken. */
.modal-akte { width: min(1180px, 94vw) !important; max-width: 94vw !important; }
.meter-tab-active { color: var(--gruen); border-bottom-color: var(--gruen); }
.dok-filter-bar .form-input,
.dok-filter-bar .form-select {
  width: auto !important;   /* override form-select width:100% */
  height: 34px; padding: 4px 10px; font-size: var(--font-size-md);
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: var(--bg-panel); color: var(--text-primary);
}

/* ── Document Table ── */
.dok-table-wrap { overflow-x: auto; }
.dok-table {
  width: 100%; border-collapse: collapse; font-size: var(--font-size-md);
}
.dok-table th {
  text-align: left; padding: 7px 10px;
  font-size: var(--font-size-sm); font-weight: 600; color: var(--muted);
  text-transform: uppercase; letter-spacing: .04em;
  border-bottom: 2px solid var(--border);
  white-space: nowrap;
}
.dok-table td {
  padding: 9px 10px; border-bottom: 1px solid var(--border);
  vertical-align: middle;
}
.dok-table tr:hover td { background: #f6f8fb; }
.dok-table-empty {
  text-align: center; padding: 48px 0;
  color: var(--muted); font-size: var(--font-size-lg);
}

/* ── Type Badge ── */
.dok-type-badge {
  display: inline-block; padding: 2px 8px;
  border-radius: var(--radius-lg); font-size: var(--font-size-sm); font-weight: 600;
  white-space: nowrap;
}
.dok-type-contract    { background: #e8f4fd; color: #1a6aa0; }
.dok-type-invoice     { background: #fef3e2; color: var(--color-warning-ink); }
.dok-type-plan        { background: var(--text-inverse); color: var(--green-800); }
.dok-type-letter      { background: #f5f0ff; color: var(--color-info); }
.dok-type-termination { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.dok-type-sepa        { background: var(--text-inverse); color: var(--green-800); }
.dok-type-other       { background: var(--bg-primary); color: var(--gray-700); }

/* ── Status Badge ── */
.dok-status-badge {
  display: inline-block; padding: 2px 7px;
  border-radius: var(--radius-lg); font-size: var(--font-size-sm); font-weight: 500;
  white-space: nowrap;
}
.dok-status-active    { background: var(--green-50); color: var(--color-success-ink); }
.dok-status-archived  { background: var(--bg-primary); color: var(--text-subtle); }
.dok-status-draft     { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.dok-status-replaced  { background: var(--color-info-soft); color: var(--color-info-ink); }
.dok-status-review    { background: var(--color-warning-soft); color: #c2410c; }
.dok-status-reviewed  { background: var(--text-inverse); color: var(--green-800); }
.dok-status-disputed  { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.dok-status-terminated{ background: var(--bg-primary); color: var(--text-muted); }
.dok-status-expired   { background: var(--bg-primary); color: var(--text-muted); }

/* ── Upload-Modal ── */
.dok-upload-form { display: flex; flex-direction: column; gap: 0; }
.dok-upload-dropzone {
  border: 2px dashed var(--border); border-radius: var(--radius-lg);
  padding: 28px 16px; text-align: center;
  cursor: pointer; transition: border-color .15s, background .15s;
  margin-bottom: 16px;
  background: #fafbfc;
}
.dok-upload-dropzone:hover,
.dok-upload-dropzone.drag-over { border-color: var(--accent); background: #f0f7ff; }
.dok-upload-dropzone-icon { font-size: var(--text-2xl); margin-bottom: 6px; }
.dok-upload-dropzone-text { font-size: var(--font-size-md); color: var(--muted); }
.dok-upload-dropzone-name { font-size: var(--font-size-md); font-weight: 500; color: var(--text-primary); margin-top: 4px; }
#dok-file-input { display: none; }

.dok-form-row { display: flex; gap: 12px; }
.dok-form-row .form-group { flex: 1; }
.dok-form-section-title {
  font-size: var(--font-size-sm); font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: .05em;
  margin: 16px 0 8px; padding-bottom: 4px;
  border-bottom: 1px solid var(--border);
}

.dok-assign-row {
  display: flex; gap: 8px; align-items: flex-end;
  padding: 6px 0; border-bottom: 1px solid #f0f2f4;
}
.dok-assign-row:last-child { border-bottom: none; }
.dok-assign-type { font-size: var(--font-size-sm); color: var(--muted); min-width: 80px; }
.dok-assign-val  { font-size: var(--font-size-md); font-weight: 500; flex: 1; }
.dok-assign-del  {
  background: none; border: none; cursor: pointer;
  color: var(--muted); font-size: var(--font-size-lg); padding: 2px 4px;
}
.dok-assign-del:hover { color: var(--color-red-600); }

/* ── Detail-Modal ── */
.dok-detail-header {
  display: flex; align-items: flex-start; gap: 12px;
  padding-bottom: 14px; border-bottom: 1px solid var(--border);
  margin-bottom: 14px;
}
.dok-detail-icon {
  width: 40px; height: 40px; border-radius: var(--radius-lg);
  display: flex; align-items: center; justify-content: center;
  font-size: var(--font-size-3xl); flex-shrink: 0; background: var(--color-info-soft);
}
.dok-detail-title { font-size: var(--font-size-xl); font-weight: 600; color: var(--text-primary); }
.dok-detail-badges { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 5px; }
.dok-detail-meta {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px;
  font-size: var(--font-size-md); margin-bottom: 14px;
}
.dok-detail-meta-item { display: flex; flex-direction: column; gap: 2px; }
.dok-detail-meta-label { font-size: var(--font-size-sm); color: var(--muted); font-weight: 600; text-transform: uppercase; }
.dok-detail-meta-val { color: var(--text-primary); }
.dok-detail-file-row {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px; background: #f6f8fb;
  border-radius: var(--radius-md); border: 1px solid var(--border);
  margin-bottom: 14px;
}
.dok-detail-file-icon { font-size: var(--font-size-3xl); }
.dok-detail-file-name { font-weight: 500; font-size: var(--font-size-md); flex: 1; }
.dok-detail-file-size { font-size: var(--font-size-sm); color: var(--muted); }

/* ── Context-Section in VP/Object-Detail ── */
.dok-ctx-section {
  border-top: 1px solid var(--border); padding-top: 14px; margin-top: 14px;
}
.dok-ctx-title {
  font-size: var(--font-size-base); font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: .05em; margin-bottom: 8px;
}
.dok-ctx-list { display: flex; flex-direction: column; gap: 5px; }
.dok-ctx-item {
  display: flex; align-items: flex-start; gap: 9px;
  padding: 8px 10px; border-radius: var(--radius-sm);
  background: var(--bg-input); border: 1px solid var(--border);
  font-size: var(--font-size-base); cursor: pointer; transition: background .1s, border-color .1s;
}
.dok-ctx-item:hover { background: #eef5ff; border-color: #bdd3f8; }
.dok-ctx-item-icon  { font-size: var(--font-size-2xl); line-height: 1; flex-shrink: 0; margin-top: 1px; }
.dok-ctx-item-main  { flex: 1; min-width: 0; }
.dok-ctx-item-toprow {
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap; margin-bottom: 3px;
}
.dok-ctx-item-title { font-weight: 600; font-size: var(--font-size-base); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; }
.dok-ctx-item-info  {
  display: flex; flex-wrap: wrap; gap: 3px 10px;
  font-size: var(--text-xxs); color: var(--muted);
}
.dok-ctx-info-chip { display: inline-flex; align-items: center; gap: 3px; white-space: nowrap; }
.dok-ctx-info-chip .ci-lbl { color: #aaa; font-size: 9.5px; text-transform: uppercase; letter-spacing: .06em; }
.dok-ctx-add-btn {
  font-size: var(--font-size-base); color: var(--accent); background: none; border: none;
  cursor: pointer; padding: 4px 0; text-align: left;
  display: flex; align-items: center; gap: 4px;
}
.dok-ctx-add-btn:hover { text-decoration: underline; }
.dok-ctx-empty { font-size: var(--font-size-base); color: var(--muted); padding: 4px 0; }

/* ════════════════════════════════════════════════════════════════════════════
   RECHNUNGSPRÜFUNG
   ════════════════════════════════════════════════════════════════════════════ */

/* ── KPI-Leiste ── */
.rech-kpi-row {
  display: flex; gap: 12px; margin-bottom: 16px; flex-wrap: wrap;
}
.rech-kpi-card {
  flex: 1; min-width: 100px;
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg);
  padding: 14px 16px; cursor: pointer; transition: box-shadow .15s, border-color .15s;
  text-align: center;
}
.rech-kpi-card:hover { border-color: var(--primary); box-shadow: 0 2px 8px rgba(0,0,0,.08); }
.rech-kpi-num { font-size: 26px; font-weight: 800; line-height: 1; margin-bottom: 4px; color: var(--text-primary); }
.rech-kpi-lbl { font-size: var(--font-size-sm); color: var(--muted); }
.rech-kpi-warn  { border-left: 3px solid var(--color-warning); }
.rech-kpi-warn .rech-kpi-num { color: var(--color-amber-600); }
.rech-kpi-info  { border-left: 3px solid var(--green-600); }
.rech-kpi-info .rech-kpi-num  { color: var(--color-electricity); }
.rech-kpi-ok    { border-left: 3px solid var(--color-success-ink); }
.rech-kpi-ok .rech-kpi-num    { color: var(--color-green-600); }
.rech-kpi-err   { border-left: 3px solid var(--color-danger); }
.rech-kpi-err .rech-kpi-num   { color: var(--color-red-600); }
.rech-kpi-korr  { border-left: 3px solid #a855f7; }
.rech-kpi-korr .rech-kpi-num  { color: #9333ea; }

/* Reiter: kanonisches Tab-System (.vi-tabs/.vi-tab, ui-standard.css §3).
   Die frühere .rech-tab-Bar in Pill-/Segment-Optik ist entfallen — kein zweites Tab-Design. */

/* ── Filter-Bar ── */
.rech-filter-bar {
  display: flex; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; align-items: center;
}

/* ── Sammelaktion-Bar ── */
.rech-bulk-bar {
  display: flex; align-items: center; gap: 8px;
  background: var(--green-50); border: 1px solid var(--green-50); border-radius: var(--radius-md);
  padding: 8px 14px; margin-bottom: 8px; flex-wrap: wrap;
}
.rech-bulk-count {
  font-size: var(--font-size-md); font-weight: 600; color: var(--green-600); flex: 1;
}

/* ── VIC-Chip ── */
.rech-vic-chip {
  display: inline-block; padding: 2px 8px; border-radius: var(--radius-sm);
  background: var(--color-info-soft); color: var(--color-info-ink); font-size: var(--text-xxs); font-weight: 700;
  letter-spacing: .04em;
}
.dark-mode .rech-vic-chip { background: #1e1b4b; color: #a5b4fc; }

/* ── Duplikat-Badge ── */
.rech-dup-badge {
  display: inline-block; padding: 2px 7px; border-radius: var(--radius-sm);
  background: var(--color-warning-soft); color: var(--color-warning-ink); font-size: var(--text-xxs); font-weight: 700;
  margin-left: 4px;
}

/* ── Status-Badges ── */
.rech-status-badge {
  display: inline-block; padding: 3px 10px; border-radius: var(--radius-lg);
  font-size: var(--font-size-sm); font-weight: 700; white-space: nowrap;
}
.rech-status-badge-sm { padding: 2px 7px; font-size: var(--font-size-xs); }
.rech-s-bearbeitung { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.rech-s-geprueft    { background: var(--green-50); color: var(--green-600); }
.rech-s-freigegeben { background: var(--green-50); color: var(--color-success-ink); }
.rech-s-bezahlt     { background: var(--green-50); color: var(--green-800); font-weight: 800; }
.rech-s-abgelehnt   { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.rech-s-rueckfrage  { background: #f3e8ff; color: #7e22ce; }
.rech-s-archiviert  { background: var(--bg-primary); color: var(--text-muted); }
/* Legacy-Klassen (rückwärtskompatibl) */
.rech-s-pruefung    { background: var(--green-50); color: var(--green-600); }
.rech-s-keine       { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.rech-s-korrektur   { background: #f3e8ff; color: #7e22ce; }

/* ── Detail-Header ── */
.rech-detail-header {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  margin-bottom: 18px; padding-bottom: 14px; border-bottom: 1px solid var(--border);
}
.rech-detail-title-row { display: flex; align-items: center; gap: 10px; flex: 1; flex-wrap: wrap; }
.rech-detail-vic { font-size: var(--text-xl); font-weight: 800; color: var(--primary); }
.rech-detail-actions { display: flex; gap: 8px; flex-wrap: wrap; }

/* ── Aktions-Buttons ── */
.rech-btn-freigabe {
  padding: 7px 14px; border-radius: var(--radius-sm); border: none; cursor: pointer;
  background: var(--color-success-ink); color: var(--color-surface); font-weight: 700; font-size: var(--text-xs);
  transition: background .12s;
}
.rech-btn-freigabe:hover { background: var(--color-green-600); }
.rech-btn-keine {
  padding: 7px 14px; border-radius: var(--radius-sm); border: none; cursor: pointer;
  background: var(--color-danger); color: var(--color-surface); font-weight: 700; font-size: var(--text-xs);
  transition: background .12s;
}
.rech-btn-keine:hover { background: var(--color-red-600); }
.rech-btn-korrektur {
  padding: 7px 14px; border-radius: var(--radius-sm); border: 1px solid #a855f7; cursor: pointer;
  background: #f3e8ff; color: #7e22ce; font-weight: 700; font-size: var(--text-xs);
  transition: background .12s;
}
.rech-btn-korrektur:hover { background: #e9d5ff; }
.rech-btn-pruefung {
  padding: 7px 14px; border-radius: var(--radius-sm); border: none; cursor: pointer;
  background: var(--green-600); color: var(--color-surface); font-weight: 700; font-size: var(--text-xs);
  transition: background .12s;
}
.rech-btn-pruefung:hover { background: var(--color-electricity); }
.rech-btn-bezahlt {
  padding: 7px 14px; border-radius: var(--radius-sm); border: none; cursor: pointer;
  background: var(--color-success-ink); color: var(--color-surface); font-weight: 700; font-size: var(--text-xs);
  transition: background .12s;
}
.rech-btn-bezahlt:hover { background: var(--color-success-ink); }

/* ── KPI neue Farben ── */
.rech-kpi-bezahlt { border-left: 3px solid var(--color-success-ink); }
.rech-kpi-bezahlt .rech-kpi-num { color: var(--color-success-ink); }
.rech-kpi-info .rech-kpi-num { color: var(--color-electricity); }

/* ── Duplikat-Hinweis-Card ── */
.rech-dup-card {
  background: var(--color-warning-soft); border: 1px solid #fed7aa;
  border-radius: var(--radius-md); padding: 10px 14px; margin-bottom: 12px;
}
.rech-dup-info { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.rech-dup-icon { font-size: var(--font-size-2xl); color: var(--color-amber-600); flex-shrink: 0; }
.rech-dup-text { flex: 1; font-size: var(--text-xs); display: flex; flex-direction: column; gap: 2px; }
.rech-dup-text strong { color: var(--color-warning-ink); }
.rech-dup-text span   { color: var(--color-warning-ink); }

/* ── Betrag-Validierung ── */
.rech-val-warn { border-color: var(--color-warning) !important; background: var(--color-warning-soft) !important; }
.rech-val-ok   { border-color: var(--color-success-ink) !important; }
.rech-val-hint { font-size: var(--font-size-sm); color: var(--color-amber-600); margin-top: 3px; }

/* ── Toast Varianten ── */
.toast-warn { background: var(--color-amber-600) !important; }
.toast-err  { background: var(--color-red-600) !important; }

/* ── Detail-Body: 2-Spalten-Layout ── */
.rech-detail-body {
  display: grid; grid-template-columns: 420px 1fr;
  gap: 20px; align-items: start;
}
@media (max-width: 1100px) {
  .rech-detail-body { grid-template-columns: 1fr; }
}

/* ── Linke Spalte: PDF-Vorschau ── */
.rech-preview-card {
  background: var(--card); border: 1px solid var(--border);
  border-radius: var(--radius-lg); overflow: hidden;
}
.rech-preview-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 10px 14px; border-bottom: 1px solid var(--border);
  font-weight: 600; font-size: var(--font-size-md);
}
.rech-file-preview { min-height: 300px; background: #f7fafc; }
.rech-pdf-iframe { width: 100%; height: 560px; border: none; display: block; }
.rech-img-preview { width: 100%; max-height: 560px; object-fit: contain; display: block; }
.rech-no-file {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  min-height: 280px; color: var(--muted); font-size: var(--font-size-md); gap: 6px;
}
.rech-no-file-icon { font-size: 40px; opacity: .4; }
.rech-file-info {
  padding: 8px 14px; border-top: 1px solid var(--border);
  display: flex; align-items: center; gap: 8px; font-size: var(--text-xxs); color: var(--muted);
}
.rech-file-badge { font-weight: 600; color: var(--text-primary); }
.rech-file-size  { color: var(--muted); }

/* ── KI-Card ── */
/* ── KI-Vorschläge: Card ── */
.rech-ai-card {
  background: var(--card); border: 1px solid #e9d5ff;
  border-radius: var(--radius-lg); overflow: hidden; margin-top: 14px;
}
.rech-ai-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 11px 14px; border-bottom: 1px solid var(--border);
  font-weight: 700; font-size: var(--font-size-md);
  background: linear-gradient(90deg, #faf5ff, #f5f3ff);
}
.rech-ai-badge {
  padding: 2px 9px; border-radius: var(--radius-lg); font-size: var(--text-xxs); font-weight: 700;
}
.rech-ai-not_started { background: var(--bg-primary); color: var(--text-muted); }
.rech-ai-extracting  { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.rech-ai-extracted   { background: var(--green-50); color: var(--color-success-ink); }
.rech-ai-done        { background: var(--green-50); color: var(--color-success-ink); }
.rech-ai-uncertain   { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.rech-ai-error       { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.rech-ai-ocr-badge   { background: var(--color-warning-soft); color: var(--color-warning-ink); border: 1px solid #fdba74; }

/* OCR-Hinweis oben in der Card */
.rech-ai-ocr-hint {
  background: var(--color-warning-soft); color: var(--color-warning-ink);
  border-bottom: 1px solid var(--color-warning-soft);
  padding: 8px 14px; font-size: var(--font-size-base); font-weight: 500;
  display: flex; align-items: center; gap: 6px;
}

/* Plausibilitätsbanner */
.rech-ai-plaus-ok {
  display: flex; align-items: flex-start; gap: 10px;
  background: var(--text-inverse); color: var(--green-800);
  border-bottom: 1px solid var(--green-200);
  padding: 10px 14px;
  font-size: var(--text-xs);
}
.rech-ai-plaus-ok-icon { font-size: var(--text-lg); line-height: 1; flex-shrink: 0; padding-top: 1px; }
.rech-ai-plaus-ok-title { font-weight: 700; margin-bottom: 2px; }
.rech-ai-plaus-ok-detail { font-size: var(--text-xxs); color: var(--color-success-ink); }
.rech-ai-plaus-warn {
  background: var(--color-warning-soft); color: #c2410c;
  border-bottom: 1px solid #fdba74;
  padding: 10px 14px; font-size: var(--text-xs); font-weight: 500;
}

/* Zeilen-Layout */
.ai-rows { padding: 2px 0; }
.ai-row {
  display: grid;
  grid-template-columns: 138px 1fr auto;
  align-items: start;
  gap: 6px 10px;
  padding: 9px 14px;
  border-bottom: 1px solid var(--gray-100);
  transition: background .15s;
}
.ai-row:last-child { border-bottom: none; }
.ai-row:hover:not(.ai-row-empty) { background: #fafaff; }
.ai-row-applied { background: var(--text-inverse) !important; }
.ai-row-applied:hover { background: var(--green-50) !important; }
.ai-row-unsure  { background: var(--color-warning-soft); }
.ai-row-empty   { opacity: 0.5; }

.ai-row-label {
  font-size: var(--text-xxs); font-weight: 600; color: var(--gray-700);
  padding-top: 2px; line-height: 1.4;
}
.ai-row-val {
  font-size: var(--text-xs); color: var(--text-primary);
  word-break: break-word; line-height: 1.5;
}
.ai-row-val-none { color: var(--gray-500); font-style: italic; font-size: var(--font-size-base); }
.ai-row-vic-warn {
  display: inline-block; font-size: var(--font-size-xs); color: var(--color-warning-ink);
  font-weight: 600; margin-top: 2px;
}
.ai-row-plaus { color: var(--color-success-ink); font-size: var(--text-xxs); font-weight: 600; }

.ai-row-right {
  display: flex; flex-direction: column; align-items: flex-end; gap: 5px;
}

/* Konfidenz-Badges */
.ai-conf-badge {
  display: inline-block; padding: 2px 7px;
  border-radius: var(--radius-md); font-size: var(--font-size-xs); font-weight: 700;
  white-space: nowrap; line-height: 1.5;
}
.ai-conf-high { background: var(--green-50); color: var(--color-success-ink); }
.ai-conf-mid  { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.ai-conf-low  { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.ai-conf-none { background: var(--bg-primary); color: var(--gray-500); }

/* Übernehmen-Button */
.ai-apply-btn {
  display: inline-flex; align-items: center; gap: 4px;
  background: #f5f3ff; color: var(--color-info-ink);
  border: 1px solid var(--color-info-soft); border-radius: var(--radius-sm);
  padding: 3px 9px; font-size: var(--font-size-sm); font-weight: 600;
  cursor: pointer; transition: background .15s, color .15s, border-color .15s;
  white-space: nowrap;
}
.ai-apply-btn:hover:not(:disabled) { background: var(--color-info-soft); border-color: var(--color-info-soft); }
.ai-apply-btn.ai-apply-done {
  background: var(--text-inverse); color: var(--color-success-ink);
  border-color: var(--green-300); cursor: default;
}
.ai-apply-btn:disabled { cursor: default; }

/* Footer der KI-Card */
.rech-ai-footer {
  padding: 10px 14px; border-top: 1px solid var(--border);
  display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
}
.rech-ai-footer-note {
  font-size: var(--font-size-sm); color: var(--muted); flex: 1; min-width: 100px;
  font-style: italic;
}
.rech-ai-btn-safe {
  display: inline-flex; align-items: center; gap: 5px;
  background: var(--text-inverse); color: var(--color-success-ink);
  border: 1px solid var(--green-300); border-radius: var(--radius-sm);
  padding: 5px 12px; font-size: var(--text-xxs); font-weight: 600;
  cursor: pointer; transition: background .15s;
  white-space: nowrap;
}
.rech-ai-btn-safe:hover { background: var(--green-50); }

/* ── Formular-Felder KI-Übernahme ── */
@keyframes rech-apply-flash {
  0%   { background: var(--green-200); }
  100% { background: inherit; }
}
.rech-field-applied { animation: rech-apply-flash .6s ease; }
.rech-calc-field { background: #f8f9ff !important; }
.rech-calc-active { animation: rech-apply-flash .6s ease; }

/* ── Rechte Spalte: Accordion-Sections ── */
.rech-section {
  background: var(--card); border: 1px solid var(--border);
  border-radius: var(--radius-lg); overflow: hidden; margin-bottom: 10px;
}
.rech-section-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 12px 16px; cursor: pointer; font-weight: 700; font-size: var(--font-size-md);
  transition: background .1s;
}
.rech-section-header:hover { background: var(--sidebar-bg); }
.rech-section-chevron { color: var(--muted); font-size: var(--font-size-sm); transition: transform .2s; }
.rech-section-collapsed .rech-section-chevron { transform: rotate(-90deg); }
.rech-section-body { padding: 14px 16px; }

.rech-form-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
}
@media (max-width: 700px) { .rech-form-grid { grid-template-columns: 1fr; } }
.rech-form-group { display: flex; flex-direction: column; gap: 4px; }
.rech-form-group label { font-size: var(--font-size-sm); font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.rech-form-group input,
.rech-form-group textarea,
.rech-form-group select { font-size: var(--font-size-md); }

/* ── Historie ── */
.rech-history-list { display: flex; flex-direction: column; gap: 10px; }
.rech-history-empty { color: var(--muted); font-size: var(--font-size-base); padding: 8px 0; }
.rech-hist-item { display: flex; gap: 12px; }
.rech-hist-icon { font-size: var(--font-size-md); white-space: nowrap; min-width: 140px; color: var(--text-primary); font-weight: 600; }
.rech-hist-body { flex: 1; border-left: 2px solid var(--border); padding-left: 10px; }
.rech-hist-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 3px; }
.rech-hist-user { font-weight: 600; font-size: var(--font-size-base); }
.rech-hist-time { font-size: var(--font-size-sm); color: var(--muted); }
.rech-hist-comment { font-size: var(--font-size-base); color: var(--muted); margin-top: 2px; font-style: italic; }

/* ── Upload: Schritt 1 ── */
.rech-upload-sub {
  font-size: var(--font-size-base); color: var(--muted); margin-top: 2px;
}

/* ── Upload: Schritt 2 – VIC vergeben ── */
.vic-confirm-box {
  border-radius: var(--radius-lg); padding: 18px 20px 14px;
  background: #f8f9ff; border: 2px solid var(--color-info-soft);
}
.vic-confirm-ai     { background: var(--text-inverse); border: 2px solid var(--color-success-ink); }
.vic-confirm-manual { background: #f8f9ff; border: 2px solid var(--color-info-soft); }

.vic-confirm-top {
  display: flex; align-items: center; gap: 10px; margin-bottom: 10px;
}
.vic-confirm-badge {
  font-size: var(--font-size-sm); font-weight: 700; padding: 3px 9px; border-radius: var(--radius-xl); flex-shrink: 0;
}
.vic-confirm-badge.ai     { background: var(--color-success-ink); color: var(--color-surface); }
.vic-confirm-badge.manual { background: var(--color-warning); color: var(--color-surface); }

.vic-confirm-label {
  font-size: var(--font-size-md); font-weight: 700; color: var(--gray-700);
}
.vic-confirm-hint {
  font-size: var(--text-xs); color: var(--gray-500); margin: 0 0 12px; line-height: 1.5;
}
.vic-confirm-input-row {
  display: flex; align-items: center; margin-bottom: 10px;
}
.vic-confirm-prefix {
  font-weight: 800; font-size: var(--text-base); letter-spacing: 1px;
  padding: 0 13px; height: 42px; display: flex; align-items: center;
  border-radius: 8px 0 0 8px; flex-shrink: 0; color: var(--color-surface);
}
.vic-confirm-ai     .vic-confirm-prefix { background: var(--color-success-ink); }
.vic-confirm-manual .vic-confirm-prefix { background: var(--color-warning); }

.vic-confirm-input {
  border-radius: 0 8px 8px 0 !important; border-left: none !important;
  font-size: var(--text-xl) !important; font-weight: 700 !important; letter-spacing: 3px;
  height: 42px !important; width: 160px !important; text-align: center;
}
.vic-confirm-ai-note {
  font-size: var(--font-size-base); color: var(--color-green-600); margin: 6px 0 0; padding: 6px 10px;
  background: var(--green-50); border-radius: var(--radius-sm);
}
/* ── Objekt-Combobox ── */
.obj-combo { position: relative; }
.obj-combo-input { width: 100%; }
.obj-combo-list {
  background: var(--color-surface); border: 1px solid var(--border); border-radius: var(--radius-md);
  box-shadow: 0 8px 24px #0003; max-height: 240px; overflow-y: auto;
}
.obj-combo-item {
  padding: 8px 12px; cursor: pointer; display: flex; flex-direction: column; gap: 1px;
  transition: background .1s;
}
.obj-combo-item:hover { background: #f0f4ff; }
.obj-combo-name { font-size: var(--font-size-md); font-weight: 500; color: var(--gray-900); }
.obj-combo-addr { font-size: var(--font-size-sm); color: var(--muted); }
.obj-combo-empty { padding: 10px 12px; font-size: var(--font-size-base); color: var(--muted); font-style: italic; }

/* Editierbares VIC-Feld in der Detailansicht */
.vic-edit-hint {
  font-size: var(--font-size-xs); color: var(--primary); font-weight: 400;
  margin-left: 4px; opacity: .7;
}
.vic-editable {
  font-weight: 700 !important; letter-spacing: 1px;
  border-color: var(--color-info-soft) !important;
  background: #fafbff !important;
}
.vic-editable:focus {
  border-color: var(--primary) !important;
  background: var(--color-surface) !important;
  box-shadow: 0 0 0 3px #6366f120;
}

/* Echtzeit-Check */
.vic-check-icon {
  font-size: var(--font-size-2xl); font-weight: 700; margin-left: 10px; min-width: 22px; text-align: center;
  transition: color .15s;
}
.vic-check-ok   { color: var(--color-green-600); }
.vic-check-err  { color: var(--color-red-600); }
.vic-check-wait { color: var(--gray-500); }

.vic-check-msg {
  font-size: var(--font-size-base); font-weight: 500; margin-top: 4px; min-height: 16px;
}
.vic-ok  { color: var(--color-green-600); }
.vic-err { color: var(--color-red-600); }

/* KI-Dateiname-Hinweis */
.vic-ai-hint {
  margin-top: 10px; font-size: var(--font-size-base); color: var(--gray-500);
  background: var(--green-50); border: 1px solid var(--green-200); border-radius: var(--radius-sm);
  padding: 6px 10px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
}
.btn-link-sm {
  background: none; border: none; color: var(--primary); font-size: var(--font-size-base);
  font-weight: 600; cursor: pointer; padding: 0; text-decoration: underline;
  text-underline-offset: 2px;
}
.btn-link-sm:hover { color: var(--color-info-ink); }

.vic-confirm-actions {
  display: flex; justify-content: flex-end; gap: 10px; margin-top: 16px;
}

/* ── VIC-Vergabe-Banner (in der Detailansicht nach Upload) ── */
#rech-vic-banner {
  background: var(--color-warning-soft); border: 2px solid var(--color-warning);
  border-radius: var(--radius-lg); padding: 18px 22px 16px;
  margin-bottom: 16px;
}
/* ── Automatische Rechnungsprüfung (Prüf-Panel + Abweichungsliste, §4.3) ── */
.rd-pruef { border:1px solid var(--vi-line,#D8DFDC); border-radius: var(--radius-lg); background:var(--vi-sand-soft,#faf8f2); padding:14px 16px; margin:0 0 16px; }
.rd-pruef-head { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.rd-pruef-title { font-weight:700; font-size: var(--text-md); color:var(--vi-ink,#141A17); flex:1; min-width:0; }
.rd-pruef-badge { font-weight:700; font-size: var(--text-xs); padding:4px 11px; border-radius: var(--radius-pill); white-space:nowrap; }
.rd-pruef-badge.ok    { background:var(--vi-ok-soft,#EDF7F2); color:var(--vi-ok,#2e7d4f); }
.rd-pruef-badge.warn  { background:var(--vi-warn-soft,#f7ecd6); color:var(--vi-warn,#b7791f); }
.rd-pruef-badge.err   { background:var(--vi-err-soft,#f6e1dc); color:var(--vi-err,#b23b2e); }
.rd-pruef-badge.info  { background:#e6eef5; color:#3a6ea5; }
.rd-pruef-badge.muted { background:var(--vi-sand,#EFF2F1); color:var(--vi-muted,#5F6B66); }
.rd-pruef-body { margin-top:12px; }
.rd-pruef-load { color:var(--vi-muted,#5F6B66); font-size: var(--text-sm); }
.rd-pruef-hint { font-size: var(--text-sm); color:var(--vi-ink-70,#3A4441); line-height:1.5; background:var(--color-surface); border:1px solid var(--vi-line,#D8DFDC); border-radius: var(--radius-md); padding:10px 12px; }
.rd-pruef-malo { font-size: var(--text-xs); color:var(--vi-muted,#5F6B66); margin-bottom:8px; }
.rd-pruef-tbl { width:100%; border-collapse:collapse; background:var(--color-surface); border:1px solid var(--vi-line,#D8DFDC); border-radius: var(--radius-md); overflow:hidden; font-size: var(--text-sm); }
.rd-pruef-tbl th { text-align:left; font-size: var(--text-xxs); text-transform: none; letter-spacing: normal; color:var(--vi-muted,#5F6B66); font-weight:700; padding:8px 12px; background:var(--vi-sand-soft,#faf8f2); border-bottom:1px solid var(--vi-line,#D8DFDC); }
.rd-pruef-tbl td { padding:9px 12px; border-top:1px solid var(--vi-line,#f2eee4); }
.rd-pruef-tbl .num { text-align:right; font-variant-numeric:tabular-nums; }
.rd-pruef-tbl .num.bad { color:var(--vi-err,#b23b2e); font-weight:700; }
.rd-pruef-tbl tr.sev-kritisch td:first-child { box-shadow:inset 3px 0 0 var(--vi-err,#b23b2e); }
.rd-pruef-tbl tr.sev-auffaellig td:first-child { box-shadow:inset 3px 0 0 var(--vi-warn,#b7791f); }
.rd-pruef-rec { margin-top:10px; font-size: var(--text-sm); color:var(--vi-ink-70,#3A4441); background:var(--color-surface); border:1px solid var(--vi-line,#D8DFDC); border-radius: var(--radius-md); padding:9px 12px; }
.rd-pruef-rec .bad { color:var(--vi-err,#b23b2e); font-weight:700; }
.rd-pruef-rec .good { color:var(--vi-ok,#2e7d4f); font-weight:700; }
.rd-pruef-assign { display:flex; gap:8px; margin-top:10px; flex-wrap:wrap; align-items:center; }
.rd-pruef-assign .form-input { flex:1; min-width:220px; }

.vic-banner-title {
  display: flex; align-items: center; gap: 9px;
  font-size: var(--font-size-lg); font-weight: 700; color: var(--color-warning-ink); margin-bottom: 14px;
}
.vic-banner-title svg { flex-shrink: 0; }
.vic-banner-row {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.vic-banner-prefix {
  font-weight: 800; font-size: var(--text-base); letter-spacing: 1px;
  padding: 0 13px; height: 42px; display: flex; align-items: center;
  border-radius: 8px 0 0 8px; flex-shrink: 0;
  background: var(--color-warning); color: var(--color-surface);
}
.vic-banner-input {
  border-radius: 0 8px 8px 0 !important; border-left: none !important;
  font-size: var(--text-xl) !important; font-weight: 700 !important; letter-spacing: 3px;
  height: 42px !important; width: 150px !important; text-align: center;
  border: 1.5px solid var(--vi-border); outline: none;
}
.vic-banner-input:focus { border-color: var(--color-warning); box-shadow: 0 0 0 3px #fef3c755; }
.vic-banner-check { font-size: var(--font-size-md); color: var(--gray-500); min-width: 160px; }
.vic-banner-check.vic-ok  { color: var(--color-success-ink); font-weight: 600; }
.vic-banner-check.vic-err { color: var(--color-red-600); font-weight: 600; }
.vic-banner-confirm {
  display: inline-flex; align-items: center; gap: 6px;
  background: var(--color-warning); color: var(--color-surface);
  font-size: var(--font-size-md); font-weight: 700; padding: 9px 18px;
  border-radius: var(--radius-md); border: none; cursor: pointer; transition: background .15s;
  white-space: nowrap;
}
.vic-banner-confirm:hover { background: var(--color-amber-600); }
.vic-banner-confirm:disabled { background: var(--gray-300); cursor: not-allowed; }
.vic-banner-ai {
  font-size: var(--font-size-base); color: #78350f; margin-top: 10px;
  background: var(--color-warning-soft); border-radius: var(--radius-sm); padding: 6px 10px;
  display: flex; align-items: center; gap: 8px;
}
.vic-banner-skip {
  font-size: var(--font-size-base); color: var(--gray-500); background: none; border: none;
  cursor: pointer; padding: 4px 0; text-decoration: underline;
  margin-top: 10px; display: block;
}
.vic-banner-skip:hover { color: var(--gray-500); }

/* ── Upload-Drop ── */
.rech-upload-drop {
  border: 2px dashed #c6d4c9; border-radius: var(--radius-xl); padding: 36px 28px 32px;
  text-align: center; background: #f7faf8; transition: border-color .2s, background .2s;
  cursor: default;
}
.rech-upload-drop:hover, .rech-upload-drop.drag-over {
  border-color: var(--gruen); background: #eef6f1;
}
.rech-upload-icon {
  display: flex; align-items: center; justify-content: center;
  width: 64px; height: 64px; margin: 0 auto 16px;
  background: #e6f0eb; border-radius: var(--radius-xl);
}
.rech-upload-icon svg { display: block; }
.rech-upload-text {
  font-size: var(--text-base); font-weight: 700; color: var(--text-primary); margin-bottom: 6px;
}
.rech-upload-sub {
  font-size: var(--text-xs); color: var(--muted); margin-bottom: 20px; line-height: 1.5;
}
.rech-upload-hint { font-size: var(--font-size-base); color: var(--muted); margin-bottom: 14px; }
.rech-upload-btn {
  display: inline-flex; align-items: center; gap: 7px;
  background: var(--gruen); color: var(--color-surface);
  font-size: var(--font-size-md); font-weight: 600; letter-spacing: .01em;
  padding: 9px 20px; border-radius: var(--radius-md); cursor: pointer;
  border: none; transition: background .15s; text-transform: none;
}
.rech-upload-btn:hover { background: var(--gruen-mid); }
.rech-upload-btn svg { flex-shrink: 0; }
.rech-upload-prog-bar { height: 6px; background: var(--border); border-radius: 3px; overflow: hidden; }
.rech-upload-prog-fill { height: 100%; background: var(--gruen); border-radius: 3px; transition: width .4s; width: 0; }

/* ── Vorschlag-Chips (Status-Kommentar-Modal) ── */
.rech-suggest-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.rech-suggest-chip {
  padding: 4px 11px; border-radius: var(--radius-lg); background: var(--color-info-soft); color: var(--color-info-ink);
  font-size: var(--text-xxs); font-weight: 600; cursor: pointer; transition: background .1s;
}
.rech-suggest-chip:hover { background: var(--color-info-soft); }


/* ═══════════════════════════════════════════════════════════════════════════ */
/* PHASE 2: COMPONENT STANDARDIZATION */
/* Unified button, badge, card, form, and table styles using design tokens */
/* ═══════════════════════════════════════════════════════════════════════════ */

/* ── BUTTONS BASE ────────────────────────────────────────────────────────── */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: var(--btn-height-md);
  padding: 0 var(--spacing-lg);
  font-family: var(--font-family-body);
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  border: none;
  border-radius: var(--radius-md);
  cursor: pointer;
  transition: all var(--transition-fast);
  white-space: nowrap;
  user-select: none;
  text-decoration: none;
  outline: none;
}

.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.btn:focus-visible {
  outline: 2px solid var(--gruen-mid);
  outline-offset: 2px;
}

/* Button sizes */
.btn-sm {
  height: var(--btn-height-sm);
  padding: 0 var(--spacing-md);
  font-size: var(--font-size-xs);
}

/* ── BUTTON VARIANTS ─────────────────────────────────────────────────────── */

/* Primary Button (CTA) */
.btn-primary,
.btn.primary {
  background: var(--gruen);
  color: var(--white);
  border: none;
}

.btn-primary:hover:not(:disabled),
.btn.primary:hover:not(:disabled) {
  background: var(--gruen-mid);
  box-shadow: 0 2px 8px rgba(26, 61, 43, 0.2);
  transform: translateY(-1px);
}

.btn-primary:active:not(:disabled),
.btn.primary:active:not(:disabled) {
  background: var(--gruen-hell);
  transform: translateY(0);
}

/* Secondary Button (Alternative action) */
.btn-secondary,
.btn.secondary {
  background: var(--white);
  color: var(--text-primary);
  border: 1.5px solid var(--border);
}

.btn-secondary:hover:not(:disabled),
.btn.secondary:hover:not(:disabled) {
  background: var(--bg-primary);
  border-color: var(--border-strong);
  box-shadow: var(--shadow-xs);
}

.btn-secondary:active:not(:disabled),
.btn.secondary:active:not(:disabled) {
  background: var(--creme-dunkel);
}

/* Tertiary Button (Ghost) */
.btn-tertiary,
.btn.tertiary,
.btn-link {
  background: transparent;
  color: var(--gruen-mid);
  border: none;
  padding: 0 var(--spacing-md);
}

.btn-tertiary:hover:not(:disabled),
.btn.tertiary:hover:not(:disabled),
.btn-link:hover:not(:disabled) {
  color: var(--gruen);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* Danger Button (Destructive action) */
.btn-danger,
.btn.danger {
  background: var(--rot);
  color: var(--white);
  border: none;
}

.btn-danger:hover:not(:disabled),
.btn.danger:hover:not(:disabled) {
  background: var(--color-danger-ink);
  box-shadow: 0 2px 8px rgba(220, 38, 38, 0.2);
  transform: translateY(-1px);
}

.btn-danger:active:not(:disabled),
.btn.danger:active:not(:disabled) {
  background: #6E211A;
}

/* Success Button */
.btn-success,
.btn.success {
  background: var(--gruen-ok);
  color: var(--white);
  border: none;
}

.btn-success:hover:not(:disabled),
.btn.success:hover:not(:disabled) {
  background: var(--color-success-ink);
  box-shadow: 0 2px 8px rgba(22, 163, 74, 0.2);
  transform: translateY(-1px);
}

/* Warning Button */
.btn-warning,
.btn.warning {
  background: var(--gelb);
  color: var(--white);
  border: none;
}

.btn-warning:hover:not(:disabled),
.btn.warning:hover:not(:disabled) {
  background: var(--color-warning-ink);
  box-shadow: 0 2px 8px rgba(217, 119, 6, 0.2);
  transform: translateY(-1px);
}

/* Info Button */
.btn-info,
.btn.info {
  background: var(--color-water);
  color: var(--white);
  border: none;
}

.btn-info:hover:not(:disabled),
.btn.info:hover:not(:disabled) {
  background: #0d9488;
  box-shadow: 0 2px 8px rgba(8, 145, 178, 0.2);
  transform: translateY(-1px);
}

.btn-del {
  background: none;
  border: none;
  color: var(--rot);
  cursor: pointer;
  font-size: var(--font-size-sm);
  padding: var(--spacing-xs) var(--spacing-sm);
  font-family: var(--font-family-body);
}

.btn-del:hover {
  text-decoration: underline;
  color: var(--color-danger-ink);
}

/* ── BADGES ──────────────────────────────────────────────────────────────── */

.badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--spacing-xs);
  height: 20px;
  padding: 0 var(--spacing-sm);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  border-radius: var(--radius-full);
  white-space: nowrap;
  letter-spacing: 0.02em;
}

/* Badge status variants */
.badge-ok,
.badge.ok {
  background: #e8f5ee;
  color: var(--gruen-hell);
}

.badge-warn,
.badge.warn {
  background: #fef9e7;
  color: var(--gelb);
}

.badge-alert,
.badge.alert,
.badge-danger,
.badge.danger {
  background: #fdedec;
  color: var(--rot);
}

.badge-info,
.badge.info {
  background: var(--green-50);
  color: var(--green-600);
}

.badge-success,
.badge.success {
  background: var(--green-50);
  color: var(--color-success-ink);
}

/* Medium badges for labels */
.badge-medium {
  height: 22px;
  padding: 0 var(--spacing-md);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  border-radius: var(--radius-sm);
}

/* Medium-specific badges */
.badge-Strom {
  background: var(--green-50);
  color: var(--green-600);
}

.badge-Gas {
  background: var(--color-warning-soft);
  color: var(--color-warning-ink);
}

.badge-Wasser {
  background: var(--green-50);
  color: var(--green-800);
}

.badge-Fernwärme {
  background: #fce7f3;
  color: #9d174d;
}

.badge-PV-Einspeisung {
  background: var(--text-inverse);
  color: var(--green-800);
}

/* ── CARDS ─────────────────────────────────────────────────────────────────────
   KANONISCHE Definition (dieser Block gewinnt gegen den früheren gleichnamigen
   weiter oben in dieser Datei — Ladereihenfolge). Regeln (Redesign 16.08.2026):
   · Eine Karte hat KEINEN Schatten und KEINEN Schatten beim Zeigen. Ein Schatten
     sagt „ich schwebe"; eine Karte schwebt nicht, sie gruppiert. Der Hover-Schatten
     ließ auf Übersichtsseiten die halbe Seite unter dem Mauszeiger atmen.
   · Karte in Karte verliert Rahmen und Polsterung — sie ist dann nur eine Gruppe.
   · Titel in Satzschreibung, 17 px, 600 — nicht gesperrte Versalien. */

.card {
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
}

.card .card { border: 0; border-radius: 0; }

.card-body {
  padding: var(--space-4) var(--space-5);
}

/* ── FORMS ───────────────────────────────────────────────────────────────── */

.form-group {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  margin-bottom: var(--spacing-lg);
}

.form-group.form-row {
  flex-direction: row;
  gap: var(--spacing-md);
}

.form-group.form-row > * {
  flex: 1;
}

.form-label {
  display: block;
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  letter-spacing: 0.01em;
  text-transform: none;   /* Satzschreibung — siehe .form-label oben */
  color: var(--muted);
  margin-bottom: var(--spacing-xs);
}

.form-label.required::after {
  content: ' *';
  color: var(--rot);
}

/* SPEZIFITAET (wichtig): die Typ-/Attributselektoren stehen bewusst in `:where()`.
   Ohne das haette `input[type="text"]` die Spezifitaet (0,1,1) und schluege JEDE
   Komponentenregel mit einer einzelnen Klasse (0,1,0). Genau daran hing der
   sichtbare Fehler vom 24.08.2026: das Suchfeld in den Klassifikations-Comboboxen
   (`.meta-menu-search`) bekam die generischen 12 px Innenabstand statt der eigenen
   30 px — die Lupe lag auf dem Text. Dieselbe Falle war zuvor schon einmal lokal
   umgangen worden (siehe `.vi-obj-picker-input-wrap`), also wird sie jetzt an der
   Wurzel entschaerft: `:where()` traegt 0 zur Spezifitaet bei. Die Werte gelten
   weiterhin als Grundeinstellung fuer nackte Felder — eine Komponente mit eigener
   Klasse gewinnt jetzt aber ohne `!important`.
   `.form-input` / `.form-select` behalten ihre normale Spezifitaet. */
.form-input,
.form-select,
:where(input[type="text"],
input[type="email"],
input[type="password"],
input[type="number"],
input[type="date"],
textarea,
select) {
  font-family: var(--font-family-body);
  font-size: var(--font-size-base);
  padding: var(--input-padding-y) var(--input-padding-x);
  height: var(--input-height);
  border: 1.5px solid var(--border);
  border-radius: var(--radius-md);
  background: var(--bg-input);
  color: var(--text-primary);
  transition: all var(--transition-fast);
  outline: none;
}

.form-input::placeholder,
input::placeholder {
  color: var(--subtle);
}

.form-input:focus,
.form-select:focus,
input:focus,
select:focus {
  border-color: var(--gruen-mid);
  background: var(--white);
  box-shadow: 0 0 0 3px rgba(61, 138, 94, 0.1);
}

.form-input:disabled,
.form-select:disabled,
input:disabled,
select:disabled {
  background: var(--creme);
  color: var(--muted);
  cursor: not-allowed;
  opacity: 0.6;
}

textarea {
  resize: vertical;
  min-height: 100px;
  height: auto;
}

.form-hint {
  font-size: var(--font-size-xs);
  color: var(--muted);
  margin-top: var(--spacing-xs);
  line-height: var(--line-height-normal);
}

.form-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--spacing-md);
  margin-top: var(--spacing-xl);
  padding-top: var(--spacing-lg);
  border-top: 1px solid var(--border);
}

.form-actions .btn {
  min-width: 100px;
}

/* ── TABLES ──────────────────────────────────────────────────────────────── */

.data-table {
  width: 100%;
  border-collapse: collapse;
  background: var(--white);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  overflow: hidden;
  font-size: var(--font-size-base);
}

.data-table thead {
  background: var(--creme);
  border-bottom: 1px solid var(--border);
  font-weight: var(--font-weight-semibold);
}

/* Kanonische Tabellenkopf-Definition (Single Source). Enthält font-weight + border-bottom,
   die zuvor aus der entfernten Erstdefinition geerbt wurden → Optik unverändert. */
.data-table th {
  padding: var(--spacing-md) var(--spacing-lg);
  text-align: left;
  color: var(--text-primary);
  font-size: var(--font-size-sm);
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  white-space: nowrap;
  user-select: none;
  border-bottom: 1px solid var(--border);
}

.data-table td {
  padding: var(--spacing-md) var(--spacing-lg);
  border-bottom: 1px solid var(--border);
  color: var(--text-primary);
  font-size: var(--font-size-base);
  line-height: var(--line-height-normal);
  vertical-align: middle;
}

.data-table tbody tr {
  transition: background-color var(--transition-fast);
}

.data-table tbody tr:hover {
  background: rgba(76, 175, 122, 0.04);
}

.data-table tbody tr:last-child td {
  border-bottom: none;
}

.data-table tbody tr.active {
  background: rgba(76, 175, 122, 0.08);
  border-left: 3px solid var(--gruen-mid);
  padding-left: calc(var(--spacing-lg) - 3px);
}

/* Table cell variants */
.data-table td.text-muted {
  color: var(--muted);
  font-size: var(--font-size-sm);
}

.data-table td.text-right {
  text-align: right;
}

.data-table td.text-center {
  text-align: center;
}

.data-table td.numeric {
  font-family: 'Courier New', monospace;
  text-align: right;
}

.data-table td.status {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.data-table td.status::before {
  content: '';
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}

.data-table td.status.ok::before {
  background: var(--gruen-ok);
}

.data-table td.status.warn::before {
  background: var(--gelb);
}

.data-table td.status.error::before {
  background: var(--rot);
}

/* Compact table (smaller padding) */
.data-table.compact th,
.data-table.compact td {
  padding: var(--spacing-sm) var(--spacing-md);
  font-size: var(--font-size-sm);
}

/* Striped table */
.data-table.striped tbody tr:nth-child(odd) {
  background: rgba(0, 0, 0, 0.02);
}

.data-table.striped tbody tr:nth-child(odd):hover {
  background: rgba(76, 175, 122, 0.04);
}

/* ── MOBILE-ONLY ELEMENTS (DEFAULT: HIDDEN) ──────────────────────────────── */

.sidebar-toggle {
  display: none !important;  /* Hidden on desktop, shown on mobile via media query */
}

.sidebar-backdrop {
  display: none !important;  /* Hidden by default, shown on mobile when sidebar opens */
}

/* ═══════════════════════════════════════════════════════════════════════════ */
/* UNIFIED RESPONSIVE DESIGN SYSTEM */
/* ═══════════════════════════════════════════════════════════════════════════ */

/* Tablet & Small Laptop (≤1100px) */
@media (max-width: 1100px) {
  /* Sidebar-Maße/Typo bleiben fix laut Design-Spez (272/76) — keine Tablet-Verkleinerung.
     Drawer-Verhalten ≤1023px steuert mobile.css. */
  .main {
    flex-direction: column;
  }

  body {
    flex-direction: column;
  }
}

/* Tablet Portrait (≤900px) */
@media (max-width: 900px) {
  .sidebar {
    width: var(--sidebar-width-tablet);
  }

  .content {
    padding: var(--spacing-lg);
  }

  /* Dashboard Grid: 2-col to 1-col */
  .cockpit-grid {
    grid-template-columns: 1fr;
  }

  /* VP Table: Reduce columns visually */
  .vp-table-header,
  .vp-row-main {
    grid-template-columns: 20px 1fr 90px 140px 0 120px 110px 160px 28px;
    font-size: var(--font-size-xs);
  }
}

.btn-danger-light {
  color: var(--rot);
}

.btn-danger-light:hover {
  background: var(--rot);
  color: white;
  border-color: var(--rot);
}

/* ── Badges ── */

.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: var(--font-size-xs);
  font-weight: 600;
  padding: 3px 8px;
  border-radius: 4px;
  white-space: nowrap;
}

.badge-ok {
  background: var(--green-50);
  color: var(--color-success-ink);
}

.badge-info {
  background: var(--green-50);
  color: var(--green-600);
}

.badge-warn {
  background: var(--color-warning-soft);
  color: var(--color-warning-ink);
}

.badge-error {
  background: var(--color-danger-soft);
  color: var(--color-danger-ink);
}

.cases-filter-bar {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: var(--spacing-lg);
  margin-bottom: var(--spacing-xl);
  padding: var(--spacing-lg);
  background: transparent;
  border-radius: 0;
  border: 0;
  padding-left: 0;
  padding-right: 0;
}

.cases-filter-group {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xs);
}

.cases-filter-label {
  font-size: var(--font-size-sm);
  font-weight: 500;
  color: var(--text-secondary);
}

.cases-count-info {
  font-size: var(--font-size-sm);
  color: var(--muted);
  margin-bottom: var(--spacing-xs);
  padding: 0 var(--spacing-xs);
}

.cases-table-header {
  display: grid;
  grid-template-columns: 140px 1fr 200px 150px 120px 100px 120px 140px 40px;
  gap: var(--spacing-md);
  padding: var(--spacing-md) var(--spacing-lg);
  background: var(--bg-alt);
  border-bottom: 2px solid var(--border);
  font-weight: 600;
  font-size: var(--font-size-sm);
  color: var(--text-secondary);
  position: sticky;
  top: 0;
  z-index: 10;
}

.cases-col-number,
.cases-col-title,
.cases-col-object,
.cases-col-category,
.cases-col-status,
.cases-col-priority,
.cases-col-owner,
.cases-col-next-action,
.cases-col-expand {
  display: flex;
  align-items: center;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.cases-list {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--border);
  border-top: none;
}

.cases-row {
  display: grid;
  grid-template-columns: 140px 1fr 200px 150px 120px 100px 120px 140px 40px;
  gap: var(--spacing-md);
  padding: var(--spacing-md) var(--spacing-lg);
  align-items: center;
  border-bottom: 1px solid var(--border);
  cursor: pointer;
  transition: background-color var(--transition-base);
}

.cases-row:hover {
  background-color: var(--bg-alt);
}

.cases-badge {
  display: inline-block;
  padding: 4px 8px;
  border-radius: var(--radius-md);
  font-size: var(--font-size-xs);
  font-weight: 500;
  color: white;
  text-align: center;
}

.cases-empty {
  padding: var(--spacing-3xl) var(--spacing-lg);
  text-align: center;
  color: var(--muted);
  background: var(--bg-alt);
  border-radius: var(--radius-lg);
}

/* Modal styling for cases */
.modal-large {
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  justify-content: center;
  align-items: center;
  z-index: 1000;
  padding: var(--spacing-lg);
}

.modal-content-large {
  width: 100%;
  max-width: 1200px;
  max-height: 90vh;
  overflow-y: auto;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-xl);
  display: flex;
  flex-direction: column;
  background: var(--white);
}

/* Reiter im Dialog: kanonisches Tab-System (.vi-tabs/.vi-tab, ui-standard.css §3).
   Die frühere eigene .modal-tab-Optik ist entfallen — kein zweites Tab-Design. */

.case-tab-content {
  display: none;
  padding: var(--spacing-lg);
}

.case-task-item {
  transition: background-color var(--transition-base);
}

.case-task-item:hover {
  background-color: var(--bg-alt);
}

/* ── VORGANGSDETAIL NEUE STRUKTUR ──────────────────────────────────────────── */

/* Kopfbereich */
.case-detail-header {
  padding: var(--spacing-xl);
  background: var(--white);
  border-bottom: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
}

.case-detail-header-info {
  flex: 1;
}

.case-detail-number {
  font-size: var(--font-size-xs);
  color: var(--muted);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.case-detail-title {
  margin: 4px 0 12px;
  font-size: 24px;
  font-weight: 600;
  color: var(--text-primary);
}

.case-detail-badges {
  display: flex;
  gap: var(--spacing-md);
  flex-wrap: wrap;
}

.case-status-badge, .case-priority-badge, .case-object-badge {
  display: inline-block;
  padding: 4px 12px;
  border-radius: var(--radius-sm);
  font-size: var(--font-size-xs);
  font-weight: 500;
  color: white;
}

/* Zwei-Spalten Layout */
.case-detail-wrapper {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--spacing-xl);
  padding: var(--spacing-xl);
  overflow-y: auto;
  flex: 1;
}

.case-detail-main {
  flex: 1;
  display: flex;
  flex-direction: column;
}

/* Tab-Navigation */
.case-tabs-nav {
  display: flex;
  gap: var(--spacing-md);
  border-bottom: 1px solid var(--border);
  margin-bottom: var(--spacing-lg);
  padding-bottom: 0;
}

.case-tab-button {
  padding: var(--spacing-md) var(--spacing-lg);
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: var(--font-size-sm);
  font-weight: 500;
  color: var(--muted);
  border-bottom: 2px solid transparent;
  transition: color var(--transition-base), border-color var(--transition-base);
  white-space: nowrap;
}

.case-tab-button:hover {
  color: var(--text-primary);
}

.case-tab-button.active {
  color: var(--primary);
  border-bottom-color: var(--primary);
}

/* Tab-Contents */
.case-tab-contents {
  flex: 1;
  overflow-y: auto;
}

.case-tab-content {
  display: none;
  animation: fadeIn var(--transition-base);
  padding: var(--spacing-lg);
}

.case-tab-content.active {
  display: block;
}

@keyframes fadeIn {
  from { opacity: 0.8; }
  to { opacity: 1; }
}

.form-group {
  margin-bottom: var(--spacing-md);
}

.form-group:last-child {
  margin-bottom: 0;
}

/* Aufgaben-Tab spezifisch */
.case-task-tab-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--spacing-lg);
}

.case-task-tab-header h3 {
  margin: 0;
  font-size: var(--text-lg);
  font-weight: 600;
}

.case-task-count {
  display: inline-block;
  background: var(--bg-alt);
  color: var(--text-primary);
  padding: 2px 8px;
  border-radius: 4px;
  font-size: var(--font-size-xs);
  font-weight: 500;
  margin-left: var(--spacing-sm);
}

.hidden {
  display: none !important;
}
.case-task-edit-btn {
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  width: 28px;
  height: 28px;
  padding: 0;
  background: transparent;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  cursor: pointer;
  color: var(--muted);
  font-size: var(--text-md);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all var(--transition-base);
  opacity: 0;
}

/* Listen */
.case-list {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.case-list-item {
  padding: var(--spacing-md);
  background: var(--bg-alt);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  transition: background-color var(--transition-base);
}

.case-list-item:hover {
  background-color: var(--white);
  border-color: var(--primary);
}

.case-list-item-title {
  font-weight: 500;
  color: var(--text-primary);
  margin: 0 0 4px 0;
}

.case-list-item-type {
  font-size: var(--font-size-xs);
  font-weight: 500;
  color: var(--primary);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.case-list-item-meta {
  font-size: var(--font-size-xs);
  color: var(--muted);
}

.case-list-item-date {
  font-size: var(--font-size-xs);
  color: var(--muted);
}

.case-activity-type {
  font-weight: 500;
  color: var(--primary);
}

.case-empty-state {
  padding: var(--spacing-lg);
  text-align: center;
  color: var(--muted);
  font-size: var(--font-size-sm);
  background: var(--bg-alt);
  border-radius: var(--radius-md);
  border: 1px dashed var(--border);
}

/* Responsive */
@media (max-width: 1023px) {
  .case-detail-wrapper {
    grid-template-columns: 1fr;
    gap: var(--spacing-lg);
  }

}

@media (max-width: 767px) {
  .modal-content-large {
    max-width: 95vw;
  }

  .case-detail-header {
    flex-direction: column;
    gap: var(--spacing-lg);
  }

  .case-tabs-nav {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }

  .case-detail-wrapper {
    padding: var(--spacing-lg) var(--spacing-md);
  }
}

/* Mobile Landscape (≤768px) */
@media (max-width: 767px) {
  /* Sidebar: Off-canvas instead of hidden */
  .sidebar {
    position: fixed;
    left: 0;
    top: 0;
    height: 100vh;
    width: 260px;
    transform: translateX(-100%);
    transition: transform var(--transition-base);
    z-index: var(--z-modal);
    border-right: none;
    box-shadow: var(--shadow-lg);
  }

  .sidebar.open {
    transform: translateX(0);
  }

  /* Sidebar Backdrop */
  .sidebar-backdrop {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.4);
    z-index: calc(var(--z-modal) - 1);
  }

  .sidebar-backdrop.open {
    display: block !important;  /* Override desktop hidden state */
  }

  /* Hamburger Menu Button */
  .sidebar-toggle {
    display: flex !important;  /* Override desktop hidden state */
    align-items: center;
    justify-content: center;
    width: var(--btn-height-md);
    height: var(--btn-height-md);
    background: var(--white);
    border: 1px solid var(--border);
    border-radius: var(--radius-md);
    cursor: pointer;
    transition: all var(--transition-fast);
    color: var(--text-primary);
    font-size: var(--font-size-2xl);
  }

  .sidebar-toggle:hover {
    background: var(--creme);
    border-color: var(--border-strong);
  }

  /* Main adjustments for mobile */
  .main {
    margin-left: 0;
  }

  .topbar {
    height: var(--topbar-height);
    padding: var(--spacing-sm) var(--spacing-lg);
    display: flex;
    align-items: center;
    gap: var(--spacing-md);
  }

  /* Single column layout */
  .content {
    padding: var(--spacing-md);
  }

  .dashboard-bottom {
    grid-template-columns: 1fr;
  }

  /* Forms on mobile: Stack */
  .form-row {
    flex-direction: column;
  }

  .form-group {
    width: 100%;
  }

  /* Tables: Responsive collapse */
  .vp-row-main {
    grid-template-columns: 20px 1fr 100px 28px;
    grid-template-areas: "status vs meter actions";
    gap: var(--spacing-sm);
  }

  /* Filter bars on mobile */
  .vp-filter-bar,
  .dash-filter-bar,
  .abs-filter-bar {
    flex-direction: column;
  }

  /* Card grid on mobile */
  .card-grid,
  .objekt-cards {
    grid-template-columns: 1fr;
  }
}

/* Mobile Portrait (≤640px) */
@media (max-width: 640px) {
  /* Even smaller padding */
  .content {
    padding: var(--spacing-sm);
  }

  .topbar {
    padding: var(--spacing-sm);
    height: auto;
    flex-wrap: wrap;
  }

  /* Typography sizing on small screens */
  .page-title {
    font-size: var(--font-size-3xl);
    margin-bottom: var(--spacing-md);
  }

  /* Buttons smaller on mobile */
  .btn-primary,
  .btn-secondary {
    padding: var(--spacing-sm) var(--spacing-lg);
    font-size: var(--font-size-sm);
    height: var(--btn-height-sm);
  }

  /* Form inputs responsive */
  .form-input,
  .form-select {
    font-size: var(--font-size-xl);  /* Prevents zoom on focus */
    width: 100%;
  }

  /* Breadcrumb hide on small */
  .breadcrumb {
    display: none;
  }

  /* Sidebar width on small mobile */
  .sidebar {
    width: 100vw;
    max-width: 280px;
  }

  /* Cards less padding */
  .card {
    padding: var(--spacing-md);
  }

  /* Table text smaller */
  .data-table,
  .vp-row-main {
    font-size: var(--font-size-xs);
  }

  .card-actions .btn,
  .vp-actions .btn {
    width: 100%;
  }
}

/* Extra small mobile (≤480px) */
@media (max-width: 480px) {
  .topbar {
    gap: var(--spacing-sm);
  }

  .page-title {
    font-size: var(--font-size-2xl);
  }

  .form-label {
    font-size: var(--font-size-xs);
  }

  .logo-company {
    font-size: var(--font-size-lg);
  }

  .nav-label {
    font-size: 9px;
  }

  /* Minimal modal on tiny screens */
  .modal {
    margin: var(--spacing-sm);
    border-radius: var(--radius-lg);
  }

  /* Table: Absolutely minimal */
  .data-table td,
  .data-table th {
    padding: 4px 6px;
    font-size: 9px;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   VORGANGSDETAIL – AUFGABEN-MODUL (kompakt + große Arbeitsansicht)
   Professioneller Look, konsistent mit Design-System

   Hinweis Schriftarten:
   Alle Elemente in der Vorgangsdetailmaske verwenden explizit den UI-
   Font-Stack (var(--font-family-body) = Inter). Seit 21.07.2026 gilt
   projektweit: EINE Schrift für ALLES, ausnahmslos → Inter. Alle Stellen
   (auch Display/Datenwerte) nutzen Inter; Zahlen via tabular-nums ausgerichtet.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Globaler System-Font für Vorgangsdetail-Modal und Workspace */
#case-detail-modal,
#case-detail-modal *,
.page-vorgang-detail,
.page-vorgang-detail *,
.case-tasks-large-content,
.case-tasks-large-content * {
  font-family: var(--font-family-body) !important;
}
/* Vorgangs-Titel: Inter (einheitlich, kein separater Display-Font) */
#case-detail-modal .case-detail-title,
.page-vorgang-detail .workspace-title {
  font-family: var(--font-family-body) !important;
  font-weight: 600 !important;
}
/* Datenwerte (VICore-CI): ebenfalls Inter (tabular-nums), auch in den Vorgangsansichten */
#case-detail-modal .vi-mono, #case-detail-modal .vi-data, #case-detail-modal .doc-ext-badge,
.page-vorgang-detail .vi-mono, .page-vorgang-detail .vi-data, .page-vorgang-detail .doc-ext-badge,
.case-tasks-large-content .vi-mono, .case-tasks-large-content .vi-data, .case-tasks-large-content .doc-ext-badge {
  font-family: var(--vi-font-mono) !important;
}
/* Ghost-Button (sekundär, dezent) */
.btn-ghost {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 12px;
  background: transparent;
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  color: var(--text-primary);
  font-size: var(--text-sm); font-weight: 500;
  cursor: pointer;
  transition: all 0.15s ease;
}
.btn-ghost:hover { background: var(--bg-alt); border-color: var(--primary); color: var(--primary); }
.btn-ghost svg { flex-shrink: 0; }

.btn-link {
  background: transparent; border: none; padding: 4px 8px;
  color: var(--primary); cursor: pointer; font-size: var(--text-sm); font-weight: 500;
  text-decoration: underline;
}
.btn-link:hover { color: var(--primary-dark, #0F5C42); }

/* Empty State – stärker hervorgehoben */
.case-empty-state {
  padding: 32px 24px;
  text-align: center;
  color: var(--muted);
  background: var(--color-surface);
  border-radius: var(--radius-md);
  border: 1px dashed var(--border);
  display: flex; flex-direction: column; align-items: center; gap: 4px;
}

/* ═══════════════════════════════════════════════════════════════════════════
   VORGANG WORKSPACE – Volle Arbeitsansicht als eigene Seite
   /vorgaenge/:caseNumber  und  /vorgaenge/:caseNumber/:tab
   ═══════════════════════════════════════════════════════════════════════════ */

.page-vorgang-detail {
  padding: 0 !important;
  background: #f7f8fa;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
}
/* Muss .page.active (display:block) überstimmen – sonst bricht die Flex-Höhenkette
   und der Tab-Inhalt wird unten abgeschnitten statt zu scrollen. */
.page-vorgang-detail.active {
  display: flex;
}

#vorgang-detail-container {
  display: flex;
  flex-direction: column;
  flex: 1;
  min-height: 0;
}

/* Kopfzeile */
.workspace-header {
  display: flex;
  align-items: stretch;
  gap: 16px;
  padding: 18px 28px;
  background: var(--color-surface);
  border-bottom: 1px solid var(--border);
  flex-shrink: 0;
}
.workspace-header-back {
  display: flex;
  align-items: flex-start;
  padding-top: 4px;
}
.workspace-header-main {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.workspace-meta-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}
.workspace-case-number {
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--muted);
  letter-spacing: 0.04em;
}
.workspace-meta-pill {
  display: inline-block;
  padding: 3px 10px;
  background: var(--gray-100);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-pill);
  font-size: var(--text-xxs);
  font-weight: 500;
  color: var(--gray-700);
}
.workspace-meta-pill.is-warn {
  background: var(--color-warning-soft);
  border-color: #fcd34d;
  color: var(--color-warning-ink);
}
.workspace-title {
  margin: 0;
  font-size: var(--text-xl);
  font-weight: 600;
  color: var(--text-primary);
  letter-spacing: -0.015em;
  line-height: 1.3;
}

/* Hauptbereich */
.workspace-body {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  flex: 1;
  min-height: 0;
  overflow: hidden;
}
.value-na {
  color: var(--gray-500);
  font-style: italic;
  font-size: var(--text-xs);
}

/* Rechter Hauptbereich */
.workspace-main {
  display: flex;
  flex-direction: column;
  background: #f7f8fa;
  min-width: 0;
  overflow: hidden;
}
.workspace-tabs {
  display: flex;
  gap: 4px;
  padding: 0 24px;
  border-bottom: 1px solid var(--border);
  background: var(--color-surface);
  overflow-x: auto;
  flex-shrink: 0;
}
.workspace-tabs .case-tab-button {
  padding: 10px 16px;
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: var(--text-md);
  font-weight: 500;
  color: var(--muted);
  border-bottom: 2px solid transparent;
  transition: all 0.15s ease;
  white-space: nowrap;
  letter-spacing: 0.005em;
}
.workspace-tabs .case-tab-button:hover {
  color: var(--text-primary);
}
.workspace-tabs .case-tab-button.active {
  color: var(--primary);
  border-bottom-color: var(--primary);
  font-weight: 600;
}

.workspace-tab-contents {
  flex: 1;
  overflow-y: auto;
  padding: 18px 24px;
}
.workspace-tab-contents .case-tab-content {
  display: none;
}
.workspace-tab-contents .case-tab-content.active {
  display: block;
  animation: fadeIn 0.18s ease;
}

.workspace-section {
  max-width: 1100px;
  margin: 0 auto;
}
.workspace-section-title {
  margin: 0 0 20px 0;
  font-size: 20px;
  font-weight: 600;
  color: var(--text-primary);
  letter-spacing: -0.01em;
}

.workspace-form,
.workspace-form-card {
  background: var(--color-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 20px;
  margin-bottom: 16px;
}
.workspace-form .form-group,
.workspace-form-card .form-group {
  margin-bottom: 14px;
}
.workspace-form .form-group:last-child,
.workspace-form-card .form-group:last-child {
  margin-bottom: 0;
}
.workspace-form .form-row,
.workspace-form-card .form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-bottom: 14px;
}
.workspace-form .form-row .form-group,
.workspace-form-card .form-row .form-group {
  margin-bottom: 0;
}
.workspace-form .form-help,
.workspace-form-card .form-buttons {
  margin-top: 10px;
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

/* Workspace-Listen */
.workspace-tab-contents .case-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.workspace-tab-contents .case-list-item {
  background: var(--color-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 10px 13px;
  transition: border-color 0.15s ease;
}
.workspace-tab-contents .case-list-item:hover {
  border-color: var(--primary);
}
.workspace-tab-contents .case-list-item-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  margin-bottom: 6px;
}
.workspace-tab-contents .case-list-item-type {
  font-size: var(--text-xxs);
  font-weight: 600;
  color: var(--primary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.workspace-tab-contents .case-list-item-date {
  font-size: var(--text-xs);
  color: var(--muted);
}
.workspace-tab-contents .case-list-item-title {
  font-size: var(--text-md);
  font-weight: 600;
  color: var(--text-primary);
}
.workspace-tab-contents .case-list-item-text {
  font-size: var(--text-sm);
  color: var(--text-primary);
  line-height: 1.5;
  white-space: pre-wrap;
}
.workspace-tab-contents .case-list-item-meta {
  font-size: var(--text-xs);
  color: var(--muted);
  margin-top: 4px;
}
.workspace-tab-contents .case-list-item-tag {
  display: inline-block;
  padding: 2px 8px;
  background: var(--gray-100);
  border: 1px solid var(--vi-border);
  border-radius: 4px;
  font-size: var(--text-xxs);
  font-weight: 500;
  color: var(--gray-700);
}
.workspace-tab-contents .case-list-item-contact-info {
  display: flex;
  gap: 14px;
  margin-top: 6px;
  font-size: var(--text-sm);
}
.workspace-tab-contents .case-list-item-contact-info a {
  color: var(--primary);
  text-decoration: none;
}
.workspace-tab-contents .case-list-item-contact-info a:hover {
  text-decoration: underline;
}
.workspace-tab-contents .case-list-item.is-done {
  opacity: 0.65;
}

/* Workspace Error */
.workspace-error {
  max-width: 560px;
  margin: 60px auto;
  padding: 40px 36px;
  background: var(--color-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  text-align: center;
  box-shadow: 0 1px 3px rgba(0,0,0,0.04);
}
.workspace-error-icon {
  margin: 0 auto 16px auto;
  width: 64px;
  height: 64px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-warning-soft);
  color: var(--color-warning-ink);
  border-radius: 50%;
}
.workspace-error h2 {
  margin: 0 0 12px 0;
  font-size: 20px;
  color: var(--text-primary);
  font-weight: 600;
  letter-spacing: -0.01em;
}
.workspace-error p {
  margin: 0 0 16px 0;
  font-size: var(--text-md);
  color: var(--text-primary);
  line-height: 1.5;
}
.workspace-error-detail {
  font-size: var(--text-xs) !important;
  color: var(--muted) !important;
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  background: var(--bg-alt);
  padding: 8px 12px;
  border-radius: var(--radius-sm);
  word-break: break-word;
}

/* Kompaktansicht – Header zusätzliche Action-Buttons */
.case-detail-header-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}

/* Workspace-Header Aktionen */
.workspace-header-actions {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  flex-shrink: 0;
  padding-top: 4px;
}

/* Drei-Punkte-Menü (Mehr-Menü) */
.case-more-wrap {
  position: relative;
  display: inline-block;
}
.case-more-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 10px;
}
.case-more-menu {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  z-index: 1100;
  min-width: 280px;
  background: var(--color-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: 0 8px 24px rgba(0,0,0,0.12), 0 2px 6px rgba(0,0,0,0.05);
  padding: 6px;
  display: none;
}
.case-more-item {
  display: flex;
  /* Linksbündig erzwingen — global gilt "button { justify-content: center }". */
  justify-content: flex-start;
  align-items: flex-start;
  gap: 12px;
  width: 100%;
  padding: 10px 12px;
  background: transparent;
  border: none;
  border-radius: var(--radius-sm);
  cursor: pointer;
  text-align: left;
  transition: background 0.12s ease;
  color: var(--text-primary);
}
.case-more-item:hover {
  background: var(--bg-alt);
}
.case-more-item svg {
  flex-shrink: 0;
  margin-top: 2px;
  color: var(--muted);
}
.case-more-item:hover svg {
  color: var(--primary);
}
.case-more-item-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.case-more-item-title {
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--text-primary);
}
.case-more-item-hint {
  font-size: var(--text-xxs);
  color: var(--muted);
}
.case-more-divider {
  height: 1px;
  background: var(--border);
  margin: 4px 4px;
}
.case-more-item-danger:hover {
  background: var(--color-danger-soft);
}
.case-more-item-danger:hover svg,
.case-more-item-danger:hover .case-more-item-title {
  color: var(--color-danger-ink);
}
.case-more-item-danger:hover .case-more-item-hint {
  color: var(--color-danger);
}

/* Responsive Workspace */
@media (max-width: 1100px) {
  .workspace-body {
    grid-template-columns: 1fr;
  }
  .workspace-form .form-row,
  .workspace-form-card .form-row {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 767px) {
  .workspace-header { padding: 14px 16px; }
  .workspace-tab-contents { padding: 16px; }
  .workspace-title { font-size: var(--text-lg); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   VORGANGSMODUL · GLOBALES UI-REFINEMENT (Phase 1F-Polish)
   Ruhig, hochwertig, einheitlich
   ═══════════════════════════════════════════════════════════════════════════ */

/* ══════════════════════════════════════════════════════════════════════════════
   KANONISCHE FILTERLEISTE (.vi-fbar) — EINE Optik für ALLE Listenseiten
   Vorgänge · Vorgangsakten · Tickets · Aufgaben · Aufträge (Nutzerwunsch 24.07.2026:
   „4 Bereiche – 4 verschiedene Filter. Bitte einheitliches Design! IMMER!").
   Regeln: weiße Karte · Felder 36 px / Radius 10 · Schnellwahl als Pillen (32 px, rund) ·
   Platzhalter statt Feld-Labels in der Primärzeile · „Weitere Filter" klappt Zusatzfelder ein.
   NEUE Listenseite = diese Klasse verwenden, KEINE eigene Filteroptik erfinden.
   ══════════════════════════════════════════════════════════════════════════════ */
.vi-fbar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px;
  background: var(--color-surface); border: 1px solid var(--vi-border, #D8DFDC);
  border-radius: var(--vi-r-lg, 16px); padding: 9px 14px; margin-bottom: 8px;
  box-shadow: var(--shadow-xs, 0 1px 2px rgba(0,0,0,.02));
}
/* Eingabefelder einheitlich (überschreibt die je Seite gewachsenen Höhen/Radien) */
.vi-fbar .form-input, .vi-fbar .form-select {
  height: 36px; min-height: 36px; border-radius: var(--radius-lg); border: 1px solid var(--vi-border, #D8DFDC);
  background: var(--color-surface); font-size: var(--text-sm); padding: 0 12px; box-sizing: border-box;
}
.vi-fbar .form-input:focus, .vi-fbar .form-select:focus {
  outline: none; border-color: var(--green-600); box-shadow: 0 0 0 3px rgba(19,109,57,.12);
}
/* Suche dominiert, Auswahlfelder bleiben kompakt */
.vi-fbar .vi-fbar-search { flex: 2 1 240px; min-width: 200px; }
.vi-fbar .form-select { flex: 0 1 190px; min-width: 150px; }
/* In der Primärzeile tragen Platzhalter die Bedeutung — keine Feld-Labels (ruhigeres Bild) */
.vi-fbar > .form-group > .form-label { display: none; }
.vi-fbar > .form-group { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1 1 190px; }
.vi-fpill.is-active { background: var(--vi-green-deep, #0F5C42); border-color: var(--vi-green-deep, #0F5C42); color: var(--color-surface); }

/* ───── Filterleiste „cfx" (Vorgänge UND Vorgangsakten — EINE Design-Sprache) ───── */
.cases-filter-bar.cfx {
  background: transparent;
  border: 0;
  border-radius: 0;
  padding: 0;
  gap: 14px;
  margin-bottom: 20px;
}
#page-vorgaenge .cases-filter-label {
  font-size: var(--text-xxs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--gray-500);
}
.cases-filter-bar.cfx .form-input,
.cases-filter-bar.cfx .form-select {
  height: 36px;
  padding: 0 12px;
  font-size: var(--text-sm);
  border: 1px solid var(--vi-border, #D8DFDC);
  border-radius: var(--radius-lg);
  background: var(--color-surface);
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.cases-filter-bar.cfx .form-input:focus,
.cases-filter-bar.cfx .form-select:focus {
  outline: none;
  border-color: var(--green-600);
  box-shadow: 0 0 0 3px rgba(59,130,246,0.10);
}

/* ── Filterleiste: kompakt, schlanke Zeilen, responsive ──
   Bar = vertikaler Stapel aus Filterzeilen; jede Zeile = flexible, umbruchfähige Felderreihe. */
.cases-filter-bar.cfx {
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
#page-vorgaenge .cases-filter-row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;   /* Felder oben bündig; „Unterebenen"-Toggle hängt nur unter dem Objektfeld */
  gap: 8px 14px;
}
#page-vorgaenge .cases-filter-group { flex: 1 1 160px; min-width: 150px; }
/* `.cases-filter-object` entfiel am 17.08.2026 (ein Objektkontext, in der Hauptnavigation). */
#page-vorgaenge .cases-filter-search { flex: 2 1 220px; min-width: 200px; }
#page-vorgaenge .cases-filter-category { flex: 1.3 1 200px; }

/* Objekt-Livesuche */
.cases-objsearch { position: relative; }
.cases-objsearch-icon {
  position: absolute; left: 11px; top: 50%; transform: translateY(-50%);
  color: var(--gray-500); pointer-events: none;
}
.cases-objsearch-input { width: 100%; padding-left: 32px !important; padding-right: 30px !important; }
.cases-obj-clear {
  position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
  width: 18px; height: 18px; border: none; background: var(--gray-300); color: var(--gray-700);
  border-radius: 50%; cursor: pointer; align-items: center; justify-content: center;
  font-size: var(--text-sm); line-height: 1;
}
.cases-obj-clear:hover { background: var(--gray-300); }

/* Status-/Prioritäts-Custom-Dropdown (mit Farb-Dots) */
.cases-cdrop { position: relative; }
.cases-cdrop-btn {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  width: 100%; height: 38px; padding: 0 10px 0 12px;
  border: 1px solid var(--vi-border); border-radius: var(--radius-md); background: var(--color-surface); cursor: pointer;
  font-size: var(--text-sm); color: var(--gray-900); font-family: inherit; text-align: left;
  transition: border-color 0.15s ease;
}
.cases-cdrop-btn:hover { border-color: var(--vi-border); }
.cases-cdrop-val { display: inline-flex; align-items: center; gap: 7px; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.cases-cdrop-caret { color: var(--gray-500); flex-shrink: 0; }
.cases-cdrop-menu {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 1200;
  background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg);
  box-shadow: 0 10px 28px rgba(40, 30, 20,0.14); padding: 5px; min-width: 180px;
}
.cases-cdrop-opt {
  display: flex; align-items: center; justify-content: flex-start; gap: 9px;
  width: 100%; min-height: 34px; padding: 7px 10px; box-sizing: border-box;
  border: none; background: transparent; border-radius: var(--radius-sm); cursor: pointer;
  font-size: var(--text-sm); color: var(--gray-700); text-align: left; font-family: inherit; line-height: 1.25;
}
.cases-cdrop-opt:hover { background: var(--gray-100); }
.cases-cdrop-opt.is-current { background: var(--gray-50); font-weight: 600; color: var(--gray-900); }
.cases-cdrop-opt-label { flex: 1; min-width: 0; text-align: left; }
.cases-cdrop-check { color: var(--green-600); flex-shrink: 0; margin-left: auto; }
.cases-cdrop-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.cases-cdrop-dot-all { background: var(--gray-300); }

/* Kategorie-Dropdown: suchbar + scrollbar */
.cases-cat-menu {
  padding: 0;
  left: 0; right: auto; min-width: min(340px, 90vw); max-width: min(380px, calc(100vw - 16px));
}
.cases-cat-search-wrap { position: relative; padding: 8px; border-bottom: 1px solid var(--gray-100); }
.cases-cat-search-icon { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); color: var(--gray-500); pointer-events: none; z-index: 1; }
/* Höhere Spezifität als globales input[type=text] (sonst wird padding-left überschrieben) */
.cases-cat-search-wrap .cases-cat-search {
  width: 100%; box-sizing: border-box; height: 34px; padding: 0 10px 0 34px;
  border: 1px solid var(--vi-border); border-radius: var(--radius-sm); font-size: var(--text-sm); font-family: inherit; color: var(--gray-900);
}
.cases-cat-search-wrap .cases-cat-search:focus { outline: none; border-color: var(--green-600); box-shadow: 0 0 0 3px rgba(59,130,246,0.10); }
.cases-cat-list { max-height: min(340px, 50vh); overflow-y: auto; padding: 5px; }
.cases-cat-group {
  font-size: var(--text-xxs); font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em;
  color: var(--gray-500); padding: 8px 10px 4px;
}
.cases-cat-item { align-items: flex-start; }
.cases-cat-item .cases-cdrop-opt-label { white-space: normal; }
.cases-cat-empty { padding: 16px 10px; text-align: center; color: var(--gray-500); font-style: italic; font-size: var(--text-xs); }

/* Reset-Button */
.cases-filter-reset-btn {
  display: inline-flex; align-items: center; gap: 6px;
  height: 38px; padding: 0 14px; align-self: flex-end; margin-left: auto;
  border: 1px solid var(--vi-border); border-radius: var(--radius-md); background: var(--color-surface); cursor: pointer;
  font-size: var(--text-sm); font-weight: 500; color: var(--gray-700); font-family: inherit;
}
.cases-filter-reset-btn:hover { background: var(--gray-50); border-color: var(--vi-border); color: var(--gray-900); }

/* ── Aktiver Filter: grüner Akzent → man sieht auf einen Blick, was gefiltert ist ── */
.cases-cdrop-btn.is-set { border-color: var(--green-600); background: var(--green-50); color: var(--green-700); font-weight: 600; }
.cases-cdrop-btn.is-set .cases-cdrop-caret { color: var(--green-600); }
.cases-cdrop-btn:hover { border-color: #CFC8B8; }
.cases-cdrop-btn:focus-visible { outline: none; border-color: var(--green-600); box-shadow: 0 0 0 3px rgba(19,109,57,0.12); }

/* Suchfeld mit Lupen-Icon (links) + aktiv-Markierung */
.cases-search-wrap { position: relative; }
.cases-search-wrap .cases-search-ic { position: absolute; left: 11px; top: 50%; transform: translateY(-50%); color: var(--gray-500); pointer-events: none; }
.cases-filter-bar.cfx .cases-search-input { padding-left: 34px; width: 100%; box-sizing: border-box; }
.cases-search-wrap.is-set .cases-search-ic { color: var(--green-600); }
.cases-filter-bar.cfx .cases-search-wrap.is-set .cases-search-input { border-color: var(--green-600); background: var(--green-50); }

/* Besitzer-Dropdown: Anzahl je Besitzer (Badge rechts) + „ich"-Marker */
.cases-owner-count { flex-shrink: 0; min-width: 20px; height: 18px; padding: 0 6px; display: inline-flex; align-items: center; justify-content: center;
  font-size: var(--text-xxs); font-weight: 600; color: var(--gray-700); background: var(--gray-100); border-radius: var(--radius-md); }
.cases-cdrop-opt.is-current .cases-owner-count { background: #E3EFE7; color: var(--green-700); }
.cases-owner-badge { font-size: 9.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .03em; color: var(--green-600);
  background: #E3EFE7; border-radius: 4px; padding: 1px 5px; margin-left: 5px; vertical-align: middle; }

/* Sortier-Dropdown (Standard: zuletzt geändert) mit Sort-Icon */
#page-vorgaenge .cases-filter-sort { flex: 1.1 1 180px; min-width: 170px; }
.cases-sort-wrap { position: relative; }
.cases-sort-wrap .cases-sort-ic { position: absolute; left: 11px; top: 50%; transform: translateY(-50%); color: var(--gray-500); pointer-events: none; z-index: 1; }
#page-vorgaenge .cases-filter-bar .cases-sort-select { padding-left: 34px; width: 100%; box-sizing: border-box; cursor: pointer; }
#page-vorgaenge .cases-filter-bar .cases-sort-select:focus { border-color: var(--green-600); box-shadow: 0 0 0 3px rgba(19,109,57,0.12); }

/* ══════════════════════════════════════════════════════════════════════════════
   Vorgänge · Filterleiste — Redesign „cfx" (drei Ebenen)
   1) Finden & Kontext (Suche/Objekt/Sortierung) · 2) Schnellwahl (Meine + Status-Pills) ·
   3) Weitere Filter (kompakte Tokens). Baut auf den bestehenden Komponenten auf.
   ══════════════════════════════════════════════════════════════════════════════ */
.cases-filter-bar.cfx { gap: 12px 14px; padding: 12px 16px; }
.cfx-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }

/* Ebene 1 — Primärzeile: Suche dominiert, Objekt daneben, Sortierung rechts.
   flex-start (NICHT stretch): die Objekt-Spalte ist durch die „Unterebenen"-Checkbox höher —
   stretch würde Suchfeld/Sortierung mitziehen und deren zentrierte Icons (top:50%) nach unten
   verschieben. Mit flex-start bleiben alle drei Felder 42px hoch + oben bündig, „Unterebenen" hängt darunter. */
.cfx-row-primary { align-items: flex-start; }
/* Kleinere Flex-Basis, damit die Primäraktion rechts auf dieselbe Zeile passt (Umbruch-Entscheidung
   nutzt die Basis, nicht die geschrumpfte Breite). flex-grow hält die Suche weiterhin dominant. */
/* `.cfx-search` ist nur noch der LAYOUT-Platzhalter für das zentrale Suchfeld `.vi-search`
   (Rahmen/Fokus/Icon kommen aus design-system.css). Das frühere `.cfx-obj` (Objektfeld) ist
   am 17.08.2026 entfallen — der Objektkontext wird einmal in der Hauptnavigation gewählt. */
.cfx-search { flex: 3 1 240px; min-width: 220px; }
.cfx-type   { flex: 0 1 200px; min-width: 180px; }
.cases-filter-bar.cfx .cfx-search.vi-search { --search-height: 42px; --search-radius: 10px; }
.cases-filter-bar.cfx .cfx-sort .cases-sort-select { height: 42px; border-radius: var(--radius-lg); padding-left: 38px; }
/* Aktenart-Picker (VA) auf gleiche Pillenhöhe/-breite wie Suche/Objekt bringen. */
.cfx-type .vi-obj-picker-wrap { min-height: 42px; width: 100%; }

/* Ebene 2 — Schnellwahl */
.cfx-row-quick { gap: 6px 8px; }
.cfx-quick-label {
  font-size: var(--text-xxs); font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
  color: var(--gray-500); margin-right: 2px;
}
.cfx-mine.is-active {
  background: var(--green-600); border-color: var(--green-600); color: var(--color-surface); box-shadow: 0 1px 3px rgba(19,109,57,.28);
}
.cfx-mine.is-active svg { stroke: var(--color-surface); }

/* Status-Schnellwahl (Segment-Pills): ein Klick pro Status, aktive Pille in Statusfarbe */
.cfx-status-pills { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.cfx-status-pill {
  display: inline-flex; align-items: center; gap: 7px; height: 32px; padding: 0 13px;
  border: 1px solid var(--vi-border); border-radius: var(--radius-pill); background: var(--color-surface); cursor: pointer;
  font-size: var(--text-xs); font-weight: 600; color: var(--gray-700); font-family: inherit; white-space: nowrap;
  transition: background .13s ease, border-color .13s ease, color .13s ease, box-shadow .13s ease;
}
.cfx-status-pill:hover { background: var(--gray-50); border-color: #D7CFBE; }
.cfx-status-pill:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(19,109,57,.14); }
.cfx-status-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.cfx-status-pill.is-active {
  color: var(--pill-fg, #fff); border-color: transparent; background: var(--pill-c, #147352);
  box-shadow: 0 1px 3px rgba(40,30,20,.16);
}
.cfx-status-pill.is-active .cfx-status-dot { background: var(--pill-fg, #fff) !important; }
.cfx-status-all.is-active { background: #3A362F; }
.cfx-row-facets.is-open { display: flex; }
.cfx-more-toggle.is-open { border-color: var(--green-600); color: var(--green-600); }
.cfx-more-toggle.is-open .cfx-more-caret { transform: rotate(180deg); }
.cfx-row-facets .cases-cdrop-btn {
  width: auto; height: 34px; padding: 0 13px; gap: 7px; border-radius: var(--radius-pill); max-width: 260px; font-weight: 600;
}
.cfx-row-facets .cases-cdrop-btn.is-set .cfx-token-ic { color: var(--green-600); }
/* Fachfilter DIREKT in der Primärzeile (Betrieb: Leistungsbereich · Bauteilart · Dienstleister):
   Sie dürfen der dominanten Suche und dem Objektfilter keinen Platz wegnehmen — der Objektkontext
   ist der wichtigste Filter und bleibt vorn. Deshalb kein flex-grow; sie umbrechen als Letztes. */
.cfx-row-primary > .cfx-token-cf { flex: 0 1 200px; min-width: 168px; max-width: 240px; }
/* Ohne Objektfeld darf die Suche den frei gewordenen Platz nehmen — sonst bliebe genau
   dort eine Lücke in der Zeile. */
.cfx-row-dense.cfx-row-primary > .cfx-search { flex: 2.6 1 260px; min-width: 200px; }
.cfx-row-facets .cases-filter-reset-btn { height: 34px; border-radius: var(--radius-pill); align-self: center; margin-left: auto; }

/* Ergebniszeile: „Aktenspalte" als ruhige Ansichtsoption rechts */
.cases-count-bar .cases-viewopt { font-weight: 500; }

/* Responsive: unter 720px stapeln die Primärfelder; Status-Label bekommt eine eigene Zeile */
@media (max-width: 720px) {
  .cfx-search, .cfx-sort { flex: 1 1 100%; margin-left: 0; }
  .cfx-primary-action { flex: 1 1 100%; justify-content: center; align-self: stretch; }
  .cfx-quick-label { flex-basis: 100%; margin: 2px 0 0; }
}

/* ── Vorgangstabelle: verfeinerte Typo-Hierarchie — Titel dominant, übrige Spalten ruhig/sekundär ── */
.cases-row-title { font-size: var(--text-md); font-weight: 650; line-height: 1.3; color: var(--vi-ink, #211D17); }
.cases-row-number { font-size: var(--text-xxs); font-weight: 600; letter-spacing: 0; color: var(--muted); white-space: nowrap; }
.cases-obj-name { font-size: var(--text-sm); font-weight: 600; line-height: 1.28; }
.cases-obj-meta { font-size: var(--text-xxs); color: var(--muted); margin-top: 1px; }
.cases-col-category { font-size: var(--text-xs); color: var(--vi-ink-70, #5C564C); }
.cases-col-priority .vi-chip { height: 19px; padding: 0 7px; gap: 4px; font-size: var(--text-xxs); }
.cases-col-priority .vi-chip__dot { width: 5px; height: 5px; }
.cases-col-next-action { font-size: var(--text-xs); text-align: center; }
/* Besitzer ruhiger (transparent, Kasten erst bei Hover) → weniger „Formular"-Optik in der Tabelle */
.cases-col-owner .cases-owner-select { background-color: transparent; font-weight: 500; }
.cases-col-owner .cases-owner-select:hover { background-color: var(--bg-alt, #F6F8F7); }
.cases-col-owner .cases-owner-select.is-unassigned { font-size: var(--text-xxs); font-weight: 400; color: var(--muted); }

/* `.cases-tip` ist ersatzlos entfallen (16.08.2026): ein modul-eigenes
   Tooltip-System mit eigenem Layer, eigener Position und eigener Farbe neben der
   Hoverbox der Objektzelle und dem `title` der Tabellenzelle. Zuständig ist jetzt
   allein die zentrale Overlay-Ebene (`vi-overlay.css` / `.vi-ovl-tip`).
   KEIN neues Tooltip-CSS je Modul. */

/* Ergebniszeile — EINE Definition für alle Listen (Vorgangsliste führend). Betrieb
   (Anlagenbestand · Einzelbauteile) nutzt exakt dieselbe Typografie. */
#page-vorgaenge .cases-count-info,
#anl-count-bar .cases-count-info,
#bt-count-bar .cases-count-info {
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--gray-500);
  margin-bottom: 12px;
  padding: 0;
}

.cases-table {
  background: var(--color-surface);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-xl);   /* einheitlich mit Header-Top + Listen-Bottom (--vi-r-lg) */
  overflow-x: auto;   /* horizontaler Scroll statt Clip (behebt rechts-abgeschnittene Spalten) */
  box-shadow: 0 1px 2px rgba(0,0,0,0.02);
}

.cases-table-header,
.cases-row {
  display: grid;
  /* Spalten: Nummer · Titel · Objekt · Kategorie · Status · Priorität · Besitzer · VA · Nächste-Aktion · Aktion
     Nummer/Status/Kategorie/Priorität/Besitzer/VA/Aktion kompakt (feste px) → Titel & Objekt dominieren
     (Hauptinhalt). „VA" = feste, schlanke Vorgangsakte-Spalte (nur Ordner-Icon). Status bewusst schmaler
     als früher; das kompakte Control (.csd-btn) klemmt „In Bearbeitung" nicht ab. */
  grid-template-columns: var(--cases-cols, 72px 2.6fr 1.7fr 88px 84px 68px 108px 34px 0.55fr 36px);
  gap: 11px;
  padding: 13px 16px;
  align-items: center;
  min-width: 812px;   /* verhindert Kompression unter nutzbares Minimum → Scroll setzt ein */
}
/* Zellen dürfen schrumpfen (sonst erzwingen lange Titel/Adressen Überlauf auf 14"-Laptops). */
.cases-table-header > div, .cases-row > div { min-width: 0; }

.cases-table-header {
  background: var(--gray-50);
  border-bottom: 1px solid var(--vi-border);
  font-size: var(--text-xxs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--gray-500);
  position: sticky;
  top: 0;
  z-index: 5;
}

.cases-list {
  border: none;
  background: var(--color-surface);
}

/* Nachlade-Leiste des Render-Windowing (Vorgangsliste) */
.cases-more-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 14px 0 6px;
}
.cases-more-wrap:empty { display: none; }
.cases-more-info { font-size: var(--text-xs); color: #667085; }
.cases-more-sentinel { width: 100%; height: 1px; pointer-events: none; }

.cases-row {
  border-bottom: 1px solid var(--gray-100);
  cursor: pointer;
  transition: background-color 0.12s ease;
  font-size: var(--text-sm);
}
.cases-row:last-child { border-bottom: none; }
.cases-row:hover {
  background-color: var(--gray-50);
}
.cases-row:focus {
  outline: 2px solid var(--green-600);
  outline-offset: -2px;
  background-color: var(--green-50);
}

.cases-row-number {
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--text-primary);
  letter-spacing: 0.02em;
}
.cases-row-title {
  font-weight: 600;
  color: var(--text-primary);
  font-size: var(--text-md);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cases-row-subline {
  font-size: var(--text-xxs);
  margin-top: 2px;
}
.cases-col-object,
.cases-col-category {
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Objektspalte zweizeilig: Bezeichnung (kräftig) + Kontext/Adresse (sekundär).
   display:block überschreibt die generische .cases-col-*-Flex-Regel (sonst stehen
   Name & Adresse nebeneinander und der Name wird zu „Ober…" gequetscht). */
.cases-col-object {
  display: block;
  white-space: normal;
  overflow: hidden;
  line-height: 1.3;
}
.cases-obj-name {
  font-weight: 600; color: var(--text-primary);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.cases-obj-meta {
  font-size: var(--text-xs); color: var(--muted); margin-top: 1px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* Aktiver Filter-Chip „Fällige Wiedervorlagen" in der Zählerleiste */
.cases-count-bar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.cases-due-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px;
  background: var(--color-danger-soft); color: var(--color-danger-ink); border: 1px solid #F3C9C4;
  border-radius: var(--radius-pill); font-size: var(--text-xs); font-weight: 600; cursor: pointer;
  line-height: 1; transition: background .12s;
}
.cases-due-chip:hover { background: #F6D3CE; }
.cases-due-chip-x { font-weight: 700; opacity: .75; margin-left: 1px; }

/* Aktiver Filter als entfernbarer Chip — EINE app-weite Komponente.
   Verallgemeinerung von .cases-due-chip (das war fest auf zwei Cockpit-Deeplinks
   verdrahtet). Neutral eingefärbt, weil ein Chip einen Filter zeigt, keinen Alarm. */
.vi-fchip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px; line-height: 1; cursor: pointer; font-family: inherit;
  background: var(--bg-tertiary, #EFF2F1); color: var(--text-secondary, #3A4441);
  border: 1px solid var(--border-light, #D8DFDC); border-radius: var(--radius-pill);
  font-size: var(--text-xs); font-weight: 600; transition: background .12s, border-color .12s, color .12s;
}
.vi-fchip:hover { background: var(--bg-alt, #EFF2F1); border-color: var(--border, #D7CFBE); color: var(--text-primary, #141A17); }
.vi-fchip:focus-visible { outline: none; border-color: var(--accent, #147352); box-shadow: 0 0 0 3px rgba(19,109,57,.14); }
.vi-fchip-x { font-weight: 700; opacity: .6; margin-left: 1px; }
.vi-fchip:hover .vi-fchip-x { opacity: 1; }

/* ── „Meine Vorgänge"-Umschalter in der Zählerleiste ─────────────────────────── */
.cases-mine-toggle {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 12px;
  background: var(--vi-surface-2, #F6F8F7); color: var(--text, #2B2722);
  border: 1px solid var(--vi-border, #E7E3DA);
  border-radius: var(--radius-pill); font-size: var(--text-xs); font-weight: 600; cursor: pointer;
  line-height: 1; transition: background .12s, border-color .12s, color .12s;
}
.cases-mine-toggle:hover { background: #EEEAE1; }
.cases-mine-toggle.is-active {
  background: var(--vi-green-tint, #EAF3EC); color: var(--green-600); border-color: #B7D9C2;
}
.cases-mine-toggle.is-active svg { stroke: var(--green-600); }

/* ── Anzeigegrund-Chips in der Vorgangszeile (Meine Aufgabe / Meine WV) ───────── */
.cases-row-reasons { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 4px; }
.vi-chip.vi-chip--mine-task { background: #2563EB14; color: #1D4ED8; border: 1px solid #2563EB33; }
.vi-chip.vi-chip--mine-rem  { background: #D9770614; color: #B45309; border: 1px solid #D9770633; }

/* ── Aufgaben-Modal (Vorgang) ─────────────────────────────────────────────────── */
.case-task-modal-content { max-width: 560px; width: 100%; }
.case-task-modal-content .ctm-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 14px;
}
.case-task-modal-content .ctm-options {
  margin-top: 6px; padding-top: 12px; border-top: 1px solid var(--vi-border, #E7E3DA);
  display: flex; flex-direction: column; gap: 8px;
}
.case-task-modal-content .ctm-check {
  display: flex; align-items: center; gap: 8px;
  font-size: var(--text-sm); color: var(--text, #2B2722); cursor: pointer;
}
.case-task-modal-content .ctm-check input { width: 16px; height: 16px; flex-shrink: 0; }
@media (max-width: 600px) {
  .case-task-modal-content .ctm-grid { grid-template-columns: 1fr; }
}
/* ── Einheitliche Tabellenkopf-Optik ──────────────────────────────────────────
   Überschreibt u. a. den dunklen color:var(--text-primary) von .cases-col-object/
   .cases-col-category (der NUR für Zeilen gedacht ist) → alle Header gleich grau. */
.cases-table-header > div {
  color: var(--gray-500);
  font-size: var(--text-xxs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

/* ── Inline-Titelbearbeitung (Stift) ── */
.cases-col-title-row { display: flex; align-items: flex-start; gap: 6px; }
.cases-col-title-row .cases-row-title { flex: 1 1 auto; min-width: 0; }
.cases-title-edit {
  flex-shrink: 0; width: 24px; height: 24px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: none; border: none; border-radius: var(--radius-sm);
  color: var(--muted); cursor: pointer; opacity: 0; transition: opacity .12s, background .12s, color .12s;
}
.cases-row:hover .cases-title-edit,
.cases-title-edit:focus-visible { opacity: 1; }
.cases-title-edit:hover { background: var(--bg-alt, #EFF2F1); color: var(--green-600); }

/* Vorgangsakte-Zugehörigkeit: kompaktes Ordner-Icon in der Titelzeile (statt platzraubender
   Subline). Hover „erweitert" die volle Aktenreferenz als Tooltip; Klick öffnet die Akte.
   Dezent-immer-sichtbar → Titel & Objekt bleiben der Fokus. */
.cases-cf-icon {
  flex-shrink: 0; width: 22px; height: 22px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: none; border: none; border-radius: var(--radius-sm);
  color: var(--muted, #5F6B66); cursor: pointer;
  transition: background .12s, color .12s;
}
.cases-cf-icon:hover,
.cases-cf-icon:focus-visible { background: var(--vi-green-tint, #EAF3EC); color: var(--green-600); outline: none; }
.cases-title-input {
  width: 100%; font-size: var(--text-md); font-weight: 600; padding: 4px 8px;
  border: 1.5px solid var(--green-600); border-radius: var(--radius-sm); outline: none;
  font-family: inherit; color: var(--text-primary); box-sizing: border-box;
}

/* ── Inline-Selects: Status & Besitzer ── */
.cases-inline-select {
  max-width: 100%; appearance: none; -webkit-appearance: none;
  border: 1px solid transparent; border-radius: var(--radius-sm);
  padding: 3px 16px 3px 8px; font-family: inherit; font-size: var(--text-xxs); line-height: 1.25;
  cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='6' viewBox='0 0 8 6' fill='none' stroke='%23888' stroke-width='1.4'%3E%3Cpath d='M1 1.5l3 3 3-3'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 6px center; background-size: 7px 5px;
  transition: background-color .12s, border-color .12s;
}
.cases-inline-select:focus { outline: none; border-color: var(--green-600); }
.cases-inline-select.cases-saving { opacity: .5; pointer-events: none; }
.cases-status-select { font-weight: 600; }
.cases-status-select.status-neu           { color: var(--color-danger); background-color: var(--color-danger-soft); }
.cases-status-select.status-inbearbeitung { color: var(--green-600); background-color: #E6F4EA; }
.cases-status-select.status-wartet        { color: var(--color-warning-ink); background-color: var(--color-warning-soft); }
.cases-status-select.status-pruefung      { color: var(--color-info); background-color: #E7F0F7; }
.cases-status-select.status-erledigt      { color: var(--color-success-ink); background-color: #E6F4EA; }
.cases-status-select.status-archiviert    { color: var(--gray-500); background-color: var(--gray-100); }
.cases-owner-select { color: var(--text-primary); background-color: var(--bg-alt, #F6F8F7); font-weight: 500; }
.cases-owner-select.is-unassigned { color: var(--muted); font-weight: 400; }
.cases-col-owner { min-width: 0; }

/* ── Tabellen-UX: max. 2 Zeilen je Textzelle (Nummer/Badges unberührt) ── */
.cases-col-number, .cases-row-number { white-space: nowrap; }
.cases-row-title,
.cases-col-category,
.cases-col-next-action {
  white-space: normal;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  line-height: 1.3;
}

/* ── Spalten-Resize (nur Desktop, via JS aktiviert) ── */
.cases-table-header > div { position: relative; }
.cases-col-resize-handle {
  position: absolute; top: 0; bottom: 0; right: -7px; width: 12px;
  cursor: col-resize; z-index: 6;
}
.cases-col-resize-handle::after {
  content: ''; position: absolute; top: 20%; bottom: 20%; left: 5px; width: 2px;
  background: transparent; border-radius: 2px; transition: background .12s;
}
.cases-col-resize-handle:hover::after,
.cases-table.is-col-resizing .cases-col-resize-handle::after { background: var(--green-600); }
body.cases-col-resizing, body.cases-col-resizing * { cursor: col-resize !important; user-select: none !important; }

/* ── Sortierbare Spaltenköpfe ──────────────────────────────────────────────── */
.cases-th {
  cursor: pointer;
  user-select: none;
  display: flex;
  align-items: center;
  gap: 5px;
  transition: color .12s;
}
.cases-th:hover { color: var(--text-primary, #141A17); }
.cases-th .cases-th-label { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Sortier-Icon (dezente ↑↓ SVG) */
.cases-sort-svg { flex-shrink: 0; display: block; opacity: .3; transition: opacity .12s; }
.cases-th:hover .cases-sort-svg { opacity: .55; }
/* Aktive Sortierung: Icon + Label grün */
.cases-th.is-sorted .cases-sort-svg { opacity: 1; stroke: var(--green-600); }
.cases-th.is-sorted .cases-th-label { color: var(--green-600); }
/* Sortier-Icon erhält keinen Resize-Handle-Hover */
.cases-col-resize-handle { pointer-events: all; }

.cases-col-next-action {
  font-size: var(--text-xs);
  color: var(--text-primary);
}
.cases-col-next-action.is-overdue { color: var(--color-danger-ink); font-weight: 500; }
.cases-col-next-action.is-today { color: var(--color-warning-ink); font-weight: 500; }
.cases-col-next-action.is-muted { color: var(--muted); }

/* ── Benutzerdefiniertes Status-Dropdown (CSD) ──────────────────────────────
   Ersetzt nativen <select>: natives Select erbt Background-Farbe in die OS-Dropdown-Liste.
   CSD: Button-Chip mit Statusfarbe, Menu neutral-weiß mit farbigen Dots je Option.
   Wiederverwendbar: .csd-btn.status-* Klassen analog zu .cases-status-select.status-*.
   ─────────────────────────────────────────────────────────────────────────── */
.cases-col-status { overflow: visible; }   /* erlaubt Dropdown-Overlay aus der Grid-Zelle */
/* csd-wrap: füllt die gesamte Status-Zelle → ganzer Zellenbereich klickbar */
.csd-wrap { display: flex; align-items: center; width: 100%; min-width: 0; }
.csd-btn {
  display: flex; align-items: center; justify-content: flex-start; flex: 1; min-width: 0; width: 100%;
  appearance: none; border: 1px solid transparent; border-radius: var(--radius-sm);
  padding: 3px 14px 3px 8px; font-family: inherit; font-size: var(--text-xxs); line-height: 1.25; letter-spacing: -0.1px;
  font-weight: 600; cursor: pointer; white-space: nowrap; overflow: hidden;
  text-align: left;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='6' viewBox='0 0 8 6' fill='none' stroke='%23888' stroke-width='1.4'%3E%3Cpath d='M1 1.5l3 3 3-3'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 5px center; background-size: 7px 5px;
  transition: border-color .12s;
}
.csd-btn:hover, .csd-btn[aria-expanded="true"] { border-color: rgba(0,0,0,.18); }
/* Statusfarben für den Chip-Button (gleiche Farbgebung wie zuvor, zentral an einer Stelle) */
.csd-btn.status-neu           { color: var(--color-danger); background-color: var(--color-danger-soft); }
.csd-btn.status-inbearbeitung { color: var(--green-700); background-color: var(--color-success-soft); }
.csd-btn.status-wartet        { color: #7D520A; background-color: var(--color-warning-soft); }
.csd-btn.status-pruefung      { color: var(--color-info); background-color: #E7F0F7; }
.csd-btn.status-erledigt      { color: var(--color-success-ink); background-color: var(--color-success-soft); }
.csd-btn.status-archiviert    { color: var(--gray-500); background-color: var(--gray-100); }
.csd-btn.cases-saving         { opacity: .5; pointer-events: none; }
/* Dropdown-Menü: IMMER weißer Hintergrund, nur Dot je Option eingefärbt */
.csd-menu {
  /* position + top + left werden per JS gesetzt (fixed für overflow-safe Positionierung) */
  background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg);
  box-shadow: 0 6px 24px rgba(0,0,0,.11), 0 1px 4px rgba(0,0,0,.06);
  padding: 5px; z-index: 9000; min-width: 158px;
  display: none;
}
.csd-opt {
  display: flex; align-items: center; justify-content: flex-start; gap: 9px;
  width: 100%; padding: 7px 10px; border-radius: var(--radius-sm);
  cursor: pointer; font-size: var(--text-xs); text-align: left;
  background: none; border: none; font-family: inherit;
  color: var(--text-primary, #141A17); white-space: nowrap;
  transition: background .1s;
}
.csd-opt:hover { background: var(--gray-50); }
.csd-opt.is-cur { font-weight: 700; }
.csd-opt-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; background: var(--csd-dot, #999); }
.csd-opt-check { margin-left: auto; flex-shrink: 0; opacity: .55; }
/* Zeile leicht ausblenden sobald Status geändert + Filterentfernung folgt */
.cases-row.is-status-changed { opacity: .5; transition: opacity .5s ease; }

.cases-badge-status {
  display: inline-block;
  padding: 3px 10px;
  border-radius: var(--radius-sm);
  font-size: var(--text-xxs);
  font-weight: 600;
  color: var(--color-surface);
  letter-spacing: 0.02em;
}

.cases-row-action {
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-sm);
  cursor: pointer;
  color: var(--gray-500);
  transition: all 0.12s ease;
}
.cases-row-action:hover {
  background: var(--bg-alt);
  color: var(--green-600);
  border-color: var(--green-600);
}

.cases-empty {
  padding: 60px 24px;
  text-align: center;
  background: var(--color-surface);
  border: 1px dashed var(--vi-border);
  border-radius: var(--radius-lg);
}
.cases-empty-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 72px;
  height: 72px;
  background: var(--gray-100);
  color: var(--gray-500);
  border-radius: 50%;
  margin-bottom: 16px;
}
.cases-empty-title {
  font-size: var(--text-base);
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 6px;
}
.cases-empty-hint {
  font-size: var(--text-sm);
  color: var(--muted);
}

/* Responsive: schmale Spalten ausblenden (Spaltenzahl im Template = sichtbare Zellen) */
@media (max-width: 1280px) {
  .cases-table-header,
  .cases-row {
    /* Alle 10 Spalten bleiben (inkl. schlanker VA-Spalte), nur enger gepackt — Titel/Objekt bleiben präsent. */
    grid-template-columns: var(--cases-cols, 64px 2.6fr 1.6fr 82px 84px 60px 100px 30px 0.5fr 32px);
    gap: 10px;
    padding: 12px 13px;
    min-width: 792px;
  }
}
@media (max-width: 1000px) {
  .cases-table-header,
  .cases-row {
    /* Objekt/Kategorie/Priorität/Besitzer/VA ausgeblendet → 5 Spalten */
    grid-template-columns: 110px 1.5fr 100px 1fr 44px;
    min-width: 480px;
  }
  .cases-col-object,
  .cases-col-category,
  .cases-col-priority,
  .cases-col-owner,
  .cases-col-va,
  .cases-col-va-h { display: none; }
}

/* ───── Workspace · Breadcrumb ───── */
.workspace-breadcrumb {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 12px 28px 0 28px;
  background: var(--color-surface);
  font-size: var(--text-xs);
  color: var(--muted);
  flex-shrink: 0;
}
.workspace-crumb {
  color: var(--muted);
  text-decoration: none;
  font-weight: 500;
  transition: color 0.12s ease;
}
.workspace-crumb:hover {
  color: var(--primary);
}
.workspace-crumb-active {
  color: var(--text-primary);
  font-weight: 600;
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  font-size: var(--text-xs);
  letter-spacing: 0.02em;
}
.workspace-crumb-sep {
  color: var(--gray-300);
  font-size: var(--text-md);
  line-height: 1;
}

/* ───── Workspace · Header ───── */
.workspace-header {
  padding: 12px 28px 18px 28px;
  border-bottom: 1px solid var(--vi-border);
}
.workspace-title {
  font-size: 24px;
  letter-spacing: -0.02em;
}
.workspace-meta-row {
  gap: 6px;
}

/* ───── Workspace · Tabs & Content ───── */
.workspace-tabs {
  padding: 0 24px;
  gap: 6px;
  background: var(--color-surface);
  border-bottom: 1px solid var(--vi-border);
}
.workspace-tabs .case-tab-button {
  padding: 9px 6px;
  font-size: var(--text-md);
  border-bottom-width: 2px;
}
.workspace-tabs .case-tab-button.active {
  font-weight: 600;
}

.workspace-tab-contents {
  padding: 18px 24px;
  background: #fafbfc;
}
.workspace-section {
  max-width: 920px;
  margin: 0 auto;
}
.workspace-section-title {
  font-size: var(--text-lg);
  font-weight: 600;
  letter-spacing: -0.01em;
  margin-bottom: 16px;
}

.workspace-form,
.workspace-form-card {
  border-radius: var(--radius-lg);
  padding: 15px 18px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.02);
}

/* Form-Inputs / Selects einheitliche Höhe */
.workspace-form .form-input,
.workspace-form .form-select,
.workspace-form-card .form-input,
.workspace-form-card .form-select,
#case-detail-modal .form-input,
#case-detail-modal .form-select {
  height: 38px;
  padding: 0 12px;
  font-size: var(--text-sm);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-md);
  background: var(--color-surface);
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
  width: 100%;
}
.workspace-form textarea.form-input,
.workspace-form-card textarea.form-input,
#case-detail-modal textarea.form-input {
  height: auto;
  padding: 10px 12px;
  line-height: 1.5;
}
.workspace-form .form-input:focus,
.workspace-form .form-select:focus,
.workspace-form-card .form-input:focus,
.workspace-form-card .form-select:focus,
#case-detail-modal .form-input:focus,
#case-detail-modal .form-select:focus {
  outline: none;
  border-color: var(--green-600);
  box-shadow: 0 0 0 3px rgba(59,130,246,0.10);
}
.workspace-form .form-label,
.workspace-form-card .form-label,
#case-detail-modal .form-label {
  display: block;
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--gray-700);
  margin-bottom: 6px;
  letter-spacing: 0.01em;
}

/* Buttons – einheitliche Höhe */
.workspace-form .btn-primary,
.workspace-form .btn-secondary,
.workspace-form-card .btn-primary,
.workspace-form-card .btn-secondary,
#case-detail-modal .btn-primary,
#case-detail-modal .btn-secondary {
  height: var(--control-h-md);
  padding: 0 16px;
  font-size: var(--text-sm);
  border-radius: var(--radius-md);
  border: 1px solid transparent;
  cursor: pointer;
  transition: all 0.12s ease;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}
.workspace-form .btn-primary,
.workspace-form-card .btn-primary,
#case-detail-modal .btn-primary {
  background: var(--vi-green, #147352);
  color: var(--color-surface);
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
}
.workspace-form .btn-primary:hover,
.workspace-form-card .btn-primary:hover,
#case-detail-modal .btn-primary:hover {
  background: var(--vi-green-deep, #0F5C42);
  transform: none;
  box-shadow: none;
}
.workspace-form .btn-secondary,
.workspace-form-card .btn-secondary,
#case-detail-modal .btn-secondary {
  background: var(--white);
  color: var(--text-primary);
  border-color: var(--vi-border, #D8DFDC);
  font-weight: 500;
}
.workspace-form .btn-secondary:hover,
.workspace-form-card .btn-secondary:hover,
#case-detail-modal .btn-secondary:hover {
  background: var(--vi-sand, #EFF2F1);
  border-color: var(--border-strong);
}

/* ───── Vorgang-Bereich: btn-primary immer VICore-Grün, kein Blau ─────────── */
.page-vorgang-detail .btn-primary,
.case-tasks-large-content .btn-primary,
.tab-section-header .btn-primary {
  background: var(--vi-green, #147352) !important;
  color: var(--color-surface) !important;
  border-color: transparent !important;
  text-transform: none;
  letter-spacing: 0;
}
.page-vorgang-detail .btn-primary:hover,
.case-tasks-large-content .btn-primary:hover,
.tab-section-header .btn-primary:hover {
  background: var(--vi-green-deep, #0F5C42) !important;
  transform: none;
  box-shadow: none;
}

/* ───── Workspace · Empty State (freundlicher) ───── */
.workspace-tab-contents .case-empty-state {
  padding: 40px 24px;
  background: var(--color-surface);
  border: 1px dashed var(--vi-border);
  border-radius: var(--radius-lg);
  text-align: center;
  color: var(--muted);
}
.case-empty-state-title {
  font-size: var(--text-md);
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 4px;
}
.case-empty-state-hint {
  font-size: var(--text-xs);
  color: var(--muted);
}

/* ───── Listen-Karten ───── */
.workspace-tab-contents .case-list-item {
  padding: 10px 13px;
  border-radius: var(--radius-lg);
}
.case-note-item .case-list-item-text {
  white-space: pre-wrap;
  word-break: break-word;
  margin-top: 6px;
}
.case-note-item.is-phone-note {
  border-left: 3px solid var(--color-info);
}
.case-note-contact {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 8px;
  padding: 8px 10px;
  background: var(--color-info-soft);
  border-radius: var(--radius-sm);
  font-size: var(--text-xs);
  color: var(--text-primary);
}
.case-note-contact svg {
  color: var(--color-info);
  flex-shrink: 0;
}
.case-note-contact-label {
  font-weight: 600;
  color: var(--color-info-ink);
}
.case-note-contact-value {
  flex: 1;
  word-break: break-word;
}
.case-note-contact-group {
  background: var(--color-info-soft);
  border: 1px solid var(--color-info-soft);
  border-radius: var(--radius-md);
  padding: 10px 12px;
  margin-bottom: 14px;
}
.case-note-contact-group .form-label {
  color: var(--color-info-ink) !important;
}
.case-list-item-tag.is-muted {
  background: var(--gray-100);
  color: var(--muted);
}

/* ───── Beteiligte ───── */
.case-contact-item {
  padding: 16px 18px;
}
.case-contact-head {
  display: flex;
  align-items: center;
  gap: 14px;
}
.case-contact-avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--color-success-ink) 0%, var(--green-600) 100%);
  color: var(--color-surface);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--text-base);
  font-weight: 600;
  flex-shrink: 0;
}
.case-contact-meta { flex: 1; min-width: 0; }
.case-contact-name {
  font-size: var(--text-md);
  font-weight: 600;
  color: var(--text-primary);
}
.case-contact-subline {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 4px;
  font-size: var(--text-xs);
  color: var(--muted);
}
.case-contact-info {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--gray-100);
}
.case-contact-link {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--primary);
  text-decoration: none;
  font-size: var(--text-sm);
  font-weight: 500;
}
.case-contact-link:hover { text-decoration: underline; }

/* ───── Chronologie · Timeline ───── */
.case-timeline {
  position: relative;
  padding-left: 12px;
}
.case-timeline::before {
  content: '';
  position: absolute;
  left: 19px;
  top: 12px;
  bottom: 12px;
  width: 2px;
  background: var(--gray-300);
  border-radius: 1px;
}
.case-timeline-item {
  position: relative;
  display: grid;
  grid-template-columns: 28px 1fr;
  gap: 14px;
  padding: 6px 0 18px 0;
}
.case-timeline-item:last-child { padding-bottom: 0; }
.case-timeline-dot {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--color-surface);
  border: 2px solid var(--vi-border);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--gray-500);
  z-index: 1;
  flex-shrink: 0;
}
.case-timeline-dot.tl-created    { background: var(--green-50); border-color: var(--green-300); color: var(--green-600); }
.case-timeline-dot.tl-status     { background: var(--color-info-soft); border-color: var(--color-info-soft); color: var(--color-info); }
.case-timeline-dot.tl-updated    { background: var(--gray-100); border-color: var(--vi-border); color: var(--gray-700); }
.case-timeline-dot.tl-note       { background: var(--color-warning-soft); border-color: #fcd34d; color: var(--color-warning-ink); }
.case-timeline-dot.tl-task       { background: var(--green-50); border-color: var(--green-300); color: var(--green-700); }
.case-timeline-dot.tl-task-done  { background: var(--green-50); border-color: #6ee7b7; color: var(--color-success-ink); }
.case-timeline-dot.tl-task-open  { background: var(--color-warning-soft); border-color: #fcd34d; color: var(--color-warning-ink); }
.case-timeline-dot.tl-reminder   { background: #fed7aa; border-color: #fdba74; color: var(--color-warning-ink); }
.case-timeline-dot.tl-contact    { background: #fce7f3; border-color: #f9a8d4; color: #be185d; }
.case-timeline-dot.tl-archived   { background: var(--gray-100); border-color: var(--gray-500); color: var(--gray-700); }
.case-timeline-dot.tl-deleted    { background: var(--color-danger-soft); border-color: var(--color-danger-soft); color: var(--color-danger-ink); }
.case-timeline-body {
  background: var(--color-surface);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-lg);
  padding: 12px 14px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.02);
}
.case-timeline-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  margin-bottom: 4px;
}
.case-timeline-header .case-activity-type {
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--text-primary);
}
.case-timeline-date {
  font-size: var(--text-xxs);
  color: var(--muted);
  font-weight: 500;
}
.case-timeline-text {
  font-size: var(--text-sm);
  color: var(--text-primary);
  line-height: 1.5;
  word-break: break-word;
}

/* ───── Compact-Modal Polish ───── */
#case-detail-modal .modal-content {
  border-radius: var(--radius-xl);
}
#case-detail-modal .case-detail-header {
  padding: 18px 22px;
  border-bottom: 1px solid var(--vi-border);
}
#case-detail-modal .case-detail-title {
  font-size: var(--text-lg);
  font-weight: 600;
  letter-spacing: -0.01em;
  margin: 4px 0 6px 0;
}
#case-detail-modal .case-detail-number {
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  font-size: var(--text-xxs);
  font-weight: 600;
  color: var(--muted);
  letter-spacing: 0.04em;
}
#case-detail-modal .case-detail-badges {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 8px;
}

/* Tabs im Kompakt-Modal ruhiger */
#case-detail-modal .case-tabs-nav {
  padding: 0 22px;
  gap: 4px;
  background: var(--color-surface);
  border-bottom: 1px solid var(--vi-border);
  margin-bottom: 0;
}
#case-detail-modal .case-tab-button {
  padding: 12px 8px;
  font-size: var(--text-sm);
}
#case-detail-modal .case-tab-content {
  padding: 22px;
}

/* ───── value-na konsequent ───── */
.value-na {
  color: var(--gray-500) !important;
  font-style: italic;
  font-size: var(--text-xs);
  font-weight: 400 !important;
}

/* ───── modal-content modal-content-large polish ───── */
.modal-large .modal-content {
  max-width: 1200px;
  width: 95vw;
  height: auto;
  max-height: 90vh;
  display: flex;
  flex-direction: column;
  background: var(--color-surface);
  border-radius: var(--radius-xl);
  overflow: hidden;
}
.case-detail-wrapper {
  flex: 1;
  display: grid;
  grid-template-columns: 1fr;
  min-height: 0;
  overflow: hidden;
}
.case-detail-main {
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
}
.case-detail-main .case-tab-contents {
  overflow-y: auto;
  flex: 1;
}

/* Existing form-buttons consistent */
.case-task-form-buttons,
.workspace-form .form-help,
.workspace-form-card .form-buttons {
  margin-top: 14px;
}

/* Saubere Headlines in Tabs-Übersicht */
.workspace-form .form-row {
  margin-bottom: 16px;
}
.workspace-form .form-group {
  margin-bottom: 16px;
}
.workspace-form .form-group:last-child { margin-bottom: 0; }

/* ═══════════════════════════════════════════════════════════════════════════
   VORGANGSDETAIL · UI-Refinement Phase 1J (professioneller SaaS-Look)
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── TOPBAR (Breadcrumb + Aktionen) ─── */
.workspace-topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 32px;
  background: var(--color-surface);
  border-bottom: 1px solid var(--vi-border);
  flex-shrink: 0;
  min-height: 56px;
}
.workspace-breadcrumb {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: var(--text-sm);
  color: var(--muted);
  padding: 0;
}
.workspace-breadcrumb a.workspace-crumb {
  color: var(--gray-500);
  text-decoration: none;
  font-weight: 500;
  padding: 4px 6px;
  border-radius: var(--radius-sm);
  transition: all 0.12s ease;
}
.workspace-breadcrumb a.workspace-crumb:hover {
  background: var(--gray-100);
  color: var(--gray-900);
}
.workspace-crumb-active {
  color: var(--gray-900) !important;
  font-weight: 600;
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  font-size: var(--text-xs);
  letter-spacing: 0.02em;
  padding: 4px 8px !important;
  background: var(--gray-100);
  border-radius: var(--radius-sm);
}
.workspace-crumb-sep {
  color: var(--gray-300);
  flex-shrink: 0;
}
.workspace-topbar-actions {
  display: flex;
  align-items: center;
  gap: 6px;
}
.workspace-back-btn {
  height: 34px;
  padding: 0 12px;
}
.workspace-topbar-actions .case-more-btn {
  height: 34px;
  width: 34px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Meta-Angaben im Vorgangskopf — ruhige Metadaten, KEINE Status-Plaketten.
   Nur der Status behält eine getönte Fläche (siehe .meta-chip-status weiter unten);
   Kategorie, Leistungsbereich, Objekt und Besitzer sind schlichter Text mit
   Bearbeiten-Affordanz beim Überfahren. */
.meta-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-height: 22px;
  box-sizing: border-box;
  padding: 1px 4px;
  margin: 0 -4px;
  background: transparent;
  border: 1px solid transparent;
  border-radius: var(--radius-sm, 6px);
  font-size: var(--text-xs);
  color: var(--gray-700);
  line-height: 1.4;
  cursor: default;
}
.meta-chip[onclick], .meta-chip.is-editable { cursor: pointer; }
.meta-chip[onclick]:hover, .meta-chip.is-editable:hover {
  background: var(--gray-50);
  border-color: var(--vi-border);
}
/* Die Feldbezeichnung ist im Kopf redundant („KATEGORIE Störung/Ausfall") —
   der Wert allein trägt die Information, der Name steht im Tooltip. */
.meta-chip-label { display: none; }
.meta-chip-value {
  font-weight: 500;
  color: var(--gray-700);
}
/* ── VORGANGSSTATUS IST DAS ARBEITSWERKZEUG, KEIN STAMMDATENFELD ──────────────
   (Feedback #3 §3.3, 28.08.2026)

   Der Status stand als 12,5-px-Pille zwischen Kategorie, Leistungsbereich, Besitzer
   und Objekt — optisch eine Metaangabe unter vielen. Er beantwortet aber die Frage,
   mit der jeder auf einen Vorgang schaut: „Wo steht das gerade?“

   Deshalb bekommt er Rang: größere Schrift, eigenes Gewicht, in der Statusfarbe
   getönte Fläche, größerer Punkt — und einen Abstand nach rechts, der ihn von den
   Stammdaten trennt. Er bleibt derselbe EINE Klick zum Wechseln, der Kopf wird
   NICHT höher (kein Hero), und es kommt keine zweite Statusanzeige dazu. */
.meta-chip.meta-chip-status {
  padding: 3px 12px 3px 9px;
  margin-right: 4px;
  background: #F4F2EC;
  border-color: var(--vi-border);
  border-radius: var(--radius-pill);
  font-size: var(--text-sm);
}
.meta-chip.meta-chip-status .meta-chip-value { font-weight: 700; color: var(--gray-900); letter-spacing: .1px; }
.meta-chip.meta-chip-status .meta-chip-dot { width: 9px; height: 9px; }
/* Die Statusfarbe trägt die Fläche (dezent getönt), nicht nur den Punkt — so ist
   „Neu“ von „Erledigt“ auf einen Blick unterscheidbar, ohne zu leuchten. */
.meta-chip.meta-chip-status.status-neu           { background: #FDF1F0; border-color: #F0D3D0; }
.meta-chip.meta-chip-status.status-inbearbeitung { background: #EDF6F1; border-color: #C9E4D6; }
.meta-chip.meta-chip-status.status-wartet        { background: #FBF3E3; border-color: #EBD9AE; }
.meta-chip.meta-chip-status.status-pruefung      { background: #EEF3F8; border-color: #CDDCEB; }
.meta-chip.meta-chip-status.status-erledigt      { background: #EAF5EC; border-color: #C4E3CB; }
.meta-chip.meta-chip-status.status-archiviert    { background: #F2F1EF; border-color: #DDD9D2; }
.meta-chip-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  display: inline-block;
  flex-shrink: 0;
}
.meta-chip svg {
  color: var(--gray-500);
  flex-shrink: 0;
  width: 14px;
  height: 14px;
}
.meta-chip .meta-chip-caret { width: 11px; height: 11px; }

/* Priorität-Variants */
.meta-chip-prio-low {
  background: var(--green-50);
  border-color: #a7f3d0;
}
.meta-chip-prio-low .meta-chip-label { color: var(--color-success-ink); }
.meta-chip-prio-low .meta-chip-value { color: var(--green-800); }
.meta-chip-prio-normal {
  background: var(--green-50);
  border-color: var(--green-50);
}
.meta-chip-prio-normal .meta-chip-label { color: var(--green-600); }
.meta-chip-prio-normal .meta-chip-value { color: var(--green-700); }
.meta-chip-prio-high {
  background: var(--color-danger-soft);
  border-color: var(--color-danger-soft);
}
.meta-chip-prio-high .meta-chip-label { color: var(--color-danger-ink); }
.meta-chip-prio-high .meta-chip-value { color: var(--color-danger-ink); }

/* Warn-Chip */
.meta-chip-warn {
  background: var(--color-warning-soft);
  border-color: #fcd34d;
  color: var(--color-warning-ink);
}
.meta-chip-warn svg { color: var(--color-warning-ink); }
.meta-chip-warn .meta-chip-value { color: var(--color-warning-ink); }

/* Objekt-Chip */
.meta-chip-object {
  background: #f5f3ff;
  border-color: var(--color-info-soft);
}
.meta-chip-object svg { color: var(--color-info); }
.meta-chip-object .meta-chip-value { color: var(--color-info-ink); }

/* ── Stufe 1: Vorgangskopf – Klassifikation editierbar + WE/Detailort konsistent ── */
/* Editierbare Chips (Status, Priorität, Art, Bereich, Kategorie) klar als interaktiv kennzeichnen. */
.meta-chip-edit { cursor: pointer; transition: border-color .12s ease, box-shadow .12s ease, background .12s ease; }
.meta-chip-edit:hover { border-color: #B9D6C4; box-shadow: 0 1px 3px rgba(16,90,46,.10); }
.meta-chip-edit .meta-chip-caret { color: #9A948A; margin-left: 1px; }
/* Wirtschaftseinheit – operative Bezugsebene (dezenter grüner Akzent). */
.meta-chip-we { background: var(--green-50); border-color: var(--green-50); }
.meta-chip-we .meta-chip-label { color: var(--green-600); }
.meta-chip-we .meta-chip-value { color: var(--green-700); }
/* Detailort – neutral, optisch zur Ortsgruppe (Objekt/WE) passend. */
.meta-chip-detailloc { background: var(--gray-50); border-color: var(--vi-border); }
.meta-chip-detailloc .meta-chip-label { color: #6E675B; }

/* ── Stufe 1: Budget/CAPEX als kompaktes Verknüpfungspanel (kein Fremdkörper) ── */
.cx-card-empty { padding: 12px 14px; }
.cx-card-empty-hint { font-size: var(--text-xs); color: var(--vi-muted, #5F6B66); line-height: 1.4; margin: 2px 0 8px; }
.cx-card-empty .cx-overfuehren-btn { margin-right: 6px; }
.cx-link-card { border-radius: var(--radius-lg); padding: 12px 14px; }
.cx-link-card + .cx-link-card { margin-top: 8px; }

/* ── Stufe 2: Übersicht-Tab als priorisierte Panels ── */
.vi-ov { display: flex; flex-direction: column; gap: 14px; }
.vi-ov-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 1100px) { .vi-ov-row { grid-template-columns: 1fr; } }
.vi-ov-panel { background: var(--color-surface); border: 1px solid var(--vi-border, #D8DFDC); border-radius: var(--radius-lg); padding: 12px 14px; }
.vi-ov-panel-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; min-height: 24px; }
.vi-ov-panel-title { font-size: var(--text-xxs); font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--vi-muted, #5F6B66); }
.vi-ov-empty { color: var(--vi-muted, #5F6B66); font-size: var(--text-sm); padding: 4px 0; display: flex; align-items: center; justify-content: space-between; gap: 10px; }
/* Sachstand-Card in der Übersicht etwas ruhiger */
.vi-ov .vi-sachverhalt { margin-bottom: 0; }
.vi-ov .vi-eckdaten { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 12px; }
@media (max-width: 760px) { .vi-ov .vi-eckdaten { grid-template-columns: 1fr; } }

/* ── Stage 6: Laptop-Dichte für den Vorgang (Übersicht höher beginnen, weniger Scroll) ── */
.page-vorgang-detail .vi-ov { gap: 12px; }
.page-vorgang-detail .vi-ov-row { gap: 12px; }
.page-vorgang-detail .vi-ov-panel { padding: 10px 13px; }
.page-vorgang-detail .vi-ov-panel-head { margin-bottom: 6px; min-height: 20px; }
/* Übersichts-Kopf kompakter — der Inhalt soll früher sichtbar werden */
.vi-ov > .tab-section-header { margin-bottom: 8px; padding-bottom: 8px; }
/* Sachstand-Block dichter: Blöcke näher zusammen, Eckdaten-Gitter enger */
.vi-ov .vi-sachverhalt { padding: 16px; }
.vi-ov .vi-ov-block { margin-top: 13px; }
.vi-ov .vi-ov-block:first-of-type { margin-top: 14px; }
/* Budget/CAPEX-Leerzustand kompakt (Hinweis kleiner, Aktionen in einer Zeile) */
.cx-card-empty { padding: 10px 12px; }
.cx-card-empty-hint { font-size: var(--text-xxs); margin: 1px 0 6px; }
.vi-next.is-overdue .vi-next-date { color: #DC2626; }
.vi-work-stat.is-warn .vi-work-n { color: #DC2626; }

/* Kompakte Mini-Listen (letzte Kommunikation / Dokumente / Verlauf) */
.vi-mini-list { display: flex; flex-direction: column; }
.vi-mini-row { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 7px 2px; border: none; border-bottom: 1px solid var(--vi-sand, #EFF2F1); background: transparent; cursor: pointer; }
.vi-mini-row:last-child { border-bottom: none; }
.vi-mini-row:hover { background: var(--vi-green-tint, #EDF7F2); }
.vi-mini-row-static { cursor: default; }
.vi-mini-row-static:hover { background: transparent; }
.vi-mini-ic { flex: 0 0 auto; width: 22px; text-align: center; color: var(--vi-muted, #5F6B66); font-size: var(--text-xs); font-weight: 700; }
.vi-mini-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.vi-mini-t { font-size: var(--text-sm); font-weight: 500; color: var(--vi-ink, #141A17); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vi-mini-s { font-size: var(--text-xxs); color: var(--vi-muted, #5F6B66); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vi-mini-date { flex: 0 0 auto; font-size: var(--text-xxs); color: var(--vi-muted, #5F6B66); white-space: nowrap; }
.comm-actions .icon-btn { width: 28px; height: 28px; }

/* ── Konsistente kleine Sekundär-Buttons in Bereichs-Headern ── */
.tab-section-header-actions .btn-ghost,
.tab-section-header-actions .vi-btn-primary { height: var(--control-h-sm); display: inline-flex; align-items: center; gap: 6px; }

/* ── Ruhige Empty States in den Arbeitslisten (einheitlich) ── */
.page-vorgang-detail .case-empty-state,
#case-detail-modal .case-empty-state { color: var(--vi-muted, #5F6B66); font-size: var(--text-sm); }

/* Kategorie-Chip – neutral/grau */
.meta-chip-category {
  background: var(--gray-50);
  border-color: var(--vi-border);
}

/* ─── Bearbeitbare Chips (Status / Priorität) ─── */
.meta-edit-wrap { position: relative; display: inline-flex; }
.meta-chip-edit {
  cursor: pointer;
  font-family: inherit;
  transition: box-shadow 0.12s ease, filter 0.12s ease;
}
.meta-chip-edit:hover { filter: brightness(0.98); box-shadow: 0 1px 2px rgba(40, 30, 20,0.08); }
.meta-chip-edit:focus-visible { outline: 2px solid var(--green-300); outline-offset: 1px; }
.meta-chip-caret { opacity: 0.5; margin-left: 1px; }

/* ── Zentrale Status-Farben: einheitlich für Header-Chip, Sidebar, Liste, Kompaktansicht ──
   Hintergrund hell/dezent, Text farbig, Dot kräftig (siehe CASE_STATUS_COLORS in app.js). */
.case-status-badge.status-neu, .cases-badge-status.status-neu, .meta-status-chip.status-neu
  { background:var(--color-danger-soft); border:1px solid var(--color-danger-soft); color:var(--color-danger-ink); }
.meta-status-chip.status-neu .meta-chip-value { color:var(--color-danger-ink); }

.case-status-badge.status-inbearbeitung, .cases-badge-status.status-inbearbeitung, .meta-status-chip.status-inbearbeitung
  { background:var(--green-50); border:1px solid var(--green-50); color:var(--green-600); }
.meta-status-chip.status-inbearbeitung .meta-chip-value { color:var(--green-600); }

.case-status-badge.status-wartet, .cases-badge-status.status-wartet, .meta-status-chip.status-wartet
  { background:var(--color-warning-soft); border:1px solid var(--color-warning-soft); color:var(--color-warning-ink); }
.meta-status-chip.status-wartet .meta-chip-value { color:var(--color-warning-ink); }

.case-status-badge.status-pruefung, .cases-badge-status.status-pruefung, .meta-status-chip.status-pruefung
  { background:#f5f3ff; border:1px solid var(--color-info-soft); color:var(--color-info-ink); }
.meta-status-chip.status-pruefung .meta-chip-value { color:var(--color-info-ink); }

.case-status-badge.status-erledigt, .cases-badge-status.status-erledigt, .meta-status-chip.status-erledigt
  { background:var(--green-50); border:1px solid var(--green-200); color:var(--color-success-ink); }
.meta-status-chip.status-erledigt .meta-chip-value { color:var(--color-success-ink); }

.case-status-badge.status-archiviert, .cases-badge-status.status-archiviert, .meta-status-chip.status-archiviert
  { background:var(--gray-100); border:1px solid var(--vi-border); color:var(--gray-700); }
.meta-status-chip.status-archiviert .meta-chip-value { color:var(--gray-700); }

/* Dropdown-Menü für Status/Priorität */
.meta-edit-menu {
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  z-index: 60;
  min-width: 184px;
  background: var(--color-surface);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 10px 28px rgba(40, 30, 20,0.14);
  padding: 5px;
}
.meta-menu-option {
  display: flex;
  align-items: center;
  gap: 9px;
  width: 100%;
  padding: 8px 10px;
  border: none;
  background: transparent;
  border-radius: var(--radius-sm);
  cursor: pointer;
  font-size: var(--text-sm);
  color: var(--gray-700);
  text-align: left;
  font-family: inherit;
  line-height: 1.2;
}
.meta-menu-option:hover { background: var(--gray-100); }
.meta-menu-option:focus-visible { outline: 2px solid var(--green-700); outline-offset: -2px; background: var(--green-50); }
.meta-menu-option.is-current { background: var(--gray-50); font-weight: 600; color: var(--gray-900); }
.meta-menu-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.meta-menu-dot-prio.prio-low    { background: var(--color-success-ink); }
.meta-menu-dot-prio.prio-normal { background: var(--green-600); }
.meta-menu-dot-prio.prio-high   { background: var(--color-danger); }
.meta-menu-label { flex: 1; }
.meta-menu-check { color: var(--green-600); flex-shrink: 0; }

/* ─── TAB-NAVIGATION (Underline, professionell) ─── */
/* Tabs: 41 px statt 52 px, dezentere Icons — Navigation soll tragen, nicht dominieren. */
.workspace-tabs {
  padding: 0 24px;
  gap: 0;
  background: var(--color-surface);
  border-bottom: 1px solid var(--vi-border);
  flex-shrink: 0;
  display: flex;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  position: sticky;
  top: 0;
  z-index: 5;
}
.workspace-tabs .case-tab-button {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 10px 12px 8px 12px;
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--gray-500);
  border-bottom: 2px solid transparent;
  transition: color 0.15s ease, border-color 0.15s ease;
  white-space: nowrap;
  position: relative;
  margin-bottom: -1px;
}
.workspace-tabs .case-tab-button svg { width: 15px; height: 15px; opacity: .75; }
.workspace-tabs .case-tab-button.active svg { opacity: 1; }
.workspace-tabs .case-tab-button:hover {
  color: var(--gray-900);
}
.workspace-tabs .case-tab-button.active {
  color: var(--vi-green, #147352);
  border-bottom-color: var(--vi-green, #147352);
  font-weight: 600;
}
.case-tab-label {
  line-height: 1.2;
}
.case-tab-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 6px;
  background: var(--gray-100);
  color: var(--gray-700);
  border-radius: var(--radius-md);
  font-size: var(--text-xxs);
  font-weight: 600;
  line-height: 1;
}
.workspace-tabs .case-tab-button.active .case-tab-count {
  background: var(--green-50);
  color: var(--green-600);
}

/* ─── BODY-LAYOUT ─── */
.workspace-body {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

/* Objekt-Karte */
.workspace-object {
  display: flex;
  align-items: flex-start;
  gap: 10px;
}
.workspace-object-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  background: #f5f3ff;
  color: var(--color-info);
  border-radius: var(--radius-sm);
  flex-shrink: 0;
  margin-top: 1px;
}
.workspace-object-icon svg {
  width: 15px;
  height: 15px;
}
.workspace-object-text {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.workspace-object-name {
  font-size: var(--text-md);
  font-weight: 600;
  color: var(--gray-900);
  line-height: 1.3;
  word-break: break-word;
}
.workspace-object-address {
  font-size: var(--text-xs);
  font-weight: 400;
  color: var(--gray-500);
  line-height: 1.45;
  word-break: break-word;
}
.workspace-object-address.is-empty {
  font-style: italic;
  color: var(--gray-500);
}

/* ─── ARBEITSBEREICH (rechts) ─── */
.workspace-main {
  display: flex;
  flex-direction: column;
  background: #f7f8fa;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
}
.workspace-tab-contents {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden; /* verhindert horizontalen Scrollbalken bei Subpixel-Überlappung */
  padding: 28px 32px;
  background: #f7f8fa;
}
/* Standardbreite der Tab-Inhalte: großzügig, damit der verfügbare Platz im
   Vorgang genutzt wird. Daten-/Listen-Tabs (Dokumente, Kommunikation) gehen
   über eigene Modifier auf volle Breite. */
.workspace-section {
  max-width: 1480px;
  margin: 0 auto;
}
/* Listen-/Tabellen-/Vorschau-lastige Tabs nutzen die volle verfügbare Breite. */
.workspace-section.doc-workspace-section,
.workspace-section.comm-workspace-section {
  max-width: min(1680px, 100%);
  width: 100%;
}

/* Konsistenter Tab-Header pro Tab */
.tab-section-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  margin-bottom: 14px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--vi-border);
  flex-wrap: wrap;
}
.tab-section-header-text {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.tab-section-title {
  margin: 0;
  font-size: var(--text-lg);
  font-weight: 700;
  color: var(--gray-900);
  letter-spacing: -0.01em;
  line-height: 1.3;
}
.tab-section-subtitle {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--gray-500);
  line-height: 1.4;
}
.tab-section-header-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-shrink: 0;
}

/* ─── Formular-Karten ─── */
.workspace-form,
.workspace-form-card {
  background: var(--color-surface);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-lg);
  padding: 22px 24px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.02);
  margin-bottom: 16px;
}
.workspace-form .form-row,
.workspace-form-card .form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin-bottom: 16px;
}
.workspace-form .form-row-3,
.workspace-form-card .form-row-3 {
  grid-template-columns: repeat(3, 1fr);
}
.workspace-form .form-group,
.workspace-form-card .form-group {
  margin-bottom: 16px;
}
.workspace-form .form-group:last-child,
.workspace-form-card .form-group:last-child {
  margin-bottom: 0;
}
.workspace-form .form-row .form-group,
.workspace-form-card .form-row .form-group {
  margin-bottom: 0;
}
/* Satzschreibung auch in den Vorgangsformularen (Welle 1): dieser Block lag NACH
   der allgemeinen Regel und holte die gesperrten Versalien für Workspace- und
   Vorgangsdialoge zurück — sichtbar genau dort, wo am meisten eingegeben wird. */
.workspace-form .form-label,
.workspace-form-card .form-label,
#case-detail-modal .form-label {
  display: block;
  font-size: var(--text-xxs);
  font-weight: 600;
  color: var(--gray-700);
  margin-bottom: 6px;
  letter-spacing: 0.01em;
  text-transform: none;
}
.workspace-form .form-input,
.workspace-form .form-select,
.workspace-form-card .form-input,
.workspace-form-card .form-select,
#case-detail-modal .form-input,
#case-detail-modal .form-select {
  height: 40px;
  padding: 0 12px;
  font-size: var(--text-sm);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-md);
  background: var(--color-surface);
  color: var(--gray-900);
  width: 100%;
  transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}
.workspace-form textarea.form-input,
.workspace-form-card textarea.form-input,
#case-detail-modal textarea.form-input {
  height: auto;
  padding: 10px 12px;
  line-height: 1.55;
  resize: vertical;
  min-height: 80px;
}
.workspace-form .form-input:hover:not(:focus),
.workspace-form .form-select:hover:not(:focus),
.workspace-form-card .form-input:hover:not(:focus),
.workspace-form-card .form-select:hover:not(:focus) {
  border-color: var(--gray-500);
}
.workspace-form .form-input:focus,
.workspace-form .form-select:focus,
.workspace-form-card .form-input:focus,
.workspace-form-card .form-select:focus,
#case-detail-modal .form-input:focus,
#case-detail-modal .form-select:focus {
  outline: none;
  border-color: var(--green-600);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
}
.workspace-form .form-help,
.workspace-form-card .form-buttons {
  margin-top: 10px;
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

/* Buttons – einheitliche Höhe */
.workspace-form .btn-primary,
.workspace-form .btn-secondary,
.workspace-form-card .btn-primary,
.workspace-form-card .btn-secondary,
.tab-section-header-actions .btn-primary,
.tab-section-header-actions .btn-ghost,
#case-detail-modal .btn-primary,
#case-detail-modal .btn-secondary {
  height: 38px;
  padding: 0 16px;
  font-size: var(--text-sm);
  font-weight: 500;
  border-radius: var(--radius-md);
  border: 1px solid transparent;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  transition: all 0.12s ease;
}
.workspace-form .btn-primary,
.workspace-form-card .btn-primary,
.tab-section-header-actions .btn-primary,
#case-detail-modal .btn-primary {
  background: var(--vi-green, #147352);
  color: var(--color-surface);
}
.workspace-form .btn-primary:hover,
.workspace-form-card .btn-primary:hover,
.tab-section-header-actions .btn-primary:hover,
#case-detail-modal .btn-primary:hover {
  background: var(--vi-green-deep, #0F5C42);
}
.workspace-form .btn-secondary,
.workspace-form-card .btn-secondary,
.tab-section-header-actions .btn-ghost,
#case-detail-modal .btn-secondary {
  background: var(--white);
  color: var(--text-primary);
  border-color: var(--vi-border, #D8DFDC);
}
.workspace-form .btn-secondary:hover,
.workspace-form-card .btn-secondary:hover,
.tab-section-header-actions .btn-ghost:hover,
#case-detail-modal .btn-secondary:hover {
  background: var(--vi-sand, #EFF2F1);
  border-color: var(--border-strong);
  color: var(--text-primary);
}

/* ─── Listen-Karten ─── */
.workspace-tab-contents .case-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.workspace-tab-contents .case-list-item {
  background: var(--color-surface);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-lg);
  padding: 14px 16px;
  transition: all 0.15s ease;
}
.workspace-tab-contents .case-list-item:hover {
  border-color: var(--gray-300);
  box-shadow: 0 1px 3px rgba(0,0,0,0.04);
}
/* ─── Empty States ─── */
.workspace-tab-contents .case-empty-state {
  padding: 20px 18px;
  background: var(--color-surface);
  border: 1px dashed var(--vi-border);
  border-radius: var(--radius-lg);
  text-align: center;
}
.case-empty-state-title {
  font-size: var(--text-md);
  font-weight: 600;
  color: var(--gray-700);
  margin-bottom: 4px;
}
.case-empty-state-hint {
  font-size: var(--text-xs);
  color: var(--gray-700);
  line-height: 1.45;
}

/* ─── Responsive ─── */
@media (max-width: 1100px) {
  .workspace-body { grid-template-columns: 1fr; }
  .workspace-form .form-row,
  .workspace-form-card .form-row { grid-template-columns: 1fr; }
  .workspace-form .form-row-3,
  .workspace-form-card .form-row-3 { grid-template-columns: 1fr; }
  .ws-process { flex-wrap: wrap; row-gap: 4px; }
  .workspace-tabs { padding: 0 16px; }
  .workspace-tabs .case-tab-button { padding: 9px 10px 7px 10px; font-size: var(--text-sm); }
  .workspace-tabs { padding: 0 16px; }
  .workspace-tab-contents { padding: 20px 16px; }
}
@media (max-width: 700px) {
  .workspace-topbar { padding: 10px 16px; flex-direction: column; align-items: stretch; gap: 10px; }
  .workspace-tabs .case-tab-button { padding: 12px 10px; font-size: var(--text-sm); }
}

/* ─── Auto-Save Status-Indikator ─── */
.case-save-status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--text-xs);
  font-weight: 500;
  min-height: 20px;
  transition: opacity 0.2s ease;
}
.case-save-status:empty {
  display: none;
}
.case-save-status.is-saving {
  color: var(--gray-500);
}
.case-save-status.is-saved {
  color: var(--color-success-ink);
}
.case-save-status.is-error {
  color: var(--color-danger-ink);
}
.case-save-status svg {
  flex-shrink: 0;
}
.case-save-status .spin {
  animation: case-save-spin 0.7s linear infinite;
}
@keyframes case-save-spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* ─── Stammdaten-Karte (Übersicht) ─── */
.stammdaten-card {
  background: var(--color-surface);
  border: 1px solid var(--vi-border);
  border-radius: var(--radius-lg);
  padding: 24px 26px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.02);
}
.stammdaten-card .form-group {
  margin-bottom: 18px;
}
.stammdaten-card .form-row {
  margin-bottom: 18px;
}
.stammdaten-card .form-row .form-group {
  margin-bottom: 0;
}
.stammdaten-title-group {
  margin-bottom: 18px !important;
}
.stammdaten-title-input {
  font-size: var(--text-lg) !important;
  font-weight: 600 !important;
  height: 48px !important;
  color: var(--gray-900) !important;
}
.stammdaten-divider {
  height: 1px;
  background: var(--gray-100);
  margin: 0 0 18px 0;
}
.stammdaten-desc {
  line-height: 1.55 !important;
  min-height: 96px !important;   /* Stage 6: kompakter; rows greifen, kein 200px-Zwang */
}

/* ─── Kompaktansicht-Modal Header-Feinschliff ─── */
#case-detail-modal .case-detail-number {
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  font-size: var(--text-xxs);
  font-weight: 600;
  color: var(--gray-500);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-bottom: 6px;
}
#case-detail-modal .case-detail-title {
  font-size: 19px;
  font-weight: 700;
  color: var(--gray-900);
  letter-spacing: -0.015em;
  margin: 0 0 10px 0;
  line-height: 1.3;
}
#case-detail-modal .case-detail-badges {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
#case-detail-modal .case-detail-header {
  padding: 20px 24px;
  border-bottom: 1px solid var(--vi-border);
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
}
.case-open-workspace-btn {
  white-space: nowrap;
}
#case-detail-modal .meta-chip {
  padding: 4px 10px;
  font-size: var(--text-xxs);
}
#case-detail-modal .case-tab-content .form-group {
  margin-bottom: 16px;
}

.obj-neu-wrap { position: relative; }
/* Position setzt `_objNeuPlace` (app.js) zur Laufzeit auf `fixed` und klemmt sie in
   den sichtbaren Bereich — wie beim „Mehr“-Menü der Tableiste. Die Werte hier sind
   nur der Ausgangszustand vor dem Öffnen. */
.obj-neu-dd {
  position: absolute; top: calc(100% + 6px); right: 0; z-index: 1200;
  background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg);
  box-shadow: 0 10px 28px rgba(40, 30, 20,0.14); padding: 5px;
  /* Desktop darf breiter werden: Bezeichnung UND Kontextzeile muessen vollstaendig
     lesbar sein. Feste 220 px brachen die Bezeichnung mitten im Wort um und
     schnitten den Kontext ab (Fehlerbild 24.08.2026). */
  min-width: 264px; width: max-content; max-width: min(380px, calc(100vw - 24px));
}
.obj-neu-item {
  display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center;
  gap: 2px 9px; padding: 9px 11px;
  border-radius: var(--radius-sm); cursor: pointer; font-size: var(--text-sm); color: var(--gray-700);
}
.obj-neu-item > .obj-type-dot { grid-row: 1 / 2; grid-column: 1 / 2; }
.obj-neu-item:hover { background: var(--gray-100); }
/* Kontexthinweis im „+ Neu"-Menü: unter welchem Element angelegt wird (Vorbelegung aus der Baumauswahl). */
.obj-neu-ctx {
  /* Eigene Zeile unter der Bezeichnung — nicht rechts daneben, wo beide um
     dieselbe Breite kaempften. */
  grid-column: 2 / 3; min-width: 0;
  font-size: var(--text-xs); color: var(--vi-muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
@media (max-width: 640px) {
  .obj-neu-dd { min-width: 0; width: min(320px, calc(100vw - 24px)); max-width: calc(100vw - 24px); }
}
.obj-toolbar .form-select { flex: 0 1 180px; }

.obj-type-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; display: inline-block; }
.node-type-badge {
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: var(--radius-sm);
  font-size: var(--text-xxs); font-weight: 600; border: 1px solid transparent; white-space: nowrap;
}
.obj-status-badge { display: inline-flex; padding: 2px 8px; border-radius: var(--radius-sm); font-size: var(--text-xxs); font-weight: 600; }
.obj-status-badge.is-aktiv { background: var(--green-50); color: var(--color-success-ink); border: 1px solid var(--green-200); }
.obj-status-badge.is-inaktiv { background: var(--gray-100); color: var(--gray-700); border: 1px solid var(--vi-border); }

.obj-empty {
  padding: 40px 24px; text-align: center; color: var(--text-muted); font-size: var(--text-sm);
  background: var(--bg-primary); border: 1px dashed var(--border-default); border-radius: var(--radius-lg);
}

/* Strukturbaum */
.obj-tree { background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); overflow: hidden; }
/* ── EINRÜCKUNG = HIERARCHIE (Feedback #3 §5.1) ──────────────────────────────
   Jede Ebene bekommt einen klar sichtbaren Einzug (--obj-indent-step) UND eine
   dezente Astlinie. Die Linien entstehen als wiederholter Verlauf im Padding-
   Bereich — kein zusätzliches Markup je Ebene, keine zweite Baumkomponente.
   Geschwister stehen dadurch exakt gleich, Kinder sichtbar weiter rechts; das
   Symbol allein muss die Struktur nicht mehr tragen. */
/* Die Zeilendefinition steht weiter unten bei `.obj-tree-pane` — es gibt sie GENAU
   EINMAL. Hier stand bis zum 28.08.2026 eine zweite, die von der späteren in jeder
   strittigen Eigenschaft überstimmt wurde; die Einrückung lief deshalb ins Leere. */
.obj-tree-row[style*="--obj-depth:0"] { background-image: none; }
.obj-tree-row:last-child { border-bottom: none; }
.obj-tree-caret {
  width: 20px; height: 20px; border: none; background: transparent; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; color: var(--gray-500);
  border-radius: var(--radius-sm); flex-shrink: 0; transition: transform 0.12s ease;
}
.obj-tree-caret.is-open { transform: rotate(90deg); }
.obj-tree-caret:hover { background: var(--vi-green-soft); color: var(--vi-green-deep); }
.obj-tree-caret-spacer { width: 20px; flex-shrink: 0; display: inline-block; }
.obj-tree-name { font-weight: 600; color: var(--gray-900); }
.obj-tree-addr { color: var(--gray-500); font-size: var(--text-xs); }
.obj-tree-counts { color: var(--gray-500); font-size: var(--text-xs); margin-left: auto; white-space: nowrap; }
.obj-tree-actions { display: none; gap: 4px; margin-left: 10px; flex-shrink: 0; }
.obj-tree-row:hover .obj-tree-actions { display: inline-flex; }
.obj-tree-row:hover .obj-tree-counts { margin-left: auto; }
.obj-row-act {
  border: 1px solid var(--vi-border); background: var(--color-surface); border-radius: var(--radius-sm); padding: 3px 9px;
  font-size: var(--text-xxs); color: var(--gray-700); cursor: pointer; white-space: nowrap;
}
.obj-row-act:hover { background: var(--gray-50); border-color: var(--vi-border); color: var(--gray-900); }
.obj-row-act-archive:hover { color: var(--color-warning-ink); border-color: #fcd34d; background: var(--color-warning-soft); }
.obj-row-act-del { color: var(--rot); }
.obj-row-act-del:hover { color: var(--color-danger-ink); border-color: var(--color-danger-soft); background: var(--color-danger-soft); }
/* Löschen im Detail-Header optisch absetzen (sekundär/gefährlich, rechts) */
.obj-detail-actions .obj-detail-act-del { margin-left: auto; }
.obj-table-wrap { background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); overflow-x: auto; }
.obj-table { width: 100%; border-collapse: collapse; font-size: var(--text-sm); }
/* Tabellenstandard: an kanonischen .data-table-Kopf angeglichen */
.obj-table thead th {
  text-align: left; padding: 11px 14px; font-size: var(--font-size-sm); font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.02em; color: var(--text-primary);
  border-bottom: 1px solid var(--border); background: var(--creme); white-space: nowrap;
}
.obj-table th.obj-num, .obj-table td.obj-num { text-align: right; }
.obj-table tbody td { padding: 10px 14px; border-bottom: 1px solid var(--gray-100); vertical-align: middle; color: var(--gray-700); }
.obj-table tbody tr { cursor: pointer; }
.obj-table tbody tr:hover { background: var(--gray-50); }
.obj-cell-name { font-weight: 600; color: var(--gray-900); }
.obj-cell-sub { display: block; font-size: var(--text-xxs); color: var(--gray-500); font-weight: 400; }
.obj-cell-actions { white-space: nowrap; display: flex; gap: 4px; }


/* Objektakte (Detail-Modal) */
.nd-detail .case-tabs-nav { overflow-x: auto; }

/* ── Objektakte: der Schalter über der aggregierten Dokumentenliste ─────────
   Die Akte zeigt standardmäßig den ganzen Teilbaum. Der Schalter ist eine
   ANSICHT, kein Fachfilter — deshalb steht er ruhig über der Liste und nicht
   in der Filterleiste, und er erscheint nur, wenn es überhaupt Dokumente aus
   Unterelementen gibt. */
.nd-dokfilter {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-2) var(--space-3);
  margin: var(--space-3) 0 var(--space-2);
}
.nd-dokfilter-l { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; font-size: var(--text-md); }
.nd-dokfilter-l input { margin: 0; }
.nd-dokfilter-z { color: var(--gray-500); font-size: var(--text-sm); font-variant-numeric: tabular-nums; }
.nd-dokleer { margin: var(--space-3) 0 0; color: var(--gray-500); font-size: var(--text-sm); }
.nd-overview-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; }
.nd-ov-item { background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); padding: 12px 14px; }
.nd-ov-item dt { font-size: var(--text-xxs); text-transform: uppercase; letter-spacing: 0.04em; color: var(--gray-500); margin-bottom: 4px; }
.nd-ov-item dd { margin: 0; font-size: var(--text-md); font-weight: 600; color: var(--gray-900); }
.form-hint-inline { font-weight: 400; color: var(--gray-500); font-size: var(--text-xxs); text-transform: none; letter-spacing: 0; }

/* ── Kontextbezogene Strukturanlage (Zeilen-„+", 22.08.2026) ────────────────
   Der Parent steht fest und wird als ruhige Zeile MIT Pfad gezeigt — nicht als
   leeres Pflichtfeld. Der Nutzer sieht, WO das neue Element entsteht. */
.nd-parentfix {
  display: flex; align-items: baseline; gap: var(--space-2, 8px); flex-wrap: wrap;
  min-height: var(--input-height, 36px); padding: 6px 10px;
  border: 1px solid var(--vi-border, #D8DFDC); border-radius: var(--radius-md, 8px);
  background: var(--gray-50, #F4F6F5);
}
.nd-parentfix-name { font-size: var(--text-md); font-weight: 650; color: var(--gray-900, #141A17); overflow-wrap: anywhere; }
.nd-parentfix-type { font-size: var(--text-xxs); font-weight: 600; color: var(--gray-500, #5F6B66); }
.nd-parentpath { margin-top: 5px; font-size: var(--text-xs); color: var(--gray-500, #5F6B66); overflow-wrap: anywhere; }

/* Typauswahl, wenn unter einem Knoten MEHRERE Kindtypen zulässig sind. Zeilen,
   keine Kacheln — es ist eine Auswahl, kein Dashboard. */
.nd-typechoice { display: flex; flex-direction: column; min-width: 0; }
.nd-typechoice-item {
  /* `minmax(0, 1fr)` statt `1fr`: eine Grid-Spalte schrumpft sonst nie unter ihre
     Mindestbreite — der lange Erklaertext zog die Spalte auf ~840 px auf und der
     Dialog scrollte waagerecht. */
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 4px 10px;
  width: 100%; min-width: 0; text-align: left; cursor: pointer;
  padding: 12px 4px; min-height: 56px;
  border: none; border-bottom: 1px solid var(--gray-200, #E4E8E6);
  background: none; border-radius: 0; justify-content: flex-start;
  /* Der Eintrag IST ein <button>; die generische Regel `button, .btn` setzt
     `white-space: nowrap`. Hier wird bewusst umgebrochen — sonst blieb vom
     Eintrag nur der Pfeil sichtbar (Fehlerbild 24.08.2026). */
  white-space: normal;
}
.nd-typechoice-item:last-child { border-bottom: none; }
.nd-typechoice-item:hover { background: var(--gray-50, #F4F6F5); }
.nd-typechoice-item.is-planned { cursor: default; opacity: .55; }
.nd-typechoice-item.is-planned:hover { background: none; }
.nd-typechoice-name {
  grid-column: 1 / 2; min-width: 0;
  font-size: var(--text-base); font-weight: 650; color: var(--gray-900, #141A17);
  white-space: normal; overflow-wrap: anywhere;
}
.nd-typechoice-later { font-weight: 500; color: var(--gray-500, #5F6B66); }
.nd-typechoice-hint {
  grid-column: 1 / 2; min-width: 0; font-size: var(--text-xs); font-weight: 400; line-height: 1.4;
  color: var(--gray-500, #5F6B66); white-space: normal; overflow-wrap: anywhere;
}
.nd-typechoice-go {
  grid-column: 2 / 3; grid-row: 1 / 3; align-self: center; justify-self: end;
  color: var(--brand-primary, #147352); font-size: var(--text-lg); font-weight: 700;
}

/* Datenqualität-Modal */
.oq-summary { display: flex; gap: 10px; margin-bottom: 14px; }
.oq-pill { padding: 4px 12px; border-radius: var(--radius-pill); font-size: var(--text-xs); font-weight: 600; }
.oq-pill-error { background: var(--color-danger-soft); color: var(--color-danger-ink); border: 1px solid var(--color-danger-soft); }
.oq-pill-warn { background: var(--color-warning-soft); color: var(--color-warning-ink); border: 1px solid var(--color-warning-soft); }
.oq-list { display: flex; flex-direction: column; gap: 6px; max-height: min(440px, 60vh); overflow-y: auto; }
.oq-row {
  display: grid; grid-template-columns: 64px 110px 1fr 1.4fr auto; gap: 10px; align-items: center;
  padding: 8px 10px; border: 1px solid var(--vi-border); border-radius: var(--radius-md); font-size: var(--text-xs);
}
.oq-row.oq-error { border-left: 3px solid var(--color-danger); }
.oq-row.oq-warn { border-left: 3px solid var(--color-warning); }
.oq-sev { font-weight: 600; font-size: var(--text-xxs); }
.oq-error .oq-sev { color: var(--color-danger-ink); }
.oq-warn .oq-sev { color: var(--color-warning-ink); }
.oq-type { color: var(--gray-500); }
.oq-name { font-weight: 600; color: var(--gray-900); }
.oq-issue { color: var(--gray-700); }

/* ════════════════════════════════════════════════════════════════════════════
   OBJEKTKARTEI – Explorer (Master-Detail)
   ════════════════════════════════════════════════════════════════════════════ */
.obj-topbar { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 14px; flex-wrap: wrap; }
.obj-topbar-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.obj-mandant-wrap { display: flex; align-items: center; gap: 8px; }
/* Feldbeschriftung in Satzschreibung (Pilot C, 16.08.2026). Vorher: 11 px, 600,
   VERSALIEN mit .06em Sperrung — „MANDANT" / „SUCHE" über zwei Feldern las sich wie
   ein Formularvordruck und war das Lauteste auf der ganzen Seite. */
.obj-mandant-label { font-size: var(--text-sm); font-weight: var(--fw-medium); text-transform: none; letter-spacing: 0; color: var(--text-muted); }
.obj-mandant-sel { min-width: 240px; max-width: 340px; height: var(--input-height); }

/* Gemeinsame Steuerung für Explorer/Tabelle und Karten — ein DOM-State, EINE
   Filterleiste für beide Ansichten (keine ansichtsspezifische Steuerung).
   KEINE Karte: die Felder tragen ihren Rahmen selbst; eine umrahmte Leiste um
   umrahmte Felder ist die dritte Flächenebene für eine Zeile Bedienelemente. */
.obj-overview-toolbar {
  display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-4);
  margin-bottom: var(--space-3); padding: 0;
  background: transparent; border: 0; border-radius: 0;
}
.obj-overview-filters { display: flex; align-items: flex-end; gap: 12px; min-width: 0; flex: 1; }
.obj-overview-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.obj-overview-field--tenant { flex: 0 1 280px; }
.obj-overview-field--tenant .obj-mandant-sel { width: 100%; min-width: 0; max-width: none; }
.obj-overview-field--search { flex: 1 1 360px; max-width: 560px; }
.obj-overview-search { position: relative; }
.obj-overview-search > svg { position: absolute; left: 11px; top: 50%; transform: translateY(-50%); color: var(--text-muted, #5F6B66); pointer-events: none; }
.obj-overview-search .form-input { width: 100%; height: 38px; padding-left: 36px; }
.obj-result-count { align-self: center; margin-top: 18px; color: var(--text-secondary, #3A4441); font-size: var(--text-xs); white-space: nowrap; font-variant-numeric: tabular-nums; }
.obj-view-switch { flex: none; }
.obj-view-switch svg { flex: none; }
/* Author-CSS für den Explorer setzt display:flex und würde damit das native
   hidden-Attribut überstimmen. Der Presenterwechsel muss layout- und a11y-seitig
   tatsächlich genau eine Ansicht zeigen. */
#objekte-explorer[hidden], #objekte-cards[hidden] { display: none !important; }

/* Höhe kommt aus `.vic-fill` (vi-components.css): der Rest des Inhaltsbereichs.
   Bis zum 08.09.2026 stand hier `height: 72vh` — eine Fraktion, die nicht wusste,
   wie weit unten die Fläche beginnt, und deshalb unter den Bildschirmrand lief. */
.obj-explorer { display: flex; gap: var(--space-4); align-items: stretch; min-height: 360px; }
.obj-explorer-left { flex: 0 0 380px; display: flex; flex-direction: column; background: var(--bg-primary); border: 1px solid var(--border-default); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); overflow: hidden; }
/* INNENABSTAND AN DER FLÄCHE, nicht an einzelner Zone (Feedback #6, 09.09.2026).
   In dieser Fläche stapeln sich vier Zonen: EntityHeader, Kennzahlenreihe,
   Reiterleiste und Körper. Polster hatte NUR der Körper (.obj-detail-body,
   18/20 px) — Titel, Kennzahlen und Reiter saßen bündig am Rahmen, und der
   Rollbalken lief unmittelbar daneben. Der EntityHeader bringt bewusst kein
   seitliches Polster mit (.vic-eh in vi-components.css): er bekommt seine Luft
   sonst von der Seite (.content, 28/32 px). Hier gibt es keine Seite, sondern
   eine umrandete Fläche — also muss die Fläche das Polster stellen.
   Wer künftig eine Zone ergänzt, braucht dafür kein eigenes Polster mehr. */
.obj-explorer-right {
  flex: 1; min-width: 0;
  background: var(--bg-primary); border: 1px solid var(--border-default);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-sm);
  overflow: auto;
  padding: var(--space-5);
}

/* Mandant-Auswahl direkt über dem Explorer */
.obj-explorer-mandant { padding: var(--space-3) var(--space-3) var(--space-2); border-bottom: 1px solid var(--gray-100); flex-shrink: 0; }
.obj-explorer-mandant .obj-mandant-label { display: block; margin-bottom: 4px; font-size: var(--text-xxs); font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--text-muted); }
.obj-explorer-mandant .obj-mandant-sel { width: 100%; max-width: none; min-width: 0; height: 38px; }

/* Werkzeuge-Menü (sekundäre Aktionen) */
.obj-tools-wrap { position: relative; }
.obj-tools-dd {
  position: absolute; top: calc(100% + 6px); right: 0; z-index: 1200;
  background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg);
  box-shadow: 0 10px 28px rgba(40, 30, 20,.14); padding: 5px; min-width: 220px;
}

.oq-scope { font-size: var(--text-xs); color: var(--text-muted); margin-bottom: 10px; padding: 4px 10px; background: var(--color-cream); border: 1px solid var(--border-default); border-radius: var(--radius-sm); display: inline-block; }

/* Navigation: Up-Button + Breadcrumb */
.obj-explorer-nav { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--gray-100); flex-shrink: 0; min-height: 40px; }
.obj-up-btn { width: 28px; height: 28px; flex-shrink: 0; border: 1px solid var(--border-default); background: var(--bg-primary); border-radius: var(--radius-sm); display: inline-flex; align-items: center; justify-content: center; color: var(--text-secondary); cursor: pointer; transition: background .12s ease, color .12s ease; }
.obj-up-btn:hover:not([disabled]) { background: var(--vi-green-soft); color: var(--vi-green-deep); border-color: var(--vi-green-soft); }
.obj-up-btn[disabled] { opacity: .4; cursor: not-allowed; }
.obj-breadcrumb .obj-crumb { color: var(--gray-500); cursor: pointer; max-width: 140px; overflow: hidden; text-overflow: ellipsis; }
.obj-breadcrumb .obj-crumb[onclick]:hover { color: var(--vi-green, #147352); text-decoration: underline; }
.obj-breadcrumb .obj-crumb.is-current { color: var(--gray-900); font-weight: 600; cursor: default; }
.obj-crumb-sep { color: var(--gray-300); flex-shrink: 0; }
.obj-crumb-placeholder { color: var(--gray-500); font-style: italic; }
/* Kompakte Kontextzeile links (ersetzt den langen Breadcrumb) */
.obj-nav-context { display: flex; align-items: center; gap: 6px; min-width: 0; flex: 1; font-size: var(--text-sm); font-weight: 600; color: var(--text-primary); }
.obj-nav-context .obj-node-icon { flex-shrink: 0; }
.obj-nav-context-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* kurzzeitiges Hervorheben nach Verschieben */
@keyframes objMovedPulse { 0% { background: var(--color-warning-soft); } 100% { background: transparent; } }
.obj-tree-row.is-moved { animation: objMovedPulse 1.8s ease-out; }

.obj-tree-toolbar { display: flex; gap: 8px; padding: 10px; border-bottom: 1px solid var(--gray-100); flex-shrink: 0; }
.obj-tree-toolbar .form-input { flex: 1; height: 34px; }
.obj-tree-toolbar--structure { align-items: center; justify-content: space-between; min-height: 42px; font-size: var(--text-xxs); font-weight: 650; text-transform: uppercase; letter-spacing: .055em; color: var(--text-muted); }
.obj-tree-toolbtns { display: flex; gap: 4px; }
.obj-tree-pane { flex: 1; overflow-y: auto; padding: 6px; min-height: 0; }
.obj-tree-hits-info { font-size: var(--text-xxs); color: var(--text-muted); padding: 4px 8px 8px; }

/* ── EINRÜCKUNG = HIERARCHIE (Feedback #3 §5.1) ──────────────────────────────
   Jede Ebene bekommt einen klar sichtbaren Einzug (--obj-indent-step) UND eine
   dezente Astlinie. Die Linien entstehen als wiederholter Verlauf im Padding-
   Bereich — kein zusätzliches Markup je Ebene, keine zweite Baumkomponente.
   Geschwister stehen dadurch exakt gleich, Kinder sichtbar weiter rechts; das
   Symbol allein muss die Struktur nicht mehr tragen.
   DIES IST DIE EINZIGE Definition von `.obj-tree-row` — eine zweite weiter oben
   hätte sie (später im Stylesheet gewinnt) wirkungslos gemacht. */
.obj-tree-row {
  --obj-indent-base: 6px;
  --obj-indent-step: 20px;
  --obj-depth: 0;
  display: flex; align-items: center; gap: 7px; border-radius: var(--radius-sm);
  padding: 6px 8px 6px calc(var(--obj-indent-base) + var(--obj-depth) * var(--obj-indent-step));
  border-bottom: 1px solid var(--gray-100);
  cursor: pointer; font-size: var(--text-sm); user-select: none; position: relative;
  transition: background .12s ease, box-shadow .12s ease;
  background-image: repeating-linear-gradient(to right,
    var(--gray-200, #E4E9E7) 0, var(--gray-200, #E4E9E7) 1px,
    transparent 1px, transparent var(--obj-indent-step));
  background-position: calc(var(--obj-indent-base) + 9px) 0;
  background-size: calc(var(--obj-depth) * var(--obj-indent-step)) 100%;
  background-repeat: no-repeat;
}
.obj-tree-row:hover { background: var(--color-cream); }
.obj-tree-row.is-selected { background: var(--vi-green-soft); box-shadow: inset 3px 0 0 var(--vi-green-deep); }
.obj-tree-row.is-selected .obj-tree-name { color: var(--vi-green-deep); font-weight: 600; }
.obj-tree-row.is-path-only { cursor: default; color: var(--text-muted); }
.obj-tree-row.is-path-only .obj-tree-name { color: var(--text-muted); }
.obj-tree-row.is-droptarget { background: var(--vi-green-soft); outline: 2px dashed var(--color-mint); outline-offset: -2px; }
.obj-tree-row.is-dropinvalid { background: var(--color-danger-soft); }
.obj-tree-caret { width: 18px; height: 18px; border: none; background: transparent; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; color: var(--text-muted); border-radius: 4px; flex-shrink: 0; transition: transform .12s ease; }
.obj-tree-caret.is-open { transform: rotate(90deg); }
.obj-tree-caret:hover { background: var(--vi-green-soft); color: var(--vi-green-deep); }
.obj-tree-caret-spacer { width: 18px; flex-shrink: 0; display: inline-block; }
.obj-node-icon { flex-shrink: 0; }
.obj-tree-name { font-weight: 500; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.obj-tree-childcount { margin-left: auto; font-size: var(--text-xxs); color: var(--text-muted); background: var(--gray-100); border-radius: var(--radius-full); padding: 0 7px; min-width: 18px; text-align: center; flex-shrink: 0; }
.obj-tree-menu-btn { opacity: 0; border: none; background: transparent; color: var(--text-muted); cursor: pointer; padding: 2px; border-radius: var(--radius-sm); flex-shrink: 0; margin-left: 2px; transition: background .12s ease, color .12s ease; }
.obj-tree-row:hover .obj-tree-menu-btn { opacity: 1; }
.obj-tree-row.is-selected .obj-tree-menu-btn { opacity: 1; }
.obj-tree-menu-btn:hover { background: var(--border-default); color: var(--text-primary); }
.obj-tree-row:not(:hover):not(.is-selected) .obj-tree-childcount { margin-left: auto; }

.obj-empty-pane { background: transparent; border: none; }

/* ── Visuelle Objektbibliothek (Ansicht „Karten" im Objektmodul) ───────────────
   Zweite Ansicht derselben Daten und derselben Filter wie die Liste — keine
   Parallelfunktion. Sie beantwortet eine andere Frage: „Welches Haus ist das?"
   Deshalb führt das Bild, danach Name, Ort, Art. Die Karte hebt sich beim Zeigen
   NICHT an (kein translateY): eine Wand aus 40 hüpfenden Kacheln ist Unruhe, kein
   Feedback — der Rahmen und ein sehr leiser Schatten genügen. */
.obj-cards-view { min-height: 360px; padding: 2px 1px 24px; }
.obj-card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 264px), 1fr));
  gap: var(--space-4, 16px);
  align-items: stretch;
}
.obj-card-link { display: block; min-width: 0; color: inherit; text-decoration: none; border-radius: var(--radius-lg, 12px); }
.obj-card {
  height: 100%; overflow: hidden; background: var(--bg-primary, #fff);
  border: 1px solid var(--border-default, #D8DFDC); border-radius: var(--radius-lg, 12px);
  transition: border-color .16s ease, box-shadow .16s ease;
}
.obj-card-link:hover .obj-card { border-color: var(--gray-400, #A6B0AC); box-shadow: var(--shadow-md); }
.obj-card-link:focus-visible { outline: none; }
.obj-card-link:focus-visible .obj-card { border-color: var(--green-400, #47A67D); box-shadow: var(--focus-ring); }
.obj-card-media, .obj-title-image-media, .obj-title-image-choice-media {
  position: relative; display: block; overflow: hidden; aspect-ratio: 16 / 9;
  background: linear-gradient(145deg, var(--gray-100, #EFF2F1), var(--gray-200, #E5EAE8));
}
.obj-card-image, .obj-card-media > img, .obj-title-image-media > img, .obj-title-image-choice-media > img {
  position: absolute; inset: 0; z-index: 2; width: 100%; height: 100%; object-fit: cover; display: block;
}
.obj-card-fallback { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: var(--gray-400, #A6B0AC); }
.obj-card-fallback-building { width: 42%; max-width: 124px; opacity: .5; }
.obj-card-fallback-id {
  position: absolute; right: 12px; bottom: 10px; min-width: 30px; height: 26px; padding: 0 8px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--gray-300, #D8DFDC); border-radius: var(--radius-sm, 6px);
  background: rgba(255,255,255,.82); color: var(--gray-700, #3A4441);
  font-size: var(--text-xxs); font-weight: 600; letter-spacing: .04em; font-variant-numeric: tabular-nums;
}
.obj-card-body { padding: var(--space-3, 12px) var(--space-4, 16px) var(--space-4, 16px); }
.obj-card-name {
  margin: 0; color: var(--text-primary, #141A17); font-size: var(--text-base, 15px);
  font-weight: var(--fw-semibold, 600); line-height: 1.3; letter-spacing: -.01em;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;
}
.obj-card-address {
  min-height: 34px; margin: 4px 0 0; color: var(--text-muted, #5F6B66);
  font-size: var(--text-sm, 13px); line-height: 1.35;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;
}
/* Objektart/Nutzung als ruhige Beschriftung — kein buntes Pill, davon gäbe es hier
   sonst eine ganze Wand. */
.obj-card-meta {
  margin: var(--space-3, 12px) 0 0; padding-top: var(--space-2, 8px);
  border-top: 1px solid var(--border-subtle, #E5EAE8);
  color: var(--text-muted, #5F6B66); font-size: var(--text-xs, 12px); line-height: 1.35;
}
.obj-cards-empty, .obj-cards-error { grid-column: 1 / -1; }

/* Karten-Skeletons halten exakt dieselbe Geometrie wie die fertigen Karten. */
.obj-card-skeleton-grid { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 264px), 1fr)); gap: var(--space-4, 16px); }
.obj-card-skeleton { overflow: hidden; min-height: 280px; border: 1px solid var(--border-default, #D8DFDC); border-radius: var(--radius-lg, 12px); background: var(--color-surface); }
.obj-card-skeleton-media, .obj-card-skeleton-line {
  background: linear-gradient(90deg, #E9EDEB 25%, #F6F8F7 50%, #E9EDEB 75%); background-size: 400% 100%;
  animation: objCardSkeleton 1.35s ease-in-out infinite;
}
.obj-card-skeleton-media { aspect-ratio: 16 / 9; }
.obj-card-skeleton-line { height: 11px; margin: 10px 16px 0; border-radius: var(--radius-sm); }
.obj-card-skeleton-line.is-name { width: 58%; height: 15px; margin-top: 16px; }
.obj-card-skeleton-line.is-short { width: 36%; }
@keyframes objCardSkeleton { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }

/* Kontextmenü */
.obj-ctx-menu { position: fixed; z-index: 3000; min-width: 220px; max-width: 280px; background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); box-shadow: 0 10px 28px rgba(40, 30, 20,.16); padding: 5px; }
.obj-ctx-info { padding: 8px 10px 6px; }
.obj-ctx-info .doc-ext-badge { font-size: 10px; }
.obj-ctx-item { display: block; width: 100%; text-align: left; border: none; background: transparent; padding: 8px 10px; border-radius: var(--radius-sm); font-size: var(--text-sm); color: var(--gray-700); cursor: pointer; font-family: inherit; }
.obj-ctx-item:hover { background: var(--gray-100); }
.obj-ctx-item-danger:hover { background: var(--color-danger-soft); color: var(--color-danger-ink); }
/* Hervorgehobene Primäraktion im Kontextmenü (z. B. „Extern bearbeiten" / „Neue Version hochladen" bei Office-Dateien). */
.obj-ctx-item-strong { font-weight: 700; color: var(--vi-green-deep, #0F5C42); }
.obj-ctx-item-strong:hover { background: var(--vi-green-tint, #EDF7F2); }
.obj-ctx-sep { height: 1px; background: var(--gray-100); margin: 4px 2px; }

/* Detailbereich */
.obj-detail-empty { padding: 48px 0; text-align: center; color: var(--text-muted); font-size: var(--text-sm); }
.obj-detail-icon { width: 40px; height: 40px; border-radius: var(--radius-md); background: var(--color-cream); border: 1px solid var(--border-default); display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--vi-green-deep); }
.obj-detail-titlewrap { min-width: 0; }
.obj-detail-title { margin: 0 0 6px; font-size: 19px; font-weight: 700; color: var(--text-primary); }
.obj-detail-badges { display: flex; gap: 6px; flex-wrap: wrap; }
.obj-detail-path { margin-top: 10px; font-size: var(--text-xs); color: var(--gray-500); display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.obj-detail-path .obj-crumb { color: var(--gray-500); cursor: pointer; }
.obj-detail-path .obj-crumb[onclick]:hover { color: var(--vi-green, #147352); text-decoration: underline; }
.obj-detail-path .obj-crumb.is-current { color: var(--gray-900); font-weight: 600; cursor: default; }
.obj-detail-addr { margin-top: 3px; font-size: var(--text-sm); color: var(--gray-700); }
.obj-detail-kennz { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 8px; }
.obj-detail-kennz span { font-size: var(--text-xs); color: var(--text-secondary); background: var(--color-cream); border: 1px solid var(--border-default); border-radius: var(--radius-sm); padding: 3px 9px; }
.obj-detail-actions { margin-top: 14px; display: flex; gap: 8px; flex-wrap: wrap; }
.obj-detail-body { padding: 0; }   /* das Polster stellt jetzt .obj-explorer-right */

.nd-ov-full { grid-column: 1 / -1; }
.nd-link-section { margin-bottom: 18px; }
.nd-link-section h4 { margin: 0 0 8px; font-size: var(--text-sm); font-weight: 700; color: var(--gray-700); }
.obj-move-path { font-size: var(--text-sm); color: var(--text-primary); background: var(--color-cream); border: 1px solid var(--border-default); border-radius: var(--radius-md); padding: 8px 12px; word-break: break-word; }

/* ── Detailkarte: Kennzahlen-Kacheln (typabhängig) ── */
.obj-kpi-grid { margin-top: 14px; display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 8px; }
.obj-kpi { background: var(--color-cream); border: 1px solid var(--border-default); border-radius: var(--radius-md); padding: 10px 12px; }
.obj-kpi-value { font-size: 19px; font-weight: 700; color: var(--text-primary); line-height: 1.1; }
.obj-kpi-label { font-size: var(--text-xxs); color: var(--text-muted); margin-top: 3px; }

/* ── Detailkarte: echte Tab-Leiste ── */
.obj-tab-btn {
  appearance: none; background: none; border: none; border-bottom: 2px solid transparent;
  padding: 10px 12px; font-size: var(--text-sm); font-family: var(--font-family-body); color: var(--gray-500);
  cursor: pointer; white-space: nowrap; margin-bottom: -1px; transition: color .12s, border-color .12s;
}
.obj-tab-btn:hover { color: var(--gray-900); }
.obj-tab-btn.active { color: var(--gruen, #1a3d2b); border-bottom-color: var(--gruen, #1a3d2b); font-weight: 600; }

/* ── Professioneller Platzhalter für noch nicht angebundene Module ── */
.obj-tab-ph { text-align: center; padding: 32px 20px; color: var(--gray-500); background: var(--gray-50); border: 1px dashed var(--vi-border); border-radius: var(--radius-lg); }
.obj-tab-ph-title { font-weight: 600; color: var(--gray-700); margin-bottom: 6px; }
.obj-tab-ph p { margin: 0; font-size: var(--text-sm); }
.obj-tab-ph-note { margin-top: 12px; font-size: var(--text-xs); color: var(--gray-500); font-style: italic; }

/* ── Postfach (eigenständiges Demo-Mailmodul) ── */
.pf-layout { display: grid; grid-template-columns: 200px 360px 1fr; gap: 14px; align-items: start; }
.pf-folders { display: flex; flex-direction: column; gap: 4px; background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); padding: 8px; }
.pf-folder { display: flex; align-items: center; justify-content: space-between; gap: 8px; border: none; background: transparent; border-radius: var(--radius-md); padding: 9px 11px; font-size: var(--text-sm); color: var(--gray-700); cursor: pointer; font-family: var(--font-family-body); text-align: left; }
.pf-folder:hover { background: var(--gray-100); color: var(--gray-800); }
.pf-folder.active { background: var(--vi-green-soft); color: var(--vi-green-deep); font-weight: 600; }
.pf-folder-badge { font-size: var(--text-xxs); font-weight: 700; background: var(--vi-sand); color: var(--vi-muted); border-radius: var(--radius-md); padding: 1px 7px; font-family: var(--vi-font-mono); }
.pf-folder.active .pf-folder-badge { background: rgba(19,109,57,.14); color: var(--vi-green-deep); }
.pf-acct-note { margin-top: 10px; padding: 8px 10px; font-size: var(--text-xxs); color: var(--gray-500); border-top: 1px solid var(--gray-100); }
.pf-listcol { background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); overflow: hidden; display: flex; flex-direction: column; max-height: calc(100vh - 220px); }
.pf-toolbar { display: flex; gap: 10px; align-items: center; padding: 10px; border-bottom: 1px solid var(--gray-100); flex-wrap: wrap; }
.pf-toolbar .form-input { flex: 1; min-width: 140px; }
.pf-filter { font-size: var(--text-xs); color: var(--gray-500); display: inline-flex; gap: 5px; align-items: center; white-space: nowrap; }
.pf-list { overflow-y: auto; flex: 1; }
.pf-item { padding: 11px 14px; border-bottom: 1px solid var(--gray-100); cursor: pointer; }
.pf-item:hover { background: var(--gray-50); }
.pf-item.is-selected { background: var(--green-50); border-left: 3px solid var(--gruen); padding-left: 11px; }
.pf-item.is-unread .pf-item-from, .pf-item.is-unread .pf-item-subject { font-weight: 700; color: var(--gray-900); }
.pf-item-row1 { display: flex; justify-content: space-between; gap: 8px; }
.pf-item-from { font-size: var(--text-sm); color: var(--gray-700); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pf-item-date { font-size: var(--text-xxs); color: var(--gray-500); white-space: nowrap; }
.pf-item-subject { font-size: var(--text-sm); color: var(--gray-800); margin: 3px 0 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pf-item-row3 { display: flex; gap: 6px; align-items: center; }
.pf-badge { font-size: var(--text-xxs); font-weight: 600; border-radius: var(--radius-pill); padding: 1px 8px; }
.pf-badge-linked { background: var(--green-50); color: var(--color-success-ink); }
.pf-badge-open { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.pf-badge-att { background: var(--gray-100); color: var(--gray-700); }
.pf-detail { background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); padding: 18px 20px; min-height: 300px; }
.pf-detail-subject { font-size: var(--text-lg); font-weight: 700; color: var(--gray-900); margin: 0 0 12px; }
.pf-detail-meta { font-size: var(--text-sm); color: var(--gray-700); display: flex; flex-direction: column; gap: 3px; }
.pf-detail-meta b { color: var(--gray-700); }
.pf-detail-linked { margin-top: 12px; font-size: var(--text-sm); color: var(--gray-700); }
.pf-detail-unassigned { color: var(--color-warning-ink); }
.pf-linked-case { color: var(--gruen); cursor: pointer; text-decoration: underline; margin-right: 8px; }
.pf-detail-actions { display: flex; gap: 8px; flex-wrap: wrap; margin: 14px 0; }
.pf-att-hint { margin-top: 10px; font-size: var(--text-xs); color: var(--gray-500); font-style: italic; }
@media (max-width: 1100px) { .pf-layout { grid-template-columns: 160px 1fr; } .pf-detail { grid-column: 1 / -1; } }

/* ── Postfach: echtes Postfach (mail_accounts/mail_messages) – Ergänzungen ── */
.pf-loading, .pf-list-loading { padding: 40px 20px; text-align: center; color: var(--gray-500); font-size: var(--text-sm); }
.pf-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); padding: 14px 18px; margin-bottom: 14px; }
.pf-header-main { min-width: 0; }
.pf-header .page-title { margin: 0; }
.pf-header-sub { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 5px; }
.pf-acct-name { font-weight: 600; color: var(--gray-800); }
.pf-acct-select { max-width: 240px; height: 32px; padding: 4px 10px; }
.pf-acct-mail { font-size: var(--text-sm); color: var(--gray-500); font-family: var(--vi-font-mono); }
.pf-status { font-size: var(--text-xxs); font-weight: 600; border-radius: var(--radius-pill); padding: 2px 10px; background: var(--gray-100); color: var(--gray-700); }
.pf-status-ok { background: #E1F0E7; color: #1C6B3E; }
.pf-status-err { background: #F7DDD8; color: var(--color-danger-ink); }
.pf-header-actions { display: flex; gap: 8px; flex-shrink: 0; flex-wrap: wrap; }
.pf-banner { padding: 11px 15px; border-radius: var(--radius-md); font-size: var(--text-sm); line-height: 1.5; margin-bottom: 14px; }
.pf-banner-info { background: #EAF3EE; border: 1px solid #BFE0CC; color: #1C4A30; }
.pf-link { color: var(--vi-green, #147352); cursor: pointer; text-decoration: underline; }
.pf-empty-state { text-align: center; padding: 60px 20px; background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); }
.pf-empty-icon { font-size: 40px; opacity: .4; }
.pf-empty-state h2 { font-size: var(--text-lg); color: var(--gray-800); margin: 12px 0 6px; }
.pf-empty-state p { color: var(--gray-500); margin: 0 0 16px; }
.pf-folder-soon { opacity: .55; }
.pf-soon { font-size: 10px; background: var(--gray-100); color: var(--gray-500); border-radius: var(--radius-sm); padding: 1px 6px; }
.pf-acct-note-sub { color: #A8A294; }
.pf-empty { padding: 36px 20px; text-align: center; color: var(--gray-500); font-size: var(--text-sm); line-height: 1.5; }
.pf-empty-strong { font-weight: 700; color: var(--gray-800); margin-bottom: 4px; }
.pf-empty-err { color: var(--color-danger-ink); }
.pf-badge-in { background: #E4ECFB; color: #2B4C86; }
.pf-badge-out { background: #EFEAF7; color: #5A3E86; }
.pf-detail-empty { color: var(--gray-500); text-align: center; padding: 60px 20px; }
.pf-body { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--gray-100); white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--text-sm); line-height: 1.6; color: var(--gray-800); font-family: var(--font-family-body); }
.pf-body-empty { color: #A8A294; font-style: italic; }
.pf-atts { margin-top: 16px; padding-top: 12px; border-top: 1px dashed var(--vi-border); }
.pf-atts-title { font-size: var(--text-xxs); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--gray-500); margin-bottom: 8px; }
.pf-atts-list { display: flex; flex-wrap: wrap; gap: 8px; }
.pf-att { display: inline-flex; align-items: center; gap: 4px; background: var(--gray-50); border: 1px solid var(--vi-border); border-radius: var(--radius-md); padding: 5px 10px; font-size: var(--text-xs); color: var(--gray-700); }
.pf-att-size { color: var(--gray-500); }
.pf-linked-wrap { display: inline-flex; align-items: center; gap: 2px; margin-right: 6px; }
.pf-unlink { border: none; background: transparent; color: var(--color-danger-ink); cursor: pointer; font-size: var(--text-base); line-height: 1; padding: 0 2px; }
.pf-compose .modal-content, .pf-compose { max-width: 640px; }

/* Postfach-Anhänge: Aktionen je Anhang (Download / In Dokumente übernehmen) */
.pf-atts-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.pf-att { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; background: var(--gray-50); border: 1px solid var(--vi-border); border-radius: var(--radius-md); padding: 7px 11px; font-size: var(--text-xs); color: var(--gray-700); margin-bottom: 6px; }
.pf-att-name { display: flex; align-items: center; gap: 4px; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.pf-att-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.pf-att-link { color: var(--vi-green, #147352); text-decoration: underline; cursor: pointer; font-size: var(--text-xs); }
.pf-att-btn { border: 1px solid var(--vi-green, #147352); background: transparent; color: var(--vi-green, #147352); border-radius: var(--radius-sm); padding: 3px 9px; font-size: var(--text-xs); cursor: pointer; font-family: inherit; }
.pf-att-btn:hover { background: var(--vi-green, #147352); color: var(--color-surface); }
.pf-att-btn-all { font-weight: 600; }
.pf-att-badge { background: #E1F0E7; color: #1C6B3E; border-radius: var(--radius-pill); padding: 2px 9px; font-size: var(--text-xxs); font-weight: 600; }
.pf-att-nofile { color: #A8A294; font-style: italic; font-size: var(--text-xxs); }
.pf-att-inline { background: #EDE9E0; color: var(--gray-500); border-radius: var(--radius-sm); padding: 0 6px; font-size: var(--text-xxs); }

/* ── Integrität / Datenpflege (Admin) ── */
.integ-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }
.integ-card { background: var(--color-surface); border: 1px solid var(--vi-border); border-left: 4px solid var(--gray-300); border-radius: var(--radius-lg); padding: 14px 16px; }
.integ-card.integ-crit { border-left-color: var(--rot); }
.integ-card.integ-warn { border-left-color: var(--color-warning-ink); }
.integ-card.integ-info { border-left-color: var(--green-600); }
.integ-card.integ-ok   { border-left-color: var(--color-success-ink); }
.integ-val { font-size: 26px; font-weight: 700; color: var(--gray-900); line-height: 1; }
.integ-label { font-size: var(--text-xs); color: var(--gray-700); margin-top: 6px; }
.integ-amp { display: inline-block; margin-top: 8px; font-size: var(--text-xxs); font-weight: 700; padding: 2px 9px; border-radius: var(--radius-pill); }
.integ-amp-crit { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.integ-amp-warn { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.integ-amp-info { background: var(--green-50); color: var(--green-700); }
.integ-amp-ok   { background: var(--green-50); color: var(--green-800); }
.integ-hint { font-size: var(--text-xxs); color: var(--gray-500); max-width: 320px; line-height: 1.35; }

/* ── Phase 3D: Datenqualitäts-Chips ── */
.dq-chips { display: flex; flex-wrap: wrap; gap: 10px; }
.dq-chip { display: flex; flex-direction: column; align-items: center; min-width: 92px; padding: 10px 12px; background: var(--gray-50); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); }
.dq-chip-val { font-size: 20px; font-weight: 700; color: var(--gray-900); line-height: 1; }
.dq-chip-label { font-size: var(--text-xxs); color: var(--gray-500); margin-top: 5px; text-align: center; }

/* ── Phase 3G: FK-Härtungsstatus ── */
.fk-list { display: flex; flex-direction: column; gap: 6px; }
.fk-row { display: flex; align-items: center; gap: 10px; font-size: var(--text-xs); }
.fk-row code { background: var(--gray-100); padding: 2px 6px; border-radius: var(--radius-sm); color: var(--gray-700); }
.fk-badge { font-size: var(--text-xxs); font-weight: 600; padding: 2px 8px; border-radius: var(--radius-pill); }
.fk-badge.fk-on { background: var(--green-50); color: var(--green-800); }
.fk-badge.fk-off { background: var(--gray-100); color: var(--gray-500); }

/* ── Phase 3B: Objektakte Energie/Wartung/Verträge + Dokument-Highlight ── */
.nd-module-link { margin-top: 12px; }
/* `.dok-row-highlight` ist entfallen (15.09.2026): ein Nummerntreffer wird nicht
   mehr in der Liste gesucht und angeblinkt, sondern geöffnet. */

/* ── Phase 3C: einheitliche Herkunfts-Badges (Dokumentenmodul) ── */
.dok-herkunft-badge { display: inline-block; font-size: var(--text-xxs); font-weight: 600; padding: 2px 8px; border-radius: var(--radius-pill); white-space: nowrap; background: var(--gray-100); color: var(--gray-700); }
.dok-herkunft-email { background: var(--green-50); color: var(--green-700); }
.dok-herkunft-vorgang { background: var(--color-info-soft); color: var(--color-info-ink); }
.dok-herkunft-legacy { background: var(--gray-100); color: var(--gray-500); }
.dok-herkunft-import { background: var(--green-50); color: var(--green-800); }
.dok-herkunft-upload { background: var(--color-warning-soft); color: var(--color-warning-ink); }
.dok-herkunft-objekt { background: var(--color-info-soft); color: var(--color-info-ink); }

/* ── Einheitliche Icon-Buttons (E-Mail-Aktionen) ── */
.icon-btn {
  width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid transparent; background: transparent; border-radius: var(--radius-md); color: var(--gray-500);
  cursor: pointer; padding: 0; transition: background .12s, color .12s, border-color .12s;
}
.icon-btn:hover { background: var(--color-info-soft); color: var(--gruen); border-color: var(--vi-border); }
.icon-btn:focus-visible { outline: 2px solid var(--gruen); outline-offset: 1px; }
.icon-btn:disabled { opacity: .4; cursor: not-allowed; }
.icon-btn-danger:hover { background: var(--color-danger-soft); color: var(--rot); border-color: var(--color-danger-soft); }
.icon-btn-muted { color: var(--gray-300); }
.icon-btn-muted:hover { background: var(--gray-50); color: var(--gray-500); border-color: var(--color-info-soft); }
.comm-detail-actions.icon-btn-row { margin-top: 12px; }
.email-full-actions { margin-left: auto; }

/* ── Kommunikation im Vorgang: kompakte aufklappbare Liste ── */
.comm-toolbar { display: flex; gap: 12px; align-items: center; margin: 14px 0 10px; flex-wrap: wrap; }
.comm-search { flex: 1; min-width: 180px; }
.comm-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.comm-chip { border: 1px solid var(--vi-border); background: var(--color-surface); color: var(--gray-700); border-radius: var(--radius-pill); padding: 5px 12px; font-size: var(--text-xs); cursor: pointer; font-family: var(--font-family-body); }
.comm-chip:hover { background: var(--gray-100); }
.comm-chip.active { background: var(--vi-green-soft); color: var(--vi-green-deep); border-color: var(--vi-green-soft); font-weight: 600; }
.comm-row { border-bottom: 1px solid var(--gray-100); }
.comm-row:last-child { border-bottom: none; }
.comm-row.is-open .comm-rowmain { background: var(--green-50); }
.comm-from .email-dir { font-size: 10px; padding: 1px 6px; vertical-align: middle; margin-right: 2px; }
.comm-att-ok { color: var(--color-success-ink); font-weight: 600; }
.comm-detail-meta { display: flex; flex-direction: column; gap: 2px; font-size: var(--text-xs); color: var(--gray-700); margin-bottom: 10px; }
.comm-detail-meta b { color: var(--gray-700); }
.comm-detail-actions { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 12px; }
.extract-atts { display: flex; flex-direction: column; gap: 6px; }
.extract-att { display: flex; align-items: center; gap: 8px; font-size: var(--text-sm); color: var(--gray-700); padding: 6px 8px; border: 1px solid var(--color-info-soft); border-radius: var(--radius-md); }

/* ── Kommunikation / E-Mail im Vorgang (Karten – Postfach-Picker) ── */
.email-list { display: flex; flex-direction: column; gap: 12px; }
.email-item { background: var(--color-surface); border: 1px solid var(--vi-border); border-radius: var(--radius-lg); padding: 14px 16px; }
.email-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.email-subject { font-weight: 600; color: var(--gray-900); font-size: var(--text-md); flex: 1; min-width: 0; }
.email-date { font-size: var(--text-xs); color: var(--gray-500); white-space: nowrap; }
.email-dir { font-size: var(--text-xxs); font-weight: 700; padding: 2px 8px; border-radius: var(--radius-pill); white-space: nowrap; }
.email-dir-in  { background: var(--green-50); color: var(--green-700); }
.email-dir-out { background: var(--green-50); color: var(--color-success-ink); }
.email-meta { display: flex; gap: 16px; flex-wrap: wrap; font-size: var(--text-xs); color: var(--gray-500); margin-top: 6px; }
.email-meta b { color: var(--gray-700); font-weight: 600; }
.email-body { margin-top: 10px; font-size: var(--text-sm); color: var(--gray-700); white-space: pre-wrap; word-break: break-word; background: var(--gray-50); border: 1px solid var(--color-info-soft); border-radius: var(--radius-md); padding: 10px 12px; }
.email-body-sm { max-height: 72px; overflow: hidden; }
.email-atts { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 10px; }
.email-att-chip { display: inline-flex; align-items: center; gap: 5px; font-size: var(--text-xs); color: var(--gray-700); background: var(--gray-100); border: 1px solid var(--vi-border); border-radius: var(--radius-sm); padding: 3px 9px; }
.email-att-done { color: var(--color-success-ink); font-weight: 600; margin-left: 4px; }
.email-actions { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 12px; }
.email-mock-note { color: var(--color-warning-ink); }
.comm-docs-title { font-size: var(--text-xs); font-weight: 600; color: var(--gray-700); margin-bottom: 8px; }

/* ── Auto-Save Stammdaten: Statusleiste + Feldfehler ── */
.obj-sd-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; min-height: 20px; }
.obj-sd-hint { font-size: var(--text-xs); color: var(--gray-500); }
.obj-sd-status { font-size: var(--text-xs); font-weight: 600; white-space: nowrap; }
.obj-sd-status.is-saving { color: var(--green-600); }
.obj-sd-status.is-saved  { color: var(--color-success-ink); }
.obj-sd-status.is-error  { color: var(--rot); }
.workspace-form-card .form-input.input-error,
.workspace-form-card .form-select.input-error { border-color: var(--rot); background: var(--color-danger-soft); }

/* Titelbildpflege ist Teil des Objektstamms und nutzt dieselben zentralen Dokumente. */
.obj-title-image-panel {
  display: grid; grid-template-columns: minmax(190px, 250px) minmax(0, 1fr); gap: 18px; align-items: center;
  margin: 0 0 18px; padding: 14px 0; border-top: 1px solid var(--border-default, #D8DFDC); border-bottom: 1px solid var(--border-default, #D8DFDC);
}
.obj-title-image-media { width: 100%; border-radius: var(--radius-lg); border: 1px solid var(--border-default, #D8DFDC); }
.obj-title-image-copy h3 { margin: 0 0 5px; color: var(--text-primary, #141A17); font-size: var(--text-md); }
.obj-title-image-copy p { max-width: 560px; margin: 0 0 11px; color: var(--text-secondary, #3A4441); font-size: var(--text-xs); line-height: 1.5; }
.obj-title-image-dialog { width: min(760px, calc(100vw - 28px)); }
.obj-title-image-upload {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 18px;
  padding: 12px; border: 1px dashed #BEB7AA; border-radius: var(--radius-lg); background: var(--gray-50);
}
.obj-title-image-upload > span:last-of-type { color: var(--text-secondary, #3A4441); font-size: var(--text-xxs); }
.obj-title-image-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 12px; }
.obj-title-image-choice {
  min-width: 0; padding: 0 0 10px; overflow: hidden; text-align: left; cursor: pointer;
  background: var(--color-surface); color: var(--text-primary, #141A17); border: 1px solid var(--border-default, #D8DFDC); border-radius: var(--radius-lg);
}
.obj-title-image-choice:hover { border-color: #AAA397; }
.obj-title-image-choice:focus-visible { outline: 3px solid var(--vi-green, #0F5C42); outline-offset: 2px; }
.obj-title-image-choice.is-current { border-color: var(--vi-green, #0F5C42); }
.obj-title-image-choice-name, .obj-title-image-current, .obj-title-image-select { display: block; padding: 0 10px; }
.obj-title-image-choice-name { margin-top: 9px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--text-xs); font-weight: 650; }
.obj-title-image-current, .obj-title-image-select { margin-top: 3px; color: var(--text-secondary, #3A4441); font-size: var(--text-xxs); }
.obj-title-image-current { color: var(--vi-green-deep, #0F5C42); font-weight: 650; }

@media (max-width: 980px) {
  .obj-overview-toolbar { align-items: stretch; flex-direction: column; }
  .obj-overview-filters { width: 100%; }
  .obj-view-switch { align-self: flex-end; }
  .obj-explorer { flex-direction: column; height: auto; }
  .obj-explorer-left { flex: none; height: 320px; }
  .obj-explorer-right { min-height: 360px; }
}

@media (max-width: 680px) {
  .obj-overview-toolbar { padding: 10px; }
  .obj-overview-filters { align-items: stretch; flex-direction: column; }
  .obj-overview-field--tenant, .obj-overview-field--search { flex: none; max-width: none; width: 100%; }
  .obj-result-count { align-self: flex-start; margin-top: 0; }
  .obj-view-switch { align-self: stretch; }
  .obj-view-switch .vi-seg__btn { flex: 1; justify-content: center; min-height: 38px; }
  .obj-card-grid, .obj-card-skeleton-grid { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  .obj-title-image-panel { grid-template-columns: 1fr; }
  .obj-title-image-media { max-width: none; }
  .obj-title-image-list { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .obj-card, .obj-card-skeleton-media, .obj-card-skeleton-line { transition: none; animation: none; }
  .obj-card-link:hover .obj-card { transform: none; }
}

/* ════════════════════════════════════════════════════════════════════════════
   EINHEITLICHE TABS (Pill / Segmented) – projektweit
   Eine zentrale Optik für alle Tab-Leisten. Überschreibt ältere Unterstreichungs-/
   Halbrund-/Textlink-Stile. Gilt für:
   .case-tab-button (Vorgänge/Workspace) · .obj-tab-btn (Objektkarte) ·
   .abs-tab (Energie/Zählerstände) · .meter-tab (Messpunkte).
   ════════════════════════════════════════════════════════════════════════════ */

/* Tab-Leiste (Container) – helles Band, horizontal scrollbar, keine harte Linie */
.case-tabs-nav,
.workspace-tabs,
#case-detail-modal .case-tabs-nav,
.obj-detail-tabs,
.abs-tabs,
.meter-tabs {
  display: flex !important;
  align-items: center;
  gap: 6px !important;
  padding: 6px !important;
  margin-bottom: 14px;
  border: none !important;
  border-bottom: none !important;
  background: var(--gray-100) !important;
  border-radius: 12px !important;
  overflow-x: auto;
  flex-wrap: nowrap !important;
  white-space: nowrap;
  scrollbar-width: thin;
}
.case-tabs-nav::-webkit-scrollbar,
.workspace-tabs::-webkit-scrollbar,
.obj-detail-tabs::-webkit-scrollbar,
.abs-tabs::-webkit-scrollbar,
.meter-tabs::-webkit-scrollbar { height: 6px; }
.case-tabs-nav::-webkit-scrollbar-thumb,
.workspace-tabs::-webkit-scrollbar-thumb,
.obj-detail-tabs::-webkit-scrollbar-thumb,
.abs-tabs::-webkit-scrollbar-thumb,
.meter-tabs::-webkit-scrollbar-thumb { background: var(--gray-300); border-radius: var(--radius-sm); }

/* Einzelner Tab – inaktiv */
.case-tab-button,
.workspace-tabs .case-tab-button,
#case-detail-modal .case-tab-button,
.obj-tab-btn,
.abs-tab,
.meter-tab {
  appearance: none;
  /* KEIN !important auf `display`: die persoenliche Tableiste im Vorgang blendet
     Tabs ueber `[hidden]` aus. Ein `display: inline-flex !important` hat dieses
     Ausblenden bis 24.08.2026 stillschweigend ueberstimmt — „Tickets“ blieb
     nach dem Entfernen aus der Leiste weiter sichtbar. */
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 36px;
  padding: 0 14px !important;
  border: none !important;
  border-bottom: none !important;
  border-radius: 10px !important;
  background: transparent !important;
  color: var(--gray-700) !important;
  font-family: var(--font-family-body);
  font-size: var(--text-sm) !important;
  font-weight: 500 !important;
  letter-spacing: normal !important;
  text-transform: none !important;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  box-shadow: none !important;
  margin: 0 !important;
  color: var(--vi-ink-70) !important;
  transition: background .14s, color .14s, box-shadow .14s;
}
/* Ausgeblendeter Tab (persoenliche Tableiste). `[hidden]` ist der kanonische
   Zustand — JS setzt nur `el.hidden`, nie ein Inline-`style.display`. */
.case-tab-button[hidden],
.workspace-tabs .case-tab-button[hidden],
#case-detail-modal .case-tab-button[hidden] { display: none !important; }

.case-tab-button:hover,
.workspace-tabs .case-tab-button:hover,
#case-detail-modal .case-tab-button:hover,
.obj-tab-btn:hover,
.abs-tab:hover,
.meter-tab:hover {
  background: var(--vi-sand) !important;
  color: var(--vi-ink) !important;
}

/* Aktiver Tab – Grün NUR als Akzent (softe Fläche + grüner Text), nicht vollflächig grün (CI) */
.case-tab-button.active,
.workspace-tabs .case-tab-button.active,
#case-detail-modal .case-tab-button.active,
.obj-tab-btn.active,
.abs-tab.active,
.meter-tab.meter-tab-active {
  background: var(--vi-green-soft) !important;
  color: var(--vi-green-deep) !important;
  font-weight: 600 !important;
  box-shadow: none !important;
  border: none !important;
  border-bottom: none !important;
}

/* Tastaturfokus klar sichtbar (Fokus-Ring stets green-soft, CI) */
.case-tab-button:focus-visible,
.obj-tab-btn:focus-visible,
.abs-tab:focus-visible,
.meter-tab:focus-visible {
  outline: 2px solid var(--vi-green);
  outline-offset: 2px;
}

/* Zähler-Badge im Tab (einheitlich) */
.case-tab-count {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 6px !important;
  border-radius: 9px !important;
  background: var(--vi-sand) !important;
  color: var(--vi-muted) !important;
  font-size: var(--text-xxs) !important;
  font-weight: 600 !important;
  font-family: var(--vi-font-mono) !important;
  line-height: 1;
}
.case-tab-button.active .case-tab-count,
.workspace-tabs .case-tab-button.active .case-tab-count {
  background: rgba(19, 109, 57, .14) !important;
  color: var(--vi-green-deep) !important;
}

@media (max-width: 640px) {
  .case-tab-button, .obj-tab-btn, .abs-tab, .meter-tab { padding: 0 11px !important; font-size: var(--text-sm) !important; }
}

/* ════════════════════════════════════════════════════════════════════════════
   VICore · CI-KOMPONENTEN-UTILITIES
   Datenwerte (Inter, tabular-nums), Status-Pillen, Energieeffizienz-Skala A+→H.
   ──────────────────────────────────────────────────────────────────────────── */

/* Technische Datenwerte: IDs, Zählernummern, kWh-Werte, MaLo-IDs, Vertragsnummern */
.vi-data, .vi-mono, .data-value, .mono,
.zaehlernummer, .malo-id, .kwh-value, .vertragsnummer {
  font-family: var(--vi-font-mono);
  font-feature-settings: "tnum" 1;
  letter-spacing: -.01em;
}

/* Status-Pillen (CI: gepunktet, weiche Fläche, nicht vollflächig saturiert) */
.vi-pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 3px 10px; border-radius: var(--vi-r-pill);
  font-family: var(--vi-font-ui); font-size: var(--text-xs); font-weight: 600; line-height: 1;
}
.vi-pill::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.vi-pill-neutral { background: var(--vi-sand);         color: var(--vi-ink-70); }

/* ===== CI: einheitlicher Icon-Linienstil =====
   Die CI fordert Icons im Linienstil mit runden Enden/Ecken.
   Wir erzwingen global runde caps/joins per CSS (kosmetisch, viewBox-neutral)
   statt jede Inline-SVG umzuschreiben. Stroke-Breite bleibt pro Icon erhalten,
   da 16er- und 24er-ViewBoxes unterschiedlich skalieren. */
svg.nav-icon,
svg.icon,
.btn svg,
button svg,
.case-tab-button svg,
.obj-tab-btn svg,
.kpi-icon svg,
.vi-pill svg {
  stroke-linecap: round;
  stroke-linejoin: round;
}
.doc-bulk-count { font-size: var(--text-sm); font-weight: 700; color: var(--vi-green-deep, #0F5C42); }
.doc-bulk-spacer { flex: 1 1 auto; }
.doc-bulk-hard { border: 1px solid var(--vi-error, #C0392C); background: var(--color-surface); color: var(--vi-error, #C0392C);
  border-radius: var(--radius-sm); padding: 5px 12px; cursor: pointer; font-weight: 600; }
.doc-bulk-hard:hover { background: var(--vi-error, #C0392C); color: var(--color-surface); }
/* Tabelle füllt immer 100 % des Containers – keine feste px-Breite via JS.
   min-width verhindert kaputte Ansicht auf sehr schmalen Fenstern. */
.doc-table { width: 100%; min-width: 620px; border-collapse: collapse; font-size: var(--text-sm); table-layout: fixed; }
/* Dezente vertikale Trennlinien zwischen Spalten */
.doc-table thead th:not(:last-child),
.doc-table tbody td:not(:last-child) {
  border-right: 1px solid rgba(230, 225, 213, 0.6);
}

/* Resize-Handles zwischen Spaltenköpfen */
/* Resize-Griff: einheitliche Optik (dünne grüne Linie bei Hover) wie in der Vorgangsliste */
.doc-col-resize-handle {
  position: absolute; right: -5px; top: 0; bottom: 0; width: 11px;
  cursor: col-resize; z-index: 12; user-select: none; background: transparent;
  touch-action: none;   /* Pointer-Events: kein Scroll-/Touch-Hijack während des Ziehens */
}
/* Persistenter, dezenter Greif-Hinweis (signalisiert „verstellbar"); kräftig bei Hover/Ziehen. */
.doc-col-resize-handle::after {
  content: ''; position: absolute; top: 22%; bottom: 22%; left: 4px; width: 2px;
  background: var(--vi-border, #E0DACB); border-radius: 2px; transition: background .12s, transform .12s;
}
.doc-col-resize-handle:hover::after,
.doc-col-resize-handle:active::after,
body.vi-cr-dragging .doc-col-resize-handle::after { background: var(--green-600); transform: scaleX(1.8); }

/* ── Einheitlicher Spaltenbreiten-Griff für ALLE Tabellen (colresize.js) ──────────
   Optik identisch zu .doc-col-resize-handle / .cases-col-resize-handle. */
/* DER GRIFF LIEGT VOLLSTÄNDIG IN SEINER KOPFZELLE (korrigiert 10.09.2026).
   Vorher ragte er mit `right: -4px` zur Hälfte in die Nachbarspalte — und genau diese
   Hälfte schnitt `.vi-tbl-th { overflow: hidden }` (vi-table.css, dort für die Ellipse
   nötig) weg. Übrig blieben 4 px Greiffläche; ihr optischer Mittelpunkt lag bereits
   AUSSERHALB des klickbaren Bereichs, sodass ein Zug an der Spaltengrenze oft gar nicht
   begann (gemessen: `elementFromPoint` traf die Nachbar-Kopfzelle). Jetzt liegen die
   9 px Greiffläche innen, die Marke sitzt bündig auf der Spaltenkante.
   `touch-action: none` verhindert, dass ein Zug auf dem Tablet als Scrollgeste endet. */
.vi-cr-h {
  position: absolute; right: 0; top: 0; bottom: 0; width: 9px;
  cursor: col-resize; z-index: 10; user-select: none; background: transparent;
  touch-action: none;
}
.vi-cr-h::after {
  content: ''; position: absolute; top: 20%; bottom: 20%; right: 1px; width: 2px;
  background: transparent; border-radius: 2px; transition: background .12s;
}
/* Überfahren = leiser Greif-Hinweis in Linienfarbe (dieselbe Andeutung wie
   `.doc-col-resize-handle`), NICHT die Markenfarbe. Die kräftige Marke gehört
   ausschließlich dem tatsächlichen Ziehen. */
.vi-cr-h:hover::after { background: var(--gray-300, #D8DFDC); }
/* WÄHREND DES ZIEHENS — und nur dann (10.09.2026).
   `:active` steht hier bewusst NICHT mehr: der mousedown-Handler ruft `preventDefault()`,
   damit vergibt Chromium den Zustand gar nicht erst; die Marke war ausgerechnet beim
   Ziehen unsichtbar und blieb dafür am zuletzt überfahrenen Griff hängen. Die Klasse
   setzt colresize.js beim Beginn und nimmt sie in JEDEM Ausgang wieder weg (Loslassen,
   Escape, pointercancel, Fokusverlust). */
.vi-cr-h.is-drag::after { background: var(--brand-primary, var(--green-600)); }
/* Während des Ziehens: globaler col-resize-Cursor + keine Textauswahl. */
body.vi-cr-dragging, body.vi-cr-dragging * { cursor: col-resize !important; user-select: none !important; }
/* Kein zweiter, konkurrierender Hinweis: solange gezogen wird, zeigt NUR der aktive Griff
   seine Marke — der Zeiger steht dann längst über einer anderen Zelle. */
body.vi-cr-dragging .vi-cr-h:not(.is-drag)::after { background: transparent; }
/* (Kein globales position:relative auf th — colresize.js setzt es nur, wenn die Zelle sonst
   `static` wäre; so bleiben sticky-Header z. B. der Ablesungs-Tabelle unangetastet.) */
.doc-table thead th { position: relative; } /* Positionskontext für den Handle */
/* Tabellenstandard: an kanonischen .data-table-Kopf angeglichen (dunkel, font-size-sm, 600, .02em, uppercase, --creme) */
.doc-table thead th {
  text-align: left; font-family: var(--vi-font-ui); font-size: var(--font-size-sm); font-weight: 600;
  letter-spacing: .02em; text-transform: uppercase; color: var(--text-primary, #141A17);
  background: var(--creme, #FAFBFA); padding: 11px 14px;
  border-bottom: 1px solid var(--border, #D8DFDC); white-space: nowrap;
}
.doc-table tbody td {
  padding: 12px 14px; border-bottom: 1px solid var(--vi-border, #D8DFDC);
  color: var(--vi-ink, #141A17); vertical-align: middle;
}
.doc-table tbody tr:last-child td { border-bottom: none; }
.doc-table tbody tr:hover { background: var(--vi-green-tint, #EDF7F2); }

/* ── Dokument-Unterordner (eine Ebene): Gruppenkopfzeilen in der Dokumenttabelle ── */
.doc-folder-row > td { background: var(--vi-sand, #EFF2F1); padding: 7px 12px !important; }
.doc-folder-row { cursor: pointer; }
.doc-folder-row-main > td { background: var(--vi-green-tint, #EDF7F2); cursor: default; }
.doc-folder-row:hover > td { filter: brightness(0.985); }
.doc-folder-head { display: flex; align-items: center; gap: 8px; }
.doc-folder-chevbox { width: 14px; display: inline-flex; justify-content: center; color: var(--vi-ink-70, #3A4441); }
.doc-folder-chev { transition: transform .15s ease; }
.doc-folder-chev.is-open { transform: rotate(90deg); }
.doc-folder-ico { color: var(--vi-ink-70, #3A4441); display: inline-flex; }
.doc-folder-name { font-weight: 700; font-size: var(--text-sm); color: var(--vi-ink, #141A17); }
.doc-folder-count {
  flex: 0 0 auto; min-width: 20px; height: 18px; padding: 0 7px; border-radius: var(--radius-md);
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--vi-card, #fff); border: 1px solid var(--vi-border, #D8DFDC);
  color: var(--vi-ink-70, #3A4441); font-size: var(--text-xxs); font-weight: 600;
}
.doc-folder-actions { margin-left: auto; display: inline-flex; gap: 2px; opacity: 0; transition: opacity .12s ease; }
.doc-folder-row:hover .doc-folder-actions,
.doc-folder-row:focus-within .doc-folder-actions { opacity: 1; }
.doc-folder-act {
  border: none; background: transparent; cursor: pointer; border-radius: var(--radius-sm);
  width: 26px; height: 24px; font-size: var(--text-sm); line-height: 1; color: var(--vi-ink-70, #3A4441);
}
.doc-folder-act:hover { background: var(--vi-card, #fff); }
.doc-folder-act:focus-visible { outline: 2px solid var(--vi-green, #0F5C42); outline-offset: 1px; background: var(--vi-card, #fff); }
.doc-folder-act-danger:hover { color: #DC2626; }
.doc-folder-emptytext { padding: 8px 12px 8px 34px; color: var(--vi-muted, #5F6B66); font-size: var(--text-xs); font-style: italic; }
.doc-folder-empty > td { background: transparent; }
.doc-row.doc-row-dragging { opacity: .45; }
.doc-folder-row.doc-folder-dragover > td {
  outline: 2px dashed var(--vi-green, #1F8B4C); outline-offset: -3px;
  background: var(--vi-green-tint, #EDF7F2) !important;
}
.doc-folder-row.doc-folder-dragover .doc-folder-name { color: var(--vi-green-deep, #0F5C42); }
.oc-role { display: inline-block; font-size: var(--text-xs); font-weight: 600; color: var(--vi-ink-70, #3A4441); background: var(--vi-sand, #EFF2F1); border-radius: var(--radius-sm); padding: 1px 8px; }
.oc-sub { font-size: var(--text-xxs); color: var(--vi-muted, #5F6B66); }
.oc-edit-head { padding: 10px 12px; background: var(--vi-sand, #EFF2F1); border-radius: var(--radius-md); }
.oc-edit-name { font-size: var(--text-md); font-weight: 600; color: var(--vi-ink, #141A17); }
/* Zuordnungs-Dialog */
.oc-modetabs { display: flex; gap: 6px; margin-bottom: 14px; }
.oc-modetab { flex: 1; padding: 8px 10px; border: 1px solid var(--vi-border, #D8DFDC); border-radius: var(--radius-md); background: var(--color-surface); cursor: pointer; font-size: var(--text-sm); font-weight: 600; color: var(--vi-ink-70, #3A4441); }
.oc-modetab.active { background: var(--vi-green-tint, #EDF7F2); border-color: #B9D6C4; color: var(--vi-green-deep, #0F5C42); }
.oc-results { max-height: 220px; overflow: auto; border: 1px solid var(--vi-border, #D8DFDC); border-radius: var(--radius-md); margin-top: 4px; }
.oc-result { display: flex; flex-direction: column; gap: 1px; width: 100%; text-align: left; border: none; border-bottom: 1px solid var(--vi-sand, #EFF2F1); background: transparent; padding: 8px 10px; cursor: pointer; }
.oc-result:last-child { border-bottom: none; }
.oc-result:hover { background: var(--vi-green-tint, #EDF7F2); }
.oc-result.is-selected { background: var(--vi-green-soft, #E3F0E8); }
.oc-result-name { font-size: var(--text-sm); font-weight: 600; color: var(--vi-ink, #141A17); }

.doc-name-cell { display: flex; align-items: center; gap: 9px; min-width: 0; }
.doc-ext-badge {
  flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
  min-width: 36px; height: 22px; padding: 0 6px; border-radius: var(--radius-sm);
  background: var(--vi-sand, #EFF2F1); color: var(--vi-ink-70, #3A4441);
  font-family: var(--vi-font-mono); font-size: 10px; font-weight: 700; letter-spacing: .02em;
}
.doc-name-line {
  font-weight: 600; color: var(--vi-ink, #141A17); line-height: 1.35;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0;
}
.doc-type-pill { font-size: var(--text-xxs); max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.doc-source-tag {
  display: inline-flex; align-items: center; font-size: var(--text-xs); color: var(--vi-ink-70, #3A4441);
  white-space: nowrap;
}
.doc-source-email_extract { color: var(--vi-info, #31708F); }
.doc-source-upload { color: var(--vi-ink-70, #3A4441); }
.doc-col-date .vi-mono { font-size: var(--text-xs); color: var(--vi-ink-70, #3A4441); }
.doc-table th.doc-col-actions { text-align: right; }

/* Klickbare Zeile (Dokument direkt öffnen) + Auswahl-Markierung */
.doc-row-clickable { cursor: pointer; }
.doc-table tbody tr:hover td { background: var(--vi-green-tint, #EDF7F2); }
.doc-table tbody tr.is-selected td { background: var(--vi-green-soft, #EDF7F2); }
.doc-table tbody tr.is-selected td:first-child { box-shadow: inset 3px 0 0 var(--vi-green, #147352); }

/* gap: 6px statt 8px spart 6px bei 4 Buttons (3 Lücken); Icons 28px statt 30px
   spart 8px — zusammen braucht die Leiste 152px statt 166px.                    */
.doc-actions { display: inline-flex; gap: 6px; justify-content: flex-end; align-items: center; flex-wrap: nowrap; }
.doc-act-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px; border: 1px solid transparent; border-radius: var(--radius-sm);
  background: transparent; color: var(--vi-ink-70, #3A4441); cursor: pointer;
  transition: background .12s, color .12s, border-color .12s;
}
.doc-act-btn:hover { background: var(--vi-green-soft, #EDF7F2); color: var(--vi-green-deep, #0F5C42); border-color: transparent; }

/* Empty State */
.doc-empty { text-align: center; padding: 40px 20px; }
/* Der Leerzustand ist ein <button> — der erbt white-space:nowrap aus dem globalen Reset und lief
   dadurch über den rechten Rand. Umbruch hier explizit erzwingen (Nutzerregel „kein Textüberlauf"). */
.doc-empty, .doc-empty * { white-space: normal; overflow-wrap: anywhere; }
.doc-empty-title { font-family: var(--vi-font-display); font-size: var(--text-base); font-weight: 600; color: var(--vi-ink, #141A17); margin-bottom: 6px; }
.doc-empty-text { font-size: var(--text-sm); color: var(--vi-muted, #5F6B66); max-width: 460px; margin: 0 auto 16px; line-height: 1.5; }

/* Kommunikations-Hinweis (kompakt, statt voller Dokumentenliste) */
.comm-docs-hint {
  display: flex; align-items: center; gap: 10px; width: 100%;
  margin-top: 16px; padding: 11px 14px;
  background: var(--vi-cream, #FAFBFA); border: 1px solid var(--vi-border, #D8DFDC);
  border-radius: var(--vi-r-md, 10px); cursor: pointer; text-align: left;
  font-family: var(--vi-font-ui); transition: background .12s, border-color .12s;
}
.comm-docs-hint:hover { background: var(--vi-green-tint, #EDF7F2); border-color: var(--vi-green-soft, #EDF7F2); }
.comm-docs-hint-icon { flex: 0 0 auto; display: inline-flex; color: var(--vi-muted, #5F6B66); }
.comm-docs-hint-text { flex: 1 1 auto; font-size: var(--text-sm); font-weight: 500; color: var(--vi-ink, #141A17); }
.comm-docs-hint-link { flex: 0 0 auto; font-size: var(--text-xs); font-weight: 600; color: var(--vi-green-deep, #0F5C42); }

/* Upload-Dropzone */
.doc-dropzone {
  border: 2px dashed var(--vi-border, #D8DFDC); border-radius: var(--vi-r-lg, 14px);
  background: var(--vi-cream, #FAFBFA); padding: 26px 18px; cursor: pointer;
  transition: border-color .12s, background .12s; text-align: center;
}
.doc-dropzone:hover, .doc-dropzone.dragover { border-color: var(--vi-green, #147352); background: var(--vi-green-tint, #EDF7F2); }
.doc-dropzone-icon { display: inline-flex; color: var(--vi-green, #147352); margin-bottom: 8px; }
.doc-dropzone-text { font-size: var(--text-md); font-weight: 600; color: var(--vi-ink, #141A17); }
.doc-dropzone-hint { font-size: var(--text-xs); color: var(--vi-muted, #5F6B66); margin-top: 4px; font-family: var(--vi-font-mono); }

/* ── Kompakte Meta-Zeile (Art · Datum · Beschreibung) unter dem Dokumentnamen ──────
   Im Tabellenmodus ausgeblendet, im Karten-Modus (schmale Listenbreite) sichtbar. */
.doc-meta-compact {
  display: none; align-items: center; flex-wrap: wrap; gap: 6px; margin-top: 5px; min-width: 0;
  font-size: var(--text-xs); color: var(--vi-ink-70, #3A4441);
}
.doc-meta-compact .doc-mc-type { font-size: var(--text-xxs); max-width: 100%; }

/* ── Responsiver Karten-Modus für die Dokumententabelle ───────────────────────────
   Schaltet anhand der tatsächlichen LIST-PANE-Breite (Container-Query), NICHT der
   Viewport-Breite — globale Sidebar + Vorgangs-Kontextspalte machen die Viewport-Breite
   irreführend (14"-Laptop @1366px → nur ~730px nutzbare Listenbreite). Unter ~900px wird
   jede Dokumentzeile zur Karte: Name (ellipsiert) · Meta (Art · Datum) · Aktionen rechts.
   Damit niemals Spaltenüberlagerung und kein horizontales Scrollen auf Laptops. */
@container doclist (max-width: 900px) {
  .doc-table { min-width: 0; display: block; font-size: var(--text-sm); }
  .doc-table > colgroup,
  .doc-table > thead { display: none; }
  .doc-table > tbody { display: block; }

  /* Ordnerkopf-, Leer- und Empty-State-Zeilen: einfache Vollbreiten-Blöcke */
  .doc-table > tbody > tr:not(.doc-row) { display: block; }
  .doc-table > tbody > tr:not(.doc-row) > td { display: block; width: auto; border-right: none; }

  /* Dokumentzeile → Karte (Name | Aktionen), Meta darunter */
  .doc-table > tbody > tr.doc-row {
    display: grid; grid-template-columns: minmax(0, 1fr) auto;
    align-items: center; column-gap: 10px;
    padding: 9px 12px 10px;
    border-bottom: 1px solid var(--vi-border, #D8DFDC);
  }
  .doc-table > tbody > tr.doc-row:hover { background: var(--vi-green-tint, #EDF7F2); }
  .doc-row .doc-meta-compact { display: flex; }

  /* Auswahl-/Markierungszustände auf Kartenebene (statt pro Zelle) */
  .doc-table > tbody > tr.doc-row.is-selected { background: var(--vi-green-soft, #EDF7F2); box-shadow: inset 3px 0 0 var(--vi-green, #147352); }
  .doc-table > tbody > tr.doc-row.is-selected td { background: transparent; box-shadow: none; }
  .doc-table > tbody > tr.doc-row.is-bulksel { background: var(--vi-green-tint, #EDF7F2); }
}

/* ── Dokumente-Tab: volle Breite nutzen (statt schmaler workspace-section) ───── */
.workspace-section.doc-workspace-section {
  max-width: min(1680px, 100%);
  width: 100%;
}

/* ── Split-View: Dokumentenliste + Inline-Vorschaupanel ─────────────────────── */
.doc-split {
  display: flex;
  gap: 18px;
  align-items: flex-start;
}
.doc-list-pane { flex: 1 1 auto; min-width: 0; container-type: inline-size; container-name: doclist; }
/* Vorschaupanel ist standardmäßig ausgeblendet → Liste nutzt die volle Breite. */
.doc-preview-pane { display: none; }
.doc-split.has-preview .doc-preview-pane {
  display: flex;
  flex-direction: column;
  flex: 0 0 clamp(380px, 38%, 560px);
  min-width: 0;
  position: sticky;
  top: 8px;
  /* Definite Höhe (nicht nur max-height): erst dadurch kann die Bühne (flex:1) den Platz füllen
     und der PDF-iframe (height:100%) auflösen — sonst bleibt die Vorschau ein schmaler Streifen. */
  height: calc(100vh - 150px);
  min-height: 460px;
  background: var(--color-surface);
  border: 1px solid var(--vi-border, #D8DFDC);
  border-radius: var(--vi-r-lg, 14px);
  overflow: hidden;
  box-shadow: 0 4px 20px rgba(35, 33, 28, .06);
}
/* Split-View: Tabelle scrollt horizontal wenn Vorschau offen – kein manuelles Ausblenden.
   Die Mindestbreiten im colgroup verhindern kaputte Ansicht. */

/* Leerzustand des Panels (zur Sicherheit – Panel ist dann i. d. R. eingeklappt). */
.doc-pv-empty {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 12px; text-align: center; padding: 48px 28px; height: 100%;
}
.doc-pv-empty-icon { color: var(--vi-muted, #5F6B66); opacity: .55; }
.doc-pv-empty-icon svg { width: 34px; height: 34px; }
.doc-pv-empty-text { color: var(--vi-muted, #5F6B66); font-size: var(--text-sm); line-height: 1.5; max-width: 280px; }

/* Panel-Kopf */
.doc-pv-head {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 16px 16px 12px;
  border-bottom: 1px solid var(--vi-border, #D8DFDC);
  flex: 0 0 auto;
}
.doc-pv-titlewrap { min-width: 0; flex: 1 1 auto; }
.doc-pv-title {
  margin: 0;
  font-family: var(--vi-font-display, 'Inter'), sans-serif;
  font-size: var(--text-base); font-weight: 600; line-height: 1.3; color: var(--vi-ink, #141A17);
  word-break: break-word; overflow-wrap: anywhere;
}
.doc-pv-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; margin-top: 8px; }
.doc-pv-metaval { font-size: var(--text-xxs); color: var(--vi-ink-70, #3A4441); }
.doc-pv-close {
  flex: 0 0 auto;
  width: 30px; height: 30px; border: 1px solid transparent; border-radius: var(--radius-md);
  background: transparent; color: var(--vi-muted, #5F6B66); cursor: pointer;
  font-size: var(--text-xl); line-height: 1; display: inline-flex; align-items: center; justify-content: center;
  transition: background .12s, color .12s;
}
.doc-pv-close:hover { background: var(--vi-sand, #EFF2F1); color: var(--vi-ink, #141A17); }

/* Aktionsleiste im Panel */
.doc-pv-actions {
  display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end;
  padding: 10px 16px;
  border-bottom: 1px solid var(--vi-border, #D8DFDC);
  background: var(--vi-cream, #FAFBFA);
  flex: 0 0 auto;
}
.doc-preview-pane .btn-sm,
.doc-preview-pane .doc-pv-fallback-actions .btn-secondary,
.doc-preview-pane .doc-pv-fallback-actions .btn-primary { padding: 6px 12px !important; font-size: var(--text-sm) !important; }

/* Vorschau-Bühne */
.doc-pv-stage {
  position: relative;
  flex: 1 1 auto; min-height: 280px;
  display: flex; align-items: center; justify-content: center;
  overflow: auto; background: var(--vi-sand, #EFF2F1);
}
.doc-pv-stage-img { padding: 16px; }
.doc-pv-frame { width: 100%; height: 100%; border: 0; background: var(--color-surface); display: block; }
.doc-pv-img {
  max-width: 100%; max-height: 100%; object-fit: contain;
  border-radius: var(--vi-r-md, 10px);
  box-shadow: 0 2px 12px rgba(35, 33, 28, .12); background: var(--color-surface);
}
.doc-pv-loading { color: var(--vi-muted, #5F6B66); font-size: var(--text-sm); }
.doc-pv-fallback {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 14px; text-align: center; padding: 36px 24px; max-width: 360px;
}
.doc-pv-fallback-icon { color: var(--vi-muted, #5F6B66); opacity: .7; }
.doc-pv-fallback-icon svg { width: 38px; height: 38px; }
.doc-pv-fallback-text { color: var(--vi-ink-70, #3A4441); font-size: var(--text-md); line-height: 1.5; }
.doc-pv-fallback-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; }

/* Responsiv: Vorschau unter die Liste stapeln (kein Sticky, volle Breite) */
@media (max-width: 1080px) {
  .doc-split.has-preview { flex-direction: column; }
  .doc-split.has-preview .doc-preview-pane {
    flex-basis: auto; width: 100%; position: static; height: auto; min-height: 0; max-height: 78vh;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   DRAG & DROP – Dokumente & Kommunikation (VICore-CI)
   ═══════════════════════════════════════════════════════════════════════════ */
/* Host (Tab-Sektion) als Positionskontext für das Drag-Overlay. */
.doc-dropzone-host { position: relative; }
.doc-dragoverlay {
  position: absolute; inset: 0; z-index: 40;
  display: none; align-items: center; justify-content: center;
  padding: 18px; border-radius: var(--vi-r-lg, 14px);
  background: rgba(239, 246, 241, .92); /* vi-green-tint, transluzent */
  border: 2px dashed var(--vi-green, #147352);
  pointer-events: none;
}
/* (Entfallen 10.09.2026) Die Markierung des Reiterfeldes und sein Overlay kommen
   seit der Zusammenlegung aus VIUpload (.viup-overlay / .is-viup-over) — EINE
   Umsetzung für jede Akte. Die .doc-dragoverlay-Regeln unten tragen weiterhin
   das Overlay des Reiters „Kommunikation", das seine eigene Beschriftung hat. */

/* ── RUECKMELDUNG BEIM ZIEHEN (09.09.2026) ──────────────────────────────────
   Gemeldet: „wenn ich das Dokument ueber das Feld hovere, fehlt mir eine
   optische Bestaetigung, dass ich es loslassen kann."
   Das Overlay oben sitzt IM Kasten und ist damit nur so gross wie er. Angenommen
   wird der Zug aber im ganzen Reiterfeld — auch in der leeren Zone unter dem
   Kasten. Diese Regel markiert deshalb genau das Gebiet, das wirklich annimmt:
   ruhige gruene Toenung, gestrichelter Rand, nichts blinkt. Sie liegt HINTER dem
   Inhalt und faengt keine Ereignisse (pointer-events: none) — sonst wuerde die
   Markierung selbst den Zug abfangen, den sie ankuendigt. */
.case-tab-content { position: relative; }
.doc-dragoverlay-box { text-align: center; color: var(--vi-green-deep, #0F5C42); max-width: 460px; }
.doc-dragoverlay-icon { display: inline-flex; color: var(--vi-green, #147352); }
.doc-dragoverlay-icon svg { width: 40px; height: 40px; }
.doc-dragoverlay-text { font-family: var(--vi-font-display, 'Inter'), sans-serif; font-size: var(--text-lg); font-weight: 600; margin-top: 10px; }
.doc-dragoverlay-hint { font-size: var(--text-xs); color: var(--vi-ink-70, #3A4441); margin-top: 4px; font-family: var(--vi-font-mono); }

/* VICore Primärbutton (grün, dezent-modern, kein Blau, kein UPPERCASE)
   Verwendung: .vi-btn-primary für neue Komponenten (Dokumente, Vorgänge-Tabs).
   Unterschied zu .btn-primary: kein uppercase, moderner border-radius, kompaktere Padding. */
.vi-btn-primary {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 14px; cursor: pointer; white-space: nowrap;
  background: var(--vi-green, #147352); color: var(--color-surface);
  border: 1px solid transparent; border-radius: var(--vi-r-md, 10px);
  font-family: var(--vi-font-ui, 'Inter'), sans-serif;
  font-size: var(--text-sm); font-weight: 600; line-height: 1.3;
  transition: background .12s, box-shadow .12s;
}
.vi-btn-primary:hover { background: var(--vi-green-deep, #0F5C42); }
.vi-btn-primary:active { background: var(--vi-green-deep, #0F5C42); }

/* Leerzustand als große anklickbare Dropfläche. */
.doc-empty-drop {
  display: block; width: 100%; cursor: pointer;
  border: 2px dashed var(--vi-border, #D8DFDC); border-radius: var(--vi-r-lg, 14px);
  background: var(--vi-cream, #FAFBFA); transition: background .12s, border-color .12s;
}
.doc-empty-drop:hover { background: var(--vi-green-tint, #EDF7F2); border-color: var(--vi-green-soft, #EDF7F2); }

/* Neu hinzugefügte Zeile kurz hervorheben. */
@keyframes docRowFlash {
  0%   { background: var(--vi-green-soft, #EDF7F2); }
  100% { background: transparent; }
}
.doc-table tbody tr.doc-row-new { animation: docRowFlash 3.2s ease-out; }

/* Herkunfts-Verlinkung (Dokument → Ursprungs-E-Mail). */
.doc-origin-link {
  display: inline-flex; align-items: center; gap: 5px; margin-top: 3px;
  background: none; border: 0; padding: 0; cursor: pointer; text-align: left;
  color: var(--vi-info, #31708F); font: inherit; font-size: var(--text-xxs);
}
.doc-origin-link svg { width: 13px; height: 13px; flex: 0 0 auto; }
.doc-origin-link span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 320px; }
.doc-origin-link:hover span { text-decoration: underline; }

/* ── Kommunikation: Anhänge übernehmen ───────────────────────────────────── */
.comm-atts-box {
  margin-top: 12px; padding: 10px 12px; border: 1px solid var(--vi-border, #D8DFDC);
  border-radius: var(--vi-r-md, 10px); background: var(--vi-cream, #FAFBFA);
}
.comm-atts-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.comm-atts-head > span { font-size: var(--text-xs); font-weight: 600; color: var(--vi-ink-70, #3A4441); text-transform: uppercase; letter-spacing: .03em; }
.comm-att-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 6px 0; border-top: 1px solid var(--vi-border, #D8DFDC); }
.comm-att-row:first-of-type { border-top: 0; }
.comm-att-name { display: inline-flex; align-items: center; gap: 7px; min-width: 0; font-size: var(--text-sm); color: var(--vi-ink, #141A17); }
.comm-att-name svg { flex: 0 0 auto; color: var(--vi-muted, #5F6B66); }
.comm-att-name span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.comm-att-take { flex: 0 0 auto; font-size: var(--text-xs); }
.comm-att-done-link {
  flex: 0 0 auto; background: none; border: 0; padding: 0; cursor: pointer;
  color: var(--vi-green-deep, #0F5C42); font: inherit; font-size: var(--text-xs); font-weight: 600; white-space: nowrap;
}
.comm-att-done-link:hover { text-decoration: underline; }

/* ── Dokument-Vorschau / Viewer-Modal (VICore-CI) ───────────────────────────── */
.doc-preview-content {
  width: min(960px, 94vw);
  max-width: 960px;
  max-height: 92vh;
  display: flex;
  flex-direction: column;
}
.doc-preview-header { align-items: flex-start; gap: 16px; }
.doc-preview-titlewrap { min-width: 0; flex: 1 1 auto; }
.doc-preview-title {
  margin: 0;
  font-family: var(--vi-font-display, 'Inter'), sans-serif;
  font-size: var(--text-lg); font-weight: 600; line-height: 1.3; color: var(--vi-ink, #141A17);
  word-break: break-word; overflow-wrap: anywhere;
}
.doc-preview-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; }
.doc-preview-body { padding: 0; background: var(--vi-sand, #EFF2F1); flex: 1 1 auto; min-height: 0; overflow: hidden; }
.doc-preview-stage {
  position: relative;
  height: 64vh; min-height: 320px;
  display: flex; align-items: center; justify-content: center;
  overflow: auto; background: var(--vi-sand, #EFF2F1);
}
.doc-preview-stage-img { padding: 18px; }
.doc-preview-frame { width: 100%; height: 100%; border: 0; background: var(--color-surface); display: block; }
.doc-preview-img {
  max-width: 100%; max-height: 100%; object-fit: contain;
  border-radius: var(--vi-r-md, 10px);
  box-shadow: 0 2px 12px rgba(35, 33, 28, .12); background: var(--color-surface);
}
.doc-preview-loading { color: var(--vi-muted, #5F6B66); font-size: var(--text-md); }
.doc-preview-pdf-hint {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 7px 14px; font-size: var(--text-xs); text-align: center;
  color: var(--vi-ink-70, #3A4441);
  background: rgba(250, 249, 245, .94); border-top: 1px solid var(--vi-border, #D8DFDC);
}
.doc-preview-fallback {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 14px; text-align: center; padding: 40px 28px; max-width: 460px;
}
.doc-preview-fallback-icon { color: var(--vi-muted, #5F6B66); opacity: .7; }
.doc-preview-fallback-icon svg { width: 40px; height: 40px; }
.doc-preview-fallback-text { color: var(--vi-ink-70, #3A4441); font-size: var(--text-md); line-height: 1.5; }
.doc-preview-fallback-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; }
.doc-preview-footer { gap: 10px; }
.link-btn {
  background: none; border: 0; padding: 0; cursor: pointer;
  color: var(--vi-green, #147352); font: inherit; font-weight: 600;
  text-decoration: underline; text-underline-offset: 2px;
}
.link-btn:hover { color: var(--vi-green-deep, #0F5C42); }

@media (max-width: 640px) {
  .doc-preview-stage { height: 56vh; }
  .doc-preview-footer { flex-direction: column-reverse; align-items: stretch; }
}


/* ════════════════════════════════════════════════════════════════════════════════
   GLOBALER OBJEKTKONTEXT — Leiste unter der Topbar (Namespace vi-objctx)
   ════════════════════════════════════════════════════════════════════════════════ */
/* ── Kompakter Objektkontext-Chip für Seitenheader (wiederverwendbar) ─────────
   Wird in Modulen verwendet, die die globale vi-objctx-bar ersetzen (z. B. Vorgänge).
   Verwendung: _viObjCtxChipWatch('container-id') aus app.js. ── */
.vi-ctx-chip-wrap { display: flex; align-items: flex-start; padding-top: 2px; }
.vi-ctx-chip {
  display: inline-flex; align-items: center; gap: 7px; flex-wrap: wrap;
  font-size: var(--text-xs); color: var(--muted, #6b7280);
}
.vi-ctx-chip-icon { flex-shrink: 0; opacity: .4; }
.vi-ctx-chip.is-active .vi-ctx-chip-icon { opacity: .7; color: var(--vi-info, #245C7A); }
.vi-ctx-chip-label {
  display: inline-flex; align-items: baseline; gap: 4px; min-width: 0;
  font-weight: 600; color: var(--text-secondary, #374151);
}
.vi-ctx-chip-label.vi-ctx-chip-solo { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 30ch; }
/* Vorfahren-Pfad kürzt zuerst (hohe flex-shrink-Priorität) → „…" landet in der Mitte */
.vi-ctx-chip-path { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 500; opacity: .66; flex-shrink: 999; }
.vi-ctx-chip-sep { flex: 0 0 auto; opacity: .5; }
/* Letzter (konkretester) Knoten bleibt sichtbar, kürzt erst, wenn der Pfad ganz weg ist */
.vi-ctx-chip-leaf { flex: 0 1 auto; min-width: 2.5ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; flex-shrink: 1; }
.vi-ctx-chip.is-active .vi-ctx-chip-label { color: var(--vi-info, #245C7A); }
.vi-ctx-chip.is-active .vi-ctx-chip-path { color: var(--vi-info, #245C7A); opacity: .55; }
.vi-ctx-chip-btn {
  border: 1px solid var(--border, #d1d5db); background: none;
  color: var(--text-secondary, #4b5563); font-size: var(--text-xxs); font-weight: 600;
  padding: 2px 9px; border-radius: var(--radius-pill); cursor: pointer; white-space: nowrap;
  transition: background .12s, border-color .12s;
}
.vi-ctx-chip-btn:hover { background: var(--bg-alt, #f3f4f6); border-color: #9ca3af; }
.vi-ctx-chip-reset {
  border: none; background: none; cursor: pointer;
  font-size: var(--text-base); line-height: 1; padding: 0 1px;
  color: var(--muted, #9ca3af); transition: color .12s;
}
.vi-ctx-chip-reset:hover { color: var(--color-red-700, #A23A2E); }
.vi-ctx-chip-open {
  border: 1px solid transparent; background: none; cursor: pointer;
  color: var(--muted, #9ca3af); padding: 2px 4px; border-radius: var(--radius-sm);
  display: inline-flex; align-items: center; transition: color .12s, border-color .12s;
}
.vi-ctx-chip-open:hover { color: var(--vi-info, #245C7A); border-color: var(--border, #d1d5db); }
.vi-ctx-chip-toggle {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: var(--text-xxs); cursor: pointer; white-space: nowrap;
  color: var(--muted, #6b7280);
}
/* Der separate Vorgänge-/Aktenkopf ist entfallen — die Primäraktion sitzt jetzt prominent in der
   Filterleiste (.cfx-primary-action). Grün, leicht erhöht, gleiche Höhe wie Suche/Sortierung. */
.cfx-primary-action {
  flex: 0 0 auto; align-self: flex-start; margin-left: auto;
  height: 42px; padding: 0 16px; border-radius: var(--radius-lg);
  display: inline-flex; align-items: center; gap: 7px; white-space: nowrap;
  font-weight: 600; font-size: var(--text-sm);
  box-shadow: 0 2px 8px rgba(19,109,57,0.22);
}
.cfx-primary-action svg { flex: 0 0 auto; }
.cfx-primary-action:hover { box-shadow: 0 4px 14px rgba(19,109,57,0.30); transform: translateY(-1px); }
.cfx-primary-action:active { transform: translateY(0); }
/* Filterleiste verdichten → Tabelle rückt nach oben (gilt für beide cfx-Leisten).
   Nutzerhinweis 24.07.: der Filter darf nicht 1/3 der Seite fressen — die Liste ist der Inhalt. */
.cases-filter-bar.cfx { padding: 8px 12px; gap: 6px 12px; margin-bottom: 8px; }
.cases-filter-bar.cfx .cfx-row { gap: 6px 8px; }
/* Feldhöhen von 42 auf 36 px — spart über alle Zeilen spürbar Höhe, bleibt gut treffbar */
.cases-filter-bar.cfx .cfx-search .cases-search-input,
.cases-filter-bar.cfx .cfx-sort .cases-sort-select { height: 36px; }
.cases-filter-bar.cfx .cfx-primary-action { height: 36px; }
.cases-filter-bar.cfx .cases-subtree-toggle { height: 34px; min-width: 0; }
.cfx-row-quick { row-gap: 6px; }
.cfx-status-pill { height: 30px; }
#page-vorgaenge .cases-filter-group { gap: 3px; }
#page-vorgaenge .cases-filter-label { margin-bottom: 0; }
/* Die frühere Objektfeld-Zeile (`.cases-obj-row`) samt „Unterebenen"-Toggle ist am
   17.08.2026 entfallen: der Objektkontext (inkl. Umfang) wird ausschließlich in der
   Hauptnavigation gewählt. */
/* „Unterebenen" als kompakter Chip auf Feldhöhe, direkt rechts neben dem Objektfeld.
   Feste Höhe + Mindestbreite → das Element bleibt in jedem Zustand (initial/checked/hover/focus) größenstabil;
   Transition NUR auf Farbe (nie Breite/Höhe/Padding/Layout) → keine springende Zeile. */
.cases-subtree-toggle {
  display: inline-flex; align-items: center; justify-content: flex-start; gap: 6px; flex: 0 0 auto;
  height: 36px; min-width: 118px; padding: 0 11px; margin: 0; box-sizing: border-box;
  border: 1px solid var(--vi-border); border-radius: var(--radius-md); background: var(--gray-50);
  font-size: var(--text-xs); color: var(--gray-700); cursor: pointer; white-space: nowrap; user-select: none;
  transition: border-color .15s ease, background-color .15s ease;
}
.cases-subtree-toggle:hover { border-color: var(--gray-300); }
.cases-subtree-toggle input { margin: 0; flex: 0 0 auto; cursor: pointer; }
@media (max-width: 700px) {
  /* schmal: Hinweis ohne Trennlinie unter den Titel */
  .cases-ctx-hint { border-left: none; padding-left: 0; white-space: normal; max-width: 100%; }
}

.vi-objctx-bar {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 6px 18px; background: var(--bg-panel, #fff);
  border-bottom: 1px solid var(--border, #e5e7eb);
  font-size: var(--text-xs); color: var(--muted, #6b7280);
}
.vi-objctx-bar.is-active { background: var(--vi-info-soft, #eef4fb); }
.vi-objctx-tag { font-weight: 700; text-transform: uppercase; letter-spacing: .04em; font-size: var(--text-xxs); color: var(--muted, #6b7280); }
.vi-objctx-path { font-weight: 600; color: var(--text-primary, #111827); max-width: 52ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vi-objctx-bar.is-active .vi-objctx-path { color: var(--vi-info, #245C7A); }
.vi-objctx-btn {
  border: 1px solid var(--border, #d1d5db); background: var(--white, #fff);
  color: var(--text-secondary, #374151); font-size: var(--text-xxs); font-weight: 600;
  padding: 3px 10px; border-radius: var(--radius-pill); cursor: pointer; white-space: nowrap;
}
.vi-objctx-btn:hover { background: var(--bg-panel, #f3f4f6); }
.vi-objctx-reset { color: var(--color-red-700, #A23A2E); border-color: var(--color-red-300, #e6b3ad); }
.vi-objctx-toggle { display: inline-flex; align-items: center; gap: 5px; margin-left: auto; font-size: var(--text-xxs); white-space: nowrap; cursor: pointer; }
@media (max-width: 760px) { .vi-objctx-path { max-width: 40vw; } .vi-objctx-toggle { margin-left: 0; } }

/* ════════════════════════════════════════════════════════════════════════
   PROFI-MAIL-COMPOSER (mc-*) + vereinte Vorgangs-Mailliste — kompakt, 14"-tauglich
   ════════════════════════════════════════════════════════════════════════ */
/* ── E-Mail-Composer im Outlook-Stil ──────────────────────────────────────────
   Ruhige Kopfzeilen mit Haarlinien, Empfängerfeld füllt die ganze Zeile,
   Formatierleiste als eigener Streifen, großzügiger weißer Schreibbereich. */
.mc-modal { width: min(900px, 96vw); max-height: 92vh; display: flex; flex-direction: column; }
.mc-modal .mc-body { overflow: auto; padding: 0; display: flex; flex-direction: column; gap: 0; background: var(--color-surface); }
.mc-modal .mc-warn, .mc-modal .mc-warn-soft { margin: 12px 20px 0; }
.mc-warn-soft { background: #EFF4FF; color: #1D4ED8; border: 1px solid #C7D7FE; border-radius: var(--radius-md); padding: 8px 11px; font-size: var(--text-xs); }
/* Schreibbereich: weiße Seite ohne Kasten-Optik — der Text steht direkt auf dem Blatt */
.mc-editor {
  min-height: 260px; max-height: 46vh; overflow: auto; border: none; border-radius: 0;
  padding: 16px 20px; font-size: var(--text-md); line-height: 1.6; outline: none; background: var(--color-surface);
  color: var(--vi-ink, #141A17);
}
.mc-editor:focus { box-shadow: none; }
.mc-editor .mc-quote { color: var(--muted, #667085); border-left: 2px solid var(--vi-border, #D8DFDC); padding-left: 12px; margin-top: 12px; }
.mc-footer-btns { display: flex; gap: 8px; align-items: center; }
/* „Senden" ist die klare Primäraktion (Outlook-Anmutung) */
.mc-footer-btns #mc-send-btn { min-width: 104px; font-weight: 600; }
#mc-error { margin: 0 20px 10px; }
.mc-status { font-size: var(--text-xs); color: var(--muted, #667085); }
.mc-picker { width: min(640px, 95vw); max-height: 88vh; display: flex; flex-direction: column; }
.mc-picker .modal-body { overflow: auto; }
.mc-pk-group { font-size: var(--text-xxs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--muted, #98A2B3); margin: 10px 0 4px; }
.mc-pk-list { display: flex; flex-direction: column; gap: 2px; }
.mc-pk-row { display: grid; grid-template-columns: 1.3fr 1.2fr 1.4fr auto; gap: 8px; align-items: center; width: 100%; text-align: left; border: none; background: none; border-radius: var(--radius-sm); padding: 6px 8px; cursor: pointer; font-size: var(--text-sm); }
.mc-pk-row:hover { background: #F2F7F3; }
.mc-pk-name { font-weight: 600; }
.mc-pk-sub, .mc-pk-email { color: var(--muted, #667085); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mc-pk-src { font-size: var(--text-xxs); color: var(--green-700); background: #EAF2EC; border-radius: var(--radius-lg); padding: 1px 7px; justify-self: end; }
.mc-pk-empty, .mc-pk-hint { color: var(--muted, #667085); font-size: var(--text-xs); padding: 6px; }
.mail-state { display: inline-block; font-size: var(--text-xxs); font-weight: 700; border-radius: 4px; padding: 1px 6px; margin-right: 5px; vertical-align: middle; }
.mail-state-draft { background: #F2F4F7; color: var(--gray-700); }
.mail-state-sent { background: #EAF2EC; color: var(--green-700); }
.mail-state-recv { background: #EFF4FF; color: #1D4ED8; }
.mail-state-fail { background: var(--color-danger-soft); color: var(--color-danger-ink); }
.comm-att-muted { color: var(--muted, #98A2B3); font-size: var(--text-xs); }
.mail-html-frame { width: 100%; min-height: 240px; max-height: 56vh; border: 1px solid #EAECF0; border-radius: var(--radius-md); background: var(--color-surface); margin-top: 12px; }
.email-pick { display: flex; align-items: flex-start; gap: 10px; }
.email-pick .email-pick-main { flex: 1; min-width: 0; }
/* Postfach-Detail: Zuordnungs-Status sauber unterscheidbar */
.pf-detail-assigned { border-left: 3px solid var(--green-700); padding-left: 8px; }
.pf-detail-suggested { border-left: 3px solid #B54708; padding-left: 8px; color: #92400E; }
.pf-detail-suggested .pf-suggest-case { font-weight: 600; }
.pf-detail-unassigned { color: var(--muted, #667085); }
.pf-badge-fail { background: var(--color-danger-soft); color: var(--color-danger-ink); }
/* Filter-Chips ruhiger */
.comm-chip { border: 1px solid #E0E3E7; background: var(--color-surface); color: var(--gray-700); border-radius: var(--radius-xl); padding: 4px 12px; font-size: var(--text-xs); cursor: pointer; }
.comm-chip:hover { background: #F5F7F9; }
.comm-chip.active { background: var(--green-700); color: var(--color-surface); border-color: var(--green-700); }
/* Detail: Zustellfehler-Banner + einklappbare technische Details */
.mail-fail-banner { background: #FEF3F0; border: 1px solid #F3C9BC; border-radius: var(--radius-md); padding: 10px 12px; margin: 12px 0; }
.mail-fail-title { font-weight: 700; color: #B42318; font-size: var(--text-sm); }
.mail-fail-reason { color: #7A271A; font-size: var(--text-xs); margin-top: 2px; }

/* ════════════════════════════════════════════════════════════════════════
   Kompakte Konversationsliste (cml-*) — dichte CRM-/Outlook-artige Zeilen
   ════════════════════════════════════════════════════════════════════════ */
.cml-list { display: block; }
.cml-row { display: flex; align-items: flex-start; gap: 10px; padding: 9px 12px; border-bottom: 1px solid #F0F1F4; cursor: pointer; position: relative; }
.cml-row:last-child { border-bottom: none; }
.cml-row:hover { background: #F7FAF8; }
.cml-main { flex: 1 1 auto; min-width: 0; }
.cml-snip-empty { color: var(--gray-400); font-style: italic; } .cml-snip-fail { color: #B42318; }
.cml-att { color: #667085; }
.cml-unread .cml-l2 { font-weight: 700; }
.cml-unread::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--green-700); }
.cml-row:hover .cml-hover { display: flex; }
.cml-row:hover .cml-meta { visibility: hidden; }
.cml-empty { color: #667085; font-size: var(--text-sm); padding: 20px 4px; }
/* Filterchips kompakter + Zähler */
.comm-chip { padding: 3px 10px; font-size: var(--text-xs); }
.comm-chip.active .comm-chip-n { opacity: .85; }

/* ── Feinschliff: hochwertigere Timeline + dezenter Bounce-Hinweis + Detail-Drawer ── */
.cml-row { padding: 10px 14px; border-bottom: 1px solid #F2F3F6; }
/* Detail als rechter Drawer (statt geblurtem Vollmodal) */
.mail-drawer-overlay { position: fixed; inset: 0; z-index: 1200; display: none; justify-content: flex-end; background: rgba(16,24,40,.18); }
.mail-drawer { width: min(560px, 96vw); height: 100%; background: var(--color-surface); display: flex; flex-direction: column; box-shadow: -8px 0 30px rgba(16,24,40,.18); transform: translateX(100%); transition: transform .2s ease; }
.mail-drawer-overlay.is-open .mail-drawer { transform: none; }
.mail-drawer-head { padding: 16px 20px 12px; border-bottom: 1px solid #EEF0F3; }
.mail-drawer-head-top { display: flex; align-items: flex-start; gap: 10px; }
.mail-drawer-subject { font-size: var(--text-base); font-weight: 700; color: #101828; margin: 0; line-height: 1.32; flex: 1; }
.mail-drawer-close { border: none; background: none; font-size: 24px; line-height: 1; color: var(--gray-400); cursor: pointer; padding: 0 2px; }
.mail-drawer-close:hover { color: var(--gray-700); }
.mail-drawer-meta { margin-top: 9px; font-size: var(--text-xs); color: var(--gray-700); display: flex; flex-direction: column; gap: 2px; }
.mail-drawer-meta .mdl { display: inline-block; min-width: 42px; color: var(--gray-400); }
.mail-drawer-actions { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 13px; }
.mail-dract { border: 1px solid #D7DBE0; background: var(--color-surface); border-radius: var(--radius-md); padding: 6px 13px; font-size: var(--text-xs); cursor: pointer; color: #344054; }
.mail-dract:hover { background: #F5F7F9; }
.mail-dract-primary { border-color: var(--green-700); background: var(--green-700); color: var(--color-surface); font-weight: 600; }
.mail-dract-primary:hover { background: #0C4F29; }
.mail-drawer-body { flex: 1; overflow: auto; padding: 16px 20px 28px; }
.mail-maintext { font-size: var(--text-md); line-height: 1.6; color: #101828; word-break: break-word; }
.mail-original { margin-top: 16px; border-top: 1px solid #EEF0F3; padding-top: 10px; }
.mail-original > summary { cursor: pointer; font-size: var(--text-xs); color: #667085; list-style: none; }
.mail-original > summary::-webkit-details-marker { display: none; }
.mail-original > summary:hover { color: var(--green-700); }
.mail-original > summary::before { content: '▸ '; color: var(--gray-400); }
.mail-original[open] > summary::before { content: '▾ '; }
.mail-orig-pre { white-space: pre-wrap; word-break: break-word; font: 13px/1.55 -apple-system, "Segoe UI", Roboto, sans-serif; color: #344054; margin: 10px 0 0; }
.mail-drawer-body .mail-html-frame { width: 100%; min-height: 300px; border: 1px solid #EAECF0; border-radius: var(--radius-md); background: var(--color-surface); margin-top: 10px; }
@media (max-width: 600px) { .mail-drawer { width: 100vw; } }

/* ════════════════════════════════════════════════════════════════════════
   Master-Detail im Kommunikations-Tab (Liste links · Lesepane rechts)
   ════════════════════════════════════════════════════════════════════════ */
.cm2 { display: flex; border: 1px solid #E6E8EC; border-radius: var(--radius-lg); overflow: hidden; background: var(--color-surface); min-height: 380px; }
.cm2-list { flex: 0 0 300px; width: 300px; border-right: 1px solid #EEF0F3; overflow: auto; max-height: 66vh; }
.cm2-detail { flex: 1 1 auto; min-width: 0; overflow: auto; max-height: 66vh; }
/* Auswahl-/Status-Akzente der Listenzeile (kollisionsfrei: bg+shadow rechts, rot links, Thread-Linie via ::after) */
.cml-unread::before { content: none; }
.cml-unread .cml-l2 { font-weight: 700; }
.cml-row.is-sel { background: #EAF2EC; box-shadow: inset -3px 0 0 var(--green-700); }
.cml-needsreply { display: inline-block; font-size: 10px; font-weight: 700; color: #B42318; background: #FEECEA; border-radius: 4px; padding: 1px 6px; margin-left: 6px; vertical-align: middle; }
/* Lesepane */
.cmd-empty { color: var(--gray-400); font-size: var(--text-sm); padding: 44px 20px; text-align: center; }
.cmd-head { padding: 16px 20px 12px; border-bottom: 1px solid #EEF0F3; }
.cmd-back { display: none; border: none; background: none; color: var(--green-700); font-size: var(--text-sm); cursor: pointer; padding: 0 0 8px; }
.cmd-subject { font-size: var(--text-base); font-weight: 700; color: #101828; margin: 0 0 10px; line-height: 1.32; }
.cmd-fromline { display: flex; align-items: center; gap: 10px; }
.cmd-avatar { flex: 0 0 auto; width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: var(--text-sm); color: var(--color-surface); }
.cmd-fromtext { flex: 1; min-width: 0; }
.cmd-fromname { font-weight: 600; color: #101828; font-size: var(--text-sm); }
.cmd-badge { flex: 0 0 auto; font-size: var(--text-xxs); font-weight: 700; border-radius: 4px; padding: 2px 8px; }
.cmd-metaline { font-size: var(--text-xs); color: #667085; margin-top: 8px; }
.cmd-actions { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 13px; }
.cmd-body { padding: 16px 20px 26px; }
/* Bezug einer Aufgabe im Lesebereich — Optik aus dem gemeinsamen Overlay-System
   (public/vi-dialog.css `.vi-dlg-src`), hier nur der Abstand zum Fließtext. */
.cmd-src { margin-bottom: var(--space-4, 16px); }
.cm2-detail .mail-html-frame { width: 100%; min-height: 260px; border: 1px solid #EAECF0; border-radius: var(--radius-md); background: var(--color-surface); margin-top: 10px; }
@media (max-width: 900px) {
  .cm2 { flex-direction: column; min-height: 0; }
  .cm2-list { flex: none; width: auto; border-right: none; border-bottom: 1px solid #EEF0F3; max-height: none; }
  .cm2-detail { max-height: none; display: none; }
  .cm2.cm2-detail-open .cm2-list { display: none; }
  .cm2.cm2-detail-open .cm2-detail { display: block; }
  .cmd-back { display: inline-block; }
}

/* ── Phase 3.1: visuelle Beruhigung der Liste ── */
.cml-arrowico { flex: 0 0 auto; color: var(--gray-400); display: inline-flex; align-items: center; margin-top: 2px; }

/* ── Tab-Icons (Vorgangs-Tabs + „Mehr"-Menü) ── */
.case-tab-ico { flex: 0 0 auto; }
.case-tabs-nav .case-tab-button { display: inline-flex; align-items: center; gap: 6px; }
.pd-more-left { display: inline-flex; align-items: center; gap: 10px; min-width: 0; }
.pd-more-item .case-tab-ico { opacity: .85; }
.cml-row.is-sel { background: #F2F4F7; box-shadow: inset -3px 0 0 var(--gray-400); }  /* kein roter Border-left mehr — Farbe nur über das Pill */
@media (max-width: 720px) {
  .mc-modal { width: 100vw; max-height: 96vh; border-radius: 0; }
  .mc-pk-row { grid-template-columns: 1fr auto; }
  .mc-pk-email, .mc-pk-sub { display: none; }
}

/* ── Anhang-Vorschau (Lightbox) — Posteingang & Vorgangs-Kommunikation ───────── */
.att-pv-overlay {
  position: fixed; inset: 0; z-index: 4000;
  display: none; align-items: center; justify-content: center;
  background: rgba(20, 18, 14, 0.62); padding: 28px;
}
.att-pv-box {
  display: flex; flex-direction: column;
  width: min(960px, 94vw); height: min(88vh, 1000px);
  background: var(--vi-surface, #fff); border-radius: var(--radius-lg); overflow: hidden;
  box-shadow: 0 18px 60px rgba(0, 0, 0, 0.4);
}
.att-pv-head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 10px 14px; border-bottom: 1px solid var(--vi-border, #E7E3DA);
  background: var(--vi-surface-2, #FAF8F3);
}
.att-pv-name { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.att-pv-actions { display: flex; align-items: center; gap: 10px; flex: none; }
.att-pv-open { color: var(--vi-green, #0F5C42); text-decoration: none; font-size: var(--text-sm); white-space: nowrap; }
.att-pv-open:hover { text-decoration: underline; }
.att-pv-close { border: 0; background: transparent; font-size: 24px; line-height: 1; cursor: pointer; color: var(--vi-muted, #5F6B66); padding: 0 4px; }
.att-pv-close:hover { color: var(--vi-text, #2A2722); }
.att-pv-stage { flex: 1; min-height: 0; display: flex; align-items: center; justify-content: center; background: #f3f1ec; overflow: auto; }
.att-pv-frame { width: 100%; height: 100%; border: 0; background: var(--color-surface); }
.att-pv-img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }
.att-pv-fallback { padding: 32px; text-align: center; color: var(--vi-muted, #5F6B66); }
.att-pv-fallback-actions { margin-top: 14px; }
.pf-att-preview { border: 0; background: transparent; cursor: pointer; font: inherit; color: var(--vi-green, #0F5C42); padding: 0; }
.pf-att-preview:hover { text-decoration: underline; }

/* ── „Mail einem Vorgang zuordnen": Objektbaum-Filter + intelligente Suche ───── */
.pf-casepicker-content { width: min(760px, 94vw); max-height: 88vh; display: flex; flex-direction: column; overflow: visible; }
/* overflow:visible, damit das absolut positionierte Objektbaum-Dropdown nicht abgeschnitten wird;
   gescrollt wird nur die Trefferliste (#pf-casepicker-list). */
.pf-casepicker-content .modal-body { display: flex; flex-direction: column; min-height: 0; overflow: visible; }
.pf-casepicker-filters { display: flex; gap: 8px; align-items: flex-start; margin-bottom: 8px; flex-wrap: wrap; }
.pf-casepicker-filters .vi-obj-picker-wrap { flex: 1 1 220px; min-width: 200px; }
.pf-casepicker-search { flex: 2 1 240px; min-width: 190px; }
.pf-casepicker-facets { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.pf-casepicker-facets .form-select { flex: 1 1 150px; min-width: 130px; }
.pf-casepicker-openonly { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-sm); color: var(--vi-muted, #5F6B66); margin-bottom: 8px; cursor: pointer; }
.pf-casepicker-count { font-size: var(--text-xs); color: var(--vi-muted, #5F6B66); margin-bottom: 6px; }
.pf-casepicker-content .email-list { flex: 1; min-height: 0; overflow-y: auto; }
.pf-casepicker-obj { font-size: var(--text-xs); color: var(--vi-muted, #5F6B66); margin-top: 2px; }
.pf-casepicker-more { padding: 10px; text-align: center; font-size: var(--text-xs); color: var(--vi-muted, #5F6B66); }
@media (max-width: 640px) {
  .pf-casepicker-filters { flex-direction: column; }
  .pf-casepicker-filters .vi-obj-picker-wrap, .pf-casepicker-search { flex-basis: auto; width: 100%; }
  .att-pv-overlay { padding: 0; }
  .att-pv-box { width: 100vw; height: 100vh; border-radius: 0; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   VORGANGSAKTEN / CASE FILES (cf-* / vi-cf-* / cn-cf-*) — schlanke Klammer.
   Nutzt bestehende Design-Tokens (--vi-*), keine neue Designsprache.
   ═══════════════════════════════════════════════════════════════════════════ */
/* Segmentierter Umschalter (Archiv-/Fall-Filter) */
.cf-seg { display: inline-flex; border: 1px solid var(--vi-border, #E7E3DA); border-radius: var(--radius-md); overflow: hidden; background: var(--vi-surface, #fff); }
.cf-seg-btn { border: 0; background: transparent; padding: 6px 12px; font-size: var(--text-sm); cursor: pointer; color: var(--vi-text-muted, #6b7280); white-space: nowrap; }
.cf-seg-btn + .cf-seg-btn { border-left: 1px solid var(--vi-border, #E7E3DA); }
.cf-seg-btn.is-active { background: var(--vi-green-tint, #EDF7F2); color: var(--vi-text, #23201b); font-weight: 600; }
.cf-seg-sm .cf-seg-btn { padding: 4px 10px; font-size: var(--text-xs); }
.cf-arch-badge { display: inline-block; font-size: 10px; font-weight: 700; letter-spacing: .03em; color: var(--color-surface); background: var(--gray-500); border-radius: 4px; padding: 1px 6px; }
.cf-type-chip { display: inline-block; font-size: var(--text-xs); padding: 2px 9px; border-radius: var(--radius-pill); background: var(--vi-surface-2, #f2efe9); color: var(--vi-text, #4b463d); border: 1px solid var(--vi-border, #E7E3DA); white-space: normal; overflow-wrap: anywhere; }

/* Vorgangsakten-Liste im EINHEITLICHEN Vorgangs-Tabellenlayout (.cases-table): grüner Kopf, Karten-Optik
   und Zeilen-Hover kommen automatisch von .cases-table(-header)/.cases-row. Hier nur das aktenspezifische
   7-Spalten-Raster (Aktennr · Titel · Objekt · Art · Status · Vorgänge · Zuletzt geändert) + Zellinhalte. */
#page-vorgangsakten .cases-table-header,
#page-vorgangsakten .cases-row {
  grid-template-columns: 150px minmax(0,2fr) minmax(0,1.7fr) 130px 104px 92px 120px;
  min-width: 900px;
}
#page-vorgangsakten .cf-cell-title .cases-row-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* Aktendetail */
.cf-detail { max-width: 980px; }
.cf-detail-num { font-size: var(--text-xs); font-weight: 700; color: var(--vi-text-muted, #6b7280); font-variant-numeric: tabular-nums; margin-bottom: 2px; }
.cf-detail-meta { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 6px; color: var(--vi-text-muted, #6b7280); font-size: var(--text-sm); }
.cf-detail-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.cf-card { border: 1px solid var(--vi-border, #E7E3DA); border-radius: var(--radius-lg); background: var(--vi-surface, #fff); padding: 16px; margin-bottom: 14px; }
.cf-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.cf-card-head-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cf-card-title { font-weight: 700; font-size: var(--text-base); color: var(--vi-text, #23201b); }
.cf-count-pill { display: inline-block; font-size: var(--text-xs); font-weight: 600; background: var(--vi-surface-2, #f2efe9); color: var(--vi-text-muted, #6b7280); border-radius: var(--radius-pill); padding: 1px 8px; margin-left: 4px; }
.cf-block + .cf-block { margin-top: 12px; }
.cf-block-label { font-size: var(--text-xs); font-weight: 600; color: var(--vi-text-muted, #6b7280); margin-bottom: 3px; }
.cf-block-text { font-size: var(--text-md); white-space: pre-wrap; overflow-wrap: anywhere; }
.cf-instr { background: var(--vi-green-tint, #EDF7F2); border-left: 3px solid var(--color-success-ink); padding: 8px 12px; border-radius: 4px; }
.cf-hint-muted, .cf-empty-inline { color: var(--vi-text-muted, #6b7280); font-size: var(--text-sm); }
.cf-newcase .cf-card-title { margin-bottom: 6px; }
.cf-note-archived { color: var(--gray-500); font-size: var(--text-sm); }


/* Notizchronik + Bereiche der Vorgangsakte (Feedback #4 §7, 07.09.2026).
   Zeilen mit Trennlinie statt Karte je Eintrag — dieselbe Optik wie die
   Arbeitsliste im Vorgang (docs/CASE_WORK.md): eine Chronik ist eine Liste. */
.cf-hint-note { margin-top: 6px; font-size: var(--text-xs); color: var(--vi-text-muted, #6b7280); }
.cf-area { white-space: normal; }
.cf-area-sep { margin: 0 6px; color: var(--gray-400); }
.cf-due-over { color: var(--color-danger-ink, #B3261E); font-weight: 600; }

.cf-note-new { display: flex; gap: 8px; align-items: flex-start; margin-bottom: 12px; }
.cf-note-new textarea { flex: 1 1 auto; min-width: 0; }
.cf-note-new .btn { flex: 0 0 auto; }

.cf-notes { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--vi-border, #E7E3DA); }
.cf-note { padding: 10px 0; border-bottom: 1px solid var(--vi-border, #E7E3DA); }
.cf-note-meta {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: var(--text-xs); color: var(--vi-text-muted, #6b7280);
}
.cf-note-when { font-variant-numeric: tabular-nums; }
.cf-note-who { font-weight: 600; color: var(--vi-text, #23201b); }
.cf-note-x {
  margin-left: auto; border: none; background: transparent; cursor: pointer;
  color: var(--vi-text-muted, #6b7280); font-size: var(--text-xs);
  width: 24px; height: 24px; border-radius: 50%;
}
.cf-note-x:hover { background: var(--gray-100); color: var(--vi-text, #23201b); }
.cf-note-text { margin-top: 3px; font-size: var(--text-md); white-space: pre-wrap; overflow-wrap: anywhere; }

/* Vorgänge in der Akte */
.cf-cases { display: flex; flex-direction: column; gap: 8px; }
.cf-case-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 1px solid var(--vi-border, #E7E3DA); border-radius: var(--radius-md); padding: 9px 12px; flex-wrap: wrap; }
.cf-case-row:hover { background: var(--vi-hover, #F6F8F7); }
.cf-case-main { display: flex; align-items: baseline; gap: 10px; min-width: 0; flex: 1; cursor: pointer; flex-wrap: wrap; }
.cf-case-num { font-weight: 700; font-variant-numeric: tabular-nums; color: var(--vi-text, #23201b); }
.cf-case-title { font-weight: 500; overflow-wrap: anywhere; white-space: normal; }
.cf-case-obj { color: var(--vi-text-muted, #6b7280); font-size: var(--text-xs); overflow-wrap: anywhere; }
.cf-case-side { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cf-case-owner { font-size: var(--text-xs); color: var(--vi-text-muted, #6b7280); }
.cf-case-unlink { border: 0; background: transparent; color: var(--vi-text-muted, #9a9488); cursor: pointer; font-size: var(--text-md); padding: 2px 6px; border-radius: 4px; }
.cf-case-unlink:hover { background: #FEE2E2; color: #991B1B; }

/* Vorgangsübersicht: Akten-Zuordnung */
.vi-cf-linked, .vi-cf-unlinked { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.vi-cf-link { color: var(--vi-primary, #2E7D46); text-decoration: none; overflow-wrap: anywhere; }
.vi-cf-link:hover { text-decoration: underline; }
.vi-cf-actions { display: inline-flex; gap: 6px; margin-left: auto; }

/* Direktzugriff aus dem Vorgang auf die verknüpften (Geschwister-)Vorgänge der Akte */
.vi-cf-siblings { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--vi-border, #E7E3DA); }
.vi-cf-sib-head { font-size: var(--text-xxs); font-weight: 600; color: var(--vi-text-muted, #6b7280); margin-bottom: 6px; }
.vi-cf-sib-list { display: flex; flex-direction: column; gap: 2px; }
.vi-cf-sib { display: flex; align-items: center; gap: 8px; min-width: 0; padding: 4px 6px; border-radius: var(--radius-sm); text-decoration: none; color: var(--vi-text, #23201b); cursor: pointer; }
.vi-cf-sib:hover { background: var(--vi-hover, #F6F8F7); }
.vi-cf-sib-dot { flex: none; width: 7px; height: 7px; border-radius: 50%; }
.vi-cf-sib-num { flex: none; font-weight: 700; font-variant-numeric: tabular-nums; font-size: var(--text-xs); }
.vi-cf-sib-title { min-width: 0; flex: 1; font-size: var(--text-xs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vi-cf-sib-none { font-size: var(--text-xs); color: var(--vi-text-muted, #6b7280); }
.vi-cf-allbtn { margin-top: 8px; }

/* Anlegen-Modal: Akten-Banner */
.cn-cf-banner { background: var(--vi-green-tint, #EDF7F2); border: 1px solid var(--color-success-soft); border-radius: var(--radius-md); padding: 10px 12px; margin-bottom: 12px; }
.cn-cf-banner-top { font-size: var(--text-sm); overflow-wrap: anywhere; }

/* Status-Pille (aktiv/abgeschlossen/archiviert) — Farbe kommt per --cf-st */
.cf-status-pill { display: inline-flex; align-items: center; gap: 5px; font-size: var(--text-xxs); font-weight: 600; line-height: 1.5; padding: 1px 9px; border-radius: var(--radius-pill); white-space: nowrap;
  color: var(--cf-st, #6b7280); background: color-mix(in srgb, var(--cf-st, #6b7280) 12%, transparent); border: 1px solid color-mix(in srgb, var(--cf-st, #6b7280) 30%, transparent); }
.cf-status-pill::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--cf-st, #6b7280); }
.cf-tab-body { max-width: 100%; }

/* Übersicht: Stammdaten-Raster + Status-Segment */
.cf-ov-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 14px 20px; margin-bottom: 4px; }
.cf-ov-field { min-width: 0; }
.cf-ov-label { font-size: var(--text-xs); font-weight: 600; color: var(--vi-text-muted, #6b7280); margin-bottom: 4px; }
.cf-ov-val { font-size: var(--text-md); color: var(--vi-text, #23201b); overflow-wrap: anywhere; white-space: normal; }
.cf-ov-status { grid-column: 1 / -1; }
.cf-ov-status .cf-seg { flex-wrap: wrap; }
.cf-ov-actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }

/* Kennzahlen zu den enthaltenen Vorgängen */
.cf-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; margin-top: 4px; }
.cf-kpi { border: 1px solid var(--vi-border, #E7E3DA); border-radius: var(--radius-lg); background: var(--vi-surface-2, #faf9f6); padding: 12px 14px; min-width: 0; }
.cf-kpi-n { font-size: 24px; font-weight: 700; font-variant-numeric: tabular-nums; line-height: 1.1; color: var(--vi-text, #23201b); }
.cf-kpi-l { font-size: var(--text-xs); color: var(--vi-text-muted, #6b7280); margin-top: 3px; overflow-wrap: anywhere; }
.cf-kpi-open .cf-kpi-n { color: var(--color-warning); }
.cf-kpi-prog .cf-kpi-n { color: var(--green-600); }
.cf-kpi-done .cf-kpi-n { color: var(--color-success-ink); }
.cf-kpi-over { border-color: #F3C9C4; background: #FDF2F1; }
.cf-kpi-over .cf-kpi-n { color: var(--color-danger); }

/* Vorgangsliste: feste, schlanke „VA"-Spalte (Vorgangsakte) — nur das Ordner-Icon.
   Kopf „VA" und Zelle zentriert; der volle Aktenbezug erscheint als Hover-Tooltip am Icon. */
.cases-col-va, .cases-col-va-h { min-width: 0; display: flex; align-items: center; justify-content: center; }
.cases-col-va-h { color: var(--gray-500); font-size: var(--text-xxs); font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; }
.cn-cf-tag { display: inline-block; font-size: 10px; font-weight: 700; letter-spacing: .03em; color: var(--color-surface); background: var(--color-success-ink); border-radius: 4px; padding: 1px 6px; text-transform: uppercase; }
.cn-cf-instr { font-size: var(--text-xs); color: var(--vi-text, #4b463d); margin-top: 6px; overflow-wrap: anywhere; }
.cn-cf-instr-label { font-weight: 600; }
.cf-opt { font-weight: 400; color: var(--vi-text-muted, #5F6B66); }

/* Vorgangsakte-Reiter im Vorgang (cf-tab-*) */
.case-tab-dot { display:inline-block; width:7px; height:7px; border-radius:50%; background:var(--color-success-ink); margin-left:5px; vertical-align:middle; }
.cf-tab-akte-head { display:flex; align-items:flex-start; justify-content:space-between; gap:14px; flex-wrap:wrap; }
.cf-tab-akte-meta { display:flex; flex-direction:column; gap:4px; min-width:0; }
.cf-tab-akte-title { font-weight:700; font-size: var(--text-base); overflow-wrap:anywhere; }
.cf-tab-akte .cf-block { margin-top:12px; }

/* „Vorgänge zuordnen"-Dialog: vollständige Filterleiste + Mehrfachauswahl (cf-as-*) */
.cf-as-modal { max-width: 920px; width: 92vw; }
.cf-as-filter { margin-bottom: 10px; }
.cf-as-listhead { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 6px 2px 4px; }
.cf-as-selall { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-sm); cursor: pointer; }
.cf-as-list { max-height: 44vh; overflow-y: auto; border: 1px solid var(--vi-border, #E7E3DA); border-radius: var(--radius-md); background: var(--vi-surface, #fff); }
.cf-as-row { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-bottom: 1px solid var(--vi-border, #E7E3DA); cursor: pointer; min-width: 0; }
.cf-as-row:last-child { border-bottom: 0; }
.cf-as-row:hover { background: var(--vi-hover, #F6F8F7); }
.cf-as-row.is-sel { background: var(--vi-green-tint, #EDF7F2); }
.cf-as-row input[type="checkbox"] { flex: 0 0 auto; }
.cf-as-num { font-weight: 700; font-variant-numeric: tabular-nums; flex: 0 0 auto; }
.cf-as-main { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.cf-as-title { font-weight: 500; overflow-wrap: anywhere; white-space: normal; }
.cf-as-sub { font-size: var(--text-xs); color: var(--vi-text-muted, #6b7280); overflow-wrap: anywhere; white-space: normal; }
.cf-as-inother { font-size: var(--text-xxs); background: #FEF3C7; color: #92400E; border-radius: var(--radius-pill); padding: 1px 8px; white-space: nowrap; flex: 0 0 auto; }
.cf-as-selcount { font-size: var(--text-sm); color: var(--vi-text-muted, #6b7280); margin-right: auto; font-weight: 600; }

/* ── Konzept v2: Platzhalterseiten für geplante Arbeitsbereiche ─────────────── */
.vi-planned { display: flex; justify-content: center; padding: var(--space-6) var(--space-5); }
.vi-planned-card { max-width: 640px; width: 100%; }
.vi-planned-title { margin: var(--space-4) 0 var(--space-2); }
.vi-planned-desc { color: var(--vi-ink-70, var(--vi-text-muted, #6b7280)); margin: 0 0 var(--space-3); line-height: 1.55; }
.vi-planned-hint { color: var(--vi-roof-gray, #9ca3af); margin: 0; }

/* ── Beteiligten-Optionen (Primärkontakt · Vererbung) ────────────────────────
   Vorher standen diese beiden Zeilen als Inline-Stil im Markup — und zwar in
   BEIDEN Dialogen (Anlegen und Bearbeiten) getrennt gepflegt. Eine Klasse, eine
   Definition; die Erklärung steckt im zentralen Tooltip (data-vi-tip), nicht in
   einer erklärenden Beschreibungszeile unter der Überschrift. */
.oc-opt {
  display: flex; gap: var(--space-2, 8px); align-items: center;
  font-size: var(--text-md, 14px); cursor: pointer;
}

/* Bei typischen Rollen (Eigentümer, Objektbetreuer, Verwalter) wird die Vererbung
   aktiv vorgeschlagen. Ruhige Markenfläche statt Warnfarbe: es ist ein Vorschlag,
   kein Fehler. */
.oc-opt.is-suggested {
  background: var(--green-50, #EDF7F2);
  border-radius: var(--radius-sm, 6px);
  padding: var(--space-1, 4px) var(--space-2, 8px);
  margin: calc(var(--space-1, 4px) * -1) calc(var(--space-2, 8px) * -1);
}


/* ══ Feedback #3 §5.3 — Strukturebene ändern ═══════════════════════════════
   Ein Typwechsel ist eine Strukturänderung: erst zeigen, was möglich ist und was
   dabei passiert, dann ausführen. Deshalb Auswahlzeilen mit Folgenhinweis statt
   eines nackten Dropdowns — und die gesperrten Ebenen bleiben nachlesbar, statt
   kommentarlos zu fehlen. */
.obj-typewrap { display: flex; flex-direction: column; gap: var(--space-3); }
.obj-typecur { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
.obj-typeopts { display: flex; flex-direction: column; gap: var(--space-1); }
.obj-typeopt {
  display: grid; grid-template-columns: auto 1fr; align-items: baseline; gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--gray-300); border-radius: var(--radius-md); cursor: pointer;
}
.obj-typeopt:hover { border-color: var(--brand-primary); background: var(--green-50); }
.obj-typeopt:has(input:checked) { border-color: var(--brand-primary); background: var(--green-50); }
.obj-typeopt-l { font-weight: 600; color: var(--gray-900); }
.obj-typeopt-h { grid-column: 2; font-size: var(--text-xs); color: var(--gray-500); }
.obj-typeblocked > summary { cursor: pointer; font-size: var(--text-sm); color: var(--gray-500); }
.obj-typeblocked-i { display: flex; flex-direction: column; padding: var(--space-1) 0; font-size: var(--text-xs); color: var(--gray-500); }


/* ══ Feedback #3 §5.3 — Archiv ist sichtbar, aber nicht operativ ════════════
   Archivierte Zeilen erscheinen NUR mit eingeschaltetem Archiv. Sie treten
   optisch zurück (sie sind kein Arbeitsvorrat), sagen ihren Zustand aber im
   Klartext an und bieten den Rückweg — Archivieren ist keine Sackgasse. */
.obj-tree-row.is-archived { opacity: .72; }
.obj-tree-arch {
  flex: 0 0 auto; font-size: var(--text-xxs); font-weight: 700; letter-spacing: .02em;
  color: var(--gray-500); background: var(--gray-100); border: 1px solid var(--gray-300);
  border-radius: var(--radius-sm); padding: 1px 7px;
}
.obj-tree-unarch { flex: 0 0 auto; }
#obj-archiv-toggle.is-on { background: var(--green-50); color: var(--color-forest); border-color: var(--color-forest); }


/* ══ Feedback #3 §5.4 — virtuelle Gruppe „Objekte ohne Liegenschaft" ════════
   Reine ANZEIGE-Gruppierung: sie ordnet, sie ist kein Knoten. Deshalb bewusst
   leiser als eine echte Zeile — keine Auswahl, kein Symbol, kein Menü. */
.obj-tree-vgroup {
  --obj-indent-base: 6px;
  --obj-indent-step: 20px;
  --obj-depth: 0;
  display: flex; align-items: center; gap: var(--space-2);
  padding: var(--space-2) var(--space-3) 4px calc(var(--obj-indent-base) + var(--obj-depth) * var(--obj-indent-step) + 29px);
  font-size: var(--text-xs); font-weight: 600; color: var(--gray-500);
  cursor: default;
}
/* ── Anlagen verschieben (Modal, 28.08.2026) ─────────────────────────────────── */
.anlmv-cur { padding: 8px 12px; background: var(--gray-100, #EFF2F1); border-radius: var(--radius-md, 8px); }
.anlmv-ziel { margin-top: 4px; padding: 8px 12px; border: 1px solid var(--gray-200, #E3E8E5); border-radius: var(--radius-md, 8px); }
.anlmv-ziel-l { color: var(--gray-500, #5F6B66); }
.anlmv-pfad { font-size: var(--text-xs, 12px); margin-top: 2px; }
.anlmv-hinweis { font-size: var(--text-xs, 12px); color: var(--gray-500, #5F6B66); margin: 10px 0 0; }

/* Gestapelter Zuordnungskontext der Dokumentenliste (UX-Phase 4 §18) — dieselbe
   Information wie zuvor, nur ohne Inline-Styles in jeder Zeile. */
.dok-ctx { display: flex; flex-direction: column; gap: 1px; line-height: var(--lh-tight, 1.3); min-width: 0; }
.dok-ctx-main { font-weight: var(--fw-medium, 500); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dok-ctx-sub { font-size: var(--text-xs, 12px); color: var(--gray-500); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ── Melder einer Meldung: der Angemeldete ist die Vorgabe (07.09.2026) ──────
   Eine ruhige Zeile statt drei leerer Felder. Freitext ist die Ausnahme und
   steckt hinter „Jemand anderes hat gemeldet". */
.tk-melder { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap; }
.tk-melder-n { font-size: var(--text-md); color: var(--gray-900); }
.tk-melder-h { color: var(--gray-500); font-size: var(--text-xs); }
.tk-melder-free { margin-top: var(--space-2); }
.tk-melder-free > summary { cursor: pointer; font-size: var(--text-xs); color: var(--gray-600); }
.tkm-melder { padding: var(--space-2) 0 var(--space-3); font-size: var(--text-md); color: var(--gray-900); }
