@font-face{font-family:'Lexend';src:url('/assets/fonts/lexend.woff') format('woff');font-weight:100 900;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url('/assets/fonts/jetbrains-mono.woff') format('woff');font-weight:100 800;font-display:swap}
html{-webkit-text-size-adjust:100%}
body{margin:0}
[hidden]{display:none!important}
.wm{display:inline-flex;align-items:center;padding:6px 4px;flex:none}
.wm img{height:26px;width:auto;display:block}

/* Layout: dark tool bar, a tab strip (Start, Patterns, Roles and lines, People, Rota, Costs), then one working view per tab built from panels and tables. */
:root{
  --font-ui:'Lexend',system-ui,-apple-system,'Segoe UI',sans-serif;
  --font-data:'JetBrains Mono',ui-monospace,'Cascadia Mono',Consolas,monospace;
  --bg:#F4F7F7;--panel:#FFFFFF;--panel2:#EEF3F4;--ink:#0F2B45;--muted:#4A5563;--line:#D5DDE0;--line2:#7F8E99;
  --accent:#F5B83D;--accent-ink:#0F2B45;--sel:#FFF4D6;--wkend:#E6ECEE;--brand-teal:#22C1A0;
  --bar:#0F2B45;--bar-ink:#FFFFFF;--bar-muted:#B8C7D1;--bar-line:#2A4A69;
  --off:#E3E8EA;--off-ink:#4A5563;
  --s1:#F5B83D;--s1i:#0F2B45;--s2:#2F4B7C;--s2i:#FFFFFF;--s3:#E8925A;--s3i:#0F2B45;--s4:#FBE7A1;--s4i:#0F2B45;
  --s5:#BFE0CB;--s5i:#0F2B45;--s6:#C3BCF0;--s6i:#0F2B45;--s7:#93D6D2;--s7i:#0F2B45;
  --err:#C62D2D;--err-bg:#FDECEA;--warn:#8A4B08;--warn-bg:#FDF1DC;--ok:#0E7A67;--ok-bg:#E1F4EF;
  --series:#0E7A67;--grid:#E1E7EA;--axis:#5E6B76;--crit:#C62D2D;--warnS:#F5B83D;--goodS:#0E7A67;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#0B1622;--panel:#12212F;--panel2:#182A3A;--ink:#EEF3F6;--muted:#A9B7C2;--line:#26394A;--line2:#6B7F8F;
  --accent:#F5B83D;--accent-ink:#0F2B45;--sel:#2A2814;--wkend:#152535;--brand-teal:#22C1A0;
  --bar:#08111B;--bar-ink:#FFFFFF;--bar-muted:#A9B7C2;--bar-line:#26394A;
  --off:#24333F;--off-ink:#A9B7C2;
  --s1:#F5B83D;--s1i:#0F2B45;--s2:#4A5FB0;--s2i:#FFFFFF;--s3:#E8925A;--s3i:#0F2B45;--s4:#F3DE94;--s4i:#0F2B45;
  --s5:#9FD1B2;--s5i:#0F2B45;--s6:#AEA6E8;--s6i:#0F2B45;--s7:#7CCAC6;--s7i:#0F2B45;
  --err:#F97066;--err-bg:#3A1C1A;--warn:#F5B867;--warn-bg:#36290F;--ok:#5EE6C5;--ok-bg:#12302A;
  --series:#22C1A0;--grid:#1F3142;--axis:#8FA0AD;--crit:#F97066;--warnS:#F5B83D;--goodS:#22C1A0;
  color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#0B1622;--panel:#12212F;--panel2:#182A3A;--ink:#EEF3F6;--muted:#A9B7C2;--line:#26394A;--line2:#6B7F8F;
  --accent:#F5B83D;--accent-ink:#0F2B45;--sel:#2A2814;--wkend:#152535;--brand-teal:#22C1A0;
  --bar:#08111B;--bar-ink:#FFFFFF;--bar-muted:#A9B7C2;--bar-line:#26394A;
  --off:#24333F;--off-ink:#A9B7C2;
  --s1:#F5B83D;--s1i:#0F2B45;--s2:#4A5FB0;--s2i:#FFFFFF;--s3:#E8925A;--s3i:#0F2B45;--s4:#F3DE94;--s4i:#0F2B45;
  --s5:#9FD1B2;--s5i:#0F2B45;--s6:#AEA6E8;--s6i:#0F2B45;--s7:#7CCAC6;--s7i:#0F2B45;
  --err:#F97066;--err-bg:#3A1C1A;--warn:#F5B867;--warn-bg:#36290F;--ok:#5EE6C5;--ok-bg:#12302A;
  --series:#22C1A0;--grid:#1F3142;--axis:#8FA0AD;--crit:#F97066;--warnS:#F5B83D;--goodS:#22C1A0;
  color-scheme:dark}
*{box-sizing:border-box}
/* insights */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));gap:12px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:4px;min-width:0}
.kpi .k{font-size:13px;font-weight:600;color:var(--muted)}
.kpi .v{font-size:26px;font-weight:800;letter-spacing:-.01em;line-height:1.15}
.kpi .s{font-size:13px;color:var(--muted)}
.stat{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--ink);white-space:nowrap}
.stat svg{width:16px;height:16px;flex:none}
.tchart{display:grid;grid-template-columns:64px 1fr;gap:0 8px}
.tchart .yax{position:relative;height:240px}
.tchart .yax span{position:absolute;right:0;transform:translateY(50%);font:500 11px/1 var(--font-data);color:var(--axis);font-variant-numeric:tabular-nums}
.tchart .plot{position:relative;height:240px;border-bottom:1px solid var(--axis)}
.tchart .gl{position:absolute;left:0;right:0;height:1px;background:var(--grid)}
.tchart .cols{position:absolute;inset:0;display:flex;gap:4px;align-items:flex-end;padding:0 2px}
.tchart .col{position:relative;flex:1;height:100%;display:flex;align-items:flex-end;justify-content:center;cursor:default;outline-offset:2px}
.tchart .col:hover,.tchart .col:focus-visible{background:color-mix(in srgb,var(--series) 8%,transparent)}
.tchart .bar{width:min(70%,44px);background:var(--series);border-radius:4px 4px 0 0;min-height:1px}
.tchart .bud{position:absolute;left:6%;right:6%;border-top:2px dashed var(--ink);height:0}
.tchart .xl{grid-column:2;display:flex;gap:4px;padding:6px 2px 0}
.tchart .xl span{flex:1;text-align:center;font:500 11px/1.2 var(--font-data);color:var(--axis);white-space:nowrap;overflow:hidden}
.lgd{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:13px;color:var(--muted);margin-bottom:12px}
.lgd span{display:inline-flex;align-items:center;gap:6px}
.lgd i{display:inline-block;width:14px;height:14px;border-radius:3px;background:var(--series)}
.lgd i.dash{background:none;border-top:2px dashed var(--ink);height:0;width:18px;border-radius:0}
.urows{display:flex;flex-direction:column;gap:2px}
.urow{display:grid;grid-template-columns:minmax(150px,240px) minmax(120px,1fr) auto minmax(120px,auto);gap:8px 14px;align-items:center;padding:8px 4px;border-radius:8px}
.urow:hover{background:var(--panel2)}
.ulab{display:flex;flex-direction:column;min-width:0}
.ulab strong{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ulab small{font-size:12px;color:var(--muted)}
.utrack{position:relative;height:14px;background:var(--panel2);border-radius:4px}
.ubar{position:absolute;left:0;top:0;bottom:0;background:var(--series);border-radius:0 4px 4px 0}
.umark{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--ink)}
.uval{font:500 13px/1.2 var(--font-data);font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right}
.ugrp{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:12px 4px 2px}
@media (max-width:720px){.urow{grid-template-columns:1fr auto}.utrack{grid-column:1/-1;grid-row:2}}
.sbar{display:flex;height:22px;border-radius:5px;overflow:hidden;gap:2px;background:var(--panel)}
.sbar div{min-width:2px}
#tip{position:fixed;z-index:50;pointer-events:none;background:var(--ink);color:var(--panel);font-size:13px;line-height:1.4;padding:8px 10px;border-radius:8px;max-width:280px;white-space:pre-line;box-shadow:0 6px 20px rgba(0,0,0,.2)}
.dept-h{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:18px 0 8px}
.dept-h .inp{font-weight:700;font-size:16px;flex:1 1 220px;max-width:360px}
body{background:var(--bg);color:var(--ink);font-family:var(--font-ui);font-size:15px;line-height:1.45}
h1,h2,h3{text-wrap:balance;margin:0}
p{margin:0}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--brand-teal);outline-offset:2px}
.gut{padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.inner{max-width:1440px;margin:0 auto}

.bar{background:var(--bar);color:var(--bar-ink)}
.bar .inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;padding-block:12px}
.brand{display:flex;align-items:center;gap:12px;min-width:0;flex:1 1 280px}
.brand input{background:transparent;border:1px solid transparent;color:var(--bar-ink);font-weight:800;font-size:20px;letter-spacing:-.01em;padding:6px 8px;border-radius:6px;min-width:0;width:100%;max-width:380px}
.brand input:hover{border-color:var(--bar-line)}
.brand input:focus{border-color:var(--bar-muted)}
.bar-actions{display:flex;flex-wrap:wrap;gap:8px}
.bbtn{background:transparent;color:var(--bar-ink);border:1px solid var(--bar-line);border-radius:8px;min-height:44px;padding:0 14px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:8px}
.bbtn:hover{border-color:var(--bar-muted)}
.bbtn.pri{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:700}
.privacy{background:var(--panel2);border-bottom:1px solid var(--line)}
.privacy .inner{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;justify-content:space-between;padding-block:8px;font-size:13px;color:var(--muted);min-height:44px}
.privacy strong{color:var(--ink)}
#status{display:flex;align-items:center;gap:10px;font-weight:600;color:var(--ink)}
#status button{background:none;border:1px solid var(--line2);border-radius:6px;padding:4px 10px;cursor:pointer;font-weight:700;min-height:32px}

.tabs{background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:env(safe-area-inset-top,0px);z-index:5}
.tabs .inner{display:flex;gap:2px;overflow-x:auto}
.tab{border:0;background:none;padding:0 14px;min-height:50px;font-weight:600;color:var(--muted);border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer;display:flex;align-items:center;gap:8px}
.tab:hover{color:var(--ink)}
.tab[aria-selected=true]{color:var(--ink);border-bottom-color:var(--brand-teal);font-weight:700}
.badge{font:700 11px/1 var(--font-data);background:var(--err-bg);color:var(--err);border-radius:99px;padding:4px 7px}
.badge.n{background:var(--panel2);color:var(--muted)}

main.inner{display:flex;flex-direction:column;gap:20px;padding-block:20px 56px}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px;min-width:0}
.panel-h{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:14px}
.panel-h h2{font-size:18px;font-weight:700}
.lead{font-size:15px;color:var(--muted);max-width:70ch}
.sub{color:var(--muted);font-size:13px;font-weight:500}
.row{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start}
.grow2{flex:3 1 560px;min-width:0}
.grow1{flex:2 1 340px;min-width:0}
.stack{display:flex;flex-direction:column;gap:14px}
.hstack{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
.banner{border:1px solid var(--line);background:var(--sel);border-radius:12px;padding:12px 16px;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;align-items:center;font-size:14px}

.fld{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:var(--muted)}
.inp{background:var(--panel);border:1px solid var(--line2);border-radius:8px;min-height:44px;padding:8px 10px;color:var(--ink);font-weight:500;font-size:15px;min-width:0}
.inp.sm{min-height:38px;padding:5px 8px;font-size:14px}
textarea.inp{min-height:110px;font-family:var(--font-data);font-size:13px;width:100%}
.check{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14px;min-height:44px;color:var(--ink);cursor:pointer}
.check input,.t input[type=checkbox]{width:18px;height:18px;accent-color:var(--ink)}
.btn{border-radius:8px;min-height:44px;padding:0 14px;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:2px solid var(--ink);background:var(--panel);color:var(--ink);white-space:nowrap}
.btn.pri{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.btn.quiet{border:1px solid var(--line2);font-weight:600}
.btn:disabled{opacity:.4;cursor:default}
.ibtn{width:38px;height:38px;border-radius:8px;border:1px solid transparent;background:transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--ink);flex:none}
.ibtn:hover:not(:disabled){border-color:var(--line2)}
.ibtn:disabled{opacity:.3;cursor:default}
.ibtn svg{width:18px;height:18px}
.linkbtn{background:none;border:0;padding:0;text-decoration:underline;cursor:pointer;color:var(--ink);font-weight:600;min-height:40px}

.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,270px),1fr));gap:14px}
.card{border:1px solid var(--line);border-radius:12px;padding:16px;display:flex;flex-direction:column;gap:10px;background:var(--panel)}
.card h3{font-size:17px;font-weight:700}
.card p{font-size:14px;color:var(--muted)}
.card .btn{margin-top:auto;align-self:flex-start}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{font:700 10.5px/1 var(--font-data);letter-spacing:.06em;text-transform:uppercase;background:var(--panel2);border:1px solid var(--line);border-radius:99px;padding:6px 9px;color:var(--muted)}

.strip{display:grid;gap:3px;grid-template-columns:repeat(var(--n),minmax(14px,1fr))}
.strip-wrap{overflow-x:auto}
.c{height:26px;border-radius:4px;display:flex;align-items:center;justify-content:center;font:700 11px/1 var(--font-data);min-width:0}
.c.o{background:var(--off);color:var(--off-ink)}
.c.x{background:transparent;outline:1px dashed var(--line2);outline-offset:-1px}
.c.s1{background:var(--s1);color:var(--s1i)}.c.s2{background:var(--s2);color:var(--s2i)}.c.s3{background:var(--s3);color:var(--s3i)}
.c.s4{background:var(--s4);color:var(--s4i)}.c.s5{background:var(--s5);color:var(--s5i)}.c.s6{background:var(--s6);color:var(--s6i)}.c.s7{background:var(--s7);color:var(--s7i)}

.plist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.pitem{border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:8px;cursor:pointer;background:var(--panel)}
.pitem.is-sel{border:2px solid var(--ink);background:var(--sel);padding:9px 11px}
.pitem-top{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between}
.pitem-name{background:none;border:0;padding:4px 0;font-weight:700;font-size:15px;cursor:pointer;text-align:left;color:var(--ink)}
.layer{border:1px solid var(--line);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:12px;background:var(--panel2)}
.layer.is-off{opacity:.6}
.layer-top{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.layer-top .inp{flex:1 1 180px}
.tools{display:flex;gap:2px;margin-left:auto}
.two{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.pat{display:flex;flex-wrap:wrap;gap:4px}
.pat button{width:38px;height:38px;border-radius:6px;border:0;cursor:pointer;font:700 12px var(--font-data)}
.hint{font-size:13px;color:var(--muted);line-height:1.5}
.dates{display:flex;flex-wrap:wrap;gap:6px}
.dchip{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--line2);border-radius:99px;padding:0 4px 0 12px;font-size:13.5px;font-weight:600;min-height:36px;background:var(--panel)}
.dchip button{width:30px;height:30px;border-radius:99px;border:0;background:transparent;cursor:pointer;color:var(--ink)}
.cal{display:grid;grid-template-columns:repeat(7,minmax(34px,1fr));gap:4px;max-width:520px}
.cal .hd{font:600 11px/1 var(--font-data);color:var(--muted);text-align:center;padding:4px 0}
.cal .c{height:40px;flex-direction:column;gap:2px}
.cal .c small{font:500 9.5px/1 var(--font-data);opacity:.8}

.tw{overflow-x:auto}
table.t{border-collapse:collapse;width:100%}
.t th{font-size:12px;font-weight:600;color:var(--muted);text-align:left;padding:8px 6px;border-bottom:1px solid var(--line);white-space:nowrap;vertical-align:bottom}
.t td{padding:5px 6px;border-bottom:1px solid var(--line);vertical-align:middle}
.t tr.tot td{font-weight:700;border-top:2px solid var(--ink)}
.t .num{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--font-data);font-size:13px;white-space:nowrap}
.t .inp{width:100%}
.t .w-s{width:90px}.t .w-m{width:130px}
.flag{display:inline-block;font-size:12px;font-weight:600;border-radius:6px;padding:3px 7px;margin:2px 4px 2px 0;white-space:nowrap}
.flag.err{background:var(--err-bg);color:var(--err)}.flag.warn{background:var(--warn-bg);color:var(--warn)}.flag.ok{background:var(--ok-bg);color:var(--ok)}.flag.info{background:var(--panel2);color:var(--muted)}
.neg{color:var(--err)}.pos{color:var(--ok)}

.seg{display:inline-flex;border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.seg button{border:0;background:var(--panel);min-height:40px;padding:0 12px;font-weight:600;cursor:pointer;font-size:14px}
.seg button[aria-pressed=true]{background:var(--ink);color:var(--panel);font-weight:700}
.summary{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.pill{font-size:13px;font-weight:600;border-radius:99px;padding:6px 12px;border:1px solid var(--line);background:var(--panel2)}
.pill.bad{background:var(--err-bg);color:var(--err);border-color:transparent}
.pill.good{background:var(--ok-bg);color:var(--ok);border-color:transparent}
.pill.warnp{background:var(--warn-bg);color:var(--warn);border-color:transparent}

.grid-wrap{overflow-x:auto;padding-bottom:4px}
.rg{display:grid;gap:3px;align-items:center;font-variant-numeric:tabular-nums}
.rg .hd{font:500 10.5px/1.25 var(--font-data);color:var(--muted);text-align:center;white-space:pre-line;padding:2px 0;border-radius:4px}
.rg .hd.we{background:var(--wkend)}
.rg .hd.mo{color:var(--ink);font-weight:700}
.rg .lab{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:6px}
.rg .lab.vac{color:var(--muted);font-style:italic;font-weight:500}
.rg .c{height:28px}
.rg .c.vacc{opacity:.38}
.rg .c.warn{box-shadow:0 0 0 3px var(--err);position:relative;z-index:1}
.rg .c.ov{text-decoration:underline;text-underline-offset:3px}
.rg .grp{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:6px 12px;align-items:baseline;padding:12px 0 4px;border-top:1px solid var(--line);margin-top:4px}
.rg .grp strong{font-size:14px}
.rg .cov{font:600 10.5px/1 var(--font-data);text-align:center;color:var(--muted);padding:6px 0;border-radius:4px}
.rg .cov.short{background:var(--err-bg);color:var(--err)}
.legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:14px;font-size:13px;color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend .c{width:18px;height:18px}
.issues{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.issue{border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:2px;font-size:14px}
.issue.error{border:2px solid var(--err);padding:9px 11px}
.issue .t1{font-weight:700}
.issue .d{color:var(--muted)}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.foot{font-size:13px;color:var(--muted);display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:center}
details.panel>summary{cursor:pointer;font-weight:700;font-size:17px;min-height:32px;display:flex;align-items:center}
details.panel[open]>summary{margin-bottom:14px}
@media (prefers-reduced-motion:no-preference){.pitem,.c,.tab{transition:background-color .15s,border-color .15s,color .15s}}
