/* Winterdienst-App – Corporate Design Galabau Leipzig (Stand 09/2025):
   Grün #178741 / #8dca3f, Grau-Azur #3f4f51, erdige Töne #e3dfd4 / #d6cfc4 / #a9b0a6, Schrift Überschriften Yanone Kaffeesatz.
   Große Bedienflächen für Handschuhe, dunkles Design nur wenn das Handy auf „dunkel“ steht. */
@font-face { font-family: 'Yanone Kaffeesatz'; src: url('/fonts/YanoneKaffeesatz-Regular.otf') format('opentype'); font-weight: 400; font-display: swap; }
@font-face { font-family: 'Yanone Kaffeesatz'; src: url('/fonts/YanoneKaffeesatz-Bold.otf') format('opentype'); font-weight: 700; font-display: swap; }
@font-face { font-family: 'Yanone Kaffeesatz'; src: url('/fonts/YanoneKaffeesatz-Light.otf') format('opentype'); font-weight: 300; font-display: swap; }
:root {
  --bg: #f4f2ed; --karte: #ffffff; --karte2: #e3dfd4; --text: #3f4f51; --leise: #6c7770;
  --gruen: #178741; --gruen-d: #116a32; --hellgruen: #8dca3f; --rot: #d9483b; --gelb: #e8b500; --blau: #2b6c9e;
  --rand: #d6cfc4; --radius: 14px; --kopf: 'Yanone Kaffeesatz', 'Arial Narrow', sans-serif;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg: #1d2627; --karte: #263133; --karte2: #34423f; --text: #eef0ea; --leise: #a9b0a6;
    --rand: #3f4f51; --gruen: #2fa358; --gruen-d: #178741; --rot: #ec6a5c; --blau: #6aa6d6;
  }
}
* { box-sizing: border-box; }
html, body { margin: 0; background: var(--bg); color: var(--text); font: 17px/1.4 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
header { position: sticky; top: 0; z-index: 5; display: flex; align-items: center; gap: 12px; padding: 12px 16px; padding-top: max(12px, env(safe-area-inset-top));
  background: var(--karte); border-bottom: 1px solid var(--rand); }
.logo { font-weight: 700; flex: 1; }
#wer { color: var(--leise); font-size: 15px; }
.sync { background: var(--gelb); color: #222; border-radius: 99px; padding: 2px 10px; font-size: 14px; font-weight: 600; }
main { padding: 16px; max-width: 900px; margin: 0 auto; padding-bottom: 96px; }
h1 { font-size: 22px; margin: 4px 0 12px; } h2 { font-size: 18px; margin: 20px 0 8px; }
.leise { color: var(--leise); }
.karte { background: var(--karte); border: 1px solid var(--rand); border-radius: var(--radius); padding: 14px 16px; margin-bottom: 10px; }
button, .btn { font: inherit; border: 0; border-radius: var(--radius); padding: 14px 18px; min-height: 52px; cursor: pointer;
  background: var(--karte2); color: var(--text); border: 1px solid var(--rand); }
button.haupt { background: var(--gruen); color: #fff; border-color: var(--gruen-d); font-weight: 700; font-size: 19px; width: 100%; min-height: 64px; }
button.warn { background: transparent; color: var(--rot); border-color: var(--rot); }
button.klein { min-height: 40px; padding: 8px 12px; font-size: 15px; }
button:disabled { opacity: .5; }
input, select, textarea { font: inherit; width: 100%; padding: 12px; border-radius: 10px; border: 1px solid var(--rand); background: var(--bg); color: var(--text); }
label { display: block; margin: 10px 0 4px; color: var(--leise); font-size: 15px; }
.zeile { display: flex; gap: 10px; align-items: center; }
.zeile > * { flex: 1; }
.raster { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
.objekt { display: flex; align-items: center; gap: 12px; cursor: pointer; }
.objekt .nr { width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; background: var(--karte2); font-weight: 700; flex: none; }
.objekt .info { flex: 1; min-width: 0; }
.objekt .titel { font-weight: 600; }
.objekt .unter { color: var(--leise); font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.objekt.erledigt .nr { background: var(--gruen); color: #fff; }
.objekt.fehler .nr { background: var(--rot); color: #fff; }
.chip { display: inline-block; padding: 3px 10px; border-radius: 99px; font-size: 13px; background: var(--karte2); border: 1px solid var(--rand); }
.chip.ok { background: var(--gruen); color: #fff; border-color: transparent; }
.chip.warn { background: var(--gelb); color: #222; border-color: transparent; }
.chip.rot { background: var(--rot); color: #fff; border-color: transparent; }
.toggle { display: flex; align-items: center; justify-content: center; text-align: center; min-height: 64px; font-weight: 600; }
.toggle.an { background: var(--blau); color: #fff; border-color: var(--blau); }
.balken { height: 10px; background: var(--karte2); border-radius: 99px; overflow: hidden; }
.balken > div { height: 100%; background: var(--gruen); }
table { width: 100%; border-collapse: collapse; font-size: 15px; }
th, td { text-align: left; padding: 8px 6px; border-bottom: 1px solid var(--rand); vertical-align: top; }
th { color: var(--leise); font-weight: 600; }
.fussleiste { position: fixed; left: 0; right: 0; bottom: 0; padding: 12px 16px; padding-bottom: max(12px, env(safe-area-inset-bottom));
  background: var(--karte); border-top: 1px solid var(--rand); display: flex; gap: 10px; z-index: 4; }
.fussleiste > * { flex: 1; }
.tabs { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 12px; }
.tabs { flex-wrap: nowrap; overflow-x: auto; }
.tabs button { min-height: 42px; padding: 8px 10px; font-size: 15px; flex: 1 1 auto; white-space: nowrap; }
.tabs button[data-nav="logout"] { flex: none; }
.tabs button.aktiv { background: var(--gruen); color: #fff; border-color: var(--gruen-d); }
.pin { font-size: 28px; letter-spacing: 12px; text-align: center; }
.ziffern { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 12px; }
.ziffern button { font-size: 26px; min-height: 66px; }
.meldung { position: fixed; left: 16px; right: 16px; bottom: 96px; z-index: 9; padding: 14px 16px; border-radius: var(--radius); background: var(--text); color: var(--bg); font-weight: 600; text-align: center; }
img.foto { max-width: 100%; border-radius: 10px; margin-top: 8px; }
@media (min-width: 700px) { .fussleiste { position: static; padding: 0; background: none; border: 0; margin-top: 16px; } main { padding-bottom: 24px; } }
.karte.alarm { border: 2px solid var(--rot); }
label.haken { display: flex; gap: 10px; align-items: center; color: inherit; font-size: 17px; margin: 14px 0; }
label.haken input { width: 26px; height: 26px; flex: none; }
/* Kacheln */
.kacheln { display: grid; grid-template-columns: repeat(auto-fill, minmax(165px, 1fr)); gap: 10px; margin-bottom: 12px; }
details.kachel { background: var(--karte); border: 1px solid var(--rand); border-radius: var(--radius); }
details.kachel[open] { grid-column: 1 / -1; border-color: var(--gruen-d); }
details.kachel > summary, details.unter > summary { list-style: none; cursor: pointer; padding: 10px 26px 10px 12px; position: relative; }
details > summary::-webkit-details-marker { display: none; }
details.kachel > summary .kopf { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
details.kachel > summary .kopf b { min-width: 0; overflow-wrap: anywhere; hyphens: auto; }
details.kachel > summary .kopf .chip { flex: none; }
details.kachel > summary .balken { height: 6px; margin: 8px 0 4px; }
.unterzeile { color: var(--leise); font-size: 13px; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
details.kachel > summary::after, details.unter > summary::after { content: '▾'; position: absolute; right: 9px; bottom: 9px; color: var(--leise); font-size: 14px; }
details.kachel[open] > summary::after, details.unter[open] > summary::after { content: '▴'; }
.inhalt { padding: 0 14px 14px; border-top: 1px solid var(--rand); padding-top: 10px; }
details.unter { background: var(--karte2); border-radius: 10px; margin: 8px 0; border: 1px solid var(--rand); }
details.unter[open] { border-color: var(--gruen-d); }
details.unter > .inhalt, details.unter > .formular { padding: 10px 12px 12px; }
.liste-zeile { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--rand); }
.liste-zeile:last-child { border-bottom: 0; }
.liste-zeile .info { flex: 1; min-width: 0; }
.liste-zeile .links a { margin-left: 6px; color: var(--blau); font-size: 14px; }
.punkt { width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; background: var(--karte); border: 1px solid var(--rand); font-size: 13px; font-weight: 700; flex: none; }
.punkt.ok { background: var(--gruen); color: #fff; border-color: transparent; }
.punkt.fehler { background: var(--rot); color: #fff; border-color: transparent; }
.klein { font-size: 13px; }
.rot { color: var(--rot); }
.knopfreihe { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.knopfreihe .btn, .knopfreihe button { min-height: 40px; padding: 8px 12px; font-size: 15px; text-decoration: none; }
a.btn.klein { min-height: 40px; padding: 8px 12px; font-size: 15px; text-decoration: none; flex: none; display: inline-flex; align-items: center; }
/* Zahlenkacheln */
.zahlen { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 8px; }
.zahlen.zwei { grid-template-columns: repeat(2, 1fr); }
.zkachel { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 10px 6px; min-height: 0; }
.zkachel b { font-size: 26px; line-height: 1.1; }
.zkachel span { font-size: 13px; color: var(--leise); text-align: center; }
.zkachel.t-ok b { color: var(--gruen); } .zkachel.t-warn b { color: var(--gelb); } .zkachel.t-rot b { color: var(--rot); }
.zkachel.aktiv { border: 2px solid var(--gruen); background: var(--karte); }
.karte.kompakt { padding: 4px 14px; }
/* Formulare */
.formular { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 0 12px; }
.formular .feld.breit { grid-column: span 2; }
@media (max-width: 480px) { .formular .feld.breit { grid-column: 1 / -1; } }
.feld label { margin: 8px 0 3px; font-size: 13px; }
.feld input, .feld select, .preise input, .preise select, .liste-zeile input, .liste-zeile select { padding: 9px 10px; font-size: 15px; }
input.gespeichert, select.gespeichert { border-color: var(--gruen); box-shadow: 0 0 0 2px var(--gruen); }
.preise { overflow-x: auto; margin: 10px 0 6px; }
.preise table { min-width: 980px; }
.preise td { padding: 4px 3px; }
input.zahl { width: 90px; } input.kurz { width: 70px; } select.schmal { width: auto; max-width: 45%; }
#suche { margin-bottom: 10px; }
h3 { font-size: 15px; margin: 12px 0 4px; color: var(--leise); }
/* Push */
.mini { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 18px; padding: 8px 12px; border: 1px dashed var(--rand); border-radius: 10px; font-size: 14px; color: var(--leise); }
.mini button { flex: none; }
.overlay { position: fixed; inset: 0; z-index: 20; background: rgba(0,0,0,.65); display: grid; place-items: center; padding: 16px; }
.overlay .karte { max-width: 440px; width: 100%; }
details.kachel > summary .kopf b { font-size: 15px; line-height: 1.25; }
details.kachel > summary .kopf { align-items: flex-start; }
.hinweise { background: var(--karte2); border-radius: 10px; padding: 8px 10px; margin-bottom: 8px; font-size: 14px; }
.summen { display: flex; flex-wrap: wrap; gap: 6px 18px; justify-content: flex-end; margin: 6px 0; font-size: 15px; }
table.rpos { min-width: 760px; }
table.rpos input { padding: 6px 8px; font-size: 14px; }
table.rpos input[type=date] { width: 135px; }
tr.manuell td { background: rgba(224,179,65,.10); }
textarea { font: inherit; }
details.kachel > summary .kopf { flex-wrap: wrap; }
details.kachel > summary .kopf b { flex: 1 1 110px; }
table.rpos td:nth-child(2) input { min-width: 230px; }
.tabs { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; overflow: visible; }
.tabs button { padding: 8px 2px; font-size: 14.5px; min-width: 0; }
button.abmelden { min-height: 34px; padding: 4px 10px; margin-left: 6px; font-size: 15px; }
/* Navigationsleiste unten */
nav#nav { position: fixed; left: 0; right: 0; bottom: 0; z-index: 8; display: flex; background: var(--karte); border-top: 1px solid var(--rand);
  padding-bottom: env(safe-area-inset-bottom); }
nav#nav[hidden] { display: none; }
nav#nav a { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 1px; padding: 7px 2px 8px; color: var(--leise); text-decoration: none; font-size: 11.5px; min-width: 0; white-space: nowrap; }
nav#nav a span { font-size: 21px; line-height: 1.15; }
nav#nav a.aktiv { color: var(--gruen); font-weight: 700; box-shadow: inset 0 3px 0 var(--gruen); }
body.mit-nav main { padding-bottom: 96px; }
body.mit-nav .fussleiste { bottom: calc(58px + env(safe-area-inset-bottom)); }
body.mit-nav .meldung { bottom: 140px; }
@media (min-width: 900px) {
  nav#nav { position: sticky; top: 58px; bottom: auto; justify-content: center; border-top: 0; border-bottom: 1px solid var(--rand); }
  nav#nav a { flex: 0 1 130px; flex-direction: row; gap: 6px; font-size: 15px; padding: 10px 8px; justify-content: center; }
  nav#nav a span { font-size: 17px; }
  nav#nav a.aktiv { box-shadow: inset 0 -3px 0 var(--gruen); }
  body.mit-nav main { padding-bottom: 24px; }
  body.mit-nav .fussleiste { bottom: auto; }
}
/* Cockpit */
.cockpit { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 10px; }
.cockpit .karte { margin: 0; }
.ck-einsatz.laeuft { border: 2px solid var(--gruen); }
.ck-karte { grid-column: 1 / -1; }
#karte { height: 380px; border-radius: 10px; margin-top: 8px; background: var(--karte2); }
.gross { font-size: 34px; font-weight: 800; line-height: 1; flex: none; }
.stunden { display: grid; grid-template-columns: repeat(8, 1fr); gap: 2px; margin-top: 10px; text-align: center; font-size: 12px; }
.stunden div { display: flex; flex-direction: column; } .stunden span { color: var(--leise); } .stunden b { font-size: 15px; }
a.ck-link { display: block; color: inherit; text-decoration: none; }
a.ck-link .zkachel { cursor: pointer; }
.legende { color: var(--leise); flex: none; } .legende i.p { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin: 0 3px 0 8px; vertical-align: -1px; }
i.p.ok { background: #1f8a4c; } i.p.fehler { background: #e5534b; } i.p.offen { background: #8a9a90; } i.p.kol { background: #5aa9e6; border-radius: 2px; }
.kol-icon span { background: #5aa9e6; color: #fff; font-weight: 700; font-size: 12px; padding: 3px 7px; border-radius: 8px; white-space: nowrap; box-shadow: 0 1px 4px rgba(0,0,0,.4); }
.leaflet-popup-content { color: #14201a; }
@media (max-width: 500px) { .ck-karte .zeile { flex-wrap: wrap; } #karte { height: 300px; } }
/* Corporate Design: Kopf mit Logo, Überschriften in Yanone als Balken, grüner Rand links wie Briefpapier */
header { gap: 10px; border-bottom: 3px solid var(--hellgruen); }
header .logo { display: flex; align-items: center; gap: 10px; font-family: var(--kopf); font-weight: 700; font-size: 24px; color: var(--gruen); letter-spacing: .3px; }
header .logo img { height: 34px; width: auto; display: block; }
header .logo small { font-weight: 400; color: var(--leise); font-size: 20px; }
h1, h2, h3, .zkachel b, .gross, details.kachel > summary .kopf b, nav#nav a, .tabs button { font-family: var(--kopf); }
h1 { font-size: 30px; font-weight: 700; letter-spacing: .2px; }
h2 { font-size: 23px; font-weight: 700; background: var(--karte2); border-radius: 12px; padding: 4px 14px; display: inline-block; margin: 22px 0 10px; }
h3 { font-size: 18px; font-weight: 700; }
details.kachel > summary .kopf b { font-size: 20px; font-weight: 700; line-height: 1.1; }
.zkachel b { font-size: 34px; font-weight: 700; }
.gross { font-size: 44px; font-weight: 700; color: var(--gruen); }
nav#nav a { font-size: 14.5px; }
nav#nav a.aktiv { color: var(--gruen); }
button.haupt { font-family: var(--kopf); font-size: 24px; letter-spacing: .3px; }
.chip.ok { background: var(--gruen); }
.balken > div { background: linear-gradient(90deg, var(--gruen), var(--hellgruen)); }
.punkt.ok, .objekt.erledigt .nr { background: var(--gruen); }
details.kachel[open] { border-color: var(--gruen); }
.karte, details.kachel { box-shadow: 0 1px 2px rgba(63,79,81,.06); }
@media (min-width: 700px) { body { border-left: 10px solid var(--hellgruen); } }
header { z-index: 1001; } nav#nav { z-index: 1000; } .overlay { z-index: 1100; } .meldung { z-index: 1050; }
#karte { position: relative; z-index: 0; isolation: isolate; }
.person { display: inline-flex; align-items: center; gap: 2px; }
button.weg { min-height: 40px; padding: 4px 9px; color: var(--rot); background: transparent; border-color: var(--rand); }
.auswahl { margin-top: 8px; padding: 8px 10px; background: var(--karte2); border-radius: 10px; }
.hinweis-aend { border: 2px solid var(--hellgruen); }
.kachel.neu { border: 2px solid #e0a100; }
/* Kolonnenplanung wie „Einteilung der Gruppen“ */
.einteilung { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; margin-bottom: 8px; }
.ek { position: relative; background: var(--karte); border: 1px solid var(--rand); border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; font-size: 14px; }
.ek > div { padding: 5px 10px; }
.ek-geraet { background: #d2eaf2; color: #3f4f51; font-family: var(--kopf); font-size: 17px; padding-right: 34px !important; }
.ek-fahrer { background: #d2eaf2; color: #3f4f51; font-weight: 700; border-bottom: 1px solid var(--rand); }
.ek-ersatz { background: #f2e6de; color: #3f4f51; font-size: 13px; }
.ek.trupp .ek-team, .ek-team { background: #e3efd3; color: #3f4f51; min-height: 60px; }
.ek-kreis { background: #fbeee4; color: #3f4f51; flex: 1; min-height: 70px; }
.ek.trupp .ek-kreis { background: #fdf5ef; }
.ek-obj { margin-top: 4px; }
.ek-edit { position: absolute; top: 4px; right: 4px; min-height: 30px !important; padding: 2px 8px !important; background: rgba(255,255,255,.7); }
.einteilung-unten { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px; margin-top: 10px; }
.einteilung-unten textarea { margin-top: 6px; }
.nur-druck { display: none; }
@media print {
  @page { size: A4 landscape; margin: 10mm; }
  header, nav#nav, .drucken-aus, .ek-edit, .meldung { display: none !important; }
  body { border: 0 !important; background: #fff; } main { max-width: none; padding: 0; }
  .nur-druck { display: block; font-size: 20px; }
  .einteilung { grid-template-columns: repeat(8, 1fr); gap: 4px; }
  .ek { font-size: 10px; break-inside: avoid; } .ek-geraet { font-size: 12px; }
  h2 { font-size: 14px; margin: 6px 0; } .karte { box-shadow: none; }
  * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
}
nav#nav a { font-size: 11px; }
@media (min-width: 900px) { nav#nav a { font-size: 15px; } }
/* Wetterprotokoll */
.wetter-tage { grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); }
.wtag { margin: 0; } .wtag.glatt { border: 2px solid var(--rot); }
.klein-gross { font-size: 30px; margin: 4px 0; }
table.wtab { min-width: 720px; font-size: 14px; } table.wtab tr.glatt td { background: rgba(217,72,59,.10); }
@media (max-width: 899px) { nav#nav a.nur-pc { display: none; } }
/* Anrufkette als Baum */
.kette { overflow-x: auto; padding-bottom: 10px; }
.ast { display: flex; align-items: center; }
.kinder { display: flex; flex-direction: column; gap: 6px; padding-left: 22px; margin-left: 6px; border-left: 2px solid var(--gruen); position: relative; }
.kinder > .ast { position: relative; } .kinder > .ast::before { content: ''; position: absolute; left: -22px; top: 50%; width: 18px; border-top: 2px solid var(--gruen); }
.knoten { min-width: 150px; background: var(--karte); border: 1px solid var(--rand); border-radius: 10px; padding: 6px 10px; display: flex; flex-direction: column; font-size: 14px; margin: 3px 0; }
.knoten a { color: var(--blau); text-decoration: none; } .knoten.wurzel { background: var(--karte2); }
.knoten.ok { border: 2px solid var(--gruen); } .knoten.fehler { border: 2px solid var(--rot); } .knoten.stumm { border: 2px solid var(--rot); background: rgba(217,72,59,.08); } .knoten.spaeter { border: 2px solid var(--gelb); }
.knoten { position: relative; } .knoten[draggable="true"] { cursor: grab; } .knoten.zieht { opacity: .4; } .knoten.drop { outline: 3px dashed var(--gruen); outline-offset: 2px; }
.knoten .verschieben { position: absolute; top: 4px; right: 4px; padding: 0 6px; min-height: 0; line-height: 1.4; } .knoten.gewaehlt { outline: 3px solid var(--gruen); }
.kette.ziel-modus .knoten:not(.gewaehlt) { cursor: pointer; box-shadow: 0 0 0 2px var(--hellgruen); }
@media print { .kette { overflow: visible; } .knoten { font-size: 10px; min-width: 110px; padding: 3px 6px; } }
.liste-zeile.kontroll.erledigt .info b { color: var(--gruen); }
button.aktiv-z { background: var(--gruen); color: #fff; border-color: var(--gruen-d); }
.quitt { margin: 4px 0 10px; }
.liste-zeile.umbruch { flex-wrap: wrap; } .liste-zeile.umbruch .info { flex: 1 1 100%; }
.knoten:has(.verschieben) { padding-right: 36px; } @media print { .knoten:has(.verschieben) { padding-right: 6px; } }
