/* Wunschdienstplan - neue App-Ansicht (Stufe 1: Mitarbeiter, Handy zuerst).
   Aufbau und Farben stammen aus dem abgestimmten Prototyp
   konzept/handy-app-prototyp.html. Dunkel ist Standard, hell per Umschalter. */
/* Schriften lokal ausgeliefert (kein Google-Fonts-Abruf, DSGVO) - Lizenz: fonts/OFL-LICENSE.txt */
@font-face{font-family:"Barlow Condensed";font-weight:600;font-display:swap;src:url(../fonts/barlow-condensed-latin-600-normal.woff2) format("woff2")}
@font-face{font-family:"Barlow Condensed";font-weight:700;font-display:swap;src:url(../fonts/barlow-condensed-latin-700-normal.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-weight:400;font-display:swap;src:url(../fonts/ibm-plex-sans-latin-400-normal.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-weight:500;font-display:swap;src:url(../fonts/ibm-plex-sans-latin-500-normal.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-weight:600;font-display:swap;src:url(../fonts/ibm-plex-sans-latin-600-normal.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-weight:500;font-display:swap;src:url(../fonts/ibm-plex-mono-latin-500-normal.woff2) format("woff2")}

/* Layout: mobile-first app shell (topbar + bottom tab bar) for Mitarbeiter;
   desktop cockpit with sidebar for Dienstplaner. Dark & technical by default. */
:root{
  --bg:#0F1318; --surface:#161C23; --surface-2:#1D252E; --line:#2A3440; --fg:#E7ECF0; --muted:#8C99A6;
  --bs:#E8402F; --bs-soft:rgba(232,64,47,.16); --rd:#F0B429; --rd-t:#F0B429; --rd-soft:rgba(240,180,41,.16);
  --ok:#3DB67E; --ok-soft:rgba(61,182,126,.16); --mine:#5AA8FF; --mine-soft:rgba(90,168,255,.18); --h24:#B48CFF; --h24-soft:rgba(180,140,255,.18);
  --off:#11171D; --off-streifen:#1B232C; --shadow:0 18px 50px rgba(0,0,0,.45);
  --f-display:"Barlow Condensed","Arial Narrow",system-ui,sans-serif;
  --f-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
  color-scheme:dark;
}
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]){
  --bg:#EEF1F4; --surface:#FFFFFF; --surface-2:#F4F6F8; --line:#D5DBE1; --fg:#121820; --muted:#5A6672;
  --bs:#C92A1C; --bs-soft:rgba(201,42,28,.10); --rd:#E5A800; --rd-t:#8F6400; --rd-soft:rgba(229,168,0,.16);
  --ok:#1F8A57; --ok-soft:rgba(31,138,87,.12); --mine:#1F6FD1; --mine-soft:rgba(31,111,209,.12); --h24:#7A3FD6; --h24-soft:rgba(122,63,214,.12);
  --off:#5C6772; --off-streifen:#76818C; --shadow:0 18px 50px rgba(20,30,40,.18); color-scheme:light}}
:root[data-theme="light"]{
  --bg:#EEF1F4; --surface:#FFFFFF; --surface-2:#F4F6F8; --line:#D5DBE1; --fg:#121820; --muted:#5A6672;
  --bs:#C92A1C; --bs-soft:rgba(201,42,28,.10); --rd:#E5A800; --rd-t:#8F6400; --rd-soft:rgba(229,168,0,.16);
  --ok:#1F8A57; --ok-soft:rgba(31,138,87,.12); --mine:#1F6FD1; --mine-soft:rgba(31,111,209,.12); --h24:#7A3FD6; --h24-soft:rgba(122,63,214,.12);
  --off:#5C6772; --off-streifen:#76818C; --shadow:0 18px 50px rgba(20,30,40,.18); color-scheme:light}

*{box-sizing:border-box}
body{background:var(--bg);color:var(--fg);font:15px/1.45 var(--f-body);margin:0;-webkit-font-smoothing:antialiased}
button{font:inherit;color:inherit;cursor:pointer}
button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--mine);outline-offset:2px}
.num{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
h1,h2,h3{font-family:var(--f-display);font-weight:700;letter-spacing:.01em;margin:0;text-wrap:balance}
.eyebrow{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:600}
.muted{color:var(--muted)}

/* Topbar */
.top{position:sticky;top:0;padding-top:env(safe-area-inset-top,0px);z-index:30;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.top-in{max-width:1280px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;gap:12px}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.mark{width:30px;height:30px;border-radius:8px;background:var(--bs);display:grid;place-items:center;flex:none}
.brand > div:not(.mark){min-width:0;overflow:hidden}
@media (max-width:600px){.brand{flex:none}.brand > div:not(.mark){display:none}.top-in{gap:8px}.seg button{padding:6px 8px}}
@media (max-width:360px){.brand{display:none}.spacer{display:none}.seg{flex:1 1 auto;min-width:0}.seg button{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.seg button{font-size:12px;padding:6px 6px}.icon-btn{width:32px;height:32px}}
.brand b{font-family:var(--f-display);font-size:19px;letter-spacing:.02em;white-space:nowrap}
.brand small{display:block;font-size:12px;color:var(--muted);line-height:1.1}
.spacer{flex:1}
.seg{display:flex;background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:3px;gap:2px}
.seg button{border:0;background:none;padding:6px 10px;border-radius:7px;font-size:13px;font-weight:600;color:var(--muted);white-space:nowrap}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--fg);box-shadow:0 1px 0 var(--line)}
.icon-btn{width:36px;height:36px;border-radius:10px;border:1px solid var(--line);background:var(--surface);display:grid;place-items:center;flex:none}
.icon-btn svg{width:18px;height:18px}
.toptabs{display:none;gap:4px}
.toptabs button{border:0;background:none;padding:8px 12px;border-radius:9px;font-weight:600;color:var(--muted)}
.toptabs button[aria-current="page"]{color:var(--fg);background:var(--surface-2)}

/* Main */
main{max-width:1280px;margin:0 auto;padding-inline:16px;padding-block:16px 110px}
.stack{display:grid;gap:14px}
.stack > *{min-width:0}
.card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:16px}
.row{display:flex;align-items:center;gap:10px}
.between{justify-content:space-between}
.wrap{flex-wrap:wrap}
.pill{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;letter-spacing:.04em}
.pill.open{background:var(--ok-soft);color:var(--ok)}
.pill.closed{background:var(--rd-soft);color:var(--rd-t)}
.pill.arch{background:var(--surface-2);color:var(--muted)}
.pill.plan{background:var(--mine-soft);color:var(--mine)}
.dot{width:7px;height:7px;border-radius:50%;background:currentColor}
.btn{border:1px solid var(--line);background:var(--surface-2);border-radius:12px;padding:10px 14px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:8px}
.btn.primary{background:var(--bs);border-color:var(--bs);color:#fff}
.btn.ghost{background:none}
.btn.sm{padding:6px 10px;font-size:13px;border-radius:9px}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn svg{width:16px;height:16px}

/* Bottom nav (mobile) */
.bnav{position:fixed;left:0;right:0;bottom:0;z-index:30;background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:6px 8px calc(6px + env(safe-area-inset-bottom,0px));display:grid;grid-template-columns:repeat(4,1fr)}
.bnav button{border:0;background:none;display:grid;justify-items:center;gap:2px;padding:6px 0;font-size:12px;font-weight:600;color:var(--muted);position:relative}
.bnav button svg{width:22px;height:22px}
.bnav button[aria-current="page"]{color:var(--fg)}
.bnav button[aria-current="page"]::before{content:"";position:absolute;top:-7px;width:28px;height:3px;border-radius:0 0 3px 3px;background:var(--bs)}
.badge{position:absolute;top:2px;left:calc(50% + 6px);background:var(--bs);color:#fff;font-size:10px;border-radius:999px;padding:0 5px;line-height:16px}

@media (min-width:900px){
  .bnav{display:none}
  .toptabs{display:flex}
  main{padding-block:24px 48px}
}

/* Start */
.hero{display:grid;gap:14px;background:linear-gradient(160deg,var(--surface) 0%,var(--surface-2) 100%)}
.hero h1{font-size:34px;line-height:1}
.clock{display:flex;gap:18px;align-items:flex-end}
.clock .big{font-family:var(--f-display);font-size:44px;line-height:.9}
.clock small{display:block;font-size:12px;color:var(--muted)}
.timebar{height:6px;border-radius:6px;background:var(--surface-2);overflow:hidden;border:1px solid var(--line)}
.timebar i{display:block;height:100%;background:linear-gradient(90deg,var(--ok),var(--rd))}
.grid-2{display:grid;gap:14px}
.grid-2 > *{min-width:0}
@media (min-width:900px){.grid-2{grid-template-columns:1.1fr .9fr;align-items:start}}
.quota{display:grid;gap:12px}
.q-row{display:grid;grid-template-columns:1fr auto;gap:6px 10px;align-items:center}
.q-row .bar{grid-column:1/-1;display:flex;gap:4px}
.q-row .bar i{flex:1;height:8px;border-radius:4px;background:var(--surface-2);border:1px solid var(--line)}
.q-row .bar i.on{background:var(--rd);border-color:var(--rd)}
.q-row .bar.bs i.on{background:var(--bs);border-color:var(--bs)}
.tally{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.tally div{background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:10px;display:grid;gap:2px}
.tally b{font-family:var(--f-display);font-size:26px;line-height:1}
.tally span{font-size:12px;color:var(--muted);hyphens:manual}
.q-name{font-weight:600}
.q-name small{font-weight:400;color:var(--muted);margin-left:6px}
.dlist{display:grid;gap:8px}
.duty{display:grid;grid-template-columns:52px 1fr auto;gap:12px;align-items:center;padding:10px;border-radius:12px;background:var(--surface-2);border:1px solid var(--line)}
.datebox{text-align:center;border-radius:10px;padding:4px 0;background:var(--surface);border:1px solid var(--line)}
.datebox b{display:block;font-family:var(--f-display);font-size:22px;line-height:1}
.datebox small{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.tag{display:inline-block;font-size:12px;font-weight:600;border-radius:6px;padding:1px 6px;letter-spacing:.03em}
.tag.rd{background:var(--rd-soft);color:var(--rd-t)}
.tag.bs{background:var(--bs-soft);color:var(--bs)}
.tag.uh{background:var(--surface);color:var(--muted);border:1px solid var(--line)}

/* Month */
.monthhead{display:flex;align-items:center;gap:8px}
.monthhead h2{font-size:26px}
.chips{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}
.chip{border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:7px 12px;font-size:13px;font-weight:600;white-space:nowrap;color:var(--muted)}
.chip[aria-pressed="true"]{color:var(--fg);border-color:var(--fg)}
.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal .wd{text-align:center;font-size:12px;color:var(--muted);font-weight:600;letter-spacing:.06em;padding-bottom:2px}
.day{position:relative;aspect-ratio:1/1.12;border-radius:12px;border:1px solid var(--line);background:var(--surface);padding:6px;display:flex;flex-direction:column;justify-content:space-between;text-align:left;min-width:0}
.day.nodienst{background:none;border-style:dashed;opacity:.35;cursor:default}
.day.empty{visibility:hidden}
.day .dn{font-family:var(--f-display);font-size:20px;line-height:1}
.day .free{font-size:12px;font-weight:600;color:var(--muted);line-height:1.1}
.day .bars{display:grid;gap:3px}
.day .bars span{height:4px;border-radius:3px;background:var(--surface-2);overflow:hidden;display:block}
.day .bars span i{display:block;height:100%}
.day .bars .r i{background:var(--rd)}
.day .bars .b i{background:var(--bs)}
/* Ruhig, wo noch viel frei ist (die Zahl und die Balken zeigen es); Farbe nur
   dort, wo es etwas zu sagen gibt: wenige Plätze übrig (amber), voll (grün). */
.day.lvl-full{border-color:color-mix(in srgb,var(--ok) 60%,var(--line));background:color-mix(in srgb,var(--ok) 9%,var(--surface))}
.day.lvl-few{border-color:color-mix(in srgb,var(--rd) 70%,var(--line));background:color-mix(in srgb,var(--rd) 10%,var(--surface))}
.day.lvl-many{border-color:var(--line)}
.day.lvl-few .free b{color:var(--rd-t)}
.day.lvl-full .free{color:var(--ok)}
.day.dim{opacity:.35}
.day.sel{outline:2px solid var(--fg);outline-offset:1px}
.day .me{position:absolute;top:6px;right:6px;width:9px;height:9px;border-radius:50%;background:var(--mine);box-shadow:0 0 0 3px var(--mine-soft)}
.day .we{position:absolute;top:8px;right:7px;font-size:12px;color:var(--muted);font-weight:600}
.day.flash{animation:flash 1.2s ease}
@keyframes flash{0%{box-shadow:0 0 0 0 var(--mine)}100%{box-shadow:0 0 0 10px transparent}}
.legend{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:12px;color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block}
.live{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);min-height:18px}
.live .dot{background:var(--ok);animation:pulse 2s infinite}
@keyframes pulse{50%{opacity:.3}}
.banner{border-radius:12px;padding:10px 12px;font-size:13px;display:flex;gap:10px;align-items:flex-start}
.banner.warn{background:var(--rd-soft);color:var(--fg);border:1px solid color-mix(in srgb,var(--rd) 40%,transparent)}
.banner.info{background:var(--mine-soft);border:1px solid color-mix(in srgb,var(--mine) 35%,transparent)}
@media (min-width:900px){
  .monthlayout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;align-items:start}
  .day{aspect-ratio:auto;min-height:92px;padding:9px}
  .day .dn{font-size:24px}
  .day .free{font-size:12px}
}

/* Sheet */
.scrim{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:40;opacity:0;pointer-events:none;transition:opacity .2s}
.scrim.on{opacity:1;pointer-events:auto}
.sheet{position:fixed;z-index:41;left:0;right:0;bottom:0;max-height:88%;background:var(--surface);border-radius:20px 20px 0 0;border:1px solid var(--line);box-shadow:var(--shadow);display:flex;flex-direction:column;transform:translateY(105%);transition:transform .25s ease}
.sheet.on{transform:none}
.sheet:not(.on){visibility:hidden;transition:transform .25s ease,visibility 0s .25s}
@media (min-width:900px){
  .sheet{left:auto;top:0;width:440px;max-height:none;border-radius:0;transform:translateX(105%)}
}
.sh-head{padding:12px 16px 10px;border-bottom:1px solid var(--line);display:grid;gap:8px}
.grab{width:40px;height:4px;border-radius:4px;background:var(--line);margin:0 auto}
@media (min-width:900px){.grab{display:none}}
.sh-title{display:flex;align-items:center;gap:8px}
.sh-title h2{font-size:26px;flex:1}
.sh-meta{display:flex;gap:10px;font-size:12px;color:var(--muted)}
.sh-body{overflow:auto;padding:12px 16px 18px;display:grid;gap:16px;overscroll-behavior:contain}
.sec h3{font-size:15px;letter-spacing:.08em;text-transform:uppercase;display:flex;align-items:center;gap:8px;margin-bottom:8px}
.sec h3 i{width:8px;height:8px;border-radius:2px;display:inline-block}
.veh{border:1px solid var(--line);border-radius:12px;padding:8px;display:grid;gap:6px;background:var(--surface-2)}
.veh + .veh{margin-top:8px}
.veh-h{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14px}
.veh-h small{color:var(--muted);font-weight:500}
.slots{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.frow{display:grid;grid-template-columns:86px 1fr;gap:8px;align-items:start;padding:6px 0;border-top:1px solid var(--line)}
.frow:first-of-type{border-top:0}
.frow > b{font-size:13px;padding-top:9px}
.frow .slots{grid-template-columns:repeat(auto-fill,minmax(110px,1fr))}
.slot{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--surface);text-align:left;display:flex;align-items:center;gap:8px;min-height:40px;min-width:0;font-size:14px}
.slot .pos{font-size:12px;font-weight:700;letter-spacing:.06em;color:var(--muted);flex:none}
.slot .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.slot.free{border-style:dashed;border-color:color-mix(in srgb,var(--ok) 60%,var(--line));color:var(--ok);font-weight:600}
.slot.free::after{content:"+";margin-left:auto;font-size:18px;line-height:1}
/* Belegt: gefüllt, mit kräftigerem Rand, Balken links und fettem Namen, damit man
   auf einen Blick sieht, wo schon jemand steht (frei bleibt gestrichelt/leer). */
.slot.taken{color:var(--fg);cursor:default;font-weight:700;background:color-mix(in srgb,var(--fg) 9%,var(--surface));border-color:color-mix(in srgb,var(--fg) 28%,var(--line));box-shadow:inset 3px 0 0 color-mix(in srgb,var(--fg) 45%,var(--surface))}
.slot.taken .pos{color:color-mix(in srgb,var(--fg) 60%,var(--muted));font-weight:700}
.slot.free{background:transparent}
.slot.mine{background:var(--mine-soft);border-color:var(--mine);color:var(--fg);font-weight:600}
.slot.mine .nm::before{content:"Du · ";color:var(--mine)}
.slot.off{background:var(--off);color:#C3CBD3;border-color:var(--off);cursor:default;justify-content:center;font-size:12px;letter-spacing:.06em;text-transform:uppercase}
.slot.locked{opacity:.5;cursor:not-allowed}
.slot.flash{animation:flash 1.2s ease}
.planner .slot.taken{cursor:pointer}
.sh-act{border-top:1px solid var(--line);padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px));display:grid;gap:10px;background:var(--surface)}
.sh-act:empty{display:none}
.act-btns{display:flex;gap:8px;flex-wrap:wrap}
.act-btns .btn{flex:1 1 auto}

/* Toast */
.toast{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom,0px));transform:translate(-50%,20px);z-index:60;background:var(--fg);color:var(--bg);border-radius:12px;padding:10px 14px;display:flex;gap:14px;align-items:center;font-size:14px;font-weight:500;opacity:0;pointer-events:none;transition:.2s;max-width:calc(100% - 32px)}
.toast.on{opacity:1;transform:translate(-50%,0);pointer-events:auto}
.toast button{border:0;background:none;color:var(--bg);font-weight:700;text-decoration:underline;padding:0}
@media (min-width:900px){.toast{bottom:24px}}

/* Profile */
.setting{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--line)}
.setting:first-child{border-top:0}
.setting div{flex:1;min-width:0}
.setting small{display:block;color:var(--muted);font-size:13px}
.switch{appearance:none;width:44px;height:26px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line);position:relative;flex:none;cursor:pointer;transition:.2s}
.switch::after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:var(--muted);transition:.2s}
.switch:checked{background:var(--ok);border-color:var(--ok)}
.switch:checked::after{left:20px;background:#fff}

@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---- Ergänzungen für die echte App ---- */
[hidden]{display:none!important}
.toast{width:max-content}
html,body{min-height:100%}
.tally{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.tally div{background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:10px;display:grid;gap:2px}
.tally b{font-family:var(--f-display);font-size:26px;line-height:1}
.tally span{font-size:12px;color:var(--muted);hyphens:manual}
.brand > div:not(.mark){min-width:0;overflow:hidden}
@media (max-width:600px){.brand{flex:none}.brand > div:not(.mark){display:none}.top-in{gap:8px}}
.empty{padding:28px 16px;text-align:center;color:var(--muted);display:grid;gap:10px;justify-items:center}
.empty b{color:var(--fg);font-size:17px}
.slot .tagx{font-size:12px;font-weight:700;color:var(--muted);margin-left:4px;white-space:nowrap;flex:none}
.slot.busy{opacity:.6;pointer-events:none}
.slot.busy::after{content:"…";margin-left:auto}
.slot.ehemalig .nm{font-style:italic}
.loading{display:grid;place-items:center;min-height:50vh;color:var(--muted);gap:10px}
.spin{width:28px;height:28px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--bs);animation:spin 0.9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.form-grid{display:grid;gap:10px}
.form-grid label{display:grid;gap:4px;font-size:13px;color:var(--muted);font-weight:600}
input[type=password],input[type=text]{background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;color:var(--fg);font:inherit;width:100%;min-width:0}
.err{color:var(--bs);font-size:14px}
.linklist{display:grid;gap:8px}
.linklist a{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border-radius:12px;background:var(--surface-2);border:1px solid var(--line);color:var(--fg);text-decoration:none;font-weight:600}
.linklist a small{color:var(--muted);font-weight:400}
.wa-sel{background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:6px 8px;color:var(--fg);font:inherit;font-size:13px}
.sonder-h{font-size:12px;color:var(--muted);font-weight:600;margin:6px 0 2px}

/* ---- iPhone-Feinschliff (schmale Bildschirme um 390-430 px) ----
   Kopfleiste deckt die Statusleiste ab (oben), Wochenende/Feiertag ohne
   Textmarke im Kalender (die Spalten Sa/So zeigen das Wochenende bereits;
   Feiertage sind unterstrichen), einheitliche Legende und Filter ohne
   abgeschnittene Chips. */
.day.ft .dn{text-decoration:underline 2px;text-underline-offset:3px;text-decoration-color:var(--bs)}
.cal .wd.we{color:var(--fg)}
.monatsleiste{display:flex;align-items:center;justify-content:space-between;gap:8px 12px;flex-wrap:wrap}
.monatsleiste .live{flex-basis:100%}
@media (min-width:900px){.monatsleiste .live{flex-basis:auto}}
.legend{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px}
.legend span{min-width:0}
.legend .ganz{grid-column:1/-1}
@media (min-width:640px){.legend{display:flex;flex-wrap:wrap;gap:6px 18px}}
@media (max-width:640px){
  /* Filter: eine Zeile zum Wischen statt mehrerer Zeilen, spart Platz für den
     Kalender. Der Rand läuft leicht aus, damit man sieht, dass es weitergeht. */
  .chips{flex-wrap:nowrap;overflow-x:auto;min-width:0;margin-inline:-16px;padding-inline:16px;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;scroll-padding-inline:16px;mask-image:linear-gradient(90deg,transparent 0,#000 16px,#000 calc(100% - 28px),transparent 100%);-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 16px,#000 calc(100% - 28px),transparent 100%)}
  .chip{white-space:nowrap;flex:none;scroll-snap-align:start;padding:7px 12px}
  .cal{gap:5px}
  .day{padding:6px 5px;border-radius:11px}
  .day .dn{font-size:19px}
  .day .free{font-size:12px;white-space:nowrap}
  .day .free b{font-size:13px;color:var(--fg);font-weight:700}
  .day .me{top:5px;right:5px;width:8px;height:8px}
  .hero h1{font-size:30px}
  .monthhead h1,.monthhead h2{font-size:24px}
  .clock{gap:14px}
  .clock .big{font-size:38px}
  .card{padding:14px;border-radius:14px}
  .stack{gap:12px}
}
@media (max-width:380px){.day .fw{display:none}}
/* Tagesansicht: Funktionsname klein im Feld; lange Namen (HR-Führer) kürzen
   den Kollegen-Namen, nicht umgekehrt. */
.slot .pos{max-width:48%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Unbeliebte Dienste ("gesucht") */
.stern{color:var(--rd-t);font-size:.75em;margin-left:2px}
/* Kopfzeile des Kalendertags: Zahl, Stern und eigener Punkt nebeneinander (nichts überlappt) */
.day .dh{display:flex;align-items:center;gap:2px;min-width:0}
.day .dh .stern{font-size:11px;line-height:1;margin:0;flex:none}
.day .dh .me{position:static;margin:0 2px 0 auto;flex:none;width:8px;height:8px;box-shadow:0 0 0 2px var(--mine-soft)}
.slot .stern{margin-left:auto;font-size:14px}
.slot.free.gesucht{border-color:color-mix(in srgb,var(--rd) 75%,var(--line));color:var(--rd-t);background:color-mix(in srgb,var(--rd) 8%,var(--surface))}
.slot.free.gesucht::after{content:"★ +";font-size:15px}
.kal-btns{display:grid;gap:8px}
.kal-btns .btn{width:100%;justify-content:center;text-align:center;text-decoration:none}
.kal-btns a.btn:not(.primary){color:var(--fg)}
@media (min-width:560px){.kal-btns{grid-template-columns:1fr 1fr 1fr}}

/* Diensttausch */
.pill.verb{background:color-mix(in srgb,var(--fg) 12%,transparent);color:var(--fg)}
.form-grid select{font-size:16px;padding:12px;border-radius:12px;background:var(--surface-2);border:1px solid var(--line);color:var(--fg);width:100%}
.form-grid .seg{justify-self:start}
.form-grid .seg button{padding:8px 16px;font-size:14px}
.tkarte{display:grid;gap:8px;padding:12px;border-radius:12px;background:var(--surface-2);border:1px solid var(--line)}
.tkarte.neu{border-color:color-mix(in srgb,var(--mine) 60%,var(--line));box-shadow:inset 3px 0 0 var(--mine)}
.tzeilen{display:grid;gap:4px}
.tz{display:grid;grid-template-columns:100px auto 1fr;gap:8px;font-size:14px;align-items:baseline}
.tz .muted{font-size:13px}
@media (max-width:400px){.tz{grid-template-columns:1fr;gap:0}.tz b{display:inline}}
.tstat{font-size:12px;font-weight:600;border-radius:999px;padding:2px 9px;white-space:nowrap}
.tstat.wait{background:var(--rd-soft);color:var(--rd-t)}
.tstat.me{background:var(--mine-soft);color:var(--mine)}
.tstat.ok{background:var(--ok-soft);color:var(--ok)}
.tstat.no{background:var(--bs-soft);color:var(--bs)}
.tstat.off{background:var(--surface);color:var(--muted);border:1px solid var(--line)}
.quali{font-size:13px;line-height:1.45;padding:10px 12px;border-radius:10px;background:var(--rd-soft);border:1px solid color-mix(in srgb,var(--rd) 45%,transparent)}
.quali::before{content:"⚠ Qualifikation · ";font-weight:700;color:var(--rd-t)}
@media (max-width:360px){.tally div{padding:8px}.tally span{font-size:12px}}

/* Startseite: Kopf der Quoten-Karte, Zahl in normaler Schrift auf eigener Zeile */
.quota-kopf{display:grid;gap:2px}
.quota-kopf span{font-size:14px;color:var(--muted)}

/* Profil: einklappbare Abschnitte */
details.card > summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer;min-height:28px}
details.card > summary::-webkit-details-marker{display:none}
details.card > summary::after{content:"";width:9px;height:9px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);margin-right:4px;transition:transform .15s}
details.card[open] > summary::after{transform:rotate(-135deg)}
details.card[open] > summary{margin-bottom:12px}
details.card > summary .eyebrow{margin:0!important}

/* Touch-Geräte: Tippflächen mindestens 44 px (Apple/Google-Empfehlung).
   Am PC bleiben die kompakten Größen. */
@media (pointer:coarse){
  .icon-btn{width:44px;height:44px}
  .chip{min-height:44px;padding:10px 14px;display:inline-flex;align-items:center}
  .seg button{min-height:40px;padding:8px 14px}
  .btn.sm{min-height:44px;padding:8px 14px}
  .btn{min-height:44px}
  .wa-sel{min-height:44px;font-size:14px}
  .form-grid select,input[type=password],input[type=text]{min-height:48px}
  .setting{min-height:56px}
}
@media (pointer:coarse) and (max-width:360px){.icon-btn{width:40px;height:40px}}

/* Kein Zoomen per Doppeltipp (Wettrennen um Plätze: schnelles Tippen darf
   nicht zoomen). Zwei-Finger-Zoom bleibt für Barrierefreiheit erhalten. */
html,body,button,a,.day,.slot,.chip{touch-action:manipulation}

/* Live-Zeile: am PC oben rechts, auf dem Handy unter dem Kalender */
.live.unten{display:none}
@media (max-width:899px){
  .live.oben{display:none}
  .live.unten{display:flex}
}

/* Monatsansicht Handy: Kalender möglichst komplett ohne Scrollen */
@media (max-width:640px){
  .monthlayout > .stack{gap:10px}
  .monatsleiste{gap:0}
  .monatsleiste .monthhead h2{font-size:22px}
  .cal .wd{padding-bottom:0}
  .day{aspect-ratio:auto;height:clamp(50px,8.4dvh,64px)}
  .day .bars{gap:2px}
}

/* "So funktioniert's": eigener, abgesetzter Block, auf dem Handy eingeklappt */
details.hilfe{margin-top:8px}
details.hilfe > div{font-size:14px;display:grid;gap:8px}
@media (min-width:900px){details.hilfe{margin-top:0}}
.monthlayout .legend{margin-bottom:4px}

/* Seitliches Überlaufen nur im Inhalt abfangen, nicht auf dem body: Ein
   overflow auf dem body kann auf iOS die Bezugsfläche von fixierten Leisten
   (unten) und der Kopfzeile verrutschen lassen. */
main{overflow-x:clip}
/* Leisten auf eigener Ebene, damit iOS sie beim Neuzeichnen zuverlässig verankert */
.bnav,.top{transform:translateZ(0);-webkit-transform:translateZ(0)}

/* Hinweis auf eine neue Version, über der unteren Leiste */
.update-leiste{position:fixed;left:12px;right:12px;bottom:calc(84px + env(safe-area-inset-bottom,0px));z-index:65;display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--fg);color:var(--bg);border-radius:12px;padding:8px 8px 8px 14px;font-size:14px;font-weight:600;box-shadow:var(--shadow)}
@media (min-width:900px){.update-leiste{left:auto;right:16px;bottom:16px;max-width:340px}}
.veh-hinweis{font-size:13px;line-height:1.35;color:var(--fg);background:var(--rd-soft);border-radius:8px;padding:6px 9px;margin:2px 0 6px}
.q-name small{display:block;margin-left:0;font-size:12px}

/* S-RTW: 24-Stunden-Dienst möglich (12-h-Dienst am selben Tag) */
.slot.free.h24{border-color:var(--h24);color:var(--h24);background:var(--h24-soft)}
.slot.free.h24 .tagx{color:var(--h24)}
.veh-hinweis{background:var(--h24-soft)}
/* Monat: eigene Quote im Blick */
.sidecol{display:grid;gap:12px;align-self:start}
.qs-narrow{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;width:100%;padding:10px 14px;border-radius:14px;border:1px solid var(--line);background:var(--surface);color:var(--fg);font:inherit;font-size:14px;text-align:left}
.qs-narrow b{font-family:var(--f-display);font-size:17px}
.qs-offen{color:var(--rd-t)}
.qs-offen b{font-family:inherit;font-size:inherit}
.qs-ok{color:var(--ok);font-weight:600}
.qs-wide{display:none}
.qs-zeile{background:none;border:0;padding:4px 0;width:100%;color:var(--fg);font:inherit;text-align:left;cursor:pointer}
.qs-wide{gap:10px}
@media (min-width:900px){.qs-wide{display:grid}.qs-narrow{display:none}.sidecol{margin-top:0}}

/* Planer-Link in der Kopfzeile (nur Dienstplaner) */
.top-planer{display:inline-flex;align-items:center;gap:7px;padding:8px 12px;border-radius:10px;border:1px solid color-mix(in srgb,var(--bs) 55%,var(--line));background:var(--bs-soft);color:var(--fg);font-weight:700;font-size:14px;text-decoration:none;white-space:nowrap}
.top-planer:hover{background:color-mix(in srgb,var(--bs) 24%,transparent)}
.top-planer svg{color:var(--bs);flex:none}
@media (max-width:360px){.top-planer span{display:none}.top-planer{padding:8px}}
/* Hilfe-Karte im Profil: Logo, Text, zwei Knöpfe */
.hilfe-karte{display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center}
.hk-logo{width:56px;height:56px;border-radius:14px;box-shadow:0 2px 10px rgba(0,0,0,.25)}
.hk-text p{margin:4px 0 0;font-size:14px;color:var(--muted);line-height:1.45}
.hk-knoepfe{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px}
.hk-knoepfe .btn{text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
@media (max-width:480px){.hk-knoepfe .btn{flex:1 1 100%}}
.hk-install{grid-column:1/-1;font-size:13px;color:var(--muted)}
.hk-install summary{cursor:pointer;padding:6px 0}
.hk-install p{margin:4px 0 0}
.hk-knoepfe .btn:not(.primary){color:var(--fg)}
