:root{--bg: #f6f5f2;--surface: #fdfdfc;--surface-2: #f3f2ee;--sidebar-bg: #f1f0ec;--border: #e3e2dc;--hairline: #eae9e4;--text: #262622;--text-2: #6b6a64;--text-3: #a4a39b;--ink: #232320;--ink-hover: #111110;--accent: #3f7057;--accent-2: #47795f;--accent-soft: #e5efe8;--green: #3f7057;--green-soft: #e5efe8;--red: #a44a37;--red-soft: #f7ebe7;--amber: #96742e;--amber-soft: #f4eddd;--violet: #5c6a94;--violet-soft: #e9ecf3;--night: #464540;--night-soft: #ececea;--teal: #3f7057;--teal-soft: #e5efe8;--copper: #a8683c;--copper-soft: #f5eadf;--radius: 16px;--shadow: 0 1px 2px rgba(38, 38, 34, .03), 0 6px 24px rgba(38, 38, 34, .04);--shadow-lift: 0 2px 6px rgba(38, 38, 34, .05), 0 18px 50px rgba(38, 38, 34, .1);--font-display: "Fraunces", "Georgia", serif}*{box-sizing:border-box;margin:0;padding:0}body{font-family:Inter,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}#app{display:flex;min-height:100vh}.sidebar{width:236px;flex-shrink:0;background:var(--sidebar-bg);border-right:1px solid var(--hairline);color:var(--text-2);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.sidebar .brand{padding:28px 22px 22px;font-family:var(--font-display);font-weight:600;font-size:21px;color:var(--text);letter-spacing:.02em;display:flex;align-items:center;gap:11px}.sidebar .brand .dot{width:30px;height:30px;border-radius:9px;background:var(--ink);display:grid;place-items:center;font-size:14px;color:#f4f3ef}.sidebar nav{display:flex;flex-direction:column;gap:2px;padding:4px 14px}.sidebar a{display:flex;align-items:center;gap:11px;color:var(--text-2);text-decoration:none;padding:10px 12px;border-radius:10px;font-weight:500;font-size:13.5px;letter-spacing:.005em;transition:background .16s,color .16s}.sidebar a svg{width:17px;height:17px;flex-shrink:0;opacity:.75}.sidebar a:hover{background:#2626220a;color:var(--text)}.sidebar a.router-link-exact-active{background:#e6e5df;color:var(--text);font-weight:600}.sidebar a.router-link-exact-active svg{opacity:1}.sidebar .foot{margin-top:auto;padding:18px 22px;font-size:10.5px;color:var(--text-3);letter-spacing:.06em}.admin-lock{width:100%;text-align:left;padding:8px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text-2);font-size:12px;font-weight:600}.admin-lock.on{background:var(--accent-soft);border-color:transparent;color:var(--accent)}.main{flex:1;padding:34px 40px 70px;min-width:0}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:26px;flex-wrap:wrap}.page-head h1{font-family:var(--font-display);font-size:30px;font-weight:500;letter-spacing:.005em;line-height:1.12}.page-head .sub{color:var(--text-2);margin-top:5px;font-size:13px}.sub{color:var(--text-2);font-size:13px}.card{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px}.card:has(>table.tbl){overflow-x:auto}button,.btn{font:inherit;cursor:pointer;border-radius:11px;padding:9px 16px;font-weight:600;font-size:13.5px;background:var(--surface);color:var(--text);border:1px solid var(--border);transition:filter .15s,background .15s,border-color .15s,color .15s}button:hover{filter:brightness(.98)}button:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--ink);border-color:var(--ink);color:#f6f5f1;box-shadow:0 6px 18px #23232029}.btn-primary:hover{background:var(--ink-hover);filter:none}.btn-danger{background:var(--red);border-color:var(--red);color:#fff}.btn-green{background:var(--green);border-color:var(--green);color:#fff}.btn-ghost{background:transparent;border-color:var(--border);color:var(--text-2)}.btn-ghost:hover{color:var(--text);background:var(--surface-2);filter:none}.btn-sm{padding:5px 11px;font-size:12.5px;border-radius:9px}select,input[type=date],input[type=number],input[type=text],textarea{font:inherit;padding:9px 13px;border:1px solid var(--border);border-radius:11px;background:var(--surface);color:var(--text);outline:none;transition:border-color .15s,box-shadow .15s}select:focus,input:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}label.field{display:block;font-weight:600;font-size:11px;color:var(--text-3);text-transform:uppercase;letter-spacing:.09em;margin-bottom:7px}.badge{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:600;padding:3px 9px;border-radius:999px;letter-spacing:.04em}.badge.mo1{background:var(--accent-soft);color:var(--accent)}.badge.mo2{background:var(--violet-soft);color:var(--violet)}.badge.incharge,.badge.pending{background:var(--amber-soft);color:var(--amber)}.badge.approved{background:var(--green-soft);color:var(--green)}.badge.rejected{background:var(--red-soft);color:var(--red)}table.tbl{width:100%;border-collapse:collapse}table.tbl th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;color:var(--text-3);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap}table.tbl td{padding:12px;border-bottom:1px solid var(--hairline)}table.tbl tr:last-child td{border-bottom:none}table.tbl tr:hover td{background:var(--surface-2)}.tabs{display:flex;gap:8px;background:transparent;border:none;padding:0;width:fit-content}.tabs button{border:1px solid transparent;background:var(--surface-2);padding:8px 18px;border-radius:999px;color:var(--text-2);font-weight:500;font-size:13px}.tabs button:hover{color:var(--text);filter:none;background:#edece7}.tabs button.on{background:var(--surface);color:var(--text);font-weight:600;border-color:var(--border);box-shadow:var(--shadow)}.roster-wrap{overflow-x:auto;border-radius:var(--radius)}.roster-grid{display:grid;grid-template-columns:92px repeat(7,minmax(172px,1fr));gap:8px;min-width:1200px}.rg-head{font-weight:600;font-size:10.5px;text-align:center;padding:8px 4px 4px;color:var(--text-3);text-transform:uppercase;letter-spacing:.08em}.rg-head .d{font-size:14px;color:var(--text);font-weight:700;letter-spacing:0;text-transform:none}.rg-shift-label{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;font-weight:700;font-size:12.5px;padding:8px}.rg-shift-label .hrs{font-weight:500;font-size:11px;color:var(--text-3)}.shift-cell{background:var(--surface);border:1px solid var(--hairline);border-radius:13px;padding:9px;display:flex;flex-direction:column;gap:4px;min-height:100px;box-shadow:var(--shadow)}.shift-cell.short{border-color:#dcb4a8;background:#fbf6f4}.shift-cell .meta{display:flex;justify-content:space-between;font-size:9.5px;color:var(--text-3);font-weight:700;letter-spacing:.06em;text-transform:uppercase;margin-bottom:2px}.staff-chip{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:500;background:var(--surface-2);border:1px solid var(--hairline);border-radius:9px;padding:4px 9px}.staff-chip .lvl{font-size:9px;font-weight:700;color:var(--text-3);letter-spacing:.04em}.staff-chip.ic{background:var(--amber-soft);border-color:#e8ddc2}.staff-chip.leave-pending{background:var(--amber-soft);border-color:var(--amber);outline:1.5px solid var(--amber)}.staff-chip .flag{margin-left:auto;font-size:10px;font-weight:700;color:var(--amber)}.modal-mask{position:fixed;inset:0;background:#20201c73;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:grid;place-items:center;z-index:50;padding:20px}.modal{background:var(--surface);border-radius:20px;box-shadow:var(--shadow-lift);width:560px;max-width:100%;max-height:85vh;display:flex;flex-direction:column}.modal .m-head{padding:20px 24px 14px;border-bottom:1px solid var(--hairline)}.modal .m-head h3{font-family:var(--font-display);font-size:19px;font-weight:500}.modal .m-body{padding:16px 24px;overflow-y:auto}.modal .m-foot{padding:14px 24px;border-top:1px solid var(--hairline);display:flex;justify-content:flex-end;gap:8px}.cand-row{display:flex;align-items:center;gap:10px;padding:10px 13px;border:1px solid var(--hairline);border-radius:12px;margin-bottom:6px;cursor:pointer;transition:border-color .12s,background .12s}.cand-row:hover{border-color:var(--accent)}.cand-row.sel{border-color:var(--accent);background:var(--accent-soft)}.cand-row .load{margin-left:auto;text-align:right;font-size:11.5px;color:var(--text-2)}.oncall-chip{margin-top:5px;padding:4px 9px;border-radius:9px;font-size:11.5px;font-weight:600;border:1px dashed var(--teal);color:var(--teal);background:var(--teal-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ic-on{background:var(--amber-soft);border-color:transparent;color:var(--amber);font-weight:700}.ic-off{background:transparent;border-color:var(--border);color:var(--text-3)}.ic-off:hover{color:var(--text)}.staff-picker,.staff-picker .sp-input-wrap{position:relative}.staff-picker input{width:100%;padding-right:34px}.staff-picker .sp-caret{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--text-3);pointer-events:none;font-size:11px}.staff-picker .sp-clear{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:none;background:transparent;padding:4px 7px;font-size:11px;color:var(--text-3);border-radius:6px}.staff-picker .sp-clear:hover{background:var(--surface-2);color:var(--text)}.sp-list{position:absolute;z-index:30;top:calc(100% + 5px);left:0;right:0;background:var(--surface);border:1px solid var(--hairline);border-radius:13px;box-shadow:var(--shadow-lift);max-height:280px;overflow-y:auto;padding:5px}.sp-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 11px;border-radius:9px;cursor:pointer;font-size:13px}.sp-item.hi{background:var(--accent-soft)}.sp-item.sel .sp-name{font-weight:700;color:var(--accent)}.sp-item .sp-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sp-item .sp-badges{display:flex;gap:4px;flex-shrink:0}.sp-empty{padding:14px;text-align:center;color:var(--text-3);font-size:12.5px}.fc{--fc-border-color: var(--hairline);--fc-page-bg-color: transparent;--fc-neutral-bg-color: var(--surface-2);--fc-today-bg-color: var(--accent-soft);font-size:13px}.fc .fc-toolbar-title{font-family:var(--font-display);font-size:21px;font-weight:500}.fc .fc-button{background:var(--surface);border:1px solid var(--border);color:var(--text-2);border-radius:999px;padding:7px 14px;font-weight:600;font-size:13px;box-shadow:none}.fc .fc-button:hover{background:var(--surface-2);color:var(--text);border-color:var(--border)}.fc .fc-button:focus,.fc .fc-button:active{box-shadow:0 0 0 3px var(--accent-soft)!important}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background:var(--ink);border-color:var(--ink);color:#f6f5f1}.fc .fc-button:disabled{background:var(--surface-2);color:var(--text-3);border-color:var(--hairline)}.fc .fc-col-header-cell-cushion{color:var(--text-3);font-weight:600;font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;padding:9px 4px;text-decoration:none}.fc .fc-daygrid-day-number{color:var(--text-2);font-weight:600;font-size:12px;padding:6px 8px;text-decoration:none}.fc .fc-day-today .fc-daygrid-day-number{color:var(--accent);font-weight:800}.fc .fc-daygrid-day{cursor:pointer;transition:background .12s}.fc .fc-daygrid-day:hover{background:var(--surface-2)}.fc .fc-daygrid-day-frame{min-height:86px}.fc .fc-event{border:none;background:transparent;margin:1px 4px 3px;cursor:pointer}.fc .fc-daygrid-event-harness{margin-top:1px}.fc .fc-scrollgrid{border-radius:13px;overflow:hidden}.cal-ev{font-size:10.5px;font-weight:600;line-height:1.35;padding:3px 6px 4px;border-radius:8px;overflow:hidden;color:var(--text-2);background:var(--surface-2)}.cal-ev .ce-head{display:flex;align-items:center;gap:5px;white-space:nowrap}.cal-ev .cdot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.cal-ev.m{background:var(--copper-soft)}.cal-ev.m .cdot{background:var(--copper)}.cal-ev.e{background:var(--accent-soft)}.cal-ev.e .cdot{background:var(--accent)}.cal-ev.n{background:var(--violet-soft)}.cal-ev.n .cdot{background:var(--violet)}.cal-ev .warn{color:var(--red);font-weight:800}.cal-ev .cnum{margin-left:auto;font-weight:700;color:var(--text)}.cal-ev .ce-names{margin-top:2px;display:flex;flex-direction:column;gap:1px}.cal-ev .ce-n{font-size:10px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cal-ev .ce-n .star{font-size:8.5px}.cal-ev .ce-n .hrs6{font-weight:700;color:var(--violet);font-size:8.5px}.cal-ev .ce-oncall{margin-top:2px;font-size:9.5px;font-weight:600;color:var(--teal);border-top:1px dashed rgba(63,112,87,.35);padding-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.day-shift{border:1px solid var(--hairline);border-radius:13px;padding:12px 14px;margin-bottom:10px}.day-shift .ds-head{display:flex;align-items:baseline;gap:8px;margin-bottom:8px}.day-shift .ds-head b{font-size:13.5px}.day-shift .ds-head .hrs{font-size:11.5px;color:var(--text-3)}.day-shift .ds-chips{display:flex;flex-wrap:wrap;gap:5px}.shift-row{display:grid;grid-template-columns:1fr 80px 80px 80px 70px 80px;gap:10px;align-items:center;margin-bottom:8px}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}.stat{padding:18px 20px}.stat .n{font-family:var(--font-display);font-size:28px;font-weight:500;letter-spacing:-.01em}.stat .l{color:var(--text-3);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.09em;margin-top:2px}.empty{text-align:center;color:var(--text-3);padding:44px 0}.toast{position:fixed;bottom:24px;right:24px;z-index:60;background:var(--ink);color:#f4f3ef;padding:13px 19px;border-radius:13px;box-shadow:var(--shadow-lift);font-weight:500;font-size:13px;max-width:380px}.warn-list{background:var(--amber-soft);border:1px solid #e8ddc2;border-radius:13px;padding:13px 17px;margin-top:14px;font-size:12.5px;color:#6d5622}.gate{position:fixed;inset:0;z-index:100;background:var(--bg);display:grid;place-items:center;padding:24px}.gate-card{width:340px;max-width:100%;background:var(--surface);border:1px solid var(--hairline);border-radius:22px;box-shadow:var(--shadow-lift);padding:40px 34px 34px;display:flex;flex-direction:column;align-items:center;text-align:center;animation:gate-in .35s ease}@keyframes gate-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.gate-mark{width:46px;height:46px;border-radius:14px;background:var(--ink);color:#f4f3ef;display:grid;place-items:center;font-size:21px;margin-bottom:16px}.gate-title{font-family:var(--font-display);font-size:24px;font-weight:600;color:var(--text)}.gate-sub{color:var(--text-3);font-size:13px;margin:6px 0 22px}.gate-card input{width:100%;text-align:center;font-size:15px;letter-spacing:.12em;padding:11px 14px;margin-bottom:12px}.gate-card input.err{border-color:var(--red);animation:gate-shake .3s}@keyframes gate-shake{0%,to{transform:translate(0)}25%{transform:translate(-6px)}75%{transform:translate(6px)}}.gate-error{color:var(--red);font-size:12px;font-weight:600;margin:-4px 0 10px}.gate-card .btn-primary{width:100%;padding:11px 16px}.fade-enter-active,.fade-leave-active{transition:opacity .25s}.fade-enter-from,.fade-leave-to{opacity:0}@media(max-width:880px){html,body{overflow-x:hidden}#app{flex-direction:column}.shift-row{grid-template-columns:repeat(3,1fr);row-gap:6px;margin-bottom:14px}.shift-row input[type=text]{grid-column:1 / -1}table.tbl td,.tabs button{white-space:nowrap}.sidebar{width:100%;height:auto;position:sticky;top:0;z-index:40;flex-direction:column;border-right:none;border-bottom:1px solid var(--hairline)}.sidebar .brand{padding:14px 18px 8px;font-size:18px}.sidebar nav{flex-direction:row;overflow-x:auto;padding:0 12px 10px;gap:4px;-webkit-overflow-scrolling:touch;scrollbar-width:none}.sidebar nav::-webkit-scrollbar{display:none}.sidebar a{flex-shrink:0;padding:8px 12px;font-size:13px}.sidebar .foot{margin:0;padding:0 12px 10px}.sidebar .foot div{display:none}.admin-lock{width:auto}.main{padding:18px 14px 60px}.page-head{align-items:flex-start;flex-direction:column}.page-head h1{font-size:24px}.fc .fc-toolbar{flex-wrap:wrap;gap:8px}.fc .fc-toolbar-title{font-size:17px}.fc .fc-daygrid-day-frame{min-height:64px}.cal-ev{font-size:9.5px;padding:2px 4px 3px}.cal-ev .ce-n{font-size:8.5px}.cal-ev .ce-oncall{font-size:8px}.modal{width:100%}.toast{left:14px;right:14px;bottom:14px;max-width:none}}
