:root{--ink: #1f2933;--muted: #616e7c;--line: #d9dee3;--page: #f6f7f9;--card: #ffffff;--accent: #1d4ed8;--shift-a: #fff4c2;--shift-b: #d6e8ff;--shift-c: #1e3a8a;--wo: #e5e7eb;--absent: #fde2e1;--absent-ink: #b42318;--cover: #15803d;--warn: #f97316;font-family:system-ui,Segoe UI,sans-serif;color:var(--ink);background:var(--page)}body{margin:0}button{font:inherit;padding:.35rem .8rem;border:1px solid var(--line);border-radius:6px;background:var(--card);cursor:pointer}button:disabled{opacity:.5;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}input,select{font:inherit;padding:.35rem .5rem;border:1px solid var(--line);border-radius:6px}.error{color:var(--absent-ink)}.banner{background:var(--absent);padding:.5rem .75rem;border-radius:6px}.note{color:var(--muted);font-style:italic}.muted{color:var(--muted);font-size:.85em}.page-message{padding:2rem}.sign-in{display:grid;place-items:center;min-height:100vh}.sign-in form{background:var(--card);padding:2rem;border-radius:10px;box-shadow:0 2px 12px #00000014;display:grid;gap:1rem;width:min(22rem,90vw)}.sign-in h1{margin:0}.sign-in label{display:grid;gap:.3rem}.app header{display:flex;align-items:center;gap:1rem;padding:.6rem 1rem;background:var(--card);border-bottom:1px solid var(--line)}.app header h1{font-size:1.1rem;margin:0}.app header .who{margin-left:auto;color:var(--muted)}.app main{padding:.75rem 1rem}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:1rem}.toolbar h2{font-size:1.1rem;margin:0}.month-picker{display:flex;align-items:center;gap:.5rem}.search{margin-left:auto;width:16rem}.pager{display:flex;align-items:center;gap:1rem;margin:.75rem 0}.grid-scroll{overflow:auto;max-height:calc(100vh - 11rem);background:var(--card);border:1px solid var(--line);border-radius:8px}.roster{border-collapse:separate;border-spacing:0;font-size:.8rem}.roster th,.roster td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;min-width:2.4rem;height:1.7rem;padding:0 .15rem;white-space:nowrap}.roster thead th{position:sticky;background:#f0f2f5;z-index:2;font-weight:600}.roster thead tr:nth-child(1) th{top:0}.roster thead tr:nth-child(2) th{top:2.6rem}.roster thead tr:nth-child(3) th{top:4.3rem}.roster thead tr:nth-child(4) th{top:6rem}.roster thead tr:nth-child(5) th{top:7.7rem}.roster thead tr:nth-child(6) th{top:9.4rem}.roster thead tr:first-child th{height:2.6rem}.roster .weekday{font-weight:400;color:var(--muted)}.roster .sunday{background:#e8ebf0}.roster .holiday{background:#fde68a;cursor:help}.roster .cover-row th{font-weight:500}.roster .cover-row.last th{border-bottom:2px solid var(--ink)}.roster .below-minimum{background:var(--warn);color:#fff;font-weight:700}.roster .has-absent{color:var(--absent-ink);font-weight:700}.roster .sticky{position:sticky;z-index:1;background:var(--card);text-align:left}.roster thead .sticky{z-index:3;background:#f0f2f5}.roster .sticky.code{left:0;min-width:5.5rem}.roster .sticky.name{left:5.9rem;min-width:10rem;border-right:2px solid var(--line)}.cell.shift-A{background:var(--shift-a)}.cell.shift-B{background:var(--shift-b)}.cell.shift-C{background:var(--shift-c);color:#fff}.cell.wo{background:var(--wo);color:var(--muted)}.cell.absent{background:var(--absent);color:var(--absent-ink);font-weight:700}.cell.absent small{font-weight:400}.cell.covering{box-shadow:inset 0 0 0 3px var(--cover);font-weight:700}.cell.coff{background:#dcfce7;color:var(--cover);font-weight:700}.cell.on-leave{background:#e0e7ff;color:#3730a3;font-weight:700}.cell.not-employed{background:repeating-linear-gradient(45deg,#fff,#fff 4px,#f1f1f1 4px,#f1f1f1 8px)}.cell.clickable{cursor:pointer}.cell.clickable:hover{outline:2px solid var(--accent);outline-offset:-2px}.cell.selected{outline:3px solid var(--accent);outline-offset:-3px}.panel{position:fixed;top:0;right:0;bottom:0;width:min(36rem,95vw);background:var(--card);border-left:1px solid var(--line);box-shadow:-4px 0 16px #00000014;padding:1rem 1.25rem;overflow-y:auto;z-index:10}.panel h3{margin:0 2rem .2rem 0}.panel label{display:grid;gap:.3rem;margin:.75rem 0}.panel .close{position:absolute;top:.75rem;right:.75rem;font-size:1.2rem;line-height:1}.panel .warning{color:#b45309;font-size:.85em;font-weight:600}.panel .move-off{margin-top:1rem;padding-top:.75rem;border-top:1px solid var(--line)}.panel .move-off h4{margin:0 0 .5rem}.panel .move-off .row{display:flex;gap:.5rem}.panel .coff{color:var(--cover);font-weight:600}.relievers{width:100%;border-collapse:collapse;font-size:.85rem}.relievers th,.relievers td{text-align:left;padding:.4rem .3rem;border-bottom:1px solid var(--line);vertical-align:top}.tabs{display:flex;gap:.25rem;padding:0 1rem;background:var(--card);border-bottom:1px solid var(--line)}.tabs button{border:none;border-bottom:3px solid transparent;border-radius:0;background:none;padding:.6rem .9rem}.tabs button.active{border-bottom-color:var(--accent);font-weight:700}.badge-inline{margin-left:.4rem;background:var(--absent-ink);color:#fff;border-radius:999px;padding:0 .45rem;font-size:.8em}.time-page .block{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:.75rem 1rem;margin-bottom:1rem}.time-page h3{margin:0 0 .5rem}.time-page .row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.5rem}.time-page label{display:flex;gap:.3rem;align-items:center}.time-page .chips{display:flex;flex-wrap:wrap;gap:.4rem;margin:.5rem 0}.time-page .chips button.active{background:var(--accent);color:#fff}.data{width:100%;border-collapse:collapse;font-size:.85rem}.data th,.data td{text-align:left;padding:.3rem .4rem;border-bottom:1px solid var(--line);vertical-align:top}.data button.expand{border:none;background:none;cursor:pointer;font-size:.9rem;padding:0 .25rem}.breakdown-row>td{background:var(--bg-soft, #f8fafc)}.breakdown{overflow-x:auto}.data.compact th,.data.compact td{padding:.2rem .35rem;white-space:nowrap}.data.compact td.muted{white-space:normal}.report{max-height:14rem;overflow:auto;color:var(--absent-ink)}.warning{color:#b45309;font-weight:600}.warning-box{background:#fef3c7;border:1px solid #f59e0b;border-radius:6px;padding:.5rem .75rem}.cap-warning td{background:#fffbeb}.cap-over td{background:#fde2e1}.statement ul{padding-left:1.2rem}.holiday-choice{border-top:1px solid var(--line);padding-top:.5rem}.leave-planning h3 button{border:none;background:none;cursor:pointer;font-size:1rem}.month-bars{display:flex;gap:.4rem;align-items:flex-end;height:80px}.month-bar{display:flex;flex-direction:column;align-items:center;width:2.2rem}.month-bar .bar{width:100%;background:#dbeafe;display:flex;align-items:flex-end}.month-bar .used{width:100%;background:#3b82f6}.scroll-x{overflow-x:auto;max-width:100%}.demo-banner{background:#fff3cd;color:#5c4400;border-bottom:1px solid #e0c36a;font-size:.8rem;padding:2px 8px;text-align:center}.mobile{min-height:100vh;display:flex;flex-direction:column;background:var(--page);font-size:16px}.mobile-header{position:sticky;top:0;z-index:5;display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding:calc(.75rem + env(safe-area-inset-top)) 1rem .75rem;background:var(--shift-c);color:#fff}.mobile-header h1{margin:0;font-size:1.2rem}.mobile-header .muted{color:#c7d2fe}.mobile-main{flex:1;padding:.75rem .75rem calc(5rem + env(safe-area-inset-bottom));max-width:40rem;width:100%;margin:0 auto;box-sizing:border-box}.mobile button{min-height:2.75rem;font-size:1rem}.mobile select,.mobile input{min-height:2.75rem;font-size:1rem;width:100%;box-sizing:border-box}.mobile .wide{width:100%;margin-top:.75rem}.mobile .banner.ok{background:#dcfce7;color:#166534}.bottom-bar{position:fixed;left:0;right:0;bottom:0;display:grid;grid-template-columns:repeat(5,1fr);background:var(--card);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);z-index:5}.bottom-bar button{position:relative;display:grid;justify-items:center;gap:.1rem;border:none;border-radius:0;background:none;padding:.5rem .25rem;min-height:3.5rem;font-size:.8rem;color:var(--muted)}.bottom-bar button span[aria-hidden]{font-size:1.3rem;line-height:1}.bottom-bar button.active{color:var(--accent);font-weight:700}.badge{position:absolute;top:.3rem;left:calc(50% + .4rem);min-width:1.2rem;padding:0 .3rem;border-radius:999px;background:var(--absent-ink);color:#fff;font-size:.75rem;line-height:1.2rem;font-weight:700}.card{background:var(--card);border-radius:10px;padding:1rem;margin-bottom:.75rem;box-shadow:0 1px 4px #0000000f}.card h2{font-size:1.05rem;margin:0 0 .75rem}.card label{display:grid;gap:.3rem}.shift-list ul{list-style:none;margin:0 0 1rem;padding:0;display:grid;gap:.4rem}.week-title{font-size:.85rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:.75rem .25rem .4rem}.day{background:var(--card);border-radius:8px;padding:.6rem .8rem;border-left:6px solid var(--line)}.day .date{display:flex;justify-content:space-between;align-items:center}.day .what{font-size:1.1rem;font-weight:600;margin-top:.15rem}.day.kind-A{border-left-color:#eab308}.day.kind-B{border-left-color:#60a5fa}.day.kind-C{border-left-color:var(--shift-c)}.day.kind-WO{border-left-color:#9ca3af;background:#f3f4f6}.day.kind-absent{border-left-color:var(--absent-ink);background:var(--absent)}.day.today{outline:3px solid var(--accent)}.today-tag{background:var(--accent);color:#fff;border-radius:999px;padding:.05rem .6rem;font-size:.8rem}.holiday-note{color:#92400e;font-size:.9rem}.note-line{color:var(--cover);font-size:.9rem}.options,.swap-list,.notifications{list-style:none;margin:.75rem 0 0;padding:0;display:grid;gap:.5rem}.options li{display:flex;justify-content:space-between;align-items:center;gap:.75rem;border:1px solid var(--line);border-radius:8px;padding:.6rem .75rem}.options li.toggle{border:none;padding:0}.options li.toggle button{width:100%}.options li.blocked{background:#f9fafb;color:var(--muted)}.options .reason{color:var(--absent-ink);font-size:.85rem;margin-top:.2rem}.swap-list li{border:1px solid var(--line);border-radius:8px;padding:.6rem .75rem;display:grid;gap:.2rem}.swap-list .status{font-weight:600}.swap-list .status-approved .status{color:var(--cover)}.swap-list .status-declined .status,.swap-list .status-rejected .status,.swap-list .status-withdrawn .status{color:var(--muted)}.swap-list .actions{display:flex;gap:.5rem;flex-wrap:wrap}.notifications li{background:var(--card);border-radius:8px;padding:.7rem .8rem}.notifications li.new{border-left:5px solid var(--accent)}.new-tag{float:right;background:var(--accent);color:#fff;border-radius:999px;padding:0 .5rem;font-size:.75rem}.me{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;margin:0 0 .5rem}.me dt{color:var(--muted)}.me dd{margin:0;font-weight:600}.approvals{background:var(--card);border:1px solid var(--line);border-left:5px solid var(--accent);border-radius:8px;padding:.5rem .75rem;margin:.75rem 0}.approvals h3{margin:.25rem 0 .5rem;font-size:1rem}.approvals table{border-collapse:collapse;width:100%;font-size:.9rem}.approvals td{padding:.35rem .5rem;border-top:1px solid var(--line)}.approvals .ok{color:var(--cover)}.approvals .actions{white-space:nowrap;display:flex;gap:.4rem}.cell.swapped{box-shadow:inset 0 0 0 3px #7c3aed;font-weight:700}
