:root{--bg: #f6f7f9;--card: #fff;--text: #1b1f27;--muted: #6b7280;--line: #e3e6eb;--accent: #3b5bdb;--accent-text: #fff;--shift: #dbe4ff;--shift-text: #1c3aa9;--vac: #ffe8cc;--vac-text: #9c4a00;--hol: #d3f9d8;--hol-text: #1b6b2a;--danger: #c92a2a;--warn: #fff3bf}@media(prefers-color-scheme:dark){:root{--bg: #14161a;--card: #1d2026;--text: #e6e8ec;--muted: #9aa1ad;--line: #2c313a;--accent: #748ffc;--accent-text: #0f1220;--shift: #25306b;--shift-text: #dbe4ff;--vac: #5c3a12;--vac-text: #ffd8a8;--hol: #1d4a28;--hol-text: #b2f2bb;--danger: #ff8787;--warn: #4a4217}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.4 system-ui,sans-serif}h1,h2,h3{margin:0 0 .5rem}h1{font-size:1.15rem}h2{font-size:1.2rem}small,.muted{color:var(--muted)}.error{color:var(--danger)}.warn{background:var(--warn);padding:.5rem .75rem;border-radius:6px;cursor:pointer}button,input,select{font:inherit;color:inherit}button{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:.35rem .7rem;cursor:pointer}button:hover{border-color:var(--accent)}button.primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}button.danger{color:var(--danger)}button.link{border:0;background:none;color:var(--accent);padding:0;margin-top:.25rem;text-align:left}button:disabled{opacity:.5;cursor:not-allowed}input,select{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:.35rem .5rem;width:100%}label{display:flex;flex-direction:column;gap:.2rem;margin-bottom:.75rem;font-weight:500}label.inline{flex-direction:row;align-items:center;margin:0;gap:.5rem}label.inline select{width:auto}label.check{flex-direction:row;font-weight:400;align-items:center;margin:0}label.check input{width:auto}fieldset{border:1px solid var(--line);border-radius:6px;margin:0 0 .75rem}.top{display:flex;align-items:center;gap:1rem;padding:.6rem 1rem;background:var(--card);border-bottom:1px solid var(--line);flex-wrap:wrap}.top h1{margin:0}.top nav{display:flex;gap:.25rem;flex:1}.top nav button{border-color:transparent;background:none}.top nav button.active{background:var(--shift);color:var(--shift-text)}.badge{margin-left:.4rem;font-size:.75rem;background:var(--shift);color:var(--shift-text);padding:.1rem .4rem;border-radius:99px;font-style:normal}main{padding:1rem;max-width:1400px;margin:0 auto}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:1rem}.card.narrow{max-width:480px}.card.inline{margin-top:1rem;max-width:520px}.login{max-width:360px;margin:15vh auto 0}.toolbar{display:flex;gap:1rem 1.5rem;align-items:center;flex-wrap:wrap}.toolbar h2{margin:0}.group{display:flex;align-items:center;gap:.4rem}.scroll{overflow-x:auto;margin-top:.5rem}table{border-collapse:collapse;width:100%;background:var(--card)}.roster th,.roster td{border:1px solid var(--line);padding:.35rem;vertical-align:top;min-width:112px}.roster thead th{position:sticky;top:0;background:var(--card);text-align:center}.roster th small{display:block;font-weight:400}.roster th.person{text-align:left;min-width:150px;position:sticky;left:0;background:var(--card);z-index:1}.roster th.today{color:var(--accent)}.roster tr.me th.person{box-shadow:inset 3px 0 var(--accent)}.roster td{height:48px}td.clickable{cursor:cell}td.clickable:hover{background:color-mix(in srgb,var(--accent) 6%,transparent)}.chip{display:block;border-radius:6px;padding:.15rem .4rem;margin-bottom:.2rem;font-size:.85rem}.chip small{display:block;color:inherit;opacity:.75}span.chip{display:inline-block;margin-left:.4rem}.chip.shift{background:var(--shift);color:var(--shift-text)}.chip.vacation{background:var(--vac);color:var(--vac-text)}.chip.public_holiday{background:var(--hol);color:var(--hol-text)}.list{list-style:none;padding:0;margin:0;background:var(--card);border:1px solid var(--line);border-radius:10px}.list li{display:flex;gap:1rem;padding:.6rem .9rem;border-bottom:1px solid var(--line)}.list li:last-child{border:0}.list strong{min-width:8rem}.table th,.table td{text-align:left;padding:.4rem .6rem;border-bottom:1px solid var(--line)}.table tr.inactive{opacity:.5}.table select{width:auto}.actions{display:flex;gap:.4rem;align-items:center}.spacer{flex:1}.backdrop{position:fixed;inset:0;background:#0008;display:grid;place-items:center;padding:1rem;z-index:10}.modal{width:min(520px,100%);max-height:90vh;overflow:auto}.row{display:flex;gap:.75rem}.row label{flex:1}.preview{background:var(--bg);border-radius:6px;padding:.5rem .75rem;margin:0 0 .75rem}.quick{display:flex;gap:.3rem;flex-wrap:wrap;margin-bottom:.5rem}.people{display:grid;grid-template-columns:1fr 1fr;gap:.25rem .75rem;max-height:180px;overflow:auto}a.button{display:inline-block;text-decoration:none;background:var(--card);border:1px solid var(--line);border-radius:6px;padding:.35rem .7rem;color:var(--text)}a.button.primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}details{margin-bottom:.5rem}summary{cursor:pointer;margin-bottom:.4rem}.quick button.primary{background:var(--accent);color:var(--accent-text)}.chips{display:flex;flex-wrap:wrap;gap:.35rem;margin:.5rem 0}.tag{display:inline-flex;align-items:center;gap:.3rem;border:1px solid var(--line);border-radius:99px;padding:.15rem .65rem;background:var(--card);font-size:.85rem}.tag.on{background:var(--shift);color:var(--shift-text);border-color:transparent}.tag small{color:inherit;opacity:.7}.tag button{border:0;background:none;padding:0 .1rem;line-height:1;cursor:pointer}.tags{display:flex;flex-wrap:wrap;gap:.3rem;align-items:center;border:1px solid var(--line);border-radius:6px;padding:.2rem .35rem;min-width:12rem;background:var(--card)}.tags input{border:0;width:7rem;flex:1;padding:.15rem;background:transparent}.tags .tag.on button{color:inherit}ul.plain{list-style:none;padding:0;margin:.5rem 0 0}ul.plain li{display:flex;justify-content:space-between;align-items:center;padding:.3rem 0;border-bottom:1px solid var(--line)}:root{--gap: #ffe3e3;--gap-text: #a61e1e;--ok: #d3f9d8;--ok-text: #1b6b2a}@media(prefers-color-scheme:dark){:root{--gap: #5c1d1d;--gap-text: #ffc9c9;--ok: #1d4a28;--ok-text: #b2f2bb}}.chip.cov-gap{background:var(--gap);color:var(--gap-text);font-weight:600}.chip.cov-ok{background:var(--ok);color:var(--ok-text)}.roster tr.coverage th,.roster tr.coverage td{background:color-mix(in srgb,var(--gap) 22%,var(--card));border-bottom:2px solid var(--line)}.covbar{position:relative;height:6px;border-radius:3px;background:var(--gap-text);opacity:.85;margin-bottom:.35rem;overflow:hidden}.covbar i{position:absolute;top:0;bottom:0;background:var(--ok-text)}.cov-summary{margin:.25rem 0 .5rem;padding:.4rem .75rem;border-radius:6px;font-weight:600}.cov-summary.bad{background:var(--gap);color:var(--gap-text)}.cov-summary.ok{background:var(--ok);color:var(--ok-text)}.chip.clickable-chip{cursor:pointer}.chip.clickable-chip:hover{outline:2px solid var(--gap-text)}:root{--logo-accent: #c0392b}.brand{line-height:0;display:flex}.login-logo{display:flex;justify-content:center;margin:0 0 1.25rem;line-height:0}.login{max-width:400px}:root{--short: #fff1d6;--short-text: #8a5200}@media(prefers-color-scheme:dark){:root{--short: #5a4210;--short-text: #ffe0a3}}.chip.cov-short{background:var(--short);color:var(--short-text);font-weight:600}.covbar{background:var(--ok-text)}.covbar i{background:var(--short-text)}.covbar i.none{background:var(--gap-text)}.cov-rules{margin:-.25rem 0 .5rem}.cov-rules .link{display:inline}.chip.draft{background:transparent;color:var(--shift-text);border:1.5px dashed var(--shift-text);cursor:pointer;opacity:.9}.chip.draft small{display:inline;font-weight:700;margin-right:.35rem;text-transform:uppercase;font-size:.65rem;letter-spacing:.04em;opacity:.8}.chip.draft:hover{background:color-mix(in srgb,var(--shift) 45%,transparent)}.draft-bar{display:flex;flex-wrap:wrap;gap:.5rem .75rem;align-items:center;background:color-mix(in srgb,var(--shift) 40%,var(--card));border:1px dashed var(--shift-text);border-radius:6px;padding:.45rem .75rem;margin:.25rem 0 .5rem}.draft-bar label.check{margin:0}.hours-cell{white-space:nowrap}.hours-cell small{margin-right:.4rem}table.hours td{border:0;padding:.15rem .4rem}table.hours input[type=time]{width:8rem}
