:root{--ink: #16202c;--ink-2: #4a5a6d;--ink-3: #7e8da0;--line: #d6dee8;--line-soft: #e8edf3;--ground: #eef2f7;--surface: #ffffff;--surface-2: #f7f9fc;--accent: #0e6e8c;--accent-dim: #d7ebf2;--accent-ink: #ffffff;--am-bg: #fdf0d5;--am-ink: #8a5a00;--am-edge: #e8cf9a;--pm-bg: #fbe3da;--pm-ink: #9a3f1e;--pm-edge: #eec2b0;--nyt-bg: #e0e4f5;--nyt-ink: #35408a;--nyt-edge: #b9c1e6;--mid-bg: #dff0e6;--mid-ink: #1f6b45;--mid-edge: #b3d9c3;--leave-bg: #f0e7f7;--leave-ink: #6b3e96;--leave-edge: #d6c2e8;--ok: #1b6b3a;--warn: #b4530a;--danger: #b3261e;--danger-bg: #fdecea;--r-sm: 4px;--r-md: 8px;--r-lg: 14px;--shadow-1: 0 1px 2px rgba(22, 32, 44, .08);--shadow-2: 0 6px 20px rgba(22, 32, 44, .13);--shadow-3: 0 -4px 18px rgba(22, 32, 44, .1);--font-ui: ui-sans-serif, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, "Helvetica Neue", sans-serif;--font-code: ui-monospace, "Cascadia Mono", "Consolas", "SF Mono", "Roboto Mono", monospace;--bar-h: 52px;--tab-h: 44px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--ground);color:var(--ink);font-family:var(--font-ui);font-size:15px;line-height:1.45;-webkit-font-smoothing:antialiased;overscroll-behavior-y:none}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-sm)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.shell{display:flex;flex-direction:column;height:100%;min-height:0}.appbar{display:flex;align-items:center;gap:12px;height:var(--bar-h);padding:0 14px;background:var(--ink);color:#fff;flex:0 0 auto}.appbar-mark{font-weight:650;letter-spacing:-.01em;white-space:nowrap}.appbar-area{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:#9fb2c4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.appbar-spacer{flex:1 1 auto}.appbar-btn{background:#ffffff1a;color:#fff;border:0;border-radius:var(--r-md);padding:7px 12px;cursor:pointer}.appbar-btn:hover{background:#ffffff2e}.tabs{display:flex;gap:2px;padding:0 8px;background:var(--surface);border-bottom:1px solid var(--line);flex:0 0 auto;overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-bottom:2.5px solid transparent;padding:0 14px;height:var(--tab-h);color:var(--ink-2);cursor:pointer;white-space:nowrap;font-weight:500}.tab:hover{color:var(--ink)}.tab[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.page{flex:1 1 auto;min-height:0;overflow:auto;padding:16px}.page-narrow{max-width:860px;margin:0 auto}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1)}.card-pad{padding:16px}.card-title{margin:0 0 4px;font-size:16px;font-weight:650;letter-spacing:-.01em}.card-note{margin:0 0 14px;color:var(--ink-2);font-size:13.5px}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:var(--r-md);padding:8px 14px;cursor:pointer;font-weight:550;white-space:nowrap;transition:background .12s ease,border-color .12s ease}.btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--ink-3)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn-primary:hover:not(:disabled){background:#0b5b74;border-color:#0b5b74}.btn-danger{color:var(--danger);border-color:#e9c7c4}.btn-danger:hover:not(:disabled){background:var(--danger-bg);border-color:var(--danger)}.btn-sm{padding:5px 10px;font-size:13px}.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.row-tight{display:flex;align-items:center;gap:6px}.spacer{flex:1 1 auto}.stack{display:flex;flex-direction:column;gap:14px}.field{display:flex;flex-direction:column;gap:5px}.field-label{font-size:12px;font-weight:600;color:var(--ink-2);letter-spacing:.02em}.input,.select{border:1px solid var(--line);border-radius:var(--r-md);padding:8px 10px;background:var(--surface);min-width:0;width:100%}.input:focus,.select:focus{border-color:var(--accent);outline:none}.hint{font-size:12.5px;color:var(--ink-3)}.empty{padding:32px 20px;text-align:center;color:var(--ink-2)}.empty strong{display:block;margin-bottom:4px;color:var(--ink)}.error-note{background:var(--danger-bg);border:1px solid #e9c7c4;color:#8c1d18;border-radius:var(--r-md);padding:10px 12px;font-size:13.5px}.statusbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}.status{display:inline-flex;align-items:center;gap:7px;border-radius:999px;padding:5px 13px 5px 10px;font-size:13px;font-weight:550;border:1px solid transparent}.status:before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor;flex:0 0 auto}.status-ok{background:#e7f4ec;color:var(--ok);border-color:#bfe0cc}.status-warn{background:#fdf1e3;color:var(--warn);border-color:#f0d3ae}.status-danger{background:var(--danger-bg);color:var(--danger);border-color:#e9c7c4}.status-muted{background:var(--surface-2);color:var(--ink-2);border-color:var(--line)}.gridwrap{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-1);max-height:calc(100dvh - 250px);min-height:300px}.gridscroll{overflow:auto;min-height:0;flex:1 1 auto;-webkit-overflow-scrolling:touch}.grid,.tally{border-collapse:separate;border-spacing:0;width:100%;min-width:660px;table-layout:fixed}.grid .col-name,.tally .col-name{width:210px}.grid th,.grid td{border-bottom:1px solid var(--line-soft);padding:0;text-align:center}.grid .col-name{position:sticky;left:0;z-index:2;background:var(--surface);text-align:left;padding:6px 10px;min-width:210px;max-width:210px;border-right:1px solid var(--line)}.grid thead th{position:sticky;top:0;z-index:3;background:var(--surface-2);border-bottom:1px solid var(--line);padding:7px 4px;font-size:11px;font-weight:650;color:var(--ink-2);letter-spacing:.06em;text-transform:uppercase}.grid thead .col-name{z-index:4;background:var(--surface-2)}.grid thead .dow-date{display:block;font-size:13px;color:var(--ink);letter-spacing:0;font-variant-numeric:tabular-nums}.grid thead th.is-weekend{background:#e6ecf4}.blockrow td{background:var(--surface-2);padding:5px 10px;text-align:left;font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3);border-bottom:1px solid var(--line);position:sticky;left:0}.nurse-name{display:block;font-size:13.5px;font-weight:550;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nurse-meta{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-3)}.hours{font-family:var(--font-code);font-size:11px;font-variant-numeric:tabular-nums}.hours-short{color:var(--warn);font-weight:700}.hours-over{color:var(--danger);font-weight:700}.cell{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;width:100%;min-width:52px;height:38px;background:none;cursor:pointer;font-family:var(--font-code);font-size:13px;font-weight:600;color:var(--ink-3);position:relative;display:flex;align-items:center;justify-content:center;transition:filter .1s ease}.cell:hover{filter:brightness(.95)}.cell:disabled{cursor:default}.cell-am{background:var(--am-bg);color:var(--am-ink);box-shadow:inset 0 0 0 1px var(--am-edge)}.cell-pm{background:var(--pm-bg);color:var(--pm-ink);box-shadow:inset 0 0 0 1px var(--pm-edge)}.cell-nyt{background:var(--nyt-bg);color:var(--nyt-ink);box-shadow:inset 0 0 0 1px var(--nyt-edge)}.cell-mid{background:var(--mid-bg);color:var(--mid-ink);box-shadow:inset 0 0 0 1px var(--mid-edge)}.cell-leave{background:var(--leave-bg);color:var(--leave-ink);box-shadow:inset 0 0 0 1px var(--leave-edge)}.cell-off{background:transparent;color:var(--ink-3)}.cell-other{background:var(--surface-2);color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line)}.cell-selected{outline:2.5px solid var(--accent);outline-offset:-2px;z-index:1}.cell-locked:after{content:"";position:absolute;top:2px;right:2px;width:0;height:0;border-top:6px solid var(--accent);border-left:6px solid transparent}.cell-problem{box-shadow:inset 0 0 0 2px var(--danger)}.cell-override:before{content:"!";position:absolute;left:3px;top:1px;font-size:10px;font-weight:800;color:var(--danger)}.tallybar{flex:0 0 auto;border-top:2px solid var(--ink);background:var(--surface);box-shadow:var(--shadow-3);overflow:hidden}.tallyscroll{overflow:hidden}.tally td{text-align:center;padding:5px 4px;font-family:var(--font-code);font-size:13px;font-variant-numeric:tabular-nums;border-bottom:1px solid var(--line-soft)}.tally tr:last-child td{border-bottom:0}.tally .col-name{position:sticky;left:0;background:var(--surface);text-align:left;padding:5px 10px;min-width:210px;max-width:210px;border-right:1px solid var(--line);font-family:var(--font-ui);font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-2)}.tally-short{background:var(--danger-bg);color:var(--danger);font-weight:800}.tally-exact{color:var(--ink)}.tally-over{color:var(--ink-3)}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#16202c73;z-index:40;display:flex;align-items:flex-end;justify-content:center}.sheet{background:var(--surface);width:100%;max-width:560px;max-height:86vh;border-radius:var(--r-lg) var(--r-lg) 0 0;box-shadow:var(--shadow-2);display:flex;flex-direction:column;animation:sheet-up .16s ease-out}@keyframes sheet-up{0%{transform:translateY(14px);opacity:0}to{transform:translateY(0);opacity:1}}@media(min-width:720px){.sheet-backdrop{align-items:center}.sheet{border-radius:var(--r-lg)}}.sheet-head{flex:0 0 auto;padding:14px 16px;border-bottom:1px solid var(--line);display:flex;align-items:flex-start;gap:10px}.sheet-title{margin:0;font-size:15.5px;font-weight:650}.sheet-sub{margin:2px 0 0;font-size:12.5px;color:var(--ink-2)}.sheet-body{flex:1 1 auto;min-height:0;padding:14px 16px;overflow:auto}.sheet-foot{flex:0 0 auto;padding:12px 16px;border-top:1px solid var(--line);display:flex;gap:8px;align-items:center;flex-wrap:wrap}.optgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:8px}.opt{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);padding:11px 6px;cursor:pointer;font-family:var(--font-code);font-size:14px;font-weight:650;text-align:center;position:relative}.opt:hover:not(.opt-blocked){border-color:var(--accent);background:var(--accent-dim)}.opt-blocked{opacity:.42;cursor:not-allowed;background:var(--surface-2);text-decoration:line-through;text-decoration-thickness:1px}.opt-current{border-color:var(--accent);border-width:2px;background:var(--accent-dim)}.optgroup-label{font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);margin:14px 0 7px}.optgroup-label:first-child{margin-top:0}.reasons{margin:12px 0 0;padding:10px 12px;background:var(--danger-bg);border:1px solid #e9c7c4;border-radius:var(--r-md);font-size:13px;color:#8c1d18}.reasons ul{margin:6px 0 0;padding-left:18px}.reasons li{margin:3px 0}.problems{display:flex;flex-direction:column;gap:6px}.problem{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--line);border-left:3px solid var(--ink-3);background:var(--surface);border-radius:var(--r-md);padding:9px 12px;text-align:left;cursor:pointer;font-size:13.5px;display:flex;gap:10px;align-items:baseline}.problem:hover{background:var(--surface-2)}.problem-hard{border-left-color:var(--danger)}.problem-coverage{border-left-color:var(--warn)}.problem-soft{border-left-color:var(--ink-3)}.problem-accepted{border-left-color:var(--accent);opacity:.8}.problem-rule{font-family:var(--font-code);font-size:11px;font-weight:700;color:var(--ink-3);flex:0 0 auto;padding-top:1px}.legend{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.legend-chip{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-2)}.legend-swatch{width:22px;height:15px;border-radius:3px;font-family:var(--font-code);font-size:9px}.table{width:100%;border-collapse:collapse}.table th,.table td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line-soft);font-size:13.5px}.table th{font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-2);border-bottom:1px solid var(--line)}.table tr.is-inactive{opacity:.5}.pill{display:inline-block;font-family:var(--font-code);font-size:11px;padding:1px 6px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2)}.covergrid{width:100%;border-collapse:collapse}.covergrid th,.covergrid td{padding:5px;text-align:center;border:1px solid var(--line-soft)}.covergrid th{font-size:11px;color:var(--ink-2);text-transform:uppercase}.covergrid input{width:46px;text-align:center;border:1px solid var(--line);border-radius:var(--r-sm);padding:5px 2px;font-family:var(--font-code)}.gate{min-height:100%;display:grid;place-items:center;padding:20px;background:radial-gradient(1100px 460px at 50% -12%,#22384c 0%,transparent 62%),var(--ink)}.gate-card{background:var(--surface);border-radius:var(--r-lg);padding:26px;width:100%;max-width:370px;box-shadow:var(--shadow-2)}.gate-title{margin:0 0 2px;font-size:19px;font-weight:650;letter-spacing:-.015em}.gate-note{margin:0 0 18px;color:var(--ink-2);font-size:13.5px}.toast{position:fixed;left:50%;bottom:22px;transform:translate(-50%);background:var(--ink);color:#fff;padding:10px 18px;border-radius:999px;box-shadow:var(--shadow-2);z-index:60;font-size:13.5px;max-width:92vw;text-align:center}.busy{display:inline-block;width:13px;height:13px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:620px){.page{padding:10px}.grid .col-name,.tally .col-name{min-width:132px;max-width:132px}.nurse-name{font-size:12.5px}.cell{min-width:46px;height:40px}.gridwrap{max-height:calc(100dvh - 300px)}}.printsheet{display:none}.printsheet{font-family:Times New Roman,Georgia,serif;color:#000;background:#fff}.printsheet-head{text-align:center;margin-bottom:6px}.printsheet-hospital{font-size:15pt;font-weight:700;letter-spacing:.01em;text-transform:uppercase;margin:0}.printsheet-accred{font-size:8.5pt;text-transform:uppercase;margin:1px 0 0}.printsheet-form{font-size:10pt;font-style:italic;font-weight:700;text-transform:uppercase;margin:4px 0 0}.printsheet-meta{display:flex;justify-content:space-between;align-items:flex-end;font-size:9.5pt;font-weight:700;text-transform:uppercase;margin:8px 0 3px}.printtable{width:100%;border-collapse:collapse;font-size:8pt;table-layout:fixed}.printtable th,.printtable td{border:.75pt solid #000;padding:1.2pt 2pt;text-align:center;vertical-align:middle;overflow:hidden}.printtable thead th{font-size:8pt;font-weight:700;line-height:1.1;word-break:break-word;-webkit-hyphens:auto;hyphens:auto}.printtable .pt-no{width:4%}.printtable .pt-name{width:23%;text-align:left;padding-left:4pt}.printtable .pt-desig{width:7%}.printtable .pt-day{width:7.4%}.printtable .pt-remarks{width:16%;text-align:left;padding-left:4pt;font-size:7pt}.printtable .pt-remarks .pt-remark-line{display:block;line-height:1.2}.printtable .pt-shift{width:6%;font-weight:700;font-size:7pt;line-height:1.05;letter-spacing:.02em;word-break:break-word}.printtable .pt-day{font-family:Courier New,monospace;font-size:8.5pt;font-weight:700}.printtable .pt-blank td{height:13pt}.printtable .pt-tally td{font-family:Courier New,monospace;font-weight:700}.printtable .pt-tally-label{text-align:right;padding-right:4pt;font-family:inherit;font-weight:700}.printtable .pt-override:after{content:" *";font-weight:700}.printsheet-foot{display:flex;justify-content:space-between;margin-top:20pt;font-size:8.5pt}.printsheet-sign{width:44%}.printsheet-sign-line{border-top:.75pt solid #000;margin-top:26pt;padding-top:2pt;text-align:center;text-transform:uppercase;font-size:7.5pt}.printsheet-legend{margin-top:8pt;font-size:7pt;line-height:1.35}@media screen{.printsheet.is-preview{display:block;background:#fff;padding:34px 30px;margin:0 auto;max-width:860px;box-shadow:var(--shadow-2);border-radius:3px}}@media print{@page{size:A4 portrait;margin:9mm 8mm}html,body{background:#fff!important;height:auto;overflow:visible}.appbar,.tabs,.statusbar,.gridwrap,.tallybar,.sheet-backdrop,.toast,.no-print{display:none!important}.shell,.page{display:block;height:auto;overflow:visible;padding:0;background:#fff}.printsheet{display:block!important;padding:0;margin:0;max-width:none;box-shadow:none;border-radius:0}.printtable{page-break-inside:auto}.printtable tr{page-break-inside:avoid}.printtable thead{display:table-header-group}}
