/* G&P Drive — interner Bereich */
:root{
  /* Flächen */
  --ink:#0B0D10;          /* Seitengrund */
  --ink-2:#12151A;        /* Karten und Tabellen */
  --ink-3:#171B21;        /* leicht erhöht */

  /* Linien */
  --line:rgba(var(--tint),.06);
  --line-soft:rgba(var(--tint),.05);

  /* Text, vier Stufen */
  --bone:#E9ECEF;         /* Haupttext */
  --txt-2:#C9CED4;        /* Zellinhalte */
  --mute:#99A1AB;         /* Nebenangaben */
  --mute-2:#6A727C;       /* Spaltenköpfe, Datumsangaben */

  /* Gold ist der einzige Akzent: Primäraktion und aktiver Zustand */
  /* Akzentfarbe. Die Variablennamen heißen aus historischen Gründen
     weiter „gold" — sie werden an über vierhundert Stellen verwendet.
     Der Wert bestimmt die Farbe, nicht der Name. */
  /* Zwei Töne für zwei Aufgaben: Die Fläche muss weißen Text tragen,
     also etwas tiefer. Als Schrift auf dunklem Grund darf sie heller
     sein — ein Ton für beides funktioniert bei Blau nicht. */
  --gold:#2C6FD8;        /* Flächen von Knöpfen und Marken */
  --gold-2:#7BAAF9;      /* hellere Kante der Verläufe */
  --gold-ink:#7BAAF9;    /* Akzent als Schriftfarbe */

  /* Ampel: Rot heißt jetzt handeln, Bernstein bald fällig, sonst neutral */
  --bad:#E26D64;
  --bad-txt:#E8887F;
  --warn:#E0A63F;
  --ok:#55B87C;
  --neutral:#3E4650;      /* unauffälliger Punkt für „alles in Ordnung" */
  --blue:#7BA7D9;         /* Nachtschicht */

  /* Abstände */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:20px; --s6:28px; --s7:40px;
  /* Schrift */
  --t-xs:11px; --t-sm:12px; --t-md:13px; --t-base:13.5px; --t-lg:14px; --t-xl:21px;
  /* Rundungen */
  --r-sm:6px; --r-md:8px; --r-lg:12px;

  /* Grundton für Auf- und Abhellungen. Auf dunklem Grund hellt Weiß auf;
     im hellen Thema wird daraus ein Dunkelton, der abdunkelt. Dadurch
     wirken Hover, Trennlinien und Karten in beiden Fassungen richtig,
     ohne dass jede Regel doppelt geschrieben werden muss. */
  --tint: 255,255,255;
  --gold-rgb: 76,141,246;

  /* Diagrammfarben: mehrere Reihen brauchen unterscheidbare Töne, die
     auch nebeneinander nicht verschwimmen. Gold bleibt die Hausfarbe
     und führt die erste Reihe; die übrigen sind kühler, damit klar
     bleibt, welche Kurve die wichtige ist. */
  --c1: #4C8DF6;   /* Blau — Hauptreihe */
  --c2: #35B8B0;   /* Türkis */
  --c3: #8AB4F8;   /* helleres Blau */
  --c4: #C86FA8;   /* Rosé */
  --c5: #6FBF73;   /* Grün */
  --c6: #E0864A;   /* Orange */
  --on-gold:#FFFFFF;      /* Text auf farbiger Fläche */
  --aside-bg:#0a1215;     /* Seitenleiste, eine Spur tiefer als der Grund */
  --warn-txt:#E0C48A;     /* Text in Hinweiskästen */

  /* Schatten und Verläufe */
  --shadow-1: 0 20px 50px -30px #000;
  --shadow-2: 0 40px 90px -50px #000;
  --glow: rgba(var(--gold-rgb),.10);

  color-scheme: dark;
}

/* =========================================================================
   Helles Thema

   Umgeschaltet wird über data-theme="light" am <html>-Element. Nur die
   Variablen werden neu gesetzt — kein einziges Bauteil muss doppelt
   gepflegt werden. Die Ampelfarben bleiben, sie tragen Bedeutung.
   ========================================================================= */
html[data-theme="light"]{
  /* Flächen: nicht reinweiß, das blendet auf Bildschirmen */
  --ink:#F4F5F7;
  --ink-2:#FFFFFF;
  --ink-3:#FAFBFC;

  --line:rgba(15,23,30,.12);
  --line-soft:rgba(15,23,30,.08);

  /* Text: dieselben vier Stufen, nur umgekehrt */
  --bone:#14181D;
  --txt-2:#2C333B;
  --mute:#5A636D;
  --mute-2:#828B95;

  /* Auf Weiß braucht der Akzent einen tieferen Ton als auf Dunkel,
     sonst verschwimmt er — besonders als Schriftfarbe. */
  --gold:#1A73E8;
  --gold-2:#4C8DF6;
  --gold-ink:#1257C4;
  --gold-rgb: 26,115,232;
  --on-gold:#FFFFFF;
  --aside-bg:#EDEFF2;
  --warn-txt:#7A5A0C;

  /* Ampel etwas kräftiger — helle Flächen schlucken Farbe */
  --bad:#C33A31;
  --bad-txt:#B3352C;
  --warn:#B37A12;
  --ok:#2E8B57;
  --neutral:#B8BFC7;
  --blue:#3B6FA8;

  --tint: 15,23,30;

  /* Im hellen Thema etwas tiefer, damit sie auf Weiß tragen */
  --c1: #1A73E8;
  --c2: #1F8C86;
  --c3: #4A85D8;
  --c4: #A44E85;
  --c5: #4A9350;
  --c6: #C2662F;

  --shadow-1: 0 12px 30px -22px rgba(15,23,30,.5);
  --shadow-2: 0 24px 60px -40px rgba(15,23,30,.45);
  --glow: rgba(var(--gold-rgb),.14);

  color-scheme: light;
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--ink);color:var(--bone);
  font-family:"Roboto",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
  font-size:var(--t-base);line-height:1.5;-webkit-font-smoothing:antialiased}
h1,h2,h3{font-family:inherit;font-weight:700;letter-spacing:-.01em;line-height:1.2}
a{color:var(--gold-ink)}
button{font-family:inherit}
/* „mono" heißt hier: Ziffern stehen bündig untereinander — nicht
   zwingend Schreibmaschinenschrift. Für Beträge, Daten und Mengen ist
   die Hausschrift ruhiger; sie hat feste Ziffernbreiten und fügt sich
   in Fließtext ein. Echte Kennungen behalten die Monospace, siehe unten. */
.mono { font-variant-numeric: tabular-nums; letter-spacing: 0; }
code, .vin, kbd,
.mono-tech { font-family:"JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;
  font-variant-numeric: tabular-nums }
.hide{display:none!important}

/* ---------- Login / Setup ---------- */
.center-page{min-height:100vh;display:grid;place-items:center;padding:24px;
  background:radial-gradient(700px 420px at 50% 8%,rgba(var(--gold-rgb),.1),transparent 65%),var(--ink)}
.gate-box{width:100%;max-width:430px;border:1px solid var(--line);border-radius:20px;padding:32px;
  background:linear-gradient(165deg,var(--ink-2),var(--ink-3));box-shadow:var(--shadow-2)}
.gate-box .mark{width:42px;height:42px;border-radius:10px;display:grid;place-items:center;
  background:linear-gradient(150deg,var(--gold-2),var(--gold));color:var(--on-gold);
  font-family:inherit;font-weight:900;font-size:14px;margin-bottom:18px}
.gate-box h1{font-size:24px}
.gate-box p{color:var(--mute);font-size:14px;margin-top:8px}
.gate-box code{background:rgba(var(--tint),.06);padding:1px 5px;border-radius:4px;font-size:13px}
.fineprint{color:var(--mute);font-size:12px;margin-top:20px;text-align:center}

.alert{border-radius:12px;padding:13px 15px;font-size:13.5px;line-height:1.55;margin-top:16px}
.alert-bad{border:1px solid rgba(224,92,92,.35);background:rgba(224,92,92,.09);color:#F0AEAD}
.alert-warn{border:1px solid rgba(224,169,59,.35);background:rgba(224,169,59,.08);color:var(--warn-txt)}
.alert-warn b{color:var(--warn)}

/* ---------- Formulare ---------- */
label.lbl{display:block;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--mute);margin:0 0 7px;font-family:ui-monospace,monospace}
input[type=text],input[type=date],input[type=time],input[type=number],input[type=password],select,textarea{
  width:100%;background:rgba(var(--tint),.03);border:1px solid var(--line-soft);border-radius:11px;
  padding:11px 13px;color:var(--bone);font-family:inherit;font-size:15px;
  transition:border-color .2s,background .2s}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--gold);background:rgba(var(--gold-rgb),.05)}
input[type=date],input[type=time]{color-scheme:dark}
input[readonly]{color:var(--gold-ink);font-weight:600}
select{appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,var(--mute) 50%),linear-gradient(135deg,var(--mute) 50%,transparent 50%);
  background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px;
  background-repeat:no-repeat;padding-right:38px}
select option{background:var(--ink-2);color:var(--bone)}
textarea{resize:vertical;min-height:110px;line-height:1.6}
input::placeholder,textarea::placeholder{color:#5c6f73}
.f{margin-bottom:15px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:13px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}
.chk{display:flex;align-items:flex-start;gap:11px;cursor:pointer;padding:11px 13px;border-radius:11px;
  border:1px solid var(--line-soft);background:rgba(var(--tint),.02);transition:border-color .2s,background .2s}
.chk:hover{border-color:var(--line)}
.chk input{width:19px;height:19px;flex:none;margin-top:1px;accent-color:var(--gold-ink);cursor:pointer}
.chk b{display:block;font-weight:600;font-size:14.5px}
.chk small{display:block;color:var(--mute);font-size:12.5px}
.chk.on{border-color:var(--gold);background:rgba(var(--gold-rgb),.08)}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-weight:600;font-size:14px;
  padding:11px 18px;border-radius:999px;cursor:pointer;border:1px solid transparent;background:transparent;
  color:var(--bone);transition:transform .15s,background .2s,border-color .2s,box-shadow .25s}
.btn:hover{transform:translateY(-1px)}
.btn:disabled{opacity:.5;cursor:wait;transform:none}
.btn svg{width:16px;height:16px;flex:none;stroke:currentColor;fill:none;stroke-width:1.8}
.btn-gold{background:linear-gradient(150deg,var(--gold-2),var(--gold));color:var(--on-gold);
  box-shadow:0 10px 26px -12px rgba(var(--gold-rgb),.6)}
.btn-ghost{background:transparent;border-color:var(--line);color:var(--bone)}
.btn-ghost:hover{border-color:var(--gold);background:rgba(var(--gold-rgb),.08)}
.btn-bad{background:transparent;border-color:rgba(224,92,92,.4);color:#E8908F}
.btn-bad:hover{background:rgba(224,92,92,.12);border-color:var(--bad)}
.btn-sm{padding:8px 14px;font-size:13px}
.btn-block{width:100%}

/* ---------- Layout ---------- */
.app{display:grid;grid-template-columns:236px 1fr;min-height:100vh}
aside{border-right:1px solid var(--line-soft);background:var(--aside-bg);padding:20px 16px;
  position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:5px;overflow:auto}
.logo{display:flex;align-items:center;gap:10px;padding:6px 8px 20px}
.logo .mark{width:30px;height:30px;border-radius:8px;flex:none;display:grid;place-items:center;
  background:linear-gradient(150deg,var(--gold-2),var(--gold));color:var(--on-gold);
  font-family:inherit;font-weight:900;font-size:11px}
.logo b{font-family:inherit;font-weight:900;font-size:14px;letter-spacing:.02em}
.logo small{display:block;color:var(--mute);font-size:10.5px;font-weight:500}
.navb{display:flex;align-items:center;gap:11px;padding:11px 13px;border-radius:11px;cursor:pointer;
  color:var(--mute);font-size:14.5px;font-weight:500;border:1px solid transparent;background:transparent;
  width:100%;text-align:left;transition:background .2s,color .2s,border-color .2s}
.navb svg{width:18px;height:18px;flex:none;stroke:currentColor;fill:none;stroke-width:1.5;
  opacity:.75;transition:opacity .2s,stroke .2s}
.navb:hover svg{opacity:1}
.navb.on svg{opacity:1;stroke:var(--gold)}
.navb:hover{color:var(--bone);background:rgba(var(--tint),.03)}
.navb.on{color:var(--bone);background:rgba(var(--gold-rgb),.1);border-color:var(--line)}
.side-foot{margin-top:auto;padding-top:16px;border-top:1px solid var(--line-soft)}
.who{padding:8px 13px 12px;font-size:12px;color:var(--mute)}
.who b{display:block;color:var(--bone);font-size:13px}
main{padding:34px 34px 80px;overflow-x:hidden}
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:28px}
.page-head h1{font-size:clamp(24px,3vw,34px)}
.page-head p{color:var(--mute);font-size:15px;margin-top:6px}
.eyebrow{font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-ink);
  font-family:ui-monospace,monospace}
.actions{display:flex;gap:10px;flex-wrap:wrap}

.panel{border:1px solid var(--line-soft);border-radius:18px;
  background:linear-gradient(180deg,var(--ink-2),var(--ink-3));padding:24px;margin-bottom:20px}
.panel h2{font-size:19px;margin-bottom:4px}
.panel .sub{color:var(--mute);font-size:13.5px;margin-bottom:18px}

/* ---------- Kennzahlen & Tabellen ---------- */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px}
.kpi{border:1px solid var(--line-soft);border-radius:14px;padding:18px;background:rgba(var(--tint),.02)}
.kpi .n{font-family:inherit;font-weight:800;font-size:30px;letter-spacing:-.02em}
.kpi .n.gold{color:var(--gold-ink)}
.kpi .l{color:var(--mute);font-size:12.5px;margin-top:2px}

.tbl{width:100%;border-collapse:collapse}
.tbl th{text-align:left;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);
  font-weight:500;padding:0 12px 12px;border-bottom:1px solid var(--line-soft);
  font-family:ui-monospace,monospace}
.tbl td{padding:14px 12px;border-bottom:1px solid var(--line-soft);font-size:14.5px;vertical-align:middle}
.tbl tr:last-child td{border-bottom:0}
.tbl tbody tr{cursor:pointer;transition:background .18s}
.tbl tbody tr:hover{background:rgba(var(--gold-rgb),.05)}
.plate{display:inline-block;font-family:ui-monospace,monospace;font-size:13px;border:1px solid var(--line);
  border-radius:6px;padding:4px 9px;background:rgba(var(--gold-rgb),.07);color:var(--gold-ink);white-space:nowrap}
.tag{display:inline-flex;align-items:center;font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  border-radius:999px;padding:4px 10px;border:1px solid;white-space:nowrap;font-family:ui-monospace,monospace}
.tag.ok{color:var(--ok);border-color:rgba(63,191,127,.35);background:rgba(63,191,127,.1)}
.tag.warn{color:var(--warn);border-color:rgba(224,169,59,.35);background:rgba(224,169,59,.1)}
.tag.bad{color:var(--bad);border-color:rgba(224,92,92,.35);background:rgba(224,92,92,.1)}
.tag.n{color:var(--mute);border-color:var(--line-soft);background:rgba(var(--tint),.03)}
.empty{text-align:center;padding:52px 20px;color:var(--mute)}
.empty svg{width:42px;height:42px;stroke:var(--line);fill:none;stroke-width:1.4;margin-bottom:14px}
.empty p{font-size:14.5px;margin-bottom:16px}

/* ---------- Modal ---------- */
.modal{position:fixed;inset:0;z-index:150;display:none;padding:24px;overflow-y:auto;
  background:rgba(5,10,12,.82);backdrop-filter:blur(4px)}
.modal.open{display:block}
.modal-box{max-width:900px;margin:0 auto;border:1px solid var(--line);border-radius:20px;
  background:linear-gradient(180deg,var(--ink-2),var(--ink-3));box-shadow:var(--shadow-2)}
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:22px 26px;
  border-bottom:1px solid var(--line-soft);position:sticky;top:0;z-index:3;
  background:var(--ink-2);border-radius:20px 20px 0 0}
.modal-head h2{font-size:21px}
.modal-body{padding:26px}
.modal-foot{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;padding:18px 26px;
  border-top:1px solid var(--line-soft)}
.x{background:transparent;border:1px solid var(--line-soft);border-radius:10px;width:34px;height:34px;
  color:var(--mute);cursor:pointer;font-size:18px;line-height:1;flex:none}
.x:hover{color:var(--bone);border-color:var(--line)}

fieldset{border:0;padding:0;margin:0 0 26px}
legend{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold-ink);
  padding-bottom:14px;width:100%;border-bottom:1px solid var(--line-soft);margin-bottom:16px;
  font-family:ui-monospace,monospace}

/* ---------- Skizze ---------- */
#sketch{display:block;width:100%;height:auto;touch-action:none;cursor:crosshair}
.hint{color:var(--mute);font-size:12.5px}

/* ---------- Dateien ---------- */
/* Ablagefeld: eine Zeile hoch, nicht ein halber Bildschirm. Die Felder
   sind Nebensache — die abgelegten Dateien sind der Inhalt. */
.drop{border:1px dashed var(--line);border-radius:9px;padding:9px 12px;cursor:pointer;
  background:rgba(var(--gold-rgb),.03);transition:background .2s,border-color .2s;
  display:flex;align-items:baseline;gap:8px;text-align:left}
.drop:hover{background:rgba(var(--gold-rgb),.08);border-color:var(--gold)}
.drop.busy{opacity:.5;cursor:wait}
.drop b{display:inline;font-size:13px}
.drop small{color:var(--mute);font-size:11.5px}

/* Kachelstreifen: kleine Vorschaubilder, Name nur beim Überfahren.
   Bei zehn Anhängen zählt jeder Millimeter. */
.files{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.files:empty{margin-top:0}
.file{position:relative;border:1px solid var(--line-soft);border-radius:7px;overflow:hidden;
  width:58px;height:58px;background:rgba(var(--tint),.03)}
.file img{width:58px;height:58px;object-fit:cover;display:block;cursor:zoom-in}
.file .doc{width:58px;height:58px;display:grid;place-items:center;color:var(--gold-ink);cursor:pointer}
.file .doc svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.5}
/* Der Dateiname liegt über dem Bild und erscheint erst beim Überfahren —
   sichtbar bleibt er trotzdem, über den Titel-Hinweis. */
.file span{position:absolute;inset:auto 0 0 0;padding:3px 4px;font-size:9px;line-height:1.2;
  color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.85));
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  opacity:0;transition:opacity .15s;pointer-events:none}
.file:hover span{opacity:1}
.file.pending span{opacity:1}
.file .del{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:5px;border:0;
  background:rgba(5,10,12,.8);color:#E8908F;cursor:pointer;font-size:13px;line-height:1}
.file .del:hover{background:var(--bad);color:#fff}
.file.pending{border-color:var(--gold);border-style:dashed}

/* ---------- Detailansicht ---------- */
.dl{display:grid;grid-template-columns:auto 1fr;gap:10px 20px;font-size:14.5px}
.dl dt{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--mute);padding-top:2px;
  font-family:ui-monospace,monospace}
.dl dd{font-weight:500}
.money{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.money div{border:1px solid var(--line-soft);border-radius:12px;padding:14px;background:rgba(var(--tint),.02)}
.money .k{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--mute);
  font-family:ui-monospace,monospace}
.money .v{font-family:inherit;font-weight:800;font-size:20px;margin-top:3px}

/* ---------- Toast ---------- */
.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,180%);z-index:300;
  background:var(--ink-3);border:1px solid var(--gold);border-radius:12px;padding:13px 20px;font-size:14px;
  box-shadow:0 20px 50px -18px #000;transition:transform .4s cubic-bezier(.16,1,.3,1);max-width:90vw}
.toast.show{transform:translate(-50%,0)}
.toast.err{border-color:var(--bad)}

.notice{border:1px solid rgba(224,169,59,.3);background:rgba(224,169,59,.07);border-radius:13px;
  padding:14px 16px;font-size:13px;color:var(--warn-txt);line-height:1.55;margin-bottom:20px}
.notice b{color:var(--warn)}

:focus-visible{outline:2px solid var(--gold-2);outline-offset:2px;border-radius:6px}

@media(max-width:900px){
  .app{grid-template-columns:1fr}
  aside{position:static;height:auto;flex-direction:row;flex-wrap:wrap;border-right:0;
    border-bottom:1px solid var(--line-soft)}
  .logo{width:100%;padding-bottom:12px}
  .navb{width:auto;flex:1;min-width:112px;justify-content:center}
  .side-foot{width:100%;border-top:0;padding-top:8px;display:flex;align-items:center;gap:10px}
  aside{height:auto;overflow:visible}
  .side-foot{position:static;margin-top:0}
  .who{padding:0 8px;flex:1}
  main{padding:24px 18px 70px}
  .kpis{grid-template-columns:1fr 1fr}
  .grid2,.grid3,.money{grid-template-columns:1fr}
  .modal{padding:0}
  .modal-box{border-radius:0;border:0;min-height:100vh}
  .modal-head{border-radius:0}
  .tbl thead{display:none}
  .modal-foot{position:sticky;bottom:0;background:var(--ink-2)}
}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ===== Wartung ===== */
.badge {
  margin-left: auto;
  min-width: 20px;
  padding: 1px 7px;
  border-radius: 999px;
  background: var(--bad, #C0392B);
  color: #fff;
  font: 600 11px/1.6 'JetBrains Mono', monospace;
  text-align: center;
}
.sep {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 22px 0 16px;
  color: var(--gold, var(--gold));
  font: 600 11px/1 'JetBrains Mono', monospace;
  letter-spacing: .12em;
  text-transform: uppercase;
}
.sep::after {
  content: '';
  flex: 1;
  height: 1px;
  background: rgba(var(--gold-rgb),.28);
}
.panel-head {
  padding: 16px 18px;
  border-bottom: 1px solid var(--line, rgba(var(--tint),.08));
}
.panel-head .sub { margin-top: 3px; }
.vd-sub {
  margin-bottom: 16px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--line, rgba(var(--tint),.08));
  color: var(--mute, var(--mute));
  font-size: 14px;
}

/* ===== Sortierbare Tabellen ===== */
.tbl-sort th.sortable {
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
  transition: color .15s;
}
.tbl-sort th.sortable:hover { color: var(--gold, var(--gold)); }
.tbl-sort th.sortable.on    { color: var(--gold, var(--gold)); }

/* ===== Ansichtswahl ===== */
.segmented {
  display: inline-flex;
  border: 1px solid var(--line, rgba(var(--tint),.12));
  border-radius: 8px;
  overflow: hidden;
}
.segmented button {
  padding: 8px 14px;
  border: 0;
  background: transparent;
  color: var(--mute, var(--mute));
  font: 500 13px/1 inherit;
  cursor: pointer;
}
.segmented button.on {
  background: rgba(var(--gold-rgb),.16);
  color: var(--gold, var(--gold));
}

/* ===== Öl-Anzeige mit Balken (deutlich größer) ===== */
.pct { display: flex; align-items: center; gap: 10px; min-width: 130px; }
.pct b {
  font-size: 15px; font-weight: 700; line-height: 1;
  font-variant-numeric: tabular-nums;
  min-width: 48px;
  text-align: right;
}
.pct-bar {
  flex: 1;
  height: 8px;
  border-radius: 999px;
  background: rgba(var(--tint),.09);
  overflow: hidden;
}
.pct-bar i { display: block; height: 100%; border-radius: 999px; }
.pct-ok       b { color: var(--ok,   #3E9C6D); }
.pct-ok       .pct-bar i { background: var(--ok,   #3E9C6D); }
.pct-warning  b { color: var(--warn, #D08A2E); }
.pct-warning  .pct-bar i { background: var(--warn, #D08A2E); }
.pct-critical b,
.pct-overdue  b { color: var(--bad,  #C0392B); }
.pct-critical .pct-bar i,
.pct-overdue  .pct-bar i { background: var(--bad, #C0392B); }
.pct-none { color: var(--mute, var(--mute)); font-size: 13px; }

/* ===== Kartenansicht ===== */
.cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 14px;
}
.card {
  padding: 16px;
  border: 1px solid var(--line, rgba(var(--tint),.09));
  border-left: 3px solid var(--line, rgba(var(--tint),.09));
  border-radius: 10px;
  background: var(--panel, var(--ink-2));
  cursor: pointer;
  transition: border-color .15s, transform .1s;
}
.card:hover { transform: translateY(-2px); }
.card.sev-overdue, .card.sev-critical { border-left-color: var(--bad,  #C0392B); }
.card.sev-warning                     { border-left-color: var(--warn, #D08A2E); }
.card.sev-ok                          { border-left-color: var(--ok,   #3E9C6D); }
.card-top   { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.card-model { color: var(--mute, var(--mute)); font-size: 14px; margin-bottom: 4px; }
.card-km    { font-size: 18px; margin-bottom: 12px; }
.card-lines { color: var(--mute, var(--mute)); font-size: 12px; line-height: 1.8; margin: 10px 0; }
.card-foot  { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin-top: 12px; }
.card-hu    { color: var(--mute, var(--mute)); font-size: 11px; white-space: nowrap; }

/* ===== Schicht ===== */
.shift {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 9px;
  border-radius: 999px;
  font: 600 12px/1.5 inherit;
  white-space: nowrap;
}
.shift-tag   { background: rgba(208, 138, 46, .16); color: #E0A754; }
.shift-nacht { background: rgba(90, 130, 190, .16); color: #7FA6D8; }
.shift-beide { background: rgba(62, 156, 109, .16); color: #55B487; }
.sdot { font-style: normal; margin-right: 4px; }
.sdot.shift-tag   { color: #E0A754; background: none; }
.sdot.shift-nacht { color: #7FA6D8; background: none; }
.sdot.shift-beide { color: #55B487; background: none; }

/* Fahrer-Chips in der Fahrzeugtabelle */
.drv-chip  { font-size: 13px; white-space: nowrap; }
.drv-chip.empty { color: var(--mute, var(--mute)); font-size: 12px; font-style: italic; }

/* Maps-Link */
a.maps {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--txt, var(--bone));
  text-decoration: none;
  border-bottom: 1px dotted var(--line, rgba(var(--tint),.25));
}
a.maps:hover { color: var(--gold, var(--gold)); border-bottom-color: var(--gold, var(--gold)); }
a.maps svg   { fill: none; stroke: currentColor; stroke-width: 1.8; flex-shrink: 0; }

.plate.sm { font-size: 11px; padding: 2px 6px; }

/* Kennzahlenleiste */
.stats {
  display: flex;
  flex-wrap: wrap;
  gap: 28px;
  padding: 16px 20px;
  margin-bottom: 18px;
  border: 1px solid var(--line, rgba(var(--tint),.08));
  border-radius: 10px;
  background: var(--panel, var(--ink-2));
}
.stats .k { color: var(--mute, var(--mute)); font-size: 11px; letter-spacing: .06em; text-transform: uppercase; }
.stats .v { font-size: 22px; font-weight: 700; line-height: 1.3; font-variant-numeric: tabular-nums; }

/* ===== Mehrfachauswahl ===== */
th.cbx, td.cbx { width: 36px; padding-right: 0; text-align: center; }
td.cbx input, th.cbx input {
  width: 16px; height: 16px;
  accent-color: var(--gold, var(--gold));
  cursor: pointer;
}
tr.picked { background: rgba(var(--gold-rgb),.07); }

.bulkbar {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 16px;
  margin-bottom: 12px;
  border: 1px solid rgba(var(--gold-rgb),.35);
  border-radius: 10px;
  background: rgba(var(--gold-rgb),.08);
  font-size: 14px;
}
.bulkbar b { color: var(--gold-ink); font-variant-numeric: tabular-nums; }
.bulkbar .spacer { flex: 1; }

/* ===== Strafen ===== */
tr.dim { opacity: .45; }
tr.dim:hover { opacity: 1; }
.upload-row { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 14px; }
.chk { display: flex; align-items: center; gap: 8px; font-size: 14px; cursor: pointer; }
.chk input { width: 16px; height: 16px; accent-color: var(--gold, var(--gold)); }

/* ===== Abwesenheits-Kalender ===== */
.calbar {
  display: flex; align-items: center; gap: 14px;
  margin-bottom: 14px;
}
.calbar b { font-size: 16px; min-width: 150px; }
.calbar .spacer { flex: 1; }
.calbar .leg { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--mute, var(--mute)); }
.leg .dot, .cal-more { width: 12px; height: 12px; border-radius: 3px; display: inline-block; }

.cal {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
  background: var(--line, rgba(var(--tint),.06));
  border-radius: 10px;
  padding: 4px;
}
.cal-wd {
  text-align: center; padding: 8px 0; font-size: 11px; font-weight: 600; font-variant-numeric: tabular-nums;
  color: var(--mute, var(--mute)); text-transform: uppercase; letter-spacing: .05em;
}
.cal-cell {
  min-height: 92px; background: var(--panel, var(--ink-2)); border-radius: 6px;
  padding: 5px; cursor: pointer; transition: background .12s; overflow: hidden;
}
.cal-cell:hover { background: rgba(var(--tint),.06); }
.cal-cell.empty { background: transparent; cursor: default; }
.cal-cell.we { background: var(--ink-3); }
.cal-cell.today { outline: 2px solid var(--gold, var(--gold)); outline-offset: -2px; }
.cal-n { font-size: 12px; font-weight: 600; color: var(--mute); font-variant-numeric: tabular-nums; }
.cal-cell.today .cal-n { color: var(--gold, var(--gold)); }
.cal-bar {
  margin-top: 3px; padding: 2px 6px; border-radius: 4px;
  font-size: 11px; font-weight: 600; color: #fff; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; cursor: pointer;
}
.cal-more { color: var(--mute, var(--mute)); font-size: 10px; margin-top: 2px; width: auto; height: auto; }
.abs-urlaub    { background: #B7902E; }
.abs-krank     { background: #B0413E; }
.abs-sonstiges { background: #3E7C9C; }

.drv-lines { display: flex; flex-direction: column; gap: 8px; }
.drv-line {
  display: flex; align-items: center; gap: 8px; padding: 8px 12px;
  background: var(--panel2, var(--ink-3)); border-radius: 8px; cursor: pointer;
}
.drv-line:hover { background: rgba(var(--tint),.06); }
.drv-line .sub { color: var(--mute, var(--mute)); font-size: 12px; }
.drv-line.empty { color: var(--mute, var(--mute)); font-size: 13px; cursor: default; font-style: italic; }

@media (max-width: 640px) {
  .cal-cell { min-height: 64px; }
  .cal-bar { font-size: 9px; padding: 1px 3px; }
  .calbar { flex-wrap: wrap; }
  .calbar .leg { display: none; }
}

.cal-ic { margin-right: 3px; font-size: 9px; opacity: .85; }

/* ===== Untermenü in der Navigation ===== */
.subnav {
  display: none;
  flex-direction: column;
  margin: 2px 0 2px 0;
}
.subnav.open { display: flex; }
.navb.sub {
  /* Bündig mit dem Text der Oberpunkte: Innenabstand 12px plus
     Symbol 18px plus Abstand 11px. */
  padding-left: 41px;
  font-size: 14px;
  opacity: .85;
}
.navb.sub svg { width: 16px; height: 16px; }
.navb.sub.on { opacity: 1; }


/* ===== Belegungs-Zeitleiste ===== */
.tl { padding: 8px 4px; }
.tl-head { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; }
.tl-label { width: 90px; flex-shrink: 0; font-size: 12px; color: var(--mute, var(--mute)); }
.tl-track { position: relative; flex: 1; height: 28px; background: var(--panel2, var(--ink-3)); border-radius: 6px; overflow: hidden; }
.tl-track.mini { height: 11px; }
.tl-track.mini + .tl-track.mini { margin-top: 2px; }
.tl-ticks { background: transparent; height: 18px; }
.tl-ticks span { position: absolute; font: 600 10px/1 'JetBrains Mono', monospace; color: var(--mute, var(--mute)); text-transform: uppercase; }
.tl-today { position: absolute; top: -4px; width: 2px; height: 300px; background: var(--gold, var(--gold)); opacity: .45; z-index: 6; pointer-events: none; }

/* Fahrzeug-Zeile (kompakt, aufklappbar) */
.tl-veh { border-bottom: 1px solid var(--line, rgba(var(--tint),.06)); }
.tl-vhead { display: flex; align-items: center; gap: 8px; padding: 8px 4px; cursor: pointer; }
.tl-vhead:hover { background: rgba(var(--tint),.02); }
.tl-caret { width: 14px; color: var(--mute, var(--mute)); font-size: 11px; }
.tl-mini { flex: 1; margin-left: 8px; }
.tl-detail { padding: 4px 4px 12px 26px; }
.tl-row { display: flex; align-items: center; gap: 12px; margin: 4px 0; }

/* Segmente nach Status */
.tl-seg {
  position: absolute; top: 2px; bottom: 2px; border-radius: 4px;
  font-size: 11px; font-weight: 600; color: #fff; line-height: 24px;
  padding: 0 7px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  cursor: pointer; box-sizing: border-box; background: #3E6A8A;
}
.tl-track.mini .tl-seg { font-size: 0; padding: 0; line-height: 0; top: 0; bottom: 0; }
.tl-seg.temp { background: #B7902E; }               /* Vertretung */
.tl-seg.absent {                                     /* Urlaub/Krankheit: schraffiert */
  background: repeating-linear-gradient(45deg, rgba(120,130,135,.5), rgba(120,130,135,.5) 5px, rgba(120,130,135,.25) 5px, rgba(120,130,135,.25) 10px);
  color: #cfd8dc; border: 1px solid rgba(120,130,135,.5);
}
.tl-seg.gap {                                        /* niemand: leer/rot */
  background: repeating-linear-gradient(45deg, rgba(176,65,62,.22), rgba(176,65,62,.22) 6px, rgba(176,65,62,.38) 6px, rgba(176,65,62,.38) 12px);
  border: 1px dashed rgba(176,65,62,.7); cursor: default;
}
.tl-tag { font-size: 9px; opacity: .8; font-weight: 700; }

/* ===== Zeitleisten-Zoom ===== */
.tl-zoom { display: flex; align-items: center; gap: 10px; flex-shrink: 0; padding-top: 2px; }
.tl-zoom input[type=range] {
  width: 160px; accent-color: var(--gold, var(--gold)); cursor: pointer;
}
@media (max-width: 640px) {
  .tl-zoom { width: 100%; margin-top: 8px; }
  .tl-zoom input[type=range] { flex: 1; width: auto; }
}

/* ===== Untere Navigationsleiste + Burger (nur Handy) ===== */
.botbar { display: none; }
.sheet { display: none; }

@media (max-width: 820px) {
  /* Seitenleiste weg, untere Leiste her */
  .app > aside { display: none; }
  main { padding-bottom: 76px; }   /* Platz für die feste Leiste */

  .botbar {
    display: flex;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
    background: var(--panel, var(--ink-2));
    border-top: 1px solid var(--line, rgba(var(--tint),.08));
    padding: 6px 4px calc(6px + env(safe-area-inset-bottom, 0px));
    box-shadow:var(--shadow-1);
  }
  .botb {
    flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px;
    background: none; border: 0; cursor: pointer; position: relative;
    color: var(--mute, var(--mute)); padding: 6px 2px; border-radius: 10px;
    font: inherit;
  }
  .botb svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
  .botb span { font-size: 10.5px; font-weight: 600; }
  .botb.on { color: var(--gold, var(--gold)); }
  .botb .badge {
    position: absolute; top: 2px; right: 50%; margin-right: -18px;
    min-width: 16px; height: 16px; padding: 0 4px; border-radius: 8px;
    background: var(--bad, #B0413E); color: #fff; font-size: 10px; font-weight: 700;
    display: flex; align-items: center; justify-content: center;
  }

  /* Aufklappmenü */
  .sheet { display: block; position: fixed; inset: 0; z-index: 50; visibility: hidden; }
  .sheet.open { visibility: visible; }
  .sheet-back {
    position: absolute; inset: 0; background: rgba(0,0,0,.5);
    opacity: 0; transition: opacity .2s;
  }
  .sheet.open .sheet-back { opacity: 1; }
  .sheet-panel {
    position: absolute; left: 0; right: 0; bottom: 0;
    background: var(--panel, var(--ink-2));
    border-top-left-radius: 18px; border-top-right-radius: 18px;
    padding: 8px 12px calc(16px + env(safe-area-inset-bottom, 0px));
    transform: translateY(100%); transition: transform .25s ease;
    max-height: 80vh; overflow-y: auto;
  }
  .sheet.open .sheet-panel { transform: translateY(0); }
  .sheet-grip { width: 40px; height: 4px; border-radius: 2px; background: var(--line, rgba(var(--tint),.2)); margin: 8px auto 14px; }
  .sheetb {
    display: flex; align-items: center; gap: 14px; width: 100%;
    background: none; border: 0; cursor: pointer; text-align: left;
    color: var(--text, var(--bone)); padding: 14px 12px; border-radius: 10px;
    font: 600 15px/1 inherit; text-decoration: none;
  }
  .sheetb:hover, .sheetb.on { background: rgba(var(--gold-rgb),.1); }
  .sheetb.on { color: var(--gold, var(--gold)); }
  .sheetb svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
}

/* ===== Drag & Drop + vorgemerkte Dateien ===== */
.drop.dragover {
  border-color: var(--gold, var(--gold));
  background: rgba(var(--gold-rgb),.12);
  box-shadow: inset 0 0 0 2px var(--gold, var(--gold));
}
.file.pending { opacity: .85; }
.file.pending .doc { background: rgba(var(--gold-rgb),.12); border: 1px dashed rgba(var(--gold-rgb),.5); }
.file.pending .pendtag {
  position: absolute; bottom: 4px; left: 4px; right: 4px;
  font-size: 9px; font-style: normal; text-align: center;
  background: var(--gold, var(--gold)); color: #1a1205; border-radius: 3px; padding: 1px 0;
}

/* ===== Unfall: Ampelpunkt, Summe ===== */
/* Statuspunkte: klein genug, dass sie in einer Zeile mit Text nicht
   dominieren. Der Hof außen herum ist auf 2px zurückgenommen — mit 3px
   und 12px Durchmesser kamen sich benachbarte Punkte ins Gehege. */
.dot-status { display: inline-block; width: 8px; height: 8px; border-radius: 50%; vertical-align: middle; }
.dot-status.ok  { background: var(--ok); box-shadow: 0 0 0 2px rgba(78,156,107,.16); }
.dot-status.bad { background: var(--bad); box-shadow: 0 0 0 2px rgba(176,65,62,.16); }
.crash-sum {
  display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
  padding: 12px 16px; border-bottom: 1px solid var(--line, rgba(var(--tint),.06));
}
.crash-sum > span:first-child { color: var(--mute, var(--mute)); font-size: 13px; }
.crash-sum b { font-size: 17px; }
.crash-sum .sub { color: var(--mute, var(--mute)); font-size: 11px; margin-right: 8px; }

/* ===== Klappmenü ===== */
.menu-wrap { position: relative; display: inline-block; }
.menu {
  display: none; position: absolute; top: 100%; left: 0; margin-top: 4px; z-index: 30;
  background: var(--panel, var(--ink-2)); border: 1px solid var(--line, rgba(var(--tint),.1));
  border-radius: 10px; padding: 5px; min-width: 200px; box-shadow: 0 8px 28px rgba(0,0,0,.4);
}
.menu.open { display: block; }
.menu button {
  display: block; width: 100%; text-align: left; background: none; border: 0; cursor: pointer;
  color: var(--text, var(--bone)); padding: 10px 12px; border-radius: 7px; font: inherit; font-size: 14px;
}
.menu button:hover { background: rgba(var(--gold-rgb),.12); }

/* ===== Schicht als einfarbige Punkte ===== */
.sdot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 6px; vertical-align: middle; }
.sdot.shift-tag   { background: var(--gold); }        /* Tag = gold */
.sdot.shift-nacht { background: #5B7BB4; }        /* Nacht = blau */
.sdot.shift-beide { background: #6B8E3D; }        /* beide = grün */
.shift { display: inline-flex; align-items: center; white-space: nowrap; }

/* ===== Adresse einzeilig ===== */
.wohnort { max-width: 260px; }
.addr-cell { display: inline-flex; align-items: center; gap: 5px; max-width: 240px; }
.addr-cell .addr-txt { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nocoord { color: var(--warn, var(--gold)); cursor: help; margin-left: 4px; }

/* ===== Freie Schicht kompakt ===== */

@keyframes freePulse {
  0%   { box-shadow: 0 0 0 0 rgba(217, 83, 79, .55); }
  70%  { box-shadow: 0 0 0 6px rgba(217, 83, 79, 0); }
  100% { box-shadow: 0 0 0 0 rgba(217, 83, 79, 0); }
}

/* ===== Entwürfe ===== */
.draft-panel { border: 1px solid rgba(var(--gold-rgb),.35); }

/* ===== Upload-Fortschrittsleiste ===== */
.drop { position: relative; }
.drop-prog {
  position: absolute; left: 0; right: 0; bottom: 0; height: 20px;
  background: rgba(0,0,0,.35); border-radius: 0 0 8px 8px; overflow: hidden;
}
.drop-prog-fill {
  position: absolute; left: 0; top: 0; bottom: 0; width: 0;
  background: var(--gold, var(--gold)); transition: width .15s ease;
}
.drop-prog-txt {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700; color: #fff; text-shadow: 0 1px 2px rgba(0,0,0,.6); font-variant-numeric: tabular-nums;
}

/* ===== Live-Suchfeld ===== */
.searchbar {
  position: relative; display: flex; align-items: center; margin-bottom: 14px;
}
.searchbar svg {
  position: absolute; left: 12px; width: 16px; height: 16px;
  fill: none; stroke: var(--mute, var(--mute)); stroke-width: 2; stroke-linecap: round;
  pointer-events: none;
}
.searchbar input {
  width: 100%; padding: 11px 38px 11px 38px;
  background: var(--panel2, var(--ink-3)); border: 1px solid var(--line, rgba(var(--tint),.1));
  border-radius: 10px; color: var(--text, var(--bone)); font: inherit; font-size: 14.5px;
}
.searchbar input:focus { outline: none; border-color: var(--gold, var(--gold)); }
.searchbar input::-webkit-search-cancel-button { display: none; }
.search-clear {
  position: absolute; right: 8px; width: 26px; height: 26px; border: 0; cursor: pointer;
  background: none; color: var(--mute, var(--mute)); font-size: 20px; line-height: 1;
  border-radius: 6px; display: flex; align-items: center; justify-content: center;
}
.search-clear:hover { background: rgba(var(--tint),.06); color: var(--text, var(--bone)); }

/* ===== Durchsuchbare Auswahl (Combobox) ===== */
.combo { position: relative; }
.combo-input {
  width: 100%; padding: 10px 12px;
  background: var(--panel2, var(--ink-3)); border: 1px solid var(--line, rgba(var(--tint),.1));
  border-radius: 8px; color: var(--text, var(--bone)); font: inherit; font-size: 14.5px;
  cursor: text;
}
.combo-input:focus { outline: none; border-color: var(--gold, var(--gold)); }
.combo-list {
  display: none; position: absolute; left: 0; right: 0; top: calc(100% + 4px); z-index: 60;
  background: var(--panel, var(--ink-2)); border: 1px solid var(--line, rgba(var(--tint),.12));
  border-radius: 10px; padding: 5px; max-height: 260px; overflow-y: auto;
  box-shadow: 0 10px 30px rgba(0,0,0,.45);
}
.combo.open .combo-list { display: block; }
.combo-opt {
  padding: 9px 11px; border-radius: 7px; cursor: pointer; font-size: 14px; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}
.combo-opt:hover, .combo-opt.active { background: rgba(var(--gold-rgb),.16); }
.combo-empty { padding: 9px 11px; color: var(--mute, var(--mute)); font-size: 13px; }

/* ===== Fahrzeug-Ausstattung ===== */
.eq-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 8px 14px; margin-bottom: 14px;
}
/* Ausstattung im Fahrzeugfenster: eine Zeile je Teil, Haken oder Kreuz */
.eq-list { display: grid; gap: 2px; }
.eq-row {
  display: flex; align-items: center; gap: 10px;
  padding: 7px 10px; border-radius: var(--r-md);
  font-size: 14px; color: var(--txt-2);
}
.eq-row:nth-child(odd) { background: rgba(var(--tint),.025); }
.eq-row.miss { color: var(--bone); }
.eq-mark { display: inline-flex; width: 16px; height: 16px; flex: none; }
.eq-mark svg { width: 100%; height: 100%; fill: none; stroke-width: 2.2;
  stroke-linecap: round; stroke-linejoin: round; stroke: var(--ok); }
.eq-row.miss .eq-mark svg { stroke: var(--bad); }
.eq-state { margin-left: auto; font-size: 12px; color: var(--mute-2); }
.eq-row.miss .eq-state { color: var(--bad-txt); font-weight: 600; }

/* Die Zahl in der Liste — deutet an, dass ein Hinweis dranhängt */
.eq-num { cursor: help; border-bottom: 1px dotted rgba(var(--tint),.25); }

/* Auswahlfeld in der Filterleiste */
.filterbar select {
  height: 30px; padding: 0 26px 0 10px;
  border: 1px solid var(--line); border-radius: 999px;
  background: transparent; color: var(--mute);
  font-size: 13px; font-family: inherit; cursor: pointer;
}
.filterbar select.on {
  border-color: var(--gold); color: var(--gold-ink);
  background: rgba(var(--gold-rgb),.10);
}

.eq-cell { display: inline-flex; align-items: center; gap: 3px; }
.eq-ic { display: inline-flex; width: 18px; height: 18px; }
.eq-ic svg { width: 100%; height: 100%; fill: none; stroke-width: 1.7; stroke-linejoin: round; }
.eq-ic.has svg  { stroke: var(--ok, #4E9C6B); opacity: .95; }
.eq-ic.miss svg { stroke: var(--mute, var(--mute)); opacity: .28; }
.eq-warn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 17px; height: 17px; margin-left: 4px; border-radius: 50%;
  background: rgba(176,65,62,.2); border: 1px solid rgba(176,65,62,.6);
  color: #E8A5A0; font: 700 11px/1 system-ui, sans-serif; cursor: help;
}

/* ===== Finanzen: Kennzahlen und Balken ===== */
.stat-s { color: var(--mute, var(--mute)); font-size: 11.5px; margin-top: 3px; }
.bars {
  display: flex; align-items: flex-end; gap: 8px; padding: 14px 14px 8px;
  height: 132px;
}
.bar-col { flex: 1; display: flex; flex-direction: column; align-items: center; height: 100%; justify-content: flex-end; }
.bar {
  width: 100%; max-width: 34px; border-radius: 4px 4px 0 0;
  background: linear-gradient(180deg, var(--gold), rgba(var(--gold-rgb),.45));
  min-height: 3px;
  /* Wachsen beim Erscheinen: Die Höhe steht im style-Attribut, hier
     wird sie von unten aufgezogen. Das zeigt beiläufig, worauf man
     schaut — Balken, die einfach da sind, übersieht man leichter. */
  transform-origin: bottom;
  animation-name: bar-auf;
  animation-duration: .5s;
  animation-timing-function: cubic-bezier(.22,.9,.3,1);
  animation-fill-mode: backwards;
}
@keyframes bar-auf { from { transform: scaleY(0); opacity: .3; } }
/* Nacheinander statt alle gleichzeitig — sonst wirkt es wie ein Zucken */
.bar-col:nth-child(1)  .bar { animation-delay: .00s }
.bar-col:nth-child(2)  .bar { animation-delay: .04s }
.bar-col:nth-child(3)  .bar { animation-delay: .08s }
.bar-col:nth-child(4)  .bar { animation-delay: .12s }
.bar-col:nth-child(5)  .bar { animation-delay: .16s }
.bar-col:nth-child(6)  .bar { animation-delay: .20s }
.bar-col:nth-child(7)  .bar { animation-delay: .24s }
.bar-col:nth-child(8)  .bar { animation-delay: .28s }
.bar-col:nth-child(9)  .bar { animation-delay: .32s }
.bar-col:nth-child(10) .bar { animation-delay: .36s }
.bar-col:nth-child(11) .bar { animation-delay: .40s }
.bar-col:nth-child(12) .bar { animation-delay: .44s }
.bar-val { font-size: 10.5px; font-weight: 600; color: var(--mute); margin-bottom: 4px; font-variant-numeric: tabular-nums; }
.bar-lbl { font-size: 10px; color: var(--mute-2); margin-top: 5px; white-space: nowrap; }

/* Auch die Balken in Tabellen ziehen sich auf */
.bar-avg .fill, .tbl .bar > i {
  transform-origin: left;
  animation-name: fill-auf;
  animation-duration: .55s;
  animation-timing-function: cubic-bezier(.22,.9,.3,1);
  animation-fill-mode: backwards;
}
@keyframes fill-auf { from { transform: scaleX(0); } }

/* ===== Aktualitätsanzeige Finanzen ===== */
.freshness {
  display: flex; flex-wrap: wrap; gap: 6px 18px; align-items: baseline;
  padding: 9px 14px; margin-bottom: 14px; border-radius: 8px;
  background: rgba(var(--tint),.03); border: 1px solid var(--line, rgba(var(--tint),.07));
  font-size: 13px;
}
.freshness.stale { border-color: rgba(var(--gold-rgb),.45); background: rgba(var(--gold-rgb),.08); }

/* ===== Zeitraumauswahl Finanzen ===== */
.range-box { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.range-box input[type="date"] {
  padding: 8px 10px; background: var(--panel2, var(--ink-3));
  border: 1px solid var(--line, rgba(var(--tint),.1)); border-radius: 8px;
  color: var(--text, var(--bone)); font: inherit; font-size: 13px;
}
td.cash { color:var(--gold-ink); }

/* ===== Schnellauswahl Zeitraum ===== */
.quick-range { display: flex; gap: 4px; flex-wrap: wrap; }
.quick-range button {
  padding: 7px 11px; font-size: 12.5px; cursor: pointer;
  background: transparent; color: var(--mute, var(--mute));
  border: 1px solid var(--line, rgba(var(--tint),.1)); border-radius: 7px;
}
.quick-range button:hover { color: var(--text, var(--bone)); border-color: rgba(var(--tint),.2); }
.quick-range button.on {
  color: var(--gold, var(--gold)); border-color: rgba(var(--gold-rgb),.55);
  background: rgba(var(--gold-rgb),.10);
}

/* ===== Abrechnungstabelle: große, gut lesbare Zahlen ===== */
.tbl .mono.big { font-size: 15px; font-weight: 600; }
.tbl tfoot td {
  border-top: 2px solid var(--line, rgba(var(--tint),.14));
  padding-top: 12px; font-weight: 600;
}
.tbl-bill td, .tbl-bill th { padding-top: 12px; padding-bottom: 12px; }

/* ===== Ausklappbarer CSV-Import in den Finanzen ===== */
.csv-box { padding: 0; }
.csv-box > summary {
  cursor: pointer; padding: 14px 18px; list-style: none;
  display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
}
.csv-box > summary::-webkit-details-marker { display: none; }
.csv-box > summary::before {
  content: '▸'; color: var(--gold, var(--gold)); font-size: 13px; transition: transform .15s;
}
.csv-box[open] > summary::before { transform: rotate(90deg); }
.csv-box > summary:hover { background: rgba(var(--tint),.02); }
.csv-box > *:not(summary) { padding: 0 18px; }
.csv-box > *:last-child { padding-bottom: 18px; }

/* ===== Einsatzzeiten: Wochentagspunkte ===== */
.wdrow { display: flex; gap: 3px; }
.wd {
  width: 20px; height: 20px; border-radius: 5px; cursor: default;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 10px; font-weight: 600; letter-spacing: 0;
}
.wd.on   { background: rgba(74,163,110,.28);  color: #7FD1A2; }   /* gefahren */
.wd.gap  { background: rgba(214,90,90,.22);   color: #E48B8B; }   /* keine Fahrt */
.wd.off  { background: rgba(var(--tint),.06); color: var(--mute, var(--mute)); } /* abwesend gemeldet */

/* Gesperrte Felder für Rollen ohne Berechtigung */
.feld-gesperrt { opacity: .5; }
.feld-gesperrt input, .feld-gesperrt select { cursor: not-allowed; }

/* ===== Fahrzeugdetail: Stammdaten links, Wartung rechts ===== */
.veh-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 0 22px; align-items: start; }
.veh-cols > div > fieldset:last-child { margin-bottom: 18px; }
@media (max-width: 860px) {
  .veh-cols { grid-template-columns: 1fr; gap: 0; }
}
/* Drei Kennzahlen nebeneinander bleiben auch in der schmalen Spalte lesbar */
.money-3 { grid-template-columns: repeat(3, 1fr); }
@media (max-width: 520px) { .money-3 { grid-template-columns: 1fr; } }

/* Werkstatttermin-Kennzeichen in der Fahrzeugliste */
.svc-dot {
  display: inline-flex; align-items: center; gap: 5px;
  color: var(--warn, #D8A33A); font-size: 12px; font-weight: 600;
  white-space: nowrap;
}
.svc-dot::before {
  content: ''; width: 8px; height: 8px; border-radius: 50%;
  background: var(--warn, #D8A33A); flex: none;
}

/* ===== Bild aus der Zwischenablage einfügen ===== */
.drop.paste-ziel {
  border-color: rgba(var(--gold-rgb),.55);
  box-shadow: inset 0 0 0 1px rgba(var(--gold-rgb),.25);
}
.drop.paste-ziel::after {
  content: 'Strg+V';
  position: absolute; top: 6px; right: 8px;
  font-size: 10.5px; letter-spacing: .04em;
  color: var(--gold, var(--gold)); opacity: .75;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.drop { position: relative; }
.drop:focus-visible { outline: 2px solid rgba(var(--gold-rgb),.6); outline-offset: 2px; }

/* ===== Fahrerermittlung: anklickbare Ergebniskarten ===== */
.lk-karte { padding: 12px 14px; margin-bottom: 8px; }
.lk-karte.klickbar { cursor: pointer; transition: border-color .12s, background .12s; }
.lk-karte.klickbar:hover {
  border-color: rgba(var(--gold-rgb),.55);
  background: rgba(var(--gold-rgb),.06);
}
.lk-nimm {
  margin-left: auto; font-size: 12.5px; font-weight: 600;
  color: var(--gold, var(--gold)); white-space: nowrap; opacity: .8;
}
.lk-karte.klickbar:hover .lk-nimm { opacity: 1; }

/* Zweites Fenster über dem ersten (Ermittlung aus dem Strafenformular) */
#mLookup { z-index: 1200; }

/* ===== Filterleiste ===== */
.filterbar {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  margin: 0 0 14px;
}
.filter-lbl {
  font-size: 11px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--mute, var(--mute)); margin-right: 4px;
}
.filterbar button {
  padding: 6px 11px; font-size: 12.5px; cursor: pointer;
  background: transparent; color: var(--mute, var(--mute));
  border: 1px solid var(--line, rgba(var(--tint),.1)); border-radius: 999px;
  transition: color .12s, border-color .12s, background .12s;
}
.filterbar button:hover { color: var(--text, var(--bone)); border-color: rgba(var(--tint),.22); }
.filterbar button.on {
  color: var(--gold, var(--gold)); border-color: rgba(var(--gold-rgb),.55);
  background: rgba(var(--gold-rgb),.10);
}
.filterbar button.leer { opacity: .4; }
.filterbar button.leer:hover { opacity: .7; }
.filter-clear { color: var(--warn, #D8A33A) !important; border-style: dashed !important; }


/* =====================================================================
   Listen auf schmalen Bildschirmen
   Aus jeder Tabellenzeile wird eine kompakte Karte. Welche Rolle eine
   Zelle dabei spielt, steht als Klasse an der Zelle:
     .c-main  Überschrift der Karte (Name, Kennzeichen)
     .c-side  rechts außen, erste Zeile (Status, Betrag)
     .c-meta  Nebenangaben, fließen in eine gemeinsame Zeile
     .c-sub   eigene Zeile darunter, gedämpft (Adresse)
     .c-off   auf schmalen Bildschirmen weggelassen
   ===================================================================== */
@media (max-width: 900px) {
  .tbl tbody tr {
    display: flex; flex-wrap: wrap; align-items: baseline;
    gap: var(--s1) var(--s3);
    padding: var(--s3) 0;
    border-bottom: 1px solid var(--line-soft);
  }
  .tbl td { display: block; padding: 0; border: 0; text-align: left !important; }
  .tbl td::before { display: none; }

  .tbl td.c-pick { order: 0; flex: none; }
  .tbl td.c-main {
    order: 1; flex: 1 1 auto; min-width: 0;
    font-size: var(--t-base); font-weight: 600;
  }
  .tbl td.c-side { order: 2; flex: none; margin-left: auto; }
  /* Zwei rechtsbündige Zellen würden sich gegenseitig aus dem Bild
     schieben — nur die erste rückt an den Rand. */
  .tbl td.c-side ~ td.c-side { margin-left: 0; }
  /* Datum und Kennzeichen teilen sich die erste Zeile */
  .tbl td.c-main + td.c-main { flex: 0 1 auto; font-weight: 600; }
  .tbl td.c-meta {
    order: 3; flex: none;
    font-size: var(--t-sm); color: var(--mute);
  }
  .tbl td.c-meta + .c-meta::before {
    content: '·'; margin-right: var(--s3); color: var(--line); display: inline;
  }
  .tbl td.c-sub {
    order: 4; flex: 1 1 100%;
    font-size: var(--t-sm); color: var(--mute);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .tbl td.c-off { display: none; }

  /* Zeilen ohne Rollenangabe verhalten sich wie bisher */
  .tbl tbody tr:not(:has(.c-main)) { display: block; padding: var(--s4) 0; }
  .tbl tbody tr:not(:has(.c-main)) td {
    display: flex; justify-content: space-between; gap: var(--s4); padding: var(--s2) 0;
  }
  .tbl tbody tr:not(:has(.c-main)) td::before {
    content: attr(data-l); display: block; font-size: var(--t-xs); letter-spacing: .1em;
    text-transform: uppercase; color: var(--mute); flex: none;
    font-family: ui-monospace, monospace;
  }
}

/* Sperrhinweis neben der Bewertung */
.susp-wrap { display: block; margin-top: var(--s1); }
@media (max-width: 900px) { .susp-wrap { display: inline-block; margin: 0 0 0 var(--s2); } }

/* Nebenangabe direkt hinter dem Haupttext (Personalnummer, Modell) */
.nr { margin-left: var(--s2); font-weight: 400; color: var(--mute); font-size: var(--t-sm); }
@media (min-width: 901px) { .nr { display: block; margin: 2px 0 0; } }


/* =====================================================================
   Aufklappbare Einstellungsblöcke
   Nur was gebraucht wird, ist offen. Der Rest bleibt greifbar, ohne die
   Seite zu füllen.
   ===================================================================== */
.panel.setting { padding: 0; margin-bottom: var(--s3); }
.panel.setting > summary {
  list-style: none; cursor: pointer;
  padding: var(--s4) var(--s5);
  display: flex; align-items: baseline; gap: var(--s3); flex-wrap: wrap;
  transition: background .15s;
}
.panel.setting > summary::-webkit-details-marker { display: none; }
.panel.setting > summary::before {
  content: ''; flex: none; width: 7px; height: 7px;
  border-right: 1.5px solid var(--mute); border-bottom: 1.5px solid var(--mute);
  transform: rotate(-45deg); transition: transform .18s, border-color .18s;
  margin-right: var(--s1); position: relative; top: -2px;
}
.panel.setting[open] > summary::before { transform: rotate(45deg); border-color: var(--gold); }
.panel.setting > summary:hover { background: rgba(var(--tint),.02); }
.panel.setting > summary:hover::before { border-color: var(--bone); }
.panel.setting .s-title {
  font-family: inherit; font-weight: 700;
  font-size: var(--t-lg); letter-spacing: -.01em;
}
.panel.setting .s-sub { color: var(--mute); font-size: var(--t-sm); }
.panel.setting[open] > summary { border-bottom: 1px solid var(--line-soft); }
.panel.setting .s-body { padding: var(--s5); }
.panel.setting .s-body > .sub:first-child { margin-top: 0; }

/* --- Einstellungen: Gruppen mit Zwischenüberschrift --------------------
   Sechzehn Blöcke untereinander sind eine Wand. Die Gruppen geben der
   Seite eine Gliederung, ohne dass etwas versteckt wird. */
.set-group { margin-bottom: var(--s7); }
.set-group-head {
  display: flex; align-items: baseline; gap: var(--s3); flex-wrap: wrap;
  padding: 0 0 var(--s2); margin-bottom: var(--s4);
  border-bottom: 1px solid var(--line-soft);
}
.set-group-head h2 {
  margin: 0; font-size: var(--t-xl); letter-spacing: -.02em;
  color:var(--gold-ink);
}
.set-group-head span { color: var(--mute); font-size: var(--t-sm); }
.set-group.hide { display: none; }

@media (max-width: 900px) {
  .set-group { margin-bottom: var(--s6); }
  .set-group-head h2 { font-size: var(--t-lg); }
}

@media (max-width: 900px) {
  .panel.setting > summary { padding: var(--s3) var(--s4); }
  .panel.setting .s-body { padding: var(--s4); }
  .panel.setting .s-title { font-size: var(--t-base); }
  .panel.setting .s-sub { flex: 1 1 100%; }
}


/* =====================================================================
   Ruhigerer Gesamteindruck
   Weniger gefüllte Flächen, weniger konkurrierende Farbe. Kennzeichnungen
   tragen nur dort Farbe, wo sie eine Handlung auslösen sollen.
   ===================================================================== */

/* Kennzeichnungen: Umriss statt Füllung, kein Versalsatz */
.tag {
  font-size: var(--t-xs); letter-spacing: .02em; text-transform: none;
  border-radius: var(--r-sm); padding: 3px 8px;
  font-family: inherit; font-weight: 600;
  background: transparent;
}
.tag.ok   { color: var(--ok);   border-color: rgba(63,191,127,.30); }
.tag.warn { color: var(--warn); border-color: rgba(224,169,59,.34); }
.tag.bad  { color: var(--bad);  border-color: rgba(224,92,92,.34); background: rgba(224,92,92,.07); }
.tag.n    { color: var(--mute); border-color: var(--line-soft); }

/* Knöpfe: kein Anheben beim Überfahren, ruhigere Kanten */
.btn { border-radius: var(--r-md); transition: background .15s, border-color .15s, color .15s; }
.btn:hover { transform: none; }
.btn-gold { background: var(--gold); color: var(--on-gold); border-color: var(--gold); }
.btn-gold:hover { background: var(--gold-2); border-color: var(--gold-2); }

/* Eingabefelder und Flächen mit derselben Rundung */
input[type=text], input[type=date], input[type=time], input[type=number],
input[type=password], input[type=search], input[type=month], select, textarea {
  border-radius: var(--r-md);
}
.panel { border-radius: var(--r-lg); }

/* Seitenkopf: klare Rangfolge statt konkurrierender Größen */
.page-head { margin-bottom: var(--s5); align-items: baseline; }
.page-head h1 { font-size: var(--t-xl); }
.eyebrow { font-size: var(--t-xs); letter-spacing: .14em; }

/* Kennzahlenfelder ruhiger */
.money, .stats { gap: var(--s3); }
.money > div, .stats > div { border-radius: var(--r-md); }

/* Tabellen: mehr Luft, weniger Linien */
.tbl th {
  font-size: var(--t-xs); letter-spacing: .06em; font-weight: 600;
  padding-bottom: var(--s2);
}
.tbl td { padding: var(--s3) var(--s3) var(--s3) 0; }
.tbl tbody tr { border-bottom: 1px solid var(--line-soft); }
.tbl tbody tr:last-child { border-bottom: 0; }

/* Kennzeichen: kleiner und ruhiger */
.plate { border-radius: var(--r-sm); }

/* Aufklappbarer Abschnitt im Detailfenster */
.fold { border-top: 1px solid var(--line-soft); margin-top: var(--s4); }
.fold > summary {
  list-style: none; cursor: pointer;
  padding: var(--s3) 0; display: flex; align-items: baseline; gap: var(--s3);
  font-family: inherit; font-weight: 700; font-size: var(--t-md);
  letter-spacing: .01em;
}
.fold > summary::-webkit-details-marker { display: none; }
.fold > summary::before {
  content: ''; flex: none; width: 6px; height: 6px;
  border-right: 1.5px solid var(--mute); border-bottom: 1.5px solid var(--mute);
  transform: rotate(-45deg); transition: transform .18s, border-color .18s;
  position: relative; top: -2px;
}
.fold[open] > summary::before { transform: rotate(45deg); border-color: var(--gold); }
.fold > summary:hover::before { border-color: var(--bone); }
.fold-hint { margin-left: auto; font-family: inherit; font-weight: 400; font-size: var(--t-sm); color: var(--mute); }
.fold-body { padding: 0 0 var(--s4); }


/* =====================================================================
   Entwurf „Flotten-Redesign": ruhiger, dunkler, mehr Überblick
   Gold trägt nur Primäraktion und aktiven Zustand. Zustände zeigt ein
   kleiner Punkt statt farbiger Fläche — Rot heißt jetzt handeln,
   Bernstein bald fällig, sonst neutral.
   ===================================================================== */

/* ---------- Seitenleiste ---------- */
/* Die Leiste darf scrollen, der Fußbereich klebt am unteren Rand — sonst
   rutscht „Abmelden" bei vielen Menüpunkten aus dem Sichtfeld und niemand
   vermutet, dass die Leiste überhaupt scrollbar ist.
   Die Knöpfe liegen direkt in <aside>, nicht in einem <nav>. */
aside {
  padding: var(--s6) 0 0;
  display: flex; flex-direction: column;
  height: 100vh; overflow-y: auto;
  background: var(--ink);
}
.logo { padding: 0 22px var(--s6); gap: 10px; }
.logo .mark {
  width: 30px; height: 30px; border-radius: var(--r-md);
  background: var(--gold); color: var(--on-gold);
  font-weight: 700; font-size: 10px; font-variant-numeric: tabular-nums;
}
.logo b { font-family: inherit; font-weight: 700; font-size: var(--t-lg); letter-spacing: .01em; }
.logo span { font-size: var(--t-xs); color: var(--mute-2); }

nav { padding: 0 var(--s3); gap: 2px; }
.navb {
  display: flex; align-items: center; gap: 11px;
  padding: 9px var(--s3); border-radius: var(--r-md);
  color: var(--mute); font-size: var(--t-base); font-weight: 500;
  border: 0; background: none; width: 100%; cursor: pointer; text-align: left;
  transition: background .14s, color .14s;
}
.navb:hover { background: rgba(var(--tint),.04); color: var(--bone); }
.navb.on { background: rgba(var(--gold-rgb),.10); color:var(--gold-ink); font-weight: 600; }

/* Symbole nur bei den Hauptpunkten. Sie sollen begleiten, nicht rufen —
   deshalb dünne Linien und gedämpft, bis der Punkt aktiv ist. */
.navb > svg {
  width: 18px; height: 18px; flex: none;
  stroke: currentColor; fill: none;
  stroke-width: 1.5; opacity: .6;
  transition: opacity .14s, stroke .14s;
}
.navb:hover > svg { opacity: .9; }
.navb.on > svg { opacity: 1; stroke: var(--gold-2); }

/* Die Zahl rechts, egal wie lang der Text ist */
.navb .nav-n { margin-left: auto; }

/* Zahl hinter dem Menüpunkt: rot nur, wenn es etwas zu tun gibt */
.nav-n {
  font-weight: 600; font-size: 10.5px; font-variant-numeric: tabular-nums;
  color: var(--mute-2); padding: 2px 7px; border-radius: 999px;
}
.nav-n.due { background: rgba(226,109,100,.16); color: var(--bad-txt); }

.side-foot {
  flex: none; margin: auto var(--s3) 0; padding: var(--s3) 0 var(--s4);
  position: sticky; bottom: 0; z-index: 2;
  background: var(--ink);
  border-top: 1px solid var(--line);
  /* Untereinander statt nebeneinander: Die Leiste ist 236px schmal,
     für Name und Knopf in einer Reihe reicht das nicht — lange
     Benutzernamen liefen sonst über den Knopf. */
  display: flex; flex-direction: column; align-items: stretch; gap: var(--s2);
}
.side-foot .who {
  min-width: 0; font-size: var(--t-sm); color: var(--mute);
  padding: 0 var(--s3);
  overflow-wrap: anywhere;
}
.side-foot .who b {
  display: block; color: var(--txt-2); font-weight: 600;
  overflow: hidden; text-overflow: ellipsis;
}
/* Abmelden als eigener, immer sichtbarer Knopf */
.side-foot .navb {
  flex: none; width: 100%; padding: 8px 11px;
  border: 1px solid var(--line); border-radius: var(--r-md);
  font-size: var(--t-sm); color: var(--mute);
  text-decoration: none; justify-content: center;
}
.side-foot .navb:hover { color: var(--bone); border-color: rgba(var(--tint),.22); background: rgba(var(--tint),.04); }
.who {
  font-size: var(--t-sm); color: var(--mute);
  display: flex; align-items: center; justify-content: space-between; gap: var(--s3);
}

/* ---------- Umschalter hell/dunkel ----------
   Ein schmaler Schieber: beide Zeichen liegen fest, der helle Knopf
   wandert darüber. Dezent genug, um in der Fußzeile nicht zu stören. */
.tsw {
  position: relative; flex: none;
  width: 44px; height: 22px; padding: 0;
  border: 1px solid var(--line); border-radius: 999px;
  background: rgba(var(--tint),.05);
  cursor: pointer; overflow: hidden;
  transition: background .18s, border-color .18s;
}
.tsw:hover { border-color: rgba(var(--tint),.2); }
.tsw-i {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 12px; height: 12px;
  stroke: var(--mute-2); fill: none; stroke-width: 1.6;
  transition: stroke .18s, opacity .18s;
  pointer-events: none;
}
.tsw-sun  { left: 5px; }
.tsw-moon { right: 5px; }
.tsw-knob {
  position: absolute; top: 2px; left: 2px;
  width: 16px; height: 16px; border-radius: 50%;
  background: var(--bone);
  box-shadow: 0 1px 3px rgba(0,0,0,.35);
  transition: transform .2s cubic-bezier(.4,.1,.2,1), background .18s;
  pointer-events: none;
}
/* Im dunklen Thema steht der Knopf rechts, über dem Mond */
html[data-theme="dark"] .tsw-knob { transform: translateX(22px); }
html[data-theme="dark"] .tsw-moon { stroke: var(--ink); opacity: 0; }
html[data-theme="dark"] .tsw-sun  { stroke: var(--mute); }
/* Im hellen links, über der Sonne */
html[data-theme="light"] .tsw-knob { transform: translateX(0); background: var(--gold); }
html[data-theme="light"] .tsw-sun  { opacity: 0; }
html[data-theme="light"] .tsw-moon { stroke: var(--mute); }

/* Eigene Zeile über der Fußleiste — dort verdrängt der Schalter nichts.
   Sie sitzt am unteren Rand der Navigation, direkt über „Angemeldet als". */
.side-theme {
  flex: none; margin: auto var(--s3) 0;
  display: flex; align-items: center; justify-content: space-between;
  padding: 8px var(--s3) 10px;
  color: var(--mute); font-size: var(--t-sm);
}
.side-theme + .side-foot { margin-top: 0; }

/* Im Handy-Menü steht der Schalter in einer eigenen Zeile */
.sheet-theme {
  display: flex; align-items: center; justify-content: space-between;
  padding: 11px 14px; margin-top: 4px;
  border-top: 1px solid var(--line-soft);
  color: var(--mute); font-size: var(--t-base);
}

/* ---------- Kopfzeile einer Ansicht ---------- */
.page-head { margin-bottom: var(--s6); align-items: flex-start; }
.page-head h1 { font-size: var(--t-xl); font-weight: 700; }
.page-head .eyebrow { display: none; }
.page-sub { font-size: var(--t-md); color: var(--mute-2); margin-top: 3px; }

/* ---------- Flächen ---------- */
.panel { background: var(--ink-2); border: 1px solid var(--line); border-radius: var(--r-lg); }
.card, .kpi { background: var(--ink-2); border: 1px solid var(--line); border-radius: var(--r-lg); }

/* ---------- Kennzahlen ---------- */
.kpis { gap: var(--s3); }
.kpi { padding: 18px var(--s5); }
.kpi .n {
  font-family: inherit; font-weight: 700; font-size: 26px;
  font-variant-numeric: tabular-nums; letter-spacing: -.01em;
}
.kpi .k { font-size: 12.5px; color: var(--mute); margin-top: var(--s1); }
.kpi .s { font-size: 11.5px; color: var(--mute-2); margin-top: 2px; }
.kpi.gold .n { color:var(--gold-ink); }

/* ---------- Zustandspunkt ---------- */
.dot { width: 7px; height: 7px; border-radius: 50%; flex: none; display: inline-block; background: var(--neutral); }
.dot.bad  { background: var(--bad); }
.dot.warn { background: var(--warn); }
.dot.ok   { background: var(--neutral); }
.dot.day  { background: var(--warn); }
.dot.night{ background: var(--blue); }
.dot.both { background: var(--ok); }

/* ---------- Kennzeichen ----------
   Ohne Kasten und in der Hausschrift: In einer Liste, in der jede Zeile
   ein Kennzeichen trägt, rahmt der Kasten nichts ein — er wiederholt nur
   die Spalte. Das Gewicht genügt, um es vom Modell darunter abzuheben. */
.plate {
  font-family: inherit; font-weight: 600; font-size: var(--t-base);
  font-variant-numeric: tabular-nums;
  background: transparent; border: 0;
  border-radius: 0; padding: 0; color: var(--bone); white-space: nowrap;
}
.plate.sm { font-size: 13px; padding: 0; color: var(--txt-2); font-weight: 600; }

/* ---------- Ölbalken ---------- */
.oilbar { display: flex; align-items: center; gap: 10px; }
.oilbar .track { width: 64px; height: 4px; border-radius: 2px; background: rgba(var(--tint),.08); overflow: hidden; flex: none; }
/* Der Balken zeigt nur die Menge, nicht die Bewertung — deshalb einfarbig.
   Ohne display:block nimmt das Element keine Breite an und bleibt unsichtbar. */
.oilbar .fill {
  display: block; height: 100%; border-radius: 2px;
  background: rgba(var(--tint),.45);
}
/* Die Farbe trägt allein die Prozentzahl */
.oilbar .val { font-weight: 600; font-size: var(--t-sm); color: var(--mute); font-variant-numeric: tabular-nums; }
.oilbar .val.warn { color: var(--warn); }
.oilbar .val.bad  { color: var(--bad); }
.oilbar .val.none { color: var(--mute-2); }

/* ---------- Filterchips ---------- */
.filterbar { gap: var(--s2); margin-bottom: var(--s4); }
.filter-lbl { font-size: var(--t-xs); letter-spacing: .08em; color: var(--mute-2); font-weight: 600; margin-right: var(--s1); }
.filterbar button {
  font-size: var(--t-sm); padding: 5px 11px; border-radius: 999px;
  border: 1px solid rgba(var(--tint),.1); color: var(--mute); background: none;
}
.filterbar button:hover { color: var(--bone); border-color: rgba(var(--tint),.2); background: none; }
.filterbar button.on { border-color: rgba(var(--gold-rgb),.45); color:var(--gold-ink); background: none; }
.filterbar button.leer { opacity: .45; }

/* ---------- Tabellen ---------- */
.tbl { border-collapse: collapse; width: 100%; }
.tbl th {
  font-size: var(--t-xs); letter-spacing: .08em; color: var(--mute-2); font-weight: 600;
  text-transform: uppercase; padding: var(--s3) 0; border: 0;
}
/* Zeilen kompakter: Bei zwanzig Fahrzeugen bedeutet jede Zeile Scrollen.
   Ausreichend Luft zum Treffen bleibt, die Zeile wird nur nicht mehr
   von einem Modellnamen in zweiter Zeile aufgeblasen. */
.tbl td { padding: 9px var(--s4) 9px 0; font-size: var(--t-md); color: var(--txt-2); vertical-align: middle; }
.tbl tbody tr { border-top: 1px solid var(--line-soft); border-bottom: 0; cursor: pointer; }
.tbl tbody tr:hover { background: rgba(var(--tint),.025); }
.tbl tbody tr.picked { background: rgba(var(--gold-rgb),.06); }

/* Zahlenspalten */
.tbl .num { text-align: right; font-weight: 400; font-size: 13.5px; font-variant-numeric: tabular-nums; }

/* ---------- Kennzeichnungen: still statt bunt ---------- */
.tag {
  display: inline-flex; align-items: center; gap: var(--s1);
  font-size: var(--t-xs); font-weight: 600; font-family: inherit;
  letter-spacing: 0; text-transform: none;
  border: 0; border-radius: var(--r-sm); padding: 3px 8px;
  background: rgba(var(--tint),.05); color: var(--mute);
  white-space: nowrap;
}
.tag.ok   { background: none; color: var(--ok);     padding-left: 0; }
.tag.warn { background: rgba(var(--gold-rgb),.10); color:var(--gold-ink); }
.tag.bad  { background: rgba(226,109,100,.12); color: var(--bad-txt); }
.tag.n    { background: none; color: var(--mute-2); padding-left: 0; }

/* ---------- Knöpfe ---------- */
.btn {
  border-radius: var(--r-md); font-size: var(--t-md); font-weight: 500;
  padding: 8px 14px; border: 1px solid transparent;
}
.btn-gold { background: var(--gold); color: var(--on-gold); border-color: var(--gold); font-weight: 600; }
.btn-gold:hover { background: var(--gold-2); border-color: var(--gold-2); }
.btn-ghost { background: none; border-color: rgba(var(--tint),.14); color: var(--txt-2); }
.btn-ghost:hover { background: rgba(var(--tint),.04); border-color: rgba(var(--tint),.24); color: var(--bone); }
.btn-sm { padding: 6px 11px; font-size: var(--t-sm); }

/* ---------- Suchfeld ---------- */
/* Die Hülle trägt nur die Lupe und den Löschknopf — Hintergrund und
   Rahmen gehören dem Eingabefeld. Vorher hatten beide einen Kasten,
   und der äußere schaute als dunkler Rand an den Seiten heraus. */
.searchbar { background: transparent; border: 0; border-radius: 0; padding: 0; }
.searchbar input { font-size: var(--t-md); }
.searchbar input::placeholder { color: var(--mute-2); }

/* ---------- Abschnitt „Jetzt handeln" ---------- */
.act-head {
  display: flex; align-items: baseline; justify-content: space-between;
  padding: var(--s4) var(--s5) 10px; font-size: var(--t-lg); font-weight: 600;
}
.act-head a { font-size: var(--t-sm); color: var(--mute); text-decoration: none; font-weight: 400; }
.act-head a:hover { color: var(--bone); }
.act-row {
  display: flex; align-items: center; gap: 14px;
  padding: var(--s3) var(--s5); border-top: 1px solid var(--line-soft);
}
.act-row:hover { background: rgba(var(--tint),.02); }
.act-row .t { font-size: var(--t-base); font-weight: 600; color: var(--bone); }
.act-row .d { font-size: var(--t-md); color: var(--mute); }
.act-row .go {
  flex: none; font-size: 12.5px; font-weight: 600; color:var(--gold-ink);
  text-decoration: none; background: none; border: 0; cursor: pointer; padding: 0;
}

/* ---------- Zeile in schmalen Listen (Termine, letzte Unfälle) ---------- */
.mini-row {
  display: flex; align-items: center; gap: var(--s3);
  padding: 10px var(--s5); border-top: 1px solid var(--line-soft);
  font-size: var(--t-md); color: var(--txt-2);
}
.mini-row .when {
  flex: none; width: 58px; font-variant-numeric: tabular-nums;
  font-weight: 400; font-size: var(--t-sm); color: var(--mute-2);
}
.mini-row .what { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mini-row .state { flex: none; font-weight: 600; font-size: var(--t-sm); font-variant-numeric: tabular-nums; }
.mini-row .state.bad { color: var(--bad); }
.mini-row .state.warn { color: var(--warn); }
.mini-row .state.mut { color: var(--mute-2); }

/* ---------- Gruppenüberschrift (Handlungsbedarf / in Ordnung) ---------- */
.group-head {
  display: flex; align-items: center; gap: 10px;
  margin: var(--s6) 0 10px; font-size: var(--t-md); font-weight: 700;
}
.group-head .n { font-weight: 500; font-size: 11.5px; color: var(--mute-2); font-variant-numeric: tabular-nums; }
.group-head.quiet { color: var(--mute); }

/* Fehlende Koordinaten als stiller Hinweis statt Warnsymbol */
.nocoord { color: var(--warn); font-size: 11.5px; }
.wohnort { max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Fehlende Koordinaten als stiller Hinweis statt Warnsymbol */
.nocoord { color: var(--warn); font-size: 11.5px; }
.wohnort { max-width: 340px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Zweispaltiger Unterbau der Übersicht (5:7 wie im Entwurf) */
.dash-two { display: grid; grid-template-columns: 5fr 7fr; gap: 14px; }
@media (max-width: 1100px) { .dash-two { grid-template-columns: 1fr; } }

/* Textknopf im Karten-Kopf */
.lnk { background: none; border: 0; padding: 0; cursor: pointer;
  font-size: var(--t-sm); color: var(--mute); font-family: inherit; }
.lnk:hover { color: var(--bone); }
.act-row[data-actveh], .act-row[data-goto], .mini-row[data-actcrash] { cursor: pointer; }
.mini-row[data-actcrash]:hover { background: rgba(var(--tint),.02); }


/* =====================================================================
   Schicht als schlichtes Zeichen, Fahrerspalte schlank
   ===================================================================== */
.sh-ic {
  width: 12px; height: 12px; flex: none;
  fill: none; stroke: currentColor; stroke-width: 1.4;
  stroke-linecap: round; stroke-linejoin: round;
  opacity: .75;
}
.sh-ic circle { fill: currentColor; stroke: none; }

.shift-lbl {
  display: inline-flex; align-items: center; gap: 7px; white-space: nowrap;
  font-size: 12.5px; color: var(--txt-2);
}
.shift-lbl .sh-ic { color: var(--mute); }

/* Fahrer am Fahrzeug: zwei Zeilen, Zeichen bündig untereinander.
   Nur innerhalb der Listenzelle — im Fahrzeugdetail bleibt die
   größere Darstellung erhalten. */
.drv-cell { display: flex; flex-direction: column; gap: 3px; }
.drv-cell .drv-line {
  display: inline-flex; align-items: center; gap: 7px; padding: 0;
  background: none; border-radius: 0; cursor: inherit;
  font-size: 12.5px; color: var(--txt-2); white-space: nowrap;
}
.drv-cell .drv-line:hover { background: none; }
.drv-line .sh-ic { color: var(--mute-2); }

/* Eine unbesetzte Schicht ist kein Nebendetail, sondern entgangener Umsatz.
   Sie bekommt deshalb Bernstein und eine leichte Fläche — auffällig genug,
   um beim Überfliegen hängenzubleiben, ohne wie ein Fehler zu wirken. */
.drv-line.frei {
  color: var(--warn); font-weight: 600;
  background: rgba(224,166,63,.10);
  border: 1px solid rgba(224,166,63,.22);
  border-radius: var(--r-sm);
  padding: 2px 7px;
}
.drv-line.frei .sh-ic { color: var(--warn); opacity: 1; }

/* Gar kein Fahrer: das Fahrzeug steht komplett still */
.drv-free {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12.5px; font-weight: 600; color: var(--warn);
  background: rgba(224,166,63,.12);
  border: 1px solid rgba(224,166,63,.28);
  border-radius: var(--r-sm); padding: 3px 9px;
}
.drv-free::before {
  content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: var(--warn); flex: none;
}

/* Ölbalken: einfarbig, nur die Zahl trägt Farbe */
.oilbar { display: inline-flex; align-items: center; gap: 10px; }
.oilbar .track {
  display: block; width: 64px; height: 4px; flex: none;
  border-radius: 2px; background: rgba(var(--tint),.10); overflow: hidden;
}
.oilbar .fill {
  display: block; height: 100%; border-radius: 2px;
  background: rgba(var(--tint),.55);
}
.oilbar .val { font-weight: 600; font-size: var(--t-sm); color: var(--ok); font-variant-numeric: tabular-nums; }
.oilbar .val.warn { color: var(--warn); }
.oilbar .val.bad  { color: var(--bad); }
.oilbar .val.none { color: var(--mute-2); }

/* Auf schmalen Bildschirmen bleibt der Balken weg, die Zahl genügt */
@media (max-width: 900px) { .oilbar .track { display: none; } }

/* =====================================================================
   Unfallliste: die letzten vier Spalten brauchen Luft
   Betrag rechtsbündig, danach ein deutlicher Abstand, damit Geldeingang,
   MwSt und Status nicht aneinanderkleben.
   ===================================================================== */
.tbl .col-eur  { text-align: right; padding-right: var(--s6); white-space: nowrap; }
.tbl .col-tail { padding-right: var(--s5); white-space: nowrap; }
.tbl .col-mwst { text-align: center; padding-right: var(--s5); width: 56px; }
@media (max-width: 900px) {
  .tbl .col-eur, .tbl .col-tail, .tbl .col-mwst { padding-right: 0; width: auto; }
}

/* Häkchen für Bereichsrechte */
.perm-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--s2) var(--s4); }
@media (max-width: 700px) { .perm-grid { grid-template-columns: 1fr; } }
.perm-grid label {
  display: flex; align-items: center; gap: var(--s2);
  font-size: var(--t-md); color: var(--txt-2); cursor: pointer;
  padding: 7px 10px; border: 1px solid var(--line-soft); border-radius: var(--r-md);
  transition: border-color .14s, background .14s;
}
.perm-grid label:hover { border-color: rgba(var(--tint),.18); background: rgba(var(--tint),.02); }
.perm-grid input { width: auto; margin: 0; accent-color:var(--gold-ink); }
.perm-grid label:has(input:checked) {
  border-color: rgba(var(--gold-rgb),.4); background: rgba(var(--gold-rgb),.07); color: var(--bone);
}
.perm-grid .hint-sub { display: block; font-size: 11.5px; color: var(--mute-2); }

/* =========================================================================
   Auswertungsansichten — Werkstatt, Verbrauch

   Gemeinsame Bausteine für Kennzahlenleiste, nach Monaten gruppierte
   Tabellen und Balken, die Größenverhältnisse sichtbar machen. Die
   Anordnung folgt einer festen Reihenfolge: erst die Zahl, die man
   sucht, dann die Einordnung, dann die Details.
   ========================================================================= */

/* ---- Kennzahlenleiste mit Trennkreuzen ----
   Die Kreuze an den Ecken markieren das Raster, ohne Kästen zu zeichnen —
   ruhiger als Rahmen um jede Karte. */
/* =========================================================================
   Kennzahlenkacheln

   Einzelne Kästchen statt einer durchgehenden Leiste mit Trennkreuzen:
   Jede Zahl steht für sich, und bei fünf oder sechs Kennzahlen bricht
   die Reihe sauber um, statt immer schmaler zu werden.
   ========================================================================= */
.metrics {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 12px;
  margin-bottom: 22px;
}
/* Feste Spaltenzahl, wo sie gewünscht ist */
.metrics.m-3 { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.metrics.m-2 { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }

.metric {
  padding: 15px 17px 16px;
  border: 1px solid var(--line-soft);
  border-radius: var(--r-lg);
  background: var(--ink-2);
  min-width: 0;
}
.metric.m-wide { grid-column: span 2; }
@media (max-width: 620px) { .metric.m-wide { grid-column: span 1; } }

.metric .m-lbl {
  font-size: 12.5px; font-weight: 400; letter-spacing: 0;
  text-transform: none; color: var(--mute);
  display: block; margin-bottom: 9px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.metric .m-val {
  font-size: 25px; font-weight: 700; letter-spacing: -.02em;
  color: var(--bone); line-height: 1.1;
  display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap;
  font-variant-numeric: tabular-nums;
}
.metric .m-val .u {
  font-size: 13px; font-weight: 500; color: var(--mute); letter-spacing: 0;
}
.metric .m-val .chip {
  font-size: 11px; font-weight: 600; padding: 2px 7px; border-radius: 999px;
  background: rgba(var(--tint),.06); color: var(--mute);
}

.metric .m-sub {
  margin-top: 7px; font-size: 12px; color: var(--mute); line-height: 1.45;
}
/* Der Trendhinweis unter der Zahl: Pfeil und Wert farbig, der Bezug
   („zum Vorzeitraum") gedämpft — sonst konkurrieren beide um Aufmerksamkeit. */
.metric .m-sub .hoch   { color: var(--ok); }
.metric .m-sub .runter { color: var(--bad-txt); }

@media (max-width: 1000px) {
  .metrics { grid-template-columns: repeat(2, 1fr); }
  .metrics.m-3, .metrics.m-2 { grid-template-columns: repeat(2, 1fr); }
  .metric:nth-child(odd) { border-left: 0; padding-left: 0; }
  .metric { padding: 16px 18px; }
  .metric .m-val { font-size: 25px; }
}
@media (max-width: 560px) {
  .metrics, .metrics.m-3, .metrics.m-2 { grid-template-columns: 1fr; }
  .metric { border-left: 0; padding: 14px 0; border-top: 1px solid var(--line-soft); }
  .metric:first-child { border-top: 0; }
  .metric::before, .metric::after { display: none; }
}

/* ---- Hinweiskasten zur Datenlage ----
   Steht über der Tabelle, wenn Zahlen auf lückenhafter Grundlage
   beruhen. Kein Alarm, sondern eine Einordnung. */
.databox {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 14px 16px; margin-bottom: 20px;
  border: 1px solid var(--line-soft); border-radius: var(--r-lg);
  background: rgba(var(--tint),.02);
  font-size: 13px; color: var(--mute); line-height: 1.55;
}
.databox svg { width: 16px; height: 16px; flex: none; margin-top: 2px;
  stroke: var(--mute-2); fill: none; stroke-width: 1.6; }
.databox b { color: var(--txt-2); }

/* ---- Nach Monat gruppierte Tabelle ---- */
.tbl tr.grp td {
  padding: 22px 12px 8px;
  border-bottom: 1px solid var(--line);
  background: transparent;
}
.tbl tr.grp:first-child td { padding-top: 4px; }
.tbl tr.grp { cursor: default; }
.tbl tr.grp:hover td { background: transparent; }
.grp-name {
  font: 600 11px/1 ui-monospace, monospace;
  letter-spacing: .14em; text-transform: uppercase; color: var(--bone);
}
.grp-meta { font-size: 12px; color: var(--mute-2); margin-left: 12px; letter-spacing: 0;
  font-family: inherit; text-transform: none; font-weight: 400; }

/* Summenzeile innerhalb einer Gruppe */
.tbl tr.sum td {
  background: rgba(var(--gold-rgb),.05);
  font-weight: 600; color: var(--bone);
}
.tbl tr.sum { cursor: default; }

/* ---- Balken in Tabellenzellen ----
   Zeigt das Verhältnis zum größten Wert der Spalte. Zahlen allein
   verraten nicht, ob 563 € viel ist — der Balken schon. */
.bar {
  height: 9px; border-radius: 2px; min-width: 90px;
  background: rgba(var(--tint),.07); position: relative; overflow: hidden;
}
.bar > i { position: absolute; inset: 0 auto 0 0; border-radius: 2px;
  background: var(--mute-2); opacity: .55; }
.bar.hi > i { background: var(--gold); opacity: .9; }

/* Balken mit Mittelmarke — für den Vergleich zum Durchschnitt.
   Balken und Beschriftung liegen nebeneinander im Fluss, nicht absolut:
   sonst schiebt sich der Text über die nächste Spalte, sobald die
   Spaltenbreite anders ausfällt als gedacht. */
.bar-avg { display: flex; align-items: center; gap: 10px; min-width: 190px; }
.bar-avg .track { height: 11px; flex: 1; min-width: 60px;
  background: rgba(var(--tint),.06); border-radius: 2px; position: relative; }
.bar-avg .fill  { position: absolute; inset: 0 auto 0 0; border-radius: 2px;
  background: var(--mute-2); opacity: .5; }
.bar-avg.over .fill { background: var(--gold); opacity: .85; }
.bar-avg .mark  { position: absolute; top: -3px; bottom: -3px; width: 1px;
  background: var(--mute); opacity: .8; }
.bar-avg .txt   { flex: none; white-space: nowrap; text-align: right;
  min-width: 92px;
  font: 500 11.5px/1 ui-monospace, monospace; color: var(--mute); }

/* Abweichung vom Schnitt als kleines Etikett */
.dev { font: 600 11px/1 ui-monospace, monospace; padding: 3px 7px; border-radius: 999px;
  background: rgba(var(--tint),.05); color: var(--mute); white-space: nowrap; }
.dev.up   { background: rgba(var(--gold-rgb),.12); color: var(--gold-ink); }
.dev.down { background: rgba(var(--tint),.05); color: var(--mute); }

/* ---- Rangnummer vor dem Namen ---- */
.rank { font: 500 12px/1 ui-monospace, monospace; color: var(--mute-2); }

/* ---- Fußnote unter einer Tabelle ---- */
.tbl-note { margin-top: 14px; font-size: 12.5px; color: var(--mute-2); line-height: 1.6; }

/* ---- Abschnitt „braucht Aufmerksamkeit" ---- */
.attn {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 0;
  border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft);
}
.attn-card { padding: 18px 20px; border-left: 1px solid var(--line-soft); }
.attn-card:first-child { border-left: 0; padding-left: 0; }
.attn-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.attn-head b { font-size: 15px; color: var(--bone); }
.attn-val { font-size: 26px; font-weight: 700; letter-spacing: -.02em; margin: 10px 0 12px;
  display: flex; align-items: baseline; gap: 6px; }
.attn-val .u { font-size: 12px; font-weight: 500; color: var(--mute); }
.attn-foot { display: flex; justify-content: space-between; font-size: 12px; color: var(--mute);
  margin-top: 8px; }
@media (max-width: 1000px) {
  .attn { grid-template-columns: repeat(2, 1fr); }
  .attn-card:nth-child(odd) { border-left: 0; padding-left: 0; }
}
@media (max-width: 560px) { .attn { grid-template-columns: 1fr; }
  .attn-card { border-left: 0; padding-left: 0; } }

/* ---- Umschalter für Ansichten (Segmente) ---- */
.seg { display: inline-flex; border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; }
.seg button {
  border: 0; background: transparent; color: var(--mute);
  padding: 7px 14px; font-size: 13px; font-family: inherit; cursor: pointer;
  border-left: 1px solid var(--line); transition: background .15s, color .15s;
}
.seg button:first-child { border-left: 0; }
.seg button:hover { color: var(--bone); background: rgba(var(--tint),.03); }
.seg button.on { background: var(--gold); color: var(--on-gold); font-weight: 600; }

/* ---- Werkzeugleiste über einer Auswertung ----
   Ansicht, Filter und Suche in einer Zeile — das spart eine
   Bildschirmhöhe gegenüber getrennten Leisten. */
.toolbar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-bottom: 22px;
}
.toolbar .filter-lbl { margin-right: 2px; }
.toolbar .seg select {
  border: 0; border-left: 1px solid var(--line); background: transparent;
  color: var(--mute); padding: 7px 26px 7px 12px; font-size: 13px;
  font-family: inherit; cursor: pointer; max-width: 190px;
}
.toolbar .seg select:first-child { border-left: 0; }
.toolbar .seg select.on { color: var(--gold-ink); font-weight: 600; }
.toolbar .tb-search {
  margin: 0; flex: 1; min-width: 190px; max-width: 330px;
}
.toolbar .tb-hint { font-size: 12px; color: var(--mute-2); margin-left: auto; }
@media (max-width: 760px) {
  .toolbar .tb-hint { display: none; }
  .toolbar .tb-search { max-width: none; }
}

/* Zeilen in Auswertungen sind nicht anklickbar — kein Zeigefinger,
   kein Aufleuchten, das eine Aktion verspricht, die es nicht gibt. */
.tbl tbody tr.nohover { cursor: default; }
.tbl tbody tr.nohover:hover { background: transparent; }

/* =========================================================================
   Bildgalerie

   Ein großes Bild, darunter ein Streifen mit allen Anhängen des Vorgangs.
   Wer einen Schaden beurteilt, springt zwischen den Aufnahmen hin und her —
   dafür soll er nicht zehnmal ein neues Fenster öffnen müssen.
   ========================================================================= */
.gal {
  position: fixed; inset: 0; z-index: 300; display: none;
  background: rgba(4, 8, 10, .94);
  flex-direction: column;
}
.gal.open { display: flex; }

.gal-head {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 14px 18px; color: var(--bone); flex: none;
}
.gal-title { font-size: 14px; min-width: 0; }
.gal-title b { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gal-title span { font-size: 12px; color: var(--mute); }
.gal-head .actions { flex: none; }

.gal-main {
  flex: 1; min-height: 0; position: relative;
  display: grid; place-items: center; padding: 0 60px;
}
.gal-main img {
  max-width: 100%; max-height: 100%; object-fit: contain;
  border-radius: 4px;
}
/* Für PDFs und andere Dateien: kein Bild, sondern ein Hinweis */
.gal-doc { text-align: center; color: var(--mute); }
.gal-doc svg { width: 54px; height: 54px; stroke: var(--gold); fill: none; stroke-width: 1.3; }
.gal-doc p { margin: 14px 0 16px; font-size: 14px; color: var(--bone); }

/* Blättern: große Flächen links und rechts, damit man nicht zielen muss */
.gal-nav {
  position: absolute; top: 0; bottom: 0; width: 56px;
  border: 0; background: transparent; color: var(--bone);
  cursor: pointer; display: grid; place-items: center;
  opacity: .5; transition: opacity .15s, background .15s;
}
.gal-nav:hover { opacity: 1; background: rgba(var(--tint), .05); }
.gal-nav.prev { left: 0; }
.gal-nav.next { right: 0; }
.gal-nav svg { width: 26px; height: 26px; stroke: currentColor; fill: none; stroke-width: 1.6; }
.gal-nav[disabled] { opacity: .12; cursor: default; background: transparent; }

/* Streifen: alle Anhänge des Vorgangs, der aktuelle hervorgehoben */
.gal-strip {
  flex: none; display: flex; gap: 8px; padding: 14px 18px 18px;
  overflow-x: auto; justify-content: center;
}
.gal-strip::-webkit-scrollbar { height: 6px; }
.gal-strip::-webkit-scrollbar-thumb { background: rgba(var(--tint), .2); border-radius: 3px; }
.gal-thumb {
  flex: none; width: 92px; height: 66px; border-radius: 6px; overflow: hidden;
  border: 2px solid transparent; cursor: pointer; padding: 0; background: rgba(var(--tint), .06);
  opacity: .55; transition: opacity .15s, border-color .15s;
  position: relative;
}
.gal-thumb:hover { opacity: .85; }
.gal-thumb.on { opacity: 1; border-color: var(--gold); }
.gal-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gal-thumb .doc { width: 100%; height: 100%; display: grid; place-items: center; color: var(--gold); }
.gal-thumb .doc svg { width: 20px; height: 20px; stroke: currentColor; fill: none; stroke-width: 1.5; }
/* Marke für „vorher" / „nachher" */
.gal-thumb em {
  position: absolute; left: 0; bottom: 0; right: 0;
  font: 600 9px/1.6 ui-monospace, monospace; text-transform: uppercase; letter-spacing: .08em;
  background: rgba(4, 8, 10, .8); color: var(--bone); font-style: normal;
}

@media (max-width: 700px) {
  .gal-main { padding: 0 40px; }
  .gal-nav { width: 40px; }
  .gal-thumb { width: 68px; height: 50px; }
  .gal-strip { justify-content: flex-start; }
}

/* ---- Vorschlagsliste unter einem Eingabefeld ----
   Sitzt über allem anderen, damit sie nicht vom nächsten Feld
   abgeschnitten wird. */
.suggest-wrap { position: relative; }
.suggest {
  position: absolute; left: 0; right: 0; top: 100%; z-index: 20;
  margin-top: 4px; max-height: 260px; overflow-y: auto;
  background: var(--ink-2); border: 1px solid var(--line);
  border-radius: var(--r-md); box-shadow: var(--shadow-1);
}
.suggest button {
  display: block; width: 100%; text-align: left; border: 0;
  background: transparent; color: var(--txt-2);
  padding: 9px 13px; font-size: 14px; font-family: inherit; cursor: pointer;
  border-bottom: 1px solid var(--line-soft);
}
.suggest button:last-child { border-bottom: 0; }
.suggest button:hover, .suggest button.on { background: rgba(var(--tint),.05); color: var(--bone); }
.suggest b { display: block; font-weight: 600; color: var(--bone); }
.suggest small { color: var(--mute); font-size: 12px; }
.suggest .leer { padding: 11px 13px; color: var(--mute); font-size: 13px; }

/* =========================================================================
   Unfallformular — fünf Abschnitte mit Sprungnavigation

   Der Entwurf nennt feste Farbwerte für die dunkle Fassung. Übernommen
   sind Anordnung, Abstände und Verhalten; die Farben kommen aus den
   Variablen, damit der Hell-Dunkel-Umschalter auch hier greift.
   ========================================================================= */

/* Der Dialog ist ein eigenes Fenster mit fester Höhe: Kopf und Fuß
   stehen, dazwischen scrollt nur die rechte Spalte. Ohne das scrollt
   das Modal als Ganzes — dann wandert die Navigation mit nach oben
   weg und die Sprungmarken zeigen ins Leere. */
.modal.fx-modal { display: none; padding: 24px; overflow: hidden; overflow-y: hidden; }
.modal.fx-modal.open { display: flex; align-items: center; justify-content: center; }
.fx-box {
  max-width: 1120px; width: 100%;
  height: min(880px, calc(100vh - 48px));
  display: flex; flex-direction: column; overflow: hidden;
  margin: 0;
}
.fx-box .modal-head { flex: none; position: static; }
.fx-box .modal-foot { flex: none; }
.fx-body {
  display: grid; grid-template-columns: 240px 1fr;
  flex: 1; min-height: 0; padding: 0; overflow: hidden;
}

/* ---- Sprungnavigation ---- */
.fx-nav {
  background: var(--ink); border-right: 1px solid var(--line);
  padding: 16px 0; display: flex; flex-direction: column; gap: 2px;
  overflow-y: auto;
}
.fx-nav button {
  display: grid; grid-template-columns: 24px 1fr; gap: 10px;
  padding: 11px 18px; border: 0; border-left: 2px solid transparent;
  background: transparent; text-align: left; cursor: pointer;
  font-family: inherit; transition: background .14s, border-color .14s;
}
.fx-nav button:hover { background: rgba(var(--tint), .03); }
.fx-nav button.on { border-left-color: var(--gold); background: rgba(var(--tint), .05); }
.fx-nav .n { font: 600 10px/1 ui-monospace, monospace; letter-spacing: .1em; color: var(--mute-2); }
.fx-nav .t { font: 600 13px/1.2 inherit; color: var(--bone); }
.fx-nav button.fehlt .t { color: var(--bad-txt); }
.fx-nav-note {
  margin: 14px 18px 0; padding-top: 14px; border-top: 1px solid var(--line);
  font: 400 11.5px/1.5 inherit; color: var(--mute-2);
}
.fx-nav-note b { color: var(--gold); font-weight: 400; }

/* ---- Formularspalte ---- */
.fx-form { overflow-y: auto; padding: 0 26px 30px; position: relative; }
.fx-sec { padding: 24px 0 26px; border-bottom: 1px solid var(--line-soft); }
.fx-sec:last-child { border-bottom: 0; }
.fx-kick {
  display: flex; align-items: center; gap: 12px; margin-bottom: 16px;
  font: 600 10px/1 ui-monospace, monospace; letter-spacing: .18em;
  text-transform: uppercase; color: var(--gold-ink);
}
.fx-kick::after { content: ''; flex: 1; height: 1px; background: var(--line); }

.fx-row { display: grid; gap: 16px; margin-bottom: 18px; }
.fx-row:last-child { margin-bottom: 0; }
.fx-2 { grid-template-columns: 1fr 1fr; }
.fx-2a { grid-template-columns: 2fr 1fr; }
.fx-2b { grid-template-columns: 1fr 2fr; }
@media (max-width: 900px) {
  .fx-body { grid-template-columns: 1fr; grid-template-rows: auto 1fr; }
  .fx-box { height: calc(100vh - 24px); }
  .modal.fx-modal { padding: 12px; }
  .fx-nav { flex-direction: row; overflow-x: auto; overflow-y: hidden; border-right: 0;
    flex: none;
    border-bottom: 1px solid var(--line); padding: 0; }
  .fx-nav button { border-left: 0; border-bottom: 2px solid transparent;
    grid-template-columns: 1fr; white-space: nowrap; }
  .fx-nav button.on { border-left-color: transparent; border-bottom-color: var(--gold); }
  .fx-nav-note { display: none; }
  .fx-2, .fx-2a, .fx-2b { grid-template-columns: 1fr; }
  .fx-form { padding: 0 16px 24px; }
}

/* ---- Datum und Uhrzeit in einem Rahmen ---- */
.fx-when {
  display: flex; align-items: stretch;
  border: 1px solid var(--line); border-radius: var(--r-md);
  background: var(--ink-2); overflow: hidden;
}
.fx-when input { border: 0; background: transparent; border-radius: 0; }
.fx-when .sep { width: 1px; background: var(--line); flex: none; }
.fx-when input[type=time] { width: 96px; flex: none; }

/* ---- Segmentierte Auswahl (Schuldfrage) ---- */
.fx-seg { display: flex; gap: 6px; flex-wrap: wrap; }
.fx-seg button {
  padding: 8px 13px; border-radius: var(--r-md); cursor: pointer;
  font: 600 12.5px/1 inherit;
  background: var(--ink-2); border: 1px solid var(--line); color: var(--txt-2);
  transition: background .14s, border-color .14s, color .14s;
}
.fx-seg button:hover { background: rgba(var(--tint), .05); border-color: var(--line); }
.fx-seg button.on { background: var(--gold); border-color: var(--gold); color: var(--on-gold); }

/* ---- Bedingter Block, eingerückt mit Kante ---- */
.fx-cond {
  margin: 12px 0 0 30px; padding-left: 16px;
  border-left: 2px solid var(--gold);
}
.fx-cond.hide { display: none; }
.fx-quote {
  margin-top: 12px; padding: 12px; background: var(--ink-3);
  border: 1px solid var(--line); border-radius: var(--r-md);
  display: grid; grid-template-columns: auto 120px; gap: 12px; align-items: center;
}
.fx-quote .txt { font-size: 12.5px; color: var(--txt-2); }

/* ---- Karte mit Kopfzeile (Schadenshöhe) ---- */
.fx-card { border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; }
.fx-card-head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 9px 13px; background: var(--ink-3); border-bottom: 1px solid var(--line);
  font: 600 10px/1 ui-monospace, monospace; letter-spacing: .18em;
  text-transform: uppercase; color: var(--gold-ink);
}
.fx-card-head span { font: 400 11.5px/1 inherit; letter-spacing: 0;
  text-transform: none; color: var(--mute); }
.fx-card-body { padding: 14px 13px; display: grid; gap: 14px; }
.fx-calc { display: grid; grid-template-columns: 1fr 110px 1fr; gap: 14px; align-items: end; }
.fx-out {
  padding: 9px 11px; border: 1px solid var(--line); border-radius: var(--r-md);
  background: var(--ink); font: 600 14px/1.4 ui-monospace, monospace; color: var(--gold-ink);
}
.fx-bilanz {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 11px 12px; background: var(--ink-3); border: 1px solid var(--line);
  border-radius: var(--r-md);
}
.fx-bilanz .k { font: 600 10px/1 ui-monospace, monospace; letter-spacing: .18em;
  text-transform: uppercase; color: var(--gold-ink); }
.fx-bilanz .v { font: 600 18px/1 ui-monospace, monospace; color: var(--bone); }

/* ---- Fotos vorher/nachher mit Umschalter ---- */
.fx-photos { border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; }
.fx-tabs {
  display: flex; align-items: center; gap: 0;
  background: var(--ink-3); border-bottom: 1px solid var(--line);
}
.fx-tabs button {
  display: flex; align-items: center; gap: 7px;
  padding: 11px 14px; border: 0; background: transparent; cursor: pointer;
  font: 600 12.5px/1 inherit; color: var(--mute);
  border-bottom: 2px solid transparent; transition: color .14s, border-color .14s;
}
.fx-tabs button.on { color: var(--bone); border-bottom-color: var(--gold); }
.fx-tabs .cnt {
  font: 600 10px/1 ui-monospace, monospace; padding: 3px 6px; border-radius: 2px;
  background: rgba(var(--tint), .07); color: var(--mute-2);
}
.fx-tabs button.on .cnt.voll { background: var(--gold); color: var(--on-gold); }
.fx-tabs .cnt.voll { background: rgba(var(--gold-rgb), .18); color: var(--gold-ink); }
.fx-tabs .hint { margin-left: auto; padding-right: 13px;
  font: 400 11.5px/1 inherit; color: var(--mute-2); }
.fx-photos-body { padding: 13px; display: grid; gap: 10px; }
.fx-galerie-zeile {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 11px 12px; background: var(--ink-3); border: 1px solid var(--line);
  border-radius: var(--r-md); cursor: pointer;
}
.fx-galerie-zeile:hover { background: rgba(var(--tint), .05); }
.fx-galerie-zeile b { font-size: 13px; color: var(--bone); }
.fx-galerie-zeile span { font: 600 11.5px/1 inherit; color: var(--gold-ink); }
.fx-leer { font: 400 11.5px/1 inherit; color: var(--mute-2); }

/* =========================================================================
   Kalender für Datumsfelder

   Der eingebaute Kalender der Browser sieht auf jedem System anders aus
   und lässt sich nicht gestalten. Deshalb ein eigener: gleiche Optik auf
   allen Geräten, deutsche Schreibweise, Woche beginnt am Montag.
   ========================================================================= */
.dp-wrap { position: relative; display: block; }

/* Das ursprüngliche Feld bleibt bestehen — es trägt weiterhin den Wert
   und die Kennung, auf die der übrige Code zugreift. Nur sichtbar ist es
   nicht mehr. */
.dp-wrap > input[type="date"],
.dp-wrap > input[type="month"] {
  /* Das ursprüngliche Feld bleibt für den Wert bestehen, ist aber nicht
     mehr sichtbar — sonst stünden beide übereinander. */
  position: absolute; width: 1px; height: 1px;
  opacity: 0; pointer-events: none; overflow: hidden;
  clip-path: inset(50%);
}

.dp-field {
  display: flex; align-items: center; gap: 8px; width: 100%;
  padding: 9px 11px; cursor: pointer;
  border: 1px solid var(--line); border-radius: var(--r-md);
  background: var(--ink-2); color: var(--bone);
  font-size: 14px; font-family: inherit;
  transition: border-color .15s;
}
.dp-field:hover { border-color: rgba(var(--tint), .22); }
.dp-field.on { border-color: var(--gold); }
.dp-field .txt { flex: 1; text-align: left; }
.dp-field .txt.leer { color: var(--mute-2); }
.dp-field svg { width: 16px; height: 16px; flex: none;
  stroke: var(--mute); fill: none; stroke-width: 1.6; }

/* ---- Aufklappender Kalender ---- */
.dp-pop {
  position: absolute; z-index: 400; top: calc(100% + 6px); left: 0;
  width: 268px; padding: 14px;
  background: var(--ink-2); border: 1px solid var(--line);
  border-radius: var(--r-lg); box-shadow: var(--shadow-2);
}
.dp-pop.oben { top: auto; bottom: calc(100% + 6px); }
.dp-pop.rechts { left: auto; right: 0; }

.dp-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 12px;
}
.dp-title {
  font-size: 15px; font-weight: 600; color: var(--bone);
  border: 0; background: transparent; cursor: pointer; padding: 4px 6px;
  border-radius: var(--r-sm); font-family: inherit;
}
.dp-title:hover { background: rgba(var(--tint), .05); }
.dp-nav { display: flex; gap: 2px; }
.dp-nav button {
  width: 28px; height: 28px; border: 0; border-radius: 50%;
  background: transparent; color: var(--mute); cursor: pointer;
  display: grid; place-items: center; transition: background .14s, color .14s;
}
.dp-nav button:hover { background: rgba(var(--tint), .07); color: var(--bone); }
.dp-nav svg { width: 15px; height: 15px; stroke: currentColor; fill: none; stroke-width: 1.8; }

.dp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.dp-wd {
  text-align: center; padding: 6px 0 8px;
  font: 500 11px/1 inherit; color: var(--mute-2);
}
.dp-day {
  height: 32px; border: 0; border-radius: 50%;
  background: transparent; color: var(--txt-2); cursor: pointer;
  font: 400 13px/1 inherit; font-family: inherit;
  transition: background .12s, color .12s;
}
.dp-day:hover { background: rgba(var(--tint), .07); color: var(--bone); }
.dp-day.aus { color: var(--mute-2); opacity: .45; }
.dp-day.heute { font-weight: 700; color: var(--gold-ink); }
.dp-day.gewaehlt {
  background: var(--gold); color: var(--on-gold); font-weight: 600;
}
.dp-day.gewaehlt:hover { background: var(--gold); }
.dp-day[disabled] { opacity: .2; cursor: default; }
.dp-day[disabled]:hover { background: transparent; }

/* Monats- und Jahreswahl beim Klick auf die Überschrift */
.dp-liste { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; }
.dp-liste button {
  padding: 9px 4px; border: 0; border-radius: var(--r-md);
  background: transparent; color: var(--txt-2); cursor: pointer;
  font: 400 13px/1 inherit; font-family: inherit;
}
.dp-liste button:hover { background: rgba(var(--tint), .07); color: var(--bone); }
.dp-liste button.on { background: var(--gold); color: var(--on-gold); font-weight: 600; }

.dp-foot {
  display: flex; justify-content: space-between; gap: 8px;
  margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--line-soft);
}
.dp-foot button {
  border: 0; background: transparent; cursor: pointer; padding: 4px 6px;
  font: 500 12.5px/1 inherit; font-family: inherit; color: var(--mute);
  border-radius: var(--r-sm);
}
.dp-foot button:hover { color: var(--gold-ink); background: rgba(var(--tint), .05); }

/* In der Datum-Uhrzeit-Kombination sitzt das Feld ohne eigenen Rahmen */
.fx-when .dp-wrap { flex: 1; }
.fx-when .dp-field { border: 0; background: transparent; border-radius: 0; }

/* ---- Anteilsstreifen ----
   Ein waagerechter Balken statt eines Tortendiagramms: Anteile lassen
   sich an der Länge leichter vergleichen als an Kreisausschnitten. */
.split {
  display: flex; height: 12px; border-radius: 3px; overflow: hidden;
  background: rgba(var(--tint), .05);
}
.split-part {
  height: 100%;
  transform-origin: left;
  animation-name: fill-auf;
  animation-duration: .55s;
  animation-timing-function: cubic-bezier(.22,.9,.3,1);
  animation-fill-mode: backwards;
}
.split-part:nth-child(2) { animation-delay: .12s; }
.split-part:nth-child(3) { animation-delay: .24s; }

.split-legende {
  display: flex; flex-wrap: wrap; gap: 6px 20px; margin-top: 12px;
  font-size: 12.5px; color: var(--txt-2);
}
.split-legende span { display: flex; align-items: baseline; gap: 6px; }
.split-legende i {
  width: 9px; height: 9px; border-radius: 2px; flex: none;
  transform: translateY(1px);
}
.split-legende b { color: var(--bone); font-weight: 600; }

/* ---- Zeitraum im Kalender ----
   Start und Ende werden nacheinander angeklickt. Zwischen dem ersten
   Klick und dem zweiten zeigt die Spur unter dem Mauszeiger, welcher
   Zeitraum entstünde — ohne sie klickt man ins Blaue. */
.dp-pop.bereich { width: 292px; }
.dp-pop.bereich .dp-grid { gap: 0 0; }
.dp-pop.bereich .dp-day {
  border-radius: 0; position: relative; width: 100%;
}
/* Die Tage dazwischen bekommen einen durchgehenden Hintergrund */
.dp-day.zwischen { background: rgba(var(--tint), .07); color: var(--bone); }
.dp-day.zwischen:hover { background: rgba(var(--tint), .12); }
/* Vorschau während der Auswahl — gedämpfter als die feste Spanne */
.dp-day.vorschau { background: rgba(var(--tint), .05); color: var(--txt-2); }
.dp-day.start, .dp-day.ende {
  background: var(--gold); color: var(--on-gold); font-weight: 600;
}
.dp-day.start:hover, .dp-day.ende:hover { background: var(--gold); }
.dp-day.start { border-radius: 50% 0 0 50%; }
.dp-day.ende  { border-radius: 0 50% 50% 0; }
.dp-day.start.ende { border-radius: 50%; }
/* Randtage einer Zeile sollen die Spur nicht über den Rand ziehen */
.dp-pop.bereich .dp-day:nth-child(7n+1) { border-radius: 50% 0 0 50%; }
.dp-pop.bereich .dp-day:nth-child(7n)   { border-radius: 0 50% 50% 0; }
.dp-pop.bereich .dp-day.start:nth-child(7n) { border-radius: 50%; }
.dp-pop.bereich .dp-day.ende:nth-child(7n+1) { border-radius: 50%; }

.dp-hinweis {
  margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--line-soft);
  font-size: 12px; color: var(--mute); text-align: center;
}
.dp-hinweis b { color: var(--bone); font-weight: 600; }

/* Schnellwahl im Zeitraum-Kalender */
.dp-schnell {
  display: flex; flex-wrap: wrap; gap: 4px;
  margin-bottom: 12px; padding-bottom: 12px;
  border-bottom: 1px solid var(--line-soft);
}
.dp-schnell button {
  padding: 5px 9px; border: 1px solid var(--line); border-radius: 999px;
  background: transparent; color: var(--mute); cursor: pointer;
  font: 500 11.5px/1 inherit; font-family: inherit;
}
.dp-schnell button:hover { border-color: var(--gold); color: var(--gold-ink); }

/* ---- Kennzahl mit Vergleich zur Vorperiode ---- */
.stat-vgl {
  margin-top: 6px; font-size: 12px; line-height: 1.4; color: var(--mute);
}
.stat-vgl .hoch   { color: var(--ok); }
.stat-vgl .runter { color: var(--bad-txt); }
.stat-e { font-size: 12px; font-weight: 500; color: var(--mute); margin-left: 4px; }

/* ---- Tagesverlauf: zwei Balken je Tag ----
   Der blasse Balken ist der Vorzeitraum. Nebeneinander statt übereinander,
   weil man Höhen nebeneinander leichter vergleicht als gestapelt. */
.tagbars {
  display: flex; align-items: flex-end; gap: 3px;
  padding: 16px 14px 8px; height: 150px; overflow-x: auto;
}
.tb-col {
  flex: 1; min-width: 22px; height: 100%;
  display: flex; flex-direction: column; justify-content: flex-end;
}
.tb-col.we .tb-lbl b { color: var(--gold-ink); }
.tb-paar { display: flex; align-items: flex-end; gap: 2px; height: 100%; }
.tb-bar {
  flex: 1; border-radius: 3px 3px 0 0; min-height: 2px;
  transform-origin: bottom;
  animation-name: bar-auf; animation-duration: .5s;
  animation-timing-function: cubic-bezier(.22,.9,.3,1);
  animation-fill-mode: backwards;
}
.tb-bar.voll  { background: var(--gold); }
.tb-bar.blass { background: rgba(var(--tint), .16); }
.tb-col:nth-child(2n) .tb-bar  { animation-delay: .03s }
.tb-col:nth-child(3n) .tb-bar  { animation-delay: .06s }
.tb-col:nth-child(5n) .tb-bar  { animation-delay: .09s }
.tb-col:nth-child(7n) .tb-bar  { animation-delay: .12s }
.tb-lbl {
  margin-top: 7px; text-align: center; white-space: nowrap;
  font: 400 9.5px/1.35 inherit; color: var(--mute-2);
}
.tb-lbl b { display: block; font-weight: 600; color: var(--mute); }

/* Legende in der Kopfzeile eines Diagramms */
.legende { display: flex; gap: 14px; font-size: 12px; color: var(--mute); }
.legende span { display: flex; align-items: center; gap: 6px; }
.legende i { width: 10px; height: 10px; border-radius: 2px; }
.legende i.voll  { background: var(--gold); }
.legende i.blass { background: rgba(var(--tint), .16); }

/* ---- Liniendiagramm ---- */
.lc-box { display: flex; gap: 10px; padding: 14px 14px 6px; }
.lc-flaechenteil { flex: 1; min-width: 0; }
.lc {
  display: block; width: 100%; height: 132px;
  overflow: visible;
}
.lc-box[style*="--lc-h"] .lc,
.lc-box[style*="--lc-h"] .lc-y { height: var(--lc-h); }
.lc-raster {
  stroke: var(--line-soft); stroke-width: .35; vector-effect: non-scaling-stroke;
}
.lc-linie {
  fill: none; stroke-width: 1.6; vector-effect: non-scaling-stroke;
  stroke-linecap: round; stroke-linejoin: round;
  /* Die Kurve zeichnet sich beim Erscheinen — man folgt ihr dann
     automatisch von links nach rechts. */
  stroke-dasharray: 1000; stroke-dashoffset: 1000;
  animation-name: lc-zeichnen;
  animation-duration: 1.1s;
  animation-timing-function: cubic-bezier(.3,.8,.4,1);
  animation-fill-mode: forwards;
}
@keyframes lc-zeichnen { to { stroke-dashoffset: 0; } }
.lc-flaeche {
  animation-name: lc-blenden; animation-duration: .9s;
  animation-fill-mode: backwards; animation-delay: .25s;
}
@keyframes lc-blenden { from { opacity: 0; } }

.lc-y {
  display: flex; flex-direction: column; justify-content: space-between;
  height: 132px; flex: none;
  font: 500 10px/1 ui-monospace, monospace; color: var(--mute-2);
  text-align: right; min-width: 34px;
}
.lc-x {
  display: flex; margin-top: 7px;
  font: 400 10px/1 inherit; color: var(--mute-2);
}
.lc-x span { flex: 1; }

.lc-legende {
  display: flex; flex-wrap: wrap; gap: 6px 16px;
  padding: 4px 14px 14px; font-size: 12px; color: var(--mute);
}
.lc-legende span { display: flex; align-items: center; gap: 6px; }
.lc-legende i { width: 9px; height: 9px; border-radius: 50%; flex: none; }

/* Kacheln nebeneinander, wie im Vorbild */
.dia-raster { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-bottom: 16px; }
.dia-raster .panel { margin: 0; }
.dia-raster .panel-head { padding: 13px 14px 0; border: 0; }
.dia-raster .panel-head b { font-size: 13.5px; }
@media (max-width: 1000px) { .dia-raster { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px)  { .dia-raster { grid-template-columns: 1fr; } }

/* ---- Monatswähler ---- */
.dp-pop.monate { width: 250px; }
.dp-monate { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2px; }
.dp-mon {
  padding: 11px 4px; border: 0; border-radius: var(--r-md);
  background: transparent; color: var(--txt-2); cursor: pointer;
  font: 400 13px/1 inherit; font-family: inherit;
  transition: background .12s, color .12s;
}
.dp-mon:hover { background: rgba(var(--tint), .07); color: var(--bone); }
.dp-mon.heute { font-weight: 700; color: var(--gold-ink); }
.dp-mon.gewaehlt { background: var(--gold); color: var(--on-gold); font-weight: 600; }
/* Zeitraum: durchgehende Spur wie im Tageskalender */
.dp-pop.monate.bereich .dp-monate { gap: 0; }
.dp-pop.monate.bereich .dp-mon { border-radius: 0; }
.dp-mon.zwischen { background: rgba(var(--tint), .07); color: var(--bone); }
.dp-mon.vorschau { background: rgba(var(--tint), .05); color: var(--txt-2); }
.dp-mon.start, .dp-mon.ende {
  background: var(--gold); color: var(--on-gold); font-weight: 600;
}
.dp-mon.start { border-radius: var(--r-md) 0 0 var(--r-md); }
.dp-mon.ende  { border-radius: 0 var(--r-md) var(--r-md) 0; }
.dp-mon.start.ende { border-radius: var(--r-md); }
.dp-pop.monate.bereich .dp-mon:nth-child(3n+1) { border-radius: var(--r-md) 0 0 var(--r-md); }
.dp-pop.monate.bereich .dp-mon:nth-child(3n)   { border-radius: 0 var(--r-md) var(--r-md) 0; }

/* Zahlenspalten dürfen nicht umbrechen und brauchen Abstand zueinander —
   sonst quetscht eine breite Textspalte sie zusammen und „Gesamt €"
   bricht mitten im Wort. */
.tbl th.num, .tbl td.num { white-space: nowrap; padding-left: 18px; }
.tbl th.num:first-child, .tbl td.num:first-child { padding-left: 12px; }
/* Lange Beschreibungen begrenzen, damit sie den Rest nicht verdrängen */
.tbl td.c-sub { max-width: 420px; }

/* ---- Hinweis auf unvollständige Zahlen ----
   Eine Zeile statt eines Textblocks: Die Warnung muss sichtbar sein,
   aber nicht die halbe Auswertung verdecken. */
.luecke {
  border: 1px solid var(--line-soft); border-radius: var(--r-md);
  background: rgba(var(--tint), .02); margin-bottom: 14px;
}
.luecke summary {
  display: flex; align-items: center; gap: 9px;
  padding: 10px 14px; cursor: pointer; list-style: none;
  font-size: 13px; color: var(--mute);
}
.luecke summary::-webkit-details-marker { display: none; }
.luecke summary svg {
  width: 15px; height: 15px; flex: none;
  stroke: var(--warn); fill: none; stroke-width: 1.6;
}
.luecke summary .mehr { margin-left: auto; color: var(--gold-ink); font-size: 12.5px; }
.luecke[open] summary .mehr::after { content: ' ▴'; }
.luecke summary .mehr::after { content: ' ▾'; }
.luecke-txt {
  padding: 0 14px 12px 38px; font-size: 12.5px; color: var(--mute); line-height: 1.55;
}
.luecke-txt p { margin: 0 0 8px; }
.luecke-txt p:last-child { margin-bottom: 0; }
.luecke-txt b { color: var(--txt-2); }


/* =========================================================================
   Vorgemerkte Wechsel — chronologische Linie

   Meilensteine statt Tabellenzeilen: Die Zeit gibt die Ordnung vor, jeder
   Stichtag steht einmal da. In einer Tabelle würde derselbe Tag mehrfach
   auftauchen und man müsste die Reihenfolge aus Datumsspalten ablesen.
   ========================================================================= */
.chg-warn {
  display: flex; align-items: center; gap: 12px;
  padding: 14px 16px; margin-bottom: 16px;
  border: 1px solid rgba(192,57,43,.35); border-radius: var(--r-lg);
  background: rgba(192,57,43,.08);
  font-size: 13.5px; color: var(--txt-2); line-height: 1.5;
}
.chg-warn b { color: var(--bone); }
.chg-warn-ic { flex: none; display: grid; place-items: center; }
.chg-warn-ic svg { width: 20px; height: 20px; stroke: var(--bad); fill: none; stroke-width: 1.7; }
.chg-warn .btn { flex: none; margin-left: auto; }

/* ---- Legende, zugleich Filter ---- */
.chg-legende {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 0 20px 18px;
}
.chg-leg {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 6px 13px 6px 11px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--line); background: transparent;
  font: 500 12.5px/1 inherit; font-family: inherit; color: var(--mute);
  transition: border-color .14s, color .14s, background .14s;
}
.chg-leg::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.chg-leg.ok   { color: var(--ok); }
.chg-leg.blue { color: var(--c3); }
.chg-leg.bad  { color: var(--bad-txt); }
.chg-leg:hover { background: rgba(var(--tint), .04); }
.chg-leg.on { border-color: currentColor; background: rgba(var(--tint), .06); }
.chg-leg-clear {
  border: 0; background: transparent; cursor: pointer; font-family: inherit;
  font-size: 12.5px; color: var(--gold-ink); padding: 6px 4px;
}
.chg-legende .chg-nur { margin: 0 0 0 6px; }
.chg-legende .chg-such { margin: 0 0 0 auto; max-width: 240px; }
@media (max-width: 700px) {
  .chg-legende .chg-such { margin-left: 0; max-width: none; flex: 1 1 100%; }
}

/* ---- Die Linie ---- */
.chg-linie { list-style: none; margin: 0; padding: 0 20px 22px 20px; position: relative; }
.chg-punkt { position: relative; padding: 0 0 22px 30px; }
/* Durchgehende Linie zwischen den Marken */
.chg-punkt::before {
  content: ''; position: absolute; left: 5px; top: 16px; bottom: -6px;
  width: 1px; background: var(--line);
}
.chg-punkt:last-child::before { display: none; }
.chg-punkt:last-child { padding-bottom: 0; }

.chg-marke {
  position: absolute; left: 0; top: 6px;
  width: 11px; height: 11px; border-radius: 3px;
  background: var(--line); border: 2px solid var(--ink-2);
  box-sizing: content-box;
}
/* Der nächste anstehende Termin ist der, auf den es ankommt */
.chg-punkt.naechst .chg-marke { background: var(--gold); }
.chg-punkt.vorbei .chg-marke { background: var(--mute-2); opacity: .5; }
.chg-punkt.vorbei .chg-tag b { color: var(--mute); }

.chg-tag { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.chg-tag b { font-size: 14px; color: var(--bone); font-weight: 600; }
.chg-tag-meta { font-size: 12.5px; color: var(--mute-2); }

/* ---- Karten je Vorgang ---- */
.chg-karten { display: grid; gap: 8px; }
.chg-karte {
  display: flex; align-items: center; gap: 14px;
  padding: 12px 14px 12px 15px;
  border: 1px solid var(--line-soft); border-left: 3px solid var(--line);
  border-radius: var(--r-md); background: rgba(var(--tint), .02);
  cursor: pointer; transition: background .14s, border-color .14s;
}
.chg-karte:hover { background: rgba(var(--tint), .05); }
.chg-karte.ok   { border-left-color: var(--ok); }
.chg-karte.blue { border-left-color: var(--c3); }
.chg-karte.bad  { border-left-color: var(--bad); }
.chg-karte-txt { flex: 1; min-width: 0; }
.chg-satz { font-size: 14px; color: var(--txt-2); line-height: 1.5; }
.chg-satz b { color: var(--bone); font-weight: 600; }
.chg-verb { color: var(--mute); }
.chg-slot { color: var(--mute); font-size: 13px; }
.chg-grau { color: var(--mute); }
.chg-detail { margin-top: 5px; font-size: 12.5px; color: var(--mute); line-height: 1.5; }
.chg-detail.warn { color: var(--warn); }
.chg-karte .btn { flex: none; }
@media (max-width: 620px) {
  .chg-karte { flex-wrap: wrap; }
  .chg-karte .btn { margin-left: auto; }
}

/* =========================================================================
   Zahlen in Tabellen

   Vorher standen in einer Spalte fette 15-Punkt-Beträge neben normalen
   13-Punkt-Zahlen — beim Überfliegen einer Liste erzeugt das Unruhe und
   suggeriert eine Wichtigkeit, die die Spalte nicht hat.

   Einheitlich: eine Größe, ein Gewicht, gleiche Ziffernbreite. Die
   Hausschrift statt der Monospace — sie hat feste Ziffernbreiten und
   fügt sich besser ein. Kennzeichen und Aktenzeichen bleiben Monospace,
   dort trägt die Technik-Anmutung etwas bei.
   ========================================================================= */
.tbl td.mono,
.tbl td.num,
.tbl td .mono {
  font-variant-numeric: tabular-nums;
  font-size: 13.5px;
  font-weight: 400;
  letter-spacing: 0;
  color: var(--txt-2);
}
/* Die führende Zahl einer Zeile darf sich abheben — aber über das
   Gewicht, nicht über die Größe. */
.tbl td.c-side.mono,
.tbl td.c-side.num {
  font-weight: 600;
  color: var(--bone);
}
/* Fett-Auszeichnungen innerhalb von Zahlenzellen zurücknehmen: Sie
   stammen aus einer Zeit, in der jede Spalte um Aufmerksamkeit rang. */
.tbl td.mono b,
.tbl td.num b,
.tbl td .mono b { font-weight: 600; font-size: inherit; }

/* Kennzeichen: siehe eigenen Abschnitt weiter oben — Hausschrift ohne
   Kasten. Nur Fahrgestellnummern und Dateinamen bleiben technisch. */

/* Kennzahlen in Kopfleisten bleiben groß — dort ist die Zahl die
   Aussage, nicht eine von vielen in einer Spalte. */
.metric .m-val, .stats .v, .kpi .n, .fx-out, .fx-bilanz .v { font-variant-numeric: tabular-nums; }

/* Modell unter dem Kennzeichen: eng gesetzt, es ist eine Nebenangabe */
.tbl .c-main .sub, .tbl .plate + .sub { margin-top: 1px; line-height: 1.3; }
/* Marken innerhalb einer Zelle brauchen keinen eigenen Absatz */
.tbl td .tag { margin-top: 2px; }

/* ---- Export-Liste in den Einstellungen ---- */
.export-liste { display: grid; gap: 2px; margin-top: 12px; }
.export-zeile {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 11px 12px; border-radius: var(--r-md);
}
.export-zeile:nth-child(odd) { background: rgba(var(--tint), .025); }
.export-zeile b { display: block; font-size: 14px; color: var(--bone); font-weight: 600; }
.export-zeile small { color: var(--mute); font-size: 12.5px; }
.export-knoepfe { display: flex; gap: 6px; flex: none; }
@media (max-width: 560px) {
  .export-zeile { flex-wrap: wrap; }
  .export-knoepfe, .export-zeile > .btn { margin-left: auto; }
}

/* ---- Markenzeichen ----
   Der Korpus des A folgt dem Thema: auf dunklem Grund hell, auf hellem
   dunkel. Sonst verschwindet er in der einen oder anderen Fassung.
   Der blaue Balken bleibt in beiden gleich — er ist die Marke. */
.mark {
  background: transparent !important;
  display: grid; place-items: center;
}
.mark svg { width: 26px; height: 26px; stroke: none; }
.mark .a-korpus { fill: var(--bone); }
.mark .a-balken { fill: #1652F0; }
html[data-theme="light"] .mark .a-korpus { fill: #1B2230; }

/* Spaltenabstände der Unfallliste: Statusspalten brauchen Luft zueinander,
   sonst berühren sich Punkt und Etikett der Nachbarspalte. */
.tbl .col-tail { padding-right: 22px; }
.tbl .col-mwst { padding-left: 14px; padding-right: 14px; }
.tbl th.col-mwst, .tbl td.col-mwst { text-align: center; }
/* Etiketten in engen Spalten nicht umbrechen lassen */
.tbl .col-tail .tag, .tbl .col-tail .dot-status { white-space: nowrap; }

/* ---- Gutachten auslesen ---- */
.drop-ki { border-color: rgba(var(--gold-rgb), .4); background: rgba(var(--gold-rgb), .05); }
.drop-ki:hover, .drop-ki.an { background: rgba(var(--gold-rgb), .12); border-color: var(--gold); }
.drop-ki b { color: var(--gold-ink); }

.gut-vor {
  margin-top: 10px; padding: 12px 13px;
  border: 1px solid var(--line); border-radius: var(--r-md);
  background: rgba(var(--tint), .03);
}
.gut-vor-kopf {
  font: 600 10px/1 ui-monospace, monospace; letter-spacing: .16em;
  text-transform: uppercase; color: var(--gold-ink); margin-bottom: 10px;
}
.gut-zeile {
  display: flex; justify-content: space-between; gap: 14px;
  padding: 5px 0; font-size: 13px; border-bottom: 1px solid var(--line-soft);
}
.gut-zeile:last-of-type { border-bottom: 0; }
.gut-zeile span { color: var(--mute); flex: none; }
.gut-zeile b { color: var(--bone); font-weight: 600; text-align: right;
  overflow: hidden; text-overflow: ellipsis; }
.gut-notiz {
  margin-top: 8px; padding: 11px 13px; border-radius: var(--r-md);
  background: rgba(var(--tint), .02); font-size: 12.5px; color: var(--mute);
}
.gut-notiz b { display: block; color: var(--txt-2); margin-bottom: 6px;
  font-size: 12px; font-weight: 600; }
.gut-notiz div { padding: 2px 0; }

/* ---- Auswahl bei mehrdeutiger Zuordnung ---- */
.gut-wahl { display: grid; gap: 6px; margin-top: 10px; }
.gut-kand {
  display: grid; grid-template-columns: auto auto 1fr auto; gap: 4px 12px;
  align-items: baseline; text-align: left; width: 100%;
  padding: 11px 13px; cursor: pointer;
  border: 1px solid var(--line); border-radius: var(--r-md);
  background: rgba(var(--tint), .02); font-family: inherit;
  transition: border-color .14s, background .14s;
}
.gut-kand:hover { border-color: var(--gold); background: rgba(var(--gold-rgb), .07); }
.gut-kand b { font-size: 14px; color: var(--bone); font-variant-numeric: tabular-nums; }
.gut-kand .ort { color: var(--txt-2); font-size: 13px; }
.gut-kand .betrag { color: var(--mute); font-size: 13px; font-variant-numeric: tabular-nums; }
.gut-kand small { grid-column: 1 / -1; color: var(--mute-2); font-size: 12px; margin-top: 2px; }
.gut-kand.neu { border-style: dashed; }
.gut-kand.neu b { color: var(--gold-ink); }

/* Freistehender Kalender: hängt am Seitenende statt in seiner Hülle,
   damit ihn kein scrollender Bereich abschneidet. Muss über dem
   Formularfenster liegen. */
.dp-pop.frei { position: fixed; z-index: 500; }
.dp-pop.frei.oben, .dp-pop.frei.rechts { top: auto; bottom: auto; left: auto; right: auto; }

/* Ablagefeld beim Darüberziehen hervorheben */
#gutDrop.an .panel {
  border-color: var(--gold);
  background: rgba(var(--gold-rgb), .08);
}

/* ---- Auswahlfeld mit Filterzeile ---- */
.sel-such { display: grid; gap: 5px; }
.sel-such-feld {
  padding: 7px 10px; font-size: 12.5px;
  border: 1px solid var(--line-soft); border-radius: var(--r-sm);
  background: rgba(var(--tint), .02); color: var(--txt-2);
}
.sel-such-feld::placeholder { color: var(--mute-2); }
.sel-such-feld:focus { outline: none; border-color: var(--gold); }
.sel-such select[size]:not([size="0"]) {
  height: auto; padding: 4px; background-image: none;
}

/* ---- Historie bei Wechsel & Ausstieg ---- */
.chg-hist {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 0 20px 14px;
  font-size: 12.5px; color: var(--mute-2);
}
.chg-hist-an b { color: var(--txt-2); font-weight: 600; }
.chg-hist-btn {
  border: 0; background: transparent; cursor: pointer; font-family: inherit;
  font-size: 12.5px; color: var(--gold-ink); padding: 4px 2px;
}
.chg-hist-btn:hover { text-decoration: underline; }
.chg-hist-feld {
  display: flex; align-items: center; gap: 10px; flex-basis: 100%;
  padding-top: 8px;
}
.chg-hist-feld .lbl { margin: 0; }
.chg-hist-feld .dp-wrap { max-width: 230px; }

/* ---- Fahrerrangliste im Cockpit ---- */
.rang { padding: 6px 8px 10px; display: grid; gap: 2px; }
.rang-zeile {
  display: grid;
  grid-template-columns: 26px 1fr auto;
  grid-template-areas: "n name wert" ". neben abw";
  gap: 2px 10px; align-items: baseline;
  width: 100%; text-align: left; cursor: pointer;
  padding: 10px 10px; border: 0; border-radius: var(--r-md);
  background: transparent; font-family: inherit;
  transition: background .14s;
}
.rang-zeile:hover { background: rgba(var(--tint), .05); }
.rang-n {
  grid-area: n; font: 600 12px/1 ui-monospace, monospace; color: var(--mute-2);
}
.rang-name {
  grid-area: name; font-size: 14px; font-weight: 600; color: var(--bone);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rang-stern {
  font-style: normal; font-size: 11.5px; font-weight: 500;
  color: var(--mute); margin-left: 7px;
}
.rang-wert {
  grid-area: wert; text-align: right; white-space: nowrap;
  font-size: 15px; font-weight: 700; color: var(--bone);
  font-variant-numeric: tabular-nums;
}
.rang-wert i { font-style: normal; font-size: 11px; font-weight: 400;
  color: var(--mute-2); margin-left: 5px; }
.rang-neben {
  grid-area: neben; font-size: 12px; color: var(--mute);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rang-abw {
  grid-area: abw; text-align: right; white-space: nowrap;
  font-size: 12px; font-weight: 600; font-variant-numeric: tabular-nums;
}
.rang-abw.hoch   { color: var(--ok); }
.rang-abw.runter { color: var(--bad-txt); }

.rang-fuss {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-top: 10px; padding: 0 2px;
  font-size: 12px; color: var(--mute-2); line-height: 1.5;
}
.rang-fuss b { color: var(--mute); font-weight: 600; }
.rang-tage { margin-left: auto; display: flex; gap: 4px; flex: none; }
.rang-tage button {
  border: 1px solid var(--line); border-radius: 999px;
  background: transparent; color: var(--mute); cursor: pointer;
  padding: 4px 11px; font: 500 11.5px/1 inherit; font-family: inherit;
}
.rang-tage button:hover { border-color: var(--gold); color: var(--gold-ink); }
.rang-tage button.on { background: var(--gold); border-color: var(--gold); color: var(--on-gold); }
@media (max-width: 700px) { .rang-tage { margin-left: 0; } }

/* ---- Suchzeile mit Umschalter bei den Fahrern ---- */
.drv-suchzeile {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  margin-bottom: 14px;
}
.drv-suchzeile .searchbar { flex: 1; min-width: 220px; margin: 0; }
.drv-inaktiv { margin: 0; flex: none; white-space: nowrap; }

/* Umschalter in der Rangliste */
.rang-art { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 10px; }
.rang-art button {
  border: 1px solid var(--line); border-radius: 999px;
  background: transparent; color: var(--mute); cursor: pointer;
  padding: 5px 12px; font: 500 12px/1 inherit; font-family: inherit;
  transition: border-color .14s, color .14s, background .14s;
}
.rang-art button:hover { border-color: var(--gold); color: var(--gold-ink); }
.rang-art button.on { background: var(--gold); border-color: var(--gold); color: var(--on-gold); }
/* Hält die Kopfzeile der rechten Kachel auf gleicher Höhe */
.rang-art-platz { height: 37px; }
@media (max-width: 760px) { .rang-art-platz { display: none; } }

/* =========================================================================
   Live-Karte der Flotte
   ========================================================================= */
.karte-panel { position: relative; overflow: hidden; }
.karte-panel .panel-head { position: relative; }

#karteFlaeche {
  height: 420px;
  background: var(--ink-3);
  transition: height .2s;
}
/* Sanft abdunkeln statt schwarze Kacheln: Straßennamen bleiben lesbar,
   die Karte drängt sich im dunklen Cockpit trotzdem nicht auf. */
#karteFlaeche.dunkel .leaflet-tile-pane {
  filter: brightness(.72) saturate(.85) contrast(1.05);
}
#dashKarte.gross #karteFlaeche { height: min(78vh, 900px); }
@media (max-width: 700px) { #karteFlaeche { height: 320px; } }

/* Knöpfe oben rechts in der Kopfzeile */
.karte-knoepfe { position: absolute; top: 0; right: 0; display: flex; gap: 6px; }
.karte-btn {
  width: 32px; height: 32px; padding: 0; cursor: pointer;
  border: 1px solid var(--line); border-radius: var(--r-sm);
  background: transparent; color: var(--mute);
  font-size: 14px; line-height: 1; font-family: inherit;
  display: grid; place-items: center;
}
.karte-btn:hover { border-color: var(--gold); color: var(--gold-ink); }
.karte-btn.on { background: var(--gold); border-color: var(--gold); color: var(--on-gold); }

/* Legende unter der Karte */
.karte-legende {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  padding: 11px 16px;
  border-top: 1px solid var(--line-soft);
  font-size: 12.5px; color: var(--mute);
}
.karte-legende .kl { display: inline-flex; align-items: center; gap: 6px; }
.karte-legende .kl-p {
  width: 8px; height: 8px; border-radius: 50%; display: inline-block;
}
.kl-p.faehrt { background: #16A34A; }
/* Dieselben Farben wie die Marken auf der Karte — sonst sucht man
   in der Legende nach etwas, das dort anders aussieht. */
.kl-p.steht  { background: #F8FAFC; border: 1px solid var(--line); }
.kl-p.alt    { background: #94A3B8; }
.karte-legende .kl-stand { margin-left: auto; color: var(--mute-2); }

/* ---- Marken ----
   Runder Knopf mit Zustandszeichen, darunter das Kennzeichen auf einem
   eigenen Schild. Getrennt gelesen: Das Zeichen sagt, was das Fahrzeug
   tut, das Schild welches es ist. */
.kfz-pin {
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  transform: translate(-50%, -50%);
  cursor: pointer;
}

.kfz-pin .kreis {
  width: 30px; height: 30px; border-radius: 50%;
  display: grid; place-items: center;
  border: 3px solid #fff;
  box-shadow: 0 2px 8px rgba(0,0,0,.45);
  position: relative;
  transition: transform .12s;
}
.kfz-pin:hover .kreis { transform: scale(1.12); }
.kfz-pin .kreis svg { width: 15px; height: 15px; fill: currentColor; }

.kfz-pin .schild {
  padding: 3px 9px; border-radius: 6px;
  font: 600 11.5px/1 "Roboto", sans-serif;
  white-space: nowrap;
  background: rgba(20, 24, 30, .88);
  color: #F1F5F9;
  border: 1px solid rgba(255,255,255,.14);
  box-shadow: 0 2px 6px rgba(0,0,0,.4);
}

/* Unterwegs — kräftiges Grün, fällt auch auf dem Luftbild auf */
.kfz-pin.faehrt .kreis { background: #16A34A; color: #fff; }
.kfz-pin.faehrt .kreis::after {
  content: ''; position: absolute; inset: -6px; border-radius: 50%;
  border: 2px solid rgba(22,163,74,.55);
  animation: kfzPuls 2.2s ease-out infinite;
}

/* Steht */
.kfz-pin.steht .kreis { background: #F8FAFC; color: #475569; }

/* Signal veraltet */
.kfz-pin.alt .kreis { background: #94A3B8; color: #F1F5F9; }
.kfz-pin.alt .schild { opacity: .8; }

/* Mehrere an einem Ort */
.kfz-pin.buendel .kreis {
  background: #334155; color: #fff;
  font: 700 13px/1 "Roboto", sans-serif;
  width: 34px; height: 34px;
}
.kfz-pin.buendel.aktiv .kreis { background: #16A34A; }

@keyframes kfzPuls {
  0%   { transform: scale(1);   opacity: .8; }
  70%  { transform: scale(1.6); opacity: 0; }
  100% { transform: scale(1.6); opacity: 0; }
}

/* Im hellen Thema hebt sich das dunkle Schild gut ab — auf dem
   Luftbild ohnehin. Nichts zu ändern. */

/* ---- Sprechblase ---- */
.leaflet-container { font-family: "Roboto", sans-serif; }
.leaflet-popup-content-wrapper {
  border-radius: var(--r-md);
  background: var(--panel, #171B21);
  color: var(--bone, #E9ECEF);
  box-shadow: 0 8px 24px rgba(0,0,0,.5);
}
.leaflet-popup-tip { background: var(--panel, #171B21); }
.leaflet-popup-content { margin: 12px 14px; font-size: 13px; line-height: 1.5; }
.leaflet-popup-close-button { color: var(--mute) !important; }

.kpop { display: grid; gap: 2px; min-width: 130px; }
.kpop b { font-size: 14px; font-weight: 700; }
.kpop .m, .kpop .d { color: var(--mute); font-size: 12px; }
.kpop .z { margin-top: 4px; font-weight: 600; font-size: 12.5px; }
.kpop .z.faehrt { color: #22C55E; }
.kpop .z.steht  { color: var(--mute); }
.kpop .z.alt    { color: var(--mute-2); }
.kpop .t { color: var(--mute-2); font-size: 11.5px; }
.kpop .l { font-size: 12.5px; color: var(--txt-2); padding-top: 2px; }

/* Bedienelemente der Karte ans Thema anpassen */
.leaflet-bar a {
  background: var(--panel, #171B21) !important;
  color: var(--bone, #E9ECEF) !important;
  border-color: var(--line, #2A3038) !important;
}
.leaflet-bar a:hover { background: var(--ink-2, #12161B) !important; }
.leaflet-control-attribution {
  background: rgba(0,0,0,.55) !important;
  color: #9AA3AF !important; font-size: 10.5px !important;
}
.leaflet-control-attribution a { color: #C3CCD6 !important; }

html[data-theme="light"] .leaflet-popup-content-wrapper,
html[data-theme="light"] .leaflet-popup-tip { background: #fff; color: #1B2230; }
html[data-theme="light"] .leaflet-control-attribution {
  background: rgba(255,255,255,.75) !important; color: #555 !important;
}

/* ---- Fahrerrangliste im Cockpit ---- */
.rang { padding: 6px 8px 10px; display: grid; gap: 2px; }
.rang-zeile {
  display: grid;
  grid-template-columns: 26px 1fr auto;
  grid-template-areas: "n name wert" ". neben abw";
  gap: 2px 10px; align-items: baseline;
  width: 100%; text-align: left; cursor: pointer;
  padding: 10px 10px; border: 0; border-radius: var(--r-md);
  background: transparent; font-family: inherit;
  transition: background .14s;
}
.rang-zeile:hover { background: rgba(var(--tint), .05); }
.rang-n {
  grid-area: n; font: 600 12px/1 ui-monospace, monospace; color: var(--mute-2);
}
.rang-name {
  grid-area: name; font-size: 14px; font-weight: 600; color: var(--bone);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rang-stern {
  font-style: normal; font-size: 11.5px; font-weight: 500;
  color: var(--mute); margin-left: 7px;
}
.rang-wert {
  grid-area: wert; text-align: right; white-space: nowrap;
  font-size: 15px; font-weight: 700; color: var(--bone);
  font-variant-numeric: tabular-nums;
}
.rang-wert i { font-style: normal; font-size: 11px; font-weight: 400;
  color: var(--mute-2); margin-left: 5px; }
.rang-neben {
  grid-area: neben; font-size: 12px; color: var(--mute);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rang-abw {
  grid-area: abw; text-align: right; white-space: nowrap;
  font-size: 12px; font-weight: 600; font-variant-numeric: tabular-nums;
}
.rang-abw.hoch   { color: var(--ok); }
.rang-abw.runter { color: var(--bad-txt); }

.rang-fuss {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-top: 10px; padding: 0 2px;
  font-size: 12px; color: var(--mute-2); line-height: 1.5;
}
.rang-fuss b { color: var(--mute); font-weight: 600; }
.rang-tage { margin-left: auto; display: flex; gap: 4px; flex: none; }
.rang-tage button {
  border: 1px solid var(--line); border-radius: 999px;
  background: transparent; color: var(--mute); cursor: pointer;
  padding: 4px 11px; font: 500 11.5px/1 inherit; font-family: inherit;
}
.rang-tage button:hover { border-color: var(--gold); color: var(--gold-ink); }
.rang-tage button.on { background: var(--gold); border-color: var(--gold); color: var(--on-gold); }
@media (max-width: 700px) { .rang-tage { margin-left: 0; } }

/* ---- Suchzeile mit Umschalter bei den Fahrern ---- */
.drv-suchzeile {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  margin-bottom: 14px;
}
.drv-suchzeile .searchbar { flex: 1; min-width: 220px; margin: 0; }
.drv-inaktiv { margin: 0; flex: none; white-space: nowrap; }

/* Umschalter in der Rangliste */
.rang-art { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 10px; }
.rang-art button {
  border: 1px solid var(--line); border-radius: 999px;
  background: transparent; color: var(--mute); cursor: pointer;
  padding: 5px 12px; font: 500 12px/1 inherit; font-family: inherit;
  transition: border-color .14s, color .14s, background .14s;
}
.rang-art button:hover { border-color: var(--gold); color: var(--gold-ink); }
.rang-art button.on { background: var(--gold); border-color: var(--gold); color: var(--on-gold); }
/* Hält die Kopfzeile der rechten Kachel auf gleicher Höhe */
.rang-art-platz { height: 37px; }
@media (max-width: 760px) { .rang-art-platz { display: none; } }

/* ---- Live-Karte der Flotte ---- */
#karteFlaeche {
  height: 380px; border-radius: 0 0 var(--r-lg) var(--r-lg);
  background: var(--ink-3);
}
@media (max-width: 700px) { #karteFlaeche { height: 300px; } }

/* Die Karte selbst bleibt hell — dunkle Kacheln müsste man erst laden,
   und Straßennamen liest man auf Weiß besser. */
.leaflet-container { font-family: inherit; }
.leaflet-popup-content { font-size: 13px; line-height: 1.5; }

/* Kennzeichen als Marke: erkennbar ohne Klicken */
/* Ergebnis beim Aktualisieren mehrerer Flotten */
.update-liste { display: grid; gap: 2px; margin-top: 10px; }
.update-zeile {
  display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
  padding: 9px 11px; border-radius: var(--r-md); font-size: 13px;
}
.update-zeile:nth-child(odd) { background: rgba(var(--tint), .03); }
.update-zeile b { color: var(--bone); font-weight: 600; }
.update-zeile span { color: var(--mute); text-align: right; }
.update-zeile .fehler { color: var(--bad-txt); }

/* ---- Vorschau beim Übernehmen aus DKV ---- */
.dkv-vorschau {
  margin-top: 10px; max-height: 320px; overflow-y: auto;
  border: 1px solid var(--line-soft); border-radius: var(--r-md);
}
.dkv-zeile {
  display: grid; grid-template-columns: auto auto 1fr auto;
  align-items: center; gap: 12px;
  padding: 9px 12px; cursor: pointer; margin: 0;
  border-bottom: 1px solid var(--line-soft); font-size: 13px;
}
.dkv-zeile:last-child { border-bottom: 0; }
.dkv-zeile:hover { background: rgba(var(--tint), .04); }
.dkv-zeile input { margin: 0; flex: none; }
.dkv-zeile .mod { color: var(--txt-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dkv-zeile .km { color: var(--mute); font-variant-numeric: tabular-nums; white-space: nowrap; }

/* Beobachtungsmodus: kleiner pulsierender Punkt, damit man sieht,
   dass die Karte laufend nachfragt */
.karte-legende .live-punkt {
  display: inline-block; width: 7px; height: 7px; border-radius: 50%;
  background: #16A34A; margin-right: 6px;
  animation: livePuls 2s ease-in-out infinite;
}
@keyframes livePuls {
  0%, 100% { opacity: 1; }
  50%      { opacity: .25; }
}
/* Der Punkt in der Legende zeigt, dass die Karte lebt. */
.karte-legende .kl-stand { display: inline-flex; align-items: center; }
