/* =====================================================================
   zahnarztzentrum.ch — BI-Portal Design-System
   CI: Grau #686B7A · Rot #E4040E (aus Logo extrahiert)
   ===================================================================== */
:root{
  --zaz-grau:#686B7A; --zaz-grau-dunkel:#4B4E5A; --zaz-grau-tief:#33353E;
  --zaz-rot:#E4040E;
  --paper:#F4F5F7; --surface:#FFFFFF; --ink:#23252E; --ink2:#4B4E5A; --mute:#8A8DA0;
  --line:#E1E3E9; --line2:#EEF0F3;
  --pos:#1E7A46; --pos-soft:#E5F2EA; --neg:#C43A2E; --neg-soft:#FAE9E7;
  --warn:#B07A18; --warn-soft:#F7EEDC; --fc:#A5A8B5;
  --ch-ist:#454A58; --ch-bud:#7C8291; --ch-vj:#C6C9D2; --ch-akzent:#E4040E;
  --ch-dh:#9BA0AE; --ch-tpp:#D8C69A; --ch-nfl:#B07A18;
  --mono:'IBM Plex Mono',ui-monospace,monospace;
  --disp:'Barlow Condensed',sans-serif; --body:'Inter',system-ui,sans-serif;
  --r:10px; --shadow:0 1px 2px rgba(35,37,46,.05),0 4px 14px rgba(35,37,46,.06);
}
*{box-sizing:border-box;margin:0;padding:0}
html{font-size:15px}
body{background:var(--paper);color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased}
button{font:inherit;cursor:pointer;background:none;border:none;color:inherit}
select,input{font:inherit;color:inherit}
a{color:inherit}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
.pos{color:var(--pos)} .neg{color:var(--neg)}

/* Topbar */
.topbar{position:sticky;top:0;z-index:50;background:var(--zaz-grau);color:#F2F3F6;
  display:flex;align-items:center;gap:1.25rem;padding:0 1.25rem;min-height:56px}
.topbar .logo{height:34px;display:block}
.topbar .prodname{font-family:var(--disp);font-weight:600;font-size:1.15rem;letter-spacing:.04em;
  text-transform:uppercase;color:#fff;border-left:1px solid rgba(255,255,255,.28);padding-left:1rem}
.top-nav{display:flex;gap:.15rem;margin-left:.5rem}
.top-nav button,.top-nav a{padding:.45rem .85rem;border-radius:8px;color:#D8DAE2;font-weight:500;
  font-size:.88rem;text-decoration:none}
.top-nav button:hover,.top-nav a:hover{background:rgba(255,255,255,.10);color:#fff}
.top-nav button.active{background:rgba(255,255,255,.16);color:#fff;font-weight:600;
  box-shadow:inset 0 -2px 0 var(--zaz-rot)}
.top-right{margin-left:auto;display:flex;align-items:center;gap:.75rem}
.badge-live{font-family:var(--mono);font-size:.7rem;background:var(--pos);color:#fff;
  padding:.25rem .55rem;border-radius:6px;letter-spacing:.05em}
.stichtag{font-size:.78rem;color:#C9CCD6}
.stichtag b{color:#fff;font-weight:600}
.userchip{display:flex;align-items:center;gap:.5rem;font-size:.78rem;color:#C9CCD6}
.userchip button{color:#fff;text-decoration:underline;font-size:.75rem;opacity:.85}

/* Filterbar */
.filterbar{position:sticky;top:56px;z-index:40;background:var(--surface);border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:1.5rem;padding:.55rem 1.25rem;flex-wrap:wrap}
.fgroup{display:flex;align-items:center;gap:.5rem}
.fgroup label{font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;color:var(--mute);font-weight:600}
.fgroup select{border:1px solid var(--line);border-radius:8px;padding:.32rem .5rem;background:#fff;font-size:.85rem}
.seg{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.seg button{padding:.32rem .7rem;font-size:.82rem;color:var(--ink2);border-right:1px solid var(--line)}
.seg button:last-child{border-right:none}
.seg button.active{background:var(--zaz-grau-dunkel);color:#fff;font-weight:600}
/* v455 (Jonas 25.10.2026): Filter und Eingabeflaechen in allen Dashboards gleich — eine Quelle, keine lokalen Kopien.
   Regeln: Standort-Dropdown erste Option immer «Alle Standorte» (value ALLE/0 bleibt Code); Labels in Kleinschreibung (CSS macht Versalien);
   Selects und Textfelder in Filterleisten 8-px-Radius, .85 rem; Segmente .seg; Knoepfe .plbtn (klein) und .btn (gross). */
.tools,.fltbar,.vlbar{display:flex;flex-wrap:wrap;gap:.6rem 1.1rem;align-items:center}
.fgroup input[type=text],.fgroup input[type=search],.fgroup input[type=number],.fgroup input[type=date],.fgroup input[type=month],
.tools select,.tools input[type=search],.tools input[type=text],.fltbar select,.fltbar input,.vlbar select,select.sel,.stao-head select{
  font:inherit;font-size:.85rem;border:1px solid var(--line);border-radius:8px;padding:.32rem .5rem;background:#fff;color:var(--ink,#1A1B20)}
.fgroup select:focus,.fgroup input:focus,.tools select:focus,.tools input:focus,.fltbar select:focus,.fltbar input:focus{outline:none;border-color:var(--zaz-grau-dunkel);box-shadow:0 0 0 2px rgba(74,77,90,.15)}
.plbtn{border:1px solid var(--line);border-radius:8px;background:#fff;padding:.32rem .7rem;font:inherit;font-size:.82rem;font-weight:600;color:var(--ink2);cursor:pointer;white-space:nowrap}
.plbtn:hover{border-color:var(--zaz-grau-dunkel)}
.plbtn.active,.plbtn.on{background:var(--zaz-grau-dunkel);color:#fff;border-color:var(--zaz-grau-dunkel)}
.plbtn:disabled{opacity:.5;cursor:default}
.btn{padding:.5rem 1rem;border-radius:9px;font:inherit;font-weight:600;border:1px solid var(--line);background:#fff;color:var(--ink,#1A1B20);cursor:pointer}
.btn.primary{background:var(--zaz-grau-dunkel);color:#fff;border-color:var(--zaz-grau-dunkel)}
.btn.primary:disabled{opacity:.45;cursor:not-allowed}
.btn.recalc{background:var(--zaz-rot);color:#fff;border-color:var(--zaz-rot)}
.btn.recalc:disabled{opacity:.5;cursor:wait}
.fhint{margin-left:auto;font-size:.75rem;color:var(--mute)}

/* Layout & Karten */
.view{display:none;max-width:1460px;margin:0 auto;padding:1.4rem 1.25rem 4rem}
.view.active{display:block}
.vhead{display:flex;align-items:baseline;gap:1rem;margin:.4rem 0 1.1rem}
.vhead h1{font-family:var(--disp);font-weight:600;font-size:1.7rem;letter-spacing:.02em;text-transform:uppercase}
.vhead .vsub{color:var(--mute);font-size:.85rem}
/* v378: Seitenkopf — Titel und Knoepfe brechen nicht um, der Untertitel nimmt den Platz (vorher wurden Knoepfe zu mehrzeiligen Bloecken gestaucht) */
.vhead{flex-wrap:nowrap;align-items:center}
.vhead h1{white-space:nowrap;flex:0 0 auto}
.vhead .vsub{flex:1 1 20ch;min-width:0;line-height:1.3}
.vhead .plbtn,.vhead button,.vhead .seg,.vhead select,.vhead label{white-space:nowrap;flex:0 0 auto}
.vhead .mleg{white-space:nowrap;flex:0 0 auto}
.vhead span[style*="flex:1"]{flex:0 0 .5rem!important}
.grid{display:grid;gap:1rem}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.card .chead{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding:.85rem 1rem .4rem}
.card .chead h2{font-family:var(--disp);font-size:1.05rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase}
.card .chead .csub{font-size:.75rem;color:var(--mute)}
.card .cbody{padding:.6rem 1rem 1rem}

/* KPI */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-bottom:1.1rem}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);
  padding:.8rem .95rem;border-top:3px solid var(--zaz-grau)}
.kpi .klabel{font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;color:var(--mute);font-weight:600}
.kpi .kval{font-family:var(--mono);font-weight:600;font-size:1.45rem;margin:.25rem 0 .1rem;letter-spacing:-.01em}
.kpi .kval .unit{font-size:.75rem;color:var(--mute);font-weight:500;margin-left:.2rem}
.kpi .kcomp{display:flex;gap:.8rem;font-size:.76rem;color:var(--ink2)}
.kpi .kcomp b{font-family:var(--mono);font-weight:600}

/* Delta-Leiste */
.delta{display:flex;align-items:center;gap:.45rem}
.dbar{position:relative;height:6px;border-radius:3px;background:var(--line2);flex:1;min-width:56px;overflow:hidden}
.dbar::after{content:'';position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--mute);opacity:.5}
.dfill{position:absolute;top:0;bottom:0;border-radius:3px}
.dfill.p{background:var(--pos);left:50%;opacity:.75}
.dfill.n{background:var(--neg);right:50%}
.dval{font-family:var(--mono);font-size:.74rem;font-weight:600;min-width:52px;text-align:right}

/* Netzraster */
.tilegrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:.65rem}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:.6rem .7rem .55rem;
  text-align:left;transition:border-color .12s, transform .12s;display:block;width:100%}
.tile:hover{border-color:var(--zaz-grau);transform:translateY(-1px)}
.tile .trow1{display:flex;align-items:baseline;gap:.45rem}
.tile .tk{font-family:var(--disp);font-weight:700;font-size:1.1rem;color:var(--zaz-grau-tief)}
.tile .tn{font-size:.68rem;color:var(--mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tile .tval{font-family:var(--mono);font-weight:600;font-size:.95rem;margin:.3rem 0 .1rem}
.tile .tval .unit{font-size:.66rem;color:var(--mute)}
.tile svg{display:block;width:100%;height:26px;margin:.15rem 0 .3rem}
.tilesort{display:flex;gap:.4rem;align-items:center}
.tilesort button{font-size:.75rem;color:var(--ink2);padding:.25rem .55rem;border:1px solid var(--line);border-radius:7px}
.tilesort button.active{background:var(--zaz-grau);border-color:var(--zaz-grau);color:#fff;font-weight:600}

/* Tabellen */
table{width:100%;border-collapse:collapse;font-size:.84rem}
th{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--mute);font-weight:600;
  text-align:right;padding:.5rem .6rem;border-bottom:1px solid var(--line);white-space:nowrap;cursor:pointer;user-select:none}
th:first-child,td:first-child{text-align:left}
th.sorted{color:var(--zaz-grau-tief)}
th .arr{font-size:.6rem}
td{padding:.45rem .6rem;border-bottom:1px solid var(--line2);text-align:right;white-space:nowrap}
td.name{font-weight:600;color:var(--ink)}
td.name .knr{color:var(--mute);font-weight:400;font-size:.72rem;margin-left:.3rem}
tr:hover td{background:#FAFBFC}
tr.clickable{cursor:pointer}
td .heat{display:inline-block;min-width:64px;padding:.14rem .45rem;border-radius:6px;
  font-family:var(--mono);font-weight:600;font-size:.78rem}

/* Charts */
.chartbox{position:relative;height:300px}
.chartbox.tall{height:340px}
.chartbox.small{height:230px}
.legend{display:flex;gap:1.1rem;font-size:.75rem;color:var(--ink2);padding:.2rem 1rem .6rem;flex-wrap:wrap;justify-content:center}   /* v290 (CFO): Legenden unter Charts immer mittig */
p.legend{justify-content:flex-start}   /* Textnotizen unter Eingabetabellen bleiben linksbuendig */
.legend .li{display:flex;align-items:center;gap:.35rem}
.legend .sw{width:14px;height:3px;border-radius:2px}

/* Standort-Detail */
.stao-head{display:flex;align-items:center;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}
.stao-head select{border:1px solid var(--line);border-radius:8px;padding:.4rem .6rem;background:#fff;
  font-size:.95rem;font-weight:600}
.stao-head .snr{font-family:var(--mono);color:var(--mute);font-size:.85rem}
.two-col{display:grid;grid-template-columns:1.6fr 1fr;gap:1rem}
@media(max-width:1000px){.two-col{grid-template-columns:1fr}}

/* Login-Gate & Laden (von auth.js injiziert) */
.gate{position:fixed;inset:0;background:var(--paper);z-index:100;display:flex;align-items:center;justify-content:center}
.gate .gcard{background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);
  padding:2.2rem 2.4rem;max-width:420px;text-align:center}
.gate .glogo{background:var(--zaz-grau);border-radius:10px;padding:.9rem 1.2rem;display:inline-block;margin-bottom:1.2rem}
.gate .glogo img{height:30px;display:block}
.gate h1{font-family:var(--disp);font-weight:600;font-size:1.4rem;letter-spacing:.03em;
  text-transform:uppercase;margin-bottom:.3rem}
.gate p{color:var(--mute);font-size:.85rem;margin-bottom:1.4rem}
.btn-ms{display:inline-flex;align-items:center;gap:.6rem;background:var(--zaz-grau-dunkel);color:#fff;
  padding:.7rem 1.2rem;border-radius:9px;font-weight:600;font-size:.92rem}
.btn-ms:hover{background:var(--zaz-grau-tief)}
.btn-ms svg{width:16px;height:16px}
.gate .gerr{color:var(--neg);font-size:.8rem;margin-top:1rem;min-height:1.2em}
.loading{position:fixed;inset:0;background:rgba(244,245,247,.86);z-index:90;display:none;
  align-items:center;justify-content:center;font-family:var(--mono);color:var(--zaz-grau-tief);font-size:.9rem}
.loading.on{display:flex}
.errbanner{position:fixed;left:50%;bottom:1.2rem;transform:translateX(-50%);z-index:95;background:var(--neg);
  color:#fff;padding:.6rem 1rem;border-radius:9px;font-size:.83rem;max-width:min(90vw,700px);display:none;
  box-shadow:0 6px 20px rgba(0,0,0,.25)}
.errbanner.on{display:block}

/* Portal (Landingpage) */
.portal{max-width:1100px;margin:0 auto;padding:2.5rem 1.25rem 4rem}
.portal h1{font-family:var(--disp);font-weight:600;font-size:2rem;letter-spacing:.03em;text-transform:uppercase}
.portal .psub{color:var(--mute);margin:.3rem 0 2rem;font-size:.92rem}
.portalgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.1rem}
.pcard{background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);
  padding:1.4rem 1.5rem;display:block;text-decoration:none;transition:transform .12s,border-color .12s;position:relative}
.pcard:hover{transform:translateY(-2px);border-color:var(--zaz-grau)}
.pcard .picon{width:44px;height:44px;border-radius:10px;background:var(--zaz-grau);color:#fff;display:flex;
  align-items:center;justify-content:center;font-family:var(--disp);font-weight:700;font-size:1.2rem;margin-bottom:.9rem}
.pcard h2{font-family:var(--disp);font-weight:600;font-size:1.25rem;letter-spacing:.02em;text-transform:uppercase}
.pcard p{color:var(--mute);font-size:.85rem;margin-top:.35rem;line-height:1.45}
.pcard .ptag{position:absolute;top:1rem;right:1rem;font-family:var(--mono);font-size:.66rem;
  padding:.2rem .5rem;border-radius:6px;background:var(--pos-soft);color:var(--pos)}
.pcard.soon{opacity:.62;pointer-events:none}
.pcard.soon .ptag{background:var(--line2);color:var(--mute)}
.fc-note{font-size:.72rem;color:var(--mute);display:flex;align-items:center;gap:.35rem}
footer{max-width:1460px;margin:0 auto;padding:0 1.25rem 2rem;color:var(--mute);font-size:.75rem}
footer b{color:var(--ink2)}
@media(max-width:760px){html{font-size:14px}.topbar{flex-wrap:wrap;gap:.5rem;padding:.5rem 1rem}
  .filterbar{top:auto;position:static}.top-nav{margin-left:0;flex-wrap:wrap}}

/* =====================================================================
   v59 — Layout-Tokens fuer Symmetrie (Stufe D)
   EINE Quelle fuer Formular-Spalten, Monatsbreiten und Abstaende.
   Additiv: bestehende Regeln unveraendert.
   ===================================================================== */
:root{
  --sp1:.35rem; --sp2:.7rem; --sp3:1.05rem; --sp4:1.4rem;
  --col-xs:72px; --col-s:100px; --col-m:140px; --col-l:220px; --col-mon:86px;
}
/* KPI-Kacheln zwingend gleich hoch (Kritik: Kacheln ungleich gross) */
.kpis{grid-auto-rows:1fr}
.kpi{display:flex;flex-direction:column;justify-content:space-between}
/* Formular-Raster: Label oben, Feld fuellt die Spalte — nichts verzieht mehr */
.formgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--col-m),1fr));gap:var(--sp2) var(--sp3)}
.formgrid .fg{display:flex;flex-direction:column;gap:.25rem;min-width:0}
.formgrid label{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--mute);
  font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.formgrid input,.formgrid select{border:1px solid var(--line);border-radius:7px;
  padding:.4rem .55rem;font-size:.9rem;width:100%}
.formgrid input.zahl{font-family:var(--mono);text-align:right}
/* Editor-Matrizen: feste Spalten via colgroup — Zeilen bleiben in der Breite stabil */
table.matrixfix{table-layout:fixed;width:max-content;min-width:100%}
table.matrixfix input{width:100%}
/* v107: Excel-Export-Button — Portal-Standard: Excel-Symbol in Excel-Gruen (#217346) + Text «Excel».
   CSV-/JSON-Downloads sind entfernt (kommen bei Bedarf spaeter zurueck). */
.xlsbtn{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .45rem}
.xlsbtn .xls-ico{width:18px;height:18px;flex:none;display:block}
.xlsbtn:hover{border-color:#217346;color:#217346}

/* ==== v122: Seitliche Navigation (alle Boards; Landing ohne) + Portal-Knopf entfaellt ==== */
.portal-btn{display:none !important}
body.has-sidenav{padding-left:188px}
.sidenav{position:fixed;top:0;left:0;bottom:0;width:188px;z-index:60;background:var(--surface,#fff);
  border-right:1px solid var(--line);overflow-y:auto;padding:0 0 1rem;font-size:.84rem}
/* v124: Logo-Kopf statt Schriftzug — grauer Balken exakt in Topbar-Hoehe (56px), Logo wie in der Topbar */
.sidenav .shome{display:flex;align-items:center;height:56px;background:var(--zaz-grau);
  padding:0 1rem;margin-bottom:.35rem;text-decoration:none}
.sidenav .shome img{height:34px;display:block}
.sidenav .shome:hover{background:var(--zaz-grau-dunkel)}
/* v124: Gruppentitel groesser und kraeftiger (waren kaum leserlich) */
.sidenav .sgroup{font-family:var(--disp);font-size:.82rem;font-weight:600;letter-spacing:.07em;
  text-transform:uppercase;color:var(--zaz-grau-dunkel);padding:.8rem 1rem .3rem}
.sidenav a.sitem{display:block;padding:.42rem 1rem .42rem calc(1rem - 3px);color:var(--ink,#22242C);
  text-decoration:none;border-left:3px solid transparent}
.sidenav a.sitem:hover{background:#F4F5F8}
.sidenav a.sitem.active{background:#F0F1F4;font-weight:600;border-left-color:var(--zaz-grau-dunkel)}
.sidenav a.sitem.tool.active{border-left-color:var(--zaz-rot)}
.sidenav .sgroup.tools{color:#B24046}
@media (max-width:1180px){ .sidenav{display:none} body.has-sidenav{padding-left:0} }
@media print{ .sidenav{display:none} body.has-sidenav{padding-left:0} }
/* Landing: Gruppierung Dashboards / Tools / Wiki */
.psection{font-family:var(--disp);font-weight:600;font-size:1rem;letter-spacing:.05em;text-transform:uppercase;
  color:var(--zaz-grau-tief);margin:1.6rem 0 .7rem;padding-bottom:.3rem;border-bottom:1px solid var(--line)}
.psection:first-of-type{margin-top:1rem}
.psection.tools{color:#B24046}
.pcard.tool{border-top:3px solid var(--zaz-rot)}
.pcard.wikic{border-top:3px solid var(--zaz-grau)}

/* v124: Topbar-Logo entfaellt bei sichtbarer Sidebar (Logo sitzt im Sidebar-Kopf) */
@media (min-width:1181px){
  body.has-sidenav .topbar img.logo{display:none}
  body.has-sidenav .topbar .prodname{border-left:none;padding-left:0}
}

/* =====================================================================
   v368 (CFO 07.10.2026) — Mobile: kompakte Darstellung bis 760 px. Additiv, Desktop unveraendert.
   Kopfleiste scrollt horizontal, Filter kompakt, Tabellen scrollen in der Karte mit fixierter Positionsspalte,
   VJ- und Code-Spalte ausgeblendet, KPI-Kacheln zweispaltig.
   ===================================================================== */
@media (max-width:760px){
  .topbar{flex-wrap:nowrap;gap:.4rem;padding:.4rem .6rem;overflow:hidden}
  .topbar .logo{height:26px} .topbar .prodname{font-size:.95rem}
  .top-nav{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;margin-left:.2rem;flex:1;min-width:0}
  .top-nav::-webkit-scrollbar{display:none}
  .top-nav button,.top-nav a{padding:.35rem .6rem;font-size:.8rem;white-space:nowrap}
  .userchip{display:none}
  .filterbar{gap:.45rem .8rem;padding:.4rem .6rem}
  .fgroup{gap:.3rem} .fgroup label{font-size:.6rem;letter-spacing:.05em} .fgroup select{font-size:.78rem;padding:.26rem .4rem;max-width:44vw}
  .seg button{padding:.26rem .5rem;font-size:.72rem}
  .fhint{display:none}
  .view{padding:.7rem .55rem 3rem}
  .vhead{flex-wrap:wrap;gap:.3rem .7rem;margin:.2rem 0 .7rem}
  .vhead h1{font-size:1.2rem;white-space:normal} .vhead .vsub{font-size:.74rem;width:100%;flex:1 1 100%}
  .vhead .plbtn{padding:.28rem .6rem;font-size:.74rem}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;margin-bottom:.7rem}
  .kpi{padding:.6rem .7rem} .kpi .kval{font-size:1.05rem} .kpi .klabel{font-size:.62rem} .kpi .kcomp{font-size:.66rem}
  .card .chead{flex-wrap:wrap;gap:.2rem .6rem} .card .chead h2{font-size:1rem} .card .csub{font-size:.7rem;width:100%}
  .card .cbody{overflow-x:auto;-webkit-overflow-scrolling:touch;padding:.4rem .5rem}
  table.pl{font-size:.72rem;min-width:760px}
  table.pl td,table.pl th{padding:.22rem .35rem}
  table.pl .vjc,table.pl td.code,table.pl th.code{display:none}
  table.pl th:first-child{min-width:150px}
  table.pl td.lbl,table.pl th.lbl{position:sticky;left:0;z-index:2;background:#fff;max-width:46vw;white-space:normal;line-height:1.15;box-shadow:2px 0 0 var(--line)}
  table.pl th.lbl{background:#fff;z-index:3}
  table.pl tr.sum td.lbl{background:#FAFBFC} table.pl tr.res td.lbl{background:var(--zaz-grau-dunkel,#4A4D5A)} table.pl tr.sec td{position:static}
  table.pl tr.pct td.lbl,table.pl tr.sub td.lbl{background:#fff}
  .tt-bar{margin:.1rem 0 .2rem} .tt-bar button{padding:.18rem .45rem;font-size:.66rem}
  footer{padding:0 .6rem 1.5rem;font-size:.66rem}
}
@media (max-width:760px) and (orientation:landscape){ .kpis{grid-template-columns:repeat(3,minmax(0,1fr))} }

/* ===== v457: seitliches Info-Panel (statt Mouseover-Tooltips, iPad) — ZAZ.panel / data-info in assets/auth.js ===== */
.zpanel{position:fixed;top:56px;right:0;bottom:0;width:max-content;min-width:360px;max-width:min(720px,94vw);background:var(--surface,#fff);border-left:1px solid var(--line);
  box-shadow:-6px 0 18px rgba(0,0,0,.08);z-index:60;display:none;flex-direction:column;font-size:.82rem;color:var(--ink,#1A1B20)}
.zpanel.on{display:flex}
.zpanel .zp-head{display:flex;align-items:center;gap:.6rem;padding:.7rem .9rem;border-bottom:1px solid var(--line);background:var(--paper,#F4F5F7)}
.zpanel .zp-head h3{margin:0;font-family:var(--disp);font-size:1rem;font-weight:600;letter-spacing:.02em;flex:1;min-width:0}
.zpanel .zp-x{font-size:1.35rem;line-height:1;border:0;background:none;color:var(--ink2);cursor:pointer;padding:0 .2rem}
.zpanel .zp-x:hover{color:var(--zaz-rot,#E4040E)}
.zpanel .zp-body{padding:.8rem .9rem 1.4rem;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;line-height:1.45}
.zpanel .zp-text{white-space:pre-line}
.zpanel h4{margin:.9rem 0 .3rem;font-size:.78rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink2)}
.zpanel h4:first-child{margin-top:0}
.zpanel p{margin:.3rem 0}
.zpanel .zp-note{color:var(--mute);font-size:.76rem}
.zpanel table.calc{border-collapse:collapse;width:100%;font-size:.8rem}
.zpanel table.calc td{padding:.22rem .3rem;border-bottom:1px solid var(--line2,#EEF0F3);vertical-align:top;overflow-wrap:anywhere}
.zpanel table.calc td:first-child{min-width:14rem}
.zpanel .zp-wahl{display:flex;flex-direction:column;gap:.6rem;margin:.4rem 0}
.zpanel .zp-wahl .btn{text-align:left;padding:.7rem .9rem;line-height:1.35}
.zpanel .zp-wahl .btn small{display:block;font-weight:400;color:var(--ink2);margin-top:.15rem}
.zpanel table.calc td.n{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}
.zpanel table.calc tr.sum td{font-weight:600;border-top:1px solid var(--line);border-bottom:2px solid var(--line)}
.zpanel table.calc td.mute{color:var(--mute);font-size:.74rem}
[data-info],[data-info-html]{cursor:pointer}
th[data-info],th[data-info-html]{text-decoration:underline dotted var(--mute);text-underline-offset:3px}
@media(max-width:760px){
  .zpanel{top:auto;left:0;right:0;width:auto;min-width:0;max-width:none;max-height:70vh;border-left:0;border-top:1px solid var(--line);border-radius:14px 14px 0 0;box-shadow:0 -6px 18px rgba(0,0,0,.12)}
}

/* ===== v464: Mehrfachauswahl-Dropdown in Filterleisten (.fgroup > .ddm) — Knopf wie ein Select, Liste mit Checkboxen ===== */
.ddm{position:relative}
.ddm>button{border:1px solid var(--line);border-radius:8px;padding:.32rem 1.6rem .32rem .5rem;background:#fff;font:inherit;font-size:.85rem;color:var(--ink);cursor:pointer;min-width:9em;text-align:left;white-space:nowrap;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%23666' stroke-width='1.5'/></svg>");background-repeat:no-repeat;background-position:right .5rem center}
.ddm>button:focus,.ddm.on>button{outline:none;border-color:var(--zaz-grau-dunkel)}
.ddm .ddl{display:none;position:absolute;top:calc(100% + 4px);left:0;z-index:45;min-width:22rem;max-width:min(34rem,90vw);max-height:22rem;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:.4rem .5rem}
.ddm.on .ddl{display:block}
.ddm .ddt{display:flex;gap:.35rem;padding:.2rem .2rem .45rem;border-bottom:1px solid var(--line2,#EEF0F3);margin-bottom:.25rem}
.ddm .ddl label{display:flex;gap:.5rem;align-items:center;padding:.22rem .25rem;font-size:.8rem;text-transform:none;letter-spacing:0;color:var(--ink);cursor:pointer;border-radius:6px}
.ddm .ddl label:hover{background:#F6F7F9}
.ddm .ddl label .kb{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ddm .ddl label .kv{font-family:var(--mono);color:var(--mute);white-space:nowrap;font-size:.74rem}

/* ===== v465: Zeitraum-Schiene (.yrslider/.ytrack/.yfill) — gemeinsam fuer alle Dashboards (bisher lokale Kopien in Standorte, FR, Patienten, Employees) =====
   Zwei Inputs = Von/Bis (zweiter Daumen rot), ein Input = Bis (Daumen rot, Fuellung von links). .yrslider.klein fuer Filterleisten. */
.yrslider{display:flex;align-items:center;gap:1.1rem;padding:.15rem 0}
.yrslider .ylbl{font-family:var(--mono);font-weight:700;font-size:1.1rem;min-width:3.4em;text-align:center;background:var(--bg,#f4f5f7);border:1px solid var(--line);border-radius:6px;padding:.25rem .4rem}
.ytrack{position:relative;flex:1;height:30px}
.ytrack::before{content:'';position:absolute;left:0;right:0;top:13px;height:5px;background:var(--line);border-radius:3px}
.yfill{position:absolute;top:13px;height:5px;background:var(--zaz-rot,#E4040E);opacity:.85;border-radius:3px;pointer-events:none}
.ytrack input[type=range]{position:absolute;left:0;right:0;top:0;width:100%;height:30px;appearance:none;-webkit-appearance:none;background:none;pointer-events:none;margin:0;outline:none}
.ytrack input[type=range]::-webkit-slider-runnable-track{background:none;height:30px}
.ytrack input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:#fff;border:3px solid var(--zaz-grau);box-shadow:0 1px 5px rgba(0,0,0,.3);pointer-events:auto;cursor:grab;margin-top:5px}
.ytrack input[type=range]:last-of-type::-webkit-slider-thumb{border-color:var(--zaz-rot,#E4040E)}
.ytrack input[type=range]::-moz-range-track{background:none;height:30px}
.ytrack input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#fff;border:3px solid var(--zaz-grau);box-shadow:0 1px 5px rgba(0,0,0,.3);pointer-events:auto;cursor:grab}
.ytrack input[type=range]:last-of-type::-moz-range-thumb{border-color:var(--zaz-rot,#E4040E)}
.ytrack input[type=range]:active::-webkit-slider-thumb{cursor:grabbing}
.yrslider.klein{display:inline-grid;grid-template-columns:auto 220px auto;align-items:center;gap:.6rem;padding:0;flex:0 0 auto}
.yrslider.klein .ylbl{font-size:.85rem;min-width:3em;padding:.15rem .35rem}
.yrslider.klein .ytrack{flex:none;width:220px;min-width:220px}
.ytrack .yfill{max-width:100%}
.filterbar .fgroup:has(.yrslider){flex:0 0 auto}
/* v466: Monatsschiene — Monatskuerzel unter der Schiene (12 Positionen, Daumenbreite beruecksichtigt) */
.yrslider.mon .ytrack{height:44px}
.yrslider.klein.mon{grid-template-columns:320px}
.yrslider.klein.mon .ytrack{width:320px;min-width:320px}
.ytrack .yticks{position:absolute;left:10px;right:10px;top:28px;display:flex;justify-content:space-between;pointer-events:none;font-family:var(--mono);font-size:.62rem;color:var(--mute);line-height:1}
.ytrack .yticks span{width:0;display:flex;justify-content:center}
.ytrack .yticks span.on{color:var(--ink);font-weight:600}

/* ===== v469: schwebende horizontale Scrollleiste fuer breite Tabellen (ZAZ.scrollProxy, automatisch fuer .scrollx) ===== */
.zscrollbar{position:fixed;bottom:0;height:16px;overflow-x:auto;overflow-y:hidden;z-index:58;display:none;background:rgba(255,255,255,.96);border-top:1px solid var(--line);box-shadow:0 -2px 8px rgba(0,0,0,.08);scrollbar-width:thin;scrollbar-color:var(--zaz-grau,#9A9DAA) transparent}
.zscrollbar>div{height:1px}
.zscrollbar::-webkit-scrollbar{height:12px}
.zscrollbar::-webkit-scrollbar-track{background:transparent}
.zscrollbar::-webkit-scrollbar-thumb{background:var(--zaz-grau,#9A9DAA);border-radius:6px;border:2px solid #fff}
.zscrollbar::-webkit-scrollbar-thumb:hover{background:var(--zaz-grau-dunkel,#4A4D5A)}

/* ===== v473: Dokumentations-Tabellen (.tw/.wtab) und Textblock (.wdoc) — gemeinsam fuer Method Wiki und die Reiter «Datenstruktur» der Dashboards
   (bisher lokal im Wiki). Zellen fest, Umbruch in der Zelle, Kopf dunkelgrau, Zebra, Code monospace. ===== */
.tw{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:.6rem 0 1rem}
.wtab{border-collapse:collapse;font-size:.8rem;width:100%;table-layout:fixed;background:var(--surface,#fff)}
.wtab th,.wtab td{border:1px solid var(--line);padding:.42rem .6rem;text-align:left;vertical-align:top;line-height:1.4;overflow-wrap:anywhere;white-space:normal;text-transform:none;letter-spacing:0;cursor:default;user-select:text}
.wtab th{background:var(--zaz-grau-tief,#33353E);color:#fff;font-weight:600;font-family:var(--disp);font-size:.82rem;letter-spacing:.03em;border-color:var(--zaz-grau-dunkel,#4B4E5A)}
.wtab tbody tr:hover td{background:#FFF8F8}
.wtab tbody tr:nth-child(even) td{background:var(--paper,#F4F5F7)}
.wtab td.k{font-weight:600}
.wtab td.m{font-family:var(--mono);font-size:.76rem}
.wtab td.c{text-align:center}
.wtab td.n{text-align:right;font-family:var(--mono);font-size:.76rem;white-space:nowrap}
.wtab tr.sub td{font-weight:600;background:var(--line2,#EEF0F3)!important;color:var(--ink)}
.wtab td ul{margin:0;padding-left:1.05rem}
.wtab td ul li{margin:.12rem 0;max-width:none}
.wtab td .ok{color:var(--pos,#1E7A46);font-weight:600}
.wtab td .nein{color:var(--mute)}
.tw.schmal .wtab{width:auto;min-width:60%}
@media(max-width:760px){.wtab{font-size:.74rem}.wtab th,.wtab td{padding:.32rem .45rem}.wtab{table-layout:auto;min-width:560px}}
.wdoc h3{font-family:var(--disp);font-size:1.18rem;margin:2rem 0 .4rem;padding-top:.8rem;border-top:1px solid var(--line2,#ECEDF0);letter-spacing:.01em}
.wdoc h3:first-child{margin-top:.4rem;padding-top:0;border-top:none}
.wdoc p,.wdoc li{max-width:80ch;line-height:1.5}
.wdoc p{margin:.45rem 0}
.wdoc .kintro{color:var(--ink2);max-width:80ch;margin:0 0 1rem;line-height:1.5}
.wdoc ul{padding-left:1.2rem} .wdoc li{margin:.2rem 0}
.wdoc code,.wtab code{font-family:var(--mono);font-size:.84em;background:var(--paper,#f4f5f7);border:1px solid var(--line);border-radius:4px;padding:.03em .3em;white-space:nowrap}
.wdoc pre{font-family:var(--mono);font-size:.76rem;background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:.7rem .9rem;overflow-x:auto;line-height:1.5;margin:.4rem 0 1rem;max-width:100%}
.wdoc .stand{font-size:.78rem;color:var(--mute);margin:0 0 1rem}
.wdoc h4{font-size:.95rem;margin:.9rem 0 .2rem;color:var(--ink)}

/* ===== v489: erste Spalte in horizontal scrollbaren Tabellen angeheftet (Klasse zfix1 setzt auth.js fuer jede Tabelle in einem
   Container mit overflow-x auto|scroll). Niedrige Spezifitaet, damit Zeilenhintergruende der Dashboards (Summen, Zebra, Hover) erhalten bleiben. ===== */
.zfix1 td:first-child{position:sticky;left:0;z-index:2;background:#fff;box-shadow:2px 0 0 var(--line)}
.zfix1 th:first-child{position:sticky;left:0;z-index:3;background:#fff;box-shadow:2px 0 0 var(--line)}
.zfix1 td[colspan]:first-child,.zfix1 th[colspan]:first-child{box-shadow:none}
/* v510: zweite angeheftete Spalte (table[data-zfix="2"], Versatz = Breite der ersten Spalte, gemessen in auth.js) */
.zfix2 td:nth-child(2){position:sticky;left:var(--zfix1w,0px);z-index:2;background:#fff;box-shadow:2px 0 0 var(--line)}
.zfix2 th:nth-child(2){position:sticky;left:var(--zfix1w,0px);z-index:3;background:#fff;box-shadow:2px 0 0 var(--line)}
.zfix2 td:first-child,.zfix2 th:first-child{box-shadow:none}
.zfix2 td[colspan]:nth-child(2),.zfix2 th[colspan]:nth-child(2){position:static;box-shadow:none}
