:root{--ink: #1d2a33;--muted: #6b7a85;--line: #dfe5ea;--bg: #f4f6f8;--card: #fff;--brand: #1f3b4d;--brand-2: #2e5a74;--d: #fbe7a8;--d-ink: #6b4e00;--n: #2f4a7a;--n-ink: #fff;--k: #cfeedd;--k-ink: #145a35;--w: #eceff2;--w-ink: #7a8691;--bad: #c8372d;--bad-bg: #fde4e1;--warn: #b86e00;--warn-bg: #fff1d6;--ok: #2e7d4f;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink);background:var(--bg);font-size:15px}*{box-sizing:border-box}body{margin:0}button,.button{font:inherit;border:0;border-radius:8px;padding:7px 14px;background:var(--brand);color:#fff;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}button:hover,.button:hover{background:var(--brand-2)}button:disabled{opacity:.45;cursor:default}button.ghost{background:transparent;color:var(--brand);border:1px solid var(--line)}button.ghost:hover{background:#e9eef2}button.small{padding:4px 10px;font-size:13px}button.link{background:none;color:var(--brand-2);padding:0 4px;text-decoration:underline}input,select{font:inherit;padding:6px 8px;border:1px solid #c9d2d9;border-radius:7px;background:#fff;color:var(--ink)}input.hours{width:70px}.muted{color:var(--muted)}.error,.bad{color:var(--bad)}.splash,.loading{padding:60px;text-align:center;color:var(--muted)}.login{max-width:320px;margin:14vh auto;display:flex;flex-direction:column;gap:12px;align-items:center;background:var(--card);padding:32px;border-radius:16px;box-shadow:0 6px 30px #14283c14}.login h1{margin:0 0 8px}.login input,.login button{width:100%;justify-content:center}.top{display:flex;align-items:center;gap:24px;padding:10px 20px;background:var(--brand);color:#fff;position:sticky;top:0;z-index:20}.brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:17px}.brand img{width:26px;height:26px}.top nav{display:flex;gap:4px;flex:1;flex-wrap:wrap}.top nav a{color:#cfdde6;text-decoration:none;padding:6px 12px;border-radius:7px}.top nav a.on,.top nav a:hover{background:#ffffff24;color:#fff}.top .ghost{color:#fff;border-color:#ffffff4d}main{padding:16px 20px 40px}.toolbar{display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;margin-bottom:10px}.monthnav{display:flex;align-items:center;gap:8px}.monthnav h2{margin:0;min-width:190px;text-align:center;text-transform:capitalize}.quarter{color:var(--muted);font-size:14px;flex:1}.actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.copy{display:inline-flex;gap:4px}.tools{display:flex;gap:6px;align-items:center;margin-bottom:10px;flex-wrap:wrap}.tool{background:#fff;color:var(--ink);border:1px solid var(--line);min-width:46px;justify-content:center;font-weight:600}.tool:hover{background:#f0f3f5}.tool.on{outline:3px solid var(--brand-2);outline-offset:1px}.tool-D{background:var(--d);color:var(--d-ink)}.tool-D:hover{background:#f7dc86}.tool-N{background:var(--n);color:var(--n-ink)}.tool-N:hover{background:#3b5a90}.tool-W{background:var(--w);color:var(--w-ink)}.tool-U{background:#e4dcf5;color:#4d2f8a}.tool-clear{background:#fff;color:var(--bad)}.hint{color:var(--muted);font-size:13px;margin-left:8px}.warnbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}.pill{padding:4px 10px;border-radius:999px;font-size:13px;font-weight:600}.pill.bad{background:var(--bad-bg);color:var(--bad)}.pill.warn{background:var(--warn-bg);color:var(--warn)}.warnlist{flex-basis:100%;margin:4px 0 0;padding:10px 10px 10px 28px;background:#fff;border-radius:10px;max-height:220px;overflow:auto;font-size:14px;columns:2}.gridwrap{overflow:auto;background:var(--card);border-radius:12px;box-shadow:0 1px 3px #14283c14;max-height:calc(100vh - 230px)}table.grid{border-collapse:separate;border-spacing:0;font-size:13px;-webkit-user-select:none;user-select:none}.grid th,.grid td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;padding:0}.grid thead th{position:sticky;top:0;background:#f8fafb;z-index:3;font-weight:600}.grid th.day{width:34px;min-width:34px;padding:4px 0;line-height:1.1}.grid th.day small{display:block;font-weight:400;color:var(--muted);font-size:11px}.grid th.weekend,.grid td.weekend{background:#f3f5f7}.grid th.holiday{background:#fde9e7;color:var(--bad)}.grid td.holiday{background:#fdf3f2}.grid .name{position:sticky;left:0;background:#fff;z-index:2;text-align:left;padding:0 10px;min-width:190px;max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:30px}.grid thead .name{z-index:4;background:#f8fafb}.grid .name .fte{margin-left:6px;background:#e8eef2;padding:1px 5px;border-radius:4px;color:var(--muted)}.grid .name .dot{margin-left:6px;background:var(--warn);color:#fff;border-radius:50%;width:16px;height:16px;display:inline-grid;place-items:center;font-weight:700}.grid tr.inactive .name{color:var(--muted);text-decoration:line-through}.grid .grouprow td{background:#eef3f6;text-align:left;padding:4px 10px;font-weight:700;color:var(--brand);position:sticky;left:0}td.cell{cursor:pointer;height:30px;position:relative;font-weight:600}td.cell:hover{box-shadow:inset 0 0 0 2px var(--brand-2)}td.cell.k-D{background:var(--d);color:var(--d-ink)}td.cell.k-N{background:var(--n);color:var(--n-ink)}td.cell.k-K{background:var(--k);color:var(--k-ink);font-size:10.5px;letter-spacing:-.3px}td.cell.k-W{background:var(--w);color:var(--w-ink);font-weight:500;font-size:11px}td.cell.r-U,td.cell.r-UZ{background:#e4dcf5;color:#4d2f8a}td.cell.r-L4{background:#fde4e1;color:var(--bad)}td.cell.warn:after{content:"";position:absolute;top:2px;right:2px;width:6px;height:6px;border-radius:50%;background:var(--warn)}td.cell sup{position:absolute;bottom:1px;right:2px;font-size:8.5px;font-weight:700;opacity:.85}.grid .sum{padding:0 8px;white-space:nowrap;font-variant-numeric:tabular-nums;background:#fafbfc;min-width:64px}.grid thead .sum{background:#f8fafb}.grid .diff.over{color:var(--warn);font-weight:700}.grid .diff.under{color:var(--bad);font-weight:700}.grid .diff.zero{color:var(--ok);font-weight:700}.grid tfoot td{position:sticky;background:#fafbfc;font-size:12px;height:24px}.grid tfoot .name{font-weight:600;color:var(--muted);font-size:12px;height:24px}.grid tfoot td.bad{background:var(--bad-bg);color:var(--bad);font-weight:700}.grid tfoot td.ok{color:var(--ok)}.grid tfoot tr.staff:first-child td{border-top:2px solid #c9d2d9}.grid tfoot tr.night td{border-top:1px solid #c9d2d9}.grid tfoot sup{font-size:9px;color:var(--k-ink)}.legend{display:flex;flex-wrap:wrap;gap:16px;margin-top:10px;font-size:13px;color:var(--muted)}.legend i{display:inline-block;width:14px;height:14px;border-radius:3px;vertical-align:-2px;margin-right:5px}.legend i.k-D{background:var(--d)}.legend i.k-N{background:var(--n)}.legend i.k-K{background:var(--k)}.legend i.k-W{background:var(--w)}.editor{position:fixed;z-index:50;width:330px;background:#fff;border-radius:12px;box-shadow:0 10px 40px #14283c40;padding:12px 14px;display:flex;flex-direction:column;gap:10px;font-size:14px}.editor header{font-size:15px}.editor .row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.editor fieldset{border:1px solid var(--line);border-radius:9px;padding:8px 10px;display:flex;flex-direction:column;gap:6px;margin:0}.editor legend{font-weight:600;font-size:13px;padding:0 4px}.editor input[type=time]{width:112px}.editor .field{display:flex;gap:8px;align-items:center}.editor .field select{flex:1}.presets{display:inline-flex;gap:4px;flex-wrap:wrap;align-items:center}.chip{background:#eef3f6;color:var(--brand);padding:3px 9px;font-size:13px;border-radius:999px}.chip:hover{background:#dde7ee}.page{max-width:1000px}.pagehead{display:flex;align-items:center;gap:16px;margin-bottom:12px;flex-wrap:wrap}.pagehead h2{margin:0;flex:1}.pagehead h2 small{font-weight:400;color:var(--muted);font-size:14px;margin-left:8px}.card{background:var(--card);border-radius:12px;padding:16px 18px;box-shadow:0 1px 3px #14283c14;margin-bottom:16px}.form{display:flex;flex-direction:column;gap:12px;max-width:640px}.form h3{margin:0}.form>label{display:flex;flex-direction:column;gap:4px;font-size:14px;color:var(--muted)}.form>label>input,.form>label>select{color:var(--ink);max-width:360px}.form .row{display:flex;gap:8px}.check{display:flex!important;flex-direction:row!important;gap:6px;align-items:center;color:var(--ink)!important}table.list{width:100%;border-collapse:collapse;background:var(--card);border-radius:12px;overflow:hidden;box-shadow:0 1px 3px #14283c14}.list th,.list td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--line)}.list th{background:#f8fafb;font-size:13px;color:var(--muted);font-weight:600}.list tr.inactive td{color:var(--muted)}.list .empty{text-align:center;color:var(--muted);padding:30px}.card .list{box-shadow:none}.print{background:#fff;min-height:100vh}.printbar{display:flex;gap:12px;align-items:center;padding:12px 20px;background:var(--bg);border-bottom:1px solid var(--line)}.sheet{padding:10mm}.sheet header{display:flex;justify-content:space-between;align-items:baseline;gap:20px;margin-bottom:4mm}.sheet h1{font-size:17px;margin:0;text-transform:none}.legend-print{font-size:11px}.ptable{width:100%;border-collapse:collapse;font-size:10.5px;table-layout:fixed}.ptable th,.ptable td{border:1px solid #555;text-align:center;padding:1px 0;height:17px;overflow:hidden}.ptable th{font-weight:600;font-size:9.5px;line-height:1.05}.ptable th small{font-weight:400}.ptable .pname{width:34mm;text-align:left;padding-left:4px;white-space:nowrap;text-overflow:ellipsis}.ptable .we{background:#e8e8e8}.ptable .pgroup td{background:#d0d0d0;font-weight:700;text-align:left;padding-left:4px}.ptable td.p-N{background:#9a9a9a;color:#000;font-weight:700}.ptable td.p-D{font-weight:700}.ptable td.p-K{font-size:8px;letter-spacing:-.4px}.ptable sup{font-size:6.5px}.sheet footer{margin-top:3mm;font-size:9px;color:#555}@page{size:A4 landscape;margin:6mm}@media print{.noprint{display:none!important}.sheet{padding:0}.ptable tr{break-inside:avoid}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.tool-R{background:#fff;color:#8a2c8f;border-color:#e3c4e5}td.cell.req:before{content:"";position:absolute;top:0;left:0;border-style:solid;border-width:7px 7px 0 0;border-color:#b23cb8 transparent transparent transparent}td.cell.req-D:before{border-color:#c99a00 transparent transparent transparent}td.cell.req-N:before{border-color:#2f4a7a transparent transparent transparent}td.cell.req-OFF:not(.k-D):not(.k-N):not(.k-K){background-image:repeating-linear-gradient(135deg,transparent 0 4px,#f3e3f4 4px 7px)}td.cell.warn.soft:after{background:#e0b461}.legend .req-mark{width:0;height:0;border-radius:0;border-style:solid;border-width:10px 10px 0 0;border-color:#b23cb8 transparent transparent transparent;background:none}.grid .name .dot.soft{background:#e0b461}.grid .grouprow.helpers td{background:#f2eefa;color:#5b3d8f}.grid tr.helper .name{font-style:italic}.grid tfoot td.clickable{cursor:pointer}.grid tfoot td.clickable:hover{box-shadow:inset 0 0 0 2px var(--brand-2)}.warnlist li.bad{color:var(--bad)}.chip.on{background:var(--brand);color:#fff}.overlay{position:fixed;inset:0;background:#14233259;z-index:60;display:grid;place-items:center;padding:20px}.dialog{background:#fff;border-radius:14px;width:min(560px,100%);max-height:86vh;overflow:auto;padding:16px 20px;display:flex;flex-direction:column;gap:10px;box-shadow:0 20px 60px #00000040}.dialog header{display:flex;justify-content:space-between;align-items:center;gap:12px}.dialog h3,.dialog p{margin:0}.dialog .row{display:flex;gap:6px;align-items:center}ol.suggest{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}ol.suggest li{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;border:1px solid var(--line);border-radius:10px}ol.suggest li.best{border-color:var(--ok);background:#f1faf4}ol.suggest .notes{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}ol.suggest .chip{font-size:12px;padding:2px 8px;cursor:default}.chip.warnchip{background:var(--warn-bg);color:var(--warn)}ul.unavail{margin:0;font-size:14px;columns:2}
